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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +190 -29
- package/lib/first-run.mjs +29 -9
- package/package.json +2 -2
- package/registries/preferred-tools.json +5 -5
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{
|
|
9
9
|
"name": "llm-orchestrator",
|
|
10
10
|
"source": "./",
|
|
11
|
-
"description": "
|
|
11
|
+
"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."
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-orchestrator",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "1.0.
|
|
3
|
+
"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.",
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
47
|
+
### Claude Code — install as a plugin
|
|
20
48
|
|
|
21
|
-
|
|
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
|
|
29
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
409
|
+
In Claude Code, the plugin updates on its own terms: `/plugin update llm-orchestrator@tbogdan`.
|
|
242
410
|
|
|
243
|
-
|
|
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
|
-
|
|
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:
|
|
153
|
-
{ id: 'memory.recall', tool: 'mempalace', present: mempalace, install_hint:
|
|
154
|
-
{ id: 'memory.checkpoint', tool: 'mempalace', present: mempalace, install_hint:
|
|
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:
|
|
157
|
-
{ id: 'shell.rtk', tool: 'rtk', present: rtk, install_hint: '
|
|
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:
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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.
|
|
4
|
-
"description": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
332
|
+
"install": "brew install rtk"
|
|
333
333
|
},
|
|
334
334
|
{
|
|
335
335
|
"id": "native-shell-wrapper",
|