Acpx
Use acpx as a headless ACP CLI for agent-to-agent communication, including prompt/exec/sessions workflows, session scoping, queueing, permissions, and output...
Use acpx as a headless ACP CLI for agent-to-agent communication, including prompt/exec/sessions workflows, session scoping, queueing, permissions, and output...
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Use this skill when you need to run coding agents through
acpx, manage persistent ACP sessions, queue prompts, or consume structured agent output from scripts.
acpx is a headless, scriptable CLI client for the Agent Client Protocol (ACP). It is built for agent-to-agent communication over the command line and avoids PTY scraping.
Core capabilities:
exec)-s/--session)--no-wait)cancel) for in-flight turnssession/cancel on interruptset-mode, set <key> <value>)--fileconfig show|initsessions show, sessions history)statusauthenticate handshake via env/config credentialstext, json, quiet)--agent escape hatchnpm i -g acpx
For normal session reuse, prefer a global install over
npx.
prompt is the default verb.
acpx [global_options] [prompt_text...] acpx [global_options] prompt [prompt_options] [prompt_text...] acpx [global_options] exec [prompt_options] [prompt_text...] acpx [global_options] cancel [-s <name>] acpx [global_options] set-mode <mode> [-s <name>] acpx [global_options] set <key> <value> [-s <name>] acpx [global_options] status [-s <name>] acpx [global_options] sessions [list | new [--name <name>] | close [name] | show [name] | history [name] [--limit <count>]] acpx [global_options] config [show | init]acpx [global_options] <agent> [prompt_options] [prompt_text...] acpx [global_options] <agent> prompt [prompt_options] [prompt_text...] acpx [global_options] <agent> exec [prompt_options] [prompt_text...] acpx [global_options] <agent> cancel [-s <name>] acpx [global_options] <agent> set-mode <mode> [-s <name>] acpx [global_options] <agent> set <key> <value> [-s <name>] acpx [global_options] <agent> status [-s <name>] acpx [global_options] <agent> sessions [list | new [--name <name>] | close [name] | show [name] | history [name] [--limit <count>]]
If prompt text is omitted and stdin is piped,
acpx reads prompt text from stdin.
Friendly agent names resolve to commands:
codex -> npx @zed-industries/codex-acpclaude -> npx @zed-industries/claude-agent-acpgemini -> geminiopencode -> npx opencode-aipi -> npx pi-acpRules:
codex for top-level prompt, exec, and sessions.--agent <command> explicitly sets a raw ACP adapter command.--agent in the same command.Implicit:
acpx codex 'fix flaky tests'
Explicit:
acpx codex prompt 'fix flaky tests' acpx prompt 'fix flaky tests' # defaults to codex
Behavior:
NO_SESSION and prompts for sessions newsession/cancel before force-kill fallbackPrompt options:
-s, --session <name>: use a named session within the same cwd--no-wait: enqueue and return immediately when session is already busy-f, --file <path>: read prompt text from file (- means stdin)acpx exec 'summarize this repo' acpx codex exec 'summarize this repo'
Behavior:
acpx codex cancel acpx codex set-mode plan acpx codex set approval_policy conservative
Behavior:
cancel: sends cooperative session/cancel through queue-owner IPC.set-mode: calls ACP session/set_mode.set: calls ACP session/set_config_option.set-mode/set route through queue-owner IPC when active, otherwise reconnect directly.acpx sessions acpx sessions list acpx sessions new acpx sessions new --name backend acpx sessions close acpx sessions close backend acpx sessions show acpx sessions history --limit 20 acpx statusacpx codex sessions acpx codex sessions new --name backend acpx codex sessions close backend acpx codex sessions show backend acpx codex sessions history backend --limit 20 acpx codex status
Behavior:
sessions and sessions list are equivalentnew creates a fresh session for the current (agentCommand, cwd, optional name) scopenew --name <name> targets a named session scopenew replaces an existing open session in that scope, the old one is soft-closedclose targets current cwd default sessionclose <name> targets current cwd named sessionshow [name] prints stored metadata for that scoped sessionhistory [name] prints stored turn history previews (default 20, use --limit)--agent <command>: raw ACP agent command (escape hatch)--cwd <dir>: working directory for session scope (default: current directory)--approve-all: auto-approve all permission requests--approve-reads: auto-approve reads/searches, prompt for writes (default mode)--deny-all: deny all permission requests--format <fmt>: output format (text, json, quiet)--timeout <seconds>: max wait time (positive number)--ttl <seconds>: queue owner idle TTL before shutdown (default 300, 0 disables TTL)--verbose: verbose ACP/debug logs to stderrPermission flags are mutually exclusive.
Config files are merged in this order (later wins):
~/.acpx/config.json<cwd>/.acpxrc.jsonSupported keys:
defaultAgentdefaultPermissions (approve-all, approve-reads, deny-all)ttl (seconds)timeout (seconds or null)format (text, json, quiet)agents map (name -> { command })auth map (authMethodId -> credential)Use
acpx config show to inspect the resolved config and acpx config init to create the global template.
Persistent prompt sessions are scoped by:
agentCommandcwdnamePersistence:
~/.acpx/sessions/*.json.-s/--session creates parallel named conversations in the same repo.--cwd changes scope and therefore session lookup.closed: true and closedAt.Resume behavior:
acpx creates a fresh session and updates the saved record.loadSession even if previously closed.--no-waitQueueing is per persistent session.
acpx process for a running prompt becomes the queue owner.~/.acpx/queues/<hash>.sock.~/.acpx/queues/<hash>.lock.--ttl).Submission behavior:
--no-wait: enqueue and return after queue acknowledgement.Ctrl+C during an active turn sends ACP session/cancel, waits briefly, then force-kills only if cancellation does not finish in time.cancel sends the same cooperative cancellation without requiring terminal signals.Use
--format <fmt>:
text (default): human-readable stream with updates/tool status and done linejson: NDJSON event stream (good for automation)quiet: final assistant text onlyExample automation:
acpx --format json codex exec 'review changed files' \ | jq -r 'select(.type=="tool_call") | [.status, .title] | @tsv'
--approve-all: no interactive permission prompts--approve-reads (default): approve reads/searches, prompt for writes--deny-all: deny all permission requestsIf every permission request is denied/cancelled and none approved,
acpx exits with permission-denied status.
Persistent repo assistant:
acpx codex 'inspect failing tests and propose a fix plan' acpx codex 'apply the smallest safe fix and run tests'
Parallel named streams:
acpx codex -s backend 'fix API pagination bug' acpx codex -s docs 'draft changelog entry for release'
Queue follow-up without waiting:
acpx codex 'run full test suite and investigate failures' acpx codex --no-wait 'after tests, summarize root causes and next steps'
One-shot script step:
acpx --format quiet exec 'summarize repo purpose in 3 lines'
Machine-readable output for orchestration:
acpx --format json codex 'review current branch changes' > events.ndjson
Raw custom adapter command:
acpx --agent './bin/custom-acp-server --profile ci' 'run validation checks'
Repo-scoped review with permissive mode:
acpx --cwd ~/repos/shop --approve-all codex -s pr-842 \ 'review PR #842 for regressions and propose minimal patch'
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.