agent-control-plane 0.1.14 → 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 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
- It is the operator layer for coding agents that need to keep running after the
15
- novelty wears off.
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 turns a GitHub repo into a managed runtime with a repeatable setup, a stable
28
- place for state, a real status command, and a dashboard you can glance at
29
- without spelunking through temp folders, worktrees, or half-remembered `tmux`
30
- sessions.
31
-
32
- ACP does not try to be the coding agent itself. It makes the surrounding system
33
- less fragile: profile setup, runtime start and stop, heartbeat scheduling,
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
- The promise is intentionally boring in the best possible way: your agents stay
38
- busy, your runtime stays understandable, and the repo keeps moving even when
39
- you are not sitting there manually babysitting every loop, retry, or publish
40
- decision.
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
- - you want issue-driven or PR-driven agent work to keep running in the
65
- background, but still be inspectable
66
- - you are juggling more than one repo and want each one to have a clean,
67
- separate runtime identity
68
- - you want to swap or compare worker backends without rebuilding your runtime
69
- habits every time
70
- - you want one command to tell you whether automation is healthy instead of
71
- inferring it from stale branches, dangling sessions, or mystery files
72
- - you want a dashboard and smoke checks before you trust the setup on real work
73
- - you want your local machine to behave more like a reliable operator box and
74
- less like a pile of shell history
75
-
76
- If you have ever thought "the agent part basically works, but the runtime
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
- - available now: `codex`, `claude`, `openclaw`
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
- | Backend | What You Can Expect Today |
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
- | Target | Kind | ACP Relationship Today | Current Status |
107
- | --- | --- | --- | --- |
108
- | `codex` | direct worker | First-class ACP worker backend | production-ready path today |
109
- | `claude` | direct worker | First-class ACP worker backend | production-ready path today |
110
- | `openclaw` | direct worker | First-class ACP worker backend with resident workflow support | production-ready path today |
111
- | `opencode` | direct worker | Planned future worker adapter | placeholder scaffold only |
112
- | `kilo` | direct worker | Planned future worker adapter | placeholder scaffold only |
113
- | `gemini-cli` | direct worker | Research target for a future worker adapter | roadmap candidate |
114
- | `ollama` | local model runtime | Candidate local-model substrate behind future ACP integrations | research target |
115
- | `nanoclaw` | adjacent agent shell | Ecosystem reference for containerized and WSL2-friendly workflows | exploratory interoperability target |
116
- | `picoclaw` | adjacent agent shell | Ecosystem reference for lightweight Linux and edge-style agent runtimes | exploratory interoperability target |
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 adapters are there to show the direction of travel,
120
- not to pretend support is already complete.
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 media below is rendered from a real local ACP demo fixture using
127
- `bash tools/bin/render-dashboard-demo-media.sh`.
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
  ![ACP dashboard demo screenshot](./assets/readme/dashboard-demo.png)
130
152
 
131
- <details>
132
- <summary>Animated dashboard walkthrough</summary>
133
-
134
- ![ACP dashboard demo walkthrough](./assets/readme/dashboard-demo.gif)
135
-
136
- </details>
137
-
138
153
  ## Architecture
139
154
 
140
- ACP is easiest to trust once you can see the moving pieces. The short version
141
- is: the npm package stages a shared runtime, installed profiles live outside
142
- the package, a shared heartbeat loop decides what to launch, worker adapters do
143
- the coding work, and reconcile scripts own the GitHub-facing outcome.
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 much easier to
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 | Why ACP uses it | Notes |
224
+ | Tool | Required | Purpose | Notes |
210
225
  | --- | --- | --- | --- |
211
- | Node.js `>= 18` | yes | Runs the npm package entrypoint and `npx agent-control-plane ...` wrapper. | ACP declares `>= 18`. CI currently runs on Node `22`, so newer maintained versions are expected to work too. If you are already on Node `20` or `22`, you do not need to downgrade. |
212
- | `bash` | yes | Most runtime, profile, and worker orchestration scripts are Bash-based. | Your login shell can be `zsh` or something else, but `bash` must exist on `PATH`. |
213
- | `git` | yes | ACP manages worktrees, checks branch state, and coordinates repo-local automation state. | Required even if you mainly interact through GitHub issues and PRs. |
214
- | `gh` | yes | ACP uses GitHub CLI auth and API access for issues, PRs, labels, and repo metadata. | Run `gh auth login` before first real use. |
215
- | `jq` | yes | Several runtime and GitHub flows parse JSON from `gh` and worker metadata. | If `jq` is missing, some operator flows will fail even though the npm package itself installs fine. |
216
- | `python3` | yes | Powers the dashboard server, snapshot renderer, and a few config/render helpers. | Required for both dashboard use and several internal helper scripts. |
217
- | `tmux` | yes | ACP runs long-lived worker sessions and captures status through `tmux`. | If `tmux` is missing, background worker workflows will not launch. |
218
- | Worker CLI: `codex`, `claude`, or `openclaw` | depends on backend | The actual coding worker for a profile. | You only need the backend you plan to choose via `--coding-worker`. Authenticate that backend before starting recurring or background runs. |
219
- | Bundled `codex-quota` plus ACP quota manager | automatic for Codex profiles | Improves Codex quota-aware failover and health signals. | ACP now ships a maintained `codex-quota` fork and a first-party manager script for Codex worker flows. You only need an external install if you intentionally override `ACP_CODEX_QUOTA_BIN` or `ACP_CODEX_QUOTA_MANAGER_SCRIPT`. |
220
- | `playwright` and `ffmpeg` | maintainer-only | Regenerate the README dashboard screenshot and GIF. | Needed for `bash tools/bin/render-dashboard-demo-media.sh`, not for everyday ACP use. |
221
-
222
- Before you start background runtimes, make sure `gh` and whichever worker
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
- The shortest path is now a guided setup flow:
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
- `setup` detects the current repo when it can, suggests sane managed paths under
284
- `~/.agent-runtime/projects/<profile-id>`, offers to install missing core tools
285
- when it knows how, can prompt to run `gh auth login`, runs `sync`, scaffolds
286
- the profile, checks doctor status, reports core tool and auth readiness, and
287
- can optionally start the runtime for you.
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
- That mode renders the detected repo/profile values, dependency and backend
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
- If you are building a GUI installer, setup assistant, or another frontend
335
- around ACP, add `--json` to either the real run or the dry-run preview. ACP
336
- will emit exactly one JSON object on `stdout` and send progress logs to
337
- `stderr`, which keeps parsing stable.
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
- If you want the explicit manual path, the happy path is still:
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
- 1. authenticate GitHub
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 that feels more like installing an operator tool than a toy demo, that is
348
- intentional.
292
+ If you prefer explicit control over each step:
349
293
 
350
- ### 1. Authenticate GitHub first
294
+ **1. Authenticate GitHub**
351
295
 
352
296
  ```bash
353
297
  gh auth login
354
298
  ```
355
299
 
356
- ACP assumes GitHub access is already in place before you ask it to manage repo
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 publishes the packaged ACP runtime into `~/.agent-runtime/runtime-home`.
367
- You can safely run it again after upgrades. Think of this as "put the operator
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
- ### 3. Create one profile for one repo manually
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
- That single command tells ACP what repo to manage, where its runtime state
383
- should live, where worktrees belong, and which worker backend you want ACP to
384
- orchestrate.
385
-
386
- What those flags mean:
387
-
388
- - `--profile-id` is the short name you will use in ACP commands
389
- - `--repo-slug` is the GitHub repo ACP should track
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
- ### 4. Validate before you trust it
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
- This is the "trust, but verify" step. `doctor` checks installation health, and
403
- `profile-smoke` gives one profile a fast confidence pass before you turn on
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
- ### 5. Start the runtime and make sure it answers back
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
- At this point ACP is no longer just installed. It is actively managing the
414
- runtime for that profile. If `runtime status` feels boring and readable, that
415
- is a good sign. That is exactly the point.
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
- ```bash
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
- - security policy: [SECURITY.md](./SECURITY.md)
490
- - code of conduct: [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)
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
- If you want a profile runtime to come back automatically after login or reboot:
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 that autostart entry:
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 because they manage per-user `launchd` agents.
394
+ These commands are macOS-only and manage per-user `launchd` agents.
512
395
 
513
396
  ## Update
514
397
 
515
- Refresh the installed runtime after upgrading the package:
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
- Delete one installed profile and its ACP-managed runtime state:
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 paths:
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 removed too.
420
+ Use `--purge-paths` only when you want ACP-managed directories deleted too.
546
421
 
547
422
  ## Troubleshooting
548
423
 
549
- - `profile not installed`
550
- Run `init` first, then retry with the same `--profile-id`.
551
- - `explicit profile selection required`
552
- Pass `--profile-id <id>` to `runtime`, `launchd-install`,
553
- `launchd-uninstall`, and `remove`.
554
- - `gh` cannot access the repo
555
- Re-run `gh auth login` and confirm the repo slug in the profile is correct.
556
- - setup deferred anchor repo sync
557
- ACP could not reach the repo remote yet. Fix Git access or the remote URL,
558
- then rerun `setup` or `init` without `--skip-anchor-sync`.
559
- - backend auth failures from `codex`, `claude`, or `openclaw`
560
- Authenticate that backend before starting ACP in the background.
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 | What it is for | Key args and parameters |
578
- | --- | --- | --- |
579
- | `npx agent-control-plane@latest help` | Show the public CLI surface. | No args. Good first command on a new machine. |
580
- | `npx agent-control-plane@latest version` | Print the package version you are actually running. | No args. Useful when comparing local output to docs or release notes. |
581
- | `npx agent-control-plane@latest setup` | Guided bootstrap for one repo profile. | Auto-detects repo details when possible, prompts for missing values, can install missing core tools, supported worker backends, and run `gh auth login`, then runs `sync`, `init`, health checks, optional runtime start, and a final fix-up pass. Add `--json` for one structured JSON result on `stdout`. |
582
- | `npx agent-control-plane@latest setup --dry-run` | Preview exactly what setup would do without changing the machine. | Also available as `--plan`. Prints detected paths, command previews, auth/runtime intentions, and final fix-up plan. Add `--json` for a machine-readable plan object. |
583
- | `npx agent-control-plane@latest sync` | Publish or refresh the packaged runtime into `~/.agent-runtime/runtime-home`. | No required args. Run this after install or upgrade. |
584
- | `npx agent-control-plane@latest install` | Alias for `sync`. | Same behavior as `sync`. |
585
- | `npx agent-control-plane@latest init ...` | Scaffold and adopt one repo profile. | Usually includes `--profile-id`, `--repo-slug`, `--repo-root`, `--agent-root`, `--worktree-root`, and `--coding-worker`. Helpful bootstrap flags include `--allow-missing-repo`, `--skip-anchor-sync`, and `--skip-workspace-sync`. |
586
- | `npx agent-control-plane@latest doctor` | Inspect runtime/source installation health. | No required args. Use after `sync` or when something feels off. |
587
- | `npx agent-control-plane@latest profile-smoke [--profile-id <id>]` | Validate one installed profile before you trust it. | `--profile-id` is recommended when more than one profile exists. |
588
- | `npx agent-control-plane@latest runtime <status|start|stop|restart> --profile-id <id>` | Operate one profile runtime. | `--profile-id` is required for real use. Subcommands are `status`, `start`, `stop`, and `restart`. |
589
- | `npx agent-control-plane@latest dashboard [--host 127.0.0.1] [--port 8765]` | Start the local monitoring dashboard. | `--host` and `--port` are optional; defaults are good for most local setups. |
590
- | `npx agent-control-plane@latest launchd-install --profile-id <id>` | Install a per-profile LaunchAgent on macOS. | macOS only. Requires `--profile-id`. |
591
- | `npx agent-control-plane@latest launchd-uninstall --profile-id <id>` | Remove a per-profile LaunchAgent on macOS. | macOS only. Requires `--profile-id`. |
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)