feat(cli): add 'buzz agents set-directory' kind:10100 directory publisher - #5878
feat(cli): add 'buzz agents set-directory' kind:10100 directory publisher#5878kevine-pixel wants to merge 3 commits into
Conversation
Clients gating agent mentions on kind:10100 directory evidence (block#5681) need channel_ids and respond_to in the record content, but the only existing publisher (channels set-add-policy) writes just channel_add_policy — and, because 10100 is replaceable, clobbers any richer record. Relay-hosted agents were therefore un-mentionable. The new subcommand read-merges the existing record (preserving channel_add_policy and unknown fields), fills name from the identity's kind:0 when omitted, and can derive channel_ids from the identity's own kind:39002 memberships. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: kevin echeverri <kevin.e@fs1inc.com>
…agents Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: kevin echeverri <kevin.e@fs1inc.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: kevin echeverri <kevin.e@fs1inc.com>
|
Operator data point in support of this PR, from a self-hosted multi-tenant deployment: ~26 headless agent seats across 8 communities, all running as systemd services under a custom ACP harness rather than Buzz Desktop. None of them are mentionable, for exactly the reason this PR describes. The measurement I think is most useful here isn't the count of missing records — #6304 already reports the "one entry on the whole relay" finding, and ours matches. It's the other half: we published a That seems worth stating explicitly, because it means there is no relay-side gate on publishing a directory record. The missing piece is purely a producer. Nothing about the relay needs to change, and nothing needs to know anything about which harness an operator runs. That last part matters for this PR's chances, I think. #4144 and #4146 were closed on the principle that "Buzz core should not discover or parse a particular harness installation; adapter-specific discovery and lifecycle belong outside this repository, using public Buzz contracts." A CLI publisher is exactly that — it uses a public contract and requires core to know nothing about the harness. It sidesteps the objection rather than reopening it. From an operator's seat, Happy to test against a real multi-community deployment if that's useful — we have 8 communities and a mix of client-facing and internal crews, which should exercise the |
Summary
buzz agents set-directory— a publisher for the kind:10100 agent directory record. Addresses the publisher gap in #5681 mention gate requires kind:10100 fields that nothing publishes — relay-hosted agents are un-mentionable #5869: since fix(desktop): enforce agent mention authorization at send boundaries #5681, the desktop admits a non-managed agent into mention autocomplete/send only when its 10100 content carrieschannel_idsandrespond_to, but the only existing 10100 publisher (buzz channels set-add-policy) writes just{"channel_add_policy": …}— and, because kind:10100 is replaceable, clobbers any richer record. Relay-hosted agents were therefore structurally un-mentionable.channel_add_policy, which the relay'shandle_agent_profileingest requires — survive a republish.--namedefaults from the identity's own kind:0display_name/name;--channels-from-membershipderiveschannel_idsfrom the identity's kind:39002 memberships;--no-channelssupports DM-only agents;--respond-to owner-only|allowlist|anyonewith--allow <PUBKEY>for allowlists (validated 64-hex, normalized lowercase).sign_eventpath, unchanged.Validation
channel_add_policy, unknown keys) and overwrites stale directory fields without touching a customizedagent_type; subcommand stability guards updated.cargo clippy/cargo fmtclean; fullbuzz-clitest suite passes (345).--no-channelsrecords.Related: #5869 (publisher gap — this PR), #5870 (directory inspection UI, separate).
🤖 Generated with Claude Code