Claude Code 集成
arb install-claude # 当前 worktree 的 .claude/settings.jsonarb install-claude --main # 主 worktreearb install-claude --user # ~/.claude/settings.json,对所有项目生效arb install-claude --home # 种子园:~/arboria/.claude/settings.json 和 ~/arboria/CLAUDE.md它把 hook 和权限规则合并进 settings.json(保留已有配置,不重复添加),再同步 CLAUDE.md 区块。
SessionStart hook
Section titled “SessionStart hook”新会话开始时,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:*),排查完再改回来。
CLAUDE.md 区块与经验
Section titled “CLAUDE.md 区块与经验”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"。