agent-control-plane 0.1.13 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +250 -355
- package/SKILL.md +1 -1
- package/hooks/heartbeat-hooks.sh +16 -9
- package/npm/bin/agent-control-plane.js +117 -8
- package/package.json +3 -1
- package/references/commands.md +2 -2
- package/references/control-plane-map.md +1 -1
- package/tools/bin/agent-project-reconcile-issue-session +23 -0
- package/tools/bin/agent-project-reconcile-pr-session +191 -22
- package/tools/bin/agent-project-run-codex-resilient +57 -2
- package/tools/bin/agent-project-run-openclaw-session +46 -0
- package/tools/bin/agent-project-worker-status +37 -0
- package/tools/bin/flow-config-lib.sh +7 -0
- package/tools/bin/flow-shell-lib.sh +2 -0
- package/tools/bin/heartbeat-safe-auto.sh +20 -10
- package/tools/bin/project-runtimectl.sh +1 -1
- package/tools/bin/provider-cooldown-state.sh +39 -1
- package/tools/bin/start-issue-worker.sh +35 -0
- package/tools/bin/start-pr-fix-worker.sh +3 -0
- package/tools/bin/start-pr-review-worker.sh +3 -0
- package/tools/bin/start-resident-issue-loop.sh +1 -0
- package/tools/dashboard/app.js +136 -0
- package/tools/dashboard/dashboard_snapshot.py +253 -3
- package/tools/dashboard/index.html +5 -1
- package/tools/dashboard/styles.css +97 -20
- package/tools/templates/pr-fix-template.md +6 -6
- package/tools/templates/pr-merge-repair-template.md +6 -6
- package/tools/vendor/codex-quota-manager/scripts/auto-switch.sh +8 -6
- package/tools/bin/render-dashboard-snapshot.py +0 -16
- package/tools/templates/legacy/issue-prompt-template-pre-slim.md +0 -109
package/README.md
CHANGED
|
@@ -8,139 +8,154 @@
|
|
|
8
8
|
<a href="https://github.com/sponsors/ducminhnguyen0319"><img alt="GitHub Sponsors" src="https://img.shields.io/badge/sponsor-GitHub%20Sponsors-ea4aaa?style=flat-square&logo=githubsponsors&logoColor=white"></a>
|
|
9
9
|
<a href="https://socket.dev/npm/package/agent-control-plane"><img alt="Socket" src="https://img.shields.io/badge/Socket-79-f5a623?style=flat-square"></a>
|
|
10
10
|
</p>
|
|
11
|
-
`agent-control-plane` helps a repo keep coding agents running reliably without
|
|
12
|
-
constant human babysitting.
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
License: `MIT`
|
|
18
|
-
|
|
19
|
-
Changelog: [CHANGELOG.md](./CHANGELOG.md)
|
|
20
|
-
|
|
21
|
-
Roadmap: [ROADMAP.md](./ROADMAP.md)
|
|
22
|
-
|
|
23
|
-
Architecture: [references/architecture.md](./references/architecture.md)
|
|
24
|
-
|
|
25
|
-
Commands: [references/commands.md](./references/commands.md)
|
|
12
|
+
`agent-control-plane` (ACP) keeps your coding agents running reliably without
|
|
13
|
+
you having to stare at them all day.
|
|
26
14
|
|
|
27
|
-
It
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
15
|
+
It is the operator layer for coding agents that need to keep running after the
|
|
16
|
+
novelty wears off — and the responsible adult in the room that stops them from
|
|
17
|
+
going completely off the rails.
|
|
18
|
+
|
|
19
|
+
- License: [`MIT`](./LICENSE)
|
|
20
|
+
- Changelog: [CHANGELOG.md](./CHANGELOG.md)
|
|
21
|
+
- Roadmap: [ROADMAP.md](./ROADMAP.md)
|
|
22
|
+
- Architecture: [references/architecture.md](./references/architecture.md)
|
|
23
|
+
- Commands: [references/commands.md](./references/commands.md)
|
|
24
|
+
|
|
25
|
+
## The Big Idea
|
|
26
|
+
|
|
27
|
+
Here is the dirty secret nobody in the AI hype cycle wants to admit: **the free
|
|
28
|
+
models are not that dumb.** They are just chaotic. Left alone to manage their
|
|
29
|
+
own execution loop, retry logic, GitHub labels, and publish pipeline, they will
|
|
30
|
+
reliably discover creative new ways to do absolutely nothing useful at 3am while
|
|
31
|
+
you sleep. Give them a tight operating harness and a clear job description,
|
|
32
|
+
however, and suddenly that "not smart enough" free model is grinding through
|
|
33
|
+
your issue backlog like a junior developer who is weirdly enthusiastic about
|
|
34
|
+
reading CI logs.
|
|
35
|
+
|
|
36
|
+
That is what ACP does. It turns a GitHub repo into a managed runtime: a
|
|
37
|
+
repeatable setup, a stable home for state, a heartbeat that keeps agents
|
|
38
|
+
scheduled and supervised, and a dashboard you can actually glance at without
|
|
39
|
+
spelunking through temp folders, worktrees, or half-remembered `tmux` sessions.
|
|
40
|
+
|
|
41
|
+
ACP does not try to be the coding agent. It makes the surrounding system less
|
|
42
|
+
fragile: profile setup, runtime start and stop, heartbeat scheduling,
|
|
34
43
|
reconcile-owned outcomes, background execution, and operator visibility under
|
|
35
|
-
`~/.agent-runtime`.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
`~/.agent-runtime`. The agent writes the code. ACP writes the boring
|
|
45
|
+
infrastructure that keeps the agent from losing its own work.
|
|
46
|
+
|
|
47
|
+
### Free models: surprisingly economical
|
|
48
|
+
|
|
49
|
+
If you are using ACP for research, the economics are almost embarrassing.
|
|
50
|
+
Running a free-tier model like `openrouter/qwen3.6-plus:free` continuously
|
|
51
|
+
across multiple repos costs roughly what a large latte costs — per month, not
|
|
52
|
+
per hour. ACP handles quota cooldowns, stall detection, provider failover, and
|
|
53
|
+
retry backoff, so free-tier models become genuinely useful in a production-shaped
|
|
54
|
+
loop instead of a toy demo. For researchers studying agent behavior, measuring
|
|
55
|
+
output quality, or iterating on prompting strategies at scale: you can run
|
|
56
|
+
hundreds of sessions for what you would otherwise spend on a single GPT-4
|
|
57
|
+
afternoon.
|
|
58
|
+
|
|
59
|
+
**The free model is not brilliant. ACP makes it relentless.**
|
|
60
|
+
|
|
61
|
+
### Smarter models: powerful, and worth supervising
|
|
62
|
+
|
|
63
|
+
ACP works equally well with Claude Sonnet, OpenAI Codex, and other
|
|
64
|
+
high-capability backends. They produce better code, handle harder tasks, and
|
|
65
|
+
generally understand the first time what the free model needed three attempts and
|
|
66
|
+
a blocker comment to figure out.
|
|
67
|
+
|
|
68
|
+
But here is the thing about powerful AI agents running autonomously against your
|
|
69
|
+
GitHub repo: they are, in a very real sense, a slow-burning fuse. An agent with
|
|
70
|
+
broad permissions, no supervision, and no circuit breakers will eventually push
|
|
71
|
+
something broken, auto-merge a PR it should not have touched, burn through a
|
|
72
|
+
monthly API budget in a long weekend, or enter a retry loop that only stops when
|
|
73
|
+
the credit card does.
|
|
74
|
+
|
|
75
|
+
ACP is the person standing next to the fuse. It enforces launch limits,
|
|
76
|
+
reconciles outcomes before touching GitHub, validates before it publishes, and
|
|
77
|
+
respects cooldowns instead of hammering a provider at full throttle. The agent
|
|
78
|
+
gets to be smart and fast. ACP makes sure "smart and fast" does not also mean
|
|
79
|
+
"unattended and irreversible."
|
|
80
|
+
|
|
81
|
+
You would not hand a brilliant but impulsive junior developer the repository
|
|
82
|
+
admin key and leave for a two-week vacation. ACP is the on-call rotation for
|
|
83
|
+
your AI workforce — quiet when things go well, essential when they do not.
|
|
41
84
|
|
|
42
85
|
## Why people use it
|
|
43
86
|
|
|
44
|
-
ACP is useful when you want agent workflows to feel operational instead of
|
|
45
|
-
fragile, improvised, or tied to one lucky terminal session.
|
|
46
|
-
|
|
47
|
-
- replace human babysitting with boring runtime ownership: supervisor,
|
|
48
|
-
heartbeat, reconcile, and status tooling
|
|
49
|
-
- one profile per repo, so every project has a clear runtime identity
|
|
50
|
-
- start, stop, restart, and status commands that behave like operator tooling
|
|
51
|
-
- dashboard visibility instead of hunting through `tmux` panes and temp folders
|
|
52
|
-
- smoke checks before you trust the runtime on real work
|
|
53
|
-
- optional macOS autostart so a reboot does not reset your flow
|
|
54
|
-
- room for multiple worker backends without changing how you operate the repo
|
|
55
|
-
|
|
56
87
|
ACP is a good fit when your pain is not "the agent cannot code" but "the setup
|
|
57
|
-
around the agent is too easy to break
|
|
88
|
+
around the agent is too easy to break" — or "I would trust this agent more if
|
|
89
|
+
it had a supervisor."
|
|
90
|
+
|
|
91
|
+
| Need | What ACP provides |
|
|
92
|
+
| --- | --- |
|
|
93
|
+
| Keep agent workflows running without babysitting | Supervisor, heartbeat loop, and reconcile scripts that manage the lifecycle automatically |
|
|
94
|
+
| Get real value out of free-tier models | Quota cooldowns, stall detection, provider failover, and retry backoff that free-tier models need to be actually useful |
|
|
95
|
+
| Manage multiple repos cleanly | One profile per repo with isolated runtime state, each with its own identity and status |
|
|
96
|
+
| Observe what is happening without digging through files | Dashboard and `runtime status` that show the real state without spelunking through `tmux` or temp folders |
|
|
97
|
+
| Compare worker backends on real workloads | Swap between `codex`, `claude`, and `openclaw` without rebuilding your runtime habits |
|
|
98
|
+
| Run reproducible agent research cheaply | Cost-controlled execution harness for studying agent behavior, output quality, or prompting strategies |
|
|
99
|
+
| Enforce safety by architecture, not by hope | Launch limits, reconcile gates, and cooldowns that are built into the runtime, not left to chance |
|
|
58
100
|
|
|
59
101
|
## Use Cases
|
|
60
102
|
|
|
61
103
|
Teams and solo builders usually reach for ACP when one of these starts to feel
|
|
62
104
|
familiar:
|
|
63
105
|
|
|
64
|
-
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
-
|
|
71
|
-
inferring it from stale branches, dangling sessions, or mystery files
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
around it is messy," this tool is aimed directly at that problem.
|
|
106
|
+
- Issue-driven or PR-driven agent work should keep running in the background,
|
|
107
|
+
but still be inspectable and recoverable when something goes wrong.
|
|
108
|
+
- The project has more than one repo, and each one deserves a clean, separate
|
|
109
|
+
runtime identity instead of sharing state.
|
|
110
|
+
- You want to swap or compare worker backends without rebuilding your runtime
|
|
111
|
+
setup from scratch every time.
|
|
112
|
+
- You want one command to tell you whether automation is healthy, instead of
|
|
113
|
+
inferring it from stale branches, dangling sessions, or mystery files under
|
|
114
|
+
`/tmp`.
|
|
115
|
+
- You are doing research on agent behavior, output quality, or prompt strategy
|
|
116
|
+
and need a reproducible, cost-controlled execution harness.
|
|
117
|
+
- Your local machine should behave like a reliable operator box, not a pile of
|
|
118
|
+
shell history that breaks after a reboot.
|
|
78
119
|
|
|
79
120
|
## Roadmap
|
|
80
121
|
|
|
81
|
-
ACP is moving toward a true multi-backend control plane.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
- planned next: `opencode`, `kilo`, `gemini-cli`
|
|
85
|
-
- platform roadmap now calls out Linux, Windows via WSL2, and the longer-term
|
|
86
|
-
native Windows story explicitly
|
|
87
|
-
- adjacent ecosystem targets now include local-model and neighboring runtimes
|
|
88
|
-
such as `ollama`, `nanoclaw`, and `picoclaw`
|
|
89
|
-
- roadmap matrix now distinguishes implemented backends from placeholder
|
|
90
|
-
scaffolds so users can see what is ready today versus what is being prepared
|
|
91
|
-
- long-term direction: one runtime and dashboard for many coding-agent backends
|
|
92
|
-
|
|
93
|
-
### Backend Snapshot
|
|
122
|
+
ACP is moving toward a true multi-backend control plane. The goal is one runtime
|
|
123
|
+
and one dashboard for many coding-agent backends, across macOS, Linux, and
|
|
124
|
+
Windows.
|
|
94
125
|
|
|
95
|
-
|
|
96
|
-
| --- | --- |
|
|
97
|
-
| `codex` | Ready for real ACP workflows today. |
|
|
98
|
-
| `claude` | Ready for real ACP workflows today. |
|
|
99
|
-
| `openclaw` | Ready for real ACP workflows today, including resident-style runs. |
|
|
100
|
-
| `opencode` | Scaffolded in the package so routing and docs can evolve, but not implemented for live execution yet. |
|
|
101
|
-
| `kilo` | Scaffolded in the package so routing and docs can evolve, but not implemented for live execution yet. |
|
|
102
|
-
| `gemini-cli` | Not wired into ACP yet, but on the public roadmap as a strong future worker candidate. |
|
|
103
|
-
|
|
104
|
-
### Support Matrix
|
|
126
|
+
### Backend Status
|
|
105
127
|
|
|
106
|
-
|
|
|
107
|
-
| --- | --- | --- |
|
|
108
|
-
| `codex` |
|
|
109
|
-
| `claude` |
|
|
110
|
-
| `openclaw` |
|
|
111
|
-
| `opencode` |
|
|
112
|
-
| `kilo` |
|
|
113
|
-
| `gemini-cli` |
|
|
114
|
-
| `ollama` |
|
|
115
|
-
| `nanoclaw` |
|
|
116
|
-
| `picoclaw` |
|
|
128
|
+
| Backend | Status | Notes |
|
|
129
|
+
| --- | --- | --- |
|
|
130
|
+
| `codex` | Production-ready | Full ACP workflow support today. |
|
|
131
|
+
| `claude` | Production-ready | Full ACP workflow support today. |
|
|
132
|
+
| `openclaw` | Production-ready | Full ACP workflow support, including resident-style runs. |
|
|
133
|
+
| `opencode` | Scaffolded | Routing and docs in place; live execution not yet implemented. |
|
|
134
|
+
| `kilo` | Scaffolded | Routing and docs in place; live execution not yet implemented. |
|
|
135
|
+
| `gemini-cli` | Roadmap | Strong future candidate; not wired into ACP yet. |
|
|
136
|
+
| `ollama` | Research | Candidate local-model substrate for future ACP integrations. |
|
|
137
|
+
| `nanoclaw` | Exploratory | Ecosystem reference for containerized and WSL2-friendly workflows. |
|
|
138
|
+
| `picoclaw` | Exploratory | Ecosystem reference for lightweight Linux and edge-style runtimes. |
|
|
117
139
|
|
|
118
140
|
If you are trying ACP on a real repo right now, start with `codex`, `claude`,
|
|
119
|
-
or `openclaw`. The other
|
|
120
|
-
|
|
141
|
+
or `openclaw`. The other entries show the direction of travel, not finished
|
|
142
|
+
support.
|
|
121
143
|
|
|
122
144
|
See [ROADMAP.md](./ROADMAP.md) for the fuller public roadmap.
|
|
123
145
|
|
|
124
146
|
## See It Running
|
|
125
147
|
|
|
126
|
-
The dashboard
|
|
127
|
-
|
|
148
|
+
The dashboard gives you a single view across all active profiles — running
|
|
149
|
+
sessions, recent history, provider cooldowns, scheduled issues, and queue state.
|
|
128
150
|
|
|
129
151
|

|
|
130
152
|
|
|
131
|
-
<details>
|
|
132
|
-
<summary>Animated dashboard walkthrough</summary>
|
|
133
|
-
|
|
134
|
-

|
|
135
|
-
|
|
136
|
-
</details>
|
|
137
|
-
|
|
138
153
|
## Architecture
|
|
139
154
|
|
|
140
|
-
ACP is easiest to trust once you can see the moving pieces. The
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
155
|
+
ACP is easiest to trust once you can see the moving pieces. The npm package
|
|
156
|
+
stages a shared runtime, installed profiles live outside the package, a shared
|
|
157
|
+
heartbeat loop decides what to launch, worker adapters do the coding work, and
|
|
158
|
+
reconcile scripts own the GitHub-facing outcome.
|
|
144
159
|
|
|
145
160
|
```mermaid
|
|
146
161
|
flowchart LR
|
|
@@ -202,32 +217,24 @@ Visual assets:
|
|
|
202
217
|
|
|
203
218
|
## Prerequisites
|
|
204
219
|
|
|
205
|
-
ACP is a shell-first operator tool. Most install problems become
|
|
220
|
+
ACP is a shell-first operator tool. Most install problems become easier to
|
|
206
221
|
debug once it is clear which dependency is responsible for which part of the
|
|
207
222
|
system.
|
|
208
223
|
|
|
209
|
-
| Tool | Required |
|
|
224
|
+
| Tool | Required | Purpose | Notes |
|
|
210
225
|
| --- | --- | --- | --- |
|
|
211
|
-
| Node.js `>= 18` | yes | Runs the npm package entrypoint and `npx
|
|
212
|
-
| `bash` | yes |
|
|
213
|
-
| `git` | yes |
|
|
214
|
-
| `gh` | yes |
|
|
215
|
-
| `jq` | yes |
|
|
216
|
-
| `python3` | yes | Powers the dashboard server, snapshot renderer, and
|
|
217
|
-
| `tmux` | yes |
|
|
218
|
-
| Worker CLI
|
|
219
|
-
| Bundled `codex-quota`
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
backend you plan to use are already authenticated for the same OS user.
|
|
224
|
-
|
|
225
|
-
For Codex-backed profiles, ACP will use the bundled quota tooling by default.
|
|
226
|
-
That keeps quota-aware rotation inside the same package and avoids depending on
|
|
227
|
-
an unmaintained external install. If you already have a custom `codex-quota`
|
|
228
|
-
setup you want to keep, point ACP at it explicitly with
|
|
229
|
-
`ACP_CODEX_QUOTA_BIN=/path/to/codex-quota` and optionally
|
|
230
|
-
`ACP_CODEX_QUOTA_MANAGER_SCRIPT=/path/to/auto-switch.sh`.
|
|
226
|
+
| Node.js `>= 18` | yes | Runs the npm package entrypoint and `npx` wrapper. | CI runs on Node `22`. Node `20` or `22` both work fine. |
|
|
227
|
+
| `bash` | yes | All runtime, profile, and worker orchestration scripts are Bash. | Your login shell can be `zsh`; `bash` just needs to be on `PATH`. |
|
|
228
|
+
| `git` | yes | Manages worktrees, checks branch state, and coordinates repo automation. | Required even if you interact only through GitHub issues and PRs. |
|
|
229
|
+
| `gh` | yes | GitHub CLI auth and API access for issues, PRs, labels, and metadata. | Run `gh auth login` before first use. |
|
|
230
|
+
| `jq` | yes | Parses JSON from `gh` output and worker metadata throughout. | Missing `jq` will break GitHub-heavy and runtime flows. |
|
|
231
|
+
| `python3` | yes | Powers the dashboard server, snapshot renderer, and config helpers. | Required for both dashboard use and several internal scripts. |
|
|
232
|
+
| `tmux` | yes | Runs long-lived worker sessions and captures their status. | Missing `tmux` means background worker workflows will not launch. |
|
|
233
|
+
| Worker CLI (`codex`, `claude`, or `openclaw`) | depends on backend | The actual coding agent for a profile. | Install and authenticate the backend you plan to use before starting background runs. |
|
|
234
|
+
| Bundled `codex-quota` + ACP quota manager | automatic for Codex | Quota-aware failover and health signals for Codex profiles. | Bundled by default. Override with `ACP_CODEX_QUOTA_BIN` only if you have a custom setup. |
|
|
235
|
+
|
|
236
|
+
Make sure `gh` and your chosen worker backend are both authenticated for the
|
|
237
|
+
same OS user before starting any background runtime.
|
|
231
238
|
|
|
232
239
|
## Install
|
|
233
240
|
|
|
@@ -247,127 +254,59 @@ agent-control-plane help
|
|
|
247
254
|
The examples below use `npx agent-control-plane@latest ...`, but every command
|
|
248
255
|
works the same way after a global install.
|
|
249
256
|
|
|
250
|
-
## Support the Project
|
|
251
|
-
|
|
252
|
-
If ACP saves you time, helps you keep agent workflows sane, or simply makes
|
|
253
|
-
background automation less annoying, you can support the project.
|
|
254
|
-
|
|
255
|
-
- sponsor the maintainer on GitHub:
|
|
256
|
-
`https://github.com/sponsors/ducminhnguyen0319`
|
|
257
|
-
- use the npm `funding` metadata so `npm fund` points people to the same place
|
|
258
|
-
- keep the open source core free, then layer in paid help or team features later
|
|
259
|
-
|
|
260
|
-
If you fork or republish this package under another maintainer account, update
|
|
261
|
-
the sponsor links in `package.json` and `.github/FUNDING.yml`.
|
|
262
|
-
|
|
263
|
-
### Sponsorship Policy
|
|
264
|
-
|
|
265
|
-
Sponsorships for this repository are maintainer-managed project support.
|
|
266
|
-
|
|
267
|
-
- sponsorships go to the maintainer account linked in the sponsor button
|
|
268
|
-
- sponsorship does not transfer ownership, copyright, patent rights, or control
|
|
269
|
-
over the project
|
|
270
|
-
- contributors are not automatically entitled to sponsorship payouts
|
|
271
|
-
- the maintainer may choose to use sponsorship funds for project maintenance,
|
|
272
|
-
infrastructure, contributor rewards, or other project-related work at their
|
|
273
|
-
discretion
|
|
274
|
-
|
|
275
257
|
## First Run
|
|
276
258
|
|
|
277
|
-
|
|
259
|
+
### Option A — Guided setup (recommended)
|
|
260
|
+
|
|
261
|
+
The fastest path is the interactive wizard:
|
|
278
262
|
|
|
279
263
|
```bash
|
|
280
264
|
npx agent-control-plane@latest setup
|
|
281
265
|
```
|
|
282
266
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
Use it when you want ACP to walk you through the install instead of assembling
|
|
290
|
-
the bootstrap sequence by hand.
|
|
291
|
-
|
|
292
|
-
During `setup`, ACP can:
|
|
293
|
-
|
|
294
|
-
- auto-detect the current repo root and GitHub slug when you run it inside a
|
|
295
|
-
checkout with `origin` configured
|
|
296
|
-
- offer to install missing core tools like `gh`, `jq`, `python3`, or `tmux`
|
|
297
|
-
through supported package managers such as `brew`, `apt-get`, `dnf`, `yum`,
|
|
298
|
-
and `pacman`
|
|
299
|
-
- prompt to run `gh auth login` before ACP tries to start background runtime
|
|
300
|
-
flows
|
|
301
|
-
- offer to install supported worker backends like `codex`, `claude`, or
|
|
302
|
-
`openclaw` when ACP knows a safe install command, and otherwise show
|
|
303
|
-
backend-specific next steps, install/auth/verify examples, and a docs URL it
|
|
304
|
-
can open for you on interactive machines
|
|
305
|
-
- defer anchor repo sync automatically when ACP can scaffold the profile but
|
|
306
|
-
cannot reach the repo remote yet, so setup can still finish with a clear
|
|
307
|
-
follow-up instead of failing half way through
|
|
308
|
-
- run one final fix-up summary at the end so you can clear whatever is still
|
|
309
|
-
red instead of guessing which step to retry next
|
|
310
|
-
- scaffold the profile, run doctor checks, and optionally start the runtime in
|
|
311
|
-
one guided pass
|
|
312
|
-
|
|
313
|
-
The wizard now automates ACP's shell/runtime prerequisites and can also
|
|
314
|
-
auto-install supported worker CLIs through npm. If ACP cannot or should not
|
|
315
|
-
install the selected backend itself, it will tell you what is missing, print
|
|
316
|
-
backend-specific next steps, and offer to open the right setup docs before ACP
|
|
317
|
-
tries to launch it.
|
|
318
|
-
|
|
319
|
-
If you want the same flow without prompts, use flags such as
|
|
320
|
-
`--non-interactive`, `--install-missing-deps`, `--gh-auth-login`,
|
|
321
|
-
`--start-runtime`, and `--json`.
|
|
322
|
-
|
|
323
|
-
If you want to inspect the entire onboarding plan before ACP touches your
|
|
324
|
-
machine, run:
|
|
267
|
+
The wizard auto-detects the current repo when possible, offers to install
|
|
268
|
+
missing dependencies, prompts for `gh auth login`, scaffolds the profile, runs
|
|
269
|
+
health checks, and optionally starts the runtime — all in one pass.
|
|
270
|
+
|
|
271
|
+
To preview exactly what it would do before touching anything:
|
|
325
272
|
|
|
326
273
|
```bash
|
|
327
274
|
npx agent-control-plane@latest setup --dry-run
|
|
328
275
|
```
|
|
329
276
|
|
|
330
|
-
|
|
331
|
-
install commands, auth steps, runtime/launchd intent, and a final fix-up plan
|
|
332
|
-
without writing files, installing packages, or launching background services.
|
|
277
|
+
For non-interactive use (CI, scripted installs, GUI frontends):
|
|
333
278
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
279
|
+
```bash
|
|
280
|
+
npx agent-control-plane@latest setup \
|
|
281
|
+
--non-interactive \
|
|
282
|
+
--install-missing-deps \
|
|
283
|
+
--start-runtime \
|
|
284
|
+
--json
|
|
285
|
+
```
|
|
338
286
|
|
|
339
|
-
|
|
287
|
+
With `--json`, ACP emits a single structured object on `stdout` and sends
|
|
288
|
+
progress logs to `stderr`, which keeps parsing stable.
|
|
340
289
|
|
|
341
|
-
|
|
342
|
-
2. sync the packaged runtime into `~/.agent-runtime`
|
|
343
|
-
3. create one profile for one repo
|
|
344
|
-
4. run quick health checks
|
|
345
|
-
5. start the runtime and confirm it answers to you
|
|
290
|
+
### Option B — Manual setup
|
|
346
291
|
|
|
347
|
-
If
|
|
348
|
-
intentional.
|
|
292
|
+
If you prefer explicit control over each step:
|
|
349
293
|
|
|
350
|
-
|
|
294
|
+
**1. Authenticate GitHub**
|
|
351
295
|
|
|
352
296
|
```bash
|
|
353
297
|
gh auth login
|
|
354
298
|
```
|
|
355
299
|
|
|
356
|
-
|
|
357
|
-
automation. If `gh` cannot see the repo, the rest of the flow will feel broken
|
|
358
|
-
for reasons that have nothing to do with ACP.
|
|
359
|
-
|
|
360
|
-
### 2. Install or refresh the packaged runtime
|
|
300
|
+
**2. Install the packaged runtime**
|
|
361
301
|
|
|
362
302
|
```bash
|
|
363
303
|
npx agent-control-plane@latest sync
|
|
364
304
|
```
|
|
365
305
|
|
|
366
|
-
This
|
|
367
|
-
|
|
368
|
-
tooling in place on disk" before you wire it to a specific repo.
|
|
306
|
+
This stages the ACP runtime into `~/.agent-runtime/runtime-home`. Safe to
|
|
307
|
+
re-run after upgrades.
|
|
369
308
|
|
|
370
|
-
|
|
309
|
+
**3. Create a profile for your repo**
|
|
371
310
|
|
|
372
311
|
```bash
|
|
373
312
|
npx agent-control-plane@latest init \
|
|
@@ -379,217 +318,173 @@ npx agent-control-plane@latest init \
|
|
|
379
318
|
--coding-worker openclaw
|
|
380
319
|
```
|
|
381
320
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
- `--repo-root` points at your local checkout
|
|
391
|
-
- `--agent-root` is where ACP keeps per-project runtime state
|
|
392
|
-
- `--worktree-root` is where ACP can place repo worktrees
|
|
393
|
-
- `--coding-worker` picks the backend ACP should orchestrate
|
|
321
|
+
| Flag | Purpose |
|
|
322
|
+
| --- | --- |
|
|
323
|
+
| `--profile-id` | Short name used in all ACP commands |
|
|
324
|
+
| `--repo-slug` | GitHub repo ACP should track |
|
|
325
|
+
| `--repo-root` | Path to your local checkout |
|
|
326
|
+
| `--agent-root` | Where ACP keeps per-project runtime state |
|
|
327
|
+
| `--worktree-root` | Where ACP places repo worktrees |
|
|
328
|
+
| `--coding-worker` | Backend to orchestrate (`codex`, `claude`, or `openclaw`) |
|
|
394
329
|
|
|
395
|
-
|
|
330
|
+
**4. Validate before trusting it**
|
|
396
331
|
|
|
397
332
|
```bash
|
|
398
333
|
npx agent-control-plane@latest doctor
|
|
399
334
|
npx agent-control-plane@latest profile-smoke --profile-id my-repo
|
|
400
335
|
```
|
|
401
336
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
background loops.
|
|
337
|
+
`doctor` checks installation health. `profile-smoke` gives the profile a fast
|
|
338
|
+
confidence pass before you turn on background loops.
|
|
405
339
|
|
|
406
|
-
|
|
340
|
+
**5. Start the runtime**
|
|
407
341
|
|
|
408
342
|
```bash
|
|
409
343
|
npx agent-control-plane@latest runtime start --profile-id my-repo
|
|
410
344
|
npx agent-control-plane@latest runtime status --profile-id my-repo
|
|
411
345
|
```
|
|
412
346
|
|
|
413
|
-
|
|
414
|
-
runtime for that profile.
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
## What Happens After `runtime start`
|
|
418
|
-
|
|
419
|
-
ACP takes the profile you installed and runs it like an operator would:
|
|
420
|
-
|
|
421
|
-
- it uses the installed runtime layout under `~/.agent-runtime`
|
|
422
|
-
- it keeps per-profile state grouped together instead of scattered everywhere
|
|
423
|
-
- it gives you a stable `runtime status` command for health checks
|
|
424
|
-
- it lets you inspect the system through the dashboard rather than memory
|
|
425
|
-
|
|
426
|
-
That matters most when the setup grows beyond one-off experiments and becomes
|
|
427
|
-
something you want to keep running.
|
|
347
|
+
Once `runtime status` returns clean output, ACP is actively managing the
|
|
348
|
+
runtime for that profile. Per-profile state lives under `~/.agent-runtime`,
|
|
349
|
+
grouped and inspectable without digging through scattered temp files.
|
|
428
350
|
|
|
429
351
|
## Everyday Usage
|
|
430
352
|
|
|
431
|
-
Check runtime state:
|
|
432
|
-
|
|
433
353
|
```bash
|
|
354
|
+
# Check runtime state
|
|
434
355
|
npx agent-control-plane@latest runtime status --profile-id my-repo
|
|
435
|
-
```
|
|
436
|
-
|
|
437
|
-
Restart the runtime:
|
|
438
356
|
|
|
439
|
-
|
|
357
|
+
# Restart the runtime
|
|
440
358
|
npx agent-control-plane@latest runtime restart --profile-id my-repo
|
|
441
|
-
```
|
|
442
359
|
|
|
443
|
-
Stop the runtime
|
|
444
|
-
|
|
445
|
-
```bash
|
|
360
|
+
# Stop the runtime
|
|
446
361
|
npx agent-control-plane@latest runtime stop --profile-id my-repo
|
|
447
|
-
```
|
|
448
362
|
|
|
449
|
-
Run smoke checks
|
|
450
|
-
|
|
451
|
-
```bash
|
|
363
|
+
# Run smoke checks
|
|
452
364
|
npx agent-control-plane@latest profile-smoke --profile-id my-repo
|
|
453
365
|
npx agent-control-plane@latest smoke
|
|
454
366
|
```
|
|
455
367
|
|
|
456
|
-
This is the rhythm ACP is built for: install once, inspect often, restart when
|
|
457
|
-
needed, and keep the runtime understandable.
|
|
458
|
-
|
|
459
368
|
## Dashboard
|
|
460
369
|
|
|
461
|
-
Run the dashboard locally:
|
|
462
|
-
|
|
463
370
|
```bash
|
|
464
371
|
npx agent-control-plane@latest dashboard --host 127.0.0.1 --port 8765
|
|
465
372
|
```
|
|
466
373
|
|
|
467
|
-
Then open:
|
|
468
|
-
|
|
469
|
-
```text
|
|
470
|
-
http://127.0.0.1:8765
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
The dashboard is where ACP gets much more pleasant to use. Instead of treating
|
|
474
|
-
automation like a black box, you can track profiles, runtime state, and system
|
|
475
|
-
activity in one place.
|
|
476
|
-
|
|
477
|
-
## Contributing
|
|
478
|
-
|
|
479
|
-
Contributions are welcome, but this repo uses a contributor agreement so the
|
|
480
|
-
project can stay easy to maintain and relicense if needed.
|
|
481
|
-
|
|
482
|
-
- contribution guide: [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
483
|
-
- contributor agreement: [CLA.md](./CLA.md)
|
|
484
|
-
|
|
485
|
-
## Security
|
|
486
|
-
|
|
487
|
-
If you find a vulnerability, do not open a public issue first.
|
|
374
|
+
Then open `http://127.0.0.1:8765`.
|
|
488
375
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
## Releases
|
|
493
|
-
|
|
494
|
-
- release history: [CHANGELOG.md](./CHANGELOG.md)
|
|
495
|
-
- maintainer checklist: [references/release-checklist.md](./references/release-checklist.md)
|
|
376
|
+
The dashboard shows all active profiles in one place: running sessions, recent
|
|
377
|
+
run history, provider cooldowns, scheduled issues, and queue state — without
|
|
378
|
+
having to dig through `tmux` panes or temp folders.
|
|
496
379
|
|
|
497
380
|
## macOS Autostart
|
|
498
381
|
|
|
499
|
-
|
|
382
|
+
Install a per-profile LaunchAgent so the runtime survives reboots:
|
|
500
383
|
|
|
501
384
|
```bash
|
|
502
385
|
npx agent-control-plane@latest launchd-install --profile-id my-repo
|
|
503
386
|
```
|
|
504
387
|
|
|
505
|
-
Remove
|
|
388
|
+
Remove it:
|
|
506
389
|
|
|
507
390
|
```bash
|
|
508
391
|
npx agent-control-plane@latest launchd-uninstall --profile-id my-repo
|
|
509
392
|
```
|
|
510
393
|
|
|
511
|
-
These commands are macOS-only
|
|
394
|
+
These commands are macOS-only and manage per-user `launchd` agents.
|
|
512
395
|
|
|
513
396
|
## Update
|
|
514
397
|
|
|
515
|
-
|
|
398
|
+
After upgrading the package, refresh the runtime and verify health:
|
|
516
399
|
|
|
517
400
|
```bash
|
|
518
401
|
npx agent-control-plane@latest sync
|
|
519
402
|
npx agent-control-plane@latest doctor
|
|
403
|
+
npx agent-control-plane@latest smoke # optional confidence check
|
|
520
404
|
```
|
|
521
405
|
|
|
522
|
-
Optional confidence check:
|
|
523
|
-
|
|
524
|
-
```bash
|
|
525
|
-
npx agent-control-plane@latest smoke
|
|
526
|
-
```
|
|
527
|
-
|
|
528
|
-
This keeps the runtime on disk aligned with the packaged version you just
|
|
529
|
-
installed.
|
|
530
|
-
|
|
531
406
|
## Remove a Profile
|
|
532
407
|
|
|
533
|
-
|
|
408
|
+
Remove one profile and its ACP-managed runtime state:
|
|
534
409
|
|
|
535
410
|
```bash
|
|
536
411
|
npx agent-control-plane@latest remove --profile-id my-repo
|
|
537
412
|
```
|
|
538
413
|
|
|
539
|
-
Also remove ACP-managed repo and worktree
|
|
414
|
+
Also remove ACP-managed repo and worktree directories:
|
|
540
415
|
|
|
541
416
|
```bash
|
|
542
417
|
npx agent-control-plane@latest remove --profile-id my-repo --purge-paths
|
|
543
418
|
```
|
|
544
419
|
|
|
545
|
-
Use `--purge-paths` only when you want ACP-managed directories
|
|
420
|
+
Use `--purge-paths` only when you want ACP-managed directories deleted too.
|
|
546
421
|
|
|
547
422
|
## Troubleshooting
|
|
548
423
|
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
- `
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
- `node` is older than `18`
|
|
562
|
-
Upgrade Node first. ACP's package contract starts at `18+`.
|
|
563
|
-
- you are already on Node `20` or `22`
|
|
564
|
-
That is fine. The package only has a minimum version, not a maximum.
|
|
565
|
-
- missing `jq`
|
|
566
|
-
Install `jq`, then retry the GitHub- or runtime-heavy command that failed.
|
|
567
|
-
- runtime or source drift after updates
|
|
568
|
-
Run `sync`, then `doctor`.
|
|
569
|
-
- missing `tmux`, `gh`, or `python3`
|
|
570
|
-
Install the dependency, then retry `sync` or `runtime start`.
|
|
571
|
-
- missing `codex-quota`
|
|
572
|
-
This is only an optional Codex enhancement. Core ACP installation and most
|
|
573
|
-
non-Codex flows do not require it.
|
|
424
|
+
| Symptom | Fix |
|
|
425
|
+
| --- | --- |
|
|
426
|
+
| `profile not installed` | Run `init` first, then retry with the same `--profile-id`. |
|
|
427
|
+
| `explicit profile selection required` | Pass `--profile-id <id>` to `runtime`, `launchd-install`, `launchd-uninstall`, and `remove`. |
|
|
428
|
+
| `gh` cannot access the repo | Re-run `gh auth login` and confirm the repo slug in the profile is correct. |
|
|
429
|
+
| Setup deferred anchor repo sync | ACP could not reach the repo remote. Fix Git access or the remote URL, then re-run `setup` or `init` without `--skip-anchor-sync`. |
|
|
430
|
+
| Backend auth failures (`codex`, `claude`, `openclaw`) | Authenticate the backend before starting ACP in the background. |
|
|
431
|
+
| Node older than `18` | Upgrade Node first. ACP's minimum version is `18+`. |
|
|
432
|
+
| Missing `jq` | Install `jq`, then retry the failed command. |
|
|
433
|
+
| Runtime or source drift after an update | Run `sync`, then `doctor`. |
|
|
434
|
+
| Missing `tmux`, `gh`, or `python3` | Install the dependency, then retry `sync` or `runtime start`. |
|
|
435
|
+
| Missing `codex-quota` warning | This is optional. Core ACP and all non-Codex flows do not require it. |
|
|
574
436
|
|
|
575
437
|
## Command Summary
|
|
576
438
|
|
|
577
|
-
| Command |
|
|
578
|
-
| --- | --- |
|
|
579
|
-
| `
|
|
580
|
-
| `
|
|
581
|
-
| `
|
|
582
|
-
| `
|
|
583
|
-
| `
|
|
584
|
-
| `
|
|
585
|
-
| `
|
|
586
|
-
| `
|
|
587
|
-
| `
|
|
588
|
-
| `
|
|
589
|
-
| `
|
|
590
|
-
| `
|
|
591
|
-
| `
|
|
592
|
-
| `npx agent-control-plane@latest remove --profile-id <id> [--purge-paths]` | Remove an installed profile and ACP-managed state. | `--purge-paths` also deletes ACP-managed repo/worktree paths, so use it carefully. |
|
|
593
|
-
| `npx agent-control-plane@latest smoke` | Run the packaged smoke suite for the shared control plane. | No required args. Best used after `sync` or before a public release. |
|
|
439
|
+
| Command | Purpose |
|
|
440
|
+
| --- | --- |
|
|
441
|
+
| `help` | Show the full CLI surface. Good first command on a new machine. |
|
|
442
|
+
| `version` | Print the running package version. |
|
|
443
|
+
| `setup [--dry-run] [--json]` | Guided bootstrap wizard. Detects repo, installs deps, scaffolds profile, starts runtime. `--dry-run` previews without writing anything. `--json` emits a structured result. |
|
|
444
|
+
| `sync` / `install` | Stage or refresh the packaged runtime into `~/.agent-runtime/runtime-home`. Run after install or upgrade. |
|
|
445
|
+
| `init ...` | Scaffold one repo profile manually. Requires `--profile-id`, `--repo-slug`, `--repo-root`, `--agent-root`, `--worktree-root`, `--coding-worker`. |
|
|
446
|
+
| `doctor` | Inspect runtime and source installation health. |
|
|
447
|
+
| `profile-smoke [--profile-id <id>]` | Validate one profile before trusting it with real work. |
|
|
448
|
+
| `runtime <status\|start\|stop\|restart> --profile-id <id>` | Operate one profile runtime. |
|
|
449
|
+
| `dashboard [--host] [--port]` | Start the local monitoring dashboard. Defaults: `127.0.0.1:8765`. |
|
|
450
|
+
| `launchd-install --profile-id <id>` | Install a per-profile LaunchAgent on macOS. |
|
|
451
|
+
| `launchd-uninstall --profile-id <id>` | Remove a per-profile LaunchAgent on macOS. |
|
|
452
|
+
| `remove --profile-id <id> [--purge-paths]` | Remove a profile and its ACP-managed state. `--purge-paths` also deletes managed directories. |
|
|
453
|
+
| `smoke` | Run the packaged smoke suite for the shared control plane. |
|
|
594
454
|
|
|
595
455
|
For a lower-level script map, see [references/commands.md](./references/commands.md).
|
|
456
|
+
|
|
457
|
+
## Support the Project
|
|
458
|
+
|
|
459
|
+
If ACP saves you time or keeps your agent workflows sane, you can support the
|
|
460
|
+
project via [GitHub Sponsors](https://github.com/sponsors/ducminhnguyen0319).
|
|
461
|
+
|
|
462
|
+
The open source core stays free. If you fork or republish this package under
|
|
463
|
+
another maintainer account, update the sponsor links in `package.json` and
|
|
464
|
+
`.github/FUNDING.yml`.
|
|
465
|
+
|
|
466
|
+
**Sponsorship policy:** Sponsorships are maintainer-managed project support.
|
|
467
|
+
They do not transfer ownership, copyright, patent rights, or control over the
|
|
468
|
+
project. Contributors are not automatically entitled to sponsorship payouts. The
|
|
469
|
+
maintainer may direct funds toward maintenance, infrastructure, contributor
|
|
470
|
+
rewards, or other project-related work at their discretion.
|
|
471
|
+
|
|
472
|
+
## Contributing
|
|
473
|
+
|
|
474
|
+
Contributions are welcome. This repo uses a contributor agreement so the
|
|
475
|
+
project can stay easy to maintain and relicense if needed.
|
|
476
|
+
|
|
477
|
+
- Contribution guide: [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
478
|
+
- Contributor agreement: [CLA.md](./CLA.md)
|
|
479
|
+
|
|
480
|
+
## Security
|
|
481
|
+
|
|
482
|
+
Do not open a public issue for vulnerabilities.
|
|
483
|
+
|
|
484
|
+
- Security policy: [SECURITY.md](./SECURITY.md)
|
|
485
|
+
- Code of conduct: [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)
|
|
486
|
+
|
|
487
|
+
## Releases
|
|
488
|
+
|
|
489
|
+
- Release history: [CHANGELOG.md](./CHANGELOG.md)
|
|
490
|
+
- Maintainer checklist: [references/release-checklist.md](./references/release-checklist.md)
|