pi-daddy 0.26.1 → 0.27.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.
Files changed (131) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/PRODUCT-GUIDE.md +127 -0
  3. package/README.md +23 -2
  4. package/REQUIREMENTS.md +41 -0
  5. package/dist/catalog.d.ts +1 -7
  6. package/dist/catalog.d.ts.map +1 -1
  7. package/dist/catalog.js +8 -40
  8. package/dist/catalog.js.map +1 -1
  9. package/dist/cli.d.ts +2 -2
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +44 -14
  12. package/dist/cli.js.map +1 -1
  13. package/dist/daily-dashboard-host.d.ts +14 -1
  14. package/dist/daily-dashboard-host.d.ts.map +1 -1
  15. package/dist/daily-dashboard-host.js +40 -17
  16. package/dist/daily-dashboard-host.js.map +1 -1
  17. package/dist/daily-panel.d.ts +36 -0
  18. package/dist/daily-panel.d.ts.map +1 -0
  19. package/dist/daily-panel.js +84 -0
  20. package/dist/daily-panel.js.map +1 -0
  21. package/dist/daily-view-render.d.ts +2 -1
  22. package/dist/daily-view-render.d.ts.map +1 -1
  23. package/dist/daily-view-render.js +2 -1
  24. package/dist/daily-view-render.js.map +1 -1
  25. package/dist/daily-view.d.ts +3 -0
  26. package/dist/daily-view.d.ts.map +1 -1
  27. package/dist/daily-view.js +6 -0
  28. package/dist/daily-view.js.map +1 -1
  29. package/dist/dashboard-cli.d.ts +2 -0
  30. package/dist/dashboard-cli.d.ts.map +1 -1
  31. package/dist/dashboard-cli.js +37 -15
  32. package/dist/dashboard-cli.js.map +1 -1
  33. package/dist/dashboard-host-contract.d.ts +2 -0
  34. package/dist/dashboard-host-contract.d.ts.map +1 -1
  35. package/dist/dashboard-host-contract.js.map +1 -1
  36. package/dist/dashboard-host-transport.d.ts.map +1 -1
  37. package/dist/dashboard-host-transport.js +6 -3
  38. package/dist/dashboard-host-transport.js.map +1 -1
  39. package/dist/dashboard-host.d.ts +30 -2
  40. package/dist/dashboard-host.d.ts.map +1 -1
  41. package/dist/dashboard-host.js +73 -11
  42. package/dist/dashboard-host.js.map +1 -1
  43. package/dist/dashboard-menu.d.ts +16 -0
  44. package/dist/dashboard-menu.d.ts.map +1 -0
  45. package/dist/dashboard-menu.js +33 -0
  46. package/dist/dashboard-menu.js.map +1 -0
  47. package/dist/definitions.d.ts +3 -8
  48. package/dist/definitions.d.ts.map +1 -1
  49. package/dist/definitions.js +19 -43
  50. package/dist/definitions.js.map +1 -1
  51. package/dist/factory-order.d.ts +10 -10
  52. package/dist/index.d.ts +7 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +7 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/init.d.ts +7 -19
  57. package/dist/init.d.ts.map +1 -1
  58. package/dist/init.js +9 -20
  59. package/dist/init.js.map +1 -1
  60. package/dist/learning-connection.d.ts +127 -0
  61. package/dist/learning-connection.d.ts.map +1 -0
  62. package/dist/learning-connection.js +54 -0
  63. package/dist/learning-connection.js.map +1 -0
  64. package/dist/model-preflight.d.ts +5 -0
  65. package/dist/model-preflight.d.ts.map +1 -1
  66. package/dist/model-preflight.js +9 -0
  67. package/dist/model-preflight.js.map +1 -1
  68. package/dist/product-files.d.ts +6 -0
  69. package/dist/product-files.d.ts.map +1 -0
  70. package/dist/product-files.js +55 -0
  71. package/dist/product-files.js.map +1 -0
  72. package/dist/skill-packages.d.ts +6 -24
  73. package/dist/skill-packages.d.ts.map +1 -1
  74. package/dist/skill-packages.js +74 -33
  75. package/dist/skill-packages.js.map +1 -1
  76. package/dist/skill-resources.d.ts +21 -0
  77. package/dist/skill-resources.d.ts.map +1 -0
  78. package/dist/skill-resources.js +52 -0
  79. package/dist/skill-resources.js.map +1 -0
  80. package/dist/work-command.d.ts.map +1 -1
  81. package/dist/work-command.js +14 -6
  82. package/dist/work-command.js.map +1 -1
  83. package/dist/work-policy-registry.d.ts +133 -0
  84. package/dist/work-policy-registry.d.ts.map +1 -0
  85. package/dist/work-policy-registry.js +128 -0
  86. package/dist/work-policy-registry.js.map +1 -0
  87. package/dist/work-run.d.ts +56 -0
  88. package/dist/work-run.d.ts.map +1 -0
  89. package/dist/work-run.js +102 -0
  90. package/dist/work-run.js.map +1 -0
  91. package/dist/work-setup.d.ts +40 -0
  92. package/dist/work-setup.d.ts.map +1 -0
  93. package/dist/work-setup.js +174 -0
  94. package/dist/work-setup.js.map +1 -0
  95. package/extensions/daily-dashboard-session.ts +16 -7
  96. package/extensions/execute-child.ts +2 -2
  97. package/extensions/grants-command.ts +2 -2
  98. package/extensions/grants.ts +6 -2
  99. package/extensions/init-command.ts +3 -2
  100. package/extensions/learning-outcome-session.ts +38 -0
  101. package/extensions/learning-session.ts +59 -0
  102. package/extensions/ordinary-runtime.ts +2 -2
  103. package/extensions/run-delegation.ts +2 -2
  104. package/extensions/work-policy-session.ts +139 -0
  105. package/extensions/work-run-session.ts +75 -0
  106. package/extensions/work-runtime.ts +2 -2
  107. package/extensions/work-session.ts +132 -0
  108. package/package.json +9 -1
  109. package/src/catalog.ts +7 -37
  110. package/src/cli.ts +34 -14
  111. package/src/daily-dashboard-host.ts +32 -15
  112. package/src/daily-panel.ts +80 -0
  113. package/src/daily-view-render.ts +2 -1
  114. package/src/daily-view.ts +8 -0
  115. package/src/dashboard-cli.ts +29 -17
  116. package/src/dashboard-host-contract.ts +2 -0
  117. package/src/dashboard-host-transport.ts +7 -4
  118. package/src/dashboard-host.ts +48 -13
  119. package/src/dashboard-menu.ts +28 -0
  120. package/src/definitions.ts +16 -44
  121. package/src/index.ts +7 -1
  122. package/src/init.ts +10 -20
  123. package/src/learning-connection.ts +70 -0
  124. package/src/model-preflight.ts +9 -0
  125. package/src/product-files.ts +34 -0
  126. package/src/skill-packages.ts +59 -34
  127. package/src/skill-resources.ts +48 -0
  128. package/src/work-command.ts +11 -6
  129. package/src/work-policy-registry.ts +81 -0
  130. package/src/work-run.ts +79 -0
  131. package/src/work-setup.ts +141 -0
package/CHANGELOG.md CHANGED
@@ -12,6 +12,41 @@ the record of how the package got here and are worth keeping; they are not worth
12
12
  > the record of how the package arrived at what it does, and because the reasoning behind each one is
13
13
  > usually the clearest statement of why the current behaviour is what it is.
14
14
 
15
+ ## 0.27.1 — reference enabled installed runtime skills (ADR-0074)
16
+
17
+ - Setup uses configured Pi runtime skills directly instead of copying them into `.pi/skills`, avoiding
18
+ duplicate warnings and stale local copies after package upgrades.
19
+ - Definitions and the capability catalog honor Pi package/resource filters, scope precedence and
20
+ `PI_CODING_AGENT_DIR` without installs, extension execution or model calls.
21
+ - Existing local overrides and grant files stay intact; unregistered npm packages retain legacy scaffolding.
22
+ Review old local copies before removing them to follow installed package updates.
23
+
24
+ ## 0.27.0 — ordinary work and learning product (release candidate; ADR-0073)
25
+
26
+ Prepared from `b9cbef9087b3596a0d930c0ec9b843f34c0f27e8`: Sol-approved producer runtime plus the
27
+ passing supported-command assertion fix. Feature PR #52 merged with green CI at
28
+ `b974963a7d0ba5a74fdafe331356c348a1fba565`. Release PR CI/merge, installed qualification and publication
29
+ remain pending. Matching skill-harness release planned: **0.16.0**. Release preparation changes metadata
30
+ and test synchronization only; dependencies and runtime are unchanged.
31
+
32
+ - Outcome-first Herdr daily panel, observed active model/effort, collapsed history and exact-frame numbered
33
+ actions. The former diagnostic renderer remains `renderDailyDetails`; frozen fixtures stay unchanged.
34
+ - `/grants work` authoring/selecting of 1–8-task DAGs, scope/alternative/priority changes and explicit
35
+ model/effort. Bounded runs reuse original delegation/approval/executor/cancellation owners, retain full
36
+ bounded results, wait on pause and refuse stale pinned scope at admission. No automatic retries.
37
+ - Separate private instruction/presentation retention, including single-work outcome labels; governance
38
+ ledgers still do not store instruction text. CLI `work list`/`work show` and public setup/run exports.
39
+ - `/grants learning` uses the loaded harness's scoped workspace/wizard. Original trust attention is reused;
40
+ quality/reveal, adopt/reject/defer, independent eligibility, activation and later observation stay separate.
41
+ - Additive model/effort-only next-order registry, original receipt linkage, rollback and readback recovery;
42
+ active/old runs stay pinned. Existing fixed-policy, ledger and retention contracts remain unchanged.
43
+ - PR52 review repairs: refuse host stop while pause/pending/unknown control remains; preserve holds on
44
+ denied or unacknowledged resumes. Show the retained restore digest and every task model/effort before
45
+ rollback consent; cover exact activation/readback receipt identities and friendly-label CI regressions.
46
+ - Packaged concise guide/register for pi-daddy 0.27.0 with skill-harness 0.16.0. Release PR CI/merge,
47
+ installed two-extension linkage qualification and publication remain separate coordinator gates; no
48
+ actual calibration, human acceptance or production improvement is claimed.
49
+
15
50
  ## 0.26.1 — measured-order fractional usage repair (2026-09-14)
16
51
 
17
52
  - Preserve fractional measured-order usage when serializing results, so bounded recovery and dependent review retain exact reported usage.
@@ -0,0 +1,127 @@
1
+ # Work and learning in Pi
2
+
3
+ This guide targets **pi-daddy 0.27.1** with **skill-harness 0.16.0**. The 0.27.1 patch references enabled
4
+ installed runtime skills directly and prevents setup from creating duplicate project copies.
5
+ Release qualification and publication are recorded in the release PR; version metadata alone is not proof.
6
+ The [current requirement register](./REQUIREMENTS.md) separates implementation from release evidence.
7
+ From an installed shell command, `pi-daddy guide` prints this guide; `pi-daddy current` prints the register.
8
+
9
+ ## Start once
10
+
11
+ After the patch is published, install it with Pi's normal package manager:
12
+ `pi install npm:pi-daddy@0.27.1` and `pi install npm:skill-harness@0.16.0`.
13
+ Do not treat these planned version commands as evidence the packages are already available.
14
+ Start a **fresh Pi session** after upgrading the harness: its existing immutable bridge survives `/reload`.
15
+ In the project, run `/grants init`, review capability consent, then `/grants` to see usable definitions.
16
+ Enabled installed runtime skills are used in place, using Pi's package filters and config directory.
17
+ No `.pi/skills/` copies are created for them. Existing local overrides and `.pi/grants.env` are preserved;
18
+ review old copies before removing one to follow installed package updates. Unregistered npm packages retain
19
+ legacy copy scaffolding. This works for any runtime skill package; there is no Principal-specific policy.
20
+ A definition without `allowed-tools` remains unavailable until its author declares a ceiling.
21
+ Select an available authenticated Pi model; this product never copies credentials or chooses a fallback.
22
+
23
+ ## Declare, run, inspect
24
+
25
+ 1. **`/grants work new`** asks for an overall outcome, then one to eight tasks. Each task has its own
26
+ outcome/instructions, agent definition (or **No tools**), explicit model and requested effort.
27
+ 2. Choose which earlier tasks each task depends on, then the maximum parallel agents (one to eight).
28
+ No dependencies means independent work; a chain expresses sequential work. Review and save.
29
+ **Saving does not run anything.** Text is retained in owner-only local files, not governance ledgers.
30
+ 3. In Herdr, **`/grants host`**, then **`/grants dashboard`**, connects the existing owner to a right panel
31
+ without moving focus. The plugin/install handshake and actual Pi pane ownership still apply.
32
+ 4. **`/grants work run`** shows the exact setup and bounds, then asks before launching. Every child goes
33
+ through the original delegation/grant/approval/executor path. Failed predecessors block only their
34
+ dependent branch. Complete predecessor output is handed over only within the 32 KiB bound; it is
35
+ never silently truncated. Child deadlines/output limits and the subtree budget remain enforced.
36
+ 5. **`/grants work results`** opens retained output. Editor changes are discarded; control characters are
37
+ escaped. A digest mismatch is an error, not permission to substitute another artifact.
38
+
39
+ The run is finite, with no automatic retry or restart recovery. Esc requests cancellation and waits for
40
+ original children to settle. Ordinary model work has **no universal dollar/token cap**; provider usage is
41
+ not invented from output size. Effort is an observed/requested launch setting, not measured internal thought.
42
+
43
+ ## Read and steer the panel
44
+
45
+ The outcome comes first, followed by **Running**, **Waiting**, **Needs you** or **Finished**. Active rows
46
+ show observed model/effort; unknown observations stay unknown. Completed attempts are collapsed.
47
+ **Finished is not accepted.** `d` opens diagnostics/history. There are no guessed percentages or ETAs.
48
+
49
+ Enter a displayed **number** for its action. A repaint never gives an old number a new meaning; stale
50
+ choices refuse. Feedback distinguishes acknowledgement, applied control, pending and unknown results.
51
+ Pause stops new admission, not active children. Pending bounded tasks wait for resume. Stop-agent targets
52
+ one original active handle and does not cancel siblings. A pause racing an approval can still refuse that
53
+ attempt at the original boundary; it is not automatically retried. Reads/redraws never request work.
54
+
55
+ **`/grants work`** also selects saved setups or the task for ordinary `delegate`, changes priorities,
56
+ and records scope revisions or alternatives. Live changes use the existing owner's validation/CAS.
57
+ Topology changes require new work; active runs are never rebound. A selected-scope change prevents the
58
+ old bounded order's remaining children from starting. **`/grants host stop` refuses while paused: choose
59
+ Resume new work in the original dashboard first.** Busy/pending controls must finish or be explicitly
60
+ reconciled first. Unknown acknowledgements keep the host for readback; stop never silently releases them.
61
+ Ending the whole Pi session disconnects the host, but does not reconcile unknown effects. A successful
62
+ stop preserves evidence, not a recoverable controller, and cancels no child. **Disconnected** means live
63
+ actions are unavailable, not that children stopped.
64
+
65
+ For shell inspection only: `pi-daddy work list` and `pi-daddy work show` (`--dir` is optional).
66
+ The existing `pi-daddy work add --id … --outcome …` single-obligation entry point remains supported.
67
+
68
+ ## Learn deliberately; earn interruptions separately
69
+
70
+ 1. **`/grants learning`** creates or explicitly connects a local learning workspace for this exact work
71
+ snapshot, archive, population and author. Scope changes require a new explicit connection, not reuse.
72
+ 2. Start the daily host, then choose **Retain current work for learning**. This captures actual P01
73
+ observations and binds the real resulting case batch. An empty batch remains empty.
74
+ 3. Open the guided learning review. Review retained cases; connect qualified retained comparisons;
75
+ inspect **all** comparison artifacts. Record an explicit durable quality choice **before** revealing
76
+ model/cost. Artifact contents themselves may reveal identity; prior excerpt feedback remains prior
77
+ feedback, never a full-artifact or fresh-blind judgment.
78
+ 4. Record **adopt / reject / defer** separately. Quality preference is neither adoption authority nor
79
+ activation. Missing evidence, unresolved cases and unavailable artifacts have explicit defer reasons.
80
+ 5. The harness's **Trust / independent labels** forms freeze a scoped population/policy and separately
81
+ obtain independent case and unflagged-sample labels. A nomination, success exit or human click is not
82
+ calibration. Unconfigured/insufficient/stale trust remains silent or deferred; attention is not reset.
83
+
84
+ Deliberate review does **not** reserve earned automatic exposure. For an automatic closing request use
85
+ `/grants host closing`, pause new work and settle/cancel active children. The panel offers retained case
86
+ cards only under the original presence/quiescence/trust/attention rules. A visible acknowledgement is
87
+ separate from preparation. If trust changes, explicitly resume new work, then stop/start the host to bind
88
+ the original configured trust store; its retained attention is reused, never refilled.
89
+
90
+ ## Adopt settings for later orders
91
+
92
+ Under **`/grants learning` → Adoption / rollback for next orders**, create the scoped registry and prepare a named
93
+ model/effort profile. This records candidate bytes, **not evidence that they are better**. A qualified
94
+ comparison must bind that exact candidate digest to real outputs and its actual original hypothesis/case.
95
+ Use the guided review to link those retained origins; missing qualifying data remains a scoped defer.
96
+
97
+ **Activate adopted comparison** configures that binding, separately asks for independent current
98
+ eligibility and exact activation consent, then applies the original registry and links its real receipt.
99
+ Only model/effort for the same task IDs and definition names can vary. Task instructions, topology,
100
+ capabilities and assessment meaning cannot expand through this profile. Normal definition-digest/approval
101
+ checks still run; this does not freeze definition files or the project tree. Fixed-policy contracts are unchanged.
102
+ Subsequent bounded `/grants work` runs ask for fresh eligibility and pin the profile; active/old runs never
103
+ migrate. Ordinary direct `delegate` calls keep their explicit caller configuration. After selecting different work,
104
+ this menu explicitly reconnects that scope's saved settings or creates a fresh baseline; old stores remain.
105
+
106
+ **Roll back active adoption** shows the immutable restore digest and each task's exact retained model/effort
107
+ before separate consent for next orders. With nested adoptions, this is the previous profile, not necessarily
108
+ baseline. Missing or inconsistent registry lineage refuses instead of substituting a named profile.
109
+ If effect and learning linkage separate on failure, **Recover learning link** reconnects the original
110
+ registry observation without replaying activation/rollback.
111
+
112
+ After actual adopted work, **Link observed result from latest adopted order** shows real retained bytes,
113
+ asks for an independent outcome/note, previews its scoped classification and confirms the link.
114
+ **Unknown** is valid. Acceptance stays absent; runtime completion is not confirmed quality, calibrated
115
+ improvement or automatic rollback. More extensive independent observation entry is available in the harness.
116
+
117
+ ## Boundaries and local state
118
+
119
+ `.pi/work-setups/` holds private setup history; `.pi/work-current.json` selects work;
120
+ `.pi/learning-workspace.json` and `.pi/work-policy-registry.json` are navigation/binding records, not authority.
121
+ `.pi/work-registry-bindings/` preserves settings-store bindings per work scope.
122
+ Original bounded run/control stores live under the operator's local state directory; `.pi/work-last-run.json`
123
+ locates the most recent result. Do not hand-edit these records. Invalid/aliased/mismatched bytes refuse.
124
+
125
+ This governs **Pi's tool surface**, not a hostile process or same-UID actor. `bash` can escape governance;
126
+ workspace routing is not OS containment. Human authority, genuine labels, calibration and later outcomes
127
+ must actually exist. The UI cannot manufacture them, and this guide does not claim they have been obtained.
package/README.md CHANGED
@@ -21,6 +21,27 @@ for this project. See *What this governs, and what it does not*.
21
21
  > **Known gaps are stated rather than implied** — see *Status* at the end of this file. The largest is
22
22
  > deliberate: a child granted `bash` escapes governance entirely, by decision.
23
23
 
24
+ ## Everyday work and learning — 0.27.0 release candidate
25
+
26
+ Paired with planned **skill-harness 0.16.0**. Producer runtime is Sol-approved; feature PR #52 merged
27
+ with green CI at `b974963a7d0ba5a74fdafe331356c348a1fba565`. Release PR CI/merge, installed qualification
28
+ and publication remain pending. Release preparation changes metadata and test synchronization only,
29
+ not runtime or dependencies.
30
+
31
+ Start with the short installed **[PRODUCT-GUIDE.md](./PRODUCT-GUIDE.md)** and
32
+ **[current requirement register](./REQUIREMENTS.md)**. `/grants work` now authors/selects bounded multi-task
33
+ and dependent work with explicit agent/model/effort choices; `/grants host` and `/grants dashboard` show
34
+ outcomes, real active work and numbered controls; `/grants learning` opens retained cases, comparisons,
35
+ trust, quality/adoption choices and next-order settings through the loaded harness. These are source
36
+ implementation paths, not evidence that calibration, human acceptance or publication has occurred.
37
+ The historical worked-example transcripts below remain evidence for their stated versions.
38
+
39
+
40
+ Configured runtime skills are used directly at their installed paths; setup creates no duplicate
41
+ `.pi/skills/` copies. Pi package/resource filters and `PI_CODING_AGENT_DIR` apply. Existing local overrides
42
+ and `.pi/grants.env` stay intact. Only legacy npm packages never registered with Pi are copied by init;
43
+ `--force` applies only to those copies. Review old local copies before removing them to use package updates.
44
+
24
45
  ## What this governs, and what it does not
25
46
 
26
47
  **It governs the tool surface: which tools pi exposes to a model.** That part is structural, not advisory —
@@ -242,7 +263,7 @@ explicit **Relink and open** repair. **Not now** or dismissal leaves both the ex
242
263
  unchanged; protocol mismatches are not replaced by guesswork.
243
264
  A connected host can publish exact pre-authorized actions as short commands such as `pause-new-dispatch` or `defer-weekly`; the dashboard lists their human labels and accepts the key followed by Enter. The host resolves the key to its current CAS-bound request, so a person does not type JSON or tokens. Unknown/stale keys refuse before effects; raw JSON remains compatibility-only.
244
265
 
245
- With pi-daddy 0.25.0 and skill-harness 0.15.0 loaded, declare work, reload, then run `/grants host <fresh-id>`. Library hosts can use the explicit `pi-daddy/daily-dashboard-host` export. This creates one process-owned daily host, captures the current work/facts sources, publishes its private socket to `/grants dashboard`, and lists `pause-new-dispatch` or `resume-dispatch` plus `refresh-current-work`. Compatible recorded P01 snapshots and selected obligations also become labelled scope-successor, alternative, and put-first actions; choosing one still passes exact intent authority and host/selection/tip CAS, then atomically rebinds both persisted and current-session declared work before new ordinary dispatch is released. Refresh is a deliberate action that atomically mirrors the current declared ledger and advances the existing source checkpoint; periodic dashboard redraw remains read-only. Pausing blocks only new governed ordinary children; a child already running keeps its original caller/result. An active retained child also gets an exact `cancel-exec-…` action (up to the ordinary eight-child width); choosing it requests abort through the original handle without cancelling siblings or implying acceptance/rejection. `/grants host closing` declares two minutes of explicit closing presence; only a paused, reservation-free, ordinary-quiescent host offers case-card preparation, and absent trust qualification defers without spending the five-card budget. `/grants host stop` closes the host and never cancels a child. Restart uses a fresh id; no PID, user-entered JSON/CAS envelope or prior controller is recovered.
266
+ For the planned pi-daddy 0.27.0 / skill-harness 0.16.0 pair, start a fresh Pi session after installing the qualified releases (the immutable harness bridge survives `/reload`), declare work, then run `/grants host <fresh-id>`. Library hosts can use the explicit `pi-daddy/daily-dashboard-host` export. This creates one process-owned daily host, captures the current work/facts sources, publishes its private socket to `/grants dashboard`, and lists `pause-new-dispatch` or `resume-dispatch` plus `refresh-current-work`. Compatible recorded P01 snapshots and selected obligations also become labelled scope-successor, alternative, and put-first actions; choosing one still passes exact intent authority and host/selection/tip CAS, then atomically rebinds both persisted and current-session declared work before new ordinary dispatch is released. Refresh is a deliberate action that atomically mirrors the current declared ledger and advances the existing source checkpoint; periodic dashboard redraw remains read-only. Pausing blocks only new governed ordinary children; a child already running keeps its original caller/result. An active retained child also gets an exact `cancel-exec-…` action (up to the ordinary eight-child width); choosing it requests abort through the original handle without cancelling siblings or implying acceptance/rejection. `/grants host closing` declares two minutes of explicit closing presence; only a paused, reservation-free, ordinary-quiescent host offers case-card preparation, and absent trust qualification defers without spending the five-card budget. `/grants host stop` refuses while paused, busy, pending or acknowledgement-unknown: resume new work in the original dashboard first, and reconcile pending controls explicitly. Refusal preserves the original host/socket; unknown effects are never silently released. A successful stop closes the host and never cancels a child. Restart uses a fresh id; no PID, user-entered JSON/CAS envelope or prior controller is recovered.
246
267
 
247
268
  The separate `pi-daddy/measured-order` export composes no-tool measured Sol/Terra sessions into a bounded dependent order. Every retry and deterministic output contract is predeclared; bounded JSON projection contracts admit free-form prose without pre-knowing the whole artifact hash, and dependent prompts consume the actual retained predecessor output with its observed seal. A reopened controller treats another owner's unfinished claim as unknown and cannot replay it; an independently authorized exact acknowledgement can consume that schedule position, but never refunds or settles the original resource reservation. See ADR-0072.
248
269
 
@@ -785,7 +806,7 @@ Subpaths are exported individually (`pi-daddy/resolve`, `/ledger`, `/spawn`, `/d
785
806
  ```bash
786
807
  pi install npm:pi-daddy # as a pi extension
787
808
  npm i pi-daddy # as a library (the resolver, ledger and spawn planner are pure)
788
- npx pi-daddy init # as a command: scaffold .pi/skills/ and .pi/grants.env from installed
809
+ npx pi-daddy init # as a command: prepare .pi/grants.env using enabled installed
789
810
  # skill packages — see the worked example above
790
811
  npx pi-daddy work add --id daily-1 --outcome "Ship the declared slice"
791
812
  # select one digest-only obligation; /reload then /grants dashboard
@@ -0,0 +1,41 @@
1
+ # Current producer requirement register
2
+
3
+ **Release candidate:** pi-daddy **0.27.0**, paired with planned skill-harness **0.16.0**, implementing the
4
+ 2026-09-14 proposal. This is current product scope, not an npm/release receipt or a replacement for dated
5
+ evidence. Read [PRODUCT-GUIDE.md](./PRODUCT-GUIDE.md).
6
+
7
+ | Requirement | Supported entry point / implementation | Boundary / remaining evidence |
8
+ | --- | --- | --- |
9
+ | Outcome-first side panel; Running/Waiting/Needs you/Finished/Disconnected | `/grants host`, `/grants dashboard`; `daily-panel`, existing host/socket | Actual owner/observations only. Unknown model/effort stays unknown. Full diagnostics/history under Details. |
10
+ | Real available steering and acknowledgement | Numbered exact-frame choices; pause/resume, original-child cancellation, explicit capture and closing | Repaint cannot remap a number. Stop refuses outstanding pause/pending/unknown control; resume first. No action on reads; no recovered controller; pending/unknown is not applied. |
11
+ | Normal multi-task authoring/selection | `/grants work new`, `/grants work`; `work-setup` P01 builders and private retained text | 1–8 tasks, explicit dependencies/model/effort/concurrency. No ledger JSON authoring. Legacy single-work and ordinary delegate/all/chain remain. |
12
+ | Scope/alternative/priority changes | Work menu → existing daily intent owner/CAS; selected-task binding for direct delegate | Topology changes need new work. Instructions/configuration may be deliberately revised; permission semantics do not widen. Active orders never rebind. |
13
+ | Bounded parallel/dependent work and results | `/grants work run`, `/grants work results`; `work-run`, original `runOneDelegation` | Subtree budget, 1–8 concurrency, original child timeout/output/approval/grant guards. Failed dependencies block their branch. Pause waits; no retry/relaunch, no ordinary dollar/token cap. |
14
+ | Public retained learning and scope-bound trust | `/grants learning` → existing harness workspace/wizard via original bridge | Raw selected snapshot digest + archive/population/author pinned. Deliberate review is not earned exposure. Actual labels/calibration may be absent. |
15
+ | Full quality choice before model/cost reveal | Harness full-artifact editor, durable quality choice, separate reveal | Prior excerpts/previously exposed content remain limited evidence. Human full review/preference has not been fabricated by implementation. |
16
+ | Distinct adopt/reject/defer; next-order settings | Learning → Adoption / rollback; `ordinary-work-policy-v1` and original adoption predicates/control journals | Exact model/effort candidate only; unchanged definition names/task IDs/scope/assessment; not a definition-file/tree pin. Current confirmed cases/origin/choice/adopt intent plus independent eligibility/activation required. No false fixed-policy profile. |
17
+ | Rollback, pinning and later observations | Next-order registry → actual receipt linkage/recovery; latest adopted-order output observation | Rollback consent shows the retained restore digest and every task model/effort. Activation/recovery preserve exact original request/adoption proof. Old runs keep original pins. Real confirmed outcomes require independent consent; unknown is valid. No inferred acceptance, calibration, automatic rollback or efficacy. |
18
+ | Installed guide/public contracts | `pi-daddy guide` / `current`, package root/subpath exports and Pi extension | Existing frozen governance/retention/fixed-policy contracts and historical fixtures are preserved. No new runtime dependency or Principal-specific policy. |
19
+
20
+ ## Evidence status and release gates
21
+
22
+ Implementation is present in source. Focused regression files accompany setup, scheduler, panel/action
23
+ binding, original late-admission guard, learning composition and additive registry. Legacy diagnostic view
24
+ fixtures remain checked through `renderDailyDetails`; ordinary `renderDailyView` is the concise panel.
25
+
26
+ **Producer runtime is Sol-approved; feature PR #52 merged with green CI at
27
+ `b974963a7d0ba5a74fdafe331356c348a1fba565`. Release PR CI/merge, installed cross-package/Herdr
28
+ qualification and publication remain pending coordinator gates.** A narrow type/build/unit or
29
+ bridge check is not evidence of live model quality, calibrated trust, actual adoption/rollback or later
30
+ production improvement. Exact candidate/check receipts belong with the delivery evidence, not invented
31
+ inside this portable register.
32
+
33
+ No model experiments, nested review agents, mutation programme, global install, release or historical
34
+ evidence rewrite is required by this implementation step. Existing CI/ordinary behavioral checks remain.
35
+
36
+ ## Data that must be real
37
+
38
+ A comparison without qualified retained outputs/original linked evidence is deferred. A trust policy
39
+ without sufficient independent scoped labels stays silent/deferred. A setting without independent current
40
+ eligibility/approval does not activate. A later outcome without an actual adopted run and retained bytes
41
+ stays unavailable/unknown. These are explicit operational states, not invitations to supply fake data.
package/dist/catalog.d.ts CHANGED
@@ -38,13 +38,7 @@ export interface Catalog {
38
38
  export declare function classifyToolNames(observed: string[]): CatalogEntry[];
39
39
  /** Skill roots pi discovers, project first. */
40
40
  export declare function skillDirs(cwd: string): string[];
41
- /**
42
- * Discover skills: a directory containing `SKILL.md` is one skill named after the directory; a top-level
43
- * `.md` file is a skill named after the file. Mirrors pi's documented convention.
44
- *
45
- * Directories are not descended into beyond one level, matching pi's rule that a directory containing
46
- * `SKILL.md` is a single skill rather than a tree to explore.
47
- */
41
+ /** Enumerate the same enabled Pi resource paths as definitions, preserving resolver precedence. */
48
42
  export declare function loadSkills(cwd: string): Promise<CatalogEntry[]>;
49
43
  /**
50
44
  * Spawnable definitions, as `agent:<name>` capabilities.
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGnF,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3F,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0CAA0C;IAC1C,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE,CAAC;IAC3C,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;CACtC;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAMpE;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA+BrE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,YAAY,EAAE,CAM3F;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAIjG;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAY5D;AAED,qGAAqG;AACrG,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,4GAA4G;IAC5G,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCnB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,EAAE,CAgC3F;AA6DD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAuB1F;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO9E"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGnF,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3F,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0CAA0C;IAC1C,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE,CAAC;IAC3C,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;CACtC;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAMpE;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C;AAED,mGAAmG;AACnG,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,YAAY,EAAE,CAM3F;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAIjG;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAY5D;AAED,qGAAqG;AACrG,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,4GAA4G;IAC5G,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCnB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,EAAE,CAgC3F;AA6DD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAuB1F;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO9E"}
package/dist/catalog.js CHANGED
@@ -17,8 +17,8 @@
17
17
  * also how pi's `--tools` matches — and marked `kind: "extension"` for display. `ext:` ids remain
18
18
  * supported for hand-authored grants; `deriveOwnGrant` already matches them by bare name.
19
19
  */
20
- import { readdir, stat } from "node:fs/promises";
21
- import { homedir } from "node:os";
20
+ import { getAgentDir } from "@earendil-works/pi-coding-agent";
21
+ import { resolveSkillResources, skillResourceName } from "./skill-resources.js";
22
22
  import { join } from "node:path";
23
23
  import { loadDefinitions } from "./definitions.js";
24
24
  import { PI_BUILTIN_TOOLS, WILDCARD } from "./pi-tools.js";
@@ -35,47 +35,15 @@ export function classifyToolNames(observed) {
35
35
  }
36
36
  /** Skill roots pi discovers, project first. */
37
37
  export function skillDirs(cwd) {
38
- return [join(cwd, ".pi", "skills"), join(homedir(), ".pi", "agent", "skills")];
38
+ return [join(cwd, ".pi", "skills"), join(getAgentDir(), "skills")];
39
39
  }
40
- /**
41
- * Discover skills: a directory containing `SKILL.md` is one skill named after the directory; a top-level
42
- * `.md` file is a skill named after the file. Mirrors pi's documented convention.
43
- *
44
- * Directories are not descended into beyond one level, matching pi's rule that a directory containing
45
- * `SKILL.md` is a single skill rather than a tree to explore.
46
- */
40
+ /** Enumerate the same enabled Pi resource paths as definitions, preserving resolver precedence. */
47
41
  export async function loadSkills(cwd) {
48
42
  const found = new Map();
49
- for (const dir of skillDirs(cwd)) {
50
- let names;
51
- try {
52
- names = await readdir(dir);
53
- }
54
- catch {
55
- continue; // absent skill root is normal
56
- }
57
- for (const name of names.sort()) {
58
- const path = join(dir, name);
59
- try {
60
- const info = await stat(path);
61
- if (info.isDirectory()) {
62
- const inner = await readdir(path).catch(() => []);
63
- if (inner.includes("SKILL.md") && !found.has(name)) {
64
- found.set(name, { capability: `skill:${name}`, kind: "skill", source: path });
65
- }
66
- }
67
- else if (name.endsWith(".md")) {
68
- const skill = name.replace(/\.md$/, "");
69
- if (!found.has(skill)) {
70
- found.set(skill, { capability: `skill:${skill}`, kind: "skill", source: path });
71
- }
72
- }
73
- }
74
- catch {
75
- // An unreadable entry is simply not catalogued; it therefore cannot be granted, which is the
76
- // fail-closed direction.
77
- }
78
- }
43
+ for (const { path } of (await resolveSkillResources(cwd)).skills) {
44
+ const name = skillResourceName(path);
45
+ if (!found.has(name))
46
+ found.set(name, { capability: `skill:${name}`, kind: "skill", source: path });
79
47
  }
80
48
  return [...found.values()];
81
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * `pi-daddy` — the command line, which today has exactly one subcommand.
3
+ * `pi-daddy` — scaffolding, read-only work inspection and the installed product guide.
4
4
  *
5
5
  * Thin on purpose: argv in, `discoverSkillPackages` + `planInit` + `applyInit`, report out. Every decision
6
6
  * lives in `./init.ts`, `./grant-env.ts` and `./skill-packages.ts` as functions that touch no argv and print
@@ -13,7 +13,7 @@
13
13
  * was accepted in silence — the exact failure the check's own comment says it prevents.
14
14
  */
15
15
  export interface ParsedArgs {
16
- command: "init" | "work-add" | "help" | "version";
16
+ command: "init" | "work-add" | "work-list" | "work-show" | "guide" | "current" | "help" | "version";
17
17
  dir?: string;
18
18
  force: boolean;
19
19
  id?: string;
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AA6BH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqDpD;AAwJD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC1D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AAoCH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACpG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAwDpD;AAyJD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkD1D"}
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * `pi-daddy` — the command line, which today has exactly one subcommand.
3
+ * `pi-daddy` — scaffolding, read-only work inspection and the installed product guide.
4
4
  *
5
5
  * Thin on purpose: argv in, `discoverSkillPackages` + `planInit` + `applyInit`, report out. Every decision
6
6
  * lives in `./init.ts`, `./grant-env.ts` and `./skill-packages.ts` as functions that touch no argv and print
@@ -20,22 +20,29 @@ import { UnsafeGrantError } from "./grant-env.js";
20
20
  import { applyInit, countDeclaring, planInit } from "./init.js";
21
21
  import { registeredWorkspaceIds } from "./workspace.js";
22
22
  import { discoverSkillPackages, skillPackageRoots } from "./skill-packages.js";
23
- import { declareWork } from "./work-command.js";
23
+ import { declareWork, loadDeclaredWork } from "./work-command.js";
24
+ import { listWorkSetups, workPresentation } from "./work-setup.js";
25
+ import { panelText } from "./daily-panel.js";
24
26
  const USAGE = `pi-daddy — capability governance for pi sub-agents
25
27
 
26
28
  Usage:
27
- pi-daddy init [--force] [--dir <path>] scaffold .pi/skills/ and .pi/grants.env from installed
29
+ pi-daddy init [--force] [--dir <path>] prepare .pi/grants.env from enabled installed
28
30
  packages that declare skills (package.json "pi": {"skills": …})
29
31
  pi-daddy work add --id <id> --outcome <text> [--dir <path>]
30
32
  declare one current obligation for ordinary delegation
33
+ pi-daddy work list | work show [--dir <path>]
34
+ inspect saved setups or selected outcome (no model calls)
35
+ In Pi: /grants work guided multi-task/model/effort/dependency setup and run
36
+ /grants learning retained review, trust, adoption and later outcomes
37
+ pi-daddy guide | current installed product guide / current requirement register
31
38
  pi-daddy --help | --version
32
39
 
33
- init copies each declared SKILL.md into .pi/skills/ and writes a grant naming exactly what those files
34
- declare. It never chooses a ceiling: a skill declaring no \`allowed-tools\` is copied with a commented
35
- placeholder and stays unspawnable until you fill it in. Capabilities that can change your machine
40
+ init references skills already enabled in Pi at their installed or local paths. Legacy unregistered npm
41
+ skills are copied into .pi/skills/. It never chooses a ceiling: missing or unusable \`allowed-tools\`
42
+ stays unspawnable. Capabilities that can change your machine
36
43
  (bash, write, edit) are written COMMENTED — uncomment them deliberately. Review the files, then commit.
37
44
 
38
- --force rewrite the SKILL.md copies that already exist. This DISCARDS any \`allowed-tools\` you added.
45
+ --force rewrite legacy unregistered npm SKILL.md copies that already exist. This DISCARDS any \`allowed-tools\` you added.
39
46
  It never rewrites .pi/grants.env — delete that file if you want it regenerated.`;
40
47
  /**
41
48
  * Parse argv. Pure, exported, and tested — argv handling is where both of this file's defects lived.
@@ -53,12 +60,15 @@ export function parseArgs(argv) {
53
60
  if (args.includes("--version") || args.includes("-v"))
54
61
  return { command: "version", force: false, errors: [] };
55
62
  const [command, ...tail] = args;
63
+ if (command === "guide" || command === "current")
64
+ return { command, force: false, errors: tail.length ? [`${command} takes no arguments`] : [] };
56
65
  if (command !== "init" && command !== "work")
57
66
  return { command: "help", force: false, errors: [`unknown command "${command}"`] };
58
67
  const work = command === "work";
59
- const rest = work && tail[0] === "add" ? tail.slice(1) : tail;
60
- if (work && tail[0] !== "add")
61
- return { command: "work-add", force: false, errors: ["work needs subcommand add"] };
68
+ const workVerb = tail[0];
69
+ const rest = work ? tail.slice(1) : tail;
70
+ if (work && !["add", "list", "show"].includes(workVerb))
71
+ return { command: "work-add", force: false, errors: ["work needs add, list or show; /grants work opens guided setup in Pi"] };
62
72
  const errors = [];
63
73
  let dir;
64
74
  let force = false;
@@ -68,7 +78,7 @@ export function parseArgs(argv) {
68
78
  if (arg === "--force" && !work) {
69
79
  force = true;
70
80
  }
71
- else if (arg === "--id" && work) {
81
+ else if (arg === "--id" && work && workVerb === "add") {
72
82
  const value = rest[i + 1];
73
83
  if (value === undefined || value.startsWith("-"))
74
84
  errors.push("--id needs a value");
@@ -77,7 +87,7 @@ export function parseArgs(argv) {
77
87
  i += 1;
78
88
  }
79
89
  }
80
- else if (arg === "--outcome" && work) {
90
+ else if (arg === "--outcome" && work && workVerb === "add") {
81
91
  const value = rest[i + 1];
82
92
  if (value === undefined || value.startsWith("-"))
83
93
  errors.push("--outcome needs text");
@@ -106,6 +116,8 @@ export function parseArgs(argv) {
106
116
  errors.push(`unknown option ${arg}`);
107
117
  }
108
118
  }
119
+ if (work && workVerb !== "add")
120
+ return { command: workVerb === "list" ? "work-list" : "work-show", force: false, errors, ...(dir ? { dir } : {}) };
109
121
  if (work) {
110
122
  if (!id && !errors.some(error => error.startsWith("--id")))
111
123
  errors.push("--id needs a value");
@@ -123,7 +135,7 @@ async function init(cwd, force) {
123
135
  // only `<cwd>/node_modules` and said "npm install …" — so an operator who had just run
124
136
  // `pi install npm:principal-pi-skills`, which installs to the agent root, was told to install a package
125
137
  // they had already installed (R-75).
126
- console.log(`pi-daddy init: no installed package declares skills (a package.json "pi": {"skills": [...]} ` +
138
+ console.log(`pi-daddy init: no enabled configured skills or unregistered npm package declares skills (a package.json "pi": {"skills": [...]} ` +
127
139
  `field). Nothing to scaffold.\n\nLooked in:\n` +
128
140
  skillPackageRoots(cwd).map((r) => ` ${r}\n`).join("") +
129
141
  `\n pi install npm:principal-pi-skills # seven skills, and registers it with pi\n` +
@@ -160,12 +172,14 @@ async function init(cwd, force) {
160
172
  // `--force` is destructive and says so at the moment it acts, not only in `--help` — which is the one
161
173
  // place the operator running the command is not reading.
162
174
  if (force) {
163
- const existing = plan.skills.length;
175
+ const existing = plan.skills.filter(s => !s.referenced).length;
164
176
  console.log(`\n--force: rewriting up to ${existing} SKILL.md cop${existing === 1 ? "y" : "ies"} from the installed\n` +
165
177
  `packages. Any \`allowed-tools\` you wrote in them is DISCARDED. .pi/grants.env is never rewritten.`);
166
178
  }
167
179
  const outcome = await applyInit(plan, { force });
168
180
  const short = (path) => relative(cwd, path) || path;
181
+ for (const skill of plan.skills.filter(s => s.referenced))
182
+ console.log(`using ${short(skill.sourcePath)} (enabled in Pi; no copy)`);
169
183
  for (const path of outcome.written)
170
184
  console.log(`wrote ${short(path)}`);
171
185
  for (const path of outcome.kept)
@@ -258,6 +272,22 @@ export async function main(argv) {
258
272
  console.log(USAGE);
259
273
  return 0;
260
274
  }
275
+ if (parsed.command === "guide" || parsed.command === "current") {
276
+ console.log(await readFile(new URL(parsed.command === "guide" ? "../PRODUCT-GUIDE.md" : "../REQUIREMENTS.md", import.meta.url), "utf8"));
277
+ return 0;
278
+ }
279
+ if (parsed.command === "work-list" || parsed.command === "work-show") {
280
+ const cwd = resolvePath(parsed.dir ?? process.cwd());
281
+ if (parsed.command === "work-list") {
282
+ const setups = await listWorkSetups(cwd);
283
+ console.log(setups.map((s, i) => `${i + 1}. ${panelText(s.setup.outcome)} — ${s.setup.tasks.length} tasks; up to ${s.setup.maxParallel} parallel`).join("\n") || "No saved multi-task setups. In Pi: /grants work");
284
+ }
285
+ else {
286
+ const state = await loadDeclaredWork(resolvePath(cwd, ".pi/work-current.json")), view = state ? await workPresentation(state) : null;
287
+ console.log(view ? [panelText(view.outcome), ...view.obligations.map(o => `- ${panelText(o.outcome)}`)].join("\n") : state ? "Selected legacy work; outcome text unavailable" : "No work selected. In Pi: /grants work");
288
+ }
289
+ return 0;
290
+ }
261
291
  if (parsed.command === "work-add") {
262
292
  const declared = await declareWork({
263
293
  cwd: resolvePath(parsed.dir ?? process.cwd()),