代码生成
Themis 可以为你编写代码——实现功能、修复 bug、编写测试或重构——并在 GitHub 上以 Pull Request 的形式提交更改。只需用自然语言描述你想要的内容即可。
工作原理
- 你描述想要的更改(通过聊天、Telegram 或 Teams)
- Themis 克隆你的项目,创建分支并进行更改
- 它运行代码检查、提交、推送并创建 PR
- 你在 GitHub 上审查 PR
整个过程在后台运行。你可以在聊天中看到实时进度更新,并且可以在 Themis 编码的同时继续工作。
触发代码生成
通过聊天
直接向 Agent 提出请求:
“实现一个带头像上传和时区选择器的用户个人资料页面”
“修复 reviews 控制器中的 N+1 查询”
“为 AutomationSchedulerJob 添加单元测试”
Agent 会识别这是一个代码任务并启动生成流程。
通过 Telegram 或 Teams
在频道中或私信中 @ 机器人:
@themis implement pagination for the activity feed
@themis fix the broken date formatting in the activity feed
通过 Linear(Issue 分配)
将 Linear issue 分配给 Themis 机器人,它会自动开始实现。对于工程团队来说,这是最自然的工作流——像分配给其他团队成员一样分配工单即可。
- 在 Linear 中创建或打开一个描述清晰的 issue
- 将其分配给 Themis
- Themis 读取 issue 标题、描述和任何关联的上下文,然后开始编码
这与你现有的迭代工作流无缝衔接——梳理 issue,将简单的任务分配给 Themis,然后审查返回的 PR。
通过自动化
事件触发的自动化也可以生成代码。例如,你可以设置一个 Linear → Issue 已分配 的自动化,每当 issue 被分配给机器人时触发代码生成。
你会看到什么
实时进度
聊天中会出现一个进度条,显示每个步骤:
排队中 → 克隆中 → 分析中 → 生成中 → 测试中 → 检查中 → 推送中 → 创建 PR 中
每个步骤在进行时显示加载动画,完成后显示勾号。如果代码检查发现警告,你会看到警告图标。如果出现任何失败,会显示错误信息。
在收件箱中
代码生成记录出现在收件箱的 信号 > 代码 下。每条记录显示:
- 标题 和项目名称
- 分支名称 和进度状态
- PR 链接(创建后显示)
- 变更文件 — 创建、修改和删除的文件数量
- AI 生成的摘要 — 解释更改内容和动机
- 推理日志 — 展开查看 Agent 的思考过程、工具调用和决策
- 元数据 — 耗时、成本、提交信息
在已有分支上工作
默认情况下,Themis 会为每次代码生成创建一个新分支。你也可以要求它在已有分支上工作:
“在
feat/user-profiles分支上,为注册表单添加邮箱验证”
这对迭代开发很有用——先发起一个初始请求,审查 PR,然后在同一分支上要求后续更改。
分支命名
分支遵循 themis/<type>/<description> 的命名约定:
| 类型 | 使用场景 |
|---|---|
feat | 新功能 |
fix | Bug 修复 |
refactor | 代码重构 |
chore | 维护任务 |
docs | 文档 |
test | 测试新增 |
底层原理
隔离的工作树
每次代码生成都在独立的 git worktree 中运行——一个仓库的隔离副本。这意味着:
- 不会与你的工作树冲突。 Themis 不会触碰你的本地检出或任何进行中的分支。
- 并行生成是安全的。 多个代码生成可以在不同分支上同时运行,互不干扰。
- 干净的环境。 每个工作树从基础分支的全新检出开始,因此不会有之前运行留下的残余状态。
PR 创建后(或生成失败后),工作树会自动清理。
为什么不用 GitHub MCP?
你可能会好奇为什么 Themis 不使用 GitHub MCP 服务器通过 API 创建文件和提交。工作树方案是刻意选择的,而非基于 API 的文件操作:
- Agent 拥有真实的开发环境。 它可以读取完整的项目结构、运行工具、检查导入和理解上下文——而不是通过 API 盲目地创建文件。
- 标准 git 工作流。 更改通过
git add、git commit、git push进行——与开发者使用的流程完全一致。这意味着正确的 diff、blame 历史和合并行为。 - 安全沙箱。 Agent 在受控 shell 访问的沙箱环境中运行。危险操作(在工作树外删除文件、权限提升、访问密钥)会被安全钩子拦截。
- 技能发现。 Agent 在编写任何代码之前,会读取你项目的
.claude/目录、CLAUDE.md和所有技能文件,以了解你的编码规范。
Agent 安全
在代码生成过程中,Agent 在严格的约束下运行:
- 路径限制 — 只能修改工作树目录内的文件
- 禁止 git 操作 — 分支创建、提交和推送由任务管理,而非 Agent
- 命令拦截 —
rm -rf、chmod、向外部主机发起的curl、环境变量访问等危险操作会被拦截 - 沙箱执行 — 在生产环境(Docker)中,容器提供额外的隔离;在本地开发中,
bwrap限制文件系统访问
项目技能
如果你的项目有 .claude/ 目录并包含技能文件(如编码规范、架构指南或测试模式),Themis 会自动发现并加载它们。Agent 会读取:
CLAUDE.md— 项目级别的指令、技术栈、编码规范.claude/skills/— 专业知识文件(如测试模式、Hotwire 规范)- 可移植技能 — 来自
lib/skills/的跨项目技能会被复制到工作树中供 Agent 使用
这确保生成的代码遵循你项目的特定模式——而非通用的模板代码。
使用技巧
明确具体需求。 “添加搜索功能”过于模糊。”使用 pg_trgm 为对话列表页面添加全文搜索,并用 Stimulus 控制器实现防抖输入”会获得更好的结果。
如果生成的代码不符合预期,查看推理日志。它会展示 Agent 的具体理解以及做出某些决策的原因。
对于复杂功能,在同一分支上迭代。先完成核心实现,审查后再要求改进。每次后续请求都基于之前的更改。
状态参考
| 状态 | 含义 |
|---|---|
| Pending | 排队等待处理 |
| Cloning | 设置 git worktree |
| Analyzing | 读取项目上下文和技能 |
| Generating | 编写代码更改 |
| Testing | 运行测试(如已配置) |
| Linting | 检查代码风格 |
| Pushing | 提交并推送到远程仓库 |
| Creating PR | 在 GitHub 上创建 Pull Request |
| Completed | PR 创建成功 |
| No Changes | Agent 判断不需要代码更改 |
| Failed | 发生错误 — 请查看错误信息 |