chore(docs): add ACP research corpus and decision record - #520
Conversation
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>
PR SummaryLow Risk Overview Fifteen product dossiers under
Reviewed by Cursor Bugbot for commit 1120e3a. Bugbot is set up for automated code reviews on this repo. Configure here. |
|
Warning Review limit reached
Next review available in: 11 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
WalkthroughAdded 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. ChangesACP research corpus
Estimated code review effort: 3 (Moderate) | ~30 minutes Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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.
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 liftDo 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,
/procaccess, 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 winDo not describe
acp-hostas already implemented.
decision-record.mdandhost-role-and-invocation.mdidentifyacp-hostas 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 liftUse 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 winDistinguish accepted policy from draft ADR guidance.
Both documents use ADR 0032 as a settled security rule, but
docs/research/acp/decision-record.mdidentifies 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 liftMake 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 liftDefine 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 winFix the broken ADR references before merge.
CI fails because both
ADR#0023references 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 liftDefine the target
media://resolver before emitting it on ACP wire.ACP requires support for
resource_link.uribut does not definemedia://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 likefile://or workspace paths. Correct the claim to “ACPresource_link.urihas 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 winSet the inline threshold below the configured NATS
max_payload.
1 MBis too close to NATS’s default1 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 liftDo not limit
terminal/*enforcement to workspace path checks.
terminal/createrunscommand/argsin acwdwithenv; path checks do not constrain command behavior, subprocesses, symlinks, or network access. Keep OS sandboxing plus command-policy validation as the control layers forterminal/*. (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 winAdd ACP
authenticatehandling beforesession/new.ACP v1 negotiates authentication in
initializeviaauthMethods; if the agent requires authentication,session/newfails withauth_requireduntilauthenticatecompletes. Update the auth comparison to include this RPC, and insert the optionalauthenticatestep before creating the session.
docs/research/acp/acp-vs-a2a.md#L53-L55docs/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 winAlign
RQ2.1with the curated product scope.
RQ2.1requires coverage forVS CodeandCopilot, 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 fromRQ2.1. Constrain “find who else” inRQ2.2to 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 winRecord the
providerscapability gap as known.In line 25, replace the open validation task with the established trogonai boundary:
providers/list,providers/set, andproviders/disableare 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 liftAlign 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 liftAlign 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 winQualify 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 liftUse 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 winDo not treat Hermes ACP session scoping as finalized.
The Hermes docs conflict: the ACP feature page says
list/load/resume/forkare scoped to the running server process, while the acp internals page says ACP sessions persist to~/.hermes/state.dband restore on restart. Replace the settled process-local gap indocs/research/acp/products/hermes-agent.mdlines 15 and 27 with that open discrepancy untilacp_adapter/session.pyis 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 winNarrow the corpus-wide verification claim.
Line 3 says all data was verified live, but line 68 says the
agentclientprotocol/codex-acpcrates.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 winRemove the claim that
avante.nvimlacks ACP integration.
avante.nvimdocuments ACP support for configured ACP-compatible agents, includinggemini-cli,claude-code,goose, andcodex. 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 winRecord the official Kotlin SDK.
Update line 93 to reference
agentclientprotocol/kotlin-sdkwith its official link/status. If this survey only checkedacp-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 winDocument presigned URL expiry as client-specific.
AWS CLI
s3 presigndefaults 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 winFlag 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 winAdd 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 winRemove the settled callability claim for Cline.
The Cline
--acpflow is real, but the “trogonai can already spawncline --acpthrough the existingacp-nats-stdiobridge” 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 | 🟡 MinorDistinguish the Rust crate version from the JSON Schema artifact versions.
At line 9, keep
agent-client-protocol-schemaat its Rust crate version (1.6.0) and describeschema-v1.20.0/schema-v2.0.0-alpha.2as 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 winUse the correct ACP-wrapper class name.
The
--acpstdio path instantiatesAcpAgentfromapps/cli/src/acp/AcpAgent.ts;ClineAgentis 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 winCorrect 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 winAdd a language to the fenced code block.
Use
shellfor 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 winUse the actual implementation name.
The verification states that no standalone
goose-acpcrate exists. The HTTP/WS server lives in the Goose crate'scrates/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 winMake 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 winName the exact migration APIs.
The v2 migration renames
ResponseRoutermethods such asrespond_with_resulttoroute_with_result.Responderstill usesrespond*. 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
📒 Files selected for processing (31)
docs/research/README.mddocs/research/acp/RESEARCH_PROMPT.mddocs/research/acp/acp-vs-a2a.mddocs/research/acp/bridge-mechanics.mddocs/research/acp/channel-mapping.mddocs/research/acp/decision-record.mddocs/research/acp/file-media-pipeline.mddocs/research/acp/host-role-and-invocation.mddocs/research/acp/index.mddocs/research/acp/media-store.mddocs/research/acp/permission-decision-point.mddocs/research/acp/products/buzz.mddocs/research/acp/products/claude-code.mddocs/research/acp/products/cline.mddocs/research/acp/products/codex-cli.mddocs/research/acp/products/cursor.mddocs/research/acp/products/devin.mddocs/research/acp/products/gemini-cli.mddocs/research/acp/products/goose.mddocs/research/acp/products/grok-cli.mddocs/research/acp/products/hermes-agent.mddocs/research/acp/products/jetbrains.mddocs/research/acp/products/netclaw.mddocs/research/acp/products/openclaw.mddocs/research/acp/products/opencode.mddocs/research/acp/products/zed.mddocs/research/acp/rust-crates.mddocs/research/acp/sandboxed-workspaces.mddocs/research/acp/secrets-at-spawn.mddocs/research/acp/synthesis.mddocs/research/acp/tier2-profiles.md
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
There was a problem hiding this comment.
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;
acp-hostbuild sequencing, with the ADR index and ACP Conformance kept authoritative wherever they diverge.