@gavin-hu/my-pi-agent 0.20.0 → 0.22.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.
Files changed (298) hide show
  1. package/README.md +46 -30
  2. package/README.zh-CN.md +40 -25
  3. package/assets/screens/board.png +0 -0
  4. package/assets/screens/chrome.png +0 -0
  5. package/assets/screens/file-browse.png +0 -0
  6. package/assets/screens/plan-review.png +0 -0
  7. package/assets/screens/plan.png +0 -0
  8. package/docs/extensions/README.md +22 -23
  9. package/docs/extensions/board.md +397 -168
  10. package/docs/extensions/bytefly.md +234 -197
  11. package/docs/extensions/check.md +15 -17
  12. package/docs/extensions/context.md +35 -15
  13. package/docs/extensions/file-browse.md +57 -63
  14. package/docs/extensions/file-open.md +9 -11
  15. package/docs/extensions/file-read.md +12 -14
  16. package/docs/extensions/goal.md +15 -17
  17. package/docs/extensions/job.md +54 -42
  18. package/docs/extensions/memory.md +17 -19
  19. package/docs/extensions/plan.md +197 -140
  20. package/docs/extensions/question.md +16 -18
  21. package/docs/extensions/rewind.md +17 -19
  22. package/docs/extensions/serve.md +145 -0
  23. package/docs/extensions/session-bus.md +38 -16
  24. package/docs/extensions/subagent.md +23 -25
  25. package/docs/extensions/team.md +83 -44
  26. package/docs/extensions/todo.md +18 -18
  27. package/docs/extensions/watch.md +31 -31
  28. package/docs/extensions/web-access.md +2 -4
  29. package/docs/extensions/wechat.md +34 -35
  30. package/docs/extensions/worktree.md +56 -50
  31. package/extensions/board/commands.ts +79 -25
  32. package/extensions/board/format.ts +43 -24
  33. package/extensions/board/index.ts +17 -4
  34. package/extensions/board/input.ts +4 -9
  35. package/extensions/board/join.ts +5 -20
  36. package/extensions/board/lazy-page.ts +40 -0
  37. package/extensions/board/page.ts +65 -93
  38. package/extensions/board/result.ts +30 -39
  39. package/extensions/board/rows.ts +62 -25
  40. package/extensions/board/schema.ts +49 -11
  41. package/extensions/board/snapshot.ts +8 -6
  42. package/extensions/board/tone.ts +22 -0
  43. package/extensions/board/tools.ts +154 -55
  44. package/extensions/board/transport/router.ts +3 -5
  45. package/extensions/board/transport/server.ts +59 -28
  46. package/extensions/board/types.ts +36 -42
  47. package/extensions/board/view/card.ts +229 -0
  48. package/extensions/board/view/client.ts +35 -16
  49. package/extensions/board/view/dialog.ts +169 -6
  50. package/extensions/board/view/empty.ts +47 -0
  51. package/extensions/board/view/keys.ts +13 -2
  52. package/extensions/board/view/live.ts +90 -28
  53. package/extensions/board/view/names.ts +13 -4
  54. package/extensions/board/view/page.ts +38 -13
  55. package/extensions/board/view/render.ts +219 -277
  56. package/extensions/board/view/styles.ts +130 -32
  57. package/extensions/board/view/team.ts +297 -76
  58. package/extensions/bytefly/block/fallback.ts +1 -1
  59. package/extensions/bytefly/doctor/runtime.ts +5 -2
  60. package/extensions/bytefly/footer/collect/label.ts +60 -0
  61. package/extensions/bytefly/footer/collect/snapshot.ts +8 -1
  62. package/extensions/bytefly/footer/config.ts +7 -8
  63. package/extensions/bytefly/footer/register.ts +33 -4
  64. package/extensions/bytefly/footer/render/footer.ts +18 -4
  65. package/extensions/bytefly/footer/render/key.ts +46 -0
  66. package/extensions/bytefly/footer/render/layout.ts +13 -3
  67. package/extensions/bytefly/footer/render/lines.ts +10 -7
  68. package/extensions/bytefly/footer/render/segments.ts +41 -38
  69. package/extensions/bytefly/footer/render/status.ts +0 -11
  70. package/extensions/bytefly/footer/types.ts +7 -0
  71. package/extensions/bytefly/header/component.ts +4 -20
  72. package/extensions/bytefly/header/config.ts +1 -1
  73. package/extensions/bytefly/index.ts +32 -6
  74. package/extensions/bytefly/mode/editor.ts +115 -0
  75. package/extensions/bytefly/panel/commands.ts +210 -120
  76. package/extensions/bytefly/panel/format.ts +4 -4
  77. package/extensions/bytefly/panel/settings.ts +73 -6
  78. package/extensions/bytefly/panel/tui/keys.ts +2 -6
  79. package/extensions/bytefly/update/cache.ts +1 -1
  80. package/extensions/bytefly/update/register.ts +4 -4
  81. package/extensions/bytefly/working/config.ts +5 -7
  82. package/extensions/bytefly/working/format.ts +10 -13
  83. package/extensions/bytefly/working/register.ts +22 -27
  84. package/extensions/check/commands.ts +3 -2
  85. package/extensions/check/render.ts +10 -1
  86. package/extensions/check/{tui.ts → view/check-screens.ts} +14 -19
  87. package/extensions/context/commands.ts +2 -2
  88. package/extensions/context/{tui.ts → view/context-report.ts} +51 -19
  89. package/extensions/file-browse/config/config.ts +4 -19
  90. package/extensions/file-browse/index.ts +89 -79
  91. package/extensions/file-browse/live/live.ts +1 -1
  92. package/extensions/file-browse/transport/router.ts +12 -4
  93. package/extensions/file-browse/transport/server.ts +61 -28
  94. package/extensions/file-browse/view/chrome.ts +4 -4
  95. package/extensions/file-browse/view/client.ts +3 -1
  96. package/extensions/file-browse/view/html.ts +73 -40
  97. package/extensions/file-browse/view/live-client.ts +2 -2
  98. package/extensions/file-browse/view/markdown.ts +13 -14
  99. package/extensions/file-browse/view/palette.ts +2 -2
  100. package/extensions/file-browse/view/raw-html.ts +9 -9
  101. package/extensions/file-browse/view/tree.ts +1 -1
  102. package/extensions/file-browse/view/urls.ts +20 -6
  103. package/extensions/file-read/render.ts +4 -4
  104. package/extensions/goal/plan-route.ts +2 -2
  105. package/extensions/goal/tui.ts +12 -2
  106. package/extensions/job/child.ts +527 -0
  107. package/extensions/job/clock.ts +142 -0
  108. package/extensions/job/commands.ts +4 -2
  109. package/extensions/job/config.ts +8 -1
  110. package/extensions/job/format.ts +22 -1
  111. package/extensions/job/log-writer.ts +13 -2
  112. package/extensions/job/registry.ts +63 -7
  113. package/extensions/job/render.ts +34 -0
  114. package/extensions/job/runtime.ts +296 -655
  115. package/extensions/job/session.ts +132 -19
  116. package/extensions/job/store.ts +7 -7
  117. package/extensions/job/tools.ts +21 -9
  118. package/extensions/job/types.ts +47 -0
  119. package/extensions/job/{tui.ts → view/jobs-screen.ts} +19 -99
  120. package/extensions/job/waiters.ts +44 -1
  121. package/extensions/memory/commands.ts +4 -2
  122. package/extensions/memory/{tui.ts → view/memory-picker.ts} +12 -12
  123. package/extensions/plan/commands.ts +12 -9
  124. package/extensions/plan/feedback.ts +62 -16
  125. package/extensions/plan/format.ts +8 -2
  126. package/extensions/plan/git-bash.ts +115 -16
  127. package/extensions/plan/index.ts +58 -51
  128. package/extensions/plan/plan-index.ts +4 -2
  129. package/extensions/plan/plan-text.ts +114 -0
  130. package/extensions/plan/plans.ts +5 -54
  131. package/extensions/plan/policy.ts +8 -10
  132. package/extensions/plan/review-lazy.ts +85 -0
  133. package/extensions/plan/review.ts +2 -2
  134. package/extensions/plan/runtime.ts +61 -41
  135. package/extensions/plan/sections.ts +1 -1
  136. package/extensions/plan/steps.ts +3 -3
  137. package/extensions/plan/todos.ts +1 -1
  138. package/extensions/plan/tools/cancel.ts +27 -62
  139. package/extensions/plan/tools/enter.ts +55 -81
  140. package/extensions/plan/tools/exit.ts +221 -238
  141. package/extensions/plan/tools/refusal.ts +18 -0
  142. package/extensions/plan/tools/steps.ts +75 -92
  143. package/extensions/plan/tools/write.ts +77 -120
  144. package/extensions/plan/tools.ts +188 -30
  145. package/extensions/plan/tui.ts +5 -5
  146. package/extensions/plan/types.ts +48 -5
  147. package/extensions/plan/web-blocks.ts +76 -5
  148. package/extensions/plan/web-chrome.ts +4 -0
  149. package/extensions/plan/web-client.ts +102 -2
  150. package/extensions/plan/web-collab.ts +4 -4
  151. package/extensions/plan/web-comments.ts +39 -8
  152. package/extensions/plan/web-composer.ts +14 -3
  153. package/extensions/plan/web-keys.ts +149 -25
  154. package/extensions/plan/web-lazy.ts +53 -0
  155. package/extensions/plan/web-markdown.ts +10 -68
  156. package/extensions/plan/web-outline.ts +22 -2
  157. package/extensions/plan/web-page.ts +56 -86
  158. package/extensions/plan/web-payload.ts +188 -0
  159. package/extensions/plan/web-plan.ts +23 -13
  160. package/extensions/plan/web-router.ts +18 -9
  161. package/extensions/plan/web-settle.ts +14 -7
  162. package/extensions/plan/web-share-session.ts +24 -55
  163. package/extensions/plan/web-share.ts +19 -37
  164. package/extensions/plan/web-write.ts +112 -0
  165. package/extensions/plan/web.ts +67 -131
  166. package/extensions/question/tools.ts +6 -2
  167. package/extensions/question/{tui.ts → view/question-screen.ts} +11 -11
  168. package/extensions/rewind/commands/commands.ts +6 -3
  169. package/extensions/rewind/state/runtime.ts +1 -1
  170. package/extensions/rewind/{view/status.ts → status.ts} +4 -4
  171. package/extensions/rewind/view/review-tui.ts +4 -4
  172. package/extensions/serve/config.ts +39 -0
  173. package/extensions/serve/index.ts +85 -0
  174. package/extensions/serve/registry.ts +260 -0
  175. package/extensions/session-bus/commands.ts +11 -6
  176. package/extensions/session-bus/join-request.ts +17 -9
  177. package/extensions/session-bus/mail-watch.ts +26 -17
  178. package/extensions/session-bus/protocol.ts +15 -3
  179. package/extensions/session-bus/resolve.ts +5 -7
  180. package/extensions/session-bus/result.ts +1 -27
  181. package/extensions/session-bus/runtime.ts +40 -12
  182. package/extensions/session-bus/store.ts +101 -19
  183. package/extensions/session-bus/tools.ts +5 -4
  184. package/extensions/session-bus/types.ts +19 -0
  185. package/extensions/session-bus/{tui.ts → view/session-list.ts} +16 -16
  186. package/extensions/subagent/agents.ts +1 -1
  187. package/extensions/subagent/commands.ts +4 -2
  188. package/extensions/subagent/format.ts +15 -15
  189. package/extensions/subagent/index.ts +1 -1
  190. package/extensions/subagent/render.ts +3 -3
  191. package/extensions/subagent/{background-tui.ts → view/agents-board.ts} +11 -11
  192. package/extensions/team/commands.ts +24 -5
  193. package/extensions/team/dispatch.ts +18 -4
  194. package/extensions/team/format.ts +17 -2
  195. package/extensions/team/index.ts +9 -8
  196. package/extensions/team/schema.ts +6 -5
  197. package/extensions/team/tools.ts +107 -45
  198. package/extensions/team/types.ts +3 -2
  199. package/extensions/todo/commands.ts +4 -2
  200. package/extensions/todo/format.ts +11 -0
  201. package/extensions/todo/render.ts +57 -0
  202. package/extensions/todo/runtime.ts +1 -1
  203. package/extensions/todo/tools.ts +1 -1
  204. package/extensions/todo/{tui.ts → view/todo-screen.ts} +18 -90
  205. package/extensions/todo/widget.ts +47 -0
  206. package/extensions/watch/commands.ts +4 -2
  207. package/extensions/watch/format.ts +36 -7
  208. package/extensions/watch/render.ts +57 -0
  209. package/extensions/watch/runtime.ts +27 -22
  210. package/extensions/watch/tools.ts +4 -4
  211. package/extensions/watch/{tui.ts → view/watch-screen.ts} +18 -80
  212. package/extensions/web-access/fetch/tool.ts +12 -4
  213. package/extensions/wechat/commands/commands.ts +18 -14
  214. package/extensions/wechat/index.ts +72 -37
  215. package/extensions/wechat/state/credentials.ts +1 -1
  216. package/extensions/wechat/state/state.ts +1 -1
  217. package/extensions/wechat/text/status.ts +112 -0
  218. package/extensions/wechat/types.ts +2 -2
  219. package/extensions/wechat/view/status-screen.ts +4 -103
  220. package/extensions/worktree/commands.ts +11 -9
  221. package/extensions/worktree/enter.ts +2 -2
  222. package/extensions/worktree/exit.ts +2 -2
  223. package/extensions/worktree/index.ts +5 -5
  224. package/extensions/worktree/screen.ts +3 -3
  225. package/extensions/worktree/status.ts +2 -2
  226. package/extensions/worktree/tools.ts +113 -116
  227. package/lib/README.md +28 -13
  228. package/lib/board/actions.ts +111 -0
  229. package/lib/board/artifact.ts +149 -0
  230. package/lib/board/card.ts +163 -52
  231. package/lib/board/config.ts +58 -0
  232. package/lib/board/contract.ts +113 -0
  233. package/lib/board/join.ts +38 -0
  234. package/lib/board/lanes.ts +182 -0
  235. package/lib/board/lead.ts +130 -0
  236. package/lib/board/limits.ts +78 -0
  237. package/lib/board/links.ts +31 -10
  238. package/lib/board/page-pointer.ts +30 -5
  239. package/lib/board/read.ts +83 -0
  240. package/lib/board/reason.ts +102 -0
  241. package/lib/board/round-text.ts +68 -6
  242. package/lib/board/round.ts +31 -15
  243. package/lib/board/rules.ts +151 -307
  244. package/lib/board/seat.ts +35 -0
  245. package/lib/board/session.ts +199 -51
  246. package/lib/board/skipped.ts +22 -0
  247. package/lib/board/steps.ts +487 -0
  248. package/lib/board/store.ts +119 -36
  249. package/lib/board/tone.ts +92 -0
  250. package/lib/board/view.ts +81 -63
  251. package/lib/bus-request.ts +83 -0
  252. package/{extensions/watch → lib}/child.ts +40 -21
  253. package/lib/env.ts +65 -7
  254. package/lib/format.ts +13 -0
  255. package/lib/http/index.ts +17 -11
  256. package/lib/http/mount.ts +142 -0
  257. package/lib/http/port.ts +30 -0
  258. package/lib/http/serve.ts +170 -46
  259. package/lib/http/server.ts +3 -3
  260. package/lib/lazy.ts +45 -0
  261. package/lib/plan-entry.ts +46 -21
  262. package/lib/plans/paths.ts +82 -0
  263. package/lib/policy.ts +9 -6
  264. package/lib/report.ts +3 -2
  265. package/lib/requirements.ts +10 -10
  266. package/lib/session-label.ts +129 -7
  267. package/lib/session-roster.ts +43 -1
  268. package/lib/session-tool.ts +39 -22
  269. package/lib/stray-fields.ts +7 -2
  270. package/lib/tool-names.ts +5 -10
  271. package/lib/tui/README.md +29 -11
  272. package/lib/tui/chrome.ts +16 -15
  273. package/lib/tui/cursor.ts +18 -3
  274. package/lib/tui/glyphs.ts +11 -11
  275. package/lib/tui/render-cache.ts +29 -0
  276. package/lib/tui/tokens.ts +33 -2
  277. package/lib/tui/tool.ts +33 -4
  278. package/lib/web/README.md +21 -0
  279. package/lib/web/client-runtime.ts +27 -1
  280. package/lib/web/components.ts +5 -1
  281. package/lib/web/index.ts +1 -0
  282. package/lib/web/markdown.ts +83 -0
  283. package/lib/web/markup.ts +20 -2
  284. package/lib/web/runtime.ts +9 -10
  285. package/package.json +8 -2
  286. package/skills/init/SKILL.md +5 -5
  287. package/skills/next/SKILL.md +3 -5
  288. package/extensions/board/config.ts +0 -36
  289. package/extensions/board/seat.ts +0 -28
  290. package/lib/tui/index.ts +0 -34
  291. package/skills/project-docs/SKILL.md +0 -133
  292. package/skills/project-docs/references/audit.md +0 -131
  293. package/skills/project-docs/references/changelog.md +0 -105
  294. package/skills/project-docs/references/discovery.md +0 -127
  295. package/skills/project-docs/references/readme.md +0 -80
  296. package/skills/project-docs/references/release.md +0 -84
  297. package/skills/project-docs/references/roadmap.md +0 -93
  298. package/skills/project-docs/scripts/state.ts +0 -316
package/README.md CHANGED
@@ -11,9 +11,9 @@
11
11
  of extensions, skills, and themes to the agent you already use — install the pack, turn
12
12
  off what you do not want, and keep using Pi unchanged.
13
13
 
14
- This page is the catalog and the setup instructions. For how to use a feature —
15
- the keys, the commands, and what you should see — start with the
16
- [user guide](./docs/user-guide/).
14
+ This page is the catalog and the setup instructions. Each feature's own page
15
+ under [`docs/extensions/`](./docs/extensions/) carries the keys, the commands, and
16
+ what you should see.
17
17
 
18
18
  ![A terminal window running the Pi TUI: the bytefly header naming Pi and bytefly's versions, three key-hint rows, a nameplated message with its answer and an edit diff behind the rail, a notice that two background jobs finished, naming the test run that passed and the build that failed, the turn rule, the goal and todo rails, the input editor with a half-typed request between its two rules, and the two-line footer — the plan chip and the branch above, the context gauge, the priced cost against its $5 budget, and the model below](assets/screens/chrome.png)
19
19
 
@@ -57,13 +57,10 @@ like any other.
57
57
  Requires a working [Pi](https://pi.dev) installation.
58
58
 
59
59
  ```bash
60
- pi install npm:@gavin-hu/my-pi-agent
60
+ pi install npm:@gavin-hu/my-pi-agent # the latest release
61
+ pi install git:github.com/gavin-hu/my-pi-agent@v0.22.0 # a pinned release
61
62
  ```
62
63
 
63
- [User guide](./docs/user-guide/) has the other sources — git, a
64
- pinned release, a project-local install, and a trial that writes nothing — plus
65
- the fit decision, the first workflows, and how to remove the pack.
66
-
67
64
  `git` on `PATH` is needed by [`worktree`](./docs/extensions/worktree.md) and
68
65
  [`rewind`](./docs/extensions/rewind.md); everything else degrades or disables cleanly,
69
66
  and `/bytefly doctor` names what is missing, including optional runtime pieces.
@@ -78,10 +75,10 @@ Then, from inside Pi:
78
75
  verdict word, enables or disables one, and clears a project override with `x`;
79
76
  `/` filters the rows, `!` keeps only what needs attention, and `?` shows every
80
77
  key.
81
- - `/bytefly settings` opens the control center's Settings section: the twelve
78
+ - `/bytefly settings` opens the control center's Settings section: the fifteen
82
79
  preferences a session changes, grouped under Startup, Notifications, Session,
83
- and Price with each value in an aligned column, `Space`/`Enter` to change one
84
- and `s` for Global/Project scope. Every other key is a `bytefly.json` edit,
80
+ Board, and Price with each value in an aligned column, `Space`/`Enter` to change
81
+ one and `s` for Global/Project scope. Every other key is a `bytefly.json` edit,
85
82
  listed in the configuration reference.
86
83
  - `/bytefly skills` opens the control center's Skills section: one row per Pi
87
84
  skill with its enable checkbox and at most one verdict word, what its `SKILL.md`
@@ -108,16 +105,15 @@ document. `PI_OFFLINE` skips the check;
108
105
 
109
106
  ## What you get
110
107
 
111
- 21 extensions, 4 packaged skills, and 2 themes, grouped by the promises the
112
- [roadmap](./ROADMAP.md) tracks; the [guide](./docs/user-guide/) covers the same
113
- ground chapter by chapter. Each extension's own page in `docs/extensions/` has
114
- the full tool and command surface, opening with its capabilities.
108
+ 22 extensions, 3 packaged skills, and 2 themes, grouped by the promises this
109
+ README makes. Each extension's own page in `docs/extensions/`
110
+ has the full tool and command surface, opening with its capabilities.
115
111
 
116
112
  ### Plan and delegate
117
113
 
118
114
  | Extension | Tools and commands | What it does |
119
115
  |---|---|---|
120
- | [`plan`](./docs/extensions/plan.md) | `enter_plan_mode`, `write_plan`, `exit_plan_mode`, `cancel_plan_mode`, `set_plan_steps`, `/plan`, `--plan` | Read-only planning: the model investigates, saves a plan under `~/.pi/agent/plans/<repo-key>` — one store per repository, shared by its worktrees — and you approve it before anything is written. Review in the TUI, or open it in a browser to leave inline comments: the page follows the plan file live, and you can hand one reviewer link per teammate so each comments under their own name. The `init` skill uses the same review to create or update a project's `AGENTS.md`. |
116
+ | [`plan`](./docs/extensions/plan.md) | `plan`, `/plan`, `--plan` | Read-only planning, one tool with five actions — `enter`, `write`, `exit`, `steps`, `cancel`: the model investigates, saves a plan under `~/.pi/agent/plans/<repo-key>` — one store per repository, shared by its worktrees — and you approve it before anything is written. Review in the TUI, or open it in a browser to leave inline comments: the page follows the plan file live, and you can hand one reviewer link per teammate so each comments under their own name. The `init` skill uses the same review to create or update a project's `AGENTS.md`. |
121
117
  | [`check`](./docs/extensions/check.md) | `run_check`, `/check` | Detect the project's test, lint, or typecheck command (or take `check.command`), run it in a supervised process, and turn failures into a navigable `file:line` list. |
122
118
  | [`subagent`](./docs/extensions/subagent.md) | `subagent`, `/agents` | Delegate a task to a specialist agent (`explorer`, `planner`, `reviewer`, `worker`, `researcher`, `tester`, `debugger`, `documenter`) in its own Pi process — single, parallel, chained, or in the background, with a footer chip while it runs and a finish notice. |
123
119
  | [`todo`](./docs/extensions/todo.md) | `todo`, `/todos` | A persistent task list (`pending` / `in_progress` / `completed`) with a one-line widget. |
@@ -126,15 +122,16 @@ the full tool and command surface, opening with its capabilities.
126
122
  | [`job`](./docs/extensions/job.md) | `job`, `/jobs` | Run long-lived shell commands in the background; inspect logs, wait, or kill them. |
127
123
  | [`watch`](./docs/extensions/watch.md) | `watch`, `/watch` | Tail a file or command output, match lines against patterns, and alert you or hand matching lines to the agent. |
128
124
  | [`session-bus`](./docs/extensions/session-bus.md) | `session`, `/sessions` (screen) | Coordinate parallel Pi sessions on one repository: discover peers, exchange short messages/events, consume an inbox, or claim paths before editing, with `/sessions` as a live board of peers, unread mail, and claims. Local, pull-based by default, with an opt-in inbox watch that raises this session's turn once it is idle; it never spawns an agent. |
129
- | [`board`](./docs/extensions/board.md) | `board`, `/board` | One shared feature board per repository: a card per feature, which any session claims, moves, edits, notes, finishes, and archives — a finished card leaves the board for an `archive/` pile with its notes and landed commit still readable, so a long history stops costing every read — and one loopback page that shows the same cards live in a **Board** and a **Team** tab. The page is a read view — the tools are the only writers — served as the seat `team-lead`, so a second session opens the same page instead of starting a rival one, and handing a card to a teammate is `team`'s job because only it can message them. A card can carry a priority and name the cards it waits on. Steps stay in the owner's plan and `todo`; a card is the feature, its owner, and the history that explains it. `board.port` in `bytefly.json` pins the page's port, so a bookmarked URL survives a restart. |
130
- | [`team`](./docs/extensions/team.md) | `team`, `/team` | The lead's round over the same board. `/team join <label>` puts a session on the team, and `/board` does it for the lead as `team-lead`; then `assign` hands a feature to a running session, `offer` hands one to whoever is free — a broadcast that writes nothing, claimed by the first taker — and `reclaim` takes a card back to To do. A result says who will be woken for it and who will read it at their next turn, `/team` prints the round in the terminal without a browser, and nothing is spawned. |
125
+ | [`serve`](./docs/extensions/serve.md) | — | The session's one loopback server. `/board`, `/browse`, and a browser plan review mount path prefixes on it instead of binding their own listeners, so a session has one port, one chip, and one close path — and a second session (a peer conversation, another worktree, another Pi) still gets its own. The port is the project's own number, hashed from its repository key into `4780`–`5779`, so a bookmarked URL survives a restart without a setting, `serve.port` in `bytefly.json` overrides it, and a shared review borrows exactly one LAN address for the one page that asked. |
126
+ | [`board`](./docs/extensions/board.md) | `board`, `/board` | One shared feature board per repository: a card per feature, moving through five lanes — `backlog`, `plan`, `execute`, `blocked`, `done` — where a contract (`goal`, `acceptance`, `scopeOut`) must name the plan `plan` action `write` saved in this repository's plan store and be approved by the lead (`board.lead` in `bytefly.json`, never the card's holder) or by the person with `/board approve` before it may be executed, and the finished work spot-checked the same way (`/board review`) before it may be done; `plan` and `execute` are held to a WIP limit from `bytefly.json`. A finished card leaves the board for an `archive/` pile with its notes and landed commit still readable, and one loopback page shows the same cards live in a **Board** and a **Team** tab. The page is a read view — the tools are the only writers — served as the board's lead (`board.lead`, `lead` by default), so a second session opens the same page instead of starting a rival one, and handing a card to a teammate is `team`'s job because only it can message them. A card can carry a priority and name the cards it waits on. Steps stay in the owner's plan and `todo`; a card is the feature, its owner, and the history that explains it. The Team tab folds the owners a bus has no record of into one row, because a label that ever claimed a card stays an owner. The page answers at `/board` on the project's own port, hashed from its repository key, so the bookmark survives a restart without a setting; `serve.port` in `bytefly.json` overrides it. Off by default: load it with `PI_ENABLED_EXTENSIONS=board`. |
127
+ | [`team`](./docs/extensions/team.md) | `team`, `/team` | The lead's round over the same board. `/team join <label>` puts a session on the team, and `/board` does it for the lead under the name the page serves as; then `assign` hands a feature to a running session, `offer` hands one to whoever is free — a broadcast that writes nothing, claimed by the first taker — `reclaim` takes a card back to Backlog, and `claim` takes one for the lead itself, whose plan and contract are then `board`'s. A result says who will be woken for it and who will read it at their next turn, `/team` prints the round in the terminal without a browser, and nothing is spawned. Off by default with `board`: load both with `PI_ENABLED_EXTENSIONS=board,team`. |
131
128
  | [`context`](./docs/extensions/context.md) | `/context` | Show where the context window goes — system prompt, tool definitions, conversation by role, injected notes — and compact from the report with the before and after numbers. |
132
129
 
133
130
  ### Keep your work safe
134
131
 
135
132
  | Extension | Tools and commands | What it does |
136
133
  |---|---|---|
137
- | [`worktree`](./docs/extensions/worktree.md) | `enter_worktree`, `exit_worktree`, `prune_worktrees`, `list_worktrees`, `/worktree` (screen), `/worktree enter\|exit\|prune`, `--worktree` | Work inside an isolated `git worktree` on its own branch; the built-in read/write/edit/bash tools follow, and cleanup refuses to throw work away. |
134
+ | [`worktree`](./docs/extensions/worktree.md) | `worktree`, `/worktree` (screen), `/worktree enter\|exit\|prune`, `--worktree` | Work inside an isolated `git worktree` on its own branch — one tool with four actions: `enter`, `exit`, `list`, `prune`; the built-in read/write/edit/bash tools follow, and cleanup refuses to throw work away. |
138
135
  | [`rewind`](./docs/extensions/rewind.md) | `/rewind`, `/review`, `↺ N` status chip | Snapshot the repo before each prompt's first change, under `refs/pi/rewind`, restore code, conversation, or both, and review the latest turn's changes before reverting a file. |
139
136
  | [`memory`](./docs/extensions/memory.md) | `memory`, `/memory` | Durable cross-session notes as human-editable markdown, injected into each run and managed through the `/memory` picker. |
140
137
 
@@ -152,7 +149,7 @@ the full tool and command surface, opening with its capabilities.
152
149
 
153
150
  | Extension | Tools and commands | What it does |
154
151
  |---|---|---|
155
- | [`bytefly`](./docs/extensions/bytefly.md) | `/bytefly` (with the `doctor`, `settings`, `skills`, `update`, and `upgrade` subcommands), `run_doctor` | The visible layer: a themed header with a width-adaptive footer, a live run line on Pi's working row (tool, tool count, and elapsed time), and a transcript where every tool block leads with its call line and rails its result under it. `/bytefly` switches extensions and skills and holds the curated settings, and `/bytefly upgrade` installs a pending update through Pi's own package manager behind a confirmation; opt-in `notify` raises OS notifications when a run, a job, or a question needs you, and Pi's own startup update blocks become themed notices and header markers. `bytefly.json` is the config document every extension reads. |
152
+ | [`bytefly`](./docs/extensions/bytefly.md) | `/bytefly` (with the `doctor`, `settings`, `skills`, `update`, and `upgrade` subcommands), `run_doctor` | The visible layer: a themed header with a width-adaptive footer, a live run line on the composer's top border (a `working` count, the run's tools, and elapsed time), and a transcript where every tool block leads with its call line and rails its result under it. `/bytefly` switches extensions and skills and holds the curated settings, and `/bytefly upgrade` installs a pending update through Pi's own package manager behind a confirmation; opt-in `notify` raises OS notifications when a run, a job, or a question needs you, and Pi's own startup update blocks become themed notices and header markers. `bytefly.json` is the config document every extension reads. |
156
153
 
157
154
  ### Skills
158
155
 
@@ -164,7 +161,6 @@ advertised to the model, and its instructions load only when the task matches
164
161
  |---|---|
165
162
  | [`init`](./skills/init/SKILL.md) | Creates or updates the instruction file Pi actually reads (`AGENTS.md`, or `AGENTS.override.md` when it shadows it) through a built-in interactive interview and plan review, deriving commands, generated paths, packages, and purpose from repository evidence. |
166
163
  | [`refactor`](./skills/refactor/SKILL.md) | Audits a project or path for refactoring opportunities: duplication, oversized modules, coupling, drift, and high-churn code with weak tests. A bundled `scripts/inventory.ts` measures sizes, fan-in, churn, and test proximity so a finding is a number with a source, and the ranked shortlist has evidence and verification commands; it then carries the candidate you choose through a behaviour-preserving refactor, and the audit itself is read-only. |
167
- | [`project-docs`](./skills/project-docs/SKILL.md) | Keeps a project's documents telling the truth about the code: a read-only audit of the front door, the roadmap, the contributor path, and the changelog against the tree and against each other, then one mode per act that writes — a changelog bullet in the same commit as the change, a release section curated from the project's own rules, a shipped roadmap item deleted with the rest renumbered, and the front door's catalog, counts, and examples synced. Discovers each project's category names, scope spelling, item form, and guards rather than assuming a template, and a bundled `scripts/state.ts` prints the changelog's tag, window, and unreleased categories. |
168
164
  | [`next`](./skills/next/SKILL.md) | Suggests the next todos by priority — loose work, a broken or unfinished promise — from this conversation once it has done work, and from the tree only when it is empty, with the words and a path after the command saying what to ask and where to look. Read-only, and capped at a short numbered list with evidence and the command that starts each. |
169
165
 
170
166
  ### Themes
@@ -194,6 +190,17 @@ README use `bytefly-dark`.
194
190
  </tr>
195
191
  </table>
196
192
 
193
+ The plan review as the terminal draws it, then the three browser pages this
194
+ package serves: the board, the browser-based plan review, and the file browser.
195
+
196
+ ![The terminal plan review: a Plan Review title rule, a notice that one section changed since the last review, the plan body with its headings and ◼/◻ task checkboxes, a scroll gauge naming the current section and the visible line range, and the Esc/a/r/w, scroll, and section-jump hints](assets/screens/plan.png)
197
+
198
+ ![The board page: a toolbar with the repository's name and a live badge, Board and Team tabs, done-of-total progress, a filter, the keys button and a theme toggle; five lane trays, each with a dot, a count and a fold control; and cards carrying an owner chip, a note count and its age, path hints, a line naming what the card waits for, a line naming the cards it holds up, and a reason line, with no button on any of them](assets/screens/board.png)
199
+
200
+ ![The browser-based plan review: a sticky header with the plan title, a status chip, and the Approve & run, Save feedback, and Back to Pi actions, a Share action, a side panel with step progress and a section outline, and the plan as one measured column with a comment rail holding the owner's own comment and a teammate's @priya comment](assets/screens/plan-review.png)
201
+
202
+ ![The loopback file browser, showing the path filter, the file tree, and a rendered Markdown preview](assets/screens/file-browse.png)
203
+
197
204
  ### Tool renderings
198
205
 
199
206
  Every tool block as the transcript draws it — the tool's own call line as the
@@ -202,13 +209,13 @@ each tool's own renderer (or bytefly's generic fallback): the user nameplate and
202
209
  a notice, Pi's built-ins, and every tool this package registers. The rail glyph
203
210
  is the `chrome.rail` setting.
204
211
 
205
- ![A full-page reference of every tool block: the user nameplate, a notice, the turn rule, Pi's read, write, edit, bash, grep, find, and ls renderers, and every package tool — todo, goal, memory, job, watch, subagent, web_search, web_fetch, read_doc, open_path, run_doctor, run_check, send_wechat, ask_user_question, session, board, team, the plan tools, and the worktree tools](assets/screens/tool-renderings.png)
212
+ <img src="assets/screens/tool-renderings.png" alt="A full-page reference of every tool block: the user nameplate, a notice, the turn rule, Pi's read, write, edit, bash, grep, find, and ls renderers, and every package tool — todo, goal, memory, job, watch, subagent, web_search, web_fetch, read_doc, open_path, run_doctor, run_check, send_wechat, ask_user_question, session, board, team, the plan tools, and the worktree tools" width="100%">
206
213
 
207
214
  `bun run screenshot:tools` regenerates it; `bun run screenshot:tool-pngs` writes
208
215
  one image per tool under [`assets/tools/`](./assets/tools).
209
216
 
210
- Ready to use one? The [user guide](./docs/user-guide/) has a walkthrough for
211
- each: the first run, the keys that matter, and what to expect on screen.
217
+ Ready to use one? Each extension's page under [`docs/extensions/`](./docs/extensions/)
218
+ opens with what it does and the keys and commands it answers.
212
219
 
213
220
  ## Configuration
214
221
 
@@ -222,7 +229,16 @@ around its keys, and
222
229
  settings screen walkthrough, and every section's keys with their type, default,
223
230
  and bounds.
224
231
 
225
- Every extension is on by default. To load the pack without some of them, set
232
+ Almost every extension is on by default. `board` and `team` are the exception: the
233
+ work list and the lead's half of it are one workflow a session either runs or does
234
+ not, so a session that never works a board should not carry those tools, commands,
235
+ and page. Set `PI_ENABLED_EXTENSIONS` to the opt-in names to load:
236
+
237
+ ```bash
238
+ PI_ENABLED_EXTENSIONS=board,team pi -e .
239
+ ```
240
+
241
+ To load the pack without some of the extensions that are on by default, set
226
242
  `PI_DISABLED_EXTENSIONS` to a comma- or whitespace-separated list of extension
227
243
  names (the directory names under [`extensions/`](./extensions/)):
228
244
 
@@ -230,21 +246,21 @@ names (the directory names under [`extensions/`](./extensions/)):
230
246
  PI_DISABLED_EXTENSIONS=todo,job pi -e .
231
247
  ```
232
248
 
233
- Names are compared case-insensitively and unknown names are ignored. This only
234
- stops the factories from registering; to drop the whole package, use Pi's
235
- `--no-extensions` or remove the package from your settings.
249
+ Names are compared case-insensitively and unknown names are ignored.
250
+ `PI_ENABLED_EXTENSIONS` only switches on the opt-in extensions, so naming one
251
+ there never disables another, and `PI_DISABLED_EXTENSIONS` still wins over it.
252
+ Both only stop the factories from registering; to drop the whole package, use
253
+ Pi's `--no-extensions` or remove the package from your settings.
236
254
 
237
255
  ## Documentation
238
256
 
239
257
  | Guide | What it covers |
240
258
  |---|---|
241
- | [User guide](./docs/user-guide/) | A chaptered manual: install, every feature, settings, troubleshooting, and a command reference. |
242
259
  | [Configuration](./docs/configuration.md) | Resolution, the settings screen, and every `bytefly.json` key with its default and bounds. |
243
260
  | [Architecture](./docs/architecture.md) | The target shape: the load path, the extension contract, the turn, state, layers, lifetimes, and where a change belongs. |
244
261
  | [Extension docs](./docs/extensions/) | One page per extension, opening with its capabilities: the tool and command surface, the integration contract, and the design notes. |
245
262
  | [Development](./docs/development.md) | Local setup, checks, tests, cross-platform notes, and the release process. |
246
263
  | [Security](./docs/security.md) | Trust boundaries for the loopback and remote surfaces. |
247
- | [Roadmap](./ROADMAP.md) | Where the pack is going, grouped by the README's promises, with the evidence behind each item. |
248
264
  | [Documentation index](./docs/README.md) | The map of everything: the guides, and the deep contracts behind them, by audience. |
249
265
 
250
266
  ## Contributing
package/README.zh-CN.md CHANGED
@@ -10,8 +10,8 @@
10
10
  `my-pi-agent` 是一个 [Pi](https://pi.dev) 包,在你已经使用的智能体之上新增一组精选
11
11
  扩展、技能和主题 —— 安装整个包,关掉你不需要的部分,其余照常使用 Pi。
12
12
 
13
- 本页是目录与安装说明。要了解某个功能怎么用 —— 按键、命令以及应有的效果 ——
14
- 请先看[用户指南](./docs/user-guide/)。
13
+ 本页是目录与安装说明。每个功能在 [`docs/extensions/`](./docs/extensions/) 下都有自己的页面,
14
+ 写清按键、命令以及应有的效果。
15
15
 
16
16
  ![一个运行 Pi TUI 的终端窗口:bytefly 头部标出 Pi 与 bytefly 的版本、三行按键提示、带名板的消息及其回答与编辑差异(位于竖线内)、两个后台任务完成的通知(一个通过的测试任务与一个失败的构建任务)、回合分隔线、目标与待办栏、夹在两条横线之间且已输入半句的输入框,以及两行页脚(上下文指示、按价目计算的费用、模型名)](assets/screens/chrome.png)
17
17
 
@@ -50,12 +50,10 @@ Pi 通过 [`package.json`](./package.json) 里的 `pi` manifest 发现这些资
50
50
  需要一个可用的 [Pi](https://pi.dev) 安装。
51
51
 
52
52
  ```bash
53
- pi install npm:@gavin-hu/my-pi-agent
53
+ pi install npm:@gavin-hu/my-pi-agent # 最新发布版
54
+ pi install git:github.com/gavin-hu/my-pi-agent@v0.22.0 # 固定版本
54
55
  ```
55
56
 
56
- [用户指南](./docs/user-guide/) 介绍其余安装方式——git、固定版本、
57
- 仅项目本地安装,以及不写入任何内容的试用——还有适用性判断、首个工作流和移除方式。
58
-
59
57
  `git` 需在 `PATH` 上,供 [`worktree`](./docs/extensions/worktree.md) 与
60
58
  [`rewind`](./docs/extensions/rewind.md) 使用;其余部分会优雅降级或禁用,
61
59
  `/bytefly doctor` 会指出缺少什么,包括可选的运行时组件。
@@ -68,8 +66,8 @@ Windows、macOS 和 Linux 均可运行,完整检查套件在每个平台上都
68
66
  标出各区的数量与写入作用域。它按名称列出每个已加载扩展及其复选框与至多一个
69
67
  结论词,启用或禁用一个扩展,并用 `x` 清除项目级覆盖;`/` 过滤行,`!` 只保留
70
68
  需要注意的行,`?` 显示全部按键。
71
- - `/bytefly settings` 打开控制中心的 Settings 区:一次会话会改动的十二项设置按
72
- Startup、Notifications、Session、Price 四组排列,值对齐在同一列;用
69
+ - `/bytefly settings` 打开控制中心的 Settings 区:一次会话会改动的十五项设置按
70
+ Startup、Notifications、Session、Board、Price 五组排列,值对齐在同一列;用
73
71
  `Space`/`Enter` 修改一项,用 `s` 切换 Global/Project 作用域。其余键都是
74
72
  `bytefly.json` 编辑,见配置参考。
75
73
  - `/bytefly skills` 打开控制中心的 Skills 区:每个 Pi 技能一行,带启用复选框与
@@ -92,15 +90,14 @@ Pi 自己的版本请求只是被重新绘制,本包的最新版本则来自
92
90
 
93
91
  ## 包含内容
94
92
 
95
- 21 个扩展、4 个随包技能,以及 2 个主题,按 [路线图](./ROADMAP.md) 追踪的承诺分组;
96
- [用户指南](./docs/user-guide/) 按章节讲述同样的内容。每个扩展在 `docs/extensions/`
97
- 下的页面提供完整的工具与命令说明,并以能力表开头。
93
+ 22 个扩展、3 个随包技能,以及 2 个主题,按本 README 的承诺分组。
94
+ 每个扩展在 `docs/extensions/` 下的页面提供完整的工具与命令说明,并以能力表开头。
98
95
 
99
96
  ### 规划与委派
100
97
 
101
98
  | 扩展 | 工具与命令 | 说明 |
102
99
  |---|---|---|
103
- | [`plan`](./docs/extensions/plan.md) | `enter_plan_mode`, `write_plan`, `exit_plan_mode`, `cancel_plan_mode`, `set_plan_steps`, `/plan`, `--plan` | 只读规划:模型先调研,把计划保存到 `~/.pi/agent/plans/<repo-key>` 下(每个仓库一份,各 worktree 共享),你在写入任何内容前先批准。可在 TUI 中审阅,或在浏览器中打开以留下行内评论:页面会跟随计划文件实时更新,你也可以给每位同事各一个审阅链接,各自以绑定的名义评论。`init` 技能复用同一审阅流程来创建或更新项目的 `AGENTS.md`。 |
100
+ | [`plan`](./docs/extensions/plan.md) | `plan`, `/plan`, `--plan` | 只读规划(一个工具五个动作:`enter`、`write`、`exit`、`steps`、`cancel`):模型先调研,把计划保存到 `~/.pi/agent/plans/<repo-key>` 下(每个仓库一份,各 worktree 共享),你在写入任何内容前先批准。可在 TUI 中审阅,或在浏览器中打开以留下行内评论:页面会跟随计划文件实时更新,你也可以给每位同事各一个审阅链接,各自以绑定的名义评论。`init` 技能复用同一审阅流程来创建或更新项目的 `AGENTS.md`。 |
104
101
  | [`check`](./docs/extensions/check.md) | `run_check`, `/check` | 检测项目的测试、lint 或类型检查命令(或使用 `check.command`),在受监管的进程中运行,并把失败整理成可导航的 `file:line` 列表。 |
105
102
  | [`subagent`](./docs/extensions/subagent.md) | `subagent`, `/agents` | 把任务委派给专职智能体(`explorer`、`planner`、`reviewer`、`worker`、`researcher`、`tester`、`debugger`、`documenter`),运行在它自己的 Pi 进程中 —— 单个、并行、链式或在后台运行;后台运行时在页脚显示数量,完成后发出提示。 |
106
103
  | [`todo`](./docs/extensions/todo.md) | `todo`, `/todos` | 持久任务列表(`pending` / `in_progress` / `completed`),配一行式 widget。 |
@@ -109,15 +106,16 @@ Pi 自己的版本请求只是被重新绘制,本包的最新版本则来自
109
106
  | [`job`](./docs/extensions/job.md) | `job`, `/jobs` | 在后台运行长时 shell 命令;查看日志、等待或结束它们。 |
110
107
  | [`watch`](./docs/extensions/watch.md) | `watch`, `/watch` | 跟踪文件或命令输出,按模式匹配行,并提醒你或把匹配的行交给智能体。 |
111
108
  | [`session-bus`](./docs/extensions/session-bus.md) | `session`, `/sessions`(屏幕) | 在同一仓库的多个 Pi 会话之间协调:发现彼此、交换简短消息/事件、读取收件箱、编辑前声明路径;`/sessions` 是显示对等会话、未读邮件和路径声明的实时面板。本地、默认拉取式;收件箱监视需会话自行开启,空闲时会唤起本会话的一轮,从不创建智能体。 |
112
- | [`board`](./docs/extensions/board.md) | `board`、`/board` | 每个仓库一块共享看板:一张卡片代表一个 feature,任何 session 都可以认领、移动、编辑、加注、完成、归档——已完成的卡片会离开看板进入 `archive/`,其注记与落地 commit 仍可读,长历史不再拖累每次读取——同一个看板在浏览器里以 **Board** 和 **Team** 两个 tab 实时显示。页面只读——写入只走工具——并以固定席位 `team-lead` 对外服务,因此第二个 session 打开的是同一张页面,而不是另起一个;把卡片交给队友由 `team` 负责,因为只有它能给对端发消息。卡片可以带上优先级、声明自己在等待哪几张卡片。步骤留在 owner 的 plan 和 `todo` 里,卡片就是 feature、它的 owner,以及解释它的历史。在 `bytefly.json` 里设置 `board.port` 可以固定看板端口,收藏的地址在重启后依然有效。 |
113
- | [`team`](./docs/extensions/team.md) | `team`、`/team` | 同一块看板上的 lead 轮次。`/team join <label>` 让一个 session 加入团队,lead 打开 `/board` 时则以 `team-lead` 自动加入;随后 `assign` 把一个 feature 交给运行中的 session,`offer` 交给谁有空谁接——广播而不写卡片,由第一个认领的人拿走——`reclaim` 把卡片收回 To do。结果会说明谁会因此被叫醒、谁会在下一轮才读到;`/team` 在终端里打印同一份轮次,不用开浏览器,也不启动任何进程。 |
109
+ | [`serve`](./docs/extensions/serve.md) | — | 每个 session 一个 loopback 服务。`/board`、`/browse` 和浏览器里的 plan review 都在它上面挂载路径前缀,而不是各自监听端口,因此一个 session 只有一个端口、一个 chip、一条关闭路径——而第二个 session(peer 会话、另一个 worktree、另一个 Pi)依然有自己的端口。端口由仓库自身的 key 哈希到 `4780`–`5779`,每个项目各有自己的编号,因此收藏的地址在重启后依然有效、无需任何设置;`bytefly.json` 里的 `serve.port` 可以覆盖它;共享 review 只为发起共享的那一个页面借用同一个网段上的一个地址。 |
110
+ | [`board`](./docs/extensions/board.md) | `board`、`/board` | 每个仓库一块共享看板:一张卡片代表一个 feature,在五条车道间移动——`backlog`、`plan`、`execute`、`blocked`、`done`——契约(`goal`、`acceptance`、`scopeOut`)必须写明,并指向 `plan` 的 `write` 动作存进本仓库 plan store 的那份 plan 文件,由 lead(`bytefly.json` 里的 `board.lead`,且不能是卡片持有者)或本人用 `/board approve` 批准——之后才能进入执行,完成的工作同样要经过 `/board review` 抽检才能收尾;`plan` 与 `execute` 受 `bytefly.json` 里的 WIP 上限约束。已完成的卡片会离开看板进入 `archive/`,其注记与落地 commit 仍可读;同一个看板在浏览器里以 **Board** 和 **Team** 两个 tab 实时显示。页面只读——写入只走工具——以看板 lead(`board.lead`,默认 `lead`)的席位对外服务,因此第二个 session 打开的是同一张页面;把卡片交给队友由 `team` 负责,因为只有它能给对端发消息。卡片可以带上优先级、声明自己在等待哪几张卡片。步骤留在 owner 的 plan 和 `todo` 里,卡片就是 feature、它的 owner,以及解释它的历史。Team tab 会把 bus 没有记录的 owner 收成一行,因为只要某张卡片曾归属它,它就会一直是 owner。页面以 `/board` 挂在该项目自身的端口上(由仓库 key 哈希得到),因此收藏的地址重启后依然有效、无需设置;`bytefly.json` 里的 `serve.port` 可以覆盖它。默认关闭:用 `PI_ENABLED_EXTENSIONS=board` 加载。 |
111
+ | [`team`](./docs/extensions/team.md) | `team`、`/team` | 同一块看板上的 lead 轮次。`/team join <label>` 让一个 session 加入团队,lead 打开 `/board` 时则以页面席位之名自动加入;随后 `assign` 把一个 feature 交给运行中的 session,`offer` 交给谁有空谁接——广播而不写卡片,由第一个认领的人拿走——`reclaim` 把卡片收回 Backlog,`claim` 则让 lead 自己接手,之后的 plan 与 contract 交给 `board`。结果会说明谁会因此被叫醒、谁会在下一轮才读到;`/team` 在终端里打印同一份轮次,不用开浏览器,也不启动任何进程。与 `board` 一并默认关闭:用 `PI_ENABLED_EXTENSIONS=board,team` 加载。 |
114
112
  | [`context`](./docs/extensions/context.md) | `/context` | 显示上下文窗口的去向 —— 系统提示、工具定义、按角色拆分的对话、注入的笔记 —— 并从报告中触发压缩,给出压缩前后的数字。 |
115
113
 
116
114
  ### 保护你的工作
117
115
 
118
116
  | 扩展 | 工具与命令 | 说明 |
119
117
  |---|---|---|
120
- | [`worktree`](./docs/extensions/worktree.md) | `enter_worktree`, `exit_worktree`, `prune_worktrees`, `list_worktrees`, `/worktree` (screen), `/worktree enter\|exit\|prune`, `--worktree` | 在隔离的 `git worktree` 里、在独立分支上工作;内置的 read/write/edit/bash 工具会跟随,清理时也不会丢弃工作。 |
118
+ | [`worktree`](./docs/extensions/worktree.md) | `worktree`, `/worktree` (screen), `/worktree enter\|exit\|prune`, `--worktree` | 在隔离的 `git worktree` 里、在独立分支上工作(一个工具四个动作:`enter`、`exit`、`list`、`prune`);内置的 read/write/edit/bash 工具会跟随,清理时也不会丢弃工作。 |
121
119
  | [`rewind`](./docs/extensions/rewind.md) | `/rewind`, `/review`, `↺ N` 状态标记 | 在每次提示的首次改动前于 `refs/pi/rewind` 下对仓库生成快照,可恢复代码、对话或两者,并在还原文件前审阅本轮改动。 |
122
120
  | [`memory`](./docs/extensions/memory.md) | `memory`, `/memory` | 跨会话的持久笔记,以可人工编辑的 Markdown 保存,注入每次运行,并通过 `/memory` 选择器管理。 |
123
121
 
@@ -135,7 +133,7 @@ Pi 自己的版本请求只是被重新绘制,本包的最新版本则来自
135
133
 
136
134
  | 扩展 | 工具与命令 | 说明 |
137
135
  |---|---|---|
138
- | [`bytefly`](./docs/extensions/bytefly.md) | `/bytefly`(`doctor`、`settings`、`skills`、`update`、`upgrade` 子命令)、`run_doctor` | 可见的那一层:主题化头部配宽度自适应页脚,Pi 工作行上实时显示工具、调用次数与计时,转录中每个工具块以调用行为标题、结果正文挂在其下方。`/bytefly` 可开关扩展与技能,并集中存放精选设置;`/bytefly upgrade` 在确认后通过 Pi 自己的包管理器安装待更新版本;可选的 `notify` 会在一次运行、后台任务或待回答的问题需要你时发出系统通知,Pi 自己的启动更新块也会变成主题化 notice 与头部标记。`bytefly.json` 是每个扩展都会读取的配置文档。 |
136
+ | [`bytefly`](./docs/extensions/bytefly.md) | `/bytefly`(`doctor`、`settings`、`skills`、`update`、`upgrade` 子命令)、`run_doctor` | 可见的那一层:主题化头部配宽度自适应页脚,输入框上边框实时显示 `working` 计数、本次运行的工具数与计时,转录中每个工具块以调用行为标题、结果正文挂在其下方。`/bytefly` 可开关扩展与技能,并集中存放精选设置;`/bytefly upgrade` 在确认后通过 Pi 自己的包管理器安装待更新版本;可选的 `notify` 会在一次运行、后台任务或待回答的问题需要你时发出系统通知,Pi 自己的启动更新块也会变成主题化 notice 与头部标记。`bytefly.json` 是每个扩展都会读取的配置文档。 |
139
137
 
140
138
  ### 技能
141
139
 
@@ -145,7 +143,6 @@ Pi 自己的版本请求只是被重新绘制,本包的最新版本则来自
145
143
  |---|---|
146
144
  | [`init`](./skills/init/SKILL.md) | 通过内置的交互式访谈和计划审阅,基于仓库证据创建或更新 Pi 实际读取的指令文件(`AGENTS.md`;存在覆盖它的 `AGENTS.override.md` 时则是该文件),并从仓库推导命令、生成路径与包范围。 |
147
145
  | [`refactor`](./skills/refactor/SKILL.md) | 审计项目或路径中的重构机会:重复代码、过大的模块、耦合、结构漂移,以及测试薄弱且改动频繁的代码。随包的 `scripts/inventory.ts` 会量出体积、扇入、churn 和测试邻近度,让每条发现都带来源,排序清单附证据和验证命令;选定一个候选项后,它会把该重构带到不改行为地完成,而审计本身只读。 |
148
- | [`project-docs`](./skills/project-docs/SKILL.md) | 让项目的四份文档如实描述代码:只读审计门面、路线图、贡献路径与 changelog,既对照代码树也互相对照;然后每个写入动作一个模式——在变更的同一次提交里记下 changelog 条目、按项目自己的规则整理发布段落、在已发布的路线图条目上删除并把其余重新编号、同步门面的目录、计数与示例。它先摸清各项目的类目名、范围拼写、条目形制与守卫,而不是套用模板;随包的 `scripts/state.ts` 会打印 changelog 的 tag、窗口与未发布类目。 |
149
146
  | [`next`](./skills/next/SKILL.md) | 按优先级建议接下来的待办——未收尾的工作、已破坏或未兑现的承诺——会话已有工作时基于本次会话,仅当会话为空时才基于代码树;命令后的文字说明问什么、路径说明看哪里。只读,输出带证据和启动命令的简短编号清单。 |
150
147
 
151
148
  ### 主题
@@ -174,6 +171,16 @@ Pi 自己的版本请求只是被重新绘制,本包的最新版本则来自
174
171
  </tr>
175
172
  </table>
176
173
 
174
+ 下面是终端里画出的计划审查,以及本包在浏览器中提供的三个页面:看板、浏览器版计划审查和文件浏览器。
175
+
176
+ ![终端计划审查:Plan Review 标题线、一条说明自上次审查以来有一节已改动的通知、带标题与 ◼/◻ 任务复选框的计划正文、标出当前章节和可见行范围的滚动指示线,以及 Esc/a/r/w、滚动与章节跳转提示](assets/screens/plan.png)
177
+
178
+ ![看板页:带仓库名与实时徽标的工具栏、Board 与 Team 两个标签页、完成数/总数进度、过滤器、按键按钮和主题切换;五个泳道托盘,各带一个点、一个计数和一个折叠控件;卡片带负责人标签、笔记数及其时长、路径提示、一行说明该卡在等什么、一行说明它卡住了哪些卡,以及一行理由,卡片上没有任何按钮](assets/screens/board.png)
179
+
180
+ ![浏览器版计划审查:粘性头部带计划标题、状态标签,以及 Approve & run、Save feedback、Back to Pi 三个动作和一个 Share 动作;侧栏带步骤进度与章节大纲;计划本身是一列有度量宽度的正文,注释栏里放着负责人自己的评论和队友 @priya 的评论](assets/screens/plan-review.png)
181
+
182
+ ![回环文件浏览器:路径过滤器、文件树,以及渲染好的 Markdown 预览](assets/screens/file-browse.png)
183
+
177
184
  ### 工具渲染
178
185
 
179
186
  每个工具块都按转录中的样子绘制:工具自身的调用行作为标题,结果正文在其下方两列、
@@ -181,13 +188,13 @@ Pi 自己的版本请求只是被重新绘制,本包的最新版本则来自
181
188
  (每个工具自身的渲染器或 bytefly 的通用回退)——用户铭牌与通知、Pi 内置工具,以及本包注册的每个工具。
182
189
  侧栏字形由 `chrome.rail` 设置。
183
190
 
184
- ![每个工具块的全页参考图:用户铭牌、通知、回合分隔线,Pi 的 read、write、edit、bash、grep、find、ls 渲染器,以及每个包内工具——todo、goal、memory、job、watch、subagent、web_search、web_fetch、read_doc、open_path、run_doctor、send_wechat、ask_user_question、session、board、team、plan 工具与 worktree 工具](assets/screens/tool-renderings.png)
191
+ <img src="assets/screens/tool-renderings.png" alt="每个工具块的全页参考图:用户铭牌、通知、回合分隔线,Pi 的 read、write、edit、bash、grep、find、ls 渲染器,以及每个包内工具——todo、goal、memory、job、watch、subagent、web_search、web_fetch、read_doc、open_path、run_doctor、send_wechat、ask_user_question、session、board、team、plan 工具与 worktree 工具" width="100%">
185
192
 
186
193
  `bun run screenshot:tools` 重新生成它;`bun run screenshot:tool-pngs` 在
187
194
  [`assets/tools/`](./assets/tools) 下为每个工具输出一张图。
188
195
 
189
- 准备上手了?[用户指南](./docs/user-guide/) 为每个扩展都准备了分步讲解:
190
- 第一次运行、关键按键,以及屏幕上会出现什么。
196
+ 准备上手了?每个扩展在 [`docs/extensions/`](./docs/extensions/) 下的页面开头便说明它做什么,
197
+ 以及它对应的按键与命令。
191
198
 
192
199
  ## 配置
193
200
 
@@ -197,7 +204,15 @@ Pi 自己的版本请求只是被重新绘制,本包的最新版本则来自
197
204
  [`docs/configuration.md`](./docs/configuration.md) 则给出解析规则、设置界面操作方式,
198
205
  以及每个 section 的键、类型、默认值和取值范围。
199
206
 
200
- 每个扩展默认都开启。若要在加载整包时排除其中一些,把 `PI_DISABLED_EXTENSIONS`
207
+ 几乎所有扩展默认都开启。例外是 `board` 与 `team`:看板和它的 lead 那一半是同一个
208
+ 工作流,session 要么在做,要么不做;从不处理看板的 session 不该背着这些工具、命令和页面。
209
+ 把 opt-in 扩展名写进 `PI_ENABLED_EXTENSIONS` 就会加载:
210
+
211
+ ```bash
212
+ PI_ENABLED_EXTENSIONS=board,team pi -e .
213
+ ```
214
+
215
+ 若要在加载整包时排除一些默认开启的扩展,把 `PI_DISABLED_EXTENSIONS`
201
216
  设为一个以逗号或空白分隔的扩展名列表(即 [`extensions/`](./extensions/) 下的目录
202
217
  名):
203
218
 
@@ -205,20 +220,20 @@ Pi 自己的版本请求只是被重新绘制,本包的最新版本则来自
205
220
  PI_DISABLED_EXTENSIONS=todo,job pi -e .
206
221
  ```
207
222
 
208
- 名称比较不区分大小写,未知名称会被忽略。这只会阻止工厂注册;若要移除整包,请使用
209
- Pi 的 `--no-extensions`,或从你的设置中删除该包。
223
+ 名称比较不区分大小写,未知名称会被忽略。`PI_ENABLED_EXTENSIONS` 只负责打开 opt-in
224
+ 扩展,写在这里的名字不会关掉别的扩展;而 `PI_DISABLED_EXTENSIONS` 仍然优先于它。
225
+ 两者都只会阻止工厂注册;若要移除整包,请使用 Pi 的 `--no-extensions`,或从你的设置中
226
+ 删除该包。
210
227
 
211
228
  ## 文档
212
229
 
213
230
  | 指南 | 内容 |
214
231
  |---|---|
215
- | [用户指南](./docs/user-guide/) | 分章手册:安装、每项功能、设置、故障排查与命令参考。 |
216
232
  | [配置](./docs/configuration.md) | 解析规则、设置界面,以及 `bytefly.json` 每个键的默认值与取值范围。 |
217
233
  | [架构](./docs/architecture.md) | 目标形态:加载路径、扩展契约、一次回合、状态、分层、长生命周期,以及改动应放在哪里。 |
218
234
  | [扩展文档](./docs/extensions/) | 每个扩展一页,以能力表开头:工具与命令面、集成契约,以及设计说明。 |
219
235
  | [开发](./docs/development.md) | 本地设置、检查、测试、跨平台注意事项与发布流程。 |
220
236
  | [安全](./docs/security.md) | 回环与远程界面的信任边界。 |
221
- | [路线图](./ROADMAP.md) | 包的下一步方向,按 README 的承诺分组,并列出每条事项的依据。 |
222
237
  | [文档索引](./docs/README.md) | 全部文档的地图:各份指南,以及它们背后的深度契约,按读者归类。 |
223
238
 
224
239
  ## 参与贡献
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -6,29 +6,28 @@ the extension can do, the tool, command, or key that delivers it, and what you
6
6
  get — then the Quickstart, the surface, the behaviour, and the contributor
7
7
  sections behind them.
8
8
 
9
- | Extension | What it is | Page |
10
- |---|---|---|
11
- | `plan` | Read-only planning, saved to disk and reviewed in the TUI or a browser | [`plan.md`](./plan.md) |
12
- | `check` | The project's test, lint, or typecheck command, run and parsed | [`check.md`](./check.md) |
13
- | `subagent` | Delegation to a specialist agent in its own Pi process | [`subagent.md`](./subagent.md) |
14
- | `todo` | A whole-list task tracker that follows the session branch | [`todo.md`](./todo.md) |
15
- | `goal` | One persistent session objective, restated before each turn | [`goal.md`](./goal.md) |
16
- | `question` | Structured questions with labelled options and a free-form answer | [`question.md`](./question.md) |
17
- | `job` | Long-lived shell commands in the background, with logs and a wait | [`job.md`](./job.md) |
18
- | `watch` | Tailing a file or command and matching new lines | [`watch.md`](./watch.md) |
19
- | `session-bus` | Coordination between parallel Pi sessions on one repository | [`session-bus.md`](./session-bus.md) |
20
- | `board` | One shared feature board per repository, written by the tools and shown by one page a lead serves | [`board.md`](./board.md) |
21
- | `team` | The lead's round: hand a card to a running session, take one back, or print it with `/team` | [`team.md`](./team.md) |
22
- | `context` | Where the context window went, and compacting from the report | [`context.md`](./context.md) |
23
- | `worktree` | An isolated `git worktree` per task, and the built-in tools following it | [`worktree.md`](./worktree.md) |
24
- | `rewind` | Prompt-anchored snapshots, restoring code, conversation, or both | [`rewind.md`](./rewind.md) |
25
- | `memory` | Durable cross-session notes as human-editable markdown | [`memory.md`](./memory.md) |
26
- | `web-access` | Searching the web and fetching a page as readable text | [`web-access.md`](./web-access.md) |
27
- | `file-browse` | A loopback, read-only browser for the working directory | [`file-browse.md`](./file-browse.md) |
28
- | `file-read` | Text out of a PDF, DOCX, DOC, ODT, RTF, or XLSX, in process | [`file-read.md`](./file-read.md) |
29
- | `file-open` | Opening or revealing a path in the OS-native application | [`file-open.md`](./file-open.md) |
30
- | `wechat` | A WeChat bridge with one Pi conversation per peer | [`wechat.md`](./wechat.md) |
31
- | `bytefly` | The header, footer, turn rule, control center, notices, and update check | [`bytefly.md`](./bytefly.md) |
9
+ - [`plan`](./plan.md)
10
+ - [`check`](./check.md)
11
+ - [`subagent`](./subagent.md)
12
+ - [`todo`](./todo.md)
13
+ - [`goal`](./goal.md)
14
+ - [`question`](./question.md)
15
+ - [`job`](./job.md)
16
+ - [`watch`](./watch.md)
17
+ - [`session-bus`](./session-bus.md)
18
+ - [`serve`](./serve.md)
19
+ - [`board`](./board.md)
20
+ - [`team`](./team.md)
21
+ - [`context`](./context.md)
22
+ - [`worktree`](./worktree.md)
23
+ - [`rewind`](./rewind.md)
24
+ - [`memory`](./memory.md)
25
+ - [`web-access`](./web-access.md)
26
+ - [`file-browse`](./file-browse.md)
27
+ - [`file-read`](./file-read.md)
28
+ - [`file-open`](./file-open.md)
29
+ - [`wechat`](./wechat.md)
30
+ - [`bytefly`](./bytefly.md)
32
31
 
33
32
  The template every page follows is
34
33
  [`docs/development.md#one-doc-per-extension`](../development.md#one-doc-per-extension).