@msdavid/pi-distro 0.2.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 +54 -0
- package/LICENSE +21 -0
- package/README.md +394 -0
- package/docs/authoring.md +238 -0
- package/docs/preview.png +0 -0
- package/docs/preview.svg +58 -0
- package/extensions/catalogue.ts +221 -0
- package/extensions/deploy.ts +141 -0
- package/extensions/frontmatter.ts +158 -0
- package/extensions/github.ts +110 -0
- package/extensions/index.ts +86 -0
- package/extensions/info.ts +133 -0
- package/extensions/pick.ts +132 -0
- package/extensions/resolve.ts +70 -0
- package/extensions/save.ts +217 -0
- package/extensions/show.ts +96 -0
- package/extensions/undeploy.ts +124 -0
- package/extensions/update.ts +109 -0
- package/extensions/util.ts +44 -0
- package/harnesses/minimal/README.md +21 -0
- package/harnesses/minimal/files/AGENTS.md +20 -0
- package/harnesses/minimal/files/settings.json +4 -0
- package/harnesses/minimal/harness.md +24 -0
- package/harnesses/pi-distro-one/README.md +50 -0
- package/harnesses/pi-distro-one/files/.pi/extensions/claude-statusline.ts +220 -0
- package/harnesses/pi-distro-one/files/AGENTS.md +166 -0
- package/harnesses/pi-distro-one/files/settings.json +9 -0
- package/harnesses/pi-distro-one/harness.md +79 -0
- package/harnesses/web-fullstack/README.md +25 -0
- package/harnesses/web-fullstack/files/.pi/prompts/review.md +12 -0
- package/harnesses/web-fullstack/files/AGENTS.md +37 -0
- package/harnesses/web-fullstack/files/settings.json +11 -0
- package/harnesses/web-fullstack/harness.md +40 -0
- package/package.json +65 -0
- package/skills/pi-distro/SKILL.md +359 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.0 - 2026-07-08
|
|
4
|
+
|
|
5
|
+
- **`/pi-distro undeploy`**: the reverse of `deploy` — removes an applied distro from the
|
|
6
|
+
current project. Agent-driven: reads the distro's directives from provenance, compares
|
|
7
|
+
against the current project state (since the user may have customized things after
|
|
8
|
+
deploy), and walks the user through removal category by category (packages, files,
|
|
9
|
+
AGENTS.md section, extensions) — asking per component, showing files before deleting,
|
|
10
|
+
never silently removing anything. Provenance removed last. Only works for full deploys.
|
|
11
|
+
- **`/pi-distro pick` (partial deploy)**: select which components to apply from a distro —
|
|
12
|
+
packages, bundled files, settings, context — so users can combine pieces from different
|
|
13
|
+
distros to build their own. Agent-driven: walks the user through each category, surfaces
|
|
14
|
+
cross-component dependencies, applies only the selected components. No provenance written
|
|
15
|
+
(it's a custom config) — suggests `/pi-distro save` to capture the result.
|
|
16
|
+
- **User-in-the-loop principle** (governing rule): the agent now has an explicit, top-level
|
|
17
|
+
rule — never make a state-changing decision for the user. Before overwriting, installing,
|
|
18
|
+
skipping, substituting, or resolving any conflict, the agent must surface the decision,
|
|
19
|
+
present options, and wait for explicit confirmation. Stated once in the deploy kickoff, at
|
|
20
|
+
the top of SKILL.md, and as a feature promise in the README.
|
|
21
|
+
- **`/pi-distro update` command**: reads the applied distro from provenance, fetches the
|
|
22
|
+
current version (re-clones for GitHub sources), compares versions, and if a newer version
|
|
23
|
+
exists — shows a preview and asks the user to confirm before re-deploying. Never silently
|
|
24
|
+
applies. `/pi-distro status` now shows whether an update is available (applied vs. latest
|
|
25
|
+
version comparison).
|
|
26
|
+
- **GitHub distro pull**: `/pi-distro show owner/repo` and `/pi-distro deploy owner/repo`
|
|
27
|
+
fetch distros from any GitHub repo via shallow clone. Deploy requires explicit
|
|
28
|
+
confirmation (trust gate) with a security warning.
|
|
29
|
+
- **Version-aware deploy**: deploy now compares the incoming distro version against the
|
|
30
|
+
project's existing provenance and reports upgrade / downgrade / same-version / distro-switch
|
|
31
|
+
/ first-deploy, with appropriate agent guidance (downgrade and same-version require user
|
|
32
|
+
confirmation).
|
|
33
|
+
- **Version bumping on save-update**: updating an existing distro now requires bumping the
|
|
34
|
+
`version` field (patch / minor / major) — never left unchanged.
|
|
35
|
+
- **Semantic redundancy check**: the package-conflict check now evaluates semantic overlap
|
|
36
|
+
(different tool names, similar function), not just exact name collisions. Offers
|
|
37
|
+
skip / replace / keep both / cancel.
|
|
38
|
+
- **Auto-expand tool outputs**: pi-distro-one's status-line extension now auto-expands
|
|
39
|
+
tool output on session start (the Ctrl+O effect), while keeping thinking blocks hidden.
|
|
40
|
+
- **Per-distro README.md**: saved distros now include a `README.md` with an extended
|
|
41
|
+
human-readable description. All seed distros ship one too.
|
|
42
|
+
- **Deploy selector polish**: distro names are now bold in the interactive selector,
|
|
43
|
+
and the redundant title field is dropped for clarity.
|
|
44
|
+
- **Post-deploy restart hint**: the deploy kickoff now instructs the agent to tell the
|
|
45
|
+
user to restart pi after deploying (packages/extensions load at startup).
|
|
46
|
+
- **Documentation overhaul**: README rewritten in neovim-distro style (LazyVim/AstroNvim/
|
|
47
|
+
NvChad tone), with project-level philosophy, workflows, non-coding use cases, and a
|
|
48
|
+
clear experimental/security disclaimer.
|
|
49
|
+
- Snapshot enumerator now captures `.crew/{agents,teams,workflows}/` (pi-crew config)
|
|
50
|
+
while skipping runtime state subdirs.
|
|
51
|
+
|
|
52
|
+
## 0.1.0 - 2026-07-07
|
|
53
|
+
|
|
54
|
+
- Initial release.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 msdavid
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
# pi-distro
|
|
2
|
+
|
|
3
|
+
[](https://github.com/msdavid/pi-distro/blob/main/package.json)
|
|
4
|
+
[](https://github.com/msdavid/pi-distro/blob/main/LICENSE)
|
|
5
|
+
[](https://pi.dev/packages)
|
|
6
|
+
|
|
7
|
+
Distributions for [pi](https://github.com/earendil-works/pi-coding-agent) — the coding
|
|
8
|
+
agent. Inspired by Neovim distributions like [LazyVim](https://lazyvim.org),
|
|
9
|
+
[AstroNvim](https://astronvim.com), and [NvChad](https://nvchad.com), but for your AI
|
|
10
|
+
coding agent instead of your editor.
|
|
11
|
+
|
|
12
|
+
A **distro** is a named, reusable, composable configuration: skills, extensions, context,
|
|
13
|
+
settings, themes, and package install directives bundled together. Deploy one into any
|
|
14
|
+
project with a single command, and the agent collaborates with you to merge it into your
|
|
15
|
+
existing setup — nothing is silently overwritten.
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
- [pi](https://pi.dev/) installed (the coding agent this package extends).
|
|
20
|
+
- Node.js **>= 22.19.0** (pi's own requirement).
|
|
21
|
+
- An npm-scoped install of this package (see below).
|
|
22
|
+
|
|
23
|
+
## Get a fully-configured coder in 60 seconds
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 1. Install the package
|
|
27
|
+
pi install npm:@msdavid/pi-distro
|
|
28
|
+
|
|
29
|
+
# 2. Deploy a distro (pi-distro-one = a Claude Code-style multi-agent coder)
|
|
30
|
+
/pi-distro deploy pi-distro-one
|
|
31
|
+
|
|
32
|
+
# 3. Restart pi — done.
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
That's it. You now have a multi-agent coding setup with web research, browser automation,
|
|
36
|
+
live shell, model routing, task management, a Claude-style status line, and an
|
|
37
|
+
explore-before-acting methodology — all configured and ready to go.
|
|
38
|
+
|
|
39
|
+
## ✨ Features
|
|
40
|
+
|
|
41
|
+
- 🚀 **One command to a full setup** — deploy a distro, restart, and you're coding
|
|
42
|
+
- 🧩 **Composable** — distros merge into your existing config, they don't clobber it. Use
|
|
43
|
+
`/pi-distro pick` to select individual packages/configs from a distro and combine pieces
|
|
44
|
+
from different distros into your own
|
|
45
|
+
- 👤 **You're in the loop for every decision** — the agent never silently overwrites, skips,
|
|
46
|
+
substitutes, or chooses. Every state-changing decision (file merge, package install, tool
|
|
47
|
+
conflict, upgrade) is surfaced with options, and the agent waits for your explicit choice
|
|
48
|
+
- 📦 **Project-local by default** — each project gets its own isolated configuration, so
|
|
49
|
+
different projects can use different harnesses (coding, research, automation, trading…)
|
|
50
|
+
- 🔄 **Round-trip** — snapshot your live config back into a reusable distro with `/pi-distro save`
|
|
51
|
+
- 🐙 **GitHub distros** — deploy distros straight from any GitHub repo, so your personal
|
|
52
|
+
config follows you to any machine (`/pi-distro deploy owner/repo`)
|
|
53
|
+
- 🎨 **System prompt overrides & overlays** — distros can ship `SYSTEM.md`, `APPEND_SYSTEM.md`,
|
|
54
|
+
custom skills, prompts, and extensions — making them great for non-coding agent projects too
|
|
55
|
+
|
|
56
|
+
## What is a distro?
|
|
57
|
+
|
|
58
|
+
A distro is a directory with a `harness.md` file (frontmatter + agent directives) and an
|
|
59
|
+
optional `files/` directory (bundled config files). Think of it as a "starter template" for
|
|
60
|
+
your pi agent — but instead of a static config, it's a set of instructions that the agent
|
|
61
|
+
collaborates with you to apply.
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
my-distro/
|
|
65
|
+
├── harness.md # frontmatter (name, description, version) + directives
|
|
66
|
+
├── README.md # extended human-readable description
|
|
67
|
+
└── files/ # bundled files deployed into the target project
|
|
68
|
+
├── AGENTS.md
|
|
69
|
+
├── settings.json # → .pi/settings.json (merged, not overwritten)
|
|
70
|
+
└── .pi/
|
|
71
|
+
├── extensions/
|
|
72
|
+
├── skills/
|
|
73
|
+
└── prompts/
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
When you deploy a distro, the agent reads the directives, places the bundled files
|
|
77
|
+
(asking before overwriting anything), installs the listed packages (with conflict
|
|
78
|
+
detection), and writes a provenance file. You stay in control the entire time.
|
|
79
|
+
|
|
80
|
+
## Why project-level, not global?
|
|
81
|
+
|
|
82
|
+
Most agent tools configure themselves globally — one config for all projects. pi-distro
|
|
83
|
+
takes a different approach: **each project gets its own configuration, scoped to that
|
|
84
|
+
project's `.pi/` directory.**
|
|
85
|
+
|
|
86
|
+
The biggest reason is this: **not every project needs the same harness.** A coding
|
|
87
|
+
project, a research project, an automation project, and a trading project each want a
|
|
88
|
+
fundamentally different agent — different tools, different skills, different system
|
|
89
|
+
prompt, different workflow. One global config trying to be everything ends up being
|
|
90
|
+
nothing well. Project-level distros let each project get exactly the harness it needs.
|
|
91
|
+
|
|
92
|
+
This matters beyond coding, too. Pi's flexibility — system prompt overrides (`SYSTEM.md`,
|
|
93
|
+
`APPEND_SYSTEM.md`), custom skills, prompts, and extensions — means the same agent
|
|
94
|
+
framework serves a huge range of use cases, and project-level distros are what make that
|
|
95
|
+
practical: the coding agent in one repo, the information-gathering agent in another, the
|
|
96
|
+
implementation/automation agent in a third — each isolated, each reproducible.
|
|
97
|
+
|
|
98
|
+
Other advantages:
|
|
99
|
+
|
|
100
|
+
- **Reproducibility** — anyone who deploys the same distro gets the same setup. No
|
|
101
|
+
"it works on my machine" because of a global config difference.
|
|
102
|
+
- **Isolation** — your React project doesn't need the same tools as your Python API, and
|
|
103
|
+
neither needs the tools your trading bot uses. Project-level configs keep them separate.
|
|
104
|
+
- **Portability** — the config travels with the project (`.pi/` is part of the repo).
|
|
105
|
+
Clone the repo, deploy the distro, and you're set up.
|
|
106
|
+
- **Experimentation** — try a distro in a throwaway project without touching your
|
|
107
|
+
global setup. Don't like it? Just delete the `.pi/` directory.
|
|
108
|
+
- **Composability** — different distros for different projects, without conflicts.
|
|
109
|
+
|
|
110
|
+
You can still use global packages and settings alongside project-level ones — pi merges
|
|
111
|
+
them. But the distro itself lives at the project level.
|
|
112
|
+
|
|
113
|
+
## Workflows
|
|
114
|
+
|
|
115
|
+
### Global setup (install once, use everywhere)
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Install pi-distro globally — makes /pi-distro available in every session
|
|
119
|
+
pi install npm:@msdavid/pi-distro
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Per-project setup (deploy a distro into a project)
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# In your project directory:
|
|
126
|
+
/pi-distro deploy # interactive selector
|
|
127
|
+
/pi-distro deploy minimal # deploy by name
|
|
128
|
+
/pi-distro deploy owner/repo # deploy from GitHub
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Make it yours, then save it
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
# After customizing your project's config:
|
|
135
|
+
/pi-distro save # snapshots your live config as a reusable distro
|
|
136
|
+
|
|
137
|
+
# Now deploy it into other projects:
|
|
138
|
+
/pi-distro deploy my-distro
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Pick pieces from a distro (partial deploy)
|
|
142
|
+
|
|
143
|
+
You don't have to take a whole distro. `/pi-distro pick` lets you select which components
|
|
144
|
+
to apply — just the packages you want, or a single extension, or a subset of the settings.
|
|
145
|
+
This is how you combine pieces from different distros to build your own:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
/pi-distro pick pi-distro-one # pick, say, just pi-subagents + the statusline
|
|
149
|
+
/pi-distro pick web-fullstack # then add web research from another distro
|
|
150
|
+
/pi-distro save # snapshot the combination as your own distro
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Run `/pi-distro pick` with no argument to choose from the interactive selector (same as
|
|
154
|
+
`/pi-distro deploy`). You can also pick from a GitHub distro:
|
|
155
|
+
`/pi-distro pick owner/repo`.
|
|
156
|
+
|
|
157
|
+
The agent walks you through each category (packages, bundled files, settings, context) one
|
|
158
|
+
at a time, lets you pick any subset, and **surfaces dependencies** — e.g. if you pick the
|
|
159
|
+
statusline extension but skip the package that provides its theme, the agent warns you and
|
|
160
|
+
asks how to proceed. Nothing is applied without your explicit choice. A partial deploy
|
|
161
|
+
doesn't write provenance (it's a custom config, not an applied distro) — run
|
|
162
|
+
`/pi-distro save` to capture the result as a clean, reusable distro.
|
|
163
|
+
|
|
164
|
+
### Check what's applied
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
/pi-distro status # shows the applied distro + live config
|
|
168
|
+
/pi-distro list # lists all available distros
|
|
169
|
+
/pi-distro show pi-distro-one # dry-run preview of what a distro would do
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Bring your config to any machine
|
|
173
|
+
|
|
174
|
+
A common pattern when you work across multiple machines (laptop, desktop, server, a
|
|
175
|
+
fresh box) is to **maintain your personal distro in a GitHub repo** and deploy it to any
|
|
176
|
+
new machine in seconds. Your configuration follows you everywhere, identical on each
|
|
177
|
+
machine.
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# One-time setup, on any machine:
|
|
181
|
+
pi install npm:@msdavid/pi-distro
|
|
182
|
+
|
|
183
|
+
# Then, on any new machine:
|
|
184
|
+
pi install npm:@msdavid/pi-distro # install pi-distro
|
|
185
|
+
cd your-project
|
|
186
|
+
/pi-distro deploy owner/your-distro-repo # your full config, applied
|
|
187
|
+
# restart pi — done.
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
To create your own: build up a project config you like, run `/pi-distro save` to snapshot
|
|
191
|
+
it, then push the resulting `~/.pi/harnesses/<name>/` directory to a GitHub repo. Now that
|
|
192
|
+
repo *is* a distro — deployable from anywhere. Update the repo, and every machine can pull
|
|
193
|
+
the latest with `/pi-distro deploy owner/repo` again (it merges with whatever's already
|
|
194
|
+
there).
|
|
195
|
+
|
|
196
|
+
### Community distros
|
|
197
|
+
|
|
198
|
+
GitHub distros also enable **community collaboration**. Anyone can publish a distro to a
|
|
199
|
+
GitHub repo and share it — a workflow setup, a specialized research agent, a team's
|
|
200
|
+
coding conventions, a niche toolchain — and anyone else can deploy it with a single
|
|
201
|
+
command:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
/pi-distro show someone/their-distro # preview before deploying
|
|
205
|
+
/pi-distro deploy someone/their-distro # apply it to your project
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Found a distro that fits your workflow? Deploy it. Tweaked it to better suit your needs?
|
|
209
|
+
Run `/pi-distro save` and publish your own. This is how a shared library of pi
|
|
210
|
+
configurations grows — each distro a reusable starting point that others can fork, adapt,
|
|
211
|
+
and re-share. (Always review a community distro before deploying it — see the
|
|
212
|
+
[security note](#-experimental--please-read) below.)
|
|
213
|
+
|
|
214
|
+
## Command reference
|
|
215
|
+
|
|
216
|
+
All interaction happens through a single slash command — there is no standalone CLI.
|
|
217
|
+
|
|
218
|
+
| Command | Description |
|
|
219
|
+
|---------|-------------|
|
|
220
|
+
| `/pi-distro` | Print help |
|
|
221
|
+
| `/pi-distro deploy [name\|gh-repo]` | Deploy a distro (interactive selector if no arg) |
|
|
222
|
+
| `/pi-distro undeploy` | Remove an applied distro from the current project |
|
|
223
|
+
| `/pi-distro pick [name\|gh-repo]` | Partial deploy: pick which packages/configs to apply |
|
|
224
|
+
| `/pi-distro update` | Update the applied distro if a newer version exists |
|
|
225
|
+
| `/pi-distro save` | Snapshot your live config as a new distro |
|
|
226
|
+
| `/pi-distro list` | List all distros in the catalogue |
|
|
227
|
+
| `/pi-distro show <name\|gh-repo>` | Dry-run preview of a distro |
|
|
228
|
+
| `/pi-distro status` | Show the current project's distro status |
|
|
229
|
+
| `/pi-distro remove <name>` | Delete a user-saved distro |
|
|
230
|
+
|
|
231
|
+
**GitHub addresses** for `show` and `deploy` use the format `owner/repo[/subpath]`:
|
|
232
|
+
```
|
|
233
|
+
/pi-distro show owner/repo
|
|
234
|
+
/pi-distro deploy owner/repo/my-distro
|
|
235
|
+
/pi-distro deploy https://github.com/owner/repo
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## The catalogue
|
|
239
|
+
|
|
240
|
+
The effective catalogue is the union of:
|
|
241
|
+
|
|
242
|
+
- **Package seeds** — shipped with `@msdavid/pi-distro` under `harnesses/`. Read straight
|
|
243
|
+
from the installed package at runtime. Currently:
|
|
244
|
+
- **minimal** — clean starting point: basic `AGENTS.md` + `.pi/settings.json`.
|
|
245
|
+
- **web-fullstack** — React/Node project with web research, review skills, restricted tools.
|
|
246
|
+
- **pi-distro-one** — a Claude Code–style multi-agent coder (see below).
|
|
247
|
+
- **User distros** — saved by you to `~/.pi/harnesses/<name>/` via `/pi-distro save`.
|
|
248
|
+
- **GitHub distros** — fetched on-demand from any GitHub repo.
|
|
249
|
+
- **Partial/combined configs** — built from `/pi-distro pick` across multiple distros, then
|
|
250
|
+
saved as a user distro.
|
|
251
|
+
|
|
252
|
+
On a name collision, the **user distro takes precedence** — save a distro with the same
|
|
253
|
+
name as a seed to override it.
|
|
254
|
+
|
|
255
|
+
### pi-distro-one
|
|
256
|
+
|
|
257
|
+
`pi-distro-one` is the author's draft shot at using the most popular pi coding packages to
|
|
258
|
+
closely resemble the capabilities of Claude Code. It's opinionated — spawning and
|
|
259
|
+
coordinating autonomous sub-agents is the primary capability, with web research, browser
|
|
260
|
+
automation, live shell, model routing, and task management integrated in support. It
|
|
261
|
+
includes a Claude-style status line and an explore-before-acting methodology.
|
|
262
|
+
|
|
263
|
+
It's a great starting point: deploy it, customize it, then `/pi-distro save` it as your own.
|
|
264
|
+
|
|
265
|
+
## Beyond coding
|
|
266
|
+
|
|
267
|
+
Distros aren't just for coding. Not every project is a coding project — some are about
|
|
268
|
+
**information gathering**, some are about **implementation or automation**, some are
|
|
269
|
+
**research**, some are **analysis**. Because distros can ship `SYSTEM.md` (system prompt
|
|
270
|
+
overrides), `APPEND_SYSTEM.md`, custom skills, prompts, and extensions, they configure
|
|
271
|
+
the agent for *any* kind of agentic work, not just writing code:
|
|
272
|
+
|
|
273
|
+
- **Market research & trading** — the author's team uses a targeted distro for
|
|
274
|
+
market research and trading: an agent configured for market intelligence, data
|
|
275
|
+
analysis, and execution across research, analysis, and trading sub-agents.
|
|
276
|
+
- **Information gathering** — distros that configure web research + data extraction
|
|
277
|
+
workflows for market intelligence, competitor analysis, or due diligence.
|
|
278
|
+
- **Research pipelines** — distros that set up structured research + synthesis agents.
|
|
279
|
+
- **DevOps / automation** — distros that configure shell-heavy agents for
|
|
280
|
+
infrastructure tasks and implementation work.
|
|
281
|
+
|
|
282
|
+
This is where project-level configuration really shines: the coding distro in your app
|
|
283
|
+
repo, the research distro in your intelligence repo, the targeted trading distro your
|
|
284
|
+
team uses for market research — each project gets the right harness for its job. If your
|
|
285
|
+
agent project benefits from a reproducible, shareable configuration, a distro works for
|
|
286
|
+
it.
|
|
287
|
+
|
|
288
|
+
## Creating & updating distros
|
|
289
|
+
|
|
290
|
+
### Save your live config as a distro
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
/pi-distro save
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
The extension captures a full snapshot of your project's configuration — tools, skills,
|
|
297
|
+
context files, and every config file under `.pi/`, `.crew/{agents,teams,workflows}/`, and
|
|
298
|
+
`.agents/skills/`. The agent drafts a `harness.md` that reproduces it, you confirm, and
|
|
299
|
+
it's saved to `~/.pi/harnesses/<name>/` with a `README.md` describing the distro.
|
|
300
|
+
|
|
301
|
+
### Author a distro by hand
|
|
302
|
+
|
|
303
|
+
Create a directory under `~/.pi/harnesses/<name>/` (or contribute a seed to the package)
|
|
304
|
+
with a `harness.md` and optional `files/`. See
|
|
305
|
+
[docs/authoring.md](docs/authoring.md) for the complete format reference — frontmatter
|
|
306
|
+
fields, bundled file conventions, directive sections, and merge-don't-clobber
|
|
307
|
+
expectations.
|
|
308
|
+
|
|
309
|
+
### Update an existing distro
|
|
310
|
+
|
|
311
|
+
Run `/pi-distro save` again — it offers to update an existing distro (backing up the old
|
|
312
|
+
version to `~/.pi/harnesses/.trash/` before overwriting, and bumping the version — see
|
|
313
|
+
below).
|
|
314
|
+
|
|
315
|
+
### Update an applied distro
|
|
316
|
+
|
|
317
|
+
When a distro you've applied to a project gets a new version (the author bumped it in the
|
|
318
|
+
catalogue or pushed a new commit to the GitHub repo), `/pi-distro update` brings your
|
|
319
|
+
project up to date:
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
/pi-distro status # shows applied version + whether an update is available
|
|
323
|
+
/pi-distro update # fetches the latest, shows what changed, asks before applying
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
The update command reads the applied distro from provenance, fetches the current version
|
|
327
|
+
from the catalogue (or re-clones the GitHub repo), compares versions, and — if a newer
|
|
328
|
+
version exists — shows you a preview and **asks you to confirm** before re-deploying. It
|
|
329
|
+
never silently applies anything. If you're already up to date, it says so and does
|
|
330
|
+
nothing. Downgrades are flagged as warnings (updates are for moving to a newer version).
|
|
331
|
+
|
|
332
|
+
### Remove an applied distro
|
|
333
|
+
|
|
334
|
+
`/pi-distro undeploy` is the reverse of `deploy` — it removes a distro's components from
|
|
335
|
+
the current project:
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
/pi-distro undeploy # walks you through removing the applied distro
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
The agent reads the applied distro's directives from provenance, compares them against
|
|
342
|
+
your project's *current* state (since you may have customized things after deploy), and
|
|
343
|
+
walks you through removal category by category — packages, bundled files, the `AGENTS.md`
|
|
344
|
+
delimited section, extensions. **It asks before removing anything** — you may have
|
|
345
|
+
customized a file or decided to keep a package, so you choose what to remove and what to
|
|
346
|
+
keep per component. Provenance is removed last, after you confirm the rest. Restart pi
|
|
347
|
+
afterward so removed packages/extensions fully unload.
|
|
348
|
+
|
|
349
|
+
> **Note:** `/pi-distro undeploy` works for full deploys (which write provenance). A
|
|
350
|
+
> partial deploy via `/pi-distro pick` doesn't write provenance — there's nothing to
|
|
351
|
+
> undeploy as a unit; just remove the individual components you picked.
|
|
352
|
+
|
|
353
|
+
### Versioning
|
|
354
|
+
|
|
355
|
+
Every distro has a `version` (semver). It's tracked in two places:
|
|
356
|
+
|
|
357
|
+
- **On deploy**, pi-distro compares the incoming version against the project's existing
|
|
358
|
+
provenance and tells the agent what kind of deploy it is: an **upgrade** (proceed
|
|
359
|
+
normally), a **downgrade** (asks you to confirm — may regress features), the **same
|
|
360
|
+
version** (asks whether to skip or force re-deploy), or a **different distro** (treated
|
|
361
|
+
as a distro switch). Run `/pi-distro status` to see which version is applied.
|
|
362
|
+
- **On save-update**, the agent bumps the version using semver: **patch** for small
|
|
363
|
+
tweaks, **minor** for new capabilities, **major** for breaking changes. The version
|
|
364
|
+
always reflects that something changed.
|
|
365
|
+
|
|
366
|
+
This means re-deploying a distro you've updated is safe and intentional — you'll always
|
|
367
|
+
know whether you're upgrading, downgrading, or re-applying the same version.
|
|
368
|
+
|
|
369
|
+
## ⚠️ Experimental — please read
|
|
370
|
+
|
|
371
|
+
This project is **experimental** and was **fully coded with AI**. It has only been tested
|
|
372
|
+
by its author — there are no guarantees it will work for you. Things may break, and the
|
|
373
|
+
format may change between versions.
|
|
374
|
+
|
|
375
|
+
**Installing unknown distros is dangerous.** A distro can install arbitrary npm packages,
|
|
376
|
+
write extensions that execute code, inject agent instructions, and modify your project
|
|
377
|
+
configuration. Before deploying any distro — especially one fetched from GitHub — review
|
|
378
|
+
its `harness.md`, package list, and bundled files carefully. Use `/pi-distro show` to
|
|
379
|
+
preview what a distro would do before deploying it.
|
|
380
|
+
|
|
381
|
+
Everything is provided **as-is**, without warranty of any kind. Security is **your
|
|
382
|
+
responsibility** — review what you install, trust only sources you control, and deploy in
|
|
383
|
+
projects you can afford to break.
|
|
384
|
+
|
|
385
|
+
If you find bugs, have suggestions, or want to contribute fixes, please
|
|
386
|
+
[open an issue](https://github.com/msdavid/pi-distro/issues) or submit a pull request.
|
|
387
|
+
This is an open project and contributions are welcome.
|
|
388
|
+
|
|
389
|
+
## License
|
|
390
|
+
|
|
391
|
+
MIT — see [LICENSE](./LICENSE). Copyright (c) 2026 [msdavid](https://github.com/msdavid).
|
|
392
|
+
|
|
393
|
+
This project is experimental and was fully written with AI assistance; it is provided
|
|
394
|
+
as-is without warranty. See the notice above before installing unknown distros.
|