From 9a9c263e88d86c0514357a3ebd74bd4a720d5333 Mon Sep 17 00:00:00 2001 From: weishen Date: Mon, 13 Apr 2026 10:44:16 +0800 Subject: [PATCH] Auto-sync --- Hermes/yunzhi/claude-code调用方法总结.md | 139 +++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 Hermes/yunzhi/claude-code调用方法总结.md diff --git a/Hermes/yunzhi/claude-code调用方法总结.md b/Hermes/yunzhi/claude-code调用方法总结.md new file mode 100644 index 00000000..07c186ea --- /dev/null +++ b/Hermes/yunzhi/claude-code调用方法总结.md @@ -0,0 +1,139 @@ +# Claude Code 调用方法总结 + +## 核心调用方式 + +Hermes 通过 `terminal` 工具调用 Claude Code,有两种模式: + +### 模式一:Print Mode(推荐,适合绝大多数任务) + +```bash +cat << 'TASK_END' | claude -p print \ + --dangerously-skip-permissions \ + --add-dir ~/.claude/skills/fireworks-tech-graph \ + --add-dir ~/docker/agent-base/src \ + --max-turns 30 \ + 2>&1 +[这里写任务描述] +TASK_END +``` + +### 模式二:TMUX 交互模式(适合超长任务) + +```bash +tmux new-session -d -s claude-work -x 140 -y 40 +tmux send-keys -t claude-work 'claude --dangerously-skip-permissions' Enter +sleep 5 && tmux send-keys -t claude-work Enter # 信任目录 +sleep 3 && tmux send-keys -t claude-work Down && tmux send-keys -t claude-work Enter # 权限确认 +sleep 2 && tmux send-keys -t claude-work 'cat /tmp/task.txt' Enter # 从文件读取任务 +``` + +--- + +## 关键参数说明 + +| 参数 | 作用 | +|------|------| +| `--dangerously-skip-permissions` | 跳过文件写入、网络等操作的确认提示 | +| `--add-dir <路径>` | 添加可访问目录,可多次使用 | +| `--max-turns N` | 最大迭代次数,建议 20-30 | +| `--bare` | 跳过插件/MCP/CLAUDE.md 加载,最快启动 | +| `--model <模型>` | 指定模型,如 `sonnet`、`opus` | +| `--output-format json` | 结构化 JSON 输出 | +| `-p print` | 非交互单次执行模式 | + +--- + +## 任务文本(stdin)写法 + +### 基础结构 + +``` +1. 告诉 Claude Code 要做什么 +2. 告诉它用哪个 skill +3. 告诉它目标文件输出到哪里 +4. 如果需要格式转换(如 SVG → PNG),明确写出转换命令 +5. 最后要求它输出"done: 文件路径" +``` + +### 示例:完整任务文本 + +``` +使用 fireworks-tech-graph 技能,生成 ~/docker/agent-base 项目的 ER 关系图,展示 Session、Message、ToolCall 三个模型及字段关联,Style 用 dark tech。先生成 SVG 保存到 /tmp/agent-base-er.svg,然后用 cairosvg 转换为 PNG 保存到 /tmp/agent-base-er.png,1920px 宽度。完成后输出 "done: /tmp/agent-base-er.png" +``` + +--- + +## Skill 加载方法 + +Claude Code 自动扫描 `--add-dir` 目录下的 `SKILL.md` 和 `.claude/skills/` 目录。 + +**加载技能只需要:`--add-dir <技能所在目录>`** + +``` +--add-dir ~/.claude/skills/fireworks-tech-graph +``` + +SKILL.md 中定义的触发条件(自然语言模式匹配)会在对话中自动激活。 + +--- + +## 项目目录设定 + +``` +--add-dir ~/docker/agent-base/src # 项目源码 +--add-dir ~/.claude/skills/fireworks-tech-graph # 技能 +--add-dir /tmp # 临时输出目录(如果需要写入) +``` + +--- + +## 常见坑点 + +1. **不写 `--dangerously-skip-permissions`** → 文件写入被阻塞,任务卡住 +2. **命令行参数直接传任务**(`claude -p "任务"`)→ 特殊字符(括号、引号)引发 shell 转义错误 +3. **max-turns 太小** → 任务没跑完就超时,建议复杂任务设 25-30 +4. **用管道不用参数** → `echo '任务' | claude -p print` 比 `claude -p "任务"` 更可靠 +5. **环境变量 `ANTHROPIC_API_KEY`** → Claude Code 需要在 settings.json 或环境变量中配置认证 + +--- + +## 认证状态检查 + +```bash +claude auth status --text +``` + +--- + +## 完整模板 + +```bash +cat << 'TASK_END' | claude -p print \ + --dangerously-skip-permissions \ + --add-dir ~/.claude/skills/[技能名] \ + --add-dir [项目源码路径] \ + --add-dir /tmp \ + --max-turns 30 \ + 2>&1 +[具体任务描述] +TASK_END +``` + +输出后检查 stdout 是否包含 `done: 文件路径`,然后用 `MEDIA:/路径` 将文件发送给用户。 + +--- + +## delegate_task vs terminal 调用 Claude Code 的区别 + +`delegate_task` 工具虽然有 `acp_command` 参数,但它只能控制子 AIAgent 的构造参数,子 AIAgent 仍然是 Hermes 自身的 agent 实例,通过 API 调用 LLM。**只有 provider 为 `copilot-acp` 时**,acp 参数才会真正建立外部 CLI 通道。 + +**关键区别**: + +| | delegate_task | terminal 调用 claude -p | +|--|--------------|------------------------| +| 本质 | Hermes 子 agent(API 调用) | 外部 Claude Code 进程 | +| Skill 感知 | 无 | 能识别 SKILL.md | +| 工具能力 | Hermes 工具集 | Claude Code 自身工具集 | +| 适用场景 | 通用推理任务 | 需要 Claude Code 技能的特定任务 | + +**结论**:当任务需要调用 Claude Code 的 skill(如 fireworks-tech-graph)时,应使用 `terminal` 调用 `claude -p`,而非 `delegate_task`。