@caseyharalson/orrery 0.10.0 → 0.12.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.
- package/HELP.md +429 -0
- package/README.md +10 -7
- package/agent/skills/discovery/SKILL.md +13 -5
- package/agent/skills/orrery-execute/SKILL.md +1 -1
- package/agent/skills/refine-plan/SKILL.md +3 -2
- package/agent/skills/simulate-plan/SKILL.md +3 -2
- package/lib/cli/commands/manual.js +22 -0
- package/lib/cli/commands/orchestrate.js +52 -0
- package/lib/cli/commands/plans-dir.js +10 -0
- package/lib/cli/commands/resume.js +96 -33
- package/lib/cli/commands/status.js +13 -0
- package/lib/cli/index.js +4 -0
- package/lib/orchestration/index.js +220 -144
- package/lib/utils/git.js +9 -2
- package/lib/utils/lock.js +170 -0
- package/lib/utils/paths.js +29 -2
- package/package.json +4 -2
package/HELP.md
ADDED
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
# Orrery CLI Reference
|
|
2
|
+
|
|
3
|
+
> Run `orrery manual` to display this document.
|
|
4
|
+
|
|
5
|
+
Orrery is a workflow planning and orchestration CLI for AI agents. It transforms
|
|
6
|
+
high-level development goals into executable, step-by-step plans that agents
|
|
7
|
+
follow autonomously on isolated branches.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Commands
|
|
12
|
+
|
|
13
|
+
### Setup
|
|
14
|
+
|
|
15
|
+
#### `orrery init`
|
|
16
|
+
|
|
17
|
+
Initialize Orrery: install skills to detected agents.
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
Options:
|
|
21
|
+
--agent <agent> Target agent (claude|codex|gemini|all); defaults to auto-detect
|
|
22
|
+
--force Overwrite existing skills
|
|
23
|
+
--dry-run Show what would be copied without writing files
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
orrery init
|
|
30
|
+
orrery init --agent claude --force
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
#### `orrery install-skills`
|
|
34
|
+
|
|
35
|
+
Install orrery skills for supported agents. Called automatically by `orrery init`.
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
Options:
|
|
39
|
+
--agent <agent> Target agent (claude|codex|gemini|all); defaults to auto-detect
|
|
40
|
+
--force Overwrite existing skills
|
|
41
|
+
--dry-run Show what would be copied without writing files
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
#### `orrery install-devcontainer`
|
|
45
|
+
|
|
46
|
+
Copy the orrery devcontainer to a target directory for sandboxed execution.
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
Arguments:
|
|
50
|
+
[target] Target directory (default: current directory)
|
|
51
|
+
|
|
52
|
+
Options:
|
|
53
|
+
--force Overwrite existing devcontainer
|
|
54
|
+
--dry-run Show what would be copied without writing files
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Example:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
orrery install-devcontainer
|
|
61
|
+
orrery install-devcontainer /path/to/project --force
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Execution
|
|
65
|
+
|
|
66
|
+
#### `orrery orchestrate` (alias: `exec`)
|
|
67
|
+
|
|
68
|
+
Run plan orchestration for the current project. Loads plans from
|
|
69
|
+
`.agent-work/plans/`, resolves dependencies, and invokes agents to execute
|
|
70
|
+
each step.
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
Options:
|
|
74
|
+
--plan <file> Process only a specific plan file
|
|
75
|
+
--dry-run Show what would be executed without running agents
|
|
76
|
+
--verbose Show detailed agent output
|
|
77
|
+
--resume Resume orchestration on the current work branch
|
|
78
|
+
--review Enable code review loop after each step
|
|
79
|
+
--parallel Enable parallel execution with git worktrees for isolation
|
|
80
|
+
--background Run orchestration as a detached background process
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Only one `exec`/`resume` can run at a time per project. A lock file
|
|
84
|
+
(`exec.lock`) prevents concurrent runs and is automatically cleaned up.
|
|
85
|
+
|
|
86
|
+
Example:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
orrery exec
|
|
90
|
+
orrery exec --plan my-feature.yaml --review
|
|
91
|
+
orrery exec --parallel --verbose
|
|
92
|
+
orrery exec --background
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### `orrery resume`
|
|
96
|
+
|
|
97
|
+
Unblock steps and resume orchestration. Auto-detects the plan for the current
|
|
98
|
+
work branch, resets blocked steps to pending, commits, and resumes.
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
Options:
|
|
102
|
+
--plan <file> Resume a specific plan file (skips branch auto-detection)
|
|
103
|
+
--step <id> Unblock a specific step before resuming
|
|
104
|
+
--all Unblock all blocked steps (default behavior)
|
|
105
|
+
--dry-run Preview what would be unblocked without making changes
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
When `--plan` is provided, the plan's `work_branch` must match the current
|
|
109
|
+
branch. If the plan hasn't been dispatched yet (no `work_branch`), use
|
|
110
|
+
`orrery exec --plan` first.
|
|
111
|
+
|
|
112
|
+
Example:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
orrery resume
|
|
116
|
+
orrery resume --plan my-feature.yaml
|
|
117
|
+
orrery resume --step step-2
|
|
118
|
+
orrery resume --dry-run
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Inspection
|
|
122
|
+
|
|
123
|
+
#### `orrery status`
|
|
124
|
+
|
|
125
|
+
Show orchestration status for plans in the current project. Auto-detects the
|
|
126
|
+
plan when on a work branch. Also shows whether an orchestration process is
|
|
127
|
+
currently running (via lock file detection) or if a stale lock exists.
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
Options:
|
|
131
|
+
--plan <file> Show detailed status for a specific plan
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Example:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
orrery status
|
|
138
|
+
orrery status --plan my-feature.yaml
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### `orrery validate-plan`
|
|
142
|
+
|
|
143
|
+
Validate a plan YAML file and normalize its formatting. Also runs as a hook
|
|
144
|
+
when agents write to plan files.
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
Arguments:
|
|
148
|
+
[file] Path to the plan file (or reads from stdin for hook mode)
|
|
149
|
+
|
|
150
|
+
Options:
|
|
151
|
+
--no-resave Skip re-saving the file after validation
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Example:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
orrery validate-plan .agent-work/plans/my-plan.yaml
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
#### `orrery ingest-plan`
|
|
161
|
+
|
|
162
|
+
Validate and import an externally created plan file into the plans directory.
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
Arguments:
|
|
166
|
+
<file> Path to the plan file to ingest (required)
|
|
167
|
+
|
|
168
|
+
Options:
|
|
169
|
+
--force Overwrite existing plan file if it exists
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Example:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
orrery ingest-plan ~/plans/my-feature.yaml
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Information
|
|
179
|
+
|
|
180
|
+
#### `orrery manual`
|
|
181
|
+
|
|
182
|
+
Show this full CLI reference manual.
|
|
183
|
+
|
|
184
|
+
#### `orrery help [command]`
|
|
185
|
+
|
|
186
|
+
Display help for a specific command or the general command list.
|
|
187
|
+
|
|
188
|
+
#### `orrery --version` / `orrery -v`
|
|
189
|
+
|
|
190
|
+
Show the installed version.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Common Workflows
|
|
195
|
+
|
|
196
|
+
### First-Time Setup
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
npm install -g @caseyharalson/orrery
|
|
200
|
+
cd your-project
|
|
201
|
+
orrery init
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Plan Creation and Execution
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# 1. Use your agent with the discovery skill to create a plan
|
|
208
|
+
/discovery I want to add user authentication
|
|
209
|
+
|
|
210
|
+
# 2. (Optional) Refine or simulate the plan
|
|
211
|
+
/refine-plan my-plan
|
|
212
|
+
/simulate-plan my-plan
|
|
213
|
+
|
|
214
|
+
# 3. Execute the plan
|
|
215
|
+
orrery exec
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Handling Blocked Steps
|
|
219
|
+
|
|
220
|
+
When the orchestrator encounters an issue it cannot resolve, it marks the step
|
|
221
|
+
as blocked and pauses on the work branch.
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Check what's blocked
|
|
225
|
+
orrery status
|
|
226
|
+
|
|
227
|
+
# Fix the underlying issue, then resume
|
|
228
|
+
orrery resume
|
|
229
|
+
|
|
230
|
+
# Or unblock a specific step
|
|
231
|
+
orrery resume --step step-2
|
|
232
|
+
|
|
233
|
+
# Preview before resuming
|
|
234
|
+
orrery resume --dry-run
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### External Plan Import
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Create a plan following the schema (see Plan File Format below)
|
|
241
|
+
# Then validate and import it
|
|
242
|
+
orrery ingest-plan path/to/your-plan.yaml
|
|
243
|
+
|
|
244
|
+
# Optionally simulate it
|
|
245
|
+
/simulate-plan your-plan
|
|
246
|
+
|
|
247
|
+
# Execute
|
|
248
|
+
orrery exec
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Review Loop
|
|
252
|
+
|
|
253
|
+
Enable iterative code review after each step:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
orrery exec --review
|
|
257
|
+
# Or via environment variable
|
|
258
|
+
export ORRERY_REVIEW_ENABLED=true
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
The review agent inspects changes after each step. If issues are found, an edit
|
|
262
|
+
agent applies fixes and verification re-runs, repeating until approval or the
|
|
263
|
+
max iteration limit is reached (default: 3).
|
|
264
|
+
|
|
265
|
+
### Background Execution
|
|
266
|
+
|
|
267
|
+
Run orchestration as a detached background process:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
orrery exec --background
|
|
271
|
+
orrery exec --plan my-feature.yaml --background
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
The process runs detached and logs output to `<work-dir>/exec.log`. Use
|
|
275
|
+
`orrery status` to check progress. A lock file prevents starting a second
|
|
276
|
+
execution while one is already running.
|
|
277
|
+
|
|
278
|
+
### Parallel Execution
|
|
279
|
+
|
|
280
|
+
Run independent steps concurrently using git worktrees for isolation:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
orrery exec --parallel
|
|
284
|
+
# Or via environment variable
|
|
285
|
+
export ORRERY_PARALLEL_ENABLED=true
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Steps marked `parallel: true` with no blocking dependencies run concurrently.
|
|
289
|
+
Each agent gets its own worktree. After completion, commits are cherry-picked
|
|
290
|
+
back to the main work branch. Control concurrency with `ORRERY_PARALLEL_MAX`.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Plan File Format
|
|
295
|
+
|
|
296
|
+
Plans are YAML files stored in `.agent-work/plans/`. For the full schema and
|
|
297
|
+
detailed guidance on building plans, see the
|
|
298
|
+
[plan reference](docs/externally-building-a-plan-reference.md).
|
|
299
|
+
|
|
300
|
+
### Metadata Fields
|
|
301
|
+
|
|
302
|
+
| Field | Required | Description |
|
|
303
|
+
| :------------ | :------- | :----------------------------------------------- |
|
|
304
|
+
| `created_at` | Yes | ISO 8601 timestamp |
|
|
305
|
+
| `created_by` | Yes | Agent or user that created the plan |
|
|
306
|
+
| `version` | No | Plan version |
|
|
307
|
+
| `source_idea` | No | Original idea or request |
|
|
308
|
+
| `outcomes` | Yes | Array of user-visible results this plan delivers |
|
|
309
|
+
| `notes` | No | General notes for executing agents |
|
|
310
|
+
|
|
311
|
+
### Step Fields
|
|
312
|
+
|
|
313
|
+
| Field | Required | Description |
|
|
314
|
+
| :-------------- | :------- | :-------------------------------------------------------- |
|
|
315
|
+
| `id` | Yes | Unique step identifier |
|
|
316
|
+
| `description` | Yes | What this step accomplishes |
|
|
317
|
+
| `status` | No | `pending` (default), `in_progress`, `complete`, `blocked` |
|
|
318
|
+
| `deps` | No | Array of step IDs this step depends on |
|
|
319
|
+
| `parallel` | No | Whether this step can run in parallel (default: false) |
|
|
320
|
+
| `context` | Yes | Background info needed to execute the step |
|
|
321
|
+
| `requirements` | Yes | Specific requirements for this step |
|
|
322
|
+
| `criteria` | Yes | Acceptance criteria for completion |
|
|
323
|
+
| `files` | No | Files this step will create or modify |
|
|
324
|
+
| `context_files` | No | Files to read for context (not modified) |
|
|
325
|
+
| `commands` | No | Commands to execute (build, test, etc.) |
|
|
326
|
+
| `risk_notes` | No | Warnings or edge cases |
|
|
327
|
+
|
|
328
|
+
### Step Statuses
|
|
329
|
+
|
|
330
|
+
| Status | Meaning |
|
|
331
|
+
| :------------ | :------------------------------------------- |
|
|
332
|
+
| `pending` | Not yet started |
|
|
333
|
+
| `in_progress` | Currently being executed by an agent |
|
|
334
|
+
| `complete` | Successfully finished |
|
|
335
|
+
| `blocked` | Cannot proceed; requires manual intervention |
|
|
336
|
+
|
|
337
|
+
### Abbreviated Example
|
|
338
|
+
|
|
339
|
+
```yaml
|
|
340
|
+
metadata:
|
|
341
|
+
created_at: "2026-01-15T10:00:00Z"
|
|
342
|
+
created_by: "Discovery-Agent"
|
|
343
|
+
outcomes:
|
|
344
|
+
- "Users can log in with email and password"
|
|
345
|
+
|
|
346
|
+
steps:
|
|
347
|
+
- id: "1.1"
|
|
348
|
+
description: "Create auth service"
|
|
349
|
+
status: "pending"
|
|
350
|
+
deps: []
|
|
351
|
+
context: "Implement authentication logic using bcrypt and JWT."
|
|
352
|
+
requirements:
|
|
353
|
+
- "Create src/services/auth.js"
|
|
354
|
+
criteria:
|
|
355
|
+
- "Login function returns a valid JWT"
|
|
356
|
+
files:
|
|
357
|
+
- "src/services/auth.js"
|
|
358
|
+
|
|
359
|
+
- id: "1.2"
|
|
360
|
+
description: "Add login endpoint"
|
|
361
|
+
status: "pending"
|
|
362
|
+
deps: ["1.1"]
|
|
363
|
+
context: "Wire up the auth service to an Express route."
|
|
364
|
+
requirements:
|
|
365
|
+
- "POST /api/login"
|
|
366
|
+
criteria:
|
|
367
|
+
- "Returns 200 with token on valid credentials"
|
|
368
|
+
- "Returns 401 on invalid credentials"
|
|
369
|
+
files:
|
|
370
|
+
- "src/routes/auth.js"
|
|
371
|
+
context_files:
|
|
372
|
+
- "src/services/auth.js"
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## Skills
|
|
378
|
+
|
|
379
|
+
Skills are modular instruction sets installed to your agent's configuration
|
|
380
|
+
directory.
|
|
381
|
+
|
|
382
|
+
| Skill | Description |
|
|
383
|
+
| :-------------- | :---------------------------------------------------------- |
|
|
384
|
+
| `discovery` | Analyze requirements and generate orchestrator-ready plans |
|
|
385
|
+
| `refine-plan` | Analyze and improve an existing plan before execution |
|
|
386
|
+
| `simulate-plan` | Conversational dialogue to explore plans and identify risks |
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## Directory Structure
|
|
391
|
+
|
|
392
|
+
Orrery maintains state in `.agent-work/` (configurable via `ORRERY_WORK_DIR`):
|
|
393
|
+
|
|
394
|
+
```
|
|
395
|
+
.agent-work/
|
|
396
|
+
plans/ Active plan files (new and in-progress)
|
|
397
|
+
reports/ Step-level execution logs and outcomes
|
|
398
|
+
completed/ Successfully executed plans (archived)
|
|
399
|
+
exec.lock Lock file when orchestration is running
|
|
400
|
+
exec.log Output log for background execution
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
When `ORRERY_WORK_DIR` is set, Orrery automatically scopes to a project
|
|
404
|
+
subdirectory (`<project-name>-<hash>`) so multiple projects can share the same
|
|
405
|
+
work directory without plan conflicts.
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Environment Variables
|
|
410
|
+
|
|
411
|
+
| Variable | Description | Default |
|
|
412
|
+
| :----------------------------- | :--------------------------------------------------- | :-------------------- |
|
|
413
|
+
| `ORRERY_AGENT_PRIORITY` | Comma-separated list of agents for failover priority | `codex,gemini,claude` |
|
|
414
|
+
| `ORRERY_AGENT_TIMEOUT` | Agent failover timeout in milliseconds | `900000` (15 min) |
|
|
415
|
+
| `ORRERY_PARALLEL_ENABLED` | Enable parallel execution with git worktrees | `false` |
|
|
416
|
+
| `ORRERY_PARALLEL_MAX` | Maximum concurrent parallel agents | `3` |
|
|
417
|
+
| `ORRERY_REVIEW_ENABLED` | Enable the review loop | `false` |
|
|
418
|
+
| `ORRERY_REVIEW_MAX_ITERATIONS` | Maximum review-edit loop iterations | `3` |
|
|
419
|
+
| `ORRERY_WORK_DIR` | Override the work directory path (project-scoped) | `.agent-work` |
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## Exit Codes
|
|
424
|
+
|
|
425
|
+
| Code | Meaning |
|
|
426
|
+
| :--- | :---------------------------------------- |
|
|
427
|
+
| `0` | Success |
|
|
428
|
+
| `1` | General error |
|
|
429
|
+
| `2` | Validation error (plan validation failed) |
|
package/README.md
CHANGED
|
@@ -88,6 +88,7 @@ For power users, Orrery offers additional capabilities:
|
|
|
88
88
|
- **External Plan Creation** - Import plans from other tools or LLMs
|
|
89
89
|
- **Review Loop** - Iterative code review after each step with automatic fixes
|
|
90
90
|
- **Parallel Execution** - Run independent steps concurrently with git worktree isolation
|
|
91
|
+
- **Background Execution** - Run orchestration as a detached process and poll status
|
|
91
92
|
- **Handling Blocked Plans** - Recovery workflows when steps cannot complete
|
|
92
93
|
|
|
93
94
|
See [Advanced Workflows](docs/advanced-workflows.md) for details.
|
|
@@ -120,16 +121,18 @@ The Orchestrator (`orrery exec`) is the engine that drives the process. It loads
|
|
|
120
121
|
|
|
121
122
|
## Command Reference
|
|
122
123
|
|
|
123
|
-
| Command | Description
|
|
124
|
-
| :------------------- |
|
|
125
|
-
| `orrery` | Command reference.
|
|
126
|
-
| `orrery init` | Initialize Orrery: install skills to detected agents.
|
|
127
|
-
| `orrery
|
|
128
|
-
| `orrery
|
|
124
|
+
| Command | Description |
|
|
125
|
+
| :------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
126
|
+
| `orrery` | Command reference. |
|
|
127
|
+
| `orrery init` | Initialize Orrery: install skills to detected agents. |
|
|
128
|
+
| `orrery manual` | Show the full CLI reference manual. |
|
|
129
|
+
| `orrery orchestrate` | Executes the active plan. Use `--review` for review loop, `--parallel` for parallel execution, `--background` for detached mode. Alias: `exec`. |
|
|
130
|
+
| `orrery resume` | Unblock steps and resume orchestration. Use `--plan` to target a specific plan. |
|
|
131
|
+
| `orrery status` | Shows the progress of current plans and active execution status. |
|
|
129
132
|
|
|
130
133
|
## Directory Structure
|
|
131
134
|
|
|
132
|
-
Orrery maintains its state in the `.agent-work/` directory (configurable via `ORRERY_WORK_DIR`).
|
|
135
|
+
Orrery maintains its state in the `.agent-work/` directory (configurable via `ORRERY_WORK_DIR`). When `ORRERY_WORK_DIR` is set, each project gets an isolated subdirectory so multiple projects can share the same work directory.
|
|
133
136
|
|
|
134
137
|
- `.agent-work/plans/`: **Active Plans.** New and in-progress plan files.
|
|
135
138
|
- `.agent-work/reports/`: **Reports.** Step-level execution logs and outcomes.
|
|
@@ -191,7 +191,15 @@ Use the schema defined in `./schemas/plan-schema.yaml`.
|
|
|
191
191
|
|
|
192
192
|
**Output Location:**
|
|
193
193
|
|
|
194
|
-
|
|
194
|
+
First, determine the plans directory by running:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
orrery plans-dir
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
This prints the resolved plans directory (respects `ORRERY_WORK_DIR` when set).
|
|
201
|
+
|
|
202
|
+
- Directory: the path returned by `orrery plans-dir`
|
|
195
203
|
- Filename: `<date>-<plan-name>.yaml`
|
|
196
204
|
- Date format: YYYY-MM-DD (e.g., `2026-01-11`)
|
|
197
205
|
- Plan name: kebab-case description of the task (e.g., `fix-clone-agent-skills`)
|
|
@@ -215,7 +223,7 @@ Plans are automatically validated via the PostToolUse hook when written.
|
|
|
215
223
|
For manual validation, run:
|
|
216
224
|
|
|
217
225
|
```bash
|
|
218
|
-
orrery validate-plan
|
|
226
|
+
orrery validate-plan <plans-dir>/<plan>.yaml
|
|
219
227
|
```
|
|
220
228
|
|
|
221
229
|
This catches common YAML issues like unquoted colons and normalizes formatting.
|
|
@@ -405,11 +413,11 @@ Discovery is complete when:
|
|
|
405
413
|
When the plan is complete and validated, output the plan file path and present the user with their next options:
|
|
406
414
|
|
|
407
415
|
```
|
|
408
|
-
Plan created:
|
|
416
|
+
Plan created: <plans-dir>/<date>-<plan-name>.yaml
|
|
409
417
|
|
|
410
418
|
Next steps:
|
|
411
|
-
- /refine-plan
|
|
412
|
-
- /simulate-plan
|
|
419
|
+
- /refine-plan <plans-dir>/<plan-file> — Analyze and improve the plan before execution
|
|
420
|
+
- /simulate-plan <plans-dir>/<plan-file> — Explore the plan through dialogue, ask "what if" questions
|
|
413
421
|
- orrery exec — (Command run from the terminal) Execute the plan with the orrery orchestrator
|
|
414
422
|
```
|
|
415
423
|
|
|
@@ -39,7 +39,7 @@ These guidelines override generic examples in this skill. For example, if a guid
|
|
|
39
39
|
|
|
40
40
|
### Git State
|
|
41
41
|
|
|
42
|
-
The orchestrator modifies
|
|
42
|
+
The orchestrator modifies plan and work directory files before you start (marking steps `in_progress`, creating temp files). This is expected. **Ignore changes in the orchestrator work directory** (e.g., `.agent-work/` or the path from `orrery plans-dir`) when checking git status - these are orchestrator bookkeeping files, not unexpected changes.
|
|
43
43
|
|
|
44
44
|
### Step 1: Read the Plan
|
|
45
45
|
|
|
@@ -3,7 +3,8 @@ name: refine-plan
|
|
|
3
3
|
description: >
|
|
4
4
|
Analyze and improve an existing plan file. Reviews plan structure, dependencies,
|
|
5
5
|
context quality, and acceptance criteria, then implements improvements directly.
|
|
6
|
-
Requires a plan file argument (e.g., /refine-plan
|
|
6
|
+
Requires a plan file argument (e.g., /refine-plan my-plan.yaml).
|
|
7
|
+
Run `orrery plans-dir` to find the plans directory.
|
|
7
8
|
hooks:
|
|
8
9
|
PostToolUse:
|
|
9
10
|
- matcher: "Write"
|
|
@@ -273,7 +274,7 @@ Ready for execution.
|
|
|
273
274
|
## Example Dialogue
|
|
274
275
|
|
|
275
276
|
```
|
|
276
|
-
User: /refine-plan
|
|
277
|
+
User: /refine-plan analytics-dashboard.yaml
|
|
277
278
|
|
|
278
279
|
Agent: I've loaded the analytics dashboard plan. It has 6 steps delivering
|
|
279
280
|
two outcomes. Let me analyze it for improvements.
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
name: simulate-plan
|
|
3
3
|
description: >
|
|
4
4
|
Explore a plan through conversational dialogue before committing to execution.
|
|
5
|
-
Requires a plan file argument (e.g., /simulate-plan
|
|
5
|
+
Requires a plan file argument (e.g., /simulate-plan my-plan.yaml, /simulate-plan my-plan).
|
|
6
|
+
Run `orrery plans-dir` to find the plans directory.
|
|
6
7
|
Ask "what if" questions, trace dependencies, and build intuition about what you're building.
|
|
7
8
|
---
|
|
8
9
|
|
|
@@ -164,7 +165,7 @@ Only discuss what's in the plan. If asked about implementation details not cover
|
|
|
164
165
|
## Example Dialogue
|
|
165
166
|
|
|
166
167
|
```
|
|
167
|
-
User: /simulate
|
|
168
|
+
User: /simulate-plan analytics-dashboard.yaml
|
|
168
169
|
|
|
169
170
|
Agent: I've loaded the analytics dashboard plan. It has 6 steps delivering
|
|
170
171
|
two outcomes: "Users can see usage trends" and "Admins can export reports."
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
const path = require("path");
|
|
3
|
+
|
|
4
|
+
module.exports = function registerManualCommand(program) {
|
|
5
|
+
program
|
|
6
|
+
.command("manual")
|
|
7
|
+
.description("Show the full CLI reference manual")
|
|
8
|
+
.action(() => {
|
|
9
|
+
const helpPath = path.join(__dirname, "..", "..", "..", "HELP.md");
|
|
10
|
+
let content;
|
|
11
|
+
try {
|
|
12
|
+
content = fs.readFileSync(helpPath, "utf8");
|
|
13
|
+
} catch {
|
|
14
|
+
console.error(
|
|
15
|
+
"HELP.md not found. The reference manual may not be included in this installation."
|
|
16
|
+
);
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
process.stdout.write(content);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
const { spawn } = require("child_process");
|
|
2
|
+
const fs = require("fs");
|
|
3
|
+
const path = require("path");
|
|
4
|
+
|
|
1
5
|
const { orchestrate } = require("../../orchestration");
|
|
6
|
+
const { getWorkDir } = require("../../utils/paths");
|
|
2
7
|
|
|
3
8
|
module.exports = function registerOrchestrateCommand(program) {
|
|
4
9
|
program
|
|
@@ -14,7 +19,54 @@ module.exports = function registerOrchestrateCommand(program) {
|
|
|
14
19
|
"--parallel",
|
|
15
20
|
"Enable parallel execution with git worktrees for isolation"
|
|
16
21
|
)
|
|
22
|
+
.option(
|
|
23
|
+
"--background",
|
|
24
|
+
"Run orchestration as a detached background process"
|
|
25
|
+
)
|
|
17
26
|
.action(async (options) => {
|
|
27
|
+
// Background mode: re-spawn as detached process
|
|
28
|
+
if (options.background) {
|
|
29
|
+
if (options.dryRun) {
|
|
30
|
+
console.log(
|
|
31
|
+
"Note: --background with --dry-run runs in foreground.\n"
|
|
32
|
+
);
|
|
33
|
+
// Fall through to normal execution
|
|
34
|
+
} else {
|
|
35
|
+
const args = [];
|
|
36
|
+
if (options.plan) args.push("--plan", options.plan);
|
|
37
|
+
if (options.verbose) args.push("--verbose");
|
|
38
|
+
if (options.resume) args.push("--resume");
|
|
39
|
+
if (options.review) args.push("--review");
|
|
40
|
+
if (options.parallel) args.push("--parallel");
|
|
41
|
+
|
|
42
|
+
const logFile = path.join(getWorkDir(), "exec.log");
|
|
43
|
+
const logFd = fs.openSync(logFile, "a");
|
|
44
|
+
|
|
45
|
+
const binPath = path.join(
|
|
46
|
+
__dirname,
|
|
47
|
+
"..",
|
|
48
|
+
"..",
|
|
49
|
+
"..",
|
|
50
|
+
"bin",
|
|
51
|
+
"orrery.js"
|
|
52
|
+
);
|
|
53
|
+
const child = spawn(process.execPath, [binPath, "exec", ...args], {
|
|
54
|
+
detached: true,
|
|
55
|
+
stdio: ["ignore", logFd, logFd],
|
|
56
|
+
cwd: process.cwd(),
|
|
57
|
+
env: process.env
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
child.unref();
|
|
61
|
+
fs.closeSync(logFd);
|
|
62
|
+
|
|
63
|
+
console.log(`Background execution started (PID ${child.pid})`);
|
|
64
|
+
console.log(`Log file: ${logFile}`);
|
|
65
|
+
console.log("\nUse 'orrery status' to check progress.");
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
18
70
|
try {
|
|
19
71
|
await orchestrate({
|
|
20
72
|
plan: options.plan,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const { getPlansDir } = require("../../utils/paths");
|
|
2
|
+
|
|
3
|
+
module.exports = function registerPlansDirCommand(program) {
|
|
4
|
+
program
|
|
5
|
+
.command("plans-dir")
|
|
6
|
+
.description("Print the resolved plans directory path")
|
|
7
|
+
.action(() => {
|
|
8
|
+
console.log(getPlansDir());
|
|
9
|
+
});
|
|
10
|
+
};
|