4.4 KiB
4.4 KiB
Claude Code 调用方法总结
核心调用方式
Hermes 通过 terminal 工具调用 Claude Code,有两种模式:
模式一:Print Mode(推荐,适合绝大多数任务)
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 交互模式(适合超长任务)
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 # 临时输出目录(如果需要写入)
常见坑点
- 不写
--dangerously-skip-permissions→ 文件写入被阻塞,任务卡住 - 命令行参数直接传任务(
claude -p "任务")→ 特殊字符(括号、引号)引发 shell 转义错误 - max-turns 太小 → 任务没跑完就超时,建议复杂任务设 25-30
- 用管道不用参数 →
echo '任务' | claude -p print比claude -p "任务"更可靠 - 环境变量
ANTHROPIC_API_KEY→ Claude Code 需要在 settings.json 或环境变量中配置认证
认证状态检查
claude auth status --text
完整模板
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。