@eigenpal/cli 0.4.3 → 0.4.4

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.
@@ -23,15 +23,57 @@ This skill is the schema reference. The CLI does the actual work.
23
23
  1. eigenpal init workflow my-extraction --template pdf-extraction
24
24
  2. edit workflow.yaml + evaluators.yaml + dataset/examples/*/expected/output.json
25
25
  3. eigenpal workflow validate # local: all three checks, no server contact
26
- 4. eigenpal workflow execution run my-extraction sample-name # one-off run for debugging
27
- 5. eigenpal workflow push --file workflow.yaml # creates wf_… on first push
28
- 6. eigenpal workflow evaluators push <wf-id> --file evaluators.yaml
29
- 7. eigenpal workflow dataset push <wf-id> --file dataset/ --mode replace
30
- 8. eigenpal workflow experiment run <wf-id> # → { batchId, executionIds }
31
- 9. eigenpal workflow experiment status <wf-id> <batch-id>
32
- 10. eigenpal workflow experiment results <wf-id> <batch-id> --format csv --out r.csv
26
+ 4. eigenpal workflow push --file workflow.yaml # creates wf_… on first push
27
+ 5. eigenpal workflow execution run my-extraction sample-name # one-off run for debugging
28
+ 6. eigenpal workflow evaluators push <workflow-id> --file evaluators.yaml
29
+ 7. eigenpal workflow dataset push <workflow-id> --file dataset/ --mode replace
30
+ 8. eigenpal workflow experiment run <workflow-id> # → { batchId, executionIds }
31
+ 9. eigenpal workflow experiment status <workflow-id> <batch-id>
32
+ 10. eigenpal workflow experiment results <workflow-id> <batch-id> --format csv --out r.csv
33
33
  ```
34
34
 
35
+ > **`push` BEFORE `execution run`.** The CLI no longer ships YAML at run
36
+ > time — only saved workflows execute. `execution run <workflow-id>` reads
37
+ > the definition from the server, so any local edit to `workflow.yaml`
38
+ > must be `push`ed first or the run will use the previous version. If
39
+ > the workflow has never been pushed, `execution run` exits with
40
+ > `Workflow "<arg>" not found on the server. Push it first.`
41
+
42
+ ## Identifying a workflow
43
+
44
+ Every command that takes `<workflow-id>` expects a **`wf_xxx` id** — the
45
+ opaque, server-generated identifier printed by `workflow push` and
46
+ `workflow list`. Stable across renames; this is the form to use in
47
+ scripts and CI.
48
+
49
+ As a typing convenience the workflow's slug (the YAML's `name:` field)
50
+ is also accepted — the CLI resolves it server-side. The resolver
51
+ detects the form by the `wf_` prefix:
52
+
53
+ | Argument starts with… | Looked up via |
54
+ | --------------------- | ------------------------------------------------- |
55
+ | `wf_…` | `GET /api/v1/workflows/<id>` |
56
+ | anything else | `GET /api/v1/workflows?name=<slug>` (exact match) |
57
+
58
+ Workflow names are constrained to `[a-z0-9][a-z0-9_-]*` (lowercase
59
+ letters, digits, `_`, `-`; 1–64 chars), so every slug is terminal-safe
60
+ and url-safe by construction — no shell quoting required.
61
+
62
+ ```bash
63
+ # Both work; prefer the id form in scripts.
64
+ eigenpal workflow execution run wf_abc123 sample-1
65
+ eigenpal workflow execution run my-extraction sample-1
66
+ ```
67
+
68
+ If the workflow hasn't been pushed yet, the resolver fails fast:
69
+ `Workflow "<arg>" not found on the server. Push it first, or run \`eigenpal workflow list\` to see what's available.`
70
+
71
+ **Other id types — not interchangeable with workflow id:**
72
+
73
+ - `workflow execution {get,watch,cancel,compare} <executionId>` — `exec_…`
74
+ - `workflow experiment compare <batchA> <batchB>` — batch ids (`evb_…`)
75
+ - `workflow dataset example {get,update,delete} <wf-id> <exampleId>` — second positional is the example id (`evx_…`)
76
+
35
77
  ## Common recipes
36
78
 
37
79
  ### From zero — new workflow from a template
@@ -103,7 +145,7 @@ to retry.
103
145
  eigenpal workflow experiment compare evb_old evb_new --regression-threshold 0.05
104
146
  ```
105
147
 
106
- Unlike its siblings, `compare` takes no `<wf-id>` — the server resolves
148
+ Unlike its siblings, `compare` takes no `<workflow-id>` — the server resolves
107
149
  the owning workflow from each batch id. Both batches must live in the
108
150
  same workflow within your tenant. See [`reference/debugging.md`](reference/debugging.md#6-compare-two-experiment-batches)
109
151
  for sort flags + `--json` shape.
@@ -118,7 +160,7 @@ cat packages/cli/src/skill/reference/evaluators.md # or read this skill's `ref
118
160
  eigenpal workflow evaluators validate ./evaluators.yaml
119
161
 
120
162
  # Push (overwrites the workflow's evaluator config)
121
- eigenpal workflow evaluators push <wf-id> --file evaluators.yaml
163
+ eigenpal workflow evaluators push <workflow-id> --file evaluators.yaml
122
164
  ```
123
165
 
124
166
  ### Build + validate + upload a dataset
@@ -128,40 +170,40 @@ eigenpal workflow evaluators push <wf-id> --file evaluators.yaml
128
170
  eigenpal workflow dataset validate ./dataset # rejects bad folder names, arg-name collisions, etc.
129
171
 
130
172
  # Push. `replace` wipes server-side examples for this workflow first; `append` adds.
131
- eigenpal workflow dataset push <wf-id> --file ./dataset --mode replace
173
+ eigenpal workflow dataset push <workflow-id> --file ./dataset --mode replace
132
174
  # Watch the `expectedSet` count in the final NDJSON `done` event — if 0, evals run un-graded.
133
175
  ```
134
176
 
135
177
  To inspect or round-trip the server's current dataset:
136
178
 
137
179
  ```bash
138
- eigenpal workflow dataset list <wf-id>
139
- eigenpal workflow dataset pull <wf-id> --out current.zip # round-trip back to local
180
+ eigenpal workflow dataset list <workflow-id>
181
+ eigenpal workflow dataset pull <workflow-id> --out current.zip # round-trip back to local
140
182
  ```
141
183
 
142
184
  ### Edit one example without re-uploading the whole dataset
143
185
 
144
186
  ```bash
145
187
  # Inspect one example end-to-end (triggerInput + expectedOutput + metadata):
146
- eigenpal workflow dataset example get <wf-id> <example-id>
147
- eigenpal workflow dataset example get <wf-id> <example-id> --json | jq '.expectedOutput'
188
+ eigenpal workflow dataset example get <workflow-id> <example-id>
189
+ eigenpal workflow dataset example get <workflow-id> <example-id> --json | jq '.expectedOutput'
148
190
 
149
191
  # Capture a corrected output as the new ground truth (the most common one):
150
192
  # 1. Look at what the workflow returned
151
193
  eigenpal workflow execution get exec_… --json | jq '.output.data' > /tmp/correct.json
152
194
  # 2. Patch that example's expected output in place
153
- eigenpal workflow dataset example update <wf-id> <example-id> \
195
+ eigenpal workflow dataset example update <workflow-id> <example-id> \
154
196
  --expected-file /tmp/correct.json
155
197
 
156
198
  # Add one new example to a known dataset:
157
- eigenpal workflow dataset example create <wf-id> \
199
+ eigenpal workflow dataset example create <workflow-id> \
158
200
  --name missing-required-field \
159
201
  --input-json '{"language":"en"}' \
160
202
  --expected-file /tmp/expected.json \
161
203
  --annotation "edge case: required field absent from input"
162
204
 
163
205
  # Drop a bad example by id (CI requires --yes):
164
- eigenpal workflow dataset example delete <wf-id> <example-id> --yes
206
+ eigenpal workflow dataset example delete <workflow-id> <example-id> --yes
165
207
  ```
166
208
 
167
209
  `example update` is a partial PATCH — any flag you omit is left alone. Pass
@@ -172,27 +214,28 @@ dataset folder and re-push with `dataset push --mode replace`.
172
214
 
173
215
  ```bash
174
216
  # Kick off — runs every example in the dataset against every evaluator.
175
- eigenpal workflow experiment run <wf-id> # → { batchId, executionIds }
217
+ eigenpal workflow experiment run <workflow-id> # → { batchId, executionIds }
176
218
 
177
219
  # Or restrict to one example:
178
- eigenpal workflow experiment run <wf-id> --example-id evx_…
220
+ eigenpal workflow experiment run <workflow-id> --example-id evx_…
179
221
 
180
222
  # Poll until done. `experiment status` auto-detaches after 30 min; just re-run.
181
- eigenpal workflow experiment status <wf-id> <batch-id>
223
+ eigenpal workflow experiment status <workflow-id> <batch-id>
182
224
 
183
225
  # Pull results — `--out` writes the file directly from the server's signed-URL
184
226
  # storage, so large CSVs don't go through the CLI process.
185
- eigenpal workflow experiment results <wf-id> <batch-id> --format csv --out r.csv
227
+ eigenpal workflow experiment results <workflow-id> <batch-id> --format csv --out r.csv
186
228
  ```
187
229
 
188
230
  ### Debug a failing workflow
189
231
 
190
232
  ```bash
191
- # 1. Reproduce locally with the live step list
192
- eigenpal workflow execution run <workflow-name> <example-name>
233
+ # 1. Re-run a single example against the saved workflow (must be pushed first).
234
+ # <workflow-id> accepts a `wf_…` id (preferred for scripts) or the slug.
235
+ eigenpal workflow execution run <workflow-id> <example-name>
193
236
 
194
237
  # 2. Or pull a recorded failure from the server
195
- eigenpal workflow execution list <wf-id> --status failed --limit 5
238
+ eigenpal workflow execution list <workflow-id> --status failed --limit 5
196
239
  eigenpal workflow execution get exec_… # full payload, all steps
197
240
  eigenpal workflow execution get exec_… --step extract --include input,output,error
198
241
 
@@ -299,24 +342,24 @@ eigenpal status # active tenant, user, key id, workflow count
299
342
 
300
343
  # Definition
301
344
  eigenpal workflow list
302
- eigenpal workflow push --file workflow.yaml [--workflow-id <wf-id>]
303
- eigenpal workflow pull <wf-id>
345
+ eigenpal workflow push --file workflow.yaml [--workflow-id <workflow-id>]
346
+ eigenpal workflow pull <workflow-id>
304
347
  eigenpal workflow validate [path]
305
348
 
306
349
  # Evaluators
307
- eigenpal workflow evaluators push <wf-id> --file evaluators.yaml
308
- eigenpal workflow evaluators pull <wf-id>
350
+ eigenpal workflow evaluators push <workflow-id> --file evaluators.yaml
351
+ eigenpal workflow evaluators pull <workflow-id>
309
352
  eigenpal workflow evaluators validate [path]
310
353
 
311
354
  # Dataset
312
- eigenpal workflow dataset push <wf-id> --file dataset/ [--mode {append|replace}] # default: append
313
- eigenpal workflow dataset pull <wf-id> --out dataset.zip
314
- eigenpal workflow dataset list <wf-id>
355
+ eigenpal workflow dataset push <workflow-id> --file dataset/ [--mode {append|replace}] # default: append
356
+ eigenpal workflow dataset pull <workflow-id> --out dataset.zip
357
+ eigenpal workflow dataset list <workflow-id>
315
358
  eigenpal workflow dataset validate [path]
316
- eigenpal workflow dataset example create <wf-id> --name <n> [--input-file] [--expected-file] [--annotation]
317
- eigenpal workflow dataset example update <wf-id> <example-id> [--name] [--input-file] [--expected-file] [--annotation] [--row-order]
318
- eigenpal workflow dataset example delete <wf-id> <example-id> --yes
319
- eigenpal workflow dataset example get <wf-id> <example-id> # full row + metadata
359
+ eigenpal workflow dataset example create <workflow-id> --name <n> [--input-file] [--expected-file] [--annotation]
360
+ eigenpal workflow dataset example update <workflow-id> <example-id> [--name] [--input-file] [--expected-file] [--annotation] [--row-order]
361
+ eigenpal workflow dataset example delete <workflow-id> <example-id> --yes
362
+ eigenpal workflow dataset example get <workflow-id> <example-id> # full row + metadata
320
363
 
321
364
  # All-in-one validation against the templated project layout
322
365
  eigenpal workflow validate # ./workflow.yaml + ./evaluators.yaml + ./dataset/
@@ -325,10 +368,10 @@ eigenpal workflow validate # ./workflow.yaml + ./evaluators.y
325
368
  eigenpal workflow clear-local # delete local execution artifacts (no server impact)
326
369
 
327
370
  # Experiments (batch eval runs)
328
- eigenpal workflow experiment run <wf-id> [--example-id <id> ...]
329
- eigenpal workflow experiment status <wf-id> <batch-id> [--watch] # exit 1 on terminal w/ failures, 2 on --max-wait
330
- eigenpal workflow experiment results <wf-id> [batch-id] --format {csv|json} --out r.csv
331
- eigenpal workflow experiment list <wf-id>
371
+ eigenpal workflow experiment run <workflow-id> [--example-id <id> ...]
372
+ eigenpal workflow experiment status <workflow-id> <batch-id> [--watch] # exit 1 on terminal w/ failures, 2 on --max-wait
373
+ eigenpal workflow experiment results <workflow-id> [batch-id] --format {csv|json} --out r.csv
374
+ eigenpal workflow experiment list <workflow-id>
332
375
  eigenpal workflow experiment compare <batch-a> <batch-b> [--regression-threshold] [--sort] # no --workflow-id
333
376
 
334
377
  # Step-type / evaluator-type introspection
@@ -341,16 +384,16 @@ eigenpal workflow evaluator-type get <type>
341
384
  eigenpal workflow step exec <type> [--config-json | --config-file] [--inputs k=v...] [--output-schema]
342
385
 
343
386
  # Execution (one-off run + read-side debugging + cancellation)
344
- eigenpal workflow execution run <workflow-slug> [examples...]
387
+ eigenpal workflow execution run <workflow-id> [examples...]
345
388
  eigenpal workflow execution get <exec-id>
346
- eigenpal workflow execution list <wf-id> [--status running|failed|completed]
389
+ eigenpal workflow execution list <workflow-id> [--status running|failed|completed]
347
390
  eigenpal workflow execution watch <exec-id> # 2s/5s adaptive polling
348
391
  eigenpal workflow execution compare <exec-a> <exec-b>
349
392
  eigenpal workflow execution cancel <exec-id> # tells the worker to stop between steps; safe to retry
350
393
 
351
394
  # Versions
352
- eigenpal workflow versions list <wf-id> # pushed semver history (newest first)
353
- eigenpal workflow versions restore <wf-id> <version-id> # re-activate a prior version as the live one
395
+ eigenpal workflow versions list <workflow-id> # pushed semver history (newest first)
396
+ eigenpal workflow versions restore <workflow-id> <version-id> # re-activate a prior version as the live one
354
397
 
355
398
  # Tooling
356
399
  eigenpal skill install # interactive multiselect for Claude Code, Cursor, …
@@ -1,7 +1,3 @@
1
1
  # eigenpal agent
2
2
 
3
- > **Auto-generated.** This file is regenerated from the live Commander tree in
4
- > `packages/cli/src/cli.ts` by `bun run --cwd packages/cli generate:cli-docs`.
5
- > Do not hand-edit — your changes will be overwritten on the next run.
6
-
7
3
  Agent (agentic process) operations — coming soon. Agent workflows live on the server today; CLI surface is reserved for future commands.
@@ -1,9 +1,5 @@
1
1
  # eigenpal auth
2
2
 
3
- > **Auto-generated.** This file is regenerated from the live Commander tree in
4
- > `packages/cli/src/cli.ts` by `bun run --cwd packages/cli generate:cli-docs`.
5
- > Do not hand-edit — your changes will be overwritten on the next run.
6
-
7
3
  Manage authentication. Credentials live in ~/.config/eigenpal/credentials.json as named profiles. Switch tenants with `auth use <name>` or set `EIGENPAL_PROFILE=<name>` for one shell.
8
4
 
9
5
  ## Contents
@@ -1,9 +1,5 @@
1
1
  # eigenpal completion
2
2
 
3
- > **Auto-generated.** This file is regenerated from the live Commander tree in
4
- > `packages/cli/src/cli.ts` by `bun run --cwd packages/cli generate:cli-docs`.
5
- > Do not hand-edit — your changes will be overwritten on the next run.
6
-
7
3
  Print a shell completion script to stdout (supported shells: bash, zsh, fish). Pipe into the appropriate completion file for your shell — see the script header for install instructions.
8
4
 
9
5
  ### Arguments
@@ -1,9 +1,5 @@
1
1
  # eigenpal init
2
2
 
3
- > **Auto-generated.** This file is regenerated from the live Commander tree in
4
- > `packages/cli/src/cli.ts` by `bun run --cwd packages/cli generate:cli-docs`.
5
- > Do not hand-edit — your changes will be overwritten on the next run.
6
-
7
3
  Scaffold a new workflow project. Without `[name]`, scaffolds into the current directory using the cwd basename as the workflow name. With `[name]`, creates `./<name>/` and uses that as the slug. The flat layout matches what `workflow execution run <slug>` already discovers — no manual file moves.
8
4
 
9
5
  ## Contents
@@ -1,9 +1,5 @@
1
1
  # eigenpal skill
2
2
 
3
- > **Auto-generated.** This file is regenerated from the live Commander tree in
4
- > `packages/cli/src/cli.ts` by `bun run --cwd packages/cli generate:cli-docs`.
5
- > Do not hand-edit — your changes will be overwritten on the next run.
6
-
7
3
  Install / uninstall / list the Eigenpal agent skill in your project (Claude Code, Cursor, Codex, Gemini CLI, Antigravity, OpenCode, Pi, Windsurf, GitHub Copilot).
8
4
 
9
5
  ## Contents
@@ -1,9 +1,5 @@
1
1
  # eigenpal status
2
2
 
3
- > **Auto-generated.** This file is regenerated from the live Commander tree in
4
- > `packages/cli/src/cli.ts` by `bun run --cwd packages/cli generate:cli-docs`.
5
- > Do not hand-edit — your changes will be overwritten on the next run.
6
-
7
3
  One-shot dashboard: server, active tenant, user, key id, workflow count. Pair with `--json` for scripting.
8
4
 
9
5
  ### Options