agent-control-plane 0.1.14 → 0.2.0

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.
Files changed (53) hide show
  1. package/README.md +323 -349
  2. package/bin/pr-risk.sh +28 -6
  3. package/hooks/heartbeat-hooks.sh +62 -22
  4. package/npm/bin/agent-control-plane.js +434 -12
  5. package/package.json +1 -1
  6. package/references/architecture.md +8 -0
  7. package/references/control-plane-map.md +6 -2
  8. package/references/release-checklist.md +0 -2
  9. package/tools/bin/agent-github-update-labels +6 -1
  10. package/tools/bin/agent-project-catch-up-issue-pr-links +118 -0
  11. package/tools/bin/agent-project-catch-up-merged-prs +77 -21
  12. package/tools/bin/agent-project-catch-up-scheduled-issue-retries +123 -0
  13. package/tools/bin/agent-project-cleanup-session +84 -0
  14. package/tools/bin/agent-project-heartbeat-loop +10 -3
  15. package/tools/bin/agent-project-reconcile-issue-session +45 -12
  16. package/tools/bin/agent-project-reconcile-pr-session +25 -0
  17. package/tools/bin/agent-project-run-claude-session +2 -2
  18. package/tools/bin/agent-project-run-codex-resilient +57 -2
  19. package/tools/bin/agent-project-run-kilo-session +346 -14
  20. package/tools/bin/agent-project-run-ollama-session +658 -0
  21. package/tools/bin/agent-project-run-openclaw-session +73 -25
  22. package/tools/bin/agent-project-run-opencode-session +354 -14
  23. package/tools/bin/agent-project-run-pi-session +479 -0
  24. package/tools/bin/agent-project-worker-status +38 -1
  25. package/tools/bin/flow-config-lib.sh +123 -3
  26. package/tools/bin/flow-resident-worker-lib.sh +1 -1
  27. package/tools/bin/flow-shell-lib.sh +7 -2
  28. package/tools/bin/heartbeat-recovery-preflight.sh +1 -0
  29. package/tools/bin/heartbeat-safe-auto.sh +105 -17
  30. package/tools/bin/install-project-launchd.sh +19 -2
  31. package/tools/bin/prepare-worktree.sh +4 -4
  32. package/tools/bin/profile-activate.sh +2 -2
  33. package/tools/bin/profile-adopt.sh +2 -2
  34. package/tools/bin/project-init.sh +1 -1
  35. package/tools/bin/project-runtimectl.sh +90 -7
  36. package/tools/bin/provider-cooldown-state.sh +14 -14
  37. package/tools/bin/render-flow-config.sh +30 -33
  38. package/tools/bin/run-codex-task.sh +53 -4
  39. package/tools/bin/scaffold-profile.sh +18 -3
  40. package/tools/bin/start-issue-worker.sh +4 -1
  41. package/tools/bin/start-pr-fix-worker.sh +33 -0
  42. package/tools/bin/start-pr-review-worker.sh +34 -0
  43. package/tools/bin/start-resident-issue-loop.sh +5 -4
  44. package/tools/bin/sync-agent-repo.sh +2 -2
  45. package/tools/bin/sync-dependency-baseline.sh +3 -3
  46. package/tools/bin/sync-shared-agent-home.sh +4 -1
  47. package/tools/dashboard/app.js +62 -0
  48. package/tools/dashboard/dashboard_snapshot.py +53 -4
  49. package/tools/dashboard/index.html +5 -1
  50. package/tools/dashboard/styles.css +97 -20
  51. package/tools/templates/pr-fix-template.md +4 -8
  52. package/tools/templates/pr-merge-repair-template.md +4 -8
  53. package/tools/templates/pr-review-template.md +2 -1
package/README.md CHANGED
@@ -8,139 +8,196 @@
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)
26
-
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.
12
+ `agent-control-plane` (ACP) keeps your coding agents running reliably without
13
+ you having to stare at them all day.
31
14
 
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`, `openclaw`, `ollama`, `pi`, `opencode`, and `kilo` 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.
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.
82
125
 
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
126
+ ### Backend Status
92
127
 
93
- ### Backend Snapshot
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
+ | `ollama` | Experimental | Working adapter with Node.js agentic loop. Runs any model served by a local Ollama instance. Output quality depends on model size — 7–9B models handle exploration well but struggle with complex multi-step tasks. |
134
+ | `pi` | Experimental | Working adapter using the [pi CLI](https://github.com/mariozechner/pi) in `--print --no-session` mode. Connects to any OpenRouter-compatible model. Useful as a lightweight alternative to openclaw for free-tier model testing. |
135
+ | `opencode` | Experimental | Working adapter for [Crush](https://github.com/charmbracelet/crush) (formerly opencode). Non-interactive `crush run` with full tool execution. |
136
+ | `kilo` | Experimental | Working adapter for [Kilo Code](https://github.com/Kilo-Org/kilocode). Non-interactive `kilo run --auto` with JSON event stream. |
137
+ | `gemini-cli` | Roadmap | Strong future candidate; not wired into ACP yet. |
138
+ | `nanoclaw` | Exploratory | Ecosystem reference for containerized and WSL2-friendly workflows. |
139
+ | `picoclaw` | Exploratory | Ecosystem reference for lightweight Linux and edge-style runtimes. |
94
140
 
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. |
141
+ If you are trying ACP on a real repo right now, start with `codex`, `claude`,
142
+ or `openclaw`. Use `ollama` to run local models — useful for research, offline
143
+ workflows, or comparing local model output against cloud backends without
144
+ incurring API costs. Use `pi` to experiment with OpenRouter-hosted free-tier
145
+ models via the pi CLI. The remaining entries show the direction of travel, not
146
+ finished support.
103
147
 
104
- ### Support Matrix
148
+ See [ROADMAP.md](./ROADMAP.md) for the fuller public roadmap.
105
149
 
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 |
150
+ ### Using Ollama (local models)
117
151
 
118
- 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.
152
+ To run ACP with a local model via [Ollama](https://ollama.com):
121
153
 
122
- See [ROADMAP.md](./ROADMAP.md) for the fuller public roadmap.
154
+ ```bash
155
+ # 1. Install Ollama and pull a model
156
+ ollama pull qwen3.5:9b
123
157
 
124
- ## See It Running
158
+ # 2. Init a profile with ollama backend
159
+ npx agent-control-plane@latest init \
160
+ --profile-id my-repo \
161
+ --repo-slug owner/my-repo \
162
+ --repo-root ~/src/my-repo \
163
+ --agent-root ~/.agent-runtime/projects/my-repo \
164
+ --worktree-root ~/src/my-repo-worktrees \
165
+ --coding-worker ollama
166
+
167
+ # 3. Configure the model in your profile YAML
168
+ # ~/.agent-runtime/control-plane/profiles/my-repo/control-plane.yaml
169
+ #
170
+ # execution:
171
+ # coding_worker: "ollama"
172
+ # ollama:
173
+ # model: "qwen3.5:9b"
174
+ # base_url: "http://localhost:11434"
175
+ # timeout_seconds: 900
176
+ ```
125
177
 
126
- The dashboard media below is rendered from a real local ACP demo fixture using
127
- `bash tools/bin/render-dashboard-demo-media.sh`.
178
+ The Ollama adapter runs a Node.js agentic loop that calls the Ollama API with
179
+ tool-use support. It handles both native tool-call responses and models that
180
+ return tool calls as JSON text in the content field.
128
181
 
129
- ![ACP dashboard demo screenshot](./assets/readme/dashboard-demo.png)
182
+ **Model guidance:** Models in the 7–14B range can explore codebases and run
183
+ commands, but may struggle with complex multi-step repair tasks. Larger models
184
+ (27B+) produce significantly better results if your hardware supports them.
185
+ Thinking mode is disabled by default (`think: false`) and context is set to
186
+ 32K tokens to balance speed and capability.
130
187
 
131
- <details>
132
- <summary>Animated dashboard walkthrough</summary>
188
+ ## See It Running
133
189
 
134
- ![ACP dashboard demo walkthrough](./assets/readme/dashboard-demo.gif)
190
+ The dashboard gives you a single view across all active profiles — running
191
+ sessions, recent history, provider cooldowns, scheduled issues, and queue state.
135
192
 
136
- </details>
193
+ ![ACP dashboard demo screenshot](./assets/readme/dashboard-demo.png)
137
194
 
138
195
  ## Architecture
139
196
 
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.
197
+ ACP is easiest to trust once you can see the moving pieces. The npm package
198
+ stages a shared runtime, installed profiles live outside the package, a shared
199
+ heartbeat loop decides what to launch, worker adapters do the coding work, and
200
+ reconcile scripts own the GitHub-facing outcome.
144
201
 
145
202
  ```mermaid
146
203
  flowchart LR
@@ -152,7 +209,7 @@ flowchart LR
152
209
  Supervisor --> Heartbeat["heartbeat-safe-auto.sh"]
153
210
  Heartbeat --> Scheduler["agent-project-heartbeat-loop"]
154
211
  Scheduler --> Workers["issue / PR worker launchers"]
155
- Workers --> Backends["codex / claude / openclaw"]
212
+ Workers --> Backends["codex / claude / openclaw / ollama / pi / opencode / kilo"]
156
213
  Backends --> Reconcile["reconcile issue / PR session"]
157
214
  Reconcile --> GitHub["issues / PRs / labels / comments"]
158
215
  Scheduler --> State["runs + state + history"]
@@ -202,32 +259,28 @@ Visual assets:
202
259
 
203
260
  ## Prerequisites
204
261
 
205
- ACP is a shell-first operator tool. Most install problems become much easier to
262
+ ACP is a shell-first operator tool. Most install problems become easier to
206
263
  debug once it is clear which dependency is responsible for which part of the
207
264
  system.
208
265
 
209
- | Tool | Required | Why ACP uses it | Notes |
266
+ | Tool | Required | Purpose | Notes |
210
267
  | --- | --- | --- | --- |
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`.
268
+ | Node.js `>= 18` | yes | Runs the npm package entrypoint and `npx` wrapper. | CI runs on Node `22`. Node `20` or `22` both work fine. |
269
+ | `bash` | yes | All runtime, profile, and worker orchestration scripts are Bash. | Your login shell can be `zsh`; `bash` just needs to be on `PATH`. |
270
+ | `git` | yes | Manages worktrees, checks branch state, and coordinates repo automation. | Required even if you interact only through GitHub issues and PRs. |
271
+ | `gh` | yes | GitHub CLI auth and API access for issues, PRs, labels, and metadata. | Run `gh auth login` before first use. |
272
+ | `jq` | yes | Parses JSON from `gh` output and worker metadata throughout. | Missing `jq` will break GitHub-heavy and runtime flows. |
273
+ | `python3` | yes | Powers the dashboard server, snapshot renderer, and config helpers. | Required for both dashboard use and several internal scripts. |
274
+ | `tmux` | yes | Runs long-lived worker sessions and captures their status. | Missing `tmux` means background worker workflows will not launch. |
275
+ | Worker CLI (backend-specific) | depends on backend | The coding agent for a profile. Supported: `codex`, `claude`, `openclaw` (production); `ollama`, `pi`, `opencode`, `kilo` (experimental). | Install and authenticate your chosen backend before starting background runs. |
276
+ | `ollama` | for `ollama` backend | Serves local models via OpenAI-compatible API at `http://localhost:11434`. | Install from [ollama.com](https://ollama.com) and pull a model (e.g. `ollama pull qwen3.5:9b`) before use. |
277
+ | `pi` CLI | for `pi` backend | Lightweight coding agent using OpenRouter-compatible APIs. | Install via `npm i -g @mariozechner/pi-coding-agent`. Set `OPENROUTER_API_KEY` before use. |
278
+ | `crush` (opencode) | for `opencode` backend | Go-based coding agent by Charm ([charmbracelet/crush](https://github.com/charmbracelet/crush)). | Install via `brew install charmbracelet/tap/crush`. |
279
+ | `kilo` CLI | for `kilo` backend | TypeScript coding agent ([kilocode/cli](https://github.com/Kilo-Org/kilocode)). | Install via `npm i -g @kilocode/cli`. |
280
+ | 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. |
281
+
282
+ Make sure `gh` and your chosen worker backend are both authenticated for the
283
+ same OS user before starting any background runtime.
231
284
 
232
285
  ## Install
233
286
 
@@ -247,127 +300,69 @@ agent-control-plane help
247
300
  The examples below use `npx agent-control-plane@latest ...`, but every command
248
301
  works the same way after a global install.
249
302
 
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.
303
+ ## First Run
254
304
 
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
305
+ ### Option A Guided setup (recommended)
259
306
 
260
- If you fork or republish this package under another maintainer account, update
261
- the sponsor links in `package.json` and `.github/FUNDING.yml`.
307
+ The fastest path is the interactive wizard:
262
308
 
263
- ### Sponsorship Policy
309
+ ```bash
310
+ npx agent-control-plane@latest setup
311
+ ```
264
312
 
265
- Sponsorships for this repository are maintainer-managed project support.
313
+ The wizard walks you through the full setup in one pass:
266
314
 
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
315
+ 1. Detects the current repo and suggests sane defaults
316
+ 2. Installs missing dependencies and authenticates `gh`
317
+ 3. Checks backend readiness (API keys for openclaw/pi, local server for ollama)
318
+ 4. Scaffolds the profile, runs health checks, starts the runtime
319
+ 5. Launches the monitoring dashboard in the background
320
+ 6. Offers to create recurring starter issues so ACP starts working immediately
274
321
 
275
- ## First Run
322
+ After the wizard finishes, your repo has a running agent, a live dashboard,
323
+ and a set of `agent-keep-open` issues that ACP will continuously work through.
276
324
 
277
- The shortest path is now a guided setup flow:
325
+ To preview exactly what it would do before touching anything:
278
326
 
279
327
  ```bash
280
- npx agent-control-plane@latest setup
328
+ npx agent-control-plane@latest setup --dry-run
281
329
  ```
282
330
 
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:
331
+ For non-interactive use (CI, scripted installs, GUI frontends):
325
332
 
326
333
  ```bash
327
- npx agent-control-plane@latest setup --dry-run
334
+ npx agent-control-plane@latest setup \
335
+ --non-interactive \
336
+ --install-missing-deps \
337
+ --start-runtime \
338
+ --start-dashboard \
339
+ --create-starter-issues \
340
+ --json
328
341
  ```
329
342
 
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.
333
-
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.
343
+ With `--json`, ACP emits a single structured object on `stdout` and sends
344
+ progress logs to `stderr`, which keeps parsing stable.
338
345
 
339
- If you want the explicit manual path, the happy path is still:
346
+ ### Option B Manual setup
340
347
 
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
348
+ If you prefer explicit control over each step:
346
349
 
347
- If that feels more like installing an operator tool than a toy demo, that is
348
- intentional.
349
-
350
- ### 1. Authenticate GitHub first
350
+ **1. Authenticate GitHub**
351
351
 
352
352
  ```bash
353
353
  gh auth login
354
354
  ```
355
355
 
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
356
+ **2. Install the packaged runtime**
361
357
 
362
358
  ```bash
363
359
  npx agent-control-plane@latest sync
364
360
  ```
365
361
 
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.
362
+ This stages the ACP runtime into `~/.agent-runtime/runtime-home`. Safe to
363
+ re-run after upgrades.
369
364
 
370
- ### 3. Create one profile for one repo manually
365
+ **3. Create a profile for your repo**
371
366
 
372
367
  ```bash
373
368
  npx agent-control-plane@latest init \
@@ -379,217 +374,196 @@ npx agent-control-plane@latest init \
379
374
  --coding-worker openclaw
380
375
  ```
381
376
 
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
377
+ | Flag | Purpose |
378
+ | --- | --- |
379
+ | `--profile-id` | Short name used in all ACP commands |
380
+ | `--repo-slug` | GitHub repo ACP should track |
381
+ | `--repo-root` | Path to your local checkout |
382
+ | `--agent-root` | Where ACP keeps per-project runtime state |
383
+ | `--worktree-root` | Where ACP places repo worktrees |
384
+ | `--coding-worker` | Backend to orchestrate (`codex`, `claude`, `openclaw`, `ollama`, `pi`, `opencode`, or `kilo`) |
394
385
 
395
- ### 4. Validate before you trust it
386
+ **4. Validate before trusting it**
396
387
 
397
388
  ```bash
398
389
  npx agent-control-plane@latest doctor
399
390
  npx agent-control-plane@latest profile-smoke --profile-id my-repo
400
391
  ```
401
392
 
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.
393
+ `doctor` checks installation health. `profile-smoke` gives the profile a fast
394
+ confidence pass before you turn on background loops.
405
395
 
406
- ### 5. Start the runtime and make sure it answers back
396
+ **5. Start the runtime**
407
397
 
408
398
  ```bash
409
399
  npx agent-control-plane@latest runtime start --profile-id my-repo
410
400
  npx agent-control-plane@latest runtime status --profile-id my-repo
411
401
  ```
412
402
 
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.
403
+ Once `runtime status` returns clean output, ACP is actively managing the
404
+ runtime for that profile. Per-profile state lives under `~/.agent-runtime`,
405
+ grouped and inspectable without digging through scattered temp files.
406
+
407
+ ## Starter Issues
416
408
 
417
- ## What Happens After `runtime start`
409
+ The setup wizard can create a set of recurring `agent-keep-open` issues on your
410
+ repo so ACP starts working immediately after installation. Each issue carries the
411
+ `agent-ready` and `agent-keep-open` labels, and ACP picks them up on its next
412
+ heartbeat cycle.
418
413
 
419
- ACP takes the profile you installed and runs it like an operator would:
414
+ Built-in templates:
420
415
 
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
416
+ | Issue | What ACP does |
417
+ | --- | --- |
418
+ | Code quality sweep | Fix lint warnings, type errors, and dead code |
419
+ | Test coverage improvement | Add tests for critical untested modules |
420
+ | Documentation refresh | Keep README and inline docs accurate |
421
+ | Dependency audit | Fix vulnerabilities and update safe patches |
422
+ | Refactoring sweep | Reduce complexity and duplication |
425
423
 
426
- That matters most when the setup grows beyond one-off experiments and becomes
427
- something you want to keep running.
424
+ You can also create your own recurring issues — just add the `agent-ready` and
425
+ `agent-keep-open` labels to any GitHub issue and ACP will work on it
426
+ continuously.
428
427
 
429
- ## Everyday Usage
428
+ To skip this step during setup, pass `--no-create-starter-issues`.
430
429
 
431
- Check runtime state:
430
+ ## Everyday Usage
432
431
 
433
432
  ```bash
433
+ # Check runtime state
434
434
  npx agent-control-plane@latest runtime status --profile-id my-repo
435
- ```
436
-
437
- Restart the runtime:
438
435
 
439
- ```bash
436
+ # Restart the runtime
440
437
  npx agent-control-plane@latest runtime restart --profile-id my-repo
441
- ```
442
438
 
443
- Stop the runtime:
444
-
445
- ```bash
439
+ # Stop the runtime
446
440
  npx agent-control-plane@latest runtime stop --profile-id my-repo
447
- ```
448
441
 
449
- Run smoke checks:
450
-
451
- ```bash
442
+ # Run smoke checks
452
443
  npx agent-control-plane@latest profile-smoke --profile-id my-repo
453
444
  npx agent-control-plane@latest smoke
454
445
  ```
455
446
 
456
- This is the rhythm ACP is built for: install once, inspect often, restart when
457
- needed, and keep the runtime understandable.
458
-
459
447
  ## Dashboard
460
448
 
461
- Run the dashboard locally:
462
-
463
449
  ```bash
464
450
  npx agent-control-plane@latest dashboard --host 127.0.0.1 --port 8765
465
451
  ```
466
452
 
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
453
+ Then open `http://127.0.0.1:8765`.
478
454
 
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.
488
-
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)
455
+ The dashboard shows all active profiles in one place: running sessions, recent
456
+ run history, provider cooldowns, scheduled issues, and queue state — without
457
+ having to dig through `tmux` panes or temp folders.
496
458
 
497
459
  ## macOS Autostart
498
460
 
499
- If you want a profile runtime to come back automatically after login or reboot:
461
+ Install a per-profile LaunchAgent so the runtime survives reboots:
500
462
 
501
463
  ```bash
502
464
  npx agent-control-plane@latest launchd-install --profile-id my-repo
503
465
  ```
504
466
 
505
- Remove that autostart entry:
467
+ Remove it:
506
468
 
507
469
  ```bash
508
470
  npx agent-control-plane@latest launchd-uninstall --profile-id my-repo
509
471
  ```
510
472
 
511
- These commands are macOS-only because they manage per-user `launchd` agents.
473
+ These commands are macOS-only and manage per-user `launchd` agents.
512
474
 
513
475
  ## Update
514
476
 
515
- Refresh the installed runtime after upgrading the package:
477
+ After upgrading the package, refresh the runtime and verify health:
516
478
 
517
479
  ```bash
518
480
  npx agent-control-plane@latest sync
519
481
  npx agent-control-plane@latest doctor
482
+ npx agent-control-plane@latest smoke # optional confidence check
520
483
  ```
521
484
 
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
485
  ## Remove a Profile
532
486
 
533
- Delete one installed profile and its ACP-managed runtime state:
487
+ Remove one profile and its ACP-managed runtime state:
534
488
 
535
489
  ```bash
536
490
  npx agent-control-plane@latest remove --profile-id my-repo
537
491
  ```
538
492
 
539
- Also remove ACP-managed repo and worktree paths:
493
+ Also remove ACP-managed repo and worktree directories:
540
494
 
541
495
  ```bash
542
496
  npx agent-control-plane@latest remove --profile-id my-repo --purge-paths
543
497
  ```
544
498
 
545
- Use `--purge-paths` only when you want ACP-managed directories removed too.
499
+ Use `--purge-paths` only when you want ACP-managed directories deleted too.
546
500
 
547
501
  ## Troubleshooting
548
502
 
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.
503
+ | Symptom | Fix |
504
+ | --- | --- |
505
+ | `profile not installed` | Run `init` first, then retry with the same `--profile-id`. |
506
+ | `explicit profile selection required` | Pass `--profile-id <id>` to `runtime`, `launchd-install`, `launchd-uninstall`, and `remove`. |
507
+ | `gh` cannot access the repo | Re-run `gh auth login` and confirm the repo slug in the profile is correct. |
508
+ | 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`. |
509
+ | Backend auth failures | Authenticate the backend before starting ACP. For `openclaw`/`pi`, set `OPENROUTER_API_KEY`. For `ollama`, ensure the server is running. For `opencode`/`kilo`, install and authenticate the CLI. |
510
+ | Node older than `18` | Upgrade Node first. ACP's minimum version is `18+`. |
511
+ | Missing `jq` | Install `jq`, then retry the failed command. |
512
+ | Runtime or source drift after an update | Run `sync`, then `doctor`. |
513
+ | Missing `tmux`, `gh`, or `python3` | Install the dependency, then retry `sync` or `runtime start`. |
514
+ | Missing `codex-quota` warning | This is optional. Core ACP and all non-Codex flows do not require it. |
574
515
 
575
516
  ## Command Summary
576
517
 
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. |
518
+ | Command | Purpose |
519
+ | --- | --- |
520
+ | `help` | Show the full CLI surface. Good first command on a new machine. |
521
+ | `version` | Print the running package version. |
522
+ | `setup [--dry-run] [--json]` | Guided bootstrap wizard. Detects repo, installs deps, scaffolds profile, starts runtime and dashboard, creates starter issues. `--dry-run` previews. `--json` emits structured output. |
523
+ | `sync` / `install` | Stage or refresh the packaged runtime into `~/.agent-runtime/runtime-home`. Run after install or upgrade. |
524
+ | `init ...` | Scaffold one repo profile manually. Requires `--profile-id`, `--repo-slug`, `--repo-root`, `--agent-root`, `--worktree-root`, `--coding-worker`. |
525
+ | `doctor` | Inspect runtime and source installation health. |
526
+ | `profile-smoke [--profile-id <id>]` | Validate one profile before trusting it with real work. |
527
+ | `runtime <status\|start\|stop\|restart> --profile-id <id>` | Operate one profile runtime. |
528
+ | `dashboard [--host] [--port]` | Start the local monitoring dashboard. Defaults: `127.0.0.1:8765`. |
529
+ | `launchd-install --profile-id <id>` | Install a per-profile LaunchAgent on macOS. |
530
+ | `launchd-uninstall --profile-id <id>` | Remove a per-profile LaunchAgent on macOS. |
531
+ | `remove --profile-id <id> [--purge-paths]` | Remove a profile and its ACP-managed state. `--purge-paths` also deletes managed directories. |
532
+ | `smoke` | Run the packaged smoke suite for the shared control plane. |
594
533
 
595
534
  For a lower-level script map, see [references/commands.md](./references/commands.md).
535
+
536
+ ## Support the Project
537
+
538
+ If ACP saves you time or keeps your agent workflows sane, you can support the
539
+ project via [GitHub Sponsors](https://github.com/sponsors/ducminhnguyen0319).
540
+
541
+ The open source core stays free. If you fork or republish this package under
542
+ another maintainer account, update the sponsor links in `package.json` and
543
+ `.github/FUNDING.yml`.
544
+
545
+ **Sponsorship policy:** Sponsorships are maintainer-managed project support.
546
+ They do not transfer ownership, copyright, patent rights, or control over the
547
+ project. Contributors are not automatically entitled to sponsorship payouts. The
548
+ maintainer may direct funds toward maintenance, infrastructure, contributor
549
+ rewards, or other project-related work at their discretion.
550
+
551
+ ## Contributing
552
+
553
+ Contributions are welcome. This repo uses a contributor agreement so the
554
+ project can stay easy to maintain and relicense if needed.
555
+
556
+ - Contribution guide: [CONTRIBUTING.md](./CONTRIBUTING.md)
557
+ - Contributor agreement: [CLA.md](./CLA.md)
558
+
559
+ ## Security
560
+
561
+ Do not open a public issue for vulnerabilities.
562
+
563
+ - Security policy: [SECURITY.md](./SECURITY.md)
564
+ - Code of conduct: [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)
565
+
566
+ ## Releases
567
+
568
+ - Release history: [CHANGELOG.md](./CHANGELOG.md)
569
+ - Maintainer checklist: [references/release-checklist.md](./references/release-checklist.md)