资讯动态

claude-code-base-action 源码解读:Claude Agent SDK 如何驱动整个 Action

发布时间:2026/10/16 15:14:57 来源:尧图企业网站定制
【免费下载链接】claude-code-base-actionThis repo is a mirror of the contents of base-action in https://github.com/anthropics/claude-code-action.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-base-action点击查看免费下载如果你想在 GitHub Actions 里跑 Claude Codeclaude-code-base-action是最值得精读的一份源码它用不到千行 TypeScript把 Claude Agent SDK 从库变成了整个 CI 流水线里真正的发动机。本文带你完整走一遍它的执行链路——从action.yml的输入声明到 src/index.ts 的编排入口再到 src/run-claude-sdk.ts 中那个逐条消费 SDK 消息流的query()调用看懂 Claude Agent SDK 是如何驱动整个 Action 运转的。 项目全景三个文件看懂架构这个项目是一个薄封装thin wrapper它自己不做信任边界只负责安装环境 → 校验配置 → 组装参数 → 调用 SDK 执行 → 输出结果。理解它只需要抓住三层层次文件职责声明层action.yml定义所有 inputs/outputs并用 composite steps 装好 Node、Bun、Claude Code 可执行文件编排层src/index.ts把 7 个模块按顺序串成流水线最终设置 Action outputs引擎层src/run-claude-sdk.ts调用 Claude Agent SDK 的query()消费消息流并判定成败依赖极少核心就一个package.json 中的anthropic-ai/claude-agent-sdk。这正是SDK 驱动整个 Action的题眼——没有spawnCLI 去解析终端输出而是通过 SDK 的异步迭代器拿到结构化的消息流。 执行流程从 Action 输入到 SDK 调用先看 action.yml 的runs.steps它是一个 composite action依次做四件事Setup Node.js可缓存 npm 依赖Install Bun运行时版本锁定 1.3.14Install Dependenciesbun install --productionInstall Claude Code安装官方 CLI 到~/.local/bin/claude内置 3 次重试与 120 秒超时最后一步bun run ${GITHUB_ACTION_PATH}/src/index.ts才真正进入 TypeScript 世界。src/index.ts 的run()按固定顺序执行 6 个环节setupWorkloadIdentity()—— 若配置了身份联邦先换取 OIDC tokensrc/workload-identity.tsvalidateEnvironmentVariables()—— 按所选 Provider直连 API / Bedrock / Vertex / Foundry校验凭证报错信息非常清晰见 src/validate-env.tssetupClaudeCodeSettings()—— 把用户传入的settingsJSON 字符串或文件路径合并进~/.claude/settings.json见 src/setup-claude-code-settings.tsinstallPlugins()—— 逐个校验并安装插件市场与插件见 src/install-plugins.tspreparePrompt()—— 统一提示词来源见 src/prepare-prompt.tsrunClaude()—— 核心执行解析参数后交给 SDK注意第 1 步的注释逻辑workload identity 必须在环境变量校验之前完成因为 CLI 需要拿到身份 token 文件后才能认证。失败路径同样周到catch里先补写execution_file输出再setFailedfinally里清理 token 材料避免凭证残留。 核心引擎run-claude-sdk.ts 如何消费 SDK 消息流这是全文最关键的文件。看 src/run-claude.ts它只是个 7 行的转发器——先parseSdkOptions(options)再调用runClaudeWithSdk()。真正的逻辑在 src/run-claude-sdk.ts 的runClaudeWithSdk()中精华是这一段for await (const message of query({ prompt, options: sdkOptions })) { messages.push(message); // sanitizeSdkOutput 决定日志里打印什么 if (message.type result) break; }Claude Agent SDK 的query()是一个异步生成器它会以SDKMessage序列直播 Claude Code 会话的全过程system.init初始化、assistant回复与工具调用、result最终结果。这个 Action 对消息流做了四件关键的事安全脱敏sanitizeSdkOutput()L117-L160默认只打印初始化和结果摘要避免日志泄露密钥仅当show_full_output: true时才输出完整 JSON收集全量消息所有消息写入 execution-file.ts 生成的claude-execution-output.json位于RUNNER_TEMP成为execution_file输出供后续 step 解析提取 session_id从system.init消息中取出暴露为session_id输出可用--resume续聊严格判定成败subtype success !is_error才算成功若超出maxTurns、或声明了--json-schema却没拿到structured_output都会直接抛错让 CI 标红L241-L278还有个耐人寻味的细节拿到result后显式breakL198-L210。注释解释了原因——某些 PR 触发的场景中 SDK 迭代器不会自行关闭for-await会一直挂到 workflow 超时导致任务实际成功却被标为 cancelled。这是典型的读源码才知道的坑。⚙️ 参数工程parse-sdk-options.ts 的隐藏功力parse-sdk-options.ts 负责把用户写在claude_args里的 shell 字符串翻译成 SDK 的Options对象细节很多shell 元字符转义(、)、|、等字符对shell-quote是控制符直接解析会把--allowedTools Bash(gh:*)悄悄截成Bash等于放大权限。源码用 Unicode 私用区字符做临时转义再还原L35-L55累积型 flagallowed-tools、mcp-config等支持多值用\x00分隔累积多 MCP 配置合并内联 JSON 的mcpServers会被 merge 成一份见mergeMcpConfigs()L67-L110环境变量瘦身主动删掉ACTIONS_ID_TOKEN_REQUEST_URL等变量防止 Claude 会话自己签发 OIDC tokenL286-L294系统提示词策略默认使用 SDK 内置的claude_codepreset用户可用--system-prompt全量替换或用--append-system-prompt追加L296-L312 免密钥认证workload-identity.ts 的优雅设计不想在 secrets 里存 API key这个模块给出了完整答案它获取 GitHub OIDC tokenJWT写入RUNNER_TEMP下的文件并导出ANTHROPIC_IDENTITY_TOKEN_FILE再由 Claude Code CLI 用联邦规则换取短生命周期访问令牌。两个工程亮点值得新手学习后台刷新GitHub OIDC token 有效期短所以每 4 分钟重写一次 token 文件stop()时清理L178-L194凭据缓存目录指纹配置目录名内嵌联邦输入的 SHA-256 指纹防止同一 job 里不同 step 误复用上一条链路的 tokenL80-L109配套的指数退避重试封装在 src/retry.ts默认 3 次、5 秒起步、20 秒封顶。 四个 Outputs 如何被下游消费action.yml 声明了 4 个输出全部来自 src/index.ts 的core.setOutput输出用途conclusionsuccess/failure决定后续 step 是否执行execution_file执行日志 JSON 路径可用jq或脚本提取 Claude 的最终答复structured_output传了--json-schema时的结构化结果适合机器读取session_id用于--resume恢复会话典型玩法见 README 的 PR 评审示例先判断conclusion success再从execution_file里反向查找type result的消息拿到评审内容发评论。examples/issue-triage.yml 则展示了issue 打开 → Claude 打标签的完整场景prompt_file里把任务拆成 5 步并用allowed_tools精确圈定可用工具。 本地调试与测试入口想动手验证仓库自带完整测试设施./test-local.sh基于act在本地模拟 GitHub Actions 跑整个 Action需ANTHROPIC_API_KEYbun test单元/集成测试覆盖参数解析、提示词准备、SDK 执行等如 test/run-claude-sdk.test.ts 用mock.module伪造 SDK 消息流验证异常时仍会落盘执行日志test/mcp-test/一个最小 MCP serversimple-mcp-server.ts配合test-mcp-local.sh调试 MCP 集成架构约定可参考 CLAUDE.md构建命令、Provider 认证矩阵开发规范见 CONTRIBUTING.md。 小结从这份源码能学到的 3 件事SDK 优先于 CLI 解析用 Agent SDK 的异步消息流替代跑 CLI 正则解析 stdout是构建可靠自动化最省心的路线安全默认值日志默认脱敏、环境变量主动瘦身、插件名白名单校验src/install-plugins.ts——防御性设计贯穿每个模块失败也要留证据无论 SDK 抛错还是流程中断执行日志都会尽力落盘并通过execution_file输出让事后排查有迹可循读完这一百多行的index.ts加上两百行的run-claude-sdk.ts你不仅能彻底理解 Claude Agent SDK 如何驱动整个 Action也拿到了一个可以照抄的GitHub Action AI SDK工程模板。赞分享【免费下载链接】claude-code-base-actionThis repo is a mirror of the contents of base-action in https://github.com/anthropics/claude-code-action.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-base-action点击查看免费下载相关推荐claude-code-base-action集成 Claude Code 的强大工作流工具claude code base action集成 Claude Code 的强大工作流工具 项目介绍 在现代软件开发中自动化工作流是提高效率、减少人为错误Claude Code 跑进 CIAnthropic 官方 claude-code-base-action 完全概览与核心能力Claude Code 跑进 CIAnthropic 官方 claude code base action 完全概览与核心能力 想在 GitHub ActioClaude Code Security Reviewer基于 Claude 的 AI 驱动 PR 安全审查 GitHub Action 完整指南Claude Code Security Reviewer基于 Claude 的 AI 驱动 PR 安全审查 GitHub Action 完整指南 Claud应用安全SASTAI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑