Skip to content

feat(agent): show readiness and capabilities before delegation - #6643

Open
BradGroux wants to merge 10 commits into
block:mainfrom
BradGroux:agent/agent-capability-readiness
Open

feat(agent): show readiness and capabilities before delegation#6643
BradGroux wants to merge 10 commits into
block:mainfrom
BradGroux:agent/agent-capability-readiness

Conversation

@BradGroux

Copy link
Copy Markdown
Contributor

Note: This is a replacement for PR #2957, which was accidentally closed when branches were force-pushed after a commit identity rewrite. The changes are identical, rebased onto the latest main.

Closes #2931.

What this fixes

Buzz currently makes an owner infer whether an agent is ready for local delegation by cross-referencing the agent editor, managed-runtime state, presence, and ACP observer logs. Missing evidence can look like unsupported behavior, while requested and effective permission modes are not visible together.

The important pre-delegation questions should be answerable in one place: is this local process healthy, which runtime and model are active, which features and tools were actually reported, how risky are those tools, and is the evidence from the current process and session?

What changes

The owner-only Runtime tab now includes a readiness and capability manifest built from four existing evidence sources:

  • the ACP runtime catalog for installation, authentication, adapter, and static runtime facts;
  • managed lifecycle state for the current process and community connection;
  • current presence;
  • the encrypted owner observer stream for ACP initialize, session configuration, commands, tools, model, protocol, and permission evidence.

The card shows installation, authentication, process, community, presence, observer readiness, runtime and model facts, prompt and output features, commands, MCP source names, tool descriptors and risk classes, requested and effective permission modes, evidence source, divergence, freshness, and known limitations.

The reducer treats absent or malformed evidence as unknown. Evidence is retained independently of the capped raw transcript, but it is invalidated across process and session boundaries. A stopped process, failed lifecycle, offline presence, closed observer, or initialize event from an older process cannot produce a ready state.

Trust boundary

This is local owner evidence, not a public capability, safety, or reputation claim. The UI says “Runtime ready” and identifies the owner-and-machine scope.

The harness projects only MCP server names and permission semantics. It does not forward MCP commands, arguments, environment values, credentials, executable paths, raw lifecycle errors, or config values.

Desktop parsing is strict and bounded. Older Desktop backends that do not report the new static fields remain compatible and render those facts as unknown. A non-owner E2E regression test verifies that neither the Runtime tab nor the manifest is exposed.

Verification

  • Rebased onto current main at 5bf78671f45178f8de02ba18d3d321cbbf19cd1f; the current PR head is d53016c8490f1c0675b4dc56ac033bb7c9f29084.
  • Resolved the permission conflict in favor of current main's auto-approval behavior while retaining the manifest's requested/effective permission evidence and corrected fallback wording.
  • cargo test -p buzz-acp --lib passes 689 tests after removing an unrelated inherited BUZZ_ACP_LAZY_POOL environment override.
  • The prior full branch verification passed Rust formatting and Clippy, Desktop/web checks and builds, Rust package tests, Desktop and Tauri suites, focused owner/non-owner Playwright coverage, and rendered-card inspection. Its one mobile failure reproduced identically on clean main and did not touch this PR's files.

Non-goals

  • No public or portable capability attestation.
  • No observation receipt, capability digest, or shareable claim envelope.
  • No third-party reputation or protocol integration.
  • No arbitrary wall-clock TTL; freshness is bound to the current healthy process, observer connection, session, presence, and community evidence.
  • No automatic delegation or permission-policy change.
  • No storage of secrets, full runtime configuration, or raw observer payloads.

BradGroux and others added 10 commits August 23, 2026 19:58
Co-authored-by: Brad Groux <bradgroux@hotmail.com>
Signed-off-by: Brad Groux <bradgroux@hotmail.com>
Co-authored-by: Brad Groux <bradgroux@hotmail.com>
Signed-off-by: Brad Groux <bradgroux@hotmail.com>
Co-authored-by: Brad Groux <bradgroux@hotmail.com>
Signed-off-by: Brad Groux <bradgroux@hotmail.com>
Co-authored-by: Brad Groux <bradgroux@hotmail.com>
Signed-off-by: Brad Groux <bradgroux@hotmail.com>
Co-authored-by: Brad Groux <bradgroux@hotmail.com>
Signed-off-by: Brad Groux <bradgroux@hotmail.com>
The Aug 8 language and evidence work was lost during a subsequent rebase.
This restores the agreed changes:

- 'Ready locally' → 'Runtime ready' in card and AGENTS.md
- 'Never verified' → 'Not yet observed' for time labels
- 'Sources' → 'Included in session launch' for tool sources label
- Session/channel identity shown in manifest header
- Credential persistence readiness check (Keyring entry found)
- lastVerifiedAt derives only from observer events, not catalog/runtime refreshes

Cherry-picked from work-2957-feedback branch. AGENTS.md conflict resolved
by keeping the rebased base and appending the wolfyy970-agreed guidance.

Co-authored-by: Brad Groux <bradgroux@hotmail.com>
Signed-off-by: Brad Groux <bradgroux@hotmail.com>
… per wolfyy970 review

Two truth-in-label changes from wolfyy970's latest review on block#2957:

1. 'Keyring entry verified' → 'Keyring entry found'. The probe only
   confirms an entry exists under the agent's keyring name — it does
   not prove the stored key derives the agent's pubkey. The Rust doc
   comment already says this; the UI detail now matches.

2. lastVerifiedAt now derives only from observer events (initialize,
   session_config_captured, available_commands_update). Previously it
   included catalogObservedAt and runtimeObservedAt, so a catalog or
   runtime query refresh could make the card say 'Verified just now'
   without any new session evidence. The label now reflects only
   actual session observation.

Added a test verifying lastVerifiedAt ignores catalog/runtime refreshes.

Co-authored-by: Brad Groux <bradgroux@hotmail.com>
Signed-off-by: Brad Groux <bradgroux@hotmail.com>
Co-authored-by: Brad Groux <bradgroux@hotmail.com>
Signed-off-by: Brad Groux <bradgroux@hotmail.com>
…d event

The reduceAgentCapabilityEvidence call was using an undefined 'event'
variable left over from a loop refactor on main. Changed to iterate
over all sortedAdded events so capability evidence is accumulated
correctly.

Co-authored-by: Brad Groux <brad@digitalmeld.com>
Signed-off-by: Brad Groux <brad@digitalmeld.com>
The observer store trims to OBSERVER_EVENTS_LOW_WATER (90% of
MAX_OBSERVER_EVENTS = 2700) when events exceed the 3000 cap, not to
the cap itself. Updated the test assertion and added a comment
explaining the low-water mark.

Co-authored-by: Brad Groux <brad@digitalmeld.com>
Signed-off-by: Brad Groux <brad@digitalmeld.com>
@BradGroux

Copy link
Copy Markdown
Contributor Author

This is a replacement for #2957, which was accidentally closed when branches were force-pushed after a commit identity rewrite. Prior review comments and feedback are preserved on the old PR:

#2957

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.

Show what each agent can do and whether it is ready before delegation

1 participant