Skip to main content

acp

Run the Agent Client Protocol (ACP) bridge that talks to an FluffBuzz Gateway. This command speaks ACP over stdio for IDEs and forwards prompts to the Gateway over WebSocket. It keeps ACP sessions mapped to Gateway session keys. fluffbuzz acp is a Gateway-backed ACP bridge, not a full ACP-native editor runtime. It focuses on session routing, prompt delivery, and basic streaming updates.

Compatibility Matrix

ACP areaStatusNotes
initialize, newSession, prompt, cancelImplementedCore bridge flow over stdio to Gateway chat/send + abort.
listSessions, slash commandsImplementedSession list works against Gateway session state; commands are advertised via available_commands_update.
loadSessionPartialRebinds the ACP session to a Gateway session key and replays stored user/assistant text history. Tool/system history is not reconstructed yet.
Prompt content (text, embedded resource, images)PartialText/resources are flattened into chat input; images become Gateway attachments.
Session modesPartialsession/set_mode is supported and the bridge exposes initial Gateway-backed session controls for thought level, tool verbosity, reasoning, usage detail, and elevated actions. Broader ACP-native mode/config surfaces are still out of scope.
Session info and usage updatesPartialThe bridge emits session_info_update and best-effort usage_update notifications from cached Gateway session snapshots. Usage is approximate and only sent when Gateway token totals are marked fresh.
Tool streamingPartialtool_call / tool_call_update events include raw I/O, text content, and best-effort file locations when Gateway tool args/results expose them. Embedded terminals and richer diff-native output are still not exposed.
Per-session MCP servers (mcpServers)UnsupportedBridge mode rejects per-session MCP server requests. Configure MCP on the FluffBuzz gateway or agent instead.
Client filesystem methods (fs/read_text_file, fs/write_text_file)UnsupportedThe bridge does not call ACP client filesystem methods.
Client terminal methods (terminal/*)UnsupportedThe bridge does not create ACP client terminals or stream terminal ids through tool calls.
Session plans / thought streamingUnsupportedThe bridge currently emits output text and tool status, not ACP plan or thought updates.

Known Limitations

  • loadSession replays stored user and assistant text history, but it does not reconstruct historic tool calls, system notices, or richer ACP-native event types.
  • If multiple ACP clients share the same Gateway session key, event and cancel routing are best-effort rather than strictly isolated per client. Prefer the default isolated acp:<uuid> sessions when you need clean editor-local turns.
  • Gateway stop states are translated into ACP stop reasons, but that mapping is less expressive than a fully ACP-native runtime.
  • Initial session controls currently surface a focused subset of Gateway knobs: thought level, tool verbosity, reasoning, usage detail, and elevated actions. Model selection and exec-host controls are not yet exposed as ACP config options.
  • session_info_update and usage_update are derived from Gateway session snapshots, not live ACP-native runtime accounting. Usage is approximate, carries no cost data, and is only emitted when the Gateway marks total token data as fresh.
  • Tool follow-along data is best-effort. The bridge can surface file paths that appear in known tool args/results, but it does not yet emit ACP terminals or structured file diffs.

Usage

fluffbuzz acp

# Remote Gateway
fluffbuzz acp --url wss://gateway-host:18789 --token <token>

# Remote Gateway (token from file)
fluffbuzz acp --url wss://gateway-host:18789 --token-file ~/.fluffbuzz/gateway.token

# Attach to an existing session key
fluffbuzz acp --session agent:main:main

# Attach by label (must already exist)
fluffbuzz acp --session-label "support inbox"

# Reset the session key before the first prompt
fluffbuzz acp --session agent:main:main --reset-session

ACP client (debug)

Use the built-in ACP client to sanity-check the bridge without an IDE. It spawns the ACP bridge and lets you type prompts interactively.
fluffbuzz acp client

# Point the spawned bridge at a remote Gateway
fluffbuzz acp client --server-args --url wss://gateway-host:18789 --token-file ~/.fluffbuzz/gateway.token

# Override the server command (default: fluffbuzz)
fluffbuzz acp client --server "node" --server-args fluffbuzz.mjs acp --url ws://127.0.0.1:19001
Permission model (client debug mode):
  • Auto-approval is allowlist-based and only applies to trusted core tool IDs.
  • read auto-approval is scoped to the current working directory (--cwd when set).
  • Unknown/non-core tool names, out-of-scope reads, and dangerous tools always require explicit prompt approval.
  • Server-provided toolCall.kind is treated as untrusted metadata (not an authorization source).

How to use this

Use ACP when an IDE (or other client) speaks Agent Client Protocol and you want it to drive an FluffBuzz Gateway session.
  1. Ensure the Gateway is running (local or remote).
  2. Configure the Gateway target (config or flags).
  3. Point your IDE to run fluffbuzz acp over stdio.
Example config (persisted):
fluffbuzz config set gateway.remote.url wss://gateway-host:18789
fluffbuzz config set gateway.remote.token <token>
Example direct run (no config write):
fluffbuzz acp --url wss://gateway-host:18789 --token <token>
# preferred for local process safety
fluffbuzz acp --url wss://gateway-host:18789 --token-file ~/.fluffbuzz/gateway.token

Selecting agents

ACP does not pick agents directly. It routes by the Gateway session key. Use agent-scoped session keys to target a specific agent:
fluffbuzz acp --session agent:main:main
fluffbuzz acp --session agent:design:main
fluffbuzz acp --session agent:qa:bug-123
Each ACP session maps to a single Gateway session key. One agent can have many sessions; ACP defaults to an isolated acp:<uuid> session unless you override the key or label. Per-session mcpServers are not supported in bridge mode. If an ACP client sends them during newSession or loadSession, the bridge returns a clear error instead of silently ignoring them.

Use from acpx (Codex, Claude, other ACP clients)

If you want a coding agent such as Codex or Claude Code to talk to your FluffBuzz bot over ACP, use acpx with its built-in fluffbuzz target. Typical flow:
  1. Run the Gateway and make sure the ACP bridge can reach it.
  2. Point acpx fluffbuzz at fluffbuzz acp.
  3. Target the FluffBuzz session key you want the coding agent to use.
Examples:
# One-shot request into your default FluffBuzz ACP session
acpx fluffbuzz exec "Summarize the active FluffBuzz session state."

# Persistent named session for follow-up turns
acpx fluffbuzz sessions ensure --name codex-bridge
acpx fluffbuzz -s codex-bridge --cwd /path/to/repo \
  "Ask my FluffBuzz work agent for recent context relevant to this repo."
If you want acpx fluffbuzz to target a specific Gateway and session key every time, override the fluffbuzz agent command in ~/.acpx/config.json:
{
  "agents": {
    "fluffbuzz": {
      "command": "env FLUFFBUZZ_HIDE_BANNER=1 FLUFFBUZZ_SUPPRESS_NOTES=1 fluffbuzz acp --url ws://127.0.0.1:18789 --token-file ~/.fluffbuzz/gateway.token --session agent:main:main"
    }
  }
}
For a repo-local FluffBuzz checkout, use the direct CLI entrypoint instead of the dev runner so the ACP stream stays clean. For example:
env FLUFFBUZZ_HIDE_BANNER=1 FLUFFBUZZ_SUPPRESS_NOTES=1 node fluffbuzz.mjs acp ...
This is the easiest way to let Codex, Claude Code, or another ACP-aware client pull contextual information from an FluffBuzz agent without scraping a terminal.

Zed editor setup

Add a custom ACP agent in ~/.config/zed/settings.json (or use Zed’s Settings UI):
{
  "agent_servers": {
    "FluffBuzz ACP": {
      "type": "custom",
      "command": "fluffbuzz",
      "args": ["acp"],
      "env": {}
    }
  }
}
To target a specific Gateway or agent:
{
  "agent_servers": {
    "FluffBuzz ACP": {
      "type": "custom",
      "command": "fluffbuzz",
      "args": [
        "acp",
        "--url",
        "wss://gateway-host:18789",
        "--token",
        "<token>",
        "--session",
        "agent:design:main"
      ],
      "env": {}
    }
  }
}
In Zed, open the Agent panel and select “FluffBuzz ACP” to start a thread.

Session mapping

By default, ACP sessions get an isolated Gateway session key with an acp: prefix. To reuse a known session, pass a session key or label:
  • --session <key>: use a specific Gateway session key.
  • --session-label <label>: resolve an existing session by label.
  • --reset-session: mint a fresh session id for that key (same key, new transcript).
If your ACP client supports metadata, you can override per session:
{
  "_meta": {
    "sessionKey": "agent:main:main",
    "sessionLabel": "support inbox",
    "resetSession": true
  }
}
Learn more about session keys at /concepts/session.

Options

  • --url <url>: Gateway WebSocket URL (defaults to gateway.remote.url when configured).
  • --token <token>: Gateway auth token.
  • --token-file <path>: read Gateway auth token from file.
  • --password <password>: Gateway auth password.
  • --password-file <path>: read Gateway auth password from file.
  • --session <key>: default session key.
  • --session-label <label>: default session label to resolve.
  • --require-existing: fail if the session key/label does not exist.
  • --reset-session: reset the session key before first use.
  • --no-prefix-cwd: do not prefix prompts with the working directory.
  • --verbose, -v: verbose logging to stderr.
Security note:
  • --token and --password can be visible in local process listings on some systems.
  • Prefer --token-file/--password-file or environment variables (FLUFFBUZZ_GATEWAY_TOKEN, FLUFFBUZZ_GATEWAY_PASSWORD).
  • Gateway auth resolution follows the shared contract used by other Gateway clients:
    • local mode: env (FLUFFBUZZ_GATEWAY_*) -> gateway.auth.* -> gateway.remote.* fallback only when gateway.auth.* is unset (configured-but-unresolved local SecretRefs fail closed)
    • remote mode: gateway.remote.* with env/config fallback per remote precedence rules
    • --url is override-safe and does not reuse implicit config/env credentials; pass explicit --token/--password (or file variants)
  • ACP runtime backend child processes receive FLUFFBUZZ_SHELL=acp, which can be used for context-specific shell/profile rules.
  • fluffbuzz acp client sets FLUFFBUZZ_SHELL=acp-client on the spawned bridge process.

acp client options

  • --cwd <dir>: working directory for the ACP session.
  • --server <command>: ACP server command (default: fluffbuzz).
  • --server-args <args...>: extra arguments passed to the ACP server.
  • --server-verbose: enable verbose logging on the ACP server.
  • --verbose, -v: verbose client logging.