@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.
@@ -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 (seed or user-saved) or from GitHub
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 — with redundancy/conflict detection.** If the directives list pi packages to
82
- install, run `pi install -l <package>` for each one the `-l` flag installs
83
- **project-locally** (writes to `./.pi/settings.json`, not global) but **only after
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 `./.pi/settings.json` by hand.** `pi install -l` is the single
87
- mechanism that registers a package: it installs the package AND appends the source to
88
- `./.pi/settings.json` on success. If an install fails, nothing is added to settings — so
89
- settings never contains a package that isn't actually installed. (This is why the bundled
90
- `settings.json` does not list packages they are registered by `pi install -l`, not by
91
- merging a `packages` array.)
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 **project packages** from the kickoff's
104
- "Current project state" section, and run `pi list` to see globally-installed packages.
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** — `pi remove -l <overlapping-package>` (or remove it globally with
113
- `pi remove <pkg>` if that's where it lives), then `pi install -l <new-package>`.
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
- files under `./.pi/extensions/`, `./.pi/prompts/`, or `./.pi/skills/`, create them
121
- using the bundled source files or the directives' instructions. Apply the same
122
- merge-don't-clobber rule for any that already exist.
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|seed|none>
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`: `seed` if it came from the package seeds, `user` if from
141
- `~/.pi/harnesses/`.
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). Let them select any subset including none (skip the category).
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. **Apply only the selected components** with the same rules as a full deploy:
210
- merge-don't-clobber, package-redundancy check, `pi install -l` for packages (after
211
- confirming), copy/merge for files (overwrite / keep theirs / merge).
212
- 4. **Do NOT write standard provenance.** A partial deploy is a custom config, not "this
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
- 5. **Recommend a restart** if any packages or extensions were installed.
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
- - **(a) Packages** for each distro package still installed, offer `pi remove -l <pkg>`.
240
- Ask per package the user may want to keep some. Warn if removing a package that other
241
- components depend on.
242
- - **(b) Bundled files** — for each file the distro placed, check if it exists. If it
243
- does, **show the user the file (or a summary) before removing** they may have
244
- customized it. Offer: remove / keep. Never silently delete. For `settings.json`, offer
245
- to remove specific keys the distro merged, not the whole file.
246
- - **(c) AGENTS.md delimited section** if the `<!-- pi-distro: <name> -->` ...
247
- `<!-- /pi-distro: <name> -->` block exists, offer to remove it. Leave any non-distro
248
- content.
249
- - **(d) Extensions / skills / prompts / themes** — if described in the directives and
250
- present, offer to remove each (show before delete).
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), and the raw contents of **every project-local config file** found
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). Data/runtime dirs (`npm/`, `git/`, `sessions/`,
272
- `state/`, `tmp/`, the non-config subdirs of `.crew/`, `node_modules/`) and the provenance file
273
- `./.pi/harness.md` are excluded. Ancestor (parent-dir) `AGENTS.md` / `.agents/skills/`
274
- appear only in the context-files list as informational they are out of scope and must NOT
275
- be bundled.
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 seed names and ask whether to overwrite.
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 (those are read-only package
302
- seeds). Back the old distro up to `~/.pi/harnesses/.trash/<name>-<timestamp>/` before
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,4 +0,0 @@
1
- {
2
- "packages": [],
3
- "defaultThinkingLevel": "medium"
4
- }
@@ -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.