跳到主要内容

Claude Code

将编码任务委托给 Claude Code(Anthropic 的 CLI 代理)。用于构建功能、重构代码、PR 审查和迭代式编码。需要安装 claude CLI。

技能元数据

来源捆绑(默认安装)
路径skills/autonomous-ai-agents/claude-code
版本2.2.0
作者Hermes Agent + Teknium
许可证MIT
标签Coding-Agent, Claude, Anthropic, Code-Review, Refactoring, PTY, Automation
相关技能codex, hermes-agent, opencode

参考:完整 SKILL.md

信息

以下是 Hermes 在触发此技能时加载的完整技能定义。这是技能激活时代理看到的指令。

Claude Code — Hermes 编排指南

通过 Hermes 终端将编码任务委托给 Claude Code(Anthropic 的自主编码代理 CLI)。Claude Code v2.x 可以读取文件、编写代码、运行 shell 命令、生成子代理以及自主管理 git 工作流。

前提条件

  • 安装: npm install -g @anthropic-ai/claude-code
  • 认证: 运行一次 claude 以登录(Pro/Max 用户通过浏览器 OAuth,或设置 ANTHROPIC_API_KEY
  • 控制台认证: claude auth login --console 用于 API 密钥计费
  • SSO 认证: claude auth login --sso 用于企业版
  • 检查状态: claude auth status(JSON 格式)或 claude auth status --text(人类可读格式)
  • 健康检查: claude doctor — 检查自动更新程序和安装健康状况
  • 版本检查: claude --version(需要 v2.x+)
  • 更新: claude updateclaude upgrade

两种编排模式

Hermes 以两种根本不同的方式与 Claude Code 交互。请根据任务选择。

模式 1:打印模式 (-p) — 非交互式(大多数任务的首选)

打印模式运行一次性任务,返回结果并退出。不需要 PTY。没有交互式提示。这是最干净的集成路径。

terminal(command="claude -p 'Add error handling to all API calls in src/' --allowedTools 'Read,Edit' --max-turns 10", workdir="/path/to/project", timeout=120)

何时使用打印模式:

  • 一次性编码任务(修复错误、添加功能、重构)
  • CI/CD 自动化和脚本编写
  • 使用 --json-schema 进行结构化数据提取
  • 管道输入处理(cat file | claude -p "analyze this"
  • 任何不需要多轮对话的任务

打印模式跳过所有交互式对话框 — 没有工作区信任提示,没有权限确认。这使其成为自动化的理想选择。

模式 2:通过 tmux 的交互式 PTY — 多轮会话

交互式模式为您提供完整的对话式 REPL,您可以发送后续提示、使用斜杠命令并实时观察 Claude 的工作。需要 tmux 编排。

# Start a tmux session
terminal(command="tmux new-session -d -s claude-work -x 140 -y 40")

# Launch Claude Code inside it
terminal(command="tmux send-keys -t claude-work 'cd /path/to/project && claude' Enter")

# Wait for startup, then send your task
# (after ~3-5 seconds for the welcome screen)
terminal(command="sleep 5 && tmux send-keys -t claude-work 'Refactor the auth module to use JWT tokens' Enter")

# Monitor progress by capturing the pane
terminal(command="sleep 15 && tmux capture-pane -t claude-work -p -S -50")

# Send follow-up tasks
terminal(command="tmux send-keys -t claude-work 'Now add unit tests for the new JWT code' Enter")

# Exit when done
terminal(command="tmux send-keys -t claude-work '/exit' Enter")

何时使用交互式模式:

  • 多轮迭代工作(重构 → 审查 → 修复 → 测试循环)
  • 需要人工介入决策的任务
  • 探索性编码会话
  • 当您需要使用 Claude 的斜杠命令时(/compact, /review, /model

PTY 对话框处理(交互式模式的关键)

Claude Code 在首次启动时最多会显示两个确认对话框。您必须通过 tmux send-keys 处理这些对话框:

对话框 1:工作区信任(首次访问目录)

❯ 1. Yes, I trust this folder    ← DEFAULT (just press Enter)
2. No, exit

处理: tmux send-keys -t <session> Enter — 默认选择是正确的。

对话框 2:绕过权限警告(仅在使用 --dangerously-skip-permissions 时)

❯ 1. No, exit                    ← DEFAULT (WRONG choice!)
2. Yes, I accept

处理: 必须先向下导航,然后按 Enter:

tmux send-keys -t <session> Down && sleep 0.3 && tmux send-keys -t <session> Enter

稳健的对话框处理模式

# Launch with permissions bypass
terminal(command="tmux send-keys -t claude-work 'claude --dangerously-skip-permissions \"your task\"' Enter")

# Handle trust dialog (Enter for default "Yes")
terminal(command="sleep 4 && tmux send-keys -t claude-work Enter")

# Handle permissions dialog (Down then Enter for "Yes, I accept")
terminal(command="sleep 3 && tmux send-keys -t claude-work Down && sleep 0.3 && tmux send-keys -t claude-work Enter")

# Now wait for Claude to work
terminal(command="sleep 15 && tmux capture-pane -t claude-work -p -S -60")

注意: 在首次接受某个目录的信任后,信任对话框将不再出现。只有权限对话框会在每次使用 --dangerously-skip-permissions 时重复出现。

CLI 子命令

子命令用途
claude启动交互式 REPL
claude "query"使用初始提示启动 REPL
claude -p "query"打印模式(非交互式,完成后退出)
cat file | claude -p "query"将内容通过管道作为 stdin 上下文传入
claude -c继续此目录中最近的对话
claude -r "id"按 ID 或名称恢复特定会话
claude auth login登录(添加 --console 用于 API 计费,--sso 用于企业版)
claude auth status检查登录状态(返回 JSON;使用 --text 获取人类可读格式)
claude mcp add <name> -- <cmd>添加 MCP 服务器
claude mcp list列出已配置的 MCP 服务器
claude mcp remove <name>移除 MCP 服务器
claude agents列出已配置的代理
claude doctor对安装和自动更新程序运行健康检查
claude update / claude upgrade将 Claude Code 更新至最新版本
claude remote-control启动服务器以从 claude.ai 或移动应用控制 Claude
claude install [target]安装原生构建版本(stable、latest 或特定版本)
claude setup-token设置长期有效的身份验证令牌(需要订阅)
claude plugin / claude plugins管理 Claude Code 插件
claude auto-mode检查自动模式分类器配置

结构化 JSON 输出

terminal(command="claude -p 'Analyze auth.py for security issues' --output-format json --max-turns 5", workdir="/project", timeout=120)

返回包含以下内容的 JSON 对象:

{
"type": "result",
"subtype": "success",
"result": "The analysis text...",
"session_id": "75e2167f-...",
"num_turns": 3,
"total_cost_usd": 0.0787,
"duration_ms": 10276,
"stop_reason": "end_turn",
"terminal_reason": "completed",
"usage": { "input_tokens": 5, "output_tokens": 603, ... },
"modelUsage": { "claude-sonnet-4-6": { "costUSD": 0.078, "contextWindow": 200000 } }
}

关键字段session_id 用于恢复会话,num_turns 用于代理循环计数,total_cost_usd 用于支出跟踪,subtype 用于成功/错误检测(successerror_max_turnserror_budget)。

流式 JSON 输出

对于实时令牌流式传输,请将 stream-json--verbose 一起使用:

terminal(command="claude -p 'Write a summary' --output-format stream-json --verbose --include-partial-messages", timeout=60)

返回换行符分隔的 JSON 事件。使用 jq 过滤以获取实时文本:

claude -p "Explain X" --output-format stream-json --verbose --include-partial-messages | \
jq -rj 'select(.type == "stream_event" and .event.delta.type? == "text_delta") | .event.delta.text'

流事件包括带有 attemptmax_retrieserror 字段(例如 rate_limitbilling_error)的 system/api_retry

双向流式传输

对于实时输入输出流式传输:

claude -p "task" --input-format stream-json --output-format stream-json --replay-user-messages

--replay-user-messages 在 stdout 上重新发出用户消息以进行确认。

管道输入

# Pipe a file for analysis
terminal(command="cat src/auth.py | claude -p 'Review this code for bugs' --max-turns 1", timeout=60)

# Pipe multiple files
terminal(command="cat src/*.py | claude -p 'Find all TODO comments' --max-turns 1", timeout=60)

# Pipe command output
terminal(command="git diff HEAD~3 | claude -p 'Summarize these changes' --max-turns 1", timeout=60)

用于结构化提取的 JSON Schema

terminal(command="claude -p 'List all functions in src/' --output-format json --json-schema '{\"type\":\"object\",\"properties\":{\"functions\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"required\":[\"functions\"]}' --max-turns 5", workdir="/project", timeout=90)

从 JSON 结果中解析 structured_output。Claude 在返回之前会根据 schema 验证输出。

会话延续

# Start a task
terminal(command="claude -p 'Start refactoring the database layer' --output-format json --max-turns 10 > /tmp/session.json", workdir="/project", timeout=180)

# Resume with session ID
terminal(command="claude -p 'Continue and add connection pooling' --resume $(cat /tmp/session.json | python3 -c 'import json,sys; print(json.load(sys.stdin)[\"session_id\"])') --max-turns 5", workdir="/project", timeout=120)

# Or resume the most recent session in the same directory
terminal(command="claude -p 'What did you do last time?' --continue --max-turns 1", workdir="/project", timeout=30)

# Fork a session (new ID, keeps history)
terminal(command="claude -p 'Try a different approach' --resume <id> --fork-session --max-turns 10", workdir="/project", timeout=120)

用于 CI/脚本编写的裸模式

terminal(command="claude --bare -p 'Run all tests and report failures' --allowedTools 'Read,Bash' --max-turns 10", workdir="/project", timeout=180)

--bare 跳过钩子、插件、MCP 发现和 CLAUDE.md 加载。启动速度最快。需要 ANTHROPIC_API_KEY(跳过 OAuth)。

要在裸模式中选择性加载上下文:

要加载的内容标志
系统提示附加内容--append-system-prompt "text"--append-system-prompt-file path
设置--settings <file-or-json>
MCP 服务器--mcp-config <file-or-json>
自定义代理--agents '<json>'

过载时的回退模型

terminal(command="claude -p 'task' --fallback-model haiku --max-turns 5", timeout=90)

当默认模型过载时,自动回退到指定模型(仅限打印模式)。

完整 CLI 标志参考

会话与环境

标志效果
-p, --print非交互式一次性模式(完成后退出)
-c, --continue恢复当前目录中最近的对话
-r, --resume <id>按 ID 或名称恢复特定会话(如果没有 ID,则使用交互式选择器)
--fork-session恢复时,创建新的会话 ID 而不是重用原始 ID
--session-id <uuid>为对话使用特定的 UUID
--no-session-persistence不将会话保存到磁盘(仅限打印模式)
--add-dir <paths...>授予 Claude 访问其他工作目录的权限
-w, --worktree [name].claude/worktrees/<name> 处的隔离 git worktree 中运行
--tmux为 worktree 创建 tmux 会话(需要 --worktree
--ide启动时自动连接到有效的 IDE
--chrome / --no-chrome启用/禁用 Chrome 浏览器集成以进行 Web 测试
--from-pr [number]恢复链接到特定 GitHub PR 的会话
--file <specs...>启动时下载的文件资源(格式:file_id:relative_path

模型与性能

标志效果
--model <alias>模型选择:sonnetopushaiku,或完整名称如 claude-sonnet-4-6
--effort <level>推理深度:lowmediumhighmaxauto
--max-turns <n>限制代理循环次数(仅限打印模式;防止失控)
--max-budget-usd <n>限制 API 支出上限(美元)(仅限打印模式)
--fallback-model <model>当默认模型过载时自动回退(仅限打印模式)
--betas <betas...>在 API 请求中包含的 Beta 头信息(仅限 API 密钥用户)

权限与安全

标志效果
--dangerously-skip-permissions自动批准所有工具使用(文件写入、bash、网络等)
--allow-dangerously-skip-permissions将绕过权限作为选项启用,但不默认启用
--permission-mode <mode>defaultacceptEditsplanautodontAskbypassPermissions
--allowedTools <tools...>白名单特定工具(逗号或空格分隔)
--disallowedTools <tools...>黑名单特定工具
--tools <tools...>覆盖内置工具集("" = 无,"default" = 全部,或工具名称)

输出与输入格式

标志效果
--output-format <fmt>text(默认)、json(单个结果对象)、stream-json(换行符分隔)
--input-format <fmt>text(默认)或 stream-json(实时流式输入)
--json-schema <schema>强制输出符合 schema 的结构化 JSON
--verbose完整的逐轮输出
--include-partial-messages包含到达时的部分消息块(stream-json + 打印)
--replay-user-messages在 stdout 上重新发出用户消息(stream-json 双向)

系统提示词与上下文

标志效果
--append-system-prompt <text>追加到默认系统提示词(保留内置功能)
--append-system-prompt-file <path>将文件内容追加到默认系统提示词
--system-prompt <text>替换整个系统提示词(通常建议使用 --append)
--system-prompt-file <path>用文件内容替换系统提示词
--bare跳过钩子、插件、MCP 发现、CLAUDE.md、OAuth(最快启动)
--agents '<json>'以 JSON 形式动态定义自定义子代理
--mcp-config <path>从 JSON 文件加载 MCP 服务器(可重复)
--strict-mcp-config仅使用来自 --mcp-config 的 MCP 服务器,忽略所有其他 MCP 配置
--settings <file-or-json>从 JSON 文件或内联 JSON 加载附加设置
--setting-sources <sources>要加载的源,逗号分隔:userprojectlocal
--plugin-dir <paths...>仅为此会话从目录加载插件
--disable-slash-commands禁用所有技能/斜杠命令

调试

标志效果
-d, --debug [filter]启用调试日志记录,带有可选类别过滤器(例如 "api,hooks""!1p,!file"
--debug-file <path>将调试日志写入文件(隐式启用调试模式)

代理团队

标志效果
--teammate-mode <mode>代理团队显示方式:autoin-processtmux
--brief启用 SendUserMessage 工具用于代理到用户的通信

--allowedTools / --disallowedTools 的工具名称语法

Read                    # All file reading
Edit # File editing (existing files)
Write # File creation (new files)
Bash # All shell commands
Bash(git *) # Only git commands
Bash(git commit *) # Only git commit commands
Bash(npm run lint:*) # Pattern matching with wildcards
WebSearch # Web search capability
WebFetch # Web page fetching
mcp__<server>__<tool> # Specific MCP tool

设置与配置

设置层级(优先级从高到低)

  1. CLI 标志 — 覆盖所有内容
  2. 本地项目: .claude/settings.local.json(个人,被 git 忽略)
  3. 项目: .claude/settings.json(共享,受 git 跟踪)
  4. 用户: ~/.claude/settings.json(全局)

设置中的权限

{
"permissions": {
"allow": ["Bash(npm run lint:*)", "WebSearch", "Read"],
"ask": ["Write(*.ts)", "Bash(git push*)"],
"deny": ["Read(.env)", "Bash(rm -rf *)"]
}
}

记忆文件 (CLAUDE.md) 层级

  1. 全局: ~/.claude/CLAUDE.md — 适用于所有项目
  2. 项目: ./CLAUDE.md — 项目特定上下文(受 git 跟踪)
  3. 本地: .claude/CLAUDE.local.md — 个人项目覆盖(被 git 忽略)

在交互模式下使用 # 前缀快速添加到记忆:# Always use 2-space indentation

交互会话:斜杠命令

会话与上下文

命令用途
/help显示所有命令(包括自定义和 MCP 命令)
/compact [focus]压缩上下文以节省 token;CLAUDE.md 在压缩后保留。例如:/compact focus on auth logic
/clear清除对话历史以重新开始
/context以彩色网格可视化上下文使用情况,并提供优化建议
/cost查看 token 使用情况,包含每个模型和缓存命中率的细分
/resume切换或恢复不同的会话
/rewind回退到对话或代码中的先前检查点
/btw <question>提出侧面问题而不增加上下文成本
/status显示版本、连接性和会话信息
/todos列出对话中跟踪的行动项
/exitCtrl+D结束会话

开发与审查

命令用途
/review请求对当前更改进行代码审查
/security-review对当前更改执行安全分析
/plan [description]进入计划模式并自动开始任务规划
/loop [interval]在会话中安排重复任务
/batch为大型并行更改自动创建工作树(5-30 个工作树)

配置与工具

命令用途
/model [model]在会话中途切换模型(使用方向键调整推理力度)
/effort [level]设置推理力度:lowmediumhighmaxauto
/init创建 CLAUDE.md 文件以存储项目记忆
/memory打开 CLAUDE.md 进行编辑
/config打开交互式设置配置
/permissions查看/更新工具权限
/agents管理专用子代理(subagents)
/mcp用于管理 MCP 服务器的交互式界面
/add-dir添加额外的工作目录(对单体仓库很有用)
/usage显示计划限额和速率限制状态
/voice启用按住说话语音模式(支持 20 种语言;按住空格键录音,松开发送)
/release-notes用于选择版本发布说明的交互式选择器

自定义斜杠命令

创建 .claude/commands/<name>.md(项目共享)或 ~/.claude/commands/<name>.md(个人):

# .claude/commands/deploy.md
Run the deploy pipeline:
1. Run all tests
2. Build the Docker image
3. Push to registry
4. Update the $ARGUMENTS environment (default: staging)

用法:/deploy production$ARGUMENTS 将被替换为用户的输入。

技能(自然语言调用)

与斜杠命令(手动调用)不同,.claude/skills/ 中的技能是 Markdown 指南,当任务匹配时,Claude 会通过自然语言自动调用它们:

# .claude/skills/database-migration.md
When asked to create or modify database migrations:
1. Use Alembic for migration generation
2. Always create a rollback function
3. Test migrations against a local database copy

交互式会话:键盘快捷键

常规控制

按键操作
Ctrl+C取消当前输入或生成
Ctrl+D退出会话
Ctrl+R反向搜索命令历史
Ctrl+B将正在运行的任务置于后台
Ctrl+V将图片粘贴到对话中
Ctrl+O转录模式 — 查看 Claude 的思考过程
Ctrl+GCtrl+X Ctrl+E在外部编辑器中打开提示词
Esc Esc回退对话或代码状态 / 总结

模式切换

按键操作
Shift+Tab循环切换权限模式(正常 → 自动接受 → 计划)
Alt+P切换模型
Alt+T切换思考模式
Alt+O切换快速模式

多行输入

按键操作
\ + Enter快速换行
Shift+Enter换行(替代方式)
Ctrl+J换行(替代方式)

输入前缀

前缀操作
!直接执行 bash,绕过 AI(例如 !npm test)。单独使用 ! 可切换 shell 模式。
@引用文件/目录并支持自动补全(例如 @./src/api/
#快速添加到 CLAUDE.md 记忆(例如 # Use 2-space indentation
/斜杠命令

专业提示:"ultrathink"

在提示词中使用关键字 "ultrathink",以便在特定轮次中获得最大推理力度。无论当前的 /effort 设置如何,这都会触发最深度的思考模式。

PR 审查模式

快速审查(打印模式)

terminal(command="cd /path/to/repo && git diff main...feature-branch | claude -p 'Review this diff for bugs, security issues, and style problems. Be thorough.' --max-turns 1", timeout=60)

深度审查(交互式 + Worktree)

terminal(command="tmux new-session -d -s review -x 140 -y 40")
terminal(command="tmux send-keys -t review 'cd /path/to/repo && claude -w pr-review' Enter")
terminal(command="sleep 5 && tmux send-keys -t review Enter") # Trust dialog
terminal(command="sleep 2 && tmux send-keys -t review 'Review all changes vs main. Check for bugs, security issues, race conditions, and missing tests.' Enter")
terminal(command="sleep 30 && tmux capture-pane -t review -p -S -60")

通过编号进行 PR 审查

terminal(command="claude -p 'Review this PR thoroughly' --from-pr 42 --max-turns 10", workdir="/path/to/repo", timeout=120)

带有 tmux 的 Claude Worktree

terminal(command="claude -w feature-x --tmux", workdir="/path/to/repo")

.claude/worktrees/feature-x 创建一个隔离的 git worktree,并为其创建一个 tmux 会话。如果可用,会使用 iTerm2 原生窗格;添加 --tmux=classic 以使用传统 tmux。

并行 Claude 实例

同时运行多个独立的 Claude 任务:

# Task 1: Fix backend
terminal(command="tmux new-session -d -s task1 -x 140 -y 40 && tmux send-keys -t task1 'cd ~/project && claude -p \"Fix the auth bug in src/auth.py\" --allowedTools \"Read,Edit\" --max-turns 10' Enter")

# Task 2: Write tests
terminal(command="tmux new-session -d -s task2 -x 140 -y 40 && tmux send-keys -t task2 'cd ~/project && claude -p \"Write integration tests for the API endpoints\" --allowedTools \"Read,Write,Bash\" --max-turns 15' Enter")

# Task 3: Update docs
terminal(command="tmux new-session -d -s task3 -x 140 -y 40 && tmux send-keys -t task3 'cd ~/project && claude -p \"Update README.md with the new API endpoints\" --allowedTools \"Read,Edit\" --max-turns 5' Enter")

# Monitor all
terminal(command="sleep 30 && for s in task1 task2 task3; do echo '=== '$s' ==='; tmux capture-pane -t $s -p -S -5 2>/dev/null; done")

CLAUDE.md — 项目上下文文件

Claude Code 会自动从项目根目录加载 CLAUDE.md。使用它来持久化项目上下文:

# Project: My API

## Architecture
- FastAPI backend with SQLAlchemy ORM
- PostgreSQL database, Redis cache
- pytest for testing with 90% coverage target

## Key Commands
- `make test` — run full test suite
- `make lint` — ruff + mypy
- `make dev` — start dev server on :8000

## Code Standards
- Type hints on all public functions
- Docstrings in Google style
- 2-space indentation for YAML, 4-space for Python
- No wildcard imports

具体明确。 不要使用“编写好代码”,而应使用“JS 使用 2 空格缩进”或“测试文件名称使用 .test.ts 后缀”。具体的指令可以节省修正循环的时间。

规则目录(模块化 CLAUDE.md)

对于拥有许多规则的项目,使用规则目录而不是一个巨大的 CLAUDE.md:

  • 项目规则: .claude/rules/*.md — 团队共享,由 git 跟踪
  • 用户规则: ~/.claude/rules/*.md — 个人,全局

规则目录中的每个 .md 文件都会作为附加上下文加载。这比将所有内容塞进单个 CLAUDE.md 更清晰。

自动记忆

Claude 会自动将学到的项目上下文存储在 ~/.claude/projects/<project>/memory/ 中。

  • 限制: 每个项目 25KB 或 200 行
  • 这与 CLAUDE.md 分开——它是 Claude 自己关于项目的笔记,跨会话累积

自定义子代理

.claude/agents/(项目)、~/.claude/agents/(个人)中定义专用代理,或通过 --agents CLI 标志(会话)定义:

代理位置优先级

  1. .claude/agents/ — 项目级,团队共享
  2. --agents CLI 标志 — 会话特定,动态
  3. ~/.claude/agents/ — 用户级,个人

创建代理

# .claude/agents/security-reviewer.md
---
name: security-reviewer
description: Security-focused code review
model: opus
tools: [Read, Bash]
---
You are a senior security engineer. Review code for:
- Injection vulnerabilities (SQL, XSS, command injection)
- Authentication/authorization flaws
- Secrets in code
- Unsafe deserialization

调用方式:@security-reviewer review the auth module

通过 CLI 动态代理

terminal(command="claude --agents '{\"reviewer\": {\"description\": \"Reviews code\", \"prompt\": \"You are a code reviewer focused on performance\"}}' -p 'Use @reviewer to check auth.py'", timeout=120)

Claude 可以协调多个代理:“使用 @db-expert 优化查询,然后使用 @security 审计更改。”

Hooks — 事件自动化

.claude/settings.json(项目)或 ~/.claude/settings.json(全局)中配置:

{
"hooks": {
"PostToolUse": [{
"matcher": "Write(*.py)",
"hooks": [{"type": "command", "command": "ruff check --fix $CLAUDE_FILE_PATHS"}]
}],
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{"type": "command", "command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -q 'rm -rf'; then echo 'Blocked!' && exit 2; fi"}]
}],
"Stop": [{
"hooks": [{"type": "command", "command": "echo 'Claude finished a response' >> /tmp/claude-activity.log"}]
}]
}
}

全部 8 种 Hook 类型

Hook触发时机常见用途
UserPromptSubmit在 Claude 处理用户提示之前输入验证、日志记录
PreToolUse在工具执行之前安全门禁、阻止危险命令(exit 2 = 阻止)
PostToolUse在工具完成后自动格式化代码、运行 linter
Notification在权限请求或等待输入时桌面通知、警报
Stop当 Claude 完成响应时完成日志记录、状态更新
SubagentStop当子代理(subagent)完成时代理编排
PreCompact在清除上下文内存之前备份会话转录内容
SessionStart当会话开始时加载开发上下文(例如,git status

Hook 环境变量

变量内容
CLAUDE_PROJECT_DIR当前项目路径
CLAUDE_FILE_PATHS正在修改的文件
CLAUDE_TOOL_INPUT工具参数(JSON 格式)

安全 Hook 示例

{
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{"type": "command", "command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf|git push.*--force|:(){ :|:& };:'; then echo 'Dangerous command blocked!' && exit 2; fi"}]
}]
}

MCP 集成

为数据库、API 和服务添加外部工具服务器:

# GitHub integration
terminal(command="claude mcp add -s user github -- npx @modelcontextprotocol/server-github", timeout=30)

# PostgreSQL queries
terminal(command="claude mcp add -s local postgres -- npx @anthropic-ai/server-postgres --connection-string postgresql://localhost/mydb", timeout=30)

# Puppeteer for web testing
terminal(command="claude mcp add puppeteer -- npx @anthropic-ai/server-puppeteer", timeout=30)

MCP 作用域

标志作用域存储位置
-s user全局(所有项目)~/.claude.json
-s local当前项目(个人).claude/settings.local.json(被 git 忽略)
-s project当前项目(团队共享).claude/settings.json(由 git 跟踪)

打印/CI 模式中的 MCP

terminal(command="claude --bare -p 'Query database' --mcp-config mcp-servers.json --strict-mcp-config", timeout=60)

--strict-mcp-config 会忽略除 --mcp-config 指定的 MCP 服务器之外的所有 MCP 服务器。

在聊天中引用 MCP 资源:@github:issue://123

MCP 限制与调优

  • 工具描述: 每个服务器的工具描述和服务器指令上限为 2KB
  • 结果大小: 默认有上限;使用 maxResultSizeChars 注解允许大型输出最多达到 50万 个字符
  • 输出 Token: export MAX_MCP_OUTPUT_TOKENS=50000 — 限制来自 MCP 服务器的输出,以防止上下文泛滥
  • 传输方式: stdio(本地进程)、http(远程)、sse(服务器发送事件)

监控交互式会话

阅读 TUI 状态

# Periodic capture to check if Claude is still working or waiting for input
terminal(command="tmux capture-pane -t dev -p -S -10")

留意以下指示符:

  • 底部的 = 等待你的输入(Claude 已完成或正在提问)
  • 行 = Claude 正在 actively 使用工具(读取、写入、运行命令)
  • ⏵⏵ bypass permissions on = 状态栏显示权限模式
  • ◐ medium · /effort = 状态栏中当前的努力程度级别
  • ctrl+o to expand = 工具输出被截断(可以交互式展开)

上下文窗口健康状态

在交互模式下使用 /context 查看上下文使用情况的彩色网格。关键阈值:

  • < 70% — 正常运行,精度完整
  • 70-85% — 精度开始下降,考虑使用 /compact
  • > 85% — 幻觉风险显著增加,使用 /compact/clear

环境变量

变量效果
ANTHROPIC_API_KEY用于身份验证的 API 密钥(OAuth 的替代方案)
CLAUDE_CODE_EFFORT_LEVEL默认努力程度:lowmediumhighmaxauto
MAX_THINKING_TOKENS限制思考 token(设置为 0 以完全禁用思考)
MAX_MCP_OUTPUT_TOKENS限制来自 MCP 服务器的输出(默认值各异;例如设置为 50000
CLAUDE_CODE_NO_FLICKER=1启用备用屏幕渲染以消除终端闪烁
CLAUDE_CODE_SUBPROCESS_ENV_SCRUB从子进程中剥离凭据以确保安全

成本与性能技巧

  1. 在打印模式中使用 --max-turns 以防止无限循环。大多数任务从 5-10 次开始。
  2. 使用 --max-budget-usd 设置成本上限。注意:创建系统提示缓存最低需要约 $0.05。
  3. 对于简单任务使用 --effort low(更快、更便宜)。对于复杂推理使用 highmax
  4. 对于 CI/脚本编写使用 --bare 以跳过插件/hook 发现开销。
  5. 使用 --allowedTools 仅限制为所需的工具(例如,审查时仅允许 Read)。
  6. 在交互式会话中,当上下文变大时使用 /compact
  7. 当你只需要分析已知内容时,管道输入 而不是让 Claude 读取文件。
  8. 对于简单任务使用 --model haiku(更便宜),对于复杂的多步骤工作使用 --model opus
  9. 在打印模式中使用 --fallback-model haiku 以优雅地处理模型过载。
  10. 为不同的任务开始新会话 — 会话持续 5 小时;新鲜的上下文更高效。
  11. 在 CI 中使用 --no-session-persistence 以避免在磁盘上累积保存的会话。

陷阱与注意事项

  1. 交互模式需要 tmux — Claude Code 是一个完整的 TUI 应用程序。在 Hermes 终端中仅使用 pty=true 虽然可行,但 tmux 提供了用于监控的 capture-pane 和用于输入的 send-keys,这对于编排至关重要。
  2. --dangerously-skip-permissions 对话框默认为“No, exit” — 你必须发送 Down(下箭头)然后 Enter(回车)来接受。打印模式(-p)会完全跳过此步骤。
  3. --max-budget-usd 的最小值约为 $0.05 — 仅系统提示缓存创建就会消耗这么多费用。设置更低的值会立即报错。
  4. --max-turns 仅适用于打印模式 — 在交互会话中会被忽略。
  5. Claude 可能使用 python 而非 python3 — 在没有 python 符号链接的系统上,Claude 的 bash 命令首次尝试时会失败,但它会自动修正。
  6. 会话恢复需要相同的目录--continue 会查找当前工作目录最近的会话。
  7. --json-schema 需要足够的 --max-turns — Claude 必须在生成结构化输出之前读取文件,这需要多个回合。
  8. 信任对话框每个目录仅出现一次 — 仅在首次使用时出现,之后会被缓存。
  9. 后台 tmux 会话会持续存在 — 完成后务必使用 tmux kill-session -t <name> 进行清理。
  10. 斜杠命令(如 /commit)仅在交互模式下有效 — 在 -p 模式下,请用自然语言描述任务。
  11. --bare 跳过 OAuth — 需要设置 ANTHROPIC_API_KEY 环境变量或在设置中配置 apiKeyHelper
  12. 上下文退化是真实存在的 — 当上下文窗口使用率超过 70% 时,AI 输出质量会显著下降。请使用 /context 监控并主动使用 /compact 压缩上下文。

Hermes Agent 规则

  1. 单个任务优先使用打印模式(-p — 更干净,无需处理对话框,支持结构化输出
  2. 多轮交互工作使用 tmux — 这是编排 TUI 的唯一可靠方式
  3. 始终设置 workdir — 让 Claude 专注于正确的项目目录
  4. 在打印模式中设置 --max-turns — 防止无限循环和成本失控
  5. 监控 tmux 会话 — 使用 tmux capture-pane -t <session> -p -S -50 检查进度
  6. 留意 提示符 — 表示 Claude 正在等待输入(已完成或提出问题)
  7. 清理 tmux 会话 — 完成后终止会话以避免资源泄漏
  8. 向用户报告结果 — 完成后,总结 Claude 执行的操作及变更内容
  9. 不要终止运行缓慢的会话 — Claude 可能正在执行多步工作;请改为检查进度
  10. 使用 --allowedTools — 将功能限制为任务实际所需的范围