@msdavid/pi-distro 0.2.0 → 0.4.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/CHANGELOG.md +61 -1
- package/README.md +85 -14
- package/docs/authoring.md +89 -15
- package/extensions/catalogue.ts +97 -52
- package/extensions/deploy.ts +37 -9
- package/extensions/github.ts +163 -2
- package/extensions/index.ts +4 -1
- package/extensions/info.ts +53 -26
- package/extensions/pick.ts +29 -13
- package/extensions/resolve.ts +49 -8
- package/extensions/save.ts +82 -11
- package/extensions/show.ts +30 -7
- package/extensions/undeploy.ts +78 -41
- package/extensions/update.ts +1 -1
- package/extensions/util.ts +81 -11
- package/package.json +1 -2
- package/skills/pi-distro/SKILL.md +143 -51
- package/harnesses/minimal/README.md +0 -21
- package/harnesses/minimal/files/AGENTS.md +0 -20
- package/harnesses/minimal/files/settings.json +0 -4
- package/harnesses/minimal/harness.md +0 -24
- package/harnesses/pi-distro-one/README.md +0 -50
- package/harnesses/pi-distro-one/files/.pi/extensions/claude-statusline.ts +0 -220
- package/harnesses/pi-distro-one/files/AGENTS.md +0 -166
- package/harnesses/pi-distro-one/files/settings.json +0 -9
- package/harnesses/pi-distro-one/harness.md +0 -79
- package/harnesses/web-fullstack/README.md +0 -25
- package/harnesses/web-fullstack/files/.pi/prompts/review.md +0 -12
- package/harnesses/web-fullstack/files/AGENTS.md +0 -37
- package/harnesses/web-fullstack/files/settings.json +0 -11
- package/harnesses/web-fullstack/harness.md +0 -40
|
@@ -28,7 +28,59 @@ Never silently skip, silently overwrite, silently substitute, or silently choose
|
|
|
28
28
|
If a decision is ambiguous or the user is unsure, explain the tradeoffs and let
|
|
29
29
|
them choose. **The agent proposes; the user disposes.** Every other rule in this
|
|
30
30
|
skill (merge-don't-clobber, package-redundancy, version-aware deploy, the GitHub
|
|
31
|
-
trust gate) is a specific instance of this principle.
|
|
31
|
+
trust gate, the scope rule) is a specific instance of this principle.
|
|
32
|
+
|
|
33
|
+
## Scope model: local vs global
|
|
34
|
+
|
|
35
|
+
pi supports two install scopes, and pi-distro lets the user choose per component:
|
|
36
|
+
|
|
37
|
+
- **Project-local** (default) — writes to `./.pi/` (packages via `pi install -l` →
|
|
38
|
+
`./.pi/settings.json`; extensions/skills/prompts/themes into `./.pi/<type>/`; settings into
|
|
39
|
+
`./.pi/settings.json`; AGENTS.md at `./AGENTS.md`). Scoped to this project only. This is the
|
|
40
|
+
default philosophy — different projects get different harnesses.
|
|
41
|
+
- **Global** — writes to `~/.pi/agent/` (packages via `pi install` →
|
|
42
|
+
`~/.pi/agent/settings.json`; extensions/skills/prompts/themes into `~/.pi/agent/<type>/`;
|
|
43
|
+
settings into `~/.pi/agent/settings.json`; AGENTS.md at `~/.pi/agent/AGENTS.md`). Shared
|
|
44
|
+
across **every project and session on this machine**. Opt-in, never the default.
|
|
45
|
+
|
|
46
|
+
pi merges global and project-local (project-local shadows global on conflict).
|
|
47
|
+
|
|
48
|
+
### Per-type default scopes
|
|
49
|
+
|
|
50
|
+
| Component type | Default scope | Global allowed? |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| Packages | local | ✅ |
|
|
53
|
+
| Extensions | local | ✅ |
|
|
54
|
+
| Skills | local | ✅ |
|
|
55
|
+
| Prompts | local | ✅ |
|
|
56
|
+
| Themes | **global** | ✅ |
|
|
57
|
+
| settings.json merge | local | ⚠️ guarded (explicit confirm) |
|
|
58
|
+
| SYSTEM.md / APPEND_SYSTEM.md | local | ⚠️ double-confirm |
|
|
59
|
+
| AGENTS.md | local | ⚠️ guarded (explicit confirm) |
|
|
60
|
+
|
|
61
|
+
### Deployment-plan procedure
|
|
62
|
+
|
|
63
|
+
At the start of a `deploy` (and for the selected items in a `pick`), the kickoff includes a
|
|
64
|
+
**scope rule** with this procedure. Follow it exactly:
|
|
65
|
+
|
|
66
|
+
1. **Build a deployment plan** grouping every installable component by type, each with its
|
|
67
|
+
default scope (per the table above, or the author's `(global)` hint if the directives
|
|
68
|
+
mark one). Render it as markdown so the user sees the whole picture.
|
|
69
|
+
2. **Offer three presets** via `ctx.ui.select`:
|
|
70
|
+
- **(a) Accept defaults** — keep every component at its default scope. Recommended.
|
|
71
|
+
- **(b) All-global (where safe)** — flip every global-allowed component to global;
|
|
72
|
+
dangerous types (settings, SYSTEM.md, AGENTS.md) stay local with a surfaced warning.
|
|
73
|
+
- **(c) Customize** — walk items one at a time, offering `local` / `global` / `skip`
|
|
74
|
+
each (`ctx.ui.select` is single-select). Cancel on an item = skip that item.
|
|
75
|
+
3. **Scope-safety guard** — when a dangerous type's final scope is global, surface the blast
|
|
76
|
+
radius ("affects every project/session on this machine") and require explicit confirm.
|
|
77
|
+
For SYSTEM.md/APPEND_SYSTEM.md global, require a second confirm.
|
|
78
|
+
4. **Install/place at the chosen scope** — `pi install -l` (local) or `pi install` (global)
|
|
79
|
+
for packages; write files to `./.pi/...` (local) or `~/.pi/agent/...` (global).
|
|
80
|
+
5. **Provenance does not record scope.** At `undeploy`/`status` time, the extension detects
|
|
81
|
+
placement by checking both locations (`./.pi/...` and `~/.pi/agent/...`, plus `pi list`).
|
|
82
|
+
So note in your final report which components went global, so the user knows where to find
|
|
83
|
+
and remove them.
|
|
32
84
|
|
|
33
85
|
## `/pi-distro deploy` — Distro Deployment
|
|
34
86
|
|
|
@@ -40,13 +92,15 @@ When you receive a kickoff message from the `deploy` command, it contains:
|
|
|
40
92
|
- The merge-don't-clobber rule.
|
|
41
93
|
- An instruction to write/update provenance.
|
|
42
94
|
|
|
43
|
-
The distro may come from the local catalogue (
|
|
95
|
+
The distro may come from the local catalogue (official, fetched from GitHub, or
|
|
96
|
+
user-saved) or directly from another GitHub repo
|
|
44
97
|
(`/pi-distro deploy owner/repo`). For GitHub distros, the extension has already
|
|
45
98
|
cloned the repo, displayed a security warning + preview, and obtained the user's
|
|
46
99
|
explicit confirmation before sending the kickoff — so you can proceed normally.
|
|
47
100
|
The provenance `sourceCatalogue` will be `github:owner/repo[/subpath]`.
|
|
48
101
|
Bundled files for GitHub distros are located in a temp directory (`/tmp/`) — copy
|
|
49
|
-
them from there as usual
|
|
102
|
+
them from there as usual, then **remove the temporary clone** (the kickoff names the
|
|
103
|
+
exact `rm -rf` target) so repeated GitHub deploys don't accumulate clones in `/tmp`.
|
|
50
104
|
|
|
51
105
|
### Deployment steps
|
|
52
106
|
|
|
@@ -78,17 +132,20 @@ them from there as usual.
|
|
|
78
132
|
|
|
79
133
|
If the section already exists (re-deploy), replace only that delimited section.
|
|
80
134
|
|
|
81
|
-
3. **Install pi packages —
|
|
82
|
-
|
|
83
|
-
|
|
135
|
+
3. **Install pi packages — scope + redundancy/conflict detection.** If the directives
|
|
136
|
+
list pi packages to install, first run the **scope** flow (deployment-plan + preset from
|
|
137
|
+
the Scope model above) to decide local vs global per package, then run the
|
|
138
|
+
**redundancy/conflict** check, then install at the chosen scope — `pi install -l <package>`
|
|
139
|
+
for **project-local** or `pi install <package>` for **global** — but **only after
|
|
84
140
|
confirming with the user** AND after evaluating tool redundancy/conflicts:
|
|
85
141
|
|
|
86
|
-
**Do NOT pre-add packages to
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
settings
|
|
90
|
-
|
|
91
|
-
|
|
142
|
+
**Do NOT pre-add packages to `settings.json` by hand.** `pi install -l` (local) and
|
|
143
|
+
`pi install` (global) are the single mechanisms that register a package: each installs the
|
|
144
|
+
package AND appends the source to the corresponding settings file (`./.pi/settings.json` or
|
|
145
|
+
`~/.pi/agent/settings.json`) on success. If an install fails, nothing is added to settings
|
|
146
|
+
— so settings never contains a package that isn't actually installed. (This is why the
|
|
147
|
+
bundled `settings.json` does not list packages — they are registered by `pi install`, not
|
|
148
|
+
by merging a `packages` array.)
|
|
92
149
|
|
|
93
150
|
**Redundancy/conflict evaluation (do this BEFORE installing each package):** Some packages
|
|
94
151
|
may provide tools that overlap with already-active tools. This can be:
|
|
@@ -100,8 +157,9 @@ them from there as usual.
|
|
|
100
157
|
leaving the user with duplicate capability and a confusing tool set.
|
|
101
158
|
You (the agent) must **evaluate** this — it requires judgment, not just string matching.
|
|
102
159
|
Before installing each package:
|
|
103
|
-
1. Read the **already-active tools** and **
|
|
104
|
-
"Current project state" section, and run `pi list`
|
|
160
|
+
1. Read the **already-active tools**, **project packages**, and **global packages** from
|
|
161
|
+
the kickoff's "Current project state" section, and run `pi list` for a fresh view of
|
|
162
|
+
both local and global packages.
|
|
105
163
|
2. For each to-be-installed package, compare its stated purpose (from the directives)
|
|
106
164
|
against the already-active tools. Ask: *does this package do something an existing tool
|
|
107
165
|
already does?* Consider both exact name matches and semantic overlap.
|
|
@@ -109,17 +167,20 @@ them from there as usual.
|
|
|
109
167
|
a choice and explain the overlap:
|
|
110
168
|
- **(a) Skip** — the capability already exists; don't install the package. Note this
|
|
111
169
|
in the provenance/deployment report.
|
|
112
|
-
- **(b) Replace** —
|
|
113
|
-
`pi remove <
|
|
170
|
+
- **(b) Replace** — remove the overlapping package from wherever it lives
|
|
171
|
+
(`pi remove -l <overlapping-package>` if project-local, `pi remove <pkg>` if global),
|
|
172
|
+
then install the new one at the chosen scope (`pi install -l <new-package>` for local
|
|
173
|
+
or `pi install <new-package>` for global).
|
|
114
174
|
- **(c) Keep both** — install it anyway. Use this when the user prefers the new tool,
|
|
115
175
|
or when the two tools serve subtly different purposes despite surface similarity.
|
|
116
176
|
- **(d) Cancel** — don't install anything.
|
|
117
177
|
4. Only proceed with the user's chosen option.
|
|
118
178
|
|
|
119
|
-
4. **Create hooks / extensions / prompts / skills.** If the directives instruct creating
|
|
120
|
-
|
|
121
|
-
using the bundled source files or the
|
|
122
|
-
merge-don't-clobber rule
|
|
179
|
+
4. **Create hooks / extensions / prompts / skills / themes.** If the directives instruct creating
|
|
180
|
+
these, place them at the **chosen scope**: `./.pi/<type>/` (local) or `~/.pi/agent/<type>/`
|
|
181
|
+
(global) — themes default to global. Create them using the bundled source files or the
|
|
182
|
+
directives' instructions. Apply the same merge-don't-clobber rule (at whichever target
|
|
183
|
+
path) for any that already exist.
|
|
123
184
|
|
|
124
185
|
5. **Write/update provenance.** When the deployment is complete, write (or update)
|
|
125
186
|
`./.pi/harness.md` in the project directory. The provenance file is itself a valid
|
|
@@ -130,15 +191,15 @@ them from there as usual.
|
|
|
130
191
|
<!-- pi-distro provenance
|
|
131
192
|
appliedHarness: <name>
|
|
132
193
|
appliedVersion: <version>
|
|
133
|
-
sourceCatalogue: <user|
|
|
194
|
+
sourceCatalogue: <user|github:owner/repo[/subpath]>
|
|
134
195
|
lastUpdated: <ISO8601>
|
|
135
196
|
-->
|
|
136
197
|
```
|
|
137
198
|
|
|
138
199
|
- `appliedHarness`: the name of the distro that was deployed.
|
|
139
200
|
- `appliedVersion`: the version from the distro frontmatter.
|
|
140
|
-
- `sourceCatalogue`: `
|
|
141
|
-
|
|
201
|
+
- `sourceCatalogue`: `user` if from `~/.pi/harnesses/`, or
|
|
202
|
+
`github:owner/repo[/subpath]` (official distros are `github:msdavid/pi-distro/harnesses/<name>`).
|
|
142
203
|
- `lastUpdated`: current timestamp in ISO 8601 format.
|
|
143
204
|
|
|
144
205
|
6. **Report.** Summarise what was deployed, merged, skipped, and any packages installed.
|
|
@@ -200,21 +261,27 @@ your reference. Follow the selection procedure in the kickoff exactly:
|
|
|
200
261
|
|
|
201
262
|
1. **Walk the user through each category, one at a time.** Use `ctx.ui.select`/`ctx.ui.confirm`
|
|
202
263
|
to let them pick which items to apply. Present each item with its one-line purpose (from
|
|
203
|
-
the directives)
|
|
264
|
+
the directives) and its author scope hint (`[local]`/`[global]`). Let them select any
|
|
265
|
+
subset — including none (skip the category).
|
|
204
266
|
2. **Surface dependencies.** As the user selects, evaluate cross-component dependencies and
|
|
205
267
|
warn about them before applying. Example: if they pick an extension that references a
|
|
206
268
|
theme provided by a package they skipped, point that out and ask whether to also install
|
|
207
269
|
the package or skip the extension. Reason about the dependencies from the directives
|
|
208
270
|
prose — this is a judgment task. Never silently install a dependency the user didn't pick.
|
|
209
|
-
3. **
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
271
|
+
3. **Choose scope (local vs global).** For the selected components, run the deployment-plan
|
|
272
|
+
+ preset flow from the Scope model above (accept-defaults / all-global-where-safe /
|
|
273
|
+
customize). The plan is built from only the selected components. Apply the scope-safety
|
|
274
|
+
guard for dangerous types.
|
|
275
|
+
4. **Apply only the selected components** at the chosen scope with the same rules as a full
|
|
276
|
+
deploy: merge-don't-clobber (at whichever target path), package-redundancy check,
|
|
277
|
+
`pi install -l` (local) or `pi install` (global) for packages (after confirming),
|
|
278
|
+
copy/merge for files (overwrite / keep theirs / merge).
|
|
279
|
+
5. **Do NOT write standard provenance.** A partial deploy is a custom config, not "this
|
|
213
280
|
distro was applied." Do not write `appliedHarness`/`appliedVersion` provenance. Instead,
|
|
214
281
|
after applying, suggest the next step: "This is a custom configuration. Run
|
|
215
282
|
`/pi-distro save` to snapshot it as your own reusable distro" (which writes clean
|
|
216
283
|
provenance for the saved distro).
|
|
217
|
-
|
|
284
|
+
6. **Recommend a restart** if any packages or extensions were installed.
|
|
218
285
|
|
|
219
286
|
The natural loop is: `/pi-distro pick <distro-A>` → `/pi-distro pick <distro-B>` →
|
|
220
287
|
`/pi-distro save` (snapshot the combined result as a new distro). This is how users build
|
|
@@ -235,19 +302,29 @@ directives against the *current* project state and let the user decide what to r
|
|
|
235
302
|
|
|
236
303
|
Follow the removal procedure in the kickoff exactly:
|
|
237
304
|
|
|
238
|
-
1. **Walk the user through each removal category, one at a time
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
- **(
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
305
|
+
1. **Walk the user through each removal category, one at a time.** A distro may have
|
|
306
|
+
placed components at EITHER scope — the kickoff reports each package's placement
|
|
307
|
+
(`[local]`, `[global]`, `[both]`) by checking both `./.pi/...` and `~/.pi/agent/...`, plus
|
|
308
|
+
`pi list`. Remove from wherever it actually lives:
|
|
309
|
+
- **(a) Packages** — for each distro package still installed, remove it from where it
|
|
310
|
+
lives: `pi remove -l <pkg>` for `[local]`, `pi remove <pkg>` for `[global]` (warn: global
|
|
311
|
+
removal affects EVERY project on this machine — get explicit confirm), and BOTH
|
|
312
|
+
commands for `[both]`. Ask per package — the user may want to keep some. Warn if
|
|
313
|
+
removing a package that other components depend on.
|
|
314
|
+
- **(b) Bundled files** — for each file the distro placed, check for it at BOTH
|
|
315
|
+
`./<path>` (local) and `~/.pi/agent/<equivalent>` (global). If it exists, **show the
|
|
316
|
+
user the file (or a summary) before removing** — they may have customized it. Offer:
|
|
317
|
+
remove / keep, per location. Never silently delete. For `settings.json` (local at
|
|
318
|
+
`./.pi/settings.json`, global at `~/.pi/agent/settings.json`), offer to remove specific
|
|
319
|
+
keys the distro merged, not the whole file. Warn that global settings removal affects
|
|
320
|
+
every project.
|
|
321
|
+
- **(c) AGENTS.md delimited section** — the `<!-- pi-distro: <name> -->` ...
|
|
322
|
+
`<!-- /pi-distro: <name> -->` block may exist at `./AGENTS.md` (local) and/or
|
|
323
|
+
`~/.pi/agent/AGENTS.md` (global). Offer to remove it from each location it was found.
|
|
324
|
+
Warn that removing the global one affects every session. Leave any non-distro content.
|
|
325
|
+
- **(d) Extensions / skills / prompts / themes** — if described in the directives, check
|
|
326
|
+
for them in BOTH `./.pi/<type>/` (local) and `~/.pi/agent/<type>/` (global). Offer to
|
|
327
|
+
remove each (show before delete), per location.
|
|
251
328
|
2. **Remove provenance last** — only after the user confirms the component removals, remove
|
|
252
329
|
`./.pi/harness.md`. Confirm before deleting.
|
|
253
330
|
3. **Report and recommend a restart** — summarise what was removed vs. kept. Tell the user to
|
|
@@ -263,16 +340,18 @@ skip, delete, or strip. The user decides; you execute their choices.
|
|
|
263
340
|
|
|
264
341
|
When you receive a draft request from the `save` command, it contains a live-config
|
|
265
342
|
snapshot of the current project: the system prompt options (tools, skills, context
|
|
266
|
-
files, guidelines),
|
|
343
|
+
files, guidelines), the raw contents of **every project-local config file** found
|
|
267
344
|
under `./` (root `AGENTS.md`/`CLAUDE.md` variants), `./.pi/` (recursively — `settings.json`,
|
|
268
345
|
`SYSTEM.md`, `APPEND_SYSTEM.md`, `extensions/`, `skills/`, `prompts/`, `themes/`, and any
|
|
269
346
|
per-extension/skill config files like `.pi/<name>.json`), `./.crew/{agents,teams,workflows}/`
|
|
270
347
|
(pi-crew project-local authored definitions — NOT the runtime state subdirs), and
|
|
271
|
-
`./.agents/skills/` (project root only).
|
|
272
|
-
`
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
348
|
+
`./.agents/skills/` (project root only). **It also captures global (user-level) config**
|
|
349
|
+
from `~/.pi/agent/` (`settings.json`, `AGENTS.md`, `extensions/`, `themes/`, `skills/`,
|
|
350
|
+
`prompts/`) and globally-installed packages — these are marked `(global)` in the snapshot so
|
|
351
|
+
you can reproduce them at the global scope in the saved distro. Data/runtime dirs and the
|
|
352
|
+
provenance file `./.pi/harness.md` are excluded. Ancestor (parent-dir) `AGENTS.md` /
|
|
353
|
+
`.agents/skills/` appear only in the context-files list as informational — they are out of
|
|
354
|
+
scope and must NOT be bundled.
|
|
276
355
|
|
|
277
356
|
### Authoring steps
|
|
278
357
|
|
|
@@ -287,6 +366,19 @@ be bundled.
|
|
|
287
366
|
`version` (semver). Optionally `author` and `tags`.
|
|
288
367
|
- **Directives body**: include sections for bundled files, pi packages to install,
|
|
289
368
|
hooks/extensions, context, and skills/prompts — mirroring the live config.
|
|
369
|
+
- **Scope (local vs global)**: the snapshot separates **project-local** from **global**
|
|
370
|
+
(marked `(global)`, captured from `~/.pi/agent/`). Reproduce each component at the scope
|
|
371
|
+
it was captured at:
|
|
372
|
+
- A **global package** → list it in `## pi packages to install` with the `(global)`
|
|
373
|
+
marker suffix. A **project-local package** → no marker (default local).
|
|
374
|
+
- A **global bundled file** → copy into `files/` as usual, AND add a `## Global
|
|
375
|
+
deployment notes` section listing which file targets should be placed globally
|
|
376
|
+
(e.g. `.pi/extensions/foo.ts` → deploy globally to `~/.pi/agent/extensions/foo.ts`).
|
|
377
|
+
- Global `settings.json` / `SYSTEM.md` / `AGENTS.md` → note in `## Global deployment
|
|
378
|
+
notes` that they target `~/.pi/agent/...`, so the deploy-time scope-safety guard
|
|
379
|
+
surfaces the blast radius.
|
|
380
|
+
The user's deploy-time preset still governs the final scope — these markers/notes are
|
|
381
|
+
the author-suggested defaults.
|
|
290
382
|
|
|
291
383
|
3. **Propose & confirm.** Present the proposed `name`, `title`, `description`, and the full
|
|
292
384
|
draft to the user. Ask for confirmation or edits. Do not proceed until the user
|
|
@@ -296,10 +388,10 @@ be bundled.
|
|
|
296
388
|
the kickoff message exactly:
|
|
297
389
|
- Ask the user whether to **save as a new distro** or **update an existing distro**.
|
|
298
390
|
- If **save as new**: validate the slug; warn on collisions with existing user
|
|
299
|
-
distros or
|
|
391
|
+
distros or official distro names (fetched from GitHub) and ask whether to overwrite.
|
|
300
392
|
- If **update existing**: let the user pick from the existing user distros listed in
|
|
301
|
-
the kickoff. Refuse to update names not in that list (
|
|
302
|
-
|
|
393
|
+
the kickoff. Refuse to update names not in that list (official/GitHub distros are
|
|
394
|
+
read-only locally). Back the old distro up to `~/.pi/harnesses/.trash/<name>-<timestamp>/` before
|
|
303
395
|
overwriting. **Bump the version**: read the old distro's `version` and increment it
|
|
304
396
|
with semver — **patch** for small tweaks/bug fixes, **minor** for new capabilities or
|
|
305
397
|
config additions, **major** for breaking changes (removed packages, changed
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# minimal
|
|
2
|
-
|
|
3
|
-
A clean starting point for any project. Drops in a basic `AGENTS.md` and a sensible
|
|
4
|
-
`.pi/settings.json` — nothing more, nothing less.
|
|
5
|
-
|
|
6
|
-
## What it sets up
|
|
7
|
-
|
|
8
|
-
- **`AGENTS.md`** — a minimal explore-before-acting methodology: investigate before
|
|
9
|
-
implementing, make surgical changes, keep solutions simple.
|
|
10
|
-
- **`.pi/settings.json`** — a sensible default thinking level (pi's default
|
|
11
|
-
one-at-a-time steering already applies).
|
|
12
|
-
|
|
13
|
-
No pi packages are installed. Use this as a blank canvas — tailor the `AGENTS.md` to your
|
|
14
|
-
project's build/test commands and conventions, then layer on packages and skills as you go.
|
|
15
|
-
|
|
16
|
-
## When to use
|
|
17
|
-
|
|
18
|
-
- You want a clean baseline without opinions about which packages to install.
|
|
19
|
-
- You're starting a new project and just want the agent oriented with good defaults.
|
|
20
|
-
- You want to build your own distro from a minimal starting point (deploy this, then
|
|
21
|
-
`/pi-distro save` after customizing).
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Project Instructions
|
|
2
|
-
|
|
3
|
-
Brief guidance for working in this project. Add your own rules below.
|
|
4
|
-
|
|
5
|
-
## Build & Test Commands
|
|
6
|
-
|
|
7
|
-
<!-- e.g. npm run build, npm test, npm run lint -->
|
|
8
|
-
- Build:
|
|
9
|
-
- Test:
|
|
10
|
-
- Lint:
|
|
11
|
-
|
|
12
|
-
## Code Style
|
|
13
|
-
|
|
14
|
-
<!-- e.g. use TypeScript, 2-space indent, prefer named exports -->
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
## Project Structure Notes
|
|
18
|
-
|
|
19
|
-
<!-- e.g. src/ for source, tests/ for tests, docs/ for documentation -->
|
|
20
|
-
-
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: minimal
|
|
3
|
-
title: Minimal
|
|
4
|
-
description: Clean starting point: a basic AGENTS.md and .pi/settings.json.
|
|
5
|
-
version: 0.1.0
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Minimal
|
|
9
|
-
|
|
10
|
-
## Bundled files
|
|
11
|
-
The following bundled files are provided under `files/` and should be placed into the
|
|
12
|
-
target project. For any path that already exists, do NOT overwrite — show the user a diff
|
|
13
|
-
and ask whether to overwrite, keep theirs, or merge. Merge JSON settings objects field by
|
|
14
|
-
field. Append (not replace) `AGENTS.md` content under a clearly-delimited section.
|
|
15
|
-
|
|
16
|
-
- `files/AGENTS.md` → `./AGENTS.md`
|
|
17
|
-
- `files/settings.json` → `./.pi/settings.json` (merge with existing settings)
|
|
18
|
-
|
|
19
|
-
## Context
|
|
20
|
-
This harness provides a minimal starting point for any project. After placing the bundled
|
|
21
|
-
files, ensure the `AGENTS.md` is tailored to the project's actual build/test commands and
|
|
22
|
-
conventions. The `settings.json` sets a sensible default thinking level — adjust as needed.
|
|
23
|
-
|
|
24
|
-
No additional pi packages are required for this harness.
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# pi-distro-one
|
|
2
|
-
|
|
3
|
-
A complete Claude Code–style coding agent configuration for pi. The primary capability is
|
|
4
|
-
spawning and coordinating autonomous sub-agents; everything else — web research, browser
|
|
5
|
-
automation, live shell, model routing, task management — is integrated in support of that.
|
|
6
|
-
|
|
7
|
-
This is a personal draft shot at using the most popular pi coding packages to closely
|
|
8
|
-
resemble the capabilities of Claude Code. It's opinionated and not for everyone — but it
|
|
9
|
-
makes a great starting point to fork and make your own.
|
|
10
|
-
|
|
11
|
-
## What it sets up
|
|
12
|
-
|
|
13
|
-
- **`AGENTS.md`** — an explore-before-acting working methodology: investigate before
|
|
14
|
-
implementing, surface interpretations and tradeoffs, make surgical changes, keep
|
|
15
|
-
solutions simple, execute against verifiable goals, and treat documentation as part of
|
|
16
|
-
the implementation.
|
|
17
|
-
- **`.pi/settings.json`** — high thinking level, one-at-a-time steering, hidden thinking
|
|
18
|
-
blocks, and hardware cursor.
|
|
19
|
-
- **`.pi/extensions/claude-statusline.ts`** — a Claude-style status-line footer
|
|
20
|
-
(model | dir | thinking level | context-window bar gauge + cache % | git branch status).
|
|
21
|
-
Auto-enables on session start and **auto-expands tool outputs** (the Ctrl+O effect) so
|
|
22
|
-
full output is visible by default. Toggle with the `/claude-statusline` command.
|
|
23
|
-
|
|
24
|
-
## Packages installed (all project-local)
|
|
25
|
-
|
|
26
|
-
| Package | What it does |
|
|
27
|
-
|---------|-------------|
|
|
28
|
-
| `npm:@tintinweb/pi-subagents` | Claude Code–style autonomous sub-agents — spawn specialized agents in isolated sessions with own tools/prompt/model/thinking; parallel execution, live widget, mid-run steering, resumption (**primary capability**) |
|
|
29
|
-
| `npm:pi-web-access` | Web search, URL fetching, GitHub cloning, PDF/video extraction |
|
|
30
|
-
| `npm:pi-agent-browser-native` | Real browser automation and web interaction |
|
|
31
|
-
| `npm:pi-bash-live-view` | Live terminal rendering for shell commands |
|
|
32
|
-
| `npm:@yeliu84/pi-model-router` | Model routing / fallback across providers |
|
|
33
|
-
| `npm:@robhowley/pi-openrouter` | OpenRouter provider integration |
|
|
34
|
-
| `npm:@juicesharp/rpiv-todo` | Task list management |
|
|
35
|
-
| `npm:pi-goal` | Persistent autonomous goals — `/goal` loops until complete, paused, or budget-limited |
|
|
36
|
-
| `npm:@trevonistrevon/pi-loop` | Cron/event-based agent re-wake loops + background process monitoring — schedule agents to re-wake on time/events |
|
|
37
|
-
| `npm:@juicesharp/rpiv-ask-user-question` | Structured questionnaire the model puts to the user (typed options instead of guessing) |
|
|
38
|
-
|
|
39
|
-
## Prerequisites
|
|
40
|
-
|
|
41
|
-
- **Auth and model routing** are not part of this distro — configure those independently
|
|
42
|
-
(e.g. set `defaultProvider` and `defaultModel` in your global `~/.pi/settings.json`,
|
|
43
|
-
or use OpenRouter via the `@robhowley/pi-openrouter` package installed above).
|
|
44
|
-
- **Restart pi** after deploying — packages and extensions load at startup.
|
|
45
|
-
|
|
46
|
-
## When to use
|
|
47
|
-
|
|
48
|
-
- You want a Claude Code–like experience in pi.
|
|
49
|
-
- You work on complex tasks that benefit from multi-agent coordination.
|
|
50
|
-
- You want an opinionated, batteries-included setup to fork and customize.
|