Skip to content

chore(docs): add ACP research corpus and decision record - #520

Merged
yordis merged 3 commits into
mainfrom
yordis/sarajevo-v1
Aug 1, 2026
Merged

chore(docs): add ACP research corpus and decision record#520
yordis merged 3 commits into
mainfrom
yordis/sarajevo-v1

Conversation

@yordis

@yordis yordis commented Aug 1, 2026

Copy link
Copy Markdown
Member
  • Freezes the ACP industry study behind the platform's ACP hosting direction, so the evidence each conclusion rests on stays inspectable instead of living only in a chat transcript.
  • Keeps the research prompt alongside the findings so the scope, disambiguation rules, and evidence bar are reproducible when the ecosystem shifts.
  • Gives future ADRs a citable baseline for the acp-host build sequencing, with the ADR index and ACP Conformance kept authoritative wherever they diverge.

Freezes the ACP industry study and roadmap analysis that back the platform's ACP hosting decisions, so later ADRs can cite a reproducible evidence base.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 1, 2026 20:57
@cursor

cursor Bot commented Aug 1, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Documentation-only addition with no code, config, or auth behavior changes.

Overview
Introduces docs/research/acp/ as a citable research corpus for ACP hosting: a reproducible research prompt, index, cross-cutting synthesis and decision record, plus component deep dives (channel mapping, bridge mechanics, acp-host design, permissions, secrets, media, ACP vs A2A).

Fifteen product dossiers under products/ document how each tool uses ACP (native vs adapter), invocation/auth, and callability from trogonai—consistently noting the missing acp-host client that would spawn stdio ACP CLIs onto existing NATS subjects.

docs/research/README.md gains three reference repos (Zed, agent-client-protocol, Cline). No runtime or ADR text changes; ADRs and ACP Conformance stay authoritative where they diverge from this record.

Reviewed by Cursor Bugbot for commit 1120e3a. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@yordis, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 11 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e7b7243a-489e-4106-87e1-1e93cebfcb03

📥 Commits

Reviewing files that changed from the base of the PR and between 729686c and 1120e3a.

📒 Files selected for processing (3)
  • docs/research/acp/decision-record.md
  • docs/research/acp/products/openclaw.md
  • docs/research/acp/secrets-at-spawn.md

Walkthrough

Added an indexed ACP research corpus with protocol comparisons, product case studies, host and security designs, media architecture, Rust ecosystem findings, and Tier 2 adoption profiles. The documents record source verification, callability corrections, and proposed trogonai integration boundaries.

Changes

ACP research corpus

Layer / File(s) Summary
Research scope and corpus index
docs/research/README.md, docs/research/acp/RESEARCH_PROMPT.md, docs/research/acp/index.md
Added the ACP research brief, corpus index, methodology links, and source repository entries.
Protocol, channel, and ecosystem model
docs/research/acp/acp-vs-a2a.md, docs/research/acp/bridge-mechanics.md, docs/research/acp/channel-mapping.md, docs/research/acp/synthesis.md
Documented ACP boundaries, A2A comparison, channel adapters, session handling, metadata, approvals, and protocol synthesis.
ACP host and security design
docs/research/acp/decision-record.md, docs/research/acp/host-role-and-invocation.md, docs/research/acp/sandboxed-workspaces.md, docs/research/acp/permission-decision-point.md, docs/research/acp/secrets-at-spawn.md
Recorded the missing subprocess host and designs for invocation, sandboxing, authorization, credential injection, and implementation sequencing.
Media transport and storage
docs/research/acp/file-media-pipeline.md, docs/research/acp/media-store.md
Compared media handling and storage systems, then defined resource-link, size, retention, and security rules.
Product integration case studies
docs/research/acp/products/*
Added ACP dossiers for agent products, editors, and channel systems, including transport details, callability assessments, verification, and corrections.
Crate and Tier 2 ecosystem inventory
docs/research/acp/rust-crates.md, docs/research/acp/tier2-profiles.md
Added Rust crate guidance and profiles for Neovim, Emacs, Obsidian, Marimo, and OpenHands ACP adoption.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Possibly related PRs

Suggested reviewers: copilot

Poem

A rabbit mapped the ACP trail,
Through NATS winds and stdio gale.
Hosts, agents, media in a row,
Sources checked before they grow.
Zed and Cline now join the chart—
Research hops with careful heart.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the added ACP research corpus and decision record.
Description check ✅ Passed The description explains the research corpus, reproducibility goals, and its role in future ACP hosting ADRs.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yordis/sarajevo-v1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a frozen research corpus under docs/research/acp/ to document the Agent Client Protocol (ACP) ecosystem study, including a synthesis, product dossiers, and implementation-facing deep dives meant to inform future ACP hosting/bridge decisions.

Changes:

  • Extends the central research repo list with ACP-relevant upstream projects.
  • Adds an ACP research index + reusable research prompt to make the study reproducible.
  • Adds synthesis, decision record, and multiple deep-dive dossiers (sandboxing, secrets at spawn, media pipeline/store, permission PDP, channel bridging, crate inventory, tier-2 profiles, ACP vs A2A) plus 15 product dossiers.

Reviewed changes

Copilot reviewed 31 out of 31 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
docs/research/README.md Adds ACP-related repos to the shared research source list.
docs/research/acp/index.md Introduces the ACP corpus entrypoint and navigation structure.
docs/research/acp/RESEARCH_PROMPT.md Captures the reusable prompt/spec for reproducing the ACP study.
docs/research/acp/synthesis.md Cross-cutting synthesis of ACP protocol contract, adoption, and patterns.
docs/research/acp/decision-record.md Records ACP fit/gap analysis and recommended build sequencing.
docs/research/acp/rust-crates.md Inventories ACP Rust crates and adoption recommendations.
docs/research/acp/tier2-profiles.md Summarizes tier-2 ACP client implementations across ecosystems.
docs/research/acp/host-role-and-invocation.md Documents the ACP client-host role and subprocess invocation mechanics.
docs/research/acp/channel-mapping.md Explains how non-editor channels map to ACP sessions in the platform model.
docs/research/acp/bridge-mechanics.md Details channel-bridge UX/mechanics and observed industry patterns.
docs/research/acp/file-media-pipeline.md Describes file/media handling patterns across ACP and adjacent systems.
docs/research/acp/media-store.md Evaluates storage backends and proposes a media:// wire representation.
docs/research/acp/permission-decision-point.md Proposes a policy decision point design behind session/request_permission.
docs/research/acp/secrets-at-spawn.md Distills spawn-time credential injection requirements for acp-host.
docs/research/acp/sandboxed-workspaces.md Surveys sandbox primitives and recommends a tiered workspace isolation design.
docs/research/acp/acp-vs-a2a.md Compares ACP vs A2A scopes/governance and coexistence patterns.
docs/research/acp/products/buzz.md Product dossier for Buzz with ACP boundary implications.
docs/research/acp/products/claude-code.md Product dossier for Claude Code via the ACP adapter.
docs/research/acp/products/cline.md Product dossier for Cline’s ACP agent mode.
docs/research/acp/products/codex-cli.md Product dossier for Codex CLI via the codex-acp adapter.
docs/research/acp/products/cursor.md Product dossier for Cursor’s ACP agent mode.
docs/research/acp/products/devin.md Product dossier for Devin’s ACP surfaces (Desktop + CLI).
docs/research/acp/products/gemini-cli.md Product dossier for Gemini CLI’s native ACP agent mode.
docs/research/acp/products/goose.md Product dossier for Goose’s ACP agent/client roles.
docs/research/acp/products/grok-cli.md Product dossier for Grok Build’s ACP agent mode and extensions.
docs/research/acp/products/hermes-agent.md Product dossier for Hermes Agent ACP integration details.
docs/research/acp/products/jetbrains.md Product dossier for JetBrains IDE ACP client integration.
docs/research/acp/products/netclaw.md Product dossier for NetClaw (no ACP) as a channel/gateway case study.
docs/research/acp/products/openclaw.md Product dossier for OpenClaw’s ACP usage and channel architecture.
docs/research/acp/products/opencode.md Product dossier for OpenCode’s ACP mode and parallel API surface.
docs/research/acp/products/zed.md Product dossier for Zed as ACP reference client and ecosystem anchor.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docs/research/acp/products/openclaw.md
Comment thread docs/research/acp/secrets-at-spawn.md Outdated
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 1, 2026 21:01

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated no new comments.

Suppressed comments (7)

docs/research/acp/products/netclaw.md:11

  • The body text uses “Netclaw” while other files use “NetClaw”. This makes cross-references inconsistent; please update the proper noun to a single spelling throughout.
Netclaw is Petabridge's open-source, self-hosted, always-on agent daemon built on Akka.NET (C#, .NET 10). GitHub: [netclaw-dev/netclaw](https://github.com/netclaw-dev/netclaw). It is Apache 2.0, pre-1.0 (0.24.x line as of this dossier's July 2026 capture), created 2026-02-21. It is explicitly a different project from `automateyournetwork/netclaw` (an OpenClaw-based network tool that happens to share the name).

### 1. ACP status: none

Netclaw does not implement the Agent Client Protocol in any form. Its README, product page, and [architecture overview](https://netclaw.dev/architecture/overview/) contain zero references to ACP, `agent-client-protocol`, Zed, or `agentclientprotocol.com`, and Netclaw is absent from the [official ACP registry](https://agentclientprotocol.com/get-started/registry) of implementing agents and clients. This is not an oversight to fix later so much as a category mismatch: Netclaw's whole design center is being the durable, supervising parent process (Akka actor tree, event-sourced sessions), the role ACP expects the *client* (editor/host) to play, not the ephemeral subprocess agent ACP expects to spawn and tear down. Note the adjacent but distinct project [OpenClaw](./openclaw.md) does ship an "ACP agents" feature (`docs/tools/acp-agents.md`, `channels.discord.threadBindings.spawnAcpSessions`) that spawns external ACP coding harnesses inside chat threads -- this is sometimes conflated with Netclaw because the two share GitHub topics (`hermes-agent`, `openclaw`), but it is OpenClaw's feature, not Netclaw's.

docs/research/acp/products/netclaw.md:19

  • More occurrences of “Netclaw” should be normalized to “NetClaw” for consistency with index.md and other dossiers.
Netclaw ships two binaries: `netclawd`, an always-on ASP.NET Core daemon binding loopback `127.0.0.1:5199` by default, and `netclaw`, a thin CLI/TUI. The CLI talks to the daemon over SignalR (`/hub/session`, real-time sessions) and REST (`/api/*`, management), never as a subprocess the daemon spawns per session -- it is the reverse of ACP's stdio-subprocess model. Sessions are persistent Akka actors (`LlmSessionActor`) keyed by channel plus thread identifier (Slack thread `channelId/threadTs`), recovered via event-sourced journal replay and passivated after idle timeout. Permission requests run through a four-layer invocation stack (operation hard-deny, resource hard-deny, audience tool grant, interactive approval gate); non-interactive channels auto-deny gated tools rather than prompting, which has no ACP `session/request_permission` analog. MCP servers are configured in the layered `~/.netclaw/config/` JSON tree and managed by `McpClientManager` with OAuth support and progressive disclosure (sessions see only server summaries until a tool is invoked) -- this is MCP passthrough on the tool side, unrelated to ACP.

### 3. Channel mapping

Yes, Netclaw maps external channels into sessions, but never over ACP. Slack (Socket Mode, per-channel audience controls), Discord (guilds and DMs), and Mattermost (WebSocket events plus REST replies) are all documented production channels. The doctrine is "everything is just input" -- a Slack message, a webhook POST, a timer firing, or a CLI chat line all become messages routed to the same session-actor abstraction, with audience (Public/Team/Personal) derived from which channel the message arrived on. This is architecturally the same pattern trogonai would want for its own channel adapters, just implemented as Akka actor message routing rather than ACP session multiplexing.

docs/research/acp/products/netclaw.md:27

  • This section still uses “Netclaw” repeatedly; please standardize to “NetClaw” (matching docs/research/acp/index.md) to avoid inconsistent naming in the corpus.
Not callable as an ACP agent: there is no invocation command, no `--acp` flag, no adapter package, because no ACP surface exists to invoke. trogonai could only reach Netclaw today via non-ACP paths -- pointing Netclaw's own `McpClientManager` at an MCP server trogonai exposes (inverse direction), or having both systems post into a shared Slack/Discord channel with no session-level protocol between them. Building a real bridge (a SignalR client translating ACP session/prompt/permission calls onto Netclaw's session-actor and approval-gate model) is a medium-to-high effort exercise with no existing community adapter, since Netclaw's lifecycle model (long-lived daemon-owned actors) does not map cleanly onto ACP's per-session subprocess model.

### 5. Design lessons for trogonai

Copy: the audience/trust-tier classification derived purely from ingress channel (Public/Team/Personal), the four-layer tool-invocation stack where UI approval is only the outermost gate, and "everything is just input" as a single message-routing doctrine across channels. Avoid: coupling the channel-adapter layer so tightly to the daemon's own session-actor supervision that there is no clean seam for an external protocol like ACP to attach at -- trogonai's ACP boundary (`acp-nats*`) should stay a distinct, spawnable interface rather than folding channel routing and agent-hosting into one inseparable process the way Netclaw does.

docs/research/acp/secrets-at-spawn.md:160

  • Typo in the source list label: “SECRET_MANAGEMNT” is missing an “E” and reads like an internal document identifier. Please correct it so it is searchable and unambiguous.
Prior secret-management research (SECRET_MANAGEMNT, AWS_VS_OPENBAO,

docs/research/acp/products/netclaw.md:46

  • The adversarial-verification bullets also use “Netclaw”. For consistency with the dossier headings and index, these should use the same “NetClaw” capitalization (leaving repo URLs/domains as-is).
- **confirmed**: 2. Callability verdict from a Rust ACP client host is "no": Netclaw exposes no ACP surface at all, and the only reachable paths are non-ACP (MCP-client-target inversion or shared-channel peering), with no path to spawn/supervise it as an ACP agent process. (Primary sources show Netclaw is a closed-loopback ASP.NET Core daemon (netclawd) reachable only via SignalR /hub/session and REST /api/*, is C#/.NET (not a crates.io/npm ACP SDK consumer), is absent from the official ACP registry, and exposes no --acp flag or bridge, matching the described inversion/channel-peer-only reachability.)
- **confirmed**: Netclaw README, netclaw.dev product page, and architecture-overview doc contain no mention of ACP, agent-client-protocol, Zed, or agentclientprotocol.com. (Directly fetched https://github.com/netclaw-dev/netclaw and https://netclaw.dev/architecture/overview/ and confirmed via WebFetch summarization plus GitHub code-search API (0 results for both "ACP" and "agent-client-protocol" repo-scoped) that none of these terms appear.)
- **confirmed**: Netclaw does not appear in the official ACP registry of implementing agents/clients. (Fetched https://agentclientprotocol.com/get-started/registry; the listed 40+ agents (Claude Agent, Gemini CLI, Cursor, goose, Codex, etc.) do not include Netclaw, netclaw-dev, or Petabridge.)
- **confirmed**: Netclaw is two binaries (netclawd daemon on loopback http://127.0.0.1:5199, and netclaw CLI/TUI) connecting via SignalR /hub/session and REST /api/*. (https://netclaw.dev/architecture/overview/ explicitly states netclawd is "an ASP.NET Core application that owns all agent logic" binding to "http://127.0.0.1:5199 (loopback only) by default," with the CLI connecting via SignalR to /hub/session for sessions and REST /api/* for management.)

docs/research/acp/products/netclaw.md:5

  • The product name capitalization is inconsistent with the rest of the ACP corpus (e.g. index.md lists “NetClaw”). Please standardize on one spelling (likely “NetClaw”) for headings to keep navigation and search consistent.

This issue also appears in the following locations of the same file:

  • line 7
  • line 15
  • line 23
  • line 43
# Netclaw (netclaw-dev/netclaw, Petabridge)

Produced by the ACP product case-study pass (2026-07-30), then adversarially verified; corrections below override the body where they conflict.

## Netclaw (Petabridge) -- gateway channel case study for trogonai

docs/research/acp/decision-record.md:116

  • ADR#0023 is marked status: accepted (2026-07-11) in its front matter, so describing it as “had not reached accepted status” is now incorrect and conflicts with other research files (e.g. secrets-at-spawn.md).
  itself. The secret custody direction fixes the secrets-service
  architecture those guarantees are built on, but had not reached accepted
  status as of this writing.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Due to the large number of review comments, Critical severity comments were prioritized as inline comments.

🟠 Major comments (21)
docs/research/acp/secrets-at-spawn.md-128-138 (1)

128-138: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Do not promise that spawn-time secrets never enter crash state.

The child receives the credential through its environment for the process lifetime. Output scrubbing does not cover core dumps, /proc access, debugger inspection, or crash-report collection. Rephrase the guarantee as “acp-host does not persist or log the credential,” then define process-level protections for stronger guarantees.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/secrets-at-spawn.md` around lines 128 - 138, Update the
Injection and verification language in the secrets-at-spawn document to avoid
claiming that spawn-time credentials never enter crash state. State only that
acp-host does not persist or log the credential, and separately define required
process-level protections for core dumps, /proc access, debugger inspection, and
crash-report collection.
docs/research/acp/sandboxed-workspaces.md-128-143 (1)

128-143: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Do not describe acp-host as already implemented.

decision-record.md and host-role-and-invocation.md identify acp-host as the missing component to build. Replace “already IS” with future-state wording. Otherwise this dossier makes RPC validation appear available when it is not.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/sandboxed-workspaces.md` around lines 128 - 143, Update the
description of acp-host in the comparison to use future-state wording, removing
the claim that it already serves fs/* and terminal/* RPCs. Preserve the intended
architecture and security-layer recommendations while making clear that acp-host
is a missing component to be built, not currently available.
docs/research/acp/sandboxed-workspaces.md-38-47 (1)

38-47: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Use primary sources for the path-validation failure claim.

The grounding note says claims cite primary documentation, but this paragraph relies on Cymulate and CybersecurityNews for the CVE and audit claims. Cite NVD, vendor advisories, or the Endor Labs report, or mark these claims as secondary evidence.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/sandboxed-workspaces.md` around lines 38 - 47, Replace the
Cymulate and CybersecurityNews citations in the paragraph beginning “Two
demonstrated failure modes” with primary sources: NVD or Anthropic/vendor
advisories for CVE-2025-53110 and CVE-2025-53109, and the original Endor Labs
report for the MCP audit statistics. Preserve the existing claims while updating
the Sources list to identify each authoritative reference, or explicitly label
any remaining secondary sources as such.
docs/research/acp/permission-decision-point.md-134-157 (1)

134-157: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Distinguish accepted policy from draft ADR guidance.

Both documents use ADR 0032 as a settled security rule, but docs/research/acp/decision-record.md identifies ADR 0032 as draft.

  • docs/research/acp/permission-decision-point.md#L134-L157: label audit and credential requirements as proposed until acceptance.
  • docs/research/acp/secrets-at-spawn.md#L71-L89: distinguish hosted implementations from third-party child processes and mark the no-secret rule as draft.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/permission-decision-point.md` around lines 134 - 157, In
docs/research/acp/permission-decision-point.md lines 134-157, label the ADR 0032
audit and credential-handling requirements as proposed guidance pending
acceptance rather than settled rules. In docs/research/acp/secrets-at-spawn.md
lines 71-89, distinguish hosted implementations from third-party child processes
and mark the no-secret rule as draft; update only the document wording and
preserve the described requirements.
docs/research/acp/channel-mapping.md-32-39 (1)

32-39: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Make the A2A-to-ACP translation explicit.

The documents disagree on whether an A2A caller is directly an ACP client or remains on the A2A path.

  • docs/research/acp/channel-mapping.md#L32-L39: show the A2A adapter and its session/auth translation, or remove A2A from the ACP-client diagram.
  • docs/research/acp/decision-record.md#L75-L80: use the same boundary in the roadmap and avoid calling A2A callers ACP clients without translation.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/channel-mapping.md` around lines 32 - 39, Make the
A2A-to-ACP boundary consistent across docs/research/acp/channel-mapping.md lines
32-39 and docs/research/acp/decision-record.md lines 75-80: either depict an A2A
adapter explicitly translating sessions and authentication before reaching the
ACP session, or remove A2A from the ACP-client diagram and roadmap language.
Update both sites to use the same model and do not describe A2A callers as
direct ACP clients without translation.
docs/research/acp/acp-vs-a2a.md-43-45 (1)

43-45: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Define ACP’s actual isolation boundary.

ACP client callbacks mediate client-owned filesystem and terminal operations. They do not constrain all child-process, descendant, MCP-server, or network access.

  • docs/research/acp/acp-vs-a2a.md#L43-L45: remove the claim that client-specified MCP servers are the complete trust boundary.
  • docs/research/acp/host-role-and-invocation.md#L62-L66: state that the host mediates client-environment access, while OS sandboxing protects the process boundary.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/acp-vs-a2a.md` around lines 43 - 45, The ACP trust model
description must distinguish client mediation from the actual process isolation
boundary. In docs/research/acp/acp-vs-a2a.md lines 43-45, revise the Trust model
text to remove the claim that the agent connects only to client-specified MCP
servers as a complete boundary, while retaining the documented client-controlled
subprocess and permission-mediated filesystem/terminal access. In
docs/research/acp/host-role-and-invocation.md lines 62-66, explicitly state that
the host mediates access to the client environment and OS sandboxing protects
the process boundary.
docs/research/acp/decision-record.md-112-112 (1)

112-112: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Fix the broken ADR references before merge.

CI fails because both ADR#0023 references on this line are bare text. Link them to the accepted ADR.

Proposed fix
- rather than in ADR#0023 itself; ADR#0023 fixes
+ rather than in [ADR#0023](../../adr/0023-secret-management-and-key-custody-direction.md) itself; [ADR#0023](../../adr/0023-secret-management-and-key-custody-direction.md) fixes
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/decision-record.md` at line 112, Update both ADR#0023
references in the decision record sentence to use links to the accepted ADR,
preserving the surrounding wording and ensuring neither reference remains bare
text.

Source: Pipeline failures

docs/research/acp/media-store.md-60-70 (1)

60-70: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Define the target media:// resolver before emitting it on ACP wire.

ACP requires support for resource_link.uri but does not define media:// resolution. Emission should not assume any agent can dereference it; require or document the resolver contract for the receiving agent, or translate at the adapter boundary if that agent only supports existing schemes like file:// or workspace paths. Correct the claim to “ACP resource_link.uri has no mandated scheme” instead of saying the spec mandates no scheme.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/media-store.md` around lines 60 - 70, Update the media URI
design to state that ACP resource_link.uri has no mandated scheme, not that the
specification forbids schemes. Define the media:// resolver contract and
receiving-agent capability requirement before emitting these URIs, and specify
adapter-boundary translation to supported schemes such as file:// or workspace
paths when needed.
docs/research/acp/media-store.md-66-70 (1)

66-70: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Set the inline threshold below the configured NATS max_payload.

1 MB is too close to NATS’s default 1 MiB; base64 expansion plus the JSON/RPC envelope can push the message into NATS rejection. Derive the inline cutoff from the account/broker limit, include the full envelope overhead, and test the largest encoded message.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/media-store.md` around lines 66 - 70, Update the
inline-media threshold guidance in the ACP media-store documentation to derive
the cutoff from the configured NATS max_payload rather than using a fixed ~1MB
value. Account for base64 expansion and the complete JSON-RPC envelope, leaving
sufficient margin below the broker limit, and add coverage validating the
largest encoded message remains accepted.
docs/research/acp/sandboxed-workspaces.md-232-243 (1)

232-243: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Do not limit terminal/* enforcement to workspace path checks.

terminal/create runs command/args in a cwd with env; path checks do not constrain command behavior, subprocesses, symlinks, or network access. Keep OS sandboxing plus command-policy validation as the control layers for terminal/*. (agentclientprotocol.com)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/sandboxed-workspaces.md` around lines 232 - 243, Update the
Tier 0 description to clarify that workspace path validation alone does not
secure terminal/* calls. State that terminal/create command, args, cwd, and env
require command-policy validation and OS sandboxing to constrain execution,
subprocesses, symlinks, and network access, while retaining RPC-boundary path
checks for filesystem operations.
docs/research/acp/acp-vs-a2a.md-53-55 (1)

53-55: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Add ACP authenticate handling before session/new.

ACP v1 negotiates authentication in initialize via authMethods; if the agent requires authentication, session/new fails with auth_required until authenticate completes. Update the auth comparison to include this RPC, and insert the optional authenticate step before creating the session.

  • docs/research/acp/acp-vs-a2a.md#L53-L55
  • docs/research/acp/host-role-and-invocation.md#L54-L61
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/acp-vs-a2a.md` around lines 53 - 55, The ACP authentication
comparison in docs/research/acp/acp-vs-a2a.md lines 53-55 must include the
initialize/authMethods negotiation and authenticate RPC, replacing the claim
that no dedicated authenticate method exists; document that authenticate is
optionally required before session/new. Apply the corresponding
authentication-flow update in docs/research/acp/host-role-and-invocation.md
lines 54-61 by inserting authenticate after initialize and before session
creation when the agent requires it, while preserving the unauthenticated path.
docs/research/acp/RESEARCH_PROMPT.md-57-62 (1)

57-62: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Align RQ2.1 with the curated product scope.

RQ2.1 requires coverage for VS Code and Copilot, but neither product appears in Tier 1 or Tier 2. Lines 88-90 also mark unlisted products as out of scope. Add these products to a tier and index their outputs, or remove them from RQ2.1. Constrain “find who else” in RQ2.2 to the curated list if it must not expand scope.

Also applies to: 86-90

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/RESEARCH_PROMPT.md` around lines 57 - 62, Align RQ2.1 with
the curated product scope by either adding VS Code and Copilot to Tier 1 or Tier
2 and indexing their outputs, or removing them from RQ2.1. Update the scope
guidance around RQ2.2 and lines 86-90 so “find who else” cannot expand beyond
the curated list unless those products are explicitly included.
docs/research/acp/products/claude-code.md-25-25 (1)

25-25: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Record the providers capability gap as known.

In line 25, replace the open validation task with the established trogonai boundary: providers/list, providers/set, and providers/disable are already unrepresentable at the Rust SDK 2.0.0/ACP conformance boundary, so relying on the adapter’s provider capabilities is unavailable today.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/claude-code.md` at line 25, Update the capability
discussion in the adapter description to record the known trogonai boundary:
state that providers/list, providers/set, and providers/disable cannot currently
be represented at the Rust SDK 2.0.0/ACP conformance boundary, so the adapter’s
provider capabilities are unavailable. Replace the open pinned-schema validation
task while preserving the surrounding notes about supported operations and
authentication.
docs/research/acp/products/grok-cli.md-34-34 (1)

34-34: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Align the callability statement with the verified host role.

Line 34 says the existing bridge can spawn grok agent stdio. The correction at Line 64 states that trogonai currently lacks this subprocess-spawning client host. Update the body to describe future integration work.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/grok-cli.md` at line 34, Update the integration
description around trogonai's acp-nats-stdio bridge to avoid claiming it
currently spawns grok agent stdio. Describe subprocess-spawning support as
future integration work, while preserving the verified authentication,
licensing, SDK-version, and extension considerations.
docs/research/acp/products/gemini-cli.md-23-23 (2)

23-23: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Align the current-callability statement with the host design.

Line 23 describes the existing bridge as directly compatible for spawning gemini --acp. The supplied corrections state that trogonai has no subprocess-spawning client host today. Mark this as protocol compatibility in principle, not current callability.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/gemini-cli.md` at line 23, Update the integration
assessment around the “gemini --acp” invocation to state that it is
protocol-compatible in principle with trogonai’s acp-nats-stdio pattern, not
currently directly callable. Clarify that trogonai does not yet provide the
subprocess-spawning client host, while preserving the existing authentication,
licensing, RPC, and release-pinning details.

23-23: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Qualify the permissive-license statements.

Apache-2.0 and MIT allow integration, but they do not eliminate compliance obligations.

  • docs/research/acp/products/gemini-cli.md#L23-L23: replace “no constraint on embedding” with a statement subject to Apache-2.0 notices, license, patent, and trademark terms.
  • docs/research/acp/products/grok-cli.md#L34-L34: replace “no embedding constraint” with the same qualified wording.
  • docs/research/acp/products/hermes-agent.md#L23-L23: state the MIT notice requirement.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/gemini-cli.md` at line 23, Qualify the license
statements in docs/research/acp/products/gemini-cli.md:23-23 and
docs/research/acp/products/grok-cli.md:34-34 by replacing the unrestricted
embedding claim with wording that acknowledges Apache-2.0 license, notice,
patent, and trademark obligations; update
docs/research/acp/products/hermes-agent.md:23-23 to state the MIT license notice
requirement.
docs/research/acp/products/cursor.md-25-25 (1)

25-25: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Use one trogonai ACP host-role contract across the dossiers.

These entries describe current trogonai crates as ACP client hosts that spawn external agents. The supplied host-role record and corrections state that the current crates expose the agent-side stdio boundary and do not spawn child processes. A new ACP client-host component is required.

  • docs/research/acp/products/cursor.md#L25-L25: replace “can spawn ... right now” with a future-integration statement.
  • docs/research/acp/products/cursor.md#L49-L49: change the callability verification from confirmed to refuted.
  • docs/research/acp/products/cursor.md#L58-L58: state that the internal crate evidence confirms only the bridge role, and identify its path and commit.
  • docs/research/acp/products/devin.md#L11-L11: remove the claim that the existing bridge expects a spawned Devin subprocess.
  • docs/research/acp/products/gemini-cli.md#L23-L23: describe protocol compatibility in principle, not current subprocess callability.
  • docs/research/acp/products/goose.md#L25-L25: replace the current “can plausibly spawn” claim with the required new-host work.
  • docs/research/acp/products/goose.md#L55-L55: mark the callability verification as refuted.
  • docs/research/acp/products/goose.md#L66-L66: update the correction summary to record the callability correction.
  • docs/research/acp/products/grok-cli.md#L34-L34: remove the claim that the existing bridge can spawn Grok.
  • docs/research/acp/products/hermes-agent.md#L23-L23: state that a new client-host component is required.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/cursor.md` at line 25, Align all listed ACP
product dossiers with the single trogonai host-role contract: in
docs/research/acp/products/cursor.md lines 25, 49, and 58, describe future
integration, mark callability refuted, and identify the bridge-only crate
evidence with its path and commit; in docs/research/acp/products/devin.md line
11, remove the spawned-subprocess claim; in
docs/research/acp/products/gemini-cli.md line 23, state protocol compatibility
only in principle; in docs/research/acp/products/goose.md lines 25, 55, and 66,
require a new host, mark callability refuted, and record that correction; in
docs/research/acp/products/grok-cli.md line 34, remove the existing-bridge
spawning claim; and in docs/research/acp/products/hermes-agent.md line 23, state
that a new client-host component is required.
docs/research/acp/products/hermes-agent.md-15-15 (1)

15-15: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not treat Hermes ACP session scoping as finalized.

The Hermes docs conflict: the ACP feature page says list/load/resume/fork are scoped to the running server process, while the acp internals page says ACP sessions persist to ~/.hermes/state.db and restore on restart. Replace the settled process-local gap in docs/research/acp/products/hermes-agent.md lines 15 and 27 with that open discrepancy until acp_adapter/session.py is checked.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/hermes-agent.md` at line 15, Update the Hermes ACP
session-lifecycle description around HermesACPAgent and SessionManager to
present list/load/resume/fork persistence as an unresolved discrepancy, rather
than asserting process-local scoping. Note the conflicting claim that sessions
restore from shared state.db, and leave the behavior explicitly pending
verification in the ACP session implementation.
docs/research/acp/rust-crates.md-3-3 (1)

3-3: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Narrow the corpus-wide verification claim.

Line 3 says all data was verified live, but line 68 says the agentclientprotocol/codex-acp crates.io publish name was not separately confirmed. Narrow the top-level scope or add per-entry verification status so unverified names are not treated as audited facts for dependents.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/rust-crates.md` at line 3, Narrow the corpus-wide
verification statement in the document header so it does not claim every entry
was live-verified when agentclientprotocol/codex-acp’s crates.io publish name
remains unconfirmed. Either qualify the header to exclude unverified metadata or
add explicit per-entry verification status, while preserving the existing scope
clarification.
docs/research/acp/tier2-profiles.md-7-7 (1)

7-7: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Remove the claim that avante.nvim lacks ACP integration.

avante.nvim documents ACP support for configured ACP-compatible agents, including gemini-cli, claude-code, goose, and codex. Do not present CodeCompanion as the only maintained Neovim ACP client.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/tier2-profiles.md` at line 7, Update the CodeCompanion.nvim
discussion to remove the claim that avante.nvim lacks ACP integration, and
acknowledge avante.nvim’s documented support for configured ACP-compatible
agents such as gemini-cli, claude-code, goose, and codex. Reword the comparison
so CodeCompanion is not presented as the only maintained Neovim ACP client.
docs/research/acp/rust-crates.md-93-93 (1)

93-93: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Record the official Kotlin SDK.

Update line 93 to reference agentclientprotocol/kotlin-sdk with its official link/status. If this survey only checked acp-kotlin, use that in the probe, but do not leave Kotlin as unverified here. Also remove the “Kotlin claimed” claim from line 97 once the official repo is recorded.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/rust-crates.md` at line 93, Update the Kotlin entry in the
SDK survey to reference agentclientprotocol/kotlin-sdk with its official
repository link and verified status, using the existing probe convention if
needed. Then remove the “Kotlin claimed” wording from the summary at line 97 so
it reflects the recorded official SDK.
🟡 Minor comments (9)
docs/research/acp/media-store.md-36-37 (1)

36-37: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Document presigned URL expiry as client-specific.

AWS CLI s3 presign defaults to one hour; seven days is the maximum for eligible AWS S3 signings, not the default. MinIO SDK/client expiry defaults are implementation-specific. State the AWS/MinIO defaults separately and enforce the application TTL.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/media-store.md` around lines 36 - 37, Update the presigned
URL section to document AWS CLI and MinIO SDK/client expiry defaults separately,
avoiding the claim that seven days is the default; identify seven days as the
maximum for eligible AWS S3 signings, and state how the application enforces its
TTL independently.
docs/research/acp/synthesis.md-39-43 (1)

39-43: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Flag the Streamable HTTP/WebSocket transport as draft.

The ACP Streamable HTTP & WebSocket Transport RFD is still Draft status. The line under the stable ACP v1 contract should call it proposed/draft or note it is separate from the wire v1 stable contract.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/synthesis.md` around lines 39 - 43, The “Protocol contract
(wire v1, stable)” section currently presents HTTP/WebSocket transports as
stable; update that transport wording to identify Streamable HTTP/WebSocket as
proposed/draft or explicitly separate it from the stable wire v1 contract, while
preserving the established stdio transport description.
docs/research/acp/RESEARCH_PROMPT.md-23-31 (1)

23-31: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add evidence for the locked ACP disambiguation.

The IBM/BeeAI ACP distinction and 2025 merger statement are material scope rules, but Lines 25-29 provide no source URL or retrieval date. This does not meet the evidence requirement in Lines 166-171. Add a primary source citation and retrieval date.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/RESEARCH_PROMPT.md` around lines 23 - 31, Add a primary
source URL and retrieval date supporting the IBM/BeeAI ACP distinction and its
2025 merger into A2A within the locked Disambiguation section. Ensure the
citation satisfies the evidence requirements defined near the existing evidence
guidance, without changing the scope statements.
docs/research/acp/products/buzz.md-28-28 (1)

28-28: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Remove the settled callability claim for Cline.

The Cline --acp flow is real, but the “trogonai can already spawn cline --acp through the existing acp-nats-stdio bridge” path is unverified and currently unaddressed by trogonai; mark it as unverified/to-be-prototyped rather than a yes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/buzz.md` at line 28, Remove the settled “yes”
callability claim for Cline and describe the cline --acp path as unverified and
requiring a prototype; update docs/research/acp/products/buzz.md:28,
docs/research/acp/products/claude-code.md:23-25,
docs/research/acp/products/cline.md:19-21, and
docs/research/acp/products/codex-cli.md:15 consistently, making no direct change
at sites that do not contain the Cline claim.
docs/research/acp/products/zed.md-9-9 (1)

9-9: 🗄️ Data Integrity & Integration | 🟡 Minor

Distinguish the Rust crate version from the JSON Schema artifact versions.

At line 9, keep agent-client-protocol-schema at its Rust crate version (1.6.0) and describe schema-v1.20.0 / schema-v2.0.0-alpha.2 as separate GitHub JSON Schema artifact release tags, not the crate versions.
[low_effort和高Reward]

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/zed.md` at line 9, Update the ACP version
description in the Zed documentation so agent-client-protocol-schema remains
identified as Rust crate version 1.6.0, while schema-v1.20.0 and
schema-v2.0.0-alpha.2 are explicitly described as separate GitHub JSON Schema
artifact release tags rather than crate versions.
docs/research/acp/products/cline.md-13-13 (1)

13-13: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use the correct ACP-wrapper class name.

The --acp stdio path instantiates AcpAgent from apps/cli/src/acp/AcpAgent.ts; ClineAgent is the underlying decoupled agent implementation. Update the implementation-path wording so readers can locate the correct file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/cline.md` at line 13, Update the
implementation-path wording in the ACP process-model description to identify
AcpAgent from apps/cli/src/acp/AcpAgent.ts as the class instantiated by the
--acp stdio path, while retaining ClineAgent only as the underlying decoupled
agent implementation.
docs/research/acp/products/cursor.md-11-11 (1)

11-11: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the forum date in the main narrative.

Line 11 says October 2025, but Line 51 records September 7, 2025. Update the main narrative. A correction note does not make the conflicting primary statement reproducible.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/cursor.md` at line 11, Update the date in the main
narrative sentence near the quoted Cursor forum response to match the September
7, 2025 date recorded elsewhere in the document, preserving the surrounding
quotation and context.
docs/research/acp/products/grok-cli.md-19-22 (1)

19-22: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a language to the fenced code block.

Use shell for the command example. This avoids the MD040 warning.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/grok-cli.md` around lines 19 - 22, Update the
fenced code block containing the grok agent commands to specify the shell
language identifier, resolving the MD040 warning while preserving the command
examples.

Source: Linters/SAST tools

docs/research/acp/products/goose.md-11-11 (1)

11-11: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use the actual implementation name.

The verification states that no standalone goose-acp crate exists. The HTTP/WS server lives in the Goose crate's crates/goose/src/acp/* module. Rename this reference or cite an actual crate.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/products/goose.md` at line 11, Update the Goose ACP
documentation to remove the standalone “goose-acp crate” reference and identify
the implementation as the ACP HTTP/WS server under the Goose crate’s
crates/goose/src/acp/* module. Preserve the description of its transport and
migration role, but ensure the implementation name matches the actual repository
structure.
🧹 Nitpick comments (2)
docs/research/acp/RESEARCH_PROMPT.md (1)

43-46: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Make the ACP v2 research question neutral.

The parenthetical lists removals and breaking changes as established facts before verification. Rephrase it as questions to verify against the v2 draft. This preserves the adversarial second-pass requirement and reduces confirmation bias.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/RESEARCH_PROMPT.md` around lines 43 - 46, Revise the “v1 vs
v2 draft” item in the research prompt so the listed transport, session,
client-surface, and prompt-lifecycle changes are framed as questions to verify
rather than established removals or breaks. Keep the detailed comparison,
maturity signals, adoption criteria, and adversarial second-pass requirement
intact.
docs/research/acp/rust-crates.md (1)

102-102: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Name the exact migration APIs.

The v2 migration renames ResponseRouter methods such as respond_with_result to route_with_result. Responder still uses respond*. Replace “respond-to-route renames” with the exact type and method scope so the custom transport work does not apply a blanket rename. (agentclientprotocol.github.io)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/acp/rust-crates.md` at line 102, The migration note should name
the precise API scope: identify ResponseRouter methods renamed from
respond_with_result-style APIs to route_with_result-style APIs, while preserving
Responder’s respond* methods. Replace the vague “respond-to-route renames”
wording in the migration guidance without changing the TransportFrame channel
guidance.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Major comments:
In `@docs/research/acp/acp-vs-a2a.md`:
- Around line 43-45: The ACP trust model description must distinguish client
mediation from the actual process isolation boundary. In
docs/research/acp/acp-vs-a2a.md lines 43-45, revise the Trust model text to
remove the claim that the agent connects only to client-specified MCP servers as
a complete boundary, while retaining the documented client-controlled subprocess
and permission-mediated filesystem/terminal access. In
docs/research/acp/host-role-and-invocation.md lines 62-66, explicitly state that
the host mediates access to the client environment and OS sandboxing protects
the process boundary.
- Around line 53-55: The ACP authentication comparison in
docs/research/acp/acp-vs-a2a.md lines 53-55 must include the
initialize/authMethods negotiation and authenticate RPC, replacing the claim
that no dedicated authenticate method exists; document that authenticate is
optionally required before session/new. Apply the corresponding
authentication-flow update in docs/research/acp/host-role-and-invocation.md
lines 54-61 by inserting authenticate after initialize and before session
creation when the agent requires it, while preserving the unauthenticated path.

In `@docs/research/acp/channel-mapping.md`:
- Around line 32-39: Make the A2A-to-ACP boundary consistent across
docs/research/acp/channel-mapping.md lines 32-39 and
docs/research/acp/decision-record.md lines 75-80: either depict an A2A adapter
explicitly translating sessions and authentication before reaching the ACP
session, or remove A2A from the ACP-client diagram and roadmap language. Update
both sites to use the same model and do not describe A2A callers as direct ACP
clients without translation.

In `@docs/research/acp/decision-record.md`:
- Line 112: Update both ADR#0023 references in the decision record sentence to
use links to the accepted ADR, preserving the surrounding wording and ensuring
neither reference remains bare text.

In `@docs/research/acp/media-store.md`:
- Around line 60-70: Update the media URI design to state that ACP
resource_link.uri has no mandated scheme, not that the specification forbids
schemes. Define the media:// resolver contract and receiving-agent capability
requirement before emitting these URIs, and specify adapter-boundary translation
to supported schemes such as file:// or workspace paths when needed.
- Around line 66-70: Update the inline-media threshold guidance in the ACP
media-store documentation to derive the cutoff from the configured NATS
max_payload rather than using a fixed ~1MB value. Account for base64 expansion
and the complete JSON-RPC envelope, leaving sufficient margin below the broker
limit, and add coverage validating the largest encoded message remains accepted.

In `@docs/research/acp/permission-decision-point.md`:
- Around line 134-157: In docs/research/acp/permission-decision-point.md lines
134-157, label the ADR 0032 audit and credential-handling requirements as
proposed guidance pending acceptance rather than settled rules. In
docs/research/acp/secrets-at-spawn.md lines 71-89, distinguish hosted
implementations from third-party child processes and mark the no-secret rule as
draft; update only the document wording and preserve the described requirements.

In `@docs/research/acp/products/claude-code.md`:
- Line 25: Update the capability discussion in the adapter description to record
the known trogonai boundary: state that providers/list, providers/set, and
providers/disable cannot currently be represented at the Rust SDK 2.0.0/ACP
conformance boundary, so the adapter’s provider capabilities are unavailable.
Replace the open pinned-schema validation task while preserving the surrounding
notes about supported operations and authentication.

In `@docs/research/acp/products/cursor.md`:
- Line 25: Align all listed ACP product dossiers with the single trogonai
host-role contract: in docs/research/acp/products/cursor.md lines 25, 49, and
58, describe future integration, mark callability refuted, and identify the
bridge-only crate evidence with its path and commit; in
docs/research/acp/products/devin.md line 11, remove the spawned-subprocess
claim; in docs/research/acp/products/gemini-cli.md line 23, state protocol
compatibility only in principle; in docs/research/acp/products/goose.md lines
25, 55, and 66, require a new host, mark callability refuted, and record that
correction; in docs/research/acp/products/grok-cli.md line 34, remove the
existing-bridge spawning claim; and in
docs/research/acp/products/hermes-agent.md line 23, state that a new client-host
component is required.

In `@docs/research/acp/products/gemini-cli.md`:
- Line 23: Update the integration assessment around the “gemini --acp”
invocation to state that it is protocol-compatible in principle with trogonai’s
acp-nats-stdio pattern, not currently directly callable. Clarify that trogonai
does not yet provide the subprocess-spawning client host, while preserving the
existing authentication, licensing, RPC, and release-pinning details.
- Line 23: Qualify the license statements in
docs/research/acp/products/gemini-cli.md:23-23 and
docs/research/acp/products/grok-cli.md:34-34 by replacing the unrestricted
embedding claim with wording that acknowledges Apache-2.0 license, notice,
patent, and trademark obligations; update
docs/research/acp/products/hermes-agent.md:23-23 to state the MIT license notice
requirement.

In `@docs/research/acp/products/grok-cli.md`:
- Line 34: Update the integration description around trogonai's acp-nats-stdio
bridge to avoid claiming it currently spawns grok agent stdio. Describe
subprocess-spawning support as future integration work, while preserving the
verified authentication, licensing, SDK-version, and extension considerations.

In `@docs/research/acp/products/hermes-agent.md`:
- Line 15: Update the Hermes ACP session-lifecycle description around
HermesACPAgent and SessionManager to present list/load/resume/fork persistence
as an unresolved discrepancy, rather than asserting process-local scoping. Note
the conflicting claim that sessions restore from shared state.db, and leave the
behavior explicitly pending verification in the ACP session implementation.

In `@docs/research/acp/RESEARCH_PROMPT.md`:
- Around line 57-62: Align RQ2.1 with the curated product scope by either adding
VS Code and Copilot to Tier 1 or Tier 2 and indexing their outputs, or removing
them from RQ2.1. Update the scope guidance around RQ2.2 and lines 86-90 so “find
who else” cannot expand beyond the curated list unless those products are
explicitly included.

In `@docs/research/acp/rust-crates.md`:
- Line 3: Narrow the corpus-wide verification statement in the document header
so it does not claim every entry was live-verified when
agentclientprotocol/codex-acp’s crates.io publish name remains unconfirmed.
Either qualify the header to exclude unverified metadata or add explicit
per-entry verification status, while preserving the existing scope
clarification.
- Line 93: Update the Kotlin entry in the SDK survey to reference
agentclientprotocol/kotlin-sdk with its official repository link and verified
status, using the existing probe convention if needed. Then remove the “Kotlin
claimed” wording from the summary at line 97 so it reflects the recorded
official SDK.

In `@docs/research/acp/sandboxed-workspaces.md`:
- Around line 128-143: Update the description of acp-host in the comparison to
use future-state wording, removing the claim that it already serves fs/* and
terminal/* RPCs. Preserve the intended architecture and security-layer
recommendations while making clear that acp-host is a missing component to be
built, not currently available.
- Around line 38-47: Replace the Cymulate and CybersecurityNews citations in the
paragraph beginning “Two demonstrated failure modes” with primary sources: NVD
or Anthropic/vendor advisories for CVE-2025-53110 and CVE-2025-53109, and the
original Endor Labs report for the MCP audit statistics. Preserve the existing
claims while updating the Sources list to identify each authoritative reference,
or explicitly label any remaining secondary sources as such.
- Around line 232-243: Update the Tier 0 description to clarify that workspace
path validation alone does not secure terminal/* calls. State that
terminal/create command, args, cwd, and env require command-policy validation
and OS sandboxing to constrain execution, subprocesses, symlinks, and network
access, while retaining RPC-boundary path checks for filesystem operations.

In `@docs/research/acp/secrets-at-spawn.md`:
- Around line 128-138: Update the Injection and verification language in the
secrets-at-spawn document to avoid claiming that spawn-time credentials never
enter crash state. State only that acp-host does not persist or log the
credential, and separately define required process-level protections for core
dumps, /proc access, debugger inspection, and crash-report collection.

In `@docs/research/acp/tier2-profiles.md`:
- Line 7: Update the CodeCompanion.nvim discussion to remove the claim that
avante.nvim lacks ACP integration, and acknowledge avante.nvim’s documented
support for configured ACP-compatible agents such as gemini-cli, claude-code,
goose, and codex. Reword the comparison so CodeCompanion is not presented as the
only maintained Neovim ACP client.

---

Minor comments:
In `@docs/research/acp/media-store.md`:
- Around line 36-37: Update the presigned URL section to document AWS CLI and
MinIO SDK/client expiry defaults separately, avoiding the claim that seven days
is the default; identify seven days as the maximum for eligible AWS S3 signings,
and state how the application enforces its TTL independently.

In `@docs/research/acp/products/buzz.md`:
- Line 28: Remove the settled “yes” callability claim for Cline and describe the
cline --acp path as unverified and requiring a prototype; update
docs/research/acp/products/buzz.md:28,
docs/research/acp/products/claude-code.md:23-25,
docs/research/acp/products/cline.md:19-21, and
docs/research/acp/products/codex-cli.md:15 consistently, making no direct change
at sites that do not contain the Cline claim.

In `@docs/research/acp/products/cline.md`:
- Line 13: Update the implementation-path wording in the ACP process-model
description to identify AcpAgent from apps/cli/src/acp/AcpAgent.ts as the class
instantiated by the --acp stdio path, while retaining ClineAgent only as the
underlying decoupled agent implementation.

In `@docs/research/acp/products/cursor.md`:
- Line 11: Update the date in the main narrative sentence near the quoted Cursor
forum response to match the September 7, 2025 date recorded elsewhere in the
document, preserving the surrounding quotation and context.

In `@docs/research/acp/products/goose.md`:
- Line 11: Update the Goose ACP documentation to remove the standalone
“goose-acp crate” reference and identify the implementation as the ACP HTTP/WS
server under the Goose crate’s crates/goose/src/acp/* module. Preserve the
description of its transport and migration role, but ensure the implementation
name matches the actual repository structure.

In `@docs/research/acp/products/grok-cli.md`:
- Around line 19-22: Update the fenced code block containing the grok agent
commands to specify the shell language identifier, resolving the MD040 warning
while preserving the command examples.

In `@docs/research/acp/products/zed.md`:
- Line 9: Update the ACP version description in the Zed documentation so
agent-client-protocol-schema remains identified as Rust crate version 1.6.0,
while schema-v1.20.0 and schema-v2.0.0-alpha.2 are explicitly described as
separate GitHub JSON Schema artifact release tags rather than crate versions.

In `@docs/research/acp/RESEARCH_PROMPT.md`:
- Around line 23-31: Add a primary source URL and retrieval date supporting the
IBM/BeeAI ACP distinction and its 2025 merger into A2A within the locked
Disambiguation section. Ensure the citation satisfies the evidence requirements
defined near the existing evidence guidance, without changing the scope
statements.

In `@docs/research/acp/synthesis.md`:
- Around line 39-43: The “Protocol contract (wire v1, stable)” section currently
presents HTTP/WebSocket transports as stable; update that transport wording to
identify Streamable HTTP/WebSocket as proposed/draft or explicitly separate it
from the stable wire v1 contract, while preserving the established stdio
transport description.

---

Nitpick comments:
In `@docs/research/acp/RESEARCH_PROMPT.md`:
- Around line 43-46: Revise the “v1 vs v2 draft” item in the research prompt so
the listed transport, session, client-surface, and prompt-lifecycle changes are
framed as questions to verify rather than established removals or breaks. Keep
the detailed comparison, maturity signals, adoption criteria, and adversarial
second-pass requirement intact.

In `@docs/research/acp/rust-crates.md`:
- Line 102: The migration note should name the precise API scope: identify
ResponseRouter methods renamed from respond_with_result-style APIs to
route_with_result-style APIs, while preserving Responder’s respond* methods.
Replace the vague “respond-to-route renames” wording in the migration guidance
without changing the TransportFrame channel guidance.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4ddd2223-8166-4d2b-9757-7f399cded372

📥 Commits

Reviewing files that changed from the base of the PR and between de97086 and 729686c.

📒 Files selected for processing (31)
  • docs/research/README.md
  • docs/research/acp/RESEARCH_PROMPT.md
  • docs/research/acp/acp-vs-a2a.md
  • docs/research/acp/bridge-mechanics.md
  • docs/research/acp/channel-mapping.md
  • docs/research/acp/decision-record.md
  • docs/research/acp/file-media-pipeline.md
  • docs/research/acp/host-role-and-invocation.md
  • docs/research/acp/index.md
  • docs/research/acp/media-store.md
  • docs/research/acp/permission-decision-point.md
  • docs/research/acp/products/buzz.md
  • docs/research/acp/products/claude-code.md
  • docs/research/acp/products/cline.md
  • docs/research/acp/products/codex-cli.md
  • docs/research/acp/products/cursor.md
  • docs/research/acp/products/devin.md
  • docs/research/acp/products/gemini-cli.md
  • docs/research/acp/products/goose.md
  • docs/research/acp/products/grok-cli.md
  • docs/research/acp/products/hermes-agent.md
  • docs/research/acp/products/jetbrains.md
  • docs/research/acp/products/netclaw.md
  • docs/research/acp/products/openclaw.md
  • docs/research/acp/products/opencode.md
  • docs/research/acp/products/zed.md
  • docs/research/acp/rust-crates.md
  • docs/research/acp/sandboxed-workspaces.md
  • docs/research/acp/secrets-at-spawn.md
  • docs/research/acp/synthesis.md
  • docs/research/acp/tier2-profiles.md

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 1, 2026 21:46

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated no new comments.

Suppressed comments (3)

docs/research/acp/decision-record.md:116

  • This claims ADR#0023 “had not reached accepted status,” but ADR#0023 is accepted (status: accepted, date: 2026-07-11). This makes the roadmap note internally inconsistent with the ADR index and could confuse readers about whether the secret-custody direction is settled.
  itself. The secret custody direction fixes the secrets-service
  architecture those guarantees are built on, but had not reached accepted
  status as of this writing.

docs/research/acp/secrets-at-spawn.md:168

  • This source reference points to tmp/trogonai, which doesn’t exist in-repo and makes the citation non-actionable for readers. Prefer linking to the actual ADRs under docs/adr via repo-relative paths.
`tmp/trogonai` docs/adr/0023 (accepted) and 0032 (draft).

docs/research/acp/permission-decision-point.md:5

  • This mentions reading ADRs/crates at tmp/trogonai, but that path doesn’t exist in the repository. Since the rest of the doc uses repo-relative file paths, consider rewriting this to reference the repo/branch/commit directly without the local temp path prefix.
and trogonai's own ADRs and aauth crates (read at `tmp/trogonai`, main,
`058b8bee`). Produced 2026-07-30 by a source-grounded research agent;

@yordis
yordis merged commit 4c7f82d into main Aug 1, 2026
8 checks passed
@yordis
yordis deleted the yordis/sarajevo-v1 branch August 1, 2026 22:45
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.

2 participants