Auto-sync

This commit is contained in:
2026-04-13 10:44:16 +08:00
parent c29968ff97
commit 9a9c263e88

View File

@@ -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.png1920px 宽度。完成后输出 "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 子 agentAPI 调用) | 外部 Claude Code 进程 |
| Skill 感知 | 无 | 能识别 SKILL.md |
| 工具能力 | Hermes 工具集 | Claude Code 自身工具集 |
| 适用场景 | 通用推理任务 | 需要 Claude Code 技能的特定任务 |
**结论**:当任务需要调用 Claude Code 的 skill如 fireworks-tech-graph应使用 `terminal` 调用 `claude -p`,而非 `delegate_task`