Repository navigation
feat(acp): add a generic ACP agent type at parity with the other harnesses - #1251
wpfleger96 wants to merge 1 commit into
Conversation
68e990f to
d0f37d1
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord automated source review via Wes's account, integrating independent Rocket (systems/lifecycle), Mantis (correctness/security/concurrency), and Groot (product/accessibility) reviews.
Reviewed head d0f37d1 against base/merge-base 59030eb. Scope: the 22-file feature diff and relevant shared ACP, agent settings, runtime and host callers, with the stacked #1227 interface in view. One actionable P2 is inline. Assessment: 8/10; fixing confirmation failure feedback is needed to reach the repository's 9/10 correctness bar. The existing shared ACP owners are reused; no additional actionable launch-approval, environment-boundary or lifecycle defect was established.
Optional UX improvements, not required fixes:
- In src/bundled/acp/tabs.tsx:198–223, distinguish each environment row's accessible names and provide a predictable focus destination when the focused Remove button disappears; consider focusing the new Name field after Add.
- At tabs.tsx:256–275, Check drives the Save spinner while Check itself only disables. Put pending feedback on Check and distinguish its failure result from readiness, even though the returned text already explains the failure.
- At tabs.tsx:118,241–254, consider touched/submitted validation so a trailing newline during argument entry does not immediately announce an error, and clarify that unsaved launch edits will require confirmation after Save. The current approval text describes the stored launch.
- At runtime.ts:219–268, replacing the launch while conversation context is loading disposes the captured entry, so the pending message reports that the agent stopped. This fails closed and is consistent with cancelling old work; consider explaining that settings changed and the message needs retrying. Do not revive a removed agent or reuse the stale launch just to avoid that message.
Validation: immutable source inspection and diff whitespace check only; no PR code, tests, builds, apps, or third-party harnesses executed. One hosted check snapshot showed all non-skipped checks successful; Windows native validation and browser flake checks were skipped. All eight presets are explicitly unverified. Live authentication/tool calls, performance, native focus, screen-reader behavior, rendered themes/viewports and human acceptance remain unverified. Public PR description and commit messages inspected; no attached images in the description and no actionable disclosure finding identified. This COMMENT is neither approval nor merge authorization.
59030eb to
82f8fad
Compare
d0f37d1 to
e8e4060
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord automated source review via Wes's account, integrating independent Rocket (systems/lifecycle), Mantis (correctness/security/concurrency), and Groot (product/accessibility) follow-up reviews.
No new actionable findings. The previous P2 confirmation-error finding is resolved in source: failed confirmation saves now expose an alert inside the dialog and retain retry, while pending saves prevent dismissal. The follow-up also gives environment rows distinct names and predictable Add/Remove focus, separates Check feedback, delays validation per field, and explains launch changes during conversation loading.
Reviewed head 523aa602c76f3cea45e29ca59b03f35f5e4c14ce against base/merge-base 82f8fadeba1dfb9ab8490a054d9e8734af1ac62f, comparing the follow-up with previously reviewed d0f37d1. Scope: prior findings, the five changed ACP feature files, and shared ACP/Goose integration and callers within the 23-file PR diff. Solo Canvas uses the existing bounded owner-checked reader; tool authorities come from the agent's community snapshot. Launch approval and settings replacement preserve their existing owners. Source assessment: 9/10; no additional repair requested.
Validation: immutable source and regression-test inspection plus diff whitespace check; no PR code, tests, builds, apps, or harnesses executed. One hosted-check snapshot had 7 successful, 22 in progress and 2 skipped checks; CI completion is not established. Live harness authentication/tool calls, performance, rendered themes/viewports, assistive technology and human acceptance remain unverified. In particular, success-dialog focus restoration to the now-disabled confirmation trigger needs runtime validation; this predates the follow-up and was not established as a new defect. Public PR description and feature commit messages inspected; no description attachments or actionable disclosure findings identified. This COMMENT is not approval or merge authorization.
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord automated source review via Wes's account.
No actionable findings in this documentation follow-up. The README now uses the registered “ACP agent” harness label and correctly separates agent creation from configuring the launch in Settings, saving it, and confirming the saved command. Source assessment for this delta: 9/10.
Reviewed head a7dab5bddf35f3cbbf53c6d1493169b4132d01c4 against base 82f8fadeba1dfb9ab8490a054d9e8734af1ac62f, incrementally from previously reviewed 523aa602c76f3cea45e29ca59b03f35f5e4c14ce. The endpoint diff changes only src/bundled/acp/README.md (4 insertions, 3 deletions); all implementation and test files are unchanged. This uses the small unchanged-follow-up solo exception; the preceding review included independent Rocket, Mantis and Groot lanes. I checked the instructions against registration, creation and settings source, including the existing confirmation failure/retry path. No fresh team review of the unchanged implementation is claimed.
Validation: source and diff-whitespace inspection only; no PR code, tests, builds, apps or harnesses executed. One hosted-check snapshot showed 9 successful, 20 in progress and 2 skipped checks. CI completion, live harness operation, rendered accessibility/focus (including the previously noted confirmation-success focus), and human acceptance remain unverified. Public PR description and the new commit message inspected; no description attachments or actionable disclosure finding identified. This COMMENT is not approval or merge authorization.
a7dab5b to
28e54d9
Compare
28e54d9 to
fe97ae5
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord automated source review via Wes's account, integrating independent Rocket (systems/lifecycle), Mantis (correctness/security), and Groot (product/accessibility) lanes.
No required changes found in this follow-up. Source assessment: 9/10. The two new ACP commits remove automatic publication of unsent harness text and use Buzz-owned failure messages, while preserving first-turn sign-in hints. The previous confirmation-error fix remains present. One optional recovery-wording suggestion is inline.
Reviewed head fe97ae5c068451027d53123611098bdbed0a3bfb, base 42746a037125ecc9df8e88d4b5f7c2a58b53d06c; follow-up compared with a7dab5bddf35f3cbbf53c6d1493169b4132d01c4 and checked against the feature's current callers. The PR description and commit messages were inspected; no attached images or new public-material disclosure issue found.
Source-only: no PR code, tests, builds, app or live harness executed. One CI snapshot still had browser, JavaScript and Rust jobs running, with Windows native validation skipped. Native lifecycle, rendered focus/accessibility, performance and human acceptance remain unverified. This is a non-blocking COMMENT review, not approval.
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account.
No new actionable findings in this follow-up; assessment: 9/10 for minimalness, elegance, and source-level correctness. Compared with the previously reviewed fe97ae5c068451027d53123611098bdbed0a3bfb, only acp-testing.ts and runtime.test.ts change; production code and the base are unchanged. Reviewed the fake harness response controls, reporting completion barrier, and queued sign-in-error/refusal case against the runtime and shared ACP session lifecycle. The documented small-follow-up solo exception applies; this is not a new four-reviewer pass.
Head: 0b37a0f1aec789f37a1de01bf37a54affa7d9877
Base: 42746a037125ecc9df8e88d4b5f7c2a58b53d06c
Source-only: no tests, builds, app launches, or live harness execution. CI status, test timing/cost, rendered focus/accessibility, and runtime acceptance were not verified. The public PR description has no attached images; the description and new commit message were inspected with no new disclosure finding. This COMMENT is not approval or merge authorization.
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account, with independent Rocket, Mantis and Groot review lanes.
No actionable findings in this follow-up. Assessment: 9/10 for minimalness, clarity and correctness within the reviewed scope.
Compared previously reviewed 0b37a0f1aec789f37a1de01bf37a54affa7d9877 to head 57e2b5ddc3379872d27bcb3df9bb95639c504bf8, with unchanged base 42746a037125ecc9df8e88d4b5f7c2a58b53d06c: two files, 24 insertions and one deletion. The model-failure notice now names the actual Arguments and Environment controls in the agent’s Settings. Fixed application text preserves the existing boundary that keeps raw harness errors out of channel messages. The added regression test covers the model-error path and sentinel exclusion. Existing Settings guidance explains saving and confirming changed launch settings before retrying. No broader feature areas were reopened.
Reviewed the public PR description and follow-up commit message; no attached images or disclosure finding. Validation is source-only: no tests, builds, app launches or live harness recovery were run. One hosted-CI snapshot still had JavaScript, Rust and browser lanes running; Windows validation was skipped. Rendered focus/accessibility and live recovery remain unverified. This COMMENT is not approval or merge authorization.
42746a0 to
3cfa0b7
Compare
57e2b5d to
dfe68ff
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account, integrating independent Rocket (systems/lifecycle), Mantis (correctness/security/concurrency), and Groot (product/accessibility) lanes.
One P2 integration finding: the numeric error code can survive a later refusal, causing incorrect sign-in advice when two messages arrive during cold session opening. Details and the smallest repair are inline. Source assessment: 8/10 pending that correction.
Reviewed head dfe68ff9b49ccc898cadb7ebded870a138ccc194 against base 3cfa0b7. Compared the prior reviewed feature stack ending at 57e2b5ddc3379872d27bcb3df9bb95639c504bf8: 20 patches unchanged, three adapted, and two failure-message patches removed. Review focused on those adaptations and their shared-client integration; unchanged feature areas were not broadly reopened.
The revised description accurately documents truncated raw harness failures and the absence of automatic unsent-reply publication. This revision no longer provides the prior sanitized-error behavior; matching the base Goose behavior does not establish that arbitrary harness errors are safe to share. No separate disclosure defect was established from the reviewed public description and commit messages; there are no attached images.
Source-only validation: no tests, builds, app launches, live harness recovery, or hosted CI verification. Runtime ordering, performance, rendered focus/accessibility, and human acceptance remain unverified. This COMMENT is not approval or merge authorization.
915836c to
b600f76
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord automated source review via Wes's account, with independent Rocket (systems/lifecycle), Mantis (correctness/concurrency), and Groot (product/error flows) coverage.
No actionable findings in this follow-up. Source assessment: 9/10; no changes requested.
The previous refusal/sign-in finding is addressed by the new base: the shared session now stores error text and its code together, so a later refusal cannot inherit an earlier authentication code. The added cold-opening regression covers two messages arriving before session/new resolves. Generic ACP explicitly enables diagnoseStartup, preserving preset install hints for exit 126/127 in both Check and runtime launches; Goose retains the base behavior.
Scope: follow-up from dfe68ff9b49ccc898cadb7ebded870a138ccc194. Range comparison shows 22 unchanged feature patches, one launch-hook adaptation, and one added regression-test commit. Shared client changes in the endpoint comparison are inherited from the new base. This is not a fresh exhaustive review of the unchanged feature. The public PR description was checked and contains no attached images.
Reviewed head: 915836c2550bae731d77c6b8b481a228e416512c
Base: c8cbbbe
Validation: immutable source and caller/lifecycle analysis only; no PR code, tests, builds, apps, or harnesses executed. The single hosted-check snapshot still had JavaScript, Rust and browser checks running; Windows validation was skipped. Native lifecycle/performance, rendered focus/accessibility, test timing and human acceptance remain unverified. This COMMENT is not approval or merge authorization.
salman1993
left a comment
There was a problem hiding this comment.
🤖 Findings from Salman's AI agent:
-
[P1] Raw harness errors can expose credentials in Buzz.
report()publishes the first 500 characters of the harness error directly into the conversation. A focused runtime probe with a synthetic API key in a provider error confirmed that the key was published. An authentication or startup diagnostic containing a credential therefore exposes it to conversation readers. Use a fixed public failure message and retain detailed diagnostics in owner-only activity. src/bundled/acp/runtime.ts:360 -
[P2] Steering is never enabled for the generic agent. Its hooks supply neither steering nor capability negotiation, so every message arriving mid-turn queues until the current turn finishes. A correction such as “stop, use another approach” cannot steer the running work, unlike Goose. Against the requested behavior, enable steering by default where the harness supports it, retaining queueing as the unsupported fallback. src/bundled/acp/harness.ts:23
-
[P2] Transcript support is entirely absent, including for capable harnesses. History always renders “History isn't available for ACP agents.” There is no
session/listintegration or transcript reader, so owners cannot inspect the harness conversation through this view. Capability-gate session discovery and transcript reading, reuse the existing transcript renderer, and show unavailable only when the harness lacks support. Listing discovers sessions; reading their contents also needs supported replay or export. src/bundled/acp/tabs.tsx:416 -
[P2] The generated session title is discarded. The runtime computes and passes
Agent · #channel · thread, but the shared client transmits the title only throughnewSessionMeta, which the generic agent never supplies. A focused runtime probe confirmed that no title reaches the harness at creation or afterward. Sessions therefore lose the Buzz agent/channel naming Goose provides. Carry the title through supported naming behavior and make the unsupported fallback explicit. src/bundled/acp/runtime.ts:285
926ba1c to
f81e71b
Compare
b600f76 to
24d8dda
Compare
There was a problem hiding this comment.
🤖 Salman has confirmed that steering is the only remaining blocker. Transcripts and session naming are non-blocking.
Follow-up on the prior findings at 1ec4a48ab00e23da1cd0f0f48ed316e885dae6d3:
-
Addressed: raw harness errors no longer reach Buzz. Public failure posts now use fixed text, with hints carried only from Buzz's own typed failures or fixed preset text. The original synthetic-credential reproduction confirms the secret stays in the local outcome and is absent from the published message. The new local Details path retains longer diagnostics.
-
[P2] Remaining blocker: steering. Generic hooks still have no steering implementation or capability negotiation, so messages arriving mid-turn always wait for the current turn to end. Use supported steering by default where available and retain queueing for harnesses without it. src/bundled/acp/harness.ts:32
-
Non-blocking follow-up: transcripts. History remains an unavailable placeholder, with no capability-gated session listing or transcript reader. This can be addressed separately. src/bundled/acp/tabs.tsx:416
-
Non-blocking: session naming. The unused title argument has been removed, and the PR explicitly documents the limitation. ACP has no standard title-setting field. Harness-specific naming support can be considered separately.
fff8f34 to
3c6f0c5
Compare
|
🤖 On steering (review, item 2): Buzz already steers all three first-class harnesses, each through its own mechanism: Goose's |
1ec4a48 to
673f648
Compare
06567d4 to
8cfe8f0
Compare
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 Two reproducible blockers: ACP Settings crashes on opening, and Stop loses the running turn after session retirement.
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 The previous Settings/History crash and retired-session cancellation failures are repaired. One new Stop regression remains, detailed inline.
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 One remaining cancellation race reproduced at this head.
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account, integrating independent Rocket, Mantis and Groot lanes.
Two P2 fixes are requested inline: standalone turns ignore saved Model/Thinking, and History transcript navigation loses keyboard focus. Source assessment: 8/10 pending those corrections.
Head: 6e64522; base: bfaf0cb. Reviewed the new ACP parity behavior, shared-client integration and prior fixes. Public description, changed files and feature commit messages were inspected; no description attachments.
Source-only: no tests, apps or harnesses executed; CI, rendered accessibility, performance and live preset compatibility remain unverified. This is a non-blocking COMMENT review.
6e64522 to
d931996
Compare
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 One reproduced keyboard-continuity defect at this commit. The previously reproduced community-isolation finding at 4f207fc remains unresolved in our review; it has not been revalidated against this head.
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 This finding was reproduced at 4f207fc. Revalidation on subsequent heads was blocked; this report does not claim current-head verification.
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account, integrating independent Rocket (systems/lifecycle), Mantis (correctness/security), and Groot (product/accessibility) lanes.
The earlier standalone Model/Thinking and History focus findings are repaired in source. One P2 integration defect remains: fresh sessions can reject a supported synced thinking level when ACP advertises grouped choices. Details and the smallest repair are inline. Source assessment: 8/10 pending that correction.
Follow-up scope: prior repairs, new community-membership routing, confirmation focus, and their shared-client integration. Inspected source tests, History success/error/Back/retry paths, and session/tool/persistence callers. Unchanged feature areas were not exhaustively reopened. The public PR description and eight commit messages were inspected; no description attachments or new disclosure finding.
Source-only: no tests, builds, apps, PR code or live harnesses executed. CI, native lifecycle/performance, rendered accessibility, live preset compatibility and human acceptance remain unverified. This is a non-blocking COMMENT review, not approval.
6b05c87 to
9b1fe74
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account, integrating independent Rocket (systems/lifecycle), Mantis (correctness/security/concurrency), and Groot (product/accessibility) lanes.
The prior grouped-effort finding is repaired in source. One P2 integration defect remains in the new History navigation: real ACP replay turns have no channel ID, so their conversation labels cannot become links. Details and the smallest repair are inline. Source assessment: 8/10 pending that correction.
Follow-up scope: grouped-effort normalization, History conversation navigation, membership-read regression coverage, and the rebase’s ActivityAccessory Retry integration. Seven prior repair patches are unchanged; the initial feature patch adapts to the new base, with three added follow-ups. Unchanged feature areas were not exhaustively reopened. The public description and eleven feature commit messages were inspected; no description attachments or new disclosure finding.
Source-only: no tests, builds, apps, PR code or live harnesses executed. CI, native lifecycle/performance, rendered focus/accessibility (including Retry focus), live preset compatibility and human acceptance remain unverified. This is a non-blocking COMMENT review, not approval.
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account, integrating independent Rocket (systems/lifecycle), Mantis (correctness/security), and Groot (product/accessibility) lanes.
No new actionable findings. The prior History-link P2 is repaired in source: replayed turns now receive their channel ID from the saved conversation key, preserving known/unknown thread handling. The added colocated regression exercises the production runtime and replay reader through a fake ACP transport for both saved-key forms. Source assessment for this follow-up: 9/10.
Scope: the three-file follow-up from 9b1fe74, the previous finding, and relevant replay, History, navigation and ownership callers. Existing unavailable/error, Back/reopen recovery and focus paths were inspected in source; unchanged feature areas were not exhaustively reopened. The public description and twelve feature commit messages were inspected; no description attachments or new disclosure finding.
Source-only: no tests, builds, apps, PR code or live harnesses executed. CI, real harness replay, performance, rendered navigation/focus/accessibility and human acceptance remain unverified. This COMMENT is not approval or merge authorization.
8095ec8 to
6191e08
Compare
…esses Squashes the PR's 12 commits and rebases them onto main. Co-authored-by: Will Pfleger <wpfleger@block.xyz> Co-authored-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz> Signed-off-by: Will Pfleger <wpfleger@block.xyz>
944d349 to
7c0ee18
Compare
🤖 Adds
buzz.acp, an agent type for long-tail harnesses that speak the Agent Client Protocol (Cursor, OpenCode, Amp, Gemini CLI, Devin, Grok Build, Kimi Code, Oh My Pi), at parity with Goose, Claude Code and Codex wherever the harness advertises the matching ACP capability. An owner picks a preset or types a command, args and env, confirms the exact launch, and the agent runs turns in that harness. No per-harness JS plugin and no harness-specific code.Rule for every feature: a stable ACP mechanism is used only when the harness advertises it; otherwise behavior falls back to a plain new session. Goose sets none of the new shared-client options, and nothing under
src/bundled/goose/changes.Shared client additions (
src/features/agent-harness/acp/)All opt-in through new
SessionsOptions/ process hooks:pin), conversation owner epoch and launch generation before its first await, and opens only on that generation's process. A generation hold (hold(g)→release()) keeps an old process alive until every opening and running prompt on it has finished (session.idle()), then it stops.reconfigure) orrestart()retires sessions. A retired session takes no new messages and writes nothing to the saved record. Its record is kept only if it was fully open and idle; one still opening or mid-turn has its record dropped first, so a replacement never resumes it.routeignores retired sessions; an exact-thread route (RouteMatch.exact) beats a channel route.contextmatches, the session reopens withsession/resumewhen advertised, elsesession/loadwith the replay swallowed for that session only. A mismatch or a failed reopen drops the record and opens fresh.id/coveredadvance only from a prompt's own successful response, and only if nothing else committed since that prompt was built.coveredis aMarkof{ at, ids }: the newest second plus the event ids delivered, so distinct messages sharing a second stay distinct (an older numeric record loads as{ at, ids: [] }). Prompts are built when dequeued (build), from the session's covered boundary, so a failed message is carried again by the next prompt.configOptions; model is set before effort viasession/set_config_option, using the whole state each response returns. A turn left on the harness default never runs on a session Buzz moved off it: behind a busy turn that sets the field, or on a session already overridden there, it keeps its place in arrival order, reopens fresh when it reaches the front, and Stop clears it like any queued message. Cancelling a waiting message never lets later ones overtake earlier ones, and the line and its Stop control last while anyone still waits; a queue of default-only turns stays on its session. Option updates during asession/loadreplay are kept (without callbacks), and a load answer withoutconfigOptionsleaves them in place.onState(state, pinned)reports every live state replacement, never a replay's.reconnect()fails live sessions, keeps their records, and calls the process'srestart;initialize'sauthMethodsare kept and surfaced on failure.readTranscriptreplays a saved session in a short-lived process withsession/load, never prompting, under one 20s deadline with turn, item and UTF-8 byte limits enforced even for a single remaining turn (agent and user message ids, text, markers, tool kind/status and a per-entry cost for each diff, path and plan entry all counted; a turn that loses content is markedpartial);threadOfsees only a 4 KiB prompt prefix.probeOptionsreads a fresh session's options for Check.The ACP agent type (
src/bundled/acp/)Settings and launch confirmation
presets.ts: eight presets as data, all marked unverified.config.ts: per-agent config (preset, command, args, env, workspace, instructions,model,effort,scope), validation (non-empty command not starting with-or containing=, no NUL, valid env names,BUZZ_*/NOSTR_*rejected), and a SHA-256 approval over["buzz.acp/approval/1", command, args, sortedEnv, workspace].PATHonly, and Check. It notes that the harness also loads its own configured MCP servers next to the Buzz tools, and shows "Set up on this device" when a synced preset has no local command yet.Createadds harness, command, workspace and instructions to the New agent dialog; the agent is saved unconfirmed and runs only once the owner confirms the command in Settings.CreateModel,summary(the picked model, else the preset),modelsanddescribeMigration(Model, Thinking, Sessions) are registered.preset,model,effortandscopeonly (syncedSettings,withSynced). A synced field the accepted copy leaves out takes the plugin default. Command, args, env, workspace, approval, resume pointers and the model cache stay on the device.enabledByDefault: false, macOS and Linux only (the launch runs POSIXenv).Runtime
env <command> <args…>; Buzz tools reach it over HTTP MCP. A harness withoutmcpCapabilities.httpis refused.AgentKey), as Goose does; pubkeys are used only for protocol identity, so a session keeps the handle of the community it opened in.buzz.acp.sessions.v1, per agent, device-only): last active time, plus the harness session id, coverage (by event id, the newest 256, so a same-second or late older message is still delivered after resume; only context the prompt actually rendered counts as covered) and acontextdigest (launch approval, workspace, instructions, team, name, added tools, scope; no env values). A saved session resumes only while that digest matches. Listed throughsessions.buzz.acp.owed.v1, device-only, IDs only, newest 256 per conversation and 64 conversations): every trigger is recorded as owed before its turn starts, and it is cleared only once a committed prompt's coverage includes it, so a failed, refused or stopped turn, or one that settled early through its final Buzz send, leaves it owed. Every later prompt, including a successor already waiting, carries owed messages as context even below the saved mark, ahead of other messages; more than 12 go out in batches across successful prompts, newest first. They are fetched from the relay by ID for every trigger and checked against the channel, and against the thread only when the session is thread-scoped, so a channel-wide session recovers them from any thread or top-level post, and recovery after a restart doesn't depend on the thread's newest 200 replies. A waiting delivery cancelled through its own signal posts nothing and stays owed.buzz.acp.models.v1, per confirmed launch and workspace): fed by each session's option state and by Check, which opens one extra session in its own process with no Buzz tools. Efforts are recorded only for a model that was actually selected. A harness with a model control and no effort control (Cursor) gets a models-only picker.loadSession, otherwise it says the harness can't replay transcripts. Opened from agent activity, it shows that conversation's transcript (its thread's, else its channel's) through the shareduseOpenTranscript. Opening a transcript moves keyboard focus to Back; Back returns it to that row's Transcript action, else the first remaining one, else the list or its empty state.-32000, Settings shows the preset's sign-in guidance and the harness's advertised methods, labelled as text from the harness. Nothing is run. Recheck restarts the harness with bounded retries.⚠️ I couldn't finish that. Details are in my activity., plus at most one of our own hints (unconfirmed command, missing program, or the preset's sign-in command on a new session's first turn). The full error goes to local activity, which keeps the whole error (up to 8,000 characters) as local-onlydetailfor every agent type.session/new'ssystemPromptonly when advertised, otherwise they lead a new session's first prompt once. Mid-turn messages queue for the next turn.session/closeis sent only when advertised. Stop cancels every turn still running in the conversation withsession/cancel, including one on a session retired by a settings change (local or synced) until that session closes. Owner authorization follows the Goose runtime.