You are the /copilot-acp skill. You delegate to GitHub Copilot CLI via the Agent Client Protocol (copilot --acp), using the official agent-client-protocol Python SDK (pip install agent-client-protocol). Every message is a Pydantic model — no hand-rolled JSON-RPC.
What ACP gives you over --output-format json:
- Native session lifecycle.
initialize→session/new→session/prompt. Real session IDs that survive across the connection. - First-class permission requests. When Copilot wants to run a tool, the server sends
session/request_permission. The runner can route this to the user, auto-allow, or veto. Today the runner auto-allows for non-interactive operation. - Per-session config. Model, reasoning effort, allow-all are session options, not CLI flags.
- Session resume.
session/loadis supported by the server (we capture sessionId in.session).
If you need maximum control over per-tool execution, prefer /copilot-acp. For sheer simplicity (just stream events from the CLI), use /copilot-cli. For the official wrapper, use /copilot-sdk.
Invocation patterns
| User input | What to do |
|---|---|
/copilot-acp <task> |
Sync ACP run. Streams the agent message into the transcript. Minimal stdout. |
/copilot-acp --model claude-opus-5 <task> |
Override model. |
/copilot-acp --effort high <task> |
Override reasoning effort (ACP accepts low / medium / high). |
/copilot-acp-check <run-id> |
Use shared check.sh — same as /copilot-cli-check. |
/copilot-acp-cancel <run-id> |
Use shared cancel.sh — same as /copilot-cli-cancel. |
On every invocation
- Bootstrap.
bash .agents/skills/copilot-acp/run.sh --bootstrap— delegates to/copilot-cli/bootstrap.sh. - Sync.
bash .agents/skills/copilot-acp/run.sh [--model X] [--effort L] "<task>". - Check / cancel.
bash .agents/skills/copilot-cli/check.sh/cancel.sh— the shared run-files protocol means these work uniformly.
Run files
Identical layout to /copilot-cli, run-id prefixed with -acp-:
.jsonl— raw bidirectional JSON-RPC traffic. Every envelope wrapped in{"_send": ...}or{"_recv": ...}so client + server messages stay disambiguated..md— rendered transcript (agent message chunks, tool calls, thoughts)..session— Copilot session id..status,.task,.ask,.answer,.pid— same as/copilot-cli.
Defaults
- Model:
gpt-5.6-sol(override with--modelorCOPILOT_MODEL;claude-opus-5remains fully supported). - Reasoning effort:
high. Probing the live server shows it acceptsnone/low/medium/high/xhigh/max;highis confirmed applied via config read-back. - Context tier: not supported. The server's only config options are
mode,model,reasoning_effort,allow_all;context_tieris rejected as an unknown option. Usecliorsdkfor the 1M window. - allow_all:
on(session option, applied at session/new).
What's not built yet
bg.sh(background): the ACP runner runs synchronously today. A background variant is straightforward (samesetsidpattern as/copilot-cli/bg.sh) but not shipped in the first pass.--multicross-model comparison: deliberately left to/copilot-cli/multi.shfor now.- Per-tool human approval: the runner auto-allows
session/request_permission. To route to the user, add a.permission-requestfile write + wait-for-answer loop similar to the.ask/.answerflow.