@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 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 orchestrate` | Executes the active plan. Use `--review` for review loop, `--parallel` for parallel execution. Alias: `exec`. |
128
- | `orrery status` | Shows the progress of current plans. |
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
- - Directory: `.agent-work/plans/`
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 .agent-work/plans/<plan>.yaml
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: .agent-work/plans/<date>-<plan-name>.yaml
416
+ Plan created: <plans-dir>/<date>-<plan-name>.yaml
409
417
 
410
418
  Next steps:
411
- - /refine-plan .agent-work/plans/<plan-file> — Analyze and improve the plan before execution
412
- - /simulate-plan .agent-work/plans/<plan-file> — Explore the plan through dialogue, ask "what if" questions
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 `.agent-work/` files before you start (marking steps `in_progress`, creating temp files). This is expected. **Ignore changes in `.agent-work/`** when checking git status - these are orchestrator bookkeeping files, not unexpected changes.
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 .agent-work/plans/my-plan.yaml).
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 .agent-work/plans/analytics-dashboard.yaml
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 .agent-work/plans/my-plan.yaml, /simulate-plan my-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 .agent-work/plans/analytics-dashboard.yaml
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
+ };