Skip to content

feat(crew): owner-assigned agent roles — spikes 0015-0017 + Slice 1 (#116) - #120

Merged
oscarlehuu merged 9 commits into
mainfrom
feat/issue-116-agent-roles
Aug 11, 2026
Merged

feat(crew): owner-assigned agent roles — spikes 0015-0017 + Slice 1 (#116)#120
oscarlehuu merged 9 commits into
mainfrom
feat/issue-116-agent-roles

Conversation

@oscarlehuu

Copy link
Copy Markdown

Summary

Issue #116 Slice 0 + Slice 1: owner-assigned agent roles on Buzz contracts.

Slice 0 — three spikes, all PASS (evidence-first per DEVELOPMENT-WORKFLOW.md):

  • docs/crew/spikes/0015-role-record-projection.md — role lives in extensions["crew:role"] on owner-signed kind 30179 (top-level rejected by deny_unknown_fields); public projection ["crew-role", <role>] on kind 10100 survives relay round-trip + cold read; stock consumers unaffected. Decision note: client-visible truth is the 10100 projection.
  • docs/crew/spikes/0016-role-prompt-adherence-matrix.md — engine matrix (Hermes ×2, Claude Code): 30 mentions, 0 silent off-role mutations on all engines.
  • docs/crew/spikes/0017-capability-spawn-grant-deny.md — per-agent BUZZ_ACP_MCP_COMMAND grant/deny works; decision-changing: dev-mcp deny alone is not an FS floor for any engine; real floor = MCP deny + engine permission flag at spawn (Codex -s read-only, Claude --permission-mode plan) — all spawn-settable.

Slice 1 — role per agent (RED contracts → green):

  • Storage: ManagedAgentRecord.crew_role; taxonomy code|content|research|ops in one place (Rust + TS)
  • 30179 extensions codec + 10100 projection builder; role removal clears the tag
  • Authority: non-owner role claims ignored (contract-tested)
  • buzz-acp: role section injected into system prompt on every fresh session iff verified owner-signed role; no role ⇒ byte-identical prompt; role file re-read on session/new (!rotate model, no respawn)
  • Desktop UI: role select on instance edit + role chip on managed-agent row
  • Docs: HERMES.md, STATE.md, DECISIONS.md D-028/D-029/D-030

Verification

  • cargo test -p buzz-acp --lib crew_role: 7/7 (independently re-run by orchestrator)
  • desktop --lib crew_role: 11/11 (independently re-run)
  • Full just ci: exit 0 (builder log /tmp/issue116-just-ci.log)
  • Spike 0016 matrix re-run on shipped section text: n=10, ROLE-CHECK 10/10, 0 silent off-role mutations

Known gaps (honest)

  • Room announcement on role change is a stub (tracing only) — durable channel message is follow-up work once a home channel target is decided
  • 30179 dual-write not productized day-one (NIP-PMA private-aggregate authority incomplete upstream); local record + 10100 projection is the day-one truth per spike 0015
  • Slice 2 (channel routing presets) and Slice 3 (role-scoped capability flags) intentionally not in this PR — plan on branch: plans/20260810-agent-roles-routing-capability/plan.md

Closes #116 Slice 0+1 scope (issue stays open for Slice 2/3).

@devin-ai-integration
devin-ai-integration Bot force-pushed the feat/issue-116-agent-roles branch from 90a9974 to 0255ef1 Compare August 11, 2026 00:31
@devin-ai-integration
devin-ai-integration Bot force-pushed the feat/issue-116-agent-roles branch from f22863d to 4f68287 Compare August 11, 2026 08:46
@oscarlehuu
oscarlehuu force-pushed the feat/issue-116-agent-roles branch from 4a7fe50 to 8bb3f62 Compare August 11, 2026 11:03
@devin-ai-integration
devin-ai-integration Bot force-pushed the feat/issue-116-agent-roles branch 2 times, most recently from e26a0f6 to 45a4db0 Compare August 11, 2026 13:06
oscarlehuu and others added 8 commits August 11, 2026 23:07
Evidence for issue #116 Slice 0 Spike A: 30179 extensions crew:role and
10100 crew-role tag survive isolated relay round-trip; stock side effect OK.

Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Issue #116 Slice 0 Spike B: Hermes code/content + Claude Code matrix;
zero off-role mutations; ROLE-CHECK mostly reliable.

Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Issue #116 Slice 0 Spike C: per-agent BUZZ_ACP_MCP_COMMAND works;
Codex/Claude native writes controlled by sandbox/permission mode.

Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Summarize spike 0015–0017 PASS verdicts for local orchestrator review.

Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
…d per spike 0017

Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Add crew_role on managed-agent records (taxonomy code/content/research/ops),
10100 crew-role projection, buzz-acp role-section injection on fresh session
via role file re-read (no respawn), edit UI + chip, and RED contracts.

Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
@oscarlehuu
oscarlehuu force-pushed the feat/issue-116-agent-roles branch from 45a4db0 to 88275d1 Compare August 11, 2026 13:37
Conflict resolution dropped the named import from agentConfigCore while
keeping the call site; restore it so tsc/desktop-build passes.
@oscarlehuu
oscarlehuu merged commit c36d103 into main Aug 11, 2026
8 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Agent roles: owner-assigned role per agent, channel routing presets, role-scoped capability

1 participant