-p 到 Routines 实战Claude Code 提供了三层递进的自动化能力:本地脚本层的 -p 无头模式、代码库级的 /batch 并行迁移、云端托管的 Routines 定时任务。本教程将逐一拆解每层引擎的核心 API、输出格式、权限模型和成本控制策略,并通过一个完整的"PR 自动审查 → 代码迁移 → 夜间巡检"流水线串联三者。适合已掌握 Claude Code 基础操作、希望将其嵌入 CI/CD 或定时任务的中高级开发者。
适用人群:有 3 个月以上 Claude Code 使用经验的开发者、DevOps 工程师、技术负责人。
| 条件 | 说明 |
|---|---|
| Claude Code ≥ v2.1.63 | /batch 命令从此版本开始提供,claude --version 检查 |
| Node.js ≥ 20 | Claude Code 运行环境 |
| ANTHROPIC_API_KEY | 无头模式必须通过环境变量认证 |
| Git 仓库 | /batch 和 Routines 依赖 Git 隔离 |
| Claude Pro/Max/Team 计划 | Routines 云端执行需要付费计划 |
# 检查版本
claude --version
# 如果版本过低,更新
claude update
# 验证 API Key 可用
echo $ANTHROPIC_API_KEY | head -c 10
-p 无头模式——从终端到脚本的桥梁无头模式的本质是把 Claude Code 从交互式 REPL 变成一个可管道化的命令行工具。它由三个核心标志控制:
# 基础用法:单次提问,纯文本输出
claude -p "这个项目的认证模块做了什么?"
# 进阶:结构化 JSON 输出
claude -p "列出 auth.py 中所有函数名" --output-format json
# 高级:实时流式 JSON + 工具执行观察
claude -p "审查最近的 diff" \
--output-format stream-json \
--verbose \
--include-partial-messages
三个标志的三角关系:
-p (非交互) + --bare (确定性启动) + --output-format json (结构化输出)
-p(或 --print):进入非交互模式,接收提示词,输出结果后退出--bare:跳过所有自动发现——hooks、skills、plugins、MCP 服务器、CLAUDE.md 链。只使用你显式传入的标志。这是 CI 环境的必选项--output-format:控制返回格式(text / json / stream-json)flowchart LR
A[claude -p] --> B{--output-format?}
B -->|text| C[纯文本<br/>人类可读<br/>机器不友好]
B -->|json| D[单次JSON信封<br/>result + session_id<br/>+ cost_usd]
B -->|stream-json| E[换行分隔JSON流<br/>每个事件一行<br/>实时可观测]
C --> F[适合: 快速问答]
D --> G[适合: CI脚本<br/>结果解析]
E --> H[适合: Dashboard<br/>长时间任务监控]
格式一:text(默认)
claude -p "解释 auth.py 中 OAuth2 的实现逻辑"
# 直接输出纯文本,和终端看到的一样
格式二:json——CI 脚本的主力
claude -p "审查这个 diff 并报告问题" \
--output-format json | jq '.result'
JSON 输出包含以下关键字段:
{
"result": "审查结论文本...",
"session_id": "abc-123-def",
"total_cost_usd": 0.034,
"num_turns": 2,
"usage": {
"input_tokens": 15200,
"output_tokens": 890
}
}
成本字段 total_cost_usd 让你无需登录 Anthropic 控制台就能按调用追踪花费。
格式三:stream-json——实时可观测的杀手级格式
# 最小流式消费者:jq 过滤文本 token
claude -p "写一首关于代码的诗" \
--output-format stream-json \
--verbose \
--include-partial-messages \
| jq -rj 'select(.type == "stream_event" and .event.delta.type? == "text_delta") | .event.delta.text'
stream-json 输出的事件类型包括:
| 事件类型 | 含义 | 关键字段 |
|---|---|---|
system / session_start |
会话初始化 | session_id |
system / api_retry |
API 重试中 | attempt, max_retries, error_status |
stream_event / text_delta |
文本 token 增量 | delta.text |
tool_use |
工具调用 | tool_name, tool_input |
tool_result |
工具返回 | output |
result |
最终结果 | result, total_cost_usd |
api_retry 事件对长时间运行任务至关重要——它告诉你 Claude 正在等待速率限制重置,而不是卡死了:
{
"type": "system",
"subtype": "api_retry",
"attempt": 2,
"max_retries": 5,
"retry_delay_ms": 2000,
"error_status": 429,
"error": "rate_limit"
}
-p 模式读取 stdin,因此可以无缝接入 Unix 管道:
# 管道输入:将构建错误喂给 Claude 分析
cat build-error.log | claude -p '简洁解释这个构建错误的根因' > analysis.md
# 管道 diff:代码审查脚本
git diff main | claude -p "你是拼写检查器。找出这个 diff 中的所有拼写错误,每行格式:文件名:行号" \
--output-format json | jq -r '.result'
# 批量文件处理:为每个 Python 文件生成文档字符串
find src -name "*.py" -type f | while read file; do
claude -p "为这个文件添加 docstring: $(cat "$file")" \
--allowedTools "Edit" \
--output-format json \
| jq -r '.result' > "${file}.docstringd"
done
注意:管道 stdin 上限为 10MB(v2.1.128+)。超过时写入文件,在提示词中引用路径。
无头模式不限于单轮交互。通过 --continue 和 --resume 可以链式调用:
# 第一步:分析代码
SESSION=$(claude -p "分析 auth.py 的安全漏洞" --output-format json | jq -r '.session_id')
# 第二步:延续同一会话,要求修复
claude -p "现在修复你刚才发现的所有漏洞" \
--resume "$SESSION" \
--allowedTools "Edit,Bash,Read"
# 第三步:验证修复
claude -p "运行测试验证修复" \
--resume "$SESSION" \
--allowedTools "Bash"
--continue 延续最近一次会话,--resume <session_id> 恢复指定会话。
--bare 模式详解在 CI/CD 环境中,--bare 是你的安全网。它做了这些事:
claude --bare -p "总结这个文件" --allowedTools "Read"
| 行为 | 默认模式 | --bare 模式 |
|---|---|---|
| 认证方式 | OAuth + keychain | 仅 ANTHROPIC_API_KEY |
| 加载 Hooks | 自动发现 | 不加载 |
| 加载 Skills | 自动发现 | 不加载 |
| 加载 MCP 服务器 | 从 .mcp.json 发现 |
不加载 |
| 加载 CLAUDE.md | 链式加载 | 不加载 |
| 确定性 | 依赖本地配置 | 每台机器一致 |
在 --bare 模式下,你需要显式传入上下文:
# 传入自定义系统提示
claude --bare -p "审查代码" \
--append-system-prompt "你是一个安全审计专家"
# 传入 MCP 配置
claude --bare -p "查询数据库" \
--mcp-config '{"mcpServers":{"postgres":{...}}}'
# 传入自定义 Agent
claude --bare -p "执行任务" \
--agents '{"agents":[...]}'
当你需要 Claude 返回结构化数据而非自由文本时,使用 --json-schema:
# 提取函数列表为 JSON 数组
claude -p "提取 auth.py 中所有函数名" \
--output-format json \
--json-schema '{
"type": "object",
"properties": {
"functions": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["functions"]
}'
响应中结构化数据出现在 structured_output 字段:
# 用 jq 提取结构化输出
claude -p "提取函数名" \
--output-format json \
--json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}' \
| jq '.structured_output'
/batch 命令——代码库级并行迁移/batch 与 -p 的本质区别这两个经常被混淆,但它们服务于完全不同的场景:
| 维度 | /batch |
-p 无头模式 |
|---|---|---|
| 执行环境 | 交互式会话内的斜杠命令 | 终端一次性执行 |
| 核心用途 | 代码库级迁移和重构 | CI/CD 集成、脚本自动化 |
| 并行机制 | 自动生成多个 Agent 并行 | 通过 shell 脚本手动控制 |
| Git 集成 | 每个代理独立 Worktree,自动创建 PR | 标准 Git 操作(脚本控制) |
| 引入版本 | v2.1.63+ | 初始版本 |
选择原则:对整个项目做批量变更用 /batch;嵌入现有流水线用 -p。
/batch 三阶段执行流程flowchart TB
A["/batch migrate from lodash to native"] --> B[阶段1: 调研与规划]
B --> C[Explore Agent 扫描代码库]
C --> D[分解为 5-30 个独立单元]
D --> E{用户批准计划?}
E -->|否| F[修改计划或中止]
E -->|是| G[阶段2: 并行执行]
G --> H["Agent 1<br/>Worktree A"]
G --> I["Agent 2<br/>Worktree B"]
G --> J["Agent N<br/>Worktree N"]
H --> K[阶段3: 追踪与合并]
I --> K
J --> K
K --> L[创建独立 PR]
L --> M[聚合报告]
阶段一:调研与规划
编排器 Agent 进入规划模式,启动 Explore Agent 扫描代码库。它识别目标文件、模式和调用点,将工作分解为 5-30 个独立可合并的单元。如果找不到验证路径,会提示用户确认。
阶段二:并行执行
每个单元生成一个后台 Agent,所有 Agent 真正并行运行。每个 Agent 配置:
- isolation: "worktree":独立 Git Worktree 隔离
- 自包含提示词:包含单元范围、修改指令、验证方法
阶段三:追踪与结果
所有单元完成后,编排器生成聚合报告并创建独立 PR。
# 在 Claude Code 交互式会话中执行
> /batch 将所有 lodash 调用替换为原生等价实现
> /batch 为所有无类型函数参数添加类型注解
> /batch 将所有数据库列名从 camelCase 改为 snake_case
> /batch 将 React 组件迁移到 Vue 组合式 API
每个命令都会触发上述三阶段流程。/batch 的速度优势来自真正的并行——比逐个发送提示词快最多 10 倍。
/batch 与 /simplify 的配合/simplify 是 /batch 的自然搭档,专注于代码质量审查而非迁移:
/simplify 启动三个并行审查 Agent:
├── 代码复用 Agent → 发现重复逻辑、遗漏的抽象
├── 代码质量 Agent → 标记可读性问题、架构缺陷
└── 效率 Agent → 检测性能问题、资源浪费
推荐工作流:
实现功能 → /simplify 清理代码 → /batch 执行跨文件迁移 → CI 审查
Routines 是 2026 年 4 月推出的研究预览功能。一个 Routine 就是一组保存的 Claude Code 配置:提示词 + 仓库 + 连接器,打包后在 Anthropic 托管的云基础设施上自动运行。笔记本合上也能继续工作。
Routines 有三种触发器:
| 触发器 | 说明 | 典型场景 |
|---|---|---|
| 定时触发 | 按小时/每天/每周/一次性运行 | 每日 Issue 清理、每周文档漂移检测 |
| API 触发 | HTTP POST 到专属端点 | 部署后冒烟测试、告警自动修复 |
| GitHub 触发 | PR 打开/合并/Release 发布时 | PR 自动审查、SDK 跨语言同步 |
方式一:从 Web 界面创建
claude.ai/code/routines,点击 New routine方式二:从 CLI 创建
# 在 Claude Code 交互会话中
> /schedule
关键配置项:
Routine 配置:
提示词: "自包含的任务描述,包含成功标准"
仓库: [repo1, repo2]
环境:
网络访问: Trusted / Restricted / None
环境变量: {API_KEY: "***", SLACK_WEBHOOK: "***"}
安装脚本: "npm ci && npm run build"
连接器: [Slack, Linear, GitHub]
触发器:
- 类型: schedule
cron: "0 9 * * 1-5" # 工作日早上9点
- 类型: api
endpoint: /routines/{id}/trigger
- 类型: github
events: [pull_request.opened]
定时触发
# 每晚 2 点运行安全扫描
触发器: schedule
cron: "0 2 * * *"
提示词: "扫描最近24小时合并的PR,检查是否引入新的安全漏洞。如果有,在相关PR下留言并通知 #security Slack频道。"
# 每周一上午清理 backlog
触发器: schedule
cron: "0 9 * * 1"
提示词: "读取本周新增的 Issues,按模块打标签、分配 Owner,在 Slack 发送摘要。"
API 触发
# 部署后触发验证
curl -X POST https://api.claude.ai/routines/{id}/trigger \
-H "Authorization: Bearer $CLAUDE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "生产环境部署完成,版本 v2.3.1。请运行冒烟测试。"}'
API 触发支持传入 text 字段作为动态上下文,让同一个 Routine 可以响应不同事件。
GitHub 触发
触发器:
类型: github
事件: pull_request.opened
过滤:
仓库: myorg/backend-api
分支: "!dependabot/*" # 排除 dependabot PR
GitHub 触发器会在 PR 创建时自动克隆仓库,Claude 创建 claude/ 前缀的分支进行变更。
Routine 运行在云端,以你的身份执行操作。关键安全原则:
-p vs /batch 选择决策flowchart TD
A[需要自动化] --> B{任务范围?}
B -->|单个文件/快速问答| C[-p 无头模式]
B -->|整个代码库迁移| D[/batch 命令]
B -->|定时/事件驱动| E[Routines]
C --> F{需要持续运行?}
F -->|否| G[shell 脚本 + claude -p]
F -->|是| H[CI/CD 管道 + -p]
D --> I{需要审查后合并?}
I -->|是| J[/batch + 自动 PR]
I -->|否| K[直接提交]
E --> L{触发方式?}
L -->|定时| M[Schedule Trigger]
L -->|HTTP 调用| N[API Trigger]
L -->|Git 事件| O[GitHub Trigger]
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| CI 中审查 PR | -p + --bare |
确定性、可审计、低成本 |
| 全项目 API 迁移 | /batch |
并行 Agent、Worktree 隔离 |
| 每日 Issue 清理 | Routines + 定时触发 | 笔记本关闭也能运行 |
| 部署后健康检查 | Routines + API 触发 | 按需触发、云端执行 |
| SDK 跨语言同步 | Routines + GitHub 触发 | PR 合并自动触发 |
| 批量文件处理 | -p + shell 循环 |
灵活、可管道化 |
Hooks 是在 Claude Code 生命周期特定节点执行的脚本、HTTP 调用或 LLM 提示。它们让你在不需要修改 Claude Code 本身的情况下注入自定义逻辑。
timeline
title Claude Code 生命周期中的 Hook 事件
section 会话级
SessionStart : 会话开始时
Setup : --init-only 或 -p + --init 时
SessionEnd : 会话结束时
section 轮次级
UserPromptSubmit : 用户提交提示词后
InstructionsLoaded : CLAUDE.md 加载时
Stop : Claude 完成响应时
section 工具级
PreToolUse : 工具执行前(可阻止)
PermissionRequest : 权限弹窗时
PostToolUse : 工具成功执行后
PostToolUseFailure : 工具执行失败后
PostToolBatch : 批量工具调用完成后
section Agent 级
SubagentStart : 子 Agent 启动时
SubagentStop : 子 Agent 完成时
TaskCreated : 任务创建时
TaskCompleted : 任务完成时
总共 25+ 个 Hook 事件,覆盖了从会话启动到工具调用的每一个关键节点。
Hooks 在 .claude/settings.json 中配置:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"if": "Bash(rm *)",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh",
"args": []
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write ${CLAUDE_FILE_PATH}"
}
]
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/enhance-prompt.py"
}
]
}
]
}
}
| 类型 | 说明 | 适用场景 |
|---|---|---|
| command | 执行 Shell 命令 | 格式化、lint、阻止危险操作 |
| http | 发送 HTTP POST | 通知外部系统、审计日志 |
| prompt | 返回 LLM 提示给 Claude | 动态注入上下文、修改行为 |
| agent | 启动独立 Agent | 复杂决策、多条件判断 |
PreToolUse:安全门禁
#!/bin/bash
# .claude/hooks/block-destructive.sh
# 读取 stdin 中的 JSON 输入
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')
# 阻止 rm -rf 和 force push
if echo "$COMMAND" | grep -qE 'rm -rf|push --force|reset --hard'; then
jq -n '{
hookSpecificOutput: {
hookEventName: "PreToolUse",
permissionDecision: "deny",
permissionDecisionReason: "阻止破坏性操作: '"$COMMAND"'"
}
}'
exit 0
fi
# 不输出任何内容表示放行
PostToolUse:自动格式化
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null; npx eslint --fix \"$CLAUDE_FILE_PATH\" 2>/dev/null"
}
]
}
]
}
}
Stop:完成通知
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "terminal-notifier -title 'Claude Code' -message '任务完成' -sound default"
}
]
}
]
}
}
UserPromptSubmit:提示词增强
#!/bin/bash
# .claude/hooks/enhance-prompt.py
import json, sys
data = json.load(sys.stdin)
prompt = data.get("user_prompt", "")
# 注入项目上下文
context = """
项目上下文:
- 技术栈: Next.js 15 + TypeScript + Prisma
- 编码规范: ESLint strict, Prettier
- 测试框架: Vitest
- 分支策略: feature/* → develop → main
"""
output = {
"hookSpecificOutput": {
"hookEventName": "UserPromptSubmit",
"appendedUserPrompt": context + "\n" + prompt
}
}
json.dump(output, sys.stdout)
Setup Hook 是专门为 CI 环境设计的。配合 --init-only 标志,可以只运行初始化脚本而不启动会话:
# 只运行 Setup hooks 然后退出
claude --init-only
# 在 -p 模式中先运行 Setup 再执行任务
claude -p "运行测试" --init
# 维护模式:运行 Setup + 自动修复
claude -p "修复 lint 错误" --maintenance
Setup Hook 配置示例:
{
"hooks": {
"Setup": [
{
"hooks": [
{
"type": "command",
"command": "npm ci && npm run build && echo '环境准备完成'"
}
]
}
]
}
}
Anthropic 内部数据:Claude Code 用户批准了 93% 的权限弹窗。这意味着绝大多数弹窗只是形式——用户看都不看就点确认。Auto Mode 用一个两层 AI 分类器自动化这个过程:
flowchart TD
A[Claude Code 操作] --> B{快速过滤器<br/>单 token 分类}
B -->|明显安全| C[直接执行]
B -->|不确定| D{思维链审查<br/>深度推理}
D -->|审查通过| C
D -->|需要人工| E[弹出权限请求]
style C fill:#4caf50,color:#fff
style E fill:#f44336,color:#fff
第一层:快速过滤器——单 token 分类判断操作是否明显安全。安全的直接放行,延迟极低。
第二层:思维链审查——快速过滤器无法决定时,第二个模型进行深度推理,然后决定执行还是升级给开发者。
例外情况:涉及凭证、关键基础设施、生产部署的操作,无论分类器结论如何,仍然需要人工确认。
构建一个完整的自动化流水线,覆盖日常开发的核心环节:
-p 无头模式 + GitHub Actions)/batch 命令)创建 .github/workflows/claude-review.yml:
name: Claude PR Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Claude Code
run: npm install -g @anthropic-ai/claude-code
- name: Run Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
DIFF=$(git diff --unified=3 "$BASE_SHA"..."$HEAD_SHA")
echo "$DIFF" | claude -p \
--bare \
--output-format json \
--allowedTools "Read,Grep,Glob" \
--max-turns 5 \
"Review this diff. Flag only issues that would cause bugs or security vulnerabilities.
If there are none, say so. Keep response under 400 words." \
> review.json
- name: Post Review
run: node .github/scripts/post-review.js
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
创建 .github/scripts/post-review.js:
const fs = require('fs');
const { execSync } = require('child_process');
const review = JSON.parse(fs.readFileSync('review.json', 'utf8'));
const body = review.result || 'No review generated.';
const cost = review.total_cost_usd || 0;
// 发布 PR 评论
execSync(`gh pr comment --body "## Claude Code Review (cost: $${cost.toFixed(4)})\n\n${body}"`, {
stdio: 'inherit'
});
在交互式 Claude Code 会话中:
> /batch 将所有 REST API 路由从 Express 风格迁移到 Hono 框架
/batch 会自动:
1. 扫描所有路由文件
2. 分解为独立迁移单元(每个文件一个)
3. 在独立 Worktree 中并行执行
4. 为每个单元创建 PR
在 claude.ai/code/routines 创建:
名称: 每日安全巡检
提示词: |
1. 检查最近 24 小时合并的 PR
2. 扫描新增的依赖项是否有已知漏洞(npm audit)
3. 检查是否有硬编码的 secret 或 API key
4. 如果发现问题,在对应 PR 下留言,并通知 #security Slack 频道
5. 如果一切正常,在 #dev-ops 频道发送"安全巡检通过"
仓库: myorg/backend-api
环境: Default (Trusted network)
连接器: Slack (#security, #dev-ops), GitHub
触发器:
- 类型: schedule
cron: "0 2 * * *" # 每天凌晨 2 点
在项目根目录 .claude/settings.json 中配置:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"if": "Bash(rm *)",
"command": ".claude/hooks/gate-destructive.sh"
}
]
},
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"if": "Edit(*.env*)",
"command": ".claude/hooks/block-env-edit.sh"
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
}
]
}
],
"PermissionRequest": [
{
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/auto-permission.py"
}
]
}
]
}
}
自动权限审批脚本 .claude/hooks/auto-permission.py:
#!/usr/bin/env python3
import json, sys, os
data = json.load(sys.stdin)
tool = data.get("tool_name", "")
action = data.get("tool_input", {})
# 安全操作白名单:自动批准
SAFE_PATTERNS = {
"Read": None, # 读操作全部放行
"Grep": None, # 搜索全部放行
"Glob": None, # 文件查找全部放行
"Bash": ["git status", "git diff", "git log", "npm test", "npm run lint"],
"Edit": None, # 需要额外检查
}
decision = {"hookSpecificOutput": {"hookEventName": "PermissionRequest"}}
if tool in ("Read", "Grep", "Glob"):
decision["hookSpecificOutput"]["permissionDecision"] = "allow"
elif tool == "Bash":
cmd = action.get("command", "")
if any(cmd.startswith(safe) for safe in SAFE_PATTERNS["Bash"]):
decision["hookSpecificOutput"]["permissionDecision"] = "allow"
else:
decision["hookSpecificOutput"]["permissionDecision"] = "ask"
else:
decision["hookSpecificOutput"]["permissionDecision"] = "ask"
json.dump(decision, sys.stdout)
flowchart TB
subgraph 触发层
PR[PR 事件] --> GH[GitHub Actions]
CRON[定时调度] --> RT[Routines 云端]
API[HTTP 调用] --> RT
DEV[开发者操作] --> CC[Claude Code 交互式]
end
subgraph 执行层
GH --> HP["-p 无头模式<br/>--bare --output-format json"]
CC --> BAT["/batch 命令<br/>并行 Agent"]
RT --> CLOUD[云端 Claude Code 会话]
end
subgraph 安全层
HP --> HK["Hooks 神经系统"]
BAT --> HK
CLOUD --> HK
HK --> PTU["PreToolUse: 安全门禁"]
HK --> PRT["PermissionRequest: 自动审批"]
HK --> ATU["PostToolUse: 格式化"]
end
subgraph 输出层
HP --> JSON["JSON / stream-json"]
BAT --> PRS["独立 PR + 聚合报告"]
CLOUD --> SLACK["Slack 通知"]
CLOUD --> GHIS["GitHub Issue 评论"]
end
style HK fill:#ff9800,color:#fff
style RT fill:#9c27b0,color:#fff
# 每次调用后提取成本
claude -p "分析代码" --output-format json | jq '{cost: .total_cost_usd, turns: .num_turns}'
# 批量任务成本聚合
total=0
for file in src/*.py; do
cost=$(claude -p "审查: $(cat $file)" --output-format json | jq '.total_cost_usd')
total=$(echo "$total + $cost" | bc)
echo "$file: \$$cost"
done
echo "总计: \$$total"
| 层级 | 实践 | 原因 |
|---|---|---|
-p 模式 |
始终使用 --bare |
CI 中确保确定性 |
-p 模式 |
设置 timeout-minutes |
防止 $180 的意外账单 |
-p 模式 |
用 --allowedTools 限制工具 |
审查作业不应有 Edit 权限 |
/batch |
先在小范围测试 | 确认迁移策略正确后再全量 |
/batch |
审查每个 PR | 自动化不等于免审查 |
| Routines | 提示词自包含 | 自主运行时无人补充上下文 |
| Routines | 最小权限原则 | 只授权必需的连接器和分支 |
| Hooks | 异步 Hook 用于非关键任务 | 避免阻塞主流程 |
| 通用 | 用 --max-turns 限制轮次 |
防止无限循环 |
-p 标志完整参考-p、--bare、输出格式、会话延续[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
