feat(agent): show readiness and capabilities before delegation - #2957
feat(agent): show readiness and capabilities before delegation#2957BradGroux wants to merge 6 commits into
Conversation
Updated screenshotsReadiness and runtime evidenceThe owner can see the six readiness gates alongside runtime, ACP protocol, requested model, applied model, provider evidence, and the explicit local-only trust boundary. Capabilities, permissions, and toolsReported, unavailable, and unknown states remain distinct. Requested and effective permission modes are shown with their evidence source, followed by commands, MCP source names, and tool risk classes. Complete manifestThe full card uses “Ready locally” and states that the evidence is for this owner and machine, not a public safety or reputation claim. |
caec1eb to
08de676
Compare
08de676 to
ccd194b
Compare
Feedback review and current-main refreshThe external feedback was posted on the linked issue, #2931, rather than in a PR review thread. I rechecked the suggestion against the issue scope and the current implementation. The central point was valid: local runtime readiness must not be presented as a portable safety, reputation, or third-party delegation claim. The existing branch already incorporates the supported parts:
I did not add I have now refreshed this PR onto current
The refreshed head is mergeable. GitHub checks are running again against the new commit. |
ccd194b to
3173cf4
Compare
|
Rebased this branch onto current Head moved from Verification:
GitHub checks are rerunning on the new head. |
3173cf4 to
278151c
Compare
Current-main refresh and permission-boundary follow-upI reviewed the new enforcement-boundary feedback on linked issue #2931 and refreshed this branch onto current The architecture decision is that Rebase update:
Verification on the refreshed head:
The remaining limitation is unchanged: any future policy at |
278151c to
0a79898
Compare
|
Rebased onto The feedback remains partially valid: local runtime readiness must not be presented as portable attestation, third-party reputation, or a universal permission-enforcement boundary. This branch already applies that constraint. The UI says “Ready locally,” scopes evidence to this owner, machine, process, observer connection, community, and ACP session, keeps missing evidence unknown, and separates requested from effective permission state. I did not add portable digests, observation receipts, arbitrary expiry semantics, or policy enforcement because those require a separately specified authenticated contract. #4066, #4540, and #4333 cover adjacent permission, onboarding, and Guardian policy work; none supplies this owner-local evidence surface. The PR therefore remains valid and was not closed. The rebase required manual integration in managed-runtime types, the profile Runtime tab, and the Tauri API boundary. It preserves the newer config-diff, model-tuning, trading-card, media, and runtime-catalog fields already on Exact-head verification on
The remaining boundary is deliberate: cooperative ACP permission requests are observable evidence, not proof that direct runtime filesystem, subprocess, network, or MCP paths are contained. This PR does not automate delegation or change permission policy. |
0a79898 to
8fc6962
Compare
Review and rebase summaryReviewed the PR for accuracy against current What this PR doesAdds a capability readiness manifest to the agent profile panel: an owner-only "Runtime" tab that surfaces six readiness gates (community, observer, runtime catalog, ACP protocol, model, permissions) alongside the runtime's tool sources, permission mode, and model application status. The manifest is populated from three evidence streams: the static runtime catalog, lifecycle observer events, and Accuracy review
Conflict resolutionSeven files conflicted during rebase. The main-line changes that caused conflicts were:
Rebase resultHead moved from CIDCO passes. Semgrep OSS and zizmor were pending at the time of this comment. |
8fc6962 to
db61837
Compare
Rebase and accuracy review (2026-08-07)Rebased onto current Branch state: Conflict resolution
During the rebase, the second and third commits in the series also had minor Accuracy reviewThe PR adds a capability/readiness manifest system that projects The 5-commit series is well-structured: initial feature, evidence hardening, catalog checks, file-limit refactor, and a final preset fix. Tests cover evidence semantics, staleness, permission divergence, safe tool projection, and observation ordering. No Scope is broad (21 files, ~3100 insertions) but cohesive — the module split into |
|
I think this should be the agent-session half of #5060. The local evidence boundary is right: a Project connection being healthy does not prove it was applied to this agent. Rather than build another readiness surface, I would join the existing pieces here:
The missing seam is a non-secret binding identity and generation in the launch observation. That would let the UI distinguish Configured, Ready at Project, Applied to agent, and Observed in session without exposing endpoints or credentials. I will keep the portable-agent side limited to desired capability requirements and let this surface own applied and observed evidence. |
Response to the four-stage binding modelYou're right that this PR is the agent-session half of #5060. The four-stage split — Configured, Ready at Project, Applied to agent, Observed in session — is the right way to think about the evidence chain, and the local boundary is exactly what this PR enforces: a healthy Project connection does not prove the agent received those tools. What this PR covers todayThe manifest currently handles stages three and four from the session side:
The missing seam you identifiedThe gap is the binding identity and generation. Today Why the binding identity belongs with the launch specThe
Adding the binding identity here without #4164's launch document would mean inventing a correlation key in Proposed path
If you would rather see the binding identity field added to this PR now — as an optional field that stays |
|
Your sequencing is right. I would not add nullable binding fields yet; #4588 and #4164 need to define the binding ID and immutable revision first. I reviewed the current head. Before merge, I think the card needs narrower language in three places:
I would also split “runtime checked” from “session observed” time. Actual tool use should remain a later tool-call receipt, not something inferred here. With those boundaries, this becomes a useful and truthful session-evidence surface that #4588 and #4164 can connect to without reworking it later. |
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>
db61837 to
a3a699e
Compare
|
This is the third recurring review + rebase pass for the open BradGroux PRs on What this PR doesEnhances the agent delegation flow to show readiness and capabilities before an owner delegates work to an agent. The PR adds:
Correctness
Rebase resultAlready based on current main (
No code changes were made — this was a review + rebase pass only. |
…anguage Fold wolfyy970's feedback on block#5311 and block#2957 into the readiness manifest: Credential persistence readiness check (new): - Rust CredentialPersistence enum: KeyringVerified, InlineFallback, Missing, Unavailable - credential_persistence_for_agent() probes the keyring read-only via SecretStore::probe() and combines with inline key state - ManagedAgentSummary carries credential_persistence (Option, skipped when None for backward compatibility with older frontends) - TypeScript CredentialPersistence type and ManagedAgent field - New readiness check positioned after authentication: keyring_verified and inline_fallback → ready, missing → attention, unavailable → unknown - 6 new test cases covering all four states plus null/default and array positioning Language narrowing (wolfyy970 items 1-4): - 'Ready locally' → 'Runtime ready' in card, AGENTS.md, E2E test - Tool sources label 'Sources' → 'Included in session launch' - Session/channel identity shown in manifest header - 'Never verified' → 'Not yet observed' for time labels Co-authored-by: Brad Groux <bradgroux@hotmail.com> Signed-off-by: Brad Groux <bradgroux@hotmail.com>
|
Thanks for the review @wolfyy970 — all four language items and the credential persistence check are now folded into this PR. Language narrowing (your items 1–4):
Credential persistence readiness check: Added a new
As you noted, the mismatched case (keyring entry exists but its value doesn't derive the agent's pubkey) is not covered here — that would require loading the actual secret, which this check deliberately avoids. That gap is called out in the Rust doc comment. The "runtime checked" vs "session observed" time split you suggested is partially addressed: All 4,559 desktop tests pass. DCO, Semgrep, and zizmor checks pass on the latest push. |



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 card shows:
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 “Ready locally” 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
mainat6da45ac5cf90fa0768a98256e2200708d219ddfc;git range-diffreports all three commits as patch-equivalent. The current PR head isccd194bbc9c54608fba18faaafcf00ab75038393.bin/just ciat the current head passed workspace Rust formatting and Clippy, Desktop/web static checks and builds, the repository Rust unit suites, 3,739 Desktop tests, and 1,815 Tauri tests plus 3 mixer diagnostics. The gate then reached 861 passing mobile tests with one skipped and stopped onkeeps follow mode off while a tall newest message stays visible. That same focused test fails identically on clean currentmainat6da45ac5cf90fa0768a98256e2200708d219ddfc; this PR does not change mobile files.just cirun passed at08de676d34ba47ad872b55599ba74308094ce5f5, including workspace Rust formatting and Clippy, full Rust package tests, 3,739 Desktop tests, 1,818 Tauri tests and diagnostics, web build, and 824 mobile tests.cargo test -p buzz-acppassed 628 tests.Non-goals