@pify/cli 0.4.0 → 0.4.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.
- package/README.md +37 -22
- package/catalog.json +31 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# @pify/cli
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@pify/cli) [](https://www.npmjs.com/package/@pify/cli)
|
|
4
|
+
|
|
3
5
|
Front door for the [Pify](https://github.com/pifydev) suite: install and update the [pi coding agent](https://github.com/earendil-works/pi), manage the `@pify/*` extension packages with short names, and scaffold new Pi Packages.
|
|
4
6
|
|
|
5
7
|
> Not to be confused with the unscoped npm package `pify` (sindresorhus's promisify library) — unrelated.
|
|
@@ -20,16 +22,16 @@ npx @pify/cli setup
|
|
|
20
22
|
|
|
21
23
|
```
|
|
22
24
|
pify setup # install the pi coding agent (safe to re-run)
|
|
23
|
-
pify setup --pi-version 0.
|
|
25
|
+
pify setup --pi-version 0.85.1 # pin the version your team has tested
|
|
24
26
|
pify setup --installer # run pi's official interactive installer (ps1/sh)
|
|
25
27
|
pify list # show the @pify catalog with install state
|
|
26
28
|
pify install goal task # short names resolve to @pify/goal, @pify/task
|
|
27
29
|
pify install suite # the whole suite in one go (also: core, agents)
|
|
28
30
|
pify install goal -l -a # project scope, pre-approved (CI-friendly)
|
|
29
31
|
pify remove goal
|
|
30
|
-
pify update --check # what is out of date, changing nothing
|
|
32
|
+
pify update --check # what is out of date, changing nothing
|
|
31
33
|
pify update # update pi + every installed @pify package
|
|
32
|
-
pify profile save # write the installed suite + versions to a file
|
|
34
|
+
pify profile save # write the installed suite + versions to a file
|
|
33
35
|
pify profile apply f.json # diff it against this machine; --yes to apply
|
|
34
36
|
pify update pi # agent only
|
|
35
37
|
pify doctor # diagnose node / npm / pi / settings
|
|
@@ -66,20 +68,33 @@ pify completions powershell | Out-String | Invoke-Expression # add to $PROFILE
|
|
|
66
68
|
| `@pify/goal` | Pin a session goal and keep the agent anchored to it |
|
|
67
69
|
| `@pify/memory` | Persistent memory across pi sessions |
|
|
68
70
|
| `@pify/plan-mode` | Read-only planning mode with approve-then-execute gate |
|
|
69
|
-
| `@pify/pretty` |
|
|
71
|
+
| `@pify/pretty` | Compact, theme-aware rendering for pi's built-in tools |
|
|
72
|
+
| `@pify/search` | Fuzzy file finding and indexed content search: `fffind` and `ffgrep` |
|
|
73
|
+
| `@pify/skills` | See what skills are loaded, what they cost per request, and which ones ever fire |
|
|
70
74
|
| `@pify/subagent` | Spawn scoped subagents, including by `@agent` mention |
|
|
71
75
|
| `@pify/swarm` | Coordinate multiple pi agents working in parallel |
|
|
72
76
|
| `@pify/task` | Task tracking: dependency graph, evidence-gated completion, reminders |
|
|
73
|
-
| `@pify/todo` | Agent working-memory checklist
|
|
77
|
+
| `@pify/todo` | Agent working-memory checklist with next-item surfacing |
|
|
74
78
|
| `@pify/usage` | Token and cost reporting, plus what is filling the context window |
|
|
75
|
-
| `@pify/workflow` | Deterministic agent orchestration
|
|
76
|
-
| `@pify/worktree` | Safe git-worktree management with
|
|
79
|
+
| `@pify/workflow` | Deterministic agent orchestration through JavaScript workflow scripts |
|
|
80
|
+
| `@pify/worktree` | Safe git-worktree management, with `/worktree enter` to take the session along |
|
|
77
81
|
| `@pify/yolo` | A safety gradient from auto-approve to ask-about-anything, with an undo trail |
|
|
78
82
|
|
|
79
83
|
The catalog ships inside the CLI and refreshes (at most daily) from [`catalog.json` on `main`](https://github.com/pifydev/cli/blob/main/catalog.json), so newly published packages appear without a CLI update. A fetched catalog is validated before use — every entry must stay inside the `@pify` scope — and any invalid document is discarded entirely. Overrides: `PIFY_CATALOG_URL` (remote URL), `PIFY_OFFLINE=1` or `PI_OFFLINE=1` (skip all network lookups).
|
|
80
84
|
|
|
81
85
|
Explicit `@pify/<name>` arguments bypass the catalog's published/planned gate (with a warning), so a freshly published package is installable before the catalog propagates.
|
|
82
86
|
|
|
87
|
+
## Environment
|
|
88
|
+
|
|
89
|
+
| Variable | Effect |
|
|
90
|
+
|---|---|
|
|
91
|
+
| `PIFY_CATALOG_URL` | Fetch the catalog from somewhere other than the org's `main` |
|
|
92
|
+
| `PIFY_OFFLINE=1` / `PI_OFFLINE=1` | Skip every network lookup |
|
|
93
|
+
| `PIFY_TRUST_PROJECT=1` | Approve project-supplied config for the suite's extensions in a headless run |
|
|
94
|
+
| `NO_COLOR` / `FORCE_COLOR` | Colour, as usual |
|
|
95
|
+
|
|
96
|
+
`PIFY_TRUST_PROJECT` is read by the extensions rather than by this CLI, and it matters in CI. Several packages load files a repository ships — `@pify/memory`'s `.pi/memory/MEMORY.md`, `@pify/subagent`'s `.pi/agents/*.md`, `@pify/yolo`'s `.pi/yolo.json` — and each asks once before doing so, because pi's own trust prompt does not cover files pi itself does not load. With no UI to ask through, the answer is no. Set this to `1` where you have decided the checkout is trustworthy. It is an environment variable rather than a config file precisely because the repository being read cannot set one for itself.
|
|
97
|
+
|
|
83
98
|
## Exit codes
|
|
84
99
|
|
|
85
100
|
| Code | Meaning |
|
|
@@ -93,18 +108,7 @@ Explicit `@pify/<name>` arguments bypass the catalog's published/planned gate (w
|
|
|
93
108
|
|
|
94
109
|
Colored output respects `NO_COLOR`, `FORCE_COLOR`, `--no-color`, and non-TTY pipes. Results go to stdout; warnings and errors go to stderr. No interactive prompts anywhere — behavior is identical in TTY and CI except color.
|
|
95
110
|
|
|
96
|
-
##
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
npm install
|
|
100
|
-
npm run build # tsup -> dist/
|
|
101
|
-
npm test # builds first, then node --test
|
|
102
|
-
npm run typecheck
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Requires Node >= 22.19.0 (same floor as the pi coding agent). Tested with pi 0.84.4.
|
|
106
|
-
|
|
107
|
-
## Profiles (v0.4)
|
|
111
|
+
## Profiles
|
|
108
112
|
|
|
109
113
|
The suite you actually run, written down — which packages, at which versions, in which scope — so a second machine can reproduce it:
|
|
110
114
|
|
|
@@ -122,9 +126,9 @@ Applying always shows the difference first:
|
|
|
122
126
|
install swarm (latest)
|
|
123
127
|
```
|
|
124
128
|
|
|
125
|
-
A package installed here but absent from the profile is reported as `extra` and **never removed**: a profile says what must be present, not what must be deleted. Every name still goes through the same catalog resolution as a typed install, so a profile file cannot reach outside the `@pify` scope.
|
|
129
|
+
A package installed here but absent from the profile is reported as `extra` and **never removed**: a profile says what must be present, not what must be deleted. Every name still goes through the same catalog resolution as a typed install, so a profile file cannot reach outside the `@pify` scope. A CLI's review is a diff and an explicit flag rather than an interactive screen, so the same command works the same way in a script.
|
|
126
130
|
|
|
127
|
-
## Conflict detection
|
|
131
|
+
## Conflict detection
|
|
128
132
|
|
|
129
133
|
Some extensions cannot run beside each other: they register the same command, tool, or flag, so pi loads both and one silently wins — and which one is not something you chose. `pify doctor` now reads pi's whole package list and says so:
|
|
130
134
|
|
|
@@ -132,7 +136,18 @@ Some extensions cannot run beside each other: they register the same command, to
|
|
|
132
136
|
warn conflicts @pify/memory + pi-memory; @pify/pretty + pi-pretty-tui register the same commands or tools - remove one
|
|
133
137
|
```
|
|
134
138
|
|
|
135
|
-
The pairs come from the catalog, where each is taken from the package's own README.
|
|
139
|
+
The pairs come from the catalog, where each is taken from the package's own README. Detecting this properly would mean asking a running pi which commands are registered, which a CLI outside pi cannot do — so this is the static equivalent, and it is only as complete as the catalog.
|
|
140
|
+
|
|
141
|
+
## Development
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
npm install
|
|
145
|
+
npm run build # tsup -> dist/
|
|
146
|
+
npm test # builds first, then node --test
|
|
147
|
+
npm run typecheck
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Requires Node >= 22.19.0 — the same floor as the pi coding agent.
|
|
136
151
|
|
|
137
152
|
## License
|
|
138
153
|
|
package/catalog.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
2
|
+
"version": 24,
|
|
3
3
|
"org": "pifydev",
|
|
4
4
|
"scope": "@pify",
|
|
5
5
|
"remote": "https://raw.githubusercontent.com/pifydev/cli/main/catalog.json",
|
|
@@ -8,28 +8,28 @@
|
|
|
8
8
|
"name": "ask-question",
|
|
9
9
|
"npm": "@pify/ask-question",
|
|
10
10
|
"repo": "https://github.com/pifydev/ask-question",
|
|
11
|
-
"description": "
|
|
11
|
+
"description": "Structured questions on built-in dialogs: 1-4 questions, options with trade-offs, multi-select, Other free-text",
|
|
12
12
|
"status": "published"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"name": "btw",
|
|
16
16
|
"npm": "@pify/btw",
|
|
17
17
|
"repo": "https://github.com/pifydev/btw",
|
|
18
|
-
"description": "By-the-way side conversations: a read-only, codebase-aware side agent in a widget",
|
|
18
|
+
"description": "By-the-way side conversations: a read-only, codebase-aware side agent in a widget, out of the main context",
|
|
19
19
|
"status": "published"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"name": "goal",
|
|
23
23
|
"npm": "@pify/goal",
|
|
24
24
|
"repo": "https://github.com/pifydev/goal",
|
|
25
|
-
"description": "Pin a session goal and keep the agent anchored: ordered steps,
|
|
25
|
+
"description": "Pin a session goal and keep the agent anchored: ordered steps, evidence-gated completion, cost-weighted budget",
|
|
26
26
|
"status": "published"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"name": "memory",
|
|
30
30
|
"npm": "@pify/memory",
|
|
31
31
|
"repo": "https://github.com/pifydev/memory",
|
|
32
|
-
"description": "Persistent memory across sessions: two-tier markdown, FTS5 search, secret-scanned writes,
|
|
32
|
+
"description": "Persistent memory across sessions: two-tier markdown, FTS5 search, secret-scanned writes, consent-gated project tier",
|
|
33
33
|
"status": "published",
|
|
34
34
|
"conflicts": [
|
|
35
35
|
"pi-memory"
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"name": "plan-mode",
|
|
40
40
|
"npm": "@pify/plan-mode",
|
|
41
41
|
"repo": "https://github.com/pifydev/plan-mode",
|
|
42
|
-
"description": "Read-only planning with an approve-then-execute gate: enforced tool policy, tracked
|
|
42
|
+
"description": "Read-only planning with an approve-then-execute gate: enforced tool policy, tracked steps, plans as files",
|
|
43
43
|
"status": "published",
|
|
44
44
|
"conflicts": [
|
|
45
45
|
"@narumitw/pi-plan-mode"
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"name": "pretty",
|
|
50
50
|
"npm": "@pify/pretty",
|
|
51
51
|
"repo": "https://github.com/pifydev/pretty",
|
|
52
|
-
"description": "Compact theme-aware rendering for built-in tools: summaries, highlighted reads,
|
|
52
|
+
"description": "Compact theme-aware rendering for built-in tools: summaries, highlighted reads, word-level diff emphasis",
|
|
53
53
|
"status": "published",
|
|
54
54
|
"conflicts": [
|
|
55
55
|
"pi-pretty",
|
|
@@ -57,60 +57,74 @@
|
|
|
57
57
|
"pi-tool-display"
|
|
58
58
|
]
|
|
59
59
|
},
|
|
60
|
+
{
|
|
61
|
+
"name": "search",
|
|
62
|
+
"npm": "@pify/search",
|
|
63
|
+
"repo": "https://github.com/pifydev/search",
|
|
64
|
+
"description": "Fuzzy file finding and indexed content search: fffind and ffgrep, with a pure-TypeScript fallback",
|
|
65
|
+
"status": "published"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "skills",
|
|
69
|
+
"npm": "@pify/skills",
|
|
70
|
+
"repo": "https://github.com/pifydev/skills",
|
|
71
|
+
"description": "See the skills pi has loaded, what they cost in every request, and which ones ever fire",
|
|
72
|
+
"status": "published"
|
|
73
|
+
},
|
|
60
74
|
{
|
|
61
75
|
"name": "subagent",
|
|
62
76
|
"npm": "@pify/subagent",
|
|
63
77
|
"repo": "https://github.com/pifydev/subagent",
|
|
64
|
-
"description": "Spawn scoped subagents: agent_run/agent_result, @agent mentions, custom agent types,
|
|
78
|
+
"description": "Spawn scoped subagents: agent_run/agent_result, @agent mentions, custom agent types, ask_supervisor, results delivered not polled",
|
|
65
79
|
"status": "published"
|
|
66
80
|
},
|
|
67
81
|
{
|
|
68
82
|
"name": "swarm",
|
|
69
83
|
"npm": "@pify/swarm",
|
|
70
84
|
"repo": "https://github.com/pifydev/swarm",
|
|
71
|
-
"description": "
|
|
85
|
+
"description": "Run many pi agents in parallel: fan-out with per-item routing, concurrency queue, shared mailbox, results delivered not polled",
|
|
72
86
|
"status": "published"
|
|
73
87
|
},
|
|
74
88
|
{
|
|
75
89
|
"name": "task",
|
|
76
90
|
"npm": "@pify/task",
|
|
77
91
|
"repo": "https://github.com/pifydev/task",
|
|
78
|
-
"description": "Task tracking with dependency graph, evidence-gated completion, live widget,
|
|
92
|
+
"description": "Task tracking with a dependency graph, evidence-gated completion, live widget, and a sweep when the list finishes",
|
|
79
93
|
"status": "published"
|
|
80
94
|
},
|
|
81
95
|
{
|
|
82
96
|
"name": "todo",
|
|
83
97
|
"npm": "@pify/todo",
|
|
84
98
|
"repo": "https://github.com/pifydev/todo",
|
|
85
|
-
"description": "Agent working-memory checklist:
|
|
99
|
+
"description": "Agent working-memory checklist: complete-replacement writes, next-item surfacing, live widget",
|
|
86
100
|
"status": "published"
|
|
87
101
|
},
|
|
88
102
|
{
|
|
89
103
|
"name": "usage",
|
|
90
104
|
"npm": "@pify/usage",
|
|
91
105
|
"repo": "https://github.com/pifydev/usage",
|
|
92
|
-
"description": "Token and cost reporting: live footer, local-history dashboard with per-project
|
|
106
|
+
"description": "Token and cost reporting: live footer, local-history dashboard with per-project totals, context breakdown",
|
|
93
107
|
"status": "published"
|
|
94
108
|
},
|
|
95
109
|
{
|
|
96
110
|
"name": "workflow",
|
|
97
111
|
"npm": "@pify/workflow",
|
|
98
112
|
"repo": "https://github.com/pifydev/workflow",
|
|
99
|
-
"description": "Deterministic agent orchestration
|
|
113
|
+
"description": "Deterministic agent orchestration through JavaScript scripts: agent()/parallel()/pipeline(), gates, resume",
|
|
100
114
|
"status": "published"
|
|
101
115
|
},
|
|
102
116
|
{
|
|
103
117
|
"name": "worktree",
|
|
104
118
|
"npm": "@pify/worktree",
|
|
105
119
|
"repo": "https://github.com/pifydev/worktree",
|
|
106
|
-
"description": "Safe git-worktree management: create/list/merge/remove with safety rails,
|
|
120
|
+
"description": "Safe git-worktree management: create/list/merge/remove with safety rails, plus /worktree enter to take the session along",
|
|
107
121
|
"status": "published"
|
|
108
122
|
},
|
|
109
123
|
{
|
|
110
124
|
"name": "yolo",
|
|
111
125
|
"npm": "@pify/yolo",
|
|
112
126
|
"repo": "https://github.com/pifydev/yolo",
|
|
113
|
-
"description": "A safety gradient from auto-approve-everything to ask-about-anything: four modes,
|
|
127
|
+
"description": "A safety gradient from auto-approve-everything to ask-about-anything: four modes, read-before-write, undo trail, rewind to before a prompt",
|
|
114
128
|
"status": "published"
|
|
115
129
|
}
|
|
116
130
|
],
|
|
@@ -125,6 +139,8 @@
|
|
|
125
139
|
"memory",
|
|
126
140
|
"plan-mode",
|
|
127
141
|
"pretty",
|
|
142
|
+
"search",
|
|
143
|
+
"skills",
|
|
128
144
|
"subagent",
|
|
129
145
|
"swarm",
|
|
130
146
|
"task",
|