CodeMind 是一个使用 Python 构建的 AI 编程助手,集成工具调用、上下文管理、可控执行与 Monaco Web IDE。支持为运行设置调用预算、检测重复操作,并通过网页取消任务和查看终止原因。
- 执行预算:默认每轮前台运行最多 30 次模型调用(含显式重试及上下文摘要)、100 次工具调用、300 秒;可通过
RunControl配置。 - 重复结果检测:连续相同工具、参数及结果,第 3 次提醒调整策略,第 4 次停止。内置邮箱/任务列表轮询豁免,可配置;结果发生变化会重置计数。
- 协作式取消:Web 停止请求传递到 Agent 循环;退避等待可立即唤醒,停止后不再发起下一次受控调用。运行中的网络请求/系统命令不会被强杀。
- 运行结果:返回终止原因、实际受控模型/工具调用次数和耗时,Web 状态接口保留最近一次结果。
- 离线回归验证:正常完成、预算耗尽、重复结果、摘要、重试、取消和 Web 状态测试。使用模拟模型响应,不消耗真实 API 额度。
这些限制覆盖前台主循环及其摘要请求,不是整个进程的总费用限额;独立后台任务、Subagent/Teammate 内部调用不纳入本轮统计,也不会被级联强杀。详见 执行控制与评测。
Code + Mind = 不只是写代码,而是理解你的代码上下文,像一个有记忆、会思考的编程伙伴。
浏览器 (Monaco 编辑器 + 聊天 + 文件树 + 终端)
↕ WebSocket + HTTP
FastAPI 服务 (web/server.py)
↕
CodeMind Agent 核心 (codemind/)
↕ Anthropic SDK 兼容
DeepSeek API (api.deepseek.com/anthropic)
用户输入 → Hooks 钩子 → Context 压缩 → System Prompt 组装
→ LLM 调用 → Tool Use 检测 → 权限门禁 → 工具执行
→ PostToolUse 钩子 → 追加结果 → 循环
简单说就是:用户说一句话,Agent 自主决定要用什么工具、怎么用、用完之后下一步干什么,直到任务完成。
| 类别 | 功能 |
|---|---|
| 文件操作 | bash 执行、读文件、写文件、编辑替换、glob 搜索 |
| 任务管理 | todo_write 待办清单、Task 持久化任务图(带依赖关系) |
| 智能体委托 | Subagent 子任务隔离执行、Teammate 自主后台协作者 |
| 记忆系统 | 文件记忆存储与索引注入;LLM 相关性筛选函数尚未接入主循环 |
| 技能加载 | 按需加载 Skill 文件、系统提示词中注入目录 |
| 上下文压缩 | 4 层管线:budget → snip → micro → summarize |
| 容错恢复 | 429 重试、529 模型降级、max_tokens 升级、prompt-too-long 响应式压缩 |
| 后台任务 | 耗时操作放入守护线程异步执行 |
| 定时调度 | 5 字段 Cron,持久化,跨会话存活 |
| 工作区隔离 | git worktree,每个任务独立分支 |
| MCP 协议 | 延迟绑定外部工具(mcp__server__tool 命名) |
| 权限管线 | 3 道门禁:拒绝列表 → 模式匹配 → 工作区边界 |
| Hook 系统 | UserPromptSubmit、PreToolUse、PostToolUse、Stop |
- Monaco 编辑器:VS Code 同款编辑引擎,语法高亮,多语言支持
- 聊天面板:WebSocket 消息推送(非逐 token 流式生成)
- 文件树:浏览工作区,点击打开文件,自动识别语言
- 终端面板:工具执行日志实时输出
- 工作区切换:支持原生文件夹选择器,随时切换项目
- Python 3.11+
- DeepSeek API Key(platform.deepseek.com 注册即可)
git clone https://github.com/HJGisfh/codemind.git
cd codemind
# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 安装
pip install -e .
# 配置 API Key
cp .env.example .env
# 编辑 .env,填入你的 DeepSeek API Keycodemind
# 或者: python -m codemind.cli
CodeMind >> 列出这个项目里的所有 Python 文件
CodeMind >> 为重构创建一个待办清单
CodeMind >> 写一个 Flask API 的单元测试codemind-web
# 或者: python web/server.py
# 浏览器打开 http://localhost:8080codemind/
├── codemind/ # Agent 核心包
│ ├── cli.py # 命令行入口
│ ├── loop.py # Agent Loop(while True → LLM → tools)
│ ├── dispatch.py # 工具调度 + 文本提取
│ ├── context.py # 全局共享状态
│ ├── prompt.py # 系统提示词组装
│ ├── hooks.py # Hook 注册 / 触发
│ ├── permission.py # 3 道门禁权限管线
│ ├── memory.py # 记忆存储 + LLM 相关性筛选
│ ├── compact.py # 4 层上下文压缩
│ ├── recovery.py # 容错恢复
│ ├── subagent.py # 子代理 + 协作者 + 消息总线
│ ├── background.py # 后台任务分发
│ └── tools/ # 27 个内置工具
│ ├── bash.py # Shell 执行
│ ├── file_ops.py # 文件读写编辑 + 安全路径
│ ├── todo.py # 会话待办清单
│ ├── task_crud.py # 持久化任务图
│ ├── skill.py # 技能加载
│ ├── mcp.py # MCP 客户端
│ ├── cron.py # Cron 定时调度
│ └── worktree.py # Git 工作区隔离
├── web/ # Web IDE 前端
│ ├── server.py # FastAPI + WebSocket 服务
│ └── static/
│ ├── index.html # IDE 外壳
│ ├── css/style.css # VS Code 风格暗色主题
│ └── js/app.js # Monaco + 聊天 + 文件树控制器
├── docs/ # 设计文档
├── tests/ # 测试
├── pyproject.toml # 项目元数据
└── README.md
为什么使用显式 Agent Loop? 将模型调用、工具执行、权限检查和上下文管理分开组织,便于检查控制流,并独立测试预算限制、重复检测和取消行为。
为什么选 DeepSeek? DeepSeek 提供 Anthropic 兼容的 API 端点(/anthropic),可以直接用 Anthropic SDK,同时成本远低于 Claude。修改 ANTHROPIC_BASE_URL 和 MODEL_ID 两个环境变量就能切换到任何兼容服务。
为什么 Monaco + 原生 JS? 没有 React/Vue 构建工具链。Monaco 从 CDN 加载,前端 ~400 行原生 JavaScript——够做一个能用的 IDE,也短到可以一口气读完。
为什么文件即数据库? Task、Memory、Cron Jobs、Transcripts 全都是文件。没有数据库依赖,用任何文本编辑器就能查看 Agent 状态,重启不丢数据。