mcpField
C
code-agent

code-agent

github.com/aws-samples开发19739 次安装3 周前更新
代码仓库

关于 code-agent

code-agent 是一个自主编码 Agent,面向需要在现有代码库中完成端到端开发任务的人。它会探索工作区、规划步骤、实现代码,并运行与迭代以验证结果。

主要功能

  1. 01探索代码库并了解上下文
  2. 02拆分任务并跟踪待办事项
  3. 03自主实现并迭代代码
  4. 04运行测试并验证结果
  5. 05跨会话保留文件与对话

适用场景

  1. 01在多文件项目中实现需求
  2. 02重构现有代码库
  3. 03修复故障并运行测试
  4. 04分析上传的源文件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aws-samples/sample-strands-agent-with-agentcore --skill code-agent

安装后在 Claude Code 中输入/code-agent确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

DESIGN.md
IMPLEMENT.md
REVIEW.md

详细介绍

代码 Agent

一款自主编码 Agent。它不只会按需编写代码,还会分析问题、制定自己的计划、阅读现有代码库以了解上下文、迭代实现解决方案,并在完成前验证结果是否有效。

给定一个目标后,它会:

  • 探索工作区,了解其中已有的内容
  • 将任务拆分为多个步骤,并通过待办清单进行跟踪
  • 实现、运行并迭代,直到结果正确
  • 只有在遇到真正需要决策的节点时才提问,而不是每个小步骤都提问

像向一位能力出众的工程师说明需求那样向它描述:说清楚你想实现什么,而不是该怎么做。

代码 Agent 与代码解释器

代码 Agent代码解释器
性质自主 Agent(Claude Code)沙盒执行环境
最适合多文件项目、重构、测试套件快速脚本、数据分析、原型开发
文件持久性所有文件都会自动同步到 S3,可通过工作区工具访问/mnt/workspace 中的文件会在解释器重启后保留
会话状态文件和对话会在不同会话间保留变量会在单个解释器会话中保留;工作区文件会在聊天会话期间保留
自主性独立规划、编写、运行并迭代由你编写代码,它负责执行
适用场景需要工程师端到端解决问题时需要运行某段特定代码时

执行环境

代码 Agent 在一个隔离容器中运行,该容器专用于当前会话。它的文件系统、运行中的进程和本地端口与你自己的环境完全隔离——不要尝试通过浏览器或其他工具访问其中的路径或本地服务。

每次代码 Agent 任务开始前,用户上传的会话文件都会从规范的 Workspace inputs/ 前缀同步过来,并可在 inputs/<filename> 下使用。将 inputs/ 视为只读目录;生成的文件应放在代码 Agent 工作区的其他位置。

每次调用 code_agent 都必须包含 workspace_paths。传入任务所需的确切 inputs/<filename> 路径;如果任务不使用会话附件,则传入 []。如果所需文件 尚未同步,任务会在执行前失败;不要让代码 Agent 重建缺失的源文件。

相信代码 Agent 的推理能力和自主性——不仅要委派实现,也要委派测试、验证和迭代。只有当它遇到无法自行解决的实际限制时才介入;遇到这种情况时,应向用户说明,并共同决定如何处理。

你作为协调者的角色

你负责指明方向并验证结果。Agent 负责探索、实现,并在遇到真正需要决策的节点时向你确认。

相信 Agent 能交付成果。不要过度规定如何执行——专注于要实现什么。对于复杂任务,应将工作拆分为多个阶段,并在各轮之间把控方向。尽早向用户说明关键设计决策,然后自主执行。

你能带来的独特价值

代码 Agent 可以读取整个工作区,但无法访问工作区之外的内容。这正是你能发挥价值的地方。

你的工作是补充 Agent 无法自行获取的信息:

  • 用户意图——澄清含糊的需求,转达权衡决策,确认优先级
  • 外部背景——API 文档、库的更新日志、网络搜索结果、其他技能的发现
  • 跨会话连续性——工作区中没有的早期对话上下文

你不应该做的事:

  • 彻底追踪代码库中的错误,并把现成的解决方案交给 Agent
  • 在委派前预先梳理出需要修改的文件
  • 替 Agent 做它应该做的调查

阅读文件抽查 Agent 的输出没有问题。但花时间阅读 10 个文件、亲自诊断问题,再把已解决的任务交给 Agent,则不应该。那是 Agent 的工作。

责任划分
由你(编排器)提供代码 Agent 自行发现
用户想要什么——目标、约束、偏好如何实现——代码库结构、现有模式、设计决策
Agent 无法获取的外部上下文——API 文档、用户需求、npm/registry 信息工作区中的内部上下文——文件布局、依赖项、编码约定
已确定的决策——框架选择、范围边界实现决策——变量命名、模块结构、错误处理策略

当代码 Agent 遇到仅凭代码库无法解决的需求层面问题(例如“这应该是公开的还是内部的?”、“应该使用哪个身份验证提供方?”)时,它会提出问题。这是正确的做法——请确定答案并反馈给它。不要试图预先回答所有可能的问题;让 Agent 在确实需要指导时提出问题。


智能委派——根据复杂度调整处理方式

目标是以最小阻力交付尽可能好的结果。关键在于你(编排器)与代码 Agent 如何协作,而不只是发出请求后就不再跟进。

一次一个。 代码 Agent 以单个进程的形式在一个工作区中运行。始终等当前调用完成后再发起下一次调用。绝不要并行发起 code_agent 调用——它们会相互冲突并产生错误结果。

注意超时。 每次代码 Agent 调用的实际时限约为 30 分钟。对于大型任务,应将其拆分为有明确重点的阶段(探索 → 实现 → 测试),而不是一次提交庞大的请求。如果任务可能超时,请主动拆分,不要等到出现超时错误。

简单任务——一次调用直接委派:
code_agent(task="修复 src/config.ts 第 42 行的拼写错误:'recieve' → 'receive'",
  workspace_paths=[],
  task_complexity="low")
中等任务——明确范围,让 Agent 自行规划:
code_agent(task="为 /api/users 端点添加输入验证。
  验证电子邮件格式和必填字段。添加测试。",
  workspace_paths=[],
  task_complexity="medium")
复杂任务——拆分为多个阶段,并在每轮之间引导:
# 第 1 轮:探索并规划
code_agent(task="探索身份验证的工作方式,并提出添加 JWT 的方案。
  暂时不要修改文件。", workspace_paths=[], task_complexity="high")

# 审查 Agent 返回的计划——方案是否合理?

# 第 2 轮:实现
code_agent(task="使用 httpOnly Cookie 实现 JWT 中间件。",
  workspace_paths=[])

# 第 3 轮:集成
code_agent(task="将中间件应用到路由。排除 /api/public。",
  workspace_paths=[])

# 第 4 轮:验证
code_agent(task="运行完整测试套件并修复所有失败项。",
  workspace_paths=[])

# → 向用户报告

请自行判断。委派的复杂度应与任务复杂度相匹配。简单工作不要过度编排,但对于涉及多个文件的复杂更改,也不要发出请求后就不再跟进。

多轮 Agent 交互

对于复杂任务,编排器和代码 Agent 通常会自然地来回协作。这个过程会自动进行——用户无需参与每一轮:

第 1 轮:探索 → Agent 返回调查结果和建议的计划
第 2 轮:实现核心功能 → Agent 返回结果
第 3 轮:修复第 2 轮发现的问题 → Agent 继续迭代
第 4 轮:运行测试 → 全部通过
→ 向用户报告:“已添加 JWT 身份验证。更改了 4 个文件,12 项测试通过。”

用户可以全程实时查看终端进度。只有在出现代码 Agent 无法仅凭代码库解决的实际设计决策时,才会请用户参与。

仅在必要时指出关键决策点

在深入实施之前,先检查是否存在只有用户才能决定的真正歧义:

  • 架构选择:“REST 还是 GraphQL?”“Redis 还是 DynamoDB?”
  • 范围取舍:“这应该影响现有数据,还是只影响新记录?”
  • 行为决策:“快速失败,还是优雅降级?”

如果发现此类问题,请在委派实施前询问用户。不过,大多数任务不需要这样做——如果代码库和用户请求足够清晰,直接继续即可。

重要提示:只询问必须由用户决定的问题。不要询问 Agent 能自行判断的实现细节。不要问“要不要继续?”——解决任何真正的决策点后,直接继续。


向用户汇报结果

代码 Agent 完成后,简洁地总结结果。不要转发原始代码、完整文件内容或冗长的 Agent 输出。用户可以实时看到代码 Agent 的终端活动,无需重复这些内容。

包括:

  • 更改内容及位置(说明到文件级别,不必逐行说明)
  • 验证了什么以及如何验证(概述测试结果,不要贴原始日志)
  • 做出的设计决策(任何会影响后续工作的决策)
  • 已知限制或暂缓处理的事项

不要包括:

  • 原始源代码或完整文件内容
  • 逐行差异或 Agent 的探索日志
  • 冗长的代码块,除非用户明确要求查看代码

格式示例:

更改的文件:
  - src/middleware/rateLimiter.ts — 添加限流逻辑(新文件)
  - tests/rateLimiter.test.ts — 添加 4 个测试;全部通过

验证:运行完整测试套件(42 个测试,0 个失败)

注意:目前按 IP 限流。如果以后需要按用户 ID 限流,可以替换键函数,无需修改路由。

编排流程

→ DESIGN.md — 需求收集、范围决策、权衡升级 → IMPLEMENT.md — 分步委派、过程引导、正确性验证 → REVIEW.md — 迭代审查、按复杂度确定审查深度、已知问题检查清单


会话管理

  • compact_session=True — 在长会话中开始新任务前使用。总结历史记录、节省令牌并保留上下文。
  • reset_session=True — 仅在切换到完全无关的项目时使用。清除历史记录,但保留工作区文件。
  • 继续同一任务时,两者都省略。
任务之间的上下文隔离

一个处理多个无关任务的长对话会带来问题——早先的上下文会渗入后续任务,导致细微的错误假设。切换到差异显著的任务时(例如,从修复 Bug 转向开发新功能,或从前端转向后端),请使用 compact_session=True 来总结并重置上下文。当工作性质发生变化时,这一点尤其重要,而不仅仅是编辑的文件发生变化。


何时委派,何时直接处理

委派给 code_agent直接处理
根据 GitHub issue 或功能请求进行实现解释算法的工作原理
调查代码以确定实现方案编写简短的独立代码片段
修复失败的测试或 Bug回答语法或 API 问题
重构模块不修改代码的简单代码审查
分析上传的源文件生成不涉及文件的一次性脚本
运行测试并修复失败项总结代码的作用
遵循项目规范搭建脚手架

上传的文件

用户上传的文件会自动放在工作区中:

task = "Unzip the uploaded my-project.zip and summarize the architecture."

进阶:结构化任务模板

仅当需求已经完全明确,且需要明确的验收标准时才使用此模板。对于大多数任务,使用普通描述效果更好。

<task>
  <objective>Verifiable "done" state.</objective>
  <scope>What area of the system to work within. What to leave alone.</scope>
  <context>API signatures, versions, prior research findings.</context>
  <constraints>Language version, banned dependencies, style rules.</constraints>
  <acceptance_criteria>Commands that must pass: pytest, mypy, etc.</acceptance_criteria>
</task>

UI 指南(来自 tools-config)

代码 Agent:

  • 将需要在隔离工作区中读取、编写或运行代码的任务委派出去
  • 上传的文件会自动可用 — 请勿将其编码到任务中
  • 会话状态(文件 + 上下文)会跨轮次保留
  • 长会话请使用 compact_session=True;仅在切换到无关项目时使用 reset_session=True
  • 完成后:总结哪些文件发生了更改以及关键结果(2-3 句话)

评论

支持 Markdown