llm-orchestrator 1.0.0 → 1.0.1

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.
@@ -8,7 +8,7 @@
8
8
  {
9
9
  "name": "llm-orchestrator",
10
10
  "source": "./",
11
- "description": "Portable, cross-harness mandatory orchestration core capability resolution, dispatch contracts, cost-aware routing, gates and verification."
11
+ "description": "Write rtk /task onceit plans the work, shards it across parallel subagents, gates every phase and verifies before claiming done. Claude Code, Codex, OpenCode, Kilo."
12
12
  }
13
13
  ]
14
14
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "llm-orchestrator",
3
- "description": "Portable, cross-harness mandatory orchestration core capability resolution, dispatch contracts, cost-aware routing, gates and verification.",
4
- "version": "1.0.0",
3
+ "description": "Write rtk /task onceit plans the work, shards it across parallel subagents, gates every phase and verifies before claiming done. Claude Code, Codex, OpenCode, Kilo.",
4
+ "version": "1.0.1",
5
5
  "author": {
6
6
  "name": "Bogdan-Gabriel Torcescu",
7
7
  "url": "https://www.linkedin.com/in/bogdantorcescu/"
package/README.md CHANGED
@@ -1,36 +1,160 @@
1
1
  <!-- llm-orchestrator · created by Bogdan-Gabriel Torcescu · https://www.linkedin.com/in/bogdantorcescu/ · keep this credit when copying or deriving -->
2
2
  # llm-orchestrator
3
3
 
4
- A portable, cross-harness orchestration layer for coding agents. It discovers your project, resolves which MCPs/skills/workflows/CLI tools a task actually needs, enforces a small set of **mandatory** capabilities as real gates (not suggestions), and dispatches bounded, verifiable work to subagents — on Codex, Claude Code, OpenCode and Kilo alike.
4
+ You write one line. The agent plans the work, splits it across parallel subagents, writes their
5
+ prompts, runs them, reviews the result, proves it works, and stops. You are not in the loop for any
6
+ of the steps in between.
5
7
 
6
- ## Quick start
8
+ ```
9
+ /task "users can't reset their password from the mobile app"
10
+ ```
11
+
12
+ That is the whole interface. What happens after you press enter:
13
+
14
+ | | |
15
+ |---|---|
16
+ | **Classifies** | Bug, feature, incident, refactor, investigation, review, deploy, config or research — each has its own workflow, gates and evidence rules. |
17
+ | **Reads your project** | Languages, frameworks, test and build commands, CI, plus any rules you wrote in `AGENTS.md`. Your rules tighten the defaults; they never get silently dropped. |
18
+ | **Builds a flow** | Phases, parallel groups, dependencies — each shard with its own scope, owner, acceptance conditions and iteration budget. |
19
+ | **Writes the prompts** | Each subagent gets a dispatch contract: the facts that shard needs, the tools it may use, what it must produce. Not a copy of the whole conversation. |
20
+ | **Picks a model per shard** | Cheap model for the mechanical shard, a strong one with high thinking for the hard shard — decided per shard at dispatch time against live pricing, not once for the whole task. |
21
+ | **Runs them in parallel** | Clean sessions, disjoint file ownership, so two agents cannot fight over the same file. |
22
+ | **Gates every phase** | `G0` plan approved → `G1` evidence complete → `G2` hypothesis valid → `G3` a test that actually fails → `G4` suite green → `G5` independent review passed → `G6` verified on the real surfaces. A phase does not start until the gate before it resolves. |
23
+ | **Proves it, then stops** | Completion claims need evidence: fresh local test output, not a subagent's summary. Then it checkpoints what it learned and cleans up its branches and worktrees. |
7
24
 
8
- Three commands, from wherever you keep cloned tools:
25
+ You get back a result that has been reviewed and verified, plus a written trail of what was decided
26
+ and why. If something is missing — a tool it needs, an ambiguous requirement — it says so up front
27
+ and asks you once, batched, instead of guessing or quietly doing less.
28
+
29
+ The rest of the command set:
9
30
 
10
31
  ```sh
11
- git clone https://github.com/tbogdan/llm-orchestrator.git && cd llm-orchestrator
12
- node bin/llm-orchestrator.mjs init --project /path/to/app
13
- node bin/llm-orchestrator.mjs install --project /path/to/app --harness <harness> --skills-root <root> --apply
32
+ /task "describe the work" # the above, end to end
33
+ /task-plan "describe the work" # plan only — see the flow before anything runs
34
+ /task-status # where the active work stands
35
+ /task-verify # re-run verification against acceptance evidence
36
+ /task-cancel # stop cleanly
37
+ /incident-start ... # incident lifecycle: evidence -> fix -> verify -> close
14
38
  ```
15
39
 
16
- `init` is read-only: it proposes a `--harness` from what it finds in `/path/to/app` (or your home directory), shows the install plan it *would* run, and reports which of the [8 mandatory core tools](#the-8-mandatory-core-tools) are missing with the exact install command for each nothing is written unless you pass `--apply` (which only appends the `AGENTS.md` bindings template if that section is missing; it never touches the install itself). Everything else in this README explains the same commands in more detail, per harness.
40
+ Works on Claude Code, Codex, OpenCode and Kilo — the same flow, rendered into each one's native
41
+ commands and agents.
42
+
43
+ ## Quick start
17
44
 
45
+ Pick the line that matches your harness. Everything is a dry run until you pass `--apply`.
18
46
 
19
- ### Install as a Claude Code plugin
47
+ ### Claude Code — install as a plugin
20
48
 
21
- Claude Code users can skip the clone and install the orchestrator as a plugin:
49
+ No clone, no Node invocation. Type these two in any Claude Code session:
22
50
 
23
51
  ```
24
52
  /plugin marketplace add tbogdan/llm-orchestrator
25
53
  /plugin install llm-orchestrator@tbogdan
26
54
  ```
27
55
 
28
- That registers the `orchestrate-core` skill from this repository directly. Project bindings and the
29
- other harnesses still go through `llm-orchestrator init` / `install` as described below.
56
+ That registers the `orchestrate-core` skill straight from this repository, and `/plugin update
57
+ llm-orchestrator@tbogdan` keeps it current. The plugin ships the skill and its resources only — it
58
+ does not write project files. If you also want `.claude/commands/*.md`, the `.claude/agents/orchestrator.md`
59
+ agent and the `@AGENTS.md` line in `CLAUDE.md`, run the CLI install below with `--harness claude`.
60
+
61
+ ### Codex, OpenCode, Kilo — install from npm
62
+
63
+ Node 22+. `npx` fetches the published package, so there is nothing to clone:
64
+
65
+ ```sh
66
+ npx llm-orchestrator init --project /path/to/app
67
+ npx llm-orchestrator install --project /path/to/app --harness codex --apply
68
+ npx llm-orchestrator install --project /path/to/app --harness opencode --apply
69
+ npx llm-orchestrator install --project /path/to/app --harness kilo --apply
70
+ npx llm-orchestrator install --project /path/to/app --harness claude --apply
71
+ npx llm-orchestrator doctor --project /path/to/app --harness <harness>
72
+ ```
73
+
74
+ Prefer it on your PATH? `npm install -g llm-orchestrator`, then drop the `npx` prefix and call
75
+ `llm-orchestrator ...` directly.
76
+
77
+ ### From a clone — development, or pinning a commit
78
+
79
+ ```sh
80
+ git clone https://github.com/tbogdan/llm-orchestrator.git && cd llm-orchestrator
81
+ npm test
82
+ node bin/llm-orchestrator.mjs init --project /path/to/app
83
+ node bin/llm-orchestrator.mjs install --project /path/to/app --harness <harness> --apply
84
+ ```
85
+
86
+ ### Which one to use
87
+
88
+ | Harness | Fastest install | What it gives you | Reload |
89
+ | --- | --- | --- | --- |
90
+ | Claude Code | `/plugin install llm-orchestrator@tbogdan` | the `orchestrate-core` skill | new session |
91
+ | Claude Code (full) | `npx llm-orchestrator install --harness claude --apply` | skill + commands + agent + `CLAUDE.md` binding | `/reload` or new session |
92
+ | Codex | `npx llm-orchestrator install --harness codex --apply` | `AGENTS.md` span, skill, `~/.codex/prompts/*.md` | new Codex session |
93
+ | OpenCode | `npx llm-orchestrator install --harness opencode --apply` | `.opencode/command(s)/*.md`, skill | restart `opencode` |
94
+ | Kilo | `npx llm-orchestrator install --harness kilo --apply` | `.kilo/command(s)/*.md`, skill | restart Kilo |
95
+
96
+ `init` is read-only: it proposes a `--harness` from what it finds in `/path/to/app` (or your home directory), shows the install plan it *would* run, and reports which of the [8 mandatory core tools](#the-8-mandatory-core-tools) are missing with the exact install command for each — nothing is written unless you pass `--apply` (which only appends the `AGENTS.md` bindings template if that section is missing; it never touches the install itself). Everything else in this README explains the same commands in more detail, per harness.
97
+
98
+ ## Let an agent install it for you
99
+
100
+ Paste the block below into any capable coding agent (Claude Code, Codex, OpenCode, Kilo). It
101
+ installs the orchestrator itself without asking, then **stops and asks you once** before touching
102
+ anything else — installing third-party tools on someone's machine is not a decision an agent gets to
103
+ make silently.
104
+
105
+ ````text
106
+ Install llm-orchestrator in this project, then report back.
107
+
108
+ STEP 1 — install the orchestrator (do this without asking):
109
+ - On Claude Code: run `/plugin marketplace add tbogdan/llm-orchestrator` then
110
+ `/plugin install llm-orchestrator@tbogdan`.
111
+ - On any other harness, or if you also want the project files (commands, agent, AGENTS.md
112
+ bindings): run `npx llm-orchestrator install --project . --harness <harness> --apply`,
113
+ where <harness> is one of codex | claude | opencode | kilo.
114
+
115
+ STEP 2 — find the gaps (read-only, writes nothing):
116
+ Run `npx llm-orchestrator init --project .`
117
+ It prints each of the 8 mandatory core tools as [present] or [missing], with the exact
118
+ install command for each missing one, and whether AGENTS.md has the orchestration
119
+ bindings section.
120
+
121
+ STEP 3 — ASK ME BEFORE INSTALLING ANYTHING ELSE. Do not skip this step.
122
+ Use your harness's native question mechanism (AskUserQuestion on Claude Code,
123
+ request_user_input on Codex, question on OpenCode, ask_followup_question on Kilo).
124
+ Ask once, batched, and include in the question:
125
+ - the list of missing tools,
126
+ - the exact command you would run for each,
127
+ - that `brew install rtk` needs Homebrew and that the `/plugin` lines only work on
128
+ Claude Code,
129
+ - that declining is fine: the core still runs, in declared degraded mode.
130
+ Then install exactly the ones I approve, and nothing I did not approve.
131
+
132
+ STEP 4 — verify and report:
133
+ Run `npx llm-orchestrator doctor --project . --harness <harness>` and show me the output.
134
+ Tell me plainly which tools are still missing and which gates are therefore degraded.
135
+ Do not claim the install succeeded without showing the doctor output.
136
+ ````
137
+
138
+ The same shape works as a standing instruction in `AGENTS.md`/`CLAUDE.md` if you want new sessions
139
+ to self-install. Keep step 3 intact if you do — an agent that installs MCP servers and Homebrew
140
+ formulae unprompted is a worse problem than a missing gate.
30
141
 
31
142
  ## Why
32
143
 
33
- Every harness reinvents "which tool for which job," and every project's AGENTS.md/CLAUDE.md ends up repeating (and drifting from) the same rules. `llm-orchestrator` centralizes that decision in a small set of portable JSON registries plus a capability resolver, and renders the result into whatever native format your harness understands — commands, agents, skills, prompts.
144
+ Ask an agent to fix a bug and you usually get one long session: it reads a bit, guesses, edits,
145
+ declares victory, and you find out later that nothing was verified. Ask it to parallelize and you
146
+ spend your afternoon writing subagent prompts by hand, then merging the mess when two of them edited
147
+ the same file.
148
+
149
+ The work that makes the difference is the same every time — classify the task, gather evidence
150
+ before theorizing, write a failing test first, split what can run in parallel, keep agents out of
151
+ each other's files, review independently, verify before claiming done, record what was learned. It
152
+ is mechanical, and nobody wants to re-type it into every prompt.
153
+
154
+ `llm-orchestrator` makes that flow the default. It ships as a skill your agent must load before it
155
+ does anything, so the process runs whether or not you remembered to ask for it, and it is written
156
+ once in portable form instead of being copy-pasted and left to drift across every project's
157
+ `AGENTS.md` and every harness's config.
34
158
 
35
159
  ## How it works
36
160
 
@@ -63,6 +187,33 @@ These apply to every task, everywhere, regardless of harness (see `registries/co
63
187
 
64
188
  Four more gates are equally mandatory, at their own trigger rather than on every turn: `verification.checks` (verification-before-completion, before any completion claim), `skill.check` (before any action, check whether a skill already covers it), `tool.discovery` (search before declaring a tool absent), and `user.native_question` (every question to the user goes through the harness's native mechanism, batched into one question — `AskUserQuestion` on Claude Code, `request_user_input` / `update_plan` on Codex, `question` on OpenCode, `ask_followup_question` on Kilo; see `policies/questions.md`).
65
189
 
190
+ #### Installing the core tools
191
+
192
+ `llm-orchestrator init` reports which of these are missing and prints the matching command. The
193
+ routes below are the ones it prints — each was checked against the published source, because three
194
+ of them are not what the obvious guess would be: `rtk` on crates.io is an unrelated "Rust Type Kit",
195
+ and `mempalace-mcp` and `superpowers` are binaries their plugin ships rather than npm packages you
196
+ can `npx`.
197
+
198
+ | Capability | Tool | Install |
199
+ |---|---|---|
200
+ | `orchestration.bootstrap`, `skill.check`, `verification.checks` | using-superpowers | `/plugin marketplace add anthropics/claude-plugins-official` then `/plugin install superpowers@claude-plugins-official` |
201
+ | `memory.recall`, `memory.checkpoint` | mempalace | `/plugin marketplace add MemPalace/mempalace` then `/plugin install mempalace@mempalace` |
202
+ | `reasoning.checkpoints` | sequential-thinking | `claude mcp add sequential-thinking -- npx -y @modelcontextprotocol/server-sequential-thinking` |
203
+ | `communication.concise` | caveman | `/plugin marketplace add JuliusBrussee/caveman` then `/plugin install caveman@caveman` |
204
+ | `shell.rtk` | rtk | `brew install rtk` (Homebrew core; **not** `cargo install rtk`) |
205
+ | `docs.current` | context7 | `claude mcp add context7 -- npx -y @upstash/context7-mcp` |
206
+ | `research.retrieve` | exa | `claude mcp add exa -- npx -y exa-mcp-server` |
207
+ | `tool.discovery` | harness-native tool search | built in, nothing to install |
208
+
209
+ The `/plugin ...` lines are Claude Code commands, typed in a session. The `claude mcp add ...` lines
210
+ are shell commands; on Codex, OpenCode or Kilo, register the same MCP server through that harness's
211
+ own config instead — the server package and arguments are identical.
212
+
213
+ Every one of these is optional in the sense that the core still runs without it — but it then runs
214
+ in **declared degraded mode**, and every plan and report says so. That is the design, not a
215
+ workaround.
216
+
66
217
  The eight rows above are `registries/core-profile.json` orders 1–8, in that order. The same eight, in the same order, appear in `SKILL.md`, `policies/capabilities.md` and the `task` command checklist, and `lib/first-run.mjs` checks exactly these for presence — `tests/coherence.test.mjs` fails if any of those six lists drifts.
67
218
 
68
219
  ### Registries
@@ -77,15 +228,20 @@ Project-specific bindings live in the consuming project's `AGENTS.md`, under `##
77
228
 
78
229
  ## Install for your IDE
79
230
 
80
- Dry runs by default — inspect conflicts, then repeat with `--apply`. Existing user-owned files are never silently overwritten. `node bin/llm-orchestrator.mjs install ...` is the entry point; `node bin/install.mjs ...` (same options) still works underneath it.
231
+ Dry runs by default — inspect conflicts, then repeat with `--apply`. Existing user-owned files are never silently overwritten.
81
232
 
82
233
  ```sh
83
- node bin/llm-orchestrator.mjs install --project /path/to/app --harness codex
84
- node bin/llm-orchestrator.mjs install --project /path/to/app --harness claude-code
85
- node bin/llm-orchestrator.mjs install --project /path/to/app --harness opencode
86
- node bin/llm-orchestrator.mjs install --project /path/to/app --harness kilo
234
+ npx llm-orchestrator install --project /path/to/app --harness codex
235
+ npx llm-orchestrator install --project /path/to/app --harness claude-code
236
+ npx llm-orchestrator install --project /path/to/app --harness opencode
237
+ npx llm-orchestrator install --project /path/to/app --harness kilo
87
238
  ```
88
239
 
240
+ `npx llm-orchestrator` (or the bare `llm-orchestrator` after `npm install -g llm-orchestrator`) is
241
+ the entry point. From a clone the same commands are `node bin/llm-orchestrator.mjs ...`; every
242
+ example below spells the clone form, and the npm form is identical minus the `node bin/…` prefix.
243
+ `node bin/install.mjs ...` (same options) still works underneath it.
244
+
89
245
  `--skills-root` is optional: it defaults per harness (`codex` → `~/.agents/skills`, `claude` → `~/.claude/skills`, `opencode` → `~/.config/opencode/skills`, `kilo` → `~/.kilo/skills`), so the four commands above are already complete — pass `--skills-root <dir>` only to override that default. `claude`, `claude-code`, and `claude code` resolve to the same harness.
90
246
 
91
247
  `--package-root <dir>` (where the package's own files are read from) and `--state-root <dir>` (where the installation manifest is kept; defaults to `$XDG_STATE_HOME/portable-orchestrator` or `~/.local/state/portable-orchestrator`) exist on `install`, `uninstall` and `init` for testing and for non-standard layouts — you normally leave both alone.
@@ -96,7 +252,11 @@ Multiple harnesses may share one explicitly enabled skill root using a comma-sep
96
252
 
97
253
  Same five steps for every harness; only the skills root and the reload differ.
98
254
 
99
- 1. **Get the package** (Node 22+):
255
+ 1. **Get the package** (Node 22+) — either straight from npm:
256
+ ```sh
257
+ npx llm-orchestrator --help # or: npm install -g llm-orchestrator
258
+ ```
259
+ or from a clone, when you want to read or pin the source:
100
260
  ```sh
101
261
  git clone https://github.com/tbogdan/llm-orchestrator.git
102
262
  cd llm-orchestrator && npm test
@@ -233,25 +393,26 @@ Prices and measured costs are dated evidence, not live tariffs; refresh `models/
233
393
 
234
394
  ## Updating
235
395
 
396
+ From npm — `npx` always resolves the latest published version, so there is nothing to pull:
397
+
398
+ ```sh
399
+ npx llm-orchestrator@latest install --project /path/to/app --harness <harness> --apply
400
+ ```
401
+
402
+ From a clone:
403
+
236
404
  ```sh
237
405
  git -C llm-orchestrator pull
238
406
  node bin/llm-orchestrator.mjs install --project /path/to/app --harness <harness> --apply
239
407
  ```
240
408
 
241
- Re-running `install --apply` after a `git pull` is the entire update procedure it is the same idempotent apply as a fresh install. Files the package generated and you haven't touched are refreshed to the new version; a project file you hand-edited (an `AGENTS.md` bindings section, a command you customized) is reported as a **conflict** and left untouched — nothing is overwritten silently. Resolve a reported conflict by reviewing the diff yourself and either keeping your edit or deleting the file so the next apply can regenerate it.
409
+ In Claude Code, the plugin updates on its own terms: `/plugin update llm-orchestrator@tbogdan`.
242
410
 
243
- ## Usage once installed
411
+ Re-running `install --apply` after an update is the entire update procedure — it is the same idempotent apply as a fresh install. Files the package generated and you haven't touched are refreshed to the new version; a project file you hand-edited (an `AGENTS.md` bindings section, a command you customized) is reported as a **conflict** and left untouched — nothing is overwritten silently. Resolve a reported conflict by reviewing the diff yourself and either keeping your edit or deleting the file so the next apply can regenerate it.
244
412
 
245
- ```sh
246
- /task "describe the work" # plan + dispatch through the resolved capability plan
247
- /task-plan "describe the work" # plan only, no dispatch
248
- /task-status # report progress/gaps on active work
249
- /task-verify # run the verification phase against acceptance evidence
250
- /task-cancel # stop active task work cleanly
251
- /incident-start ... # incident lifecycle: start -> evidence -> fix -> verify -> close
252
- ```
413
+ ## Usage once installed
253
414
 
254
- Exact command names and argument shapes are rendered per harness by `adapters/commands.mjs`; run `--help` on any installed command for the harness-native form.
415
+ The command set is listed at the top of this README. Exact command names and argument shapes are rendered per harness by `adapters/commands.mjs`; run `--help` on any installed command for the harness-native form.
255
416
 
256
417
  ## Development
257
418
 
package/lib/first-run.mjs CHANGED
@@ -138,6 +138,15 @@ async function rtkOnPath() {
138
138
  }
139
139
 
140
140
  /** The 8 mandatory core tools (registries/core-profile.json orders 1-8), checked read-only, presence only. */
141
+ /**
142
+ * Install routes verified against the published sources, not guessed: `rtk` on crates.io is an
143
+ * unrelated tool of the same name, `mempalace-mcp` and `superpowers` are binaries a plugin
144
+ * provides rather than npm packages you can `npx`, so all three go through their marketplace.
145
+ */
146
+ const SUPERPOWERS_INSTALL = '/plugin marketplace add anthropics/claude-plugins-official && /plugin install superpowers@claude-plugins-official';
147
+ const MEMPALACE_INSTALL = '/plugin marketplace add MemPalace/mempalace && /plugin install mempalace@mempalace';
148
+ const CAVEMAN_INSTALL = '/plugin marketplace add JuliusBrussee/caveman && /plugin install caveman@caveman';
149
+
141
150
  export async function checkMandatoryTools(project) {
142
151
  const [superpowers, mempalace, sequentialThinking, caveman, rtk, context7, exa] = await Promise.all([
143
152
  anySkillDirNamed(project, 'using-superpowers').then((v) => v || anySkillDirNamed(project, 'superpowers')).then((v) => v || anyPluginDirNamed('superpowers')),
@@ -149,15 +158,15 @@ export async function checkMandatoryTools(project) {
149
158
  anyConfigMentions(project, ['exa-mcp-server', '"exa"', 'exa-search']),
150
159
  ]);
151
160
  return [
152
- { id: 'orchestration.bootstrap', tool: 'using-superpowers', present: superpowers, install_hint: 'npx -y superpowers install' },
153
- { id: 'memory.recall', tool: 'mempalace', present: mempalace, install_hint: 'claude mcp add mempalace -- npx -y mempalace-mcp' },
154
- { id: 'memory.checkpoint', tool: 'mempalace', present: mempalace, install_hint: 'claude mcp add mempalace -- npx -y mempalace-mcp' },
161
+ { id: 'orchestration.bootstrap', tool: 'using-superpowers', present: superpowers, install_hint: SUPERPOWERS_INSTALL },
162
+ { id: 'memory.recall', tool: 'mempalace', present: mempalace, install_hint: MEMPALACE_INSTALL },
163
+ { id: 'memory.checkpoint', tool: 'mempalace', present: mempalace, install_hint: MEMPALACE_INSTALL },
155
164
  { id: 'reasoning.checkpoints', tool: 'sequential-thinking', present: sequentialThinking, install_hint: 'claude mcp add sequential-thinking -- npx -y @modelcontextprotocol/server-sequential-thinking' },
156
- { id: 'communication.concise', tool: 'caveman', present: caveman, install_hint: 'llm-orchestrator install --with-skill caveman' },
157
- { id: 'shell.rtk', tool: 'rtk', present: rtk, install_hint: 'cargo install rtk' },
165
+ { id: 'communication.concise', tool: 'caveman', present: caveman, install_hint: CAVEMAN_INSTALL },
166
+ { id: 'shell.rtk', tool: 'rtk', present: rtk, install_hint: 'brew install rtk' },
158
167
  { id: 'docs.current', tool: 'context7', present: context7, install_hint: 'claude mcp add context7 -- npx -y @upstash/context7-mcp' },
159
168
  { id: 'research.retrieve', tool: 'exa-search', present: exa, install_hint: 'claude mcp add exa -- npx -y exa-mcp-server' },
160
- { id: 'skill.check', tool: 'using-superpowers', present: superpowers, install_hint: 'npx -y superpowers install' },
169
+ { id: 'skill.check', tool: 'using-superpowers', present: superpowers, install_hint: SUPERPOWERS_INSTALL },
161
170
  { id: 'tool.discovery', tool: 'harness-native tool search', present: true, install_hint: null },
162
171
  ];
163
172
  }
@@ -201,6 +210,16 @@ async function agentsMdHasBindings(project) {
201
210
  * First-run wizard: no prompts, everything read-only unless --apply appends the
202
211
  * bindings template. Returns a plain report object; the CLI renders it to text.
203
212
  */
213
+ /**
214
+ * How to spell a follow-up command for the way this process was started: `node bin/…` from a
215
+ * clone, the bare bin name when installed from npm (global or `npx`).
216
+ */
217
+ export function cliInvocation(argv = process.argv) {
218
+ const script = argv[1] ? resolve(argv[1]) : '';
219
+ const fromClone = script === resolve(process.cwd(), 'bin', 'llm-orchestrator.mjs');
220
+ return fromClone ? 'node bin/llm-orchestrator.mjs' : 'llm-orchestrator';
221
+ }
222
+
204
223
  export async function runInit({ project, harnesses, skillsRoot, apply = false, packageRoot, stateRoot, codexPromptsRoot, withAgents = false }) {
205
224
  const root = resolve(project);
206
225
  const requestedHarnesses = harnesses && harnesses.length > 0 ? harnesses.map(normalizeHarness) : null;
@@ -246,10 +265,11 @@ export async function runInit({ project, harnesses, skillsRoot, apply = false, p
246
265
  ? `Multiple harnesses share ${effectiveSkillsRoot}; point every selected IDE at this root (see README "Several harnesses at once").`
247
266
  : null;
248
267
 
268
+ const cli = cliInvocation();
249
269
  const nextCommands = [
250
- `node bin/llm-orchestrator.mjs install --project ${root} --harness ${effectiveHarnesses.join(',')} --skills-root ${effectiveSkillsRoot}`,
251
- `node bin/llm-orchestrator.mjs install --project ${root} --harness ${effectiveHarnesses.join(',')} --skills-root ${effectiveSkillsRoot} --apply`,
252
- `node bin/llm-orchestrator.mjs doctor --project ${root} --harness ${effectiveHarnesses[0]}`,
270
+ `${cli} install --project ${root} --harness ${effectiveHarnesses.join(',')} --skills-root ${effectiveSkillsRoot}`,
271
+ `${cli} install --project ${root} --harness ${effectiveHarnesses.join(',')} --skills-root ${effectiveSkillsRoot} --apply`,
272
+ `${cli} doctor --project ${root} --harness ${effectiveHarnesses[0]}`,
253
273
  ];
254
274
 
255
275
  return {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "llm-orchestrator",
3
- "version": "1.0.0",
4
- "description": "Portable, cross-harness mandatory orchestration core (Codex, Claude Code, OpenCode, Kilo) capability resolution, dispatch contracts, and harness adapters.",
3
+ "version": "1.0.1",
4
+ "description": "Write rtk /task once it plans the work, shards it across parallel subagents, gates every phase and verifies before claiming done. Claude Code, Codex, OpenCode, Kilo.",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=22"
@@ -14,7 +14,7 @@
14
14
  "display_name": "MemPalace",
15
15
  "recommendation_kind": "product",
16
16
  "installable": true,
17
- "install": "claude mcp add mempalace -- npx -y mempalace-mcp"
17
+ "install": "/plugin marketplace add MemPalace/mempalace && /plugin install mempalace@mempalace"
18
18
  },
19
19
  {
20
20
  "id": "native-memory",
@@ -91,7 +91,7 @@
91
91
  "display_name": "Verification before completion",
92
92
  "recommendation_kind": "product",
93
93
  "installable": true,
94
- "install": "llm-orchestrator install --with-skill verification-before-completion"
94
+ "install": "/plugin marketplace add anthropics/claude-plugins-official && /plugin install superpowers@claude-plugins-official"
95
95
  },
96
96
  {
97
97
  "id": "production-telemetry-collector",
@@ -269,7 +269,7 @@
269
269
  "display_name": "Caveman",
270
270
  "recommendation_kind": "product",
271
271
  "installable": true,
272
- "install": "llm-orchestrator install --with-skill caveman"
272
+ "install": "/plugin marketplace add JuliusBrussee/caveman && /plugin install caveman@caveman"
273
273
  },
274
274
  {
275
275
  "id": "native-concise-policy",
@@ -301,7 +301,7 @@
301
301
  "display_name": "Superpowers",
302
302
  "recommendation_kind": "product",
303
303
  "installable": true,
304
- "install": "npx -y superpowers install"
304
+ "install": "/plugin marketplace add anthropics/claude-plugins-official && /plugin install superpowers@claude-plugins-official"
305
305
  },
306
306
  {
307
307
  "id": "native-workflow-selection",
@@ -329,7 +329,7 @@
329
329
  "display_name": "RTK",
330
330
  "recommendation_kind": "product",
331
331
  "installable": true,
332
- "install": "cargo install rtk"
332
+ "install": "brew install rtk"
333
333
  },
334
334
  {
335
335
  "id": "native-shell-wrapper",