mirror of
https://github.com/block/buzz.git
synced 2026-11-04 08:21:48 +00:00
Implements the claude-config-gaps plan of record (B1/B2/B3/B6/B7): B1/B2 — Paired atom injection at spawn: CLAUDE_CONFIG_DIR=<managed-root>/claude/<pubkey> and CLAUDE_SECURESTORAGE_CONFIG_DIR="" so each Claude agent has an isolated config root while sharing the owner's default Keychain credential namespace. Generated as a typed ClaudeLaunchPolicy at spawn time, never persisted. Remote agents are excluded. B7 — Layered settings.json projection at spawn: owner ~/.claude/settings.json is read as a base layer; Buzz canonical fields (effortLevel) are applied as an overlay; protected env keys (model authority, credential roots, isolation flags, provider/auth routing, BUZZ_* and NOSTR_* prefixes) are stripped from the base env object before merging. Missing/unreadable owner base degrades to overlay-only with a logged warning. Spawn fails if the projection write fails (B7.5 — never launch on wrong config). B3 — Config root cleanup on agent deletion: cleanup_claude_config_root removes the per-agent directory after the record is gone; validation rejects non-hex pubkeys and traversal attempts; filesystem errors are swallowed so cleanup never blocks deletion. B6 — effort_level added to spawn_config_hash so effort changes raise the restart badge. New module: managed_agents/claude_config — ClaudeLaunchPolicy, is_launch_policy_protected_key predicate (single source of truth for projection and launch assembly), project_settings_json, write_projected_settings, cleanup_claude_config_root. 28 tests covering all contract obligations. Closes #2692, #2884, #3371, #3493. Does not close #2265, #4004 (tracked as follow-up in PR). Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>