跳转到内容

Claude Code 集成

arb install-claude # 当前 worktree 的 .claude/settings.json
arb install-claude --main # 主 worktree
arb install-claude --user # ~/.claude/settings.json,对所有项目生效
arb install-claude --home # 种子园:~/arboria/.claude/settings.json 和 ~/arboria/CLAUDE.md

它把 hook 和权限规则合并进 settings.json(保留已有配置,不重复添加),再同步 CLAUDE.md 区块。

新会话开始时,arb hook session-start 注入当前 idea 的简短状态:假设、指标、置信度、run、未完成的待办、待你决定的事,以及最新的已确认经验。上限约 4000 字符,不进 CLAUDE.md,所以 CLAUDE.md 不会被当前状态撑大。

hook 绝不让会话失败:任何错误都只写进 .arboria/hook.log,以退出码 0 结束、不输出内容。在不是 arboria 的仓库里它什么都不输出,所以 --user 全局安装是安全的。

{
"hooks": {"SessionStart": [{"hooks": [{"type": "command", "command": "arb hook session-start"}]}]},
"permissions": {
"deny": ["Bash(sbatch:*)", "Bash(srun:*)", "Bash(salloc:*)", "Bash(scancel:*)",
"Bash(ssh:*)", "Bash(scp:*)", "Bash(rsync:*)",
"Bash(arb approve:*)", "Bash(arb lesson accept:*)",
"Bash(arb idea plant:*)", "Bash(arb idea set:*)", "Bash(arb idea revive:*)", "Bash(arb seed new:*)", "...",
"Edit(**/.arboria/notebooks/**)", "Write(**/.arboria/notebooks/**)", "...",
"Edit(**/notebook.py)", "Write(**/notebook.py)", "MultiEdit(**/notebook.py)", "NotebookEdit(**/notebook.py)"]
}
}
  • 文件规则对 Edit、Write、MultiEdit、NotebookEdit 各有一条,覆盖 **/.arboria/notebooks/**、**/.arboria/ledger.db*、**/.arboria/backup/**、**/.arboria/*.toml、**/.arboria/sessions/** 和 **/notebook.py。读取不受限制;.arboria/commands/ 也不受限制(Claude 在那里写命令)。
  • 全局命令目录(~/.config/arboria/commands,写成绝对路径)加进 permissions.additionalDirectories。这个路径只属于你这台机器,所以在项目里它写进不提交的 .claude/settings.local.json(arb 把它加进 .git/info/exclude),.claude/settings.json 保持可移植、可以提交。
  • 只写种子的命令(arb idea plant/set/revive 和旧写法 arb seed new/set/drop/revive/plant)也设为 deny:它们本来就只由你在终端里运行,在 Claude Code 里代码会拒绝,这几条规则是多一层。
  • 需要 Claude 上集群帮你排查时,可以自己在 settings.json 里放宽 Bash(ssh:*),排查完再改回来。
  • arb 只管理主 worktree 的 CLAUDE.md 里的一个区块(<!-- arboria:begin … --> 到 <!-- arboria:end -->):使用 arboria 的稳定规则和已确认的经验,总长不超过 50 行。区块之外是你的,arb 一个字节也不改。
  • arb init、arb install-claude、接受/退役经验时自动同步区块,并只提交 CLAUDE.md 这一个文件(arboria: update CLAUDE.md)。正在 merge/rebase、有冲突或没有 git 身份时只写文件、不提交;[claudemd] autocommit = false 关闭自动提交;arb claudemd sync [--no-commit] 手动重写。
  • 经验由 Claude 用 arb lesson propose "..." 提出,你用 arb lesson list 查看,在你自己的终端里 arb lesson accept ID 或 arb lesson reject ID。已确认的经验最多 20 条;满了先 arb lesson retire ID。
  • idea worktree 是更早分出来的,里面的 CLAUDE.md 可能是旧的;新确认的经验会立刻通过 hook 注入。

notebook 里出现命令待办时,arb 尽力把它发进这个 idea worktree 里正在运行的 Claude Code 会话:

  • SessionStart hook 把会话的收件 socket(Claude Code 导出的 CLAUDE_CODE_MESSAGING_SOCKET)记在 .arboria/sessions/<worktree 的哈希>.json(权限 0600;进程已退出的条目会被清掉)。
  • 消息很短:待办 id、命令名和“运行 arb commands guide 查看约定”,只由校验过的字段拼成,不含你写的说明原文。
  • arb 不保存也不发送 CLAUDE_CODE_MESSAGING_TOKEN(notebook 的 kernel 不是那个会话的子进程),也绝不读进程环境里的 socket,只发给 hook 记下的会话。
  • 没有会话、socket 不对、2 秒超时或任何错误都静默跳过,cell 里多一句“在 Claude 面板里说'处理待办'即可”。arboria.toml 里 [claude] push = false 关掉推送。

会话收不收这条消息由 Claude Code 的 crossSessionInbound 设置决定。默认(没设置)时,普通会话直接收下,bypassPermissions 模式的会话会弹框等你批准。arb install-claude 不改这个设置。想完全不收:"crossSessionInbound": "refuse"。