- ci-test-shard: timing outputFile is now RELATIVE — one pnpm invocation fans out to several packages whose vitests all received the same absolute path, so every package overwrote the same timings file (last writer wins). Each package now writes <pkgDir>/.timings/; discovery (discoverWorkspaceTimingFiles) and the CI artifact globs scan the tree - acp event-bridge-bounds: 20s timeout on the CPU-bound plan-flood test (timed out at default 5s under loaded CI shard, passes in isolation) - acp process-manager: port-4040-allowlist marker for its doc comments (main-side; local guard flagged it after merging main)
@fusion-plugin-examples/acp-runtime
A Fusion runtime plugin that drives any external Agent Client Protocol (ACP) agent over JSON-RPC/stdio. One integration unlocks every ACP-compatible agent (Gemini CLI, the Claude Code ACP adapter, and any future agent that speaks the protocol) through the standard protocol instead of a bespoke per-CLI integration.
Selected via runtimeId: "acp". Installed on demand (experimental) — see the
Fusion plugin catalog (fn plugin install fusion-plugin-acp-runtime).
Security posture
The ACP agent is an untrusted subprocess that calls back into Fusion for permissions and filesystem access. This plugin enforces a defense-in-depth floor:
- Per-category permission gating. Each
session/request_permissionis classified by tool kind into a Fusion action category and checked against the live permission policy — never a preset shortcut.allow_onceonly (never a persisted blanket grant). Unmappable kinds and missing policy default-deny. - Unrestricted-risk acknowledgement (
acpAllowUnrestricted). Because the shipped default policy isunrestricted(allow-all), a blanketallowon a sensitive category is escalated to approval unless the user explicitly setsacpAllowUnrestricted: true. Prefer running the ACP runtime under anapproval-requiredpolicy. - Filesystem jail.
fs/read_text_file/fs/write_text_fileare opt-in (acpFsRead/acpFsWrite, writes default OFF), confined to the sessioncwdby a real symlink-resolving jail (realpath +O_NOFOLLOW), with a deny-list for secrets (.env,*.pem, …) and git internals (.git/**). Writes are gated through thefile_write_deletepermission category. - Untrusted-input bounds. Streamed output is sanitized (ANSI/control strip) and bounded (per-turn + per-chunk caps; bounded tool-call correlation map).
- Subprocess isolation. The agent env is built from an allow-list
(
acpEnvAllowList) — inheritedprocess.envis not forwarded.
Not sandboxed in v1: the agent's own process/network syscalls run with Fusion's user privileges (OS-level sandboxing is recommended future work).
Settings
| Key | Default | Meaning |
|---|---|---|
acpBinaryPath |
acp-agent |
Agent binary to spawn |
acpArgs |
[] |
Args that launch the agent in ACP/stdio mode (e.g. ["--acp"]) |
acpModel |
— | Optional model identifier reported via describeModel |
acpFsRead |
false |
Advertise/register fs/read_text_file |
acpFsWrite |
false |
Advertise/register fs/write_text_file (gated) |
acpEnvAllowList |
[] |
Env var names forwarded to the agent subprocess |
acpAllowUnrestricted |
false |
Acknowledge the untrusted-agent risk under an allow-all policy |
Upstream / third-party integration evidence
Per AGENTS.md (External-integration evidence):
- Protocol homepage / docs: https://agentclientprotocol.com
- Upstream protocol repo: https://github.com/agentclientprotocol/agent-client-protocol
- TypeScript SDK repo: https://github.com/agentclientprotocol/typescript-sdk
- Dependency (npm):
@agentclientprotocol/sdk— https://www.npmjs.com/package/@agentclientprotocol/sdk - Pinned release:
0.24.0(Apache-2.0) - Tarball: https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-0.24.0.tgz
- Integrity (sha512):
sha512-vvu9appvGvfYstBj19C6NCepV6SvUhY5VRv60KUZ4XzhTah/olOYul5Zo4C+x2enyshMSvgB2mm/OEmrsHaSmA== - Agent binaries driven: user-supplied ACP agents (e.g.
gemini --acp, the@agentclientprotocol/claude-agent-acpadapter). These are configured by the user at runtime, not bundled —upstream-pending-verificationper agent.
See docs/acp-contract.md for the launch/readiness contract and failure taxonomy.