@huseynsnmz/pi-board 0.15.3 → 0.16.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 (211) hide show
  1. package/CHANGELOG.md +13 -4
  2. package/CONTRIBUTING.md +7 -0
  3. package/README.md +53 -419
  4. package/SECURITY.md +19 -0
  5. package/docs/how-it-works.md +31 -0
  6. package/docs/reference.md +276 -0
  7. package/package.json +5 -11
  8. package/src/index.ts +1 -1
  9. package/src/runtime/service.mjs +12 -0
  10. package/src/ui/dashboard.ts +14 -8
  11. package/IMPLEMENTATION_PLAN.md +0 -920
  12. package/PRD.md +0 -484
  13. package/PROGRESS.md +0 -142
  14. package/VERIFY.md +0 -115
  15. package/docs/BATCH_SELECTION_READ_FLOW.md +0 -277
  16. package/docs/EXPLORATION.md +0 -187
  17. package/docs/PTY_ATTACH_IMPLEMENTATION_PLAN.md +0 -581
  18. package/docs/RELEASE.md +0 -148
  19. package/docs/superpowers/plans/2026-08-15-screenlog-gc.md +0 -704
  20. package/docs/superpowers/plans/2026-08-16-attach-double-cursor-jiggle-retry.md +0 -499
  21. package/docs/superpowers/plans/2026-08-21-attach-coldstart-jiggle-rearm.md +0 -797
  22. package/docs/superpowers/plans/2026-08-21-dashboard-keypress-lag.md +0 -366
  23. package/docs/superpowers/plans/2026-08-21-issue-14-needs-input-no-auto-done.md +0 -576
  24. package/docs/superpowers/plans/2026-08-22-jiggle-shrink-and-hold.md +0 -337
  25. package/docs/superpowers/plans/2026-08-22-launch-cwd-favorites.md +0 -916
  26. package/docs/superpowers/plans/2026-08-22-question-tool-grouping.md +0 -211
  27. package/docs/superpowers/plans/2026-08-22-rename-state-labels.md +0 -182
  28. package/docs/superpowers/plans/2026-08-22-stable-list-order.md +0 -51
  29. package/docs/superpowers/plans/2026-08-27-locks-acquirelock-spin.md +0 -614
  30. package/docs/superpowers/plans/2026-08-27-pty-runner-test-flaky.md +0 -32
  31. package/docs/superpowers/plans/2026-08-29-code-refs-badges.md +0 -223
  32. package/docs/superpowers/plans/2026-08-30-circular-navigation.md +0 -308
  33. package/docs/superpowers/plans/2026-08-30-post-exit-timing-fix.md +0 -37
  34. package/docs/superpowers/plans/2026-08-30-pty-attach-quality-debt.md +0 -311
  35. package/docs/superpowers/plans/2026-08-30-readme-v2.md +0 -294
  36. package/docs/superpowers/plans/2026-09-01-attach-detach-gate-cursor-anchor.md +0 -284
  37. package/docs/superpowers/plans/2026-09-02-attach-detach-editor-state.md +0 -722
  38. package/docs/superpowers/plans/2026-09-03-code-refs-pr-backlink-narrow.md +0 -551
  39. package/docs/superpowers/plans/2026-09-03-detach-gate-glyph-fallback.md +0 -146
  40. package/docs/superpowers/plans/2026-09-04-evidence-outputpreview.md +0 -209
  41. package/docs/superpowers/plans/2026-09-04-warm-host-reclaim.md +0 -796
  42. package/docs/superpowers/plans/2026-09-05-issue-13-drainnextfollowup-pty-probe.md +0 -114
  43. package/docs/superpowers/plans/2026-09-05-issue-38-windows-wezterm-ime-cursor.md +0 -73
  44. package/docs/superpowers/plans/2026-09-05-issue-39-truncate-codepoint-boundary.md +0 -143
  45. package/docs/superpowers/plans/2026-09-05-issue-61-mention-fallback-guards.md +0 -226
  46. package/docs/superpowers/plans/2026-09-05-issue-63-flaky-manual-completion.md +0 -87
  47. package/docs/superpowers/plans/2026-09-05-issue-64-changelog-release-helper.md +0 -53
  48. package/docs/superpowers/plans/2026-09-05-pty-host-stacking-sock-race.md +0 -731
  49. package/docs/superpowers/plans/2026-09-08-attach-ctrl-left-detach.md +0 -30
  50. package/docs/superpowers/plans/2026-09-08-dashboard-shrink-repaint.md +0 -68
  51. package/docs/superpowers/plans/2026-09-08-issue-11-attach-runtime-desync-heal.md +0 -917
  52. package/docs/superpowers/plans/2026-09-08-legacy-stale-host-recovery.md +0 -125
  53. package/docs/superpowers/plans/2026-09-08-spawn-async-error-swallow.md +0 -56
  54. package/docs/superpowers/plans/2026-09-08-stale-model-attach-guard.md +0 -96
  55. package/docs/superpowers/plans/2026-09-09-claimpid-blocks-replace.md +0 -267
  56. package/docs/superpowers/plans/2026-09-09-harden-runner-architecture.md +0 -603
  57. package/docs/superpowers/plans/2026-09-09-single-writer-completion.md +0 -252
  58. package/docs/superpowers/plans/2026-09-10-reader-consistency.md +0 -115
  59. package/docs/superpowers/plans/2026-09-14-attach-cursor-dectcem-gate.md +0 -469
  60. package/docs/superpowers/plans/2026-09-14-attach-snapshot.md +0 -92
  61. package/docs/superpowers/plans/2026-09-14-host-meta-orphan-lock.md +0 -771
  62. package/docs/superpowers/plans/2026-09-14-issue-106-terminal-frame-cognition.md +0 -299
  63. package/docs/superpowers/plans/2026-09-14-issue-113-foreground-preview-race.md +0 -609
  64. package/docs/superpowers/plans/2026-09-14-terminal-model.md +0 -145
  65. package/docs/superpowers/plans/2026-09-15-coordinator-pipe-root-normalize.md +0 -224
  66. package/docs/superpowers/plans/2026-09-15-lease-publish-eprem-reclaim.md +0 -341
  67. package/docs/superpowers/plans/2026-09-18-detach-anchor-reporter-endpoint.md +0 -875
  68. package/docs/superpowers/plans/2026-09-20-control-lifecycle.md +0 -116
  69. package/docs/superpowers/plans/2026-09-20-issue-121-perf-gate-out-of-coverage.md +0 -517
  70. package/docs/superpowers/plans/2026-09-23-a5-mid-stream-assertion.md +0 -25
  71. package/docs/superpowers/plans/2026-09-23-cwd-browse-tab-drill.md +0 -393
  72. package/docs/superpowers/plans/2026-09-23-terminal-query-forwarding.md +0 -51
  73. package/docs/superpowers/plans/2026-09-23-unconditional-detach-key.md +0 -58
  74. package/docs/superpowers/plans/2026-09-24-control-reconcile-flake.md +0 -698
  75. package/docs/superpowers/plans/2026-09-24-probe-attached-clients.md +0 -605
  76. package/docs/superpowers/plans/2026-09-29-issue-145-holding-semantic-state.md +0 -1183
  77. package/docs/superpowers/plans/2026-09-29-issue-145-user-verification.md +0 -66
  78. package/docs/superpowers/plans/2026-09-30-board-delete-key-x-y-confirm.md +0 -649
  79. package/docs/superpowers/plans/2026-09-30-issue-153-runner-stop-boot-window.md +0 -618
  80. package/docs/superpowers/plans/2026-09-30-issue-95-test-discipline.md +0 -555
  81. package/docs/superpowers/plans/2026-09-30-publish-dispatch-tag-check.md +0 -259
  82. package/docs/superpowers/plans/2026-10-06-attach-settle-scheme-delivery.md +0 -751
  83. package/docs/superpowers/plans/2026-10-09-issue-167-attach-middle-paste.md +0 -509
  84. package/docs/superpowers/plans/2026-10-09-issue-169-fullscreen-mouse-ownership.md +0 -346
  85. package/docs/superpowers/plans/2026-10-10-attach-delete-in-place.md +0 -832
  86. package/docs/superpowers/plans/2026-10-10-issue-174-selection-mirror-paste-source.md +0 -510
  87. package/docs/superpowers/plans/2026-10-14-issue-170-attach-reply-guard.md +0 -771
  88. package/docs/superpowers/plans/2026-10-14-issue-178-accept-registration-race.md +0 -1257
  89. package/docs/superpowers/plans/2026-10-14-issue-184-snapshot-window-contract.md +0 -657
  90. package/docs/superpowers/plans/2026-10-14-issue-185-attach-wheel-alt-screen.md +0 -47
  91. package/docs/superpowers/plans/2026-10-14-issue-187-motionless-drag.md +0 -931
  92. package/docs/superpowers/plans/2026-10-14-issue-189-mixed-input-segments.md +0 -823
  93. package/docs/superpowers/plans/2026-10-15-issue-188-x10-mouse-release.md +0 -526
  94. package/docs/superpowers/plans/2026-10-16-issue-198-attach-wheel-forward-fallback.md +0 -32
  95. package/docs/superpowers/plans/2026-10-18-attach-wheel-replay-pseudo-scrollback.md +0 -437
  96. package/docs/superpowers/plans/2026-10-19-issue-213-reply-guard-csi-key.md +0 -257
  97. package/docs/superpowers/plans/2026-10-19-issue-214-attach-forward-alt-modifier.md +0 -202
  98. package/docs/superpowers/plans/2026-10-21-issue-221-ask-user-question.md +0 -198
  99. package/docs/superpowers/plans/2026-10-23-issue-222-attach-ready.md +0 -290
  100. package/docs/superpowers/plans/2026-10-23-issue-225-monotonic-foreground-state.md +0 -450
  101. package/docs/superpowers/plans/2026-10-23-issue-229-vim-jkl.md +0 -449
  102. package/docs/superpowers/plans/2026-10-23-issue-232-attach-bg-only-cells.md +0 -153
  103. package/docs/superpowers/plans/2026-10-23-lease-heartbeat-staleness.md +0 -537
  104. package/docs/superpowers/plans/2026-10-23-selected-row-highlight.md +0 -405
  105. package/docs/superpowers/plans/2026-10-24-issue-217-windows-pid-reuse-stopping.md +0 -367
  106. package/docs/superpowers/plans/2026-10-24-issue-230-warm-host-background-runs.md +0 -806
  107. package/docs/superpowers/plans/2026-10-24-issue-238-windows-process-identity-token.md +0 -490
  108. package/docs/superpowers/plans/2026-10-24-issue-241-coordinator-root-exit.md +0 -461
  109. package/docs/superpowers/plans/2026-10-25-issue-239-coordinator-replacement-identity.md +0 -504
  110. package/docs/superpowers/plans/2026-10-26-issue-245-key-hints-doc-sync.md +0 -244
  111. package/docs/superpowers/plans/2026-10-27-issue-172-fullscreen-selection-clear.md +0 -344
  112. package/docs/superpowers/plans/2026-10-27-issue-252-select-key-hints.md +0 -209
  113. package/docs/superpowers/plans/2026-10-28-issue-255-coordinator-endpoint-zombie.md +0 -442
  114. package/docs/superpowers/plans/2026-10-28-issue-257-legacy-pty-runner-endpoint-cleanup.md +0 -256
  115. package/docs/superpowers/plans/2026-11-03-cwd-favorites-full-pool.md +0 -266
  116. package/docs/superpowers/specs/2026-08-15-screenlog-gc-design.md +0 -105
  117. package/docs/superpowers/specs/2026-08-16-attach-double-cursor-jiggle-retry-design.md +0 -142
  118. package/docs/superpowers/specs/2026-08-21-attach-coldstart-jiggle-rearm-design.md +0 -110
  119. package/docs/superpowers/specs/2026-08-21-dashboard-keypress-lag-design.md +0 -59
  120. package/docs/superpowers/specs/2026-08-21-issue-14-needs-input-no-auto-done-design.md +0 -109
  121. package/docs/superpowers/specs/2026-08-22-cwd-favorites-design.md +0 -131
  122. package/docs/superpowers/specs/2026-08-22-jiggle-shrink-and-hold-design.md +0 -111
  123. package/docs/superpowers/specs/2026-08-22-question-tool-grouping-design.md +0 -114
  124. package/docs/superpowers/specs/2026-08-22-rename-state-labels-design.md +0 -80
  125. package/docs/superpowers/specs/2026-08-27-locks-acquirelock-spin-design.md +0 -97
  126. package/docs/superpowers/specs/2026-08-27-pty-runner-test-flaky-design.md +0 -35
  127. package/docs/superpowers/specs/2026-08-29-code-refs-badges-design.md +0 -128
  128. package/docs/superpowers/specs/2026-08-30-circular-navigation-design.md +0 -47
  129. package/docs/superpowers/specs/2026-08-30-eprm-atomicwrite-race-design.md +0 -77
  130. package/docs/superpowers/specs/2026-08-30-post-exit-timing-fix-design.md +0 -80
  131. package/docs/superpowers/specs/2026-08-30-pty-attach-quality-debt-design.md +0 -105
  132. package/docs/superpowers/specs/2026-08-30-readme-v2-design.md +0 -115
  133. package/docs/superpowers/specs/2026-09-01-attach-detach-gate-cursor-anchor-design.md +0 -78
  134. package/docs/superpowers/specs/2026-09-02-attach-detach-editor-state-design.md +0 -120
  135. package/docs/superpowers/specs/2026-09-03-code-refs-pr-backlink-narrow-design.md +0 -92
  136. package/docs/superpowers/specs/2026-09-03-detach-gate-glyph-fallback-design.md +0 -99
  137. package/docs/superpowers/specs/2026-09-04-evidence-outputpreview-design.md +0 -50
  138. package/docs/superpowers/specs/2026-09-04-warm-host-reclaim-design.md +0 -106
  139. package/docs/superpowers/specs/2026-09-05-issue-13-drainnextfollowup-pty-probe-design.md +0 -64
  140. package/docs/superpowers/specs/2026-09-05-issue-38-windows-wezterm-ime-design.md +0 -48
  141. package/docs/superpowers/specs/2026-09-05-issue-39-truncate-codepoint-boundary-design.md +0 -64
  142. package/docs/superpowers/specs/2026-09-05-issue-61-mention-fallback-design.md +0 -71
  143. package/docs/superpowers/specs/2026-09-05-issue-63-flaky-manual-completion-design.md +0 -49
  144. package/docs/superpowers/specs/2026-09-05-issue-64-changelog-helper-design.md +0 -76
  145. package/docs/superpowers/specs/2026-09-05-pty-host-stacking-sock-race-design.md +0 -510
  146. package/docs/superpowers/specs/2026-09-07-issue-11-attach-runtime-desync-heal-design.md +0 -130
  147. package/docs/superpowers/specs/2026-09-08-attach-ctrl-left-detach-design.md +0 -58
  148. package/docs/superpowers/specs/2026-09-08-dashboard-shrink-repaint-design.md +0 -52
  149. package/docs/superpowers/specs/2026-09-08-legacy-stale-host-recovery-design.md +0 -87
  150. package/docs/superpowers/specs/2026-09-08-spawn-async-error-swallow-design.md +0 -56
  151. package/docs/superpowers/specs/2026-09-08-stale-model-attach-guard-design.md +0 -79
  152. package/docs/superpowers/specs/2026-09-09-claimpid-blocks-replace-design.md +0 -147
  153. package/docs/superpowers/specs/2026-09-09-harden-runner-architecture-design.md +0 -304
  154. package/docs/superpowers/specs/2026-09-14-attach-cursor-dectcem-gate-design.md +0 -114
  155. package/docs/superpowers/specs/2026-09-14-host-meta-orphan-lock-design.md +0 -120
  156. package/docs/superpowers/specs/2026-09-14-issue-106-terminal-frame-cognition-design.md +0 -146
  157. package/docs/superpowers/specs/2026-09-14-issue-113-foreground-preview-race-design.md +0 -116
  158. package/docs/superpowers/specs/2026-09-15-coordinator-pipe-root-normalize-design.md +0 -84
  159. package/docs/superpowers/specs/2026-09-15-lease-publish-eprem-reclaim-design.md +0 -92
  160. package/docs/superpowers/specs/2026-09-18-detach-anchor-reporter-endpoint-design.md +0 -123
  161. package/docs/superpowers/specs/2026-09-20-issue-121-perf-gate-out-of-coverage-design.md +0 -204
  162. package/docs/superpowers/specs/2026-09-23-a5-mid-stream-assertion-design.md +0 -43
  163. package/docs/superpowers/specs/2026-09-23-cwd-browse-tab-drill-design.md +0 -95
  164. package/docs/superpowers/specs/2026-09-23-terminal-query-forwarding-design.md +0 -63
  165. package/docs/superpowers/specs/2026-09-23-unconditional-detach-key-design.md +0 -57
  166. package/docs/superpowers/specs/2026-09-24-control-reconcile-flake-design.md +0 -98
  167. package/docs/superpowers/specs/2026-09-24-probe-attached-clients-design.md +0 -190
  168. package/docs/superpowers/specs/2026-09-29-issue-145-holding-semantic-state-design.md +0 -394
  169. package/docs/superpowers/specs/2026-09-30-board-delete-key-x-y-confirm-design.md +0 -86
  170. package/docs/superpowers/specs/2026-09-30-issue-153-runner-stop-boot-window-design.md +0 -75
  171. package/docs/superpowers/specs/2026-09-30-issue-95-test-discipline-design.md +0 -226
  172. package/docs/superpowers/specs/2026-09-30-publish-dispatch-tag-check-design.md +0 -129
  173. package/docs/superpowers/specs/2026-10-06-attach-settle-scheme-delivery-design.md +0 -196
  174. package/docs/superpowers/specs/2026-10-09-issue-167-attach-middle-paste-design.md +0 -125
  175. package/docs/superpowers/specs/2026-10-09-issue-169-fullscreen-mouse-ownership-design.md +0 -130
  176. package/docs/superpowers/specs/2026-10-10-attach-delete-in-place-design.md +0 -224
  177. package/docs/superpowers/specs/2026-10-10-issue-174-selection-mirror-paste-source-design.md +0 -154
  178. package/docs/superpowers/specs/2026-10-14-issue-170-attach-reply-guard-design.md +0 -195
  179. package/docs/superpowers/specs/2026-10-14-issue-178-accept-registration-race-design.md +0 -287
  180. package/docs/superpowers/specs/2026-10-14-issue-184-snapshot-window-contract-design.md +0 -288
  181. package/docs/superpowers/specs/2026-10-14-issue-185-attach-wheel-alt-screen-design.md +0 -126
  182. package/docs/superpowers/specs/2026-10-14-issue-187-motionless-drag-design.md +0 -269
  183. package/docs/superpowers/specs/2026-10-14-issue-189-mixed-input-segments-design.md +0 -369
  184. package/docs/superpowers/specs/2026-10-15-issue-188-x10-mouse-release-design.md +0 -252
  185. package/docs/superpowers/specs/2026-10-16-issue-198-attach-wheel-forward-fallback-design.md +0 -67
  186. package/docs/superpowers/specs/2026-10-18-attach-wheel-replay-pseudo-scrollback-design.md +0 -250
  187. package/docs/superpowers/specs/2026-10-19-issue-213-reply-guard-csi-key-design.md +0 -165
  188. package/docs/superpowers/specs/2026-10-19-issue-214-attach-forward-alt-modifier-design.md +0 -131
  189. package/docs/superpowers/specs/2026-10-20-issue-221-ask-user-question-design.md +0 -270
  190. package/docs/superpowers/specs/2026-10-22-issue-225-monotonic-foreground-state-design.md +0 -225
  191. package/docs/superpowers/specs/2026-10-23-issue-222-attach-ready-design.md +0 -204
  192. package/docs/superpowers/specs/2026-10-23-issue-229-vim-jkl-design.md +0 -90
  193. package/docs/superpowers/specs/2026-10-23-issue-232-attach-bg-only-cells-design.md +0 -146
  194. package/docs/superpowers/specs/2026-10-23-lease-heartbeat-staleness-design.md +0 -271
  195. package/docs/superpowers/specs/2026-10-23-selected-row-highlight-design.md +0 -191
  196. package/docs/superpowers/specs/2026-10-24-issue-217-windows-pid-reuse-stopping-design.md +0 -334
  197. package/docs/superpowers/specs/2026-10-24-issue-230-warm-host-background-runs-design.md +0 -283
  198. package/docs/superpowers/specs/2026-10-24-issue-238-windows-process-identity-token-design.md +0 -286
  199. package/docs/superpowers/specs/2026-10-24-issue-241-coordinator-root-exit-design.md +0 -381
  200. package/docs/superpowers/specs/2026-10-25-issue-239-coordinator-replacement-identity-design.md +0 -331
  201. package/docs/superpowers/specs/2026-10-26-issue-245-key-hints-doc-sync-design.md +0 -72
  202. package/docs/superpowers/specs/2026-10-27-issue-172-fullscreen-selection-clear-design.md +0 -248
  203. package/docs/superpowers/specs/2026-10-27-issue-252-select-key-hints-design.md +0 -95
  204. package/docs/superpowers/specs/2026-10-28-issue-255-coordinator-endpoint-zombie-design.md +0 -380
  205. package/docs/superpowers/specs/2026-10-28-issue-257-legacy-pty-runner-endpoint-cleanup-design.md +0 -197
  206. package/docs/superpowers/specs/2026-11-03-cwd-favorites-full-pool-design.md +0 -106
  207. package/scripts/budget-audit.mjs +0 -135
  208. package/scripts/release.mjs +0 -446
  209. package/scripts/release_helper.mjs +0 -309
  210. package/scripts/run-perf-gate.mjs +0 -40
  211. package/scripts/run-tests.mjs +0 -375
package/CHANGELOG.md CHANGED
@@ -1,9 +1,18 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to this project are documented here, generated from
4
- conventional commits by `scripts/release_helper.mjs`. Entries are
5
- forward-only: they begin with the first release after this file landed —
6
- for earlier history, see the git log and the pull-request list.
3
+ ## [0.16.0] - 2026-11-04
4
+
5
+ ### Features
6
+
7
+ - **keys**: `Alt+1..9` counts the rows in the selected session's folder
8
+
9
+ ### Fixes
10
+
11
+ - **replies**: a reply during a permission prompt now waits in the queue. Sent straight to the session, its Enter could approve the prompt (from 0.15.1)
12
+
13
+ ### Changes
14
+
15
+ - **repo**: its own repository, with new docs and without the original's plans and release tooling
7
16
 
8
17
  ## [0.15.3] - 2026-11-04
9
18
 
@@ -0,0 +1,7 @@
1
+ # Contributing
2
+
3
+ Issues are welcome. Pull requests are turned off, because this fork follows how its maintainer works and every line needs to be written and reviewed by them.
4
+
5
+ If you have a fix, open an issue that describes the problem and how to reproduce it. For a problem that also affects `@zhuxixi/pi-agent-board`, consider [reporting it there](https://github.com/zhuxixi/pi-agent-board/issues) too.
6
+
7
+ For security problems, follow [SECURITY.md](SECURITY.md) instead.
package/README.md CHANGED
@@ -1,449 +1,83 @@
1
1
  # pi-board
2
2
 
3
- <p align="center">
4
- <img src="https://raw.githubusercontent.com/huseynsnmz/pi-board/main/assets/banner.png" alt="Pi Agent Board" width="100%" />
5
- </p>
3
+ A board for [Pi](https://pi.dev)'s background sessions: start a task and keep working, see which sessions need you, peek at them, reply, and attach when you want the whole conversation. The keys follow Claude Code's agent view.
6
4
 
7
- <p align="center">
8
- <a href="https://github.com/huseynsnmz/pi-board/blob/main/assets/demo.mp4"><strong>30s demo</strong></a>
9
- | <a href="https://pi.dev/packages?name=@huseynsnmz/pi-board">Pi package gallery</a>
10
- | <a href="https://www.npmjs.com/package/@huseynsnmz/pi-board">npm</a>
11
- </p>
12
-
13
- pi-board is a full-screen TUI dashboard for [Pi](https://github.com/earendil-works/pi-mono) that manages durable background Pi sessions. Use one global board to dispatch work across projects, watch progress, triage summaries and evidence, reply without opening a transcript, and attach to a real interactive session when hands-on work is needed.
14
-
15
- It started as a fork of [`@zhuxixi/pi-agent-board`](https://github.com/zhuxixi/pi-agent-board) 0.13.1, so the design and most of the code are theirs, under the MIT license. The command is still `/agent-board`.
16
-
17
- ## What It Does
18
-
19
- - Run several Pi tasks at once without losing track of their current state.
20
- - Keep each task as a real, resumable Pi session that survives `/reload`, closing Pi, or restarting the terminal.
21
- - Triage the latest output, blockers, evidence, and diagnostics before opening a full transcript.
22
- - Reply to a session without attaching; replies sent while a session is busy are preserved for later delivery.
23
- - Fall back to a JSON runner for eligible background work when live PTY support is unavailable.
24
-
25
- > **Write-safety note:** Worktree isolation is currently disabled. Multiple sessions in the same repository may run concurrently, so avoid overlapping writes or provide your own isolation.
26
-
27
- ## Requirements
28
-
29
- - [Pi](https://github.com/earendil-works/pi-mono) installed and working.
30
- - Node.js 20 or newer.
31
- - Working Pi provider authentication for real model execution. Agent Board does not have a separate login or credential store.
32
- - PTY support from `node-pty` for live attach and **start & attach**. Background work can use a JSON-runner fallback when PTY support is unavailable.
33
-
34
- If rows remain in `Running`, first verify that Pi itself can complete a one-shot model call:
35
-
36
- ```bash
37
- pi --mode json -p --no-session "Reply with exactly: DONE"
38
- ```
39
-
40
- A healthy command emits an assistant `message_end`, then an `agent_end` event, and exits. See [VERIFY.md](VERIFY.md) for the complete no-auth, provider-auth, and PTY checks.
41
-
42
- ## Install
43
-
44
- ### Published package
45
-
46
- ```bash
47
- pi install npm:@huseynsnmz/pi-board
48
- ```
49
-
50
- Start Pi normally and run `/agent-board`, or use one of the startup entry points below.
51
-
52
- ### Local checkout
53
-
54
- ```bash
55
- npm install
56
- pi install "$(pwd)"
57
- ```
58
-
59
- This installs the current checkout as a Pi package. Remove that path installation with:
60
-
61
- ```bash
62
- pi remove "$(pwd)"
63
- ```
64
-
65
- ### Development auto-discovery
66
-
67
- To have Pi load the checkout directly while developing:
68
-
69
- ```bash
70
- ln -s "$(pwd)" ~/.pi/agent/extensions/agent-board
71
- pi
72
- ```
73
-
74
- Remove the symlink when you no longer want Pi to auto-load the checkout:
75
-
76
- ```bash
77
- rm ~/.pi/agent/extensions/agent-board
78
- ```
79
-
80
- ## Quick Start
81
-
82
- Open the board with `/agent-board` inside Pi, or press `Left` twice on an empty prompt. That also puts the session you're in on the board, and `Esc` or `Enter` on its row brings you back. Then:
83
-
84
- 1. Type a task.
85
- 2. Press `Enter`. It starts right away in the current folder, with this session's model and thinking level.
86
-
87
- To choose the folder, model or thinking level first, press `Ctrl+N` while typing. With an empty input, `Enter` attaches/resumes the selected session. The row starts in `Queued`, then moves through `Running` to a terminal state such as `Needs answer`, `Needs instructions`, `Done`, `Failed`, or `Stopped`.
88
-
89
- From the board:
90
-
91
- - Press `Space` to peek at the selected session's summary, blocker, and latest output.
92
- - In Peek, type to reply without attaching.
93
- - Press `Ctrl+O` for a read-only transcript, or `Ctrl+E` for evidence and diagnostics.
94
- - Press `Enter`, `Left` or `Right` to attach to the real Pi session.
95
- - In PTY attach mode, press `Ctrl+Left` to return to the board at any time (even mid-draft), or `Ctrl+\` — the unconditional escape: it detaches regardless of editor state on any terminal that forwards the raw 0x1c byte (raw, kitty, and modifyOtherKeys keyboard modes all work). `Left` detaches only while the child Pi reports an empty editor; otherwise (draft, or unknown editor state) it is forwarded to the child. `Ctrl+]` is not a detach key — it is passed through to the child Pi editor. When the host is disconnected, `Left` always exits. `Ctrl+\` caveats: on keyboard layouts where `\` sits on AltGr (e.g. German) the chord may never produce the byte — use `Ctrl+Left` there; in legacy keyboard modes `Ctrl+4` emits the same byte and also detaches; and the key is captured from the child while attached, so the child's own `Ctrl+\` binding (e.g. the vim terminal-mode prefix) is unavailable. Automatic themes also resolve correctly in attach sessions: the child's background probe (OSC 11) and color-scheme change notifications are forwarded to your real terminal, replies flow back to the child when your terminal answers, and attach re-probes the background once when it settles so the theme is right from the first frame. Set `AGENT_BOARD_FORWARD_TERMINAL_QUERIES=0` to disable this (default on); keyboard-protocol negotiation (kitty/DA) is not forwarded — it happens once at child spawn, before attach exists. `Ctrl+X` opens an in-place delete confirm: press `y` (or Enter) to archive the row and return to the board with the next row selected — any other key cancels and is passed through to the session. While attached, the child Pi's own `Ctrl+X` bindings (copy in `/tree` and fullscreen, clear-all in the models dialog) are captured by this gesture.
96
-
97
- ## Dashboard Workflow
98
-
99
- The input is always ready:
100
-
101
- - With an empty input, keys drive the board. `/`, `!`, `?` and `Space` are shortcuts only here.
102
- - Once you've typed something, keys edit the task, and `/` is literal.
103
-
104
- When you press `Ctrl+N` while typing a task, the **Start session** dialog lets you review:
105
-
106
- - `cwd`: an existing-directory picker with usage-ranked favorites, filesystem browsing, and Tab completion;
107
- - `model`: models available to Pi, including models scoped by the current directory's Pi settings;
108
- - `thinking`: a level supported by the selected model;
109
- - `action`: **start in background** or **start & attach**.
110
-
111
- Launch preferences are persisted and reused for later sessions. **Start & attach** requires PTY support; if PTY is unavailable, Agent Board launches the session in the background and shows a warning instead.
112
-
113
- Session actions are deliberately confirmation-aware:
114
-
115
- - `Ctrl+D` confirms moving an inactive session to **Done**. Manual completion is the default.
116
- - `Ctrl+B` toggles the on-hold state (manual verdict — automated writers are fenced).
117
- - `Ctrl+X` stops a session, and a second press within 2 seconds deletes its row. Deleting removes the row from the board but preserves its underlying Pi session file.
118
- - `Ctrl+K` archives inactive rows in the selected state; live work is skipped.
119
- - `Ctrl+A` enters multi-select mode; see [Multi-select](#multi-select) for its keys.
120
-
121
- ## Views and Actions
122
-
123
- Shortcuts are scoped to the view where they are available:
124
-
125
- ### Main list
126
-
127
- Typing goes straight into the input, as in Claude Code's agent view, so there's no mode to enter first.
128
-
129
- | Key | Action |
130
- | --- | --- |
131
- | Any text | Start writing a task. |
132
- | `Enter` | Start the task, or attach to the selected session when the input is empty. |
133
- | `Ctrl+Enter` | Start the task and attach to it. |
134
- | `Shift+Enter` / `Ctrl+J` | New line in the task. |
135
- | `Ctrl+N` | While typing, choose the folder, model and thinking level first. |
136
- | `Left` / `Right` | Attach to the selected session. |
137
- | `Left` twice | From an empty Pi prompt, put this session on the board and open it. |
138
- | `Up` / `Down` | Move between rows. |
139
- | `PgUp` / `PgDn` | Move by a screenful. |
140
- | `Home` / `End` | First or last row. |
141
- | `Alt+Up` / `Alt+Down` | Previous or next group. |
142
- | `Alt+1`..`Alt+9` | Attach to that row. |
143
- | `Space` | Open or close Peek. |
144
- | `/` / `Ctrl+F` | Filter the list. |
145
- | `Ctrl+S` | Group by state or by directory. |
146
- | `Shift+Up` / `Shift+Down` | Move the row up or down its group. |
147
- | `Ctrl+G` | Write the task in `$VISUAL` or `$EDITOR`. |
148
- | `Ctrl+T` | Pin or unpin. |
149
- | `Ctrl+R` | Rename. |
150
- | `Ctrl+X` | Stop the session; press again within 2 seconds to delete it. |
151
- | `Ctrl+D` | Confirm marking an inactive session Done. |
152
- | `Ctrl+B` | Hold or unhold an inactive session. |
153
- | `Ctrl+A` | Select several rows. |
154
- | `Ctrl+O` | Read-only transcript. |
155
- | `Ctrl+E` | Evidence / Diagnostics. |
156
- | `Ctrl+K` | Delete inactive rows in the selected state. |
157
- | `!` | node-pty diagnostics and fix steps. |
158
- | `?` | Help. |
159
- | `Esc` | Clear a draft, or leave the board. |
160
- | `Ctrl+C` | Clear a draft; press twice to leave. |
161
-
162
- On macOS, the `Alt` keys need your terminal to send Option as Alt.
163
-
164
- ### Multi-select
165
-
166
- Press `Ctrl+A` in the main list to act on several sessions at once.
167
-
168
- | Key | Action |
169
- | --- | --- |
170
- | `Up` / `Down` / `j` / `k` | Move the selection. |
171
- | `Space` | Toggle the current row. |
172
- | `a` | Select all visible rows. |
173
- | `u` | Clear the selection. |
174
- | `d` | Confirm marking the selected inactive rows Done. |
175
- | `Ctrl+X` | Delete the selected Done rows (confirmation prompt). |
176
- | `m` / `Esc` / `Ctrl+C` | Leave multi-select mode. |
177
- | `?` | Open the help overlay. |
178
- | `!` | Open node-pty diagnostics and fix steps. |
179
-
180
- ### Peek
181
-
182
- Peek shows the selected session's summary, blocker or question, latest output, and available issue/PR references.
183
-
184
- | Key | Action |
185
- | --- | --- |
186
- | Any text | Start a reply, and press `Enter` to send it without attaching. |
187
- | `Left` / `Right` | Attach to the session. |
188
- | `Up` / `Down` | Move to the previous or next session. |
189
- | `Ctrl+O` | Open the read-only transcript. |
190
- | `Ctrl+E` | Open Evidence / Diagnostics. |
191
- | `Ctrl+D` | Confirm marking the inactive session Done. |
192
- | `Ctrl+B` | Hold or unhold the session. |
193
- | `!` | Open node-pty diagnostics and fix steps. |
194
- | `Space` / `Esc` | Return to the main list. |
195
-
196
- When a Pi question or questionnaire tool is pending, inline reply is rejected; attach to answer that interactive question in the real Pi session.
197
-
198
- ### Transcript
199
-
200
- The `v` view is a read-only projection of the durable Pi session JSONL. It does not interrupt a running worker.
201
-
202
- | Key | Action |
203
- | --- | --- |
204
- | `Up` / `Down` / `j` / `k` | Scroll one line. |
205
- | `PageUp` / `PageDown` | Scroll one page. |
206
- | `Space` | Open Peek. |
207
- | `r` | Enter reply mode. |
208
- | `Enter` or `a` | Attach to the session. |
209
- | `e` | Open Evidence / Diagnostics. |
210
- | `d` | Confirm marking the inactive session Done. |
211
- | `h` | Hold or unhold the session. |
212
- | `!` | Open node-pty diagnostics and fix steps. |
213
- | `Left` / `Esc` / `<` | Return to the main list. |
214
-
215
- ### Evidence / Diagnostics
216
-
217
- The `e` view shows durable session evidence, including changed files, commands and their outcomes, command output previews, assistant evidence, errors, diagnostics, and artifact paths. Press `x` to clear diagnostics while preserving the evidence artifacts.
218
-
219
- | Key | Action |
220
- | --- | --- |
221
- | `Up` / `Down` / `j` / `k` | Scroll one line. |
222
- | `PageUp` / `PageDown` | Scroll one page. |
223
- | `r` | Enter reply mode. |
224
- | `v` | Open the read-only transcript. |
225
- | `Enter`, `a`, `Right`, or `l` | Attach to the session. |
226
- | `x` | Clear diagnostics; evidence is preserved. |
227
- | `Left` / `Esc` / `<` | Return to the main list. |
228
-
229
- ### PTY attach
230
-
231
- PTY attach opens the real interactive Pi session. `Ctrl+Left` detaches and returns to the board regardless of editor state, and `Ctrl+\` is the unconditional escape — a single raw ASCII byte (0x1c) that terminals forward unchanged in raw mode (kitty CSI-u and modifyOtherKeys encodings included), honored no matter what the child editor reports. `Left` detaches only while the child Pi reports an empty editor; while you are editing text — or when the child's editor state is unknown (e.g. the child extension is missing) — `Left` is forwarded to the Pi editor. A disconnected host can always be exited with `Left`. `Ctrl+]` is not a detach key — it is passed through to the child Pi editor. `Ctrl+\` caveats: on keyboard layouts where `\` sits on AltGr (e.g. German) the chord may never produce the byte — use `Ctrl+Left` there; in legacy keyboard modes `Ctrl+4` emits the same byte and also detaches; and the key is captured from the child while attached, so the child's own `Ctrl+\` binding (e.g. the vim terminal-mode prefix) is unavailable. While attached, `PageUp`, `PageDown`, `Home`, `End`, and the mouse wheel scroll local scrollback; whenever that viewport cannot move — the session holds the alternate screen (pi's fullscreen default), or there is no local history to travel — the wheel is forwarded to the session instead, which scrolls its own transcript: the same fallback the paging keys use. The attach viewport only scrolls scrollback the hosted session actually produced: rows that a snapshot hydration had to scroll out of the local window are not history, and the wheel is forwarded to the session instead of consuming those rows. Mouse drag or double-click selects and copies text, clicks open detected links, and middle-click paste is available on systems with the required X11 tooling. `Ctrl+X` opens an in-place delete confirm: press `y` (or Enter) to archive the row and return to the board with the next row selected — any other key cancels and is passed through to the session. While attached, the child Pi's own `Ctrl+X` bindings (copy in `/tree` and fullscreen, clear-all in the models dialog) are captured by this gesture.
232
-
233
- Automatic light/dark themes work in attach sessions too. The child Pi's background-color probe (OSC 11) and its color-scheme change notification switch are forwarded to your real terminal; replies and notifications flow back to the child when your terminal answers — a terminal that never answers keeps the dark fallback. Attach also re-probes the background once when it settles, so the theme is correct from the first frame without re-selecting it in `/settings`. All of this is on by default; set `AGENT_BOARD_FORWARD_TERMINAL_QUERIES=0` to disable it. Not covered: keyboard-protocol negotiation (kitty flags / DA1) is not forwarded — the child negotiates once at spawn, before any attach client exists, and forwarding it would retune the shared real-terminal keyboard stack — so modifier-key encoding can still differ from a directly-run Pi (the modifyOtherKeys fallback applies).
234
-
235
- The attach surface can forward terminal clipboard and image/file passthrough sequences. These behaviors can be disabled individually in [Configuration](#configuration). Cold hosts may briefly show a loading/reconnect surface while their PTY becomes ready.
236
-
237
- ## States, Grouping, and Filters
238
-
239
- Agent Board separates a session's semantic task state from whether a worker process is currently alive. An exited worker can therefore leave a durable row that is still resumable or attachable.
240
-
241
- | Display state | Meaning |
242
- | --- | --- |
243
- | **Queued** | A run has been scheduled but has not started processing. |
244
- | **Running** | The session is actively processing. |
245
- | **Needs answer** | The session is waiting for user input or an answer to a question. |
246
- | **Needs instructions** | The run ended without being marked complete and needs the next directive. |
247
- | **On hold** | The user parked this session intentionally (manual verdict, `h` to toggle). Automated writers can't push it to Done; queued follow-ups do not wake it. |
248
- | **Done** | The user marked the inactive session complete; this is the default completion path. |
249
- | **Failed** | The worker or host ended with an error. |
250
- | **Stopped** | The user stopped the active work. |
251
-
252
- Rows are grouped by state. When a state contains sessions from multiple directories, rows are grouped by folder within that state. Pinned rows and folders come first, then creation order remains stable; activity does not reshuffle the list. New agent activity is marked unread with stronger row glyphs and header/footer counts. Replies sent while a session is busy enter a durable FIFO follow-up queue and are delivered when the session is ready; a `qN` badge shows queued follow-ups.
253
-
254
- Press `/` to enter filter mode. Filter tokens are case-insensitive and can be combined with free-text terms:
5
+ It started as a fork of [`@zhuxixi/pi-agent-board`](https://github.com/zhuxixi/pi-agent-board) 0.13.1, so the design and most of the code are theirs, under the MIT license.
255
6
 
256
7
  ```text
257
- s:running
258
- s:hold
259
- review:ready
260
- diag:stalled
261
- evidence:error
262
- queued:true
263
- steer:awaiting-approval
8
+ ╭─ π-board 0.16.0 ────────────────────────────── node-pty healthy · hosts:2 ─╮
9
+ │ 1 needs answer · 1 running · •1 unread · 0 done │
10
+ ╰────────────────────────────────────────────────────────────────────────────╯
11
+ ◇ NEEDS ANSWER 1 ─────────────────────────────────────────────────────────────
12
+ ›◆ fix the login test my-app Waiting on a prompt 2m
13
+ ● RUNNING 1 ──────────────────────────────────────────────────────────────────
14
+ ● update the changelog my-app Running git log 12s
15
+ ╭─ new session ──────────────────────────────────────────────────────────────╮
16
+ │ › type a task to start a session │
17
+ ╰─ enter resume space peek / filter ctrl+x stop ? keys ──────────────╯
264
18
  ```
265
19
 
266
- - `s:<state>` matches a state prefix, including display-label aliases such as `needs-answer`.
267
- - `review:ready` finds sessions with review-ready evidence.
268
- - `evidence:error` finds sessions whose evidence contains errors.
269
- - `queued:true` (also `yes` or `1`) finds sessions with queued follow-ups.
270
- - `steer:<state>` filters by a persisted steering state.
271
- - Bare words match name, summary, and working directory; multiple words use AND matching.
272
-
273
- `diag:stalled` can consume persisted stalled diagnostics, but the current runner does not provide a general provider-stall detector. It should not be read as a complete automatic stall-detection feature.
20
+ ## Quick start
274
21
 
275
- ## Evidence and Code References
22
+ Requires Pi 1.5 or newer.
276
23
 
277
- Evidence is collected locally from session events. Agent Board can extract issue and pull-request references from that evidence and show badges such as `#40` or `▸#45` on rows; Peek includes the provider, confidence, source, and URL when available. Built-in GitHub/GitLab-style providers are available, and an optional per-store `providers.json` can extend the provider rules. The `AGENT_BOARD_CODE_REFS=off` setting disables extraction.
24
+ 1. Install it:
278
25
 
279
- For internal code platforms (non-github/gitlab hosts) or custom CLIs, add a per-store `providers.json` so claim/action rules exist and sessions stop depending on the low-confidence mention fallback. Example — an internal CLI (`acli`) with claim-strength issue rules:
26
+ ```bash
27
+ pi install npm:@huseynsnmz/pi-board@0.16.0
28
+ ```
280
29
 
281
- ```json
282
- {
283
- "providers": [
284
- {
285
- "name": "acode",
286
- "hosts": ["acode.internal.example.com"],
287
- "rules": [
288
- { "pattern": "acli\\s+issue\\s+update\\s+#?(\\d+)(?=[\\s\\S]*--assignee)", "kind": "issue", "strength": "claim" },
289
- { "pattern": "acli\\s+issue\\s+(?:note|comment|close)\\s+#?(\\d+)", "kind": "issue", "strength": "action" },
290
- { "pattern": "acli\\s+issue\\s+(?:show|view)\\s+#?(\\d+)", "kind": "issue", "strength": "view" }
291
- ]
292
- }
293
- ]
294
- }
295
- ```
296
-
297
- `hosts` matches the repo's remote host; rules follow the same `pattern`/`kind`/`strength` shape as the built-in `gh`/`glab` tables (`strength`: `claim` > `action` > `view`), and the `#N` capture group supplies the number. Validation errors from a broken file surface in the diagnostics panel and never break extraction — an invalid file is simply ignored.
30
+ 2. Restart Pi, and press `Left` twice on an empty prompt, or run `/agent-board`.
31
+ 3. Type a task and press `Enter`. It starts right away in this folder, with this session's model.
298
32
 
299
- ## Attach and Fallback Behavior
33
+ Your current session becomes a row too, even with no messages yet. `Esc`, or `Enter` on its row, brings you back to it.
300
34
 
301
- When PTY support is healthy, Agent Board uses an interactive PTY host for attach and start-and-attach. If PTY support is unavailable, eligible managed sessions can still run in the background through the JSON runner; start-and-attach falls back to background launch with a warning. Adopted external foreground sessions require PTY to continue safely. Press `!` in the dashboard for diagnosis and fix steps.
35
+ Installing it runs `node-pty`'s install script, which sets up its terminal support.
302
36
 
303
- On Windows, PTY host control uses a named pipe and spawned child console windows are hidden. Terminal behavior can still vary between terminal emulators.
37
+ ## Keys
304
38
 
305
- ## Entry Points
306
-
307
- | Entry point | What it does |
39
+ | Key | Action |
308
40
  | --- | --- |
309
- | `/agent-board` | Opens the dashboard from an interactive Pi session. Use this command path to attach to managed sessions. |
310
- | `pi /agent-board` | Starts Pi by invoking the dashboard command. Quitting the standalone dashboard shuts down Pi instead of dropping into a normal chat session. |
311
- | `pi --agent-board` | Opens the dashboard through the extension startup flag. This startup path cannot attach to a managed session; use `/agent-board` from a normal Pi session for attach. |
312
- | `/bg [prompt]` | Adopts the current interactive Pi session into Agent Board. An optional prompt is added to its follow-up queue before the dashboard opens. |
41
+ | Any text | Start writing a task |
42
+ | `Enter` | Start the task, or attach to the selected session |
43
+ | `Left` / `Right` | Attach to the selected session |
44
+ | `Ctrl+\` | Back to the board from a session. `Left` also works on an empty prompt |
45
+ | `Space` | Peek at a session, and type there to reply |
46
+ | `/` | Filter |
47
+ | `Ctrl+X` | Stop a session, and press again within 2 seconds to delete it |
48
+ | `Ctrl+N` | While typing, choose the folder, model and thinking level |
49
+ | `!` | `node-pty` diagnostics |
50
+ | `?` | All the keys |
51
+ | `Esc` | Clear the input, or leave the board |
313
52
 
314
- The board is global across projects by default. Rows are stored under `~/.pi/agent/agent-board/`; archiving a row removes it from the board but preserves the underlying Pi session file.
53
+ The full list is in the [reference](docs/reference.md).
315
54
 
316
- ## Persistence, Safety, and Limitations
55
+ ## Settings
317
56
 
318
- Agent Board stores its durable roster and per-session artifacts under `~/.pi/agent/agent-board/` by default. Set `AGENT_BOARD_ROOT` to use another location. The store includes the roster, launch preferences, per-session metadata and state, Pi session JSONL, run status/events, evidence, diagnostics, and (for PTY hosts) a replayable screen log.
319
-
320
- Rows and session history survive Pi reloads, Pi restarts, and worker exits. When the dashboard opens, it reconciles stale runner or host records and keeps resumable sessions visible. Archiving a row removes it from the board but does not delete its underlying Pi session file.
321
-
322
- > **Worktree isolation is currently disabled.** Agent Board does not automatically create or manage Git worktrees. Multiple sessions in the same repository may run concurrently, so avoid overlapping writes or provide your own isolation before starting parallel coding tasks.
323
-
324
- Other current limitations:
325
-
326
- - Agent Board runs locally; it does not provide cloud execution, multi-user coordination, or shared dashboards.
327
- - Real model output still depends on Pi provider authentication and network access.
328
- - The `--agent-board` startup path opens the dashboard but cannot attach to a managed session; use `/agent-board` from a normal Pi session for attach.
329
- - Pending Pi question or questionnaire tools must be answered in the attached interactive session; inline reply is rejected while one is pending.
330
- - PTY-dependent features require a working `node-pty` installation. Background work can use the JSON-runner fallback when PTY is unavailable, but start & attach then becomes background-only.
331
-
332
- ## Configuration
333
-
334
- Settings live in `~/.pi/agent/extensions/pi-board/config.json`. Everything is optional, and a missing or broken file means the defaults. Restart Pi after editing it.
335
-
336
- ```json
337
- {
338
- "model": "provider/model-id",
339
- "autoDone": false
340
- }
341
- ```
57
+ Settings live in `~/.pi/agent/extensions/pi-board/config.json`.
342
58
 
343
- ### Helper model
59
+ The board can use a model for titles, row summaries and working out what state a session is in. That's **off by default**, and built-in rules do the job instead. To choose a model, run `/board-model`. Helper calls cost tokens, and send up to 6,000 characters of a session's latest reply to that model.
344
60
 
345
- Titles, row summaries and telling `Needs answer` from `Needs instructions` can use a model. **It's off by default**, so the board makes no model calls of its own and uses built-in rules instead.
61
+ ## Good to know
346
62
 
347
- Run `/board-model` inside Pi to pick a model or turn it off. It's saved to the file above and applies to sessions started from then on. These calls run through Pi, so any model Pi can use works, and they send up to 6,000 characters of a session's latest reply to that model.
63
+ - **No worktrees:** sessions in one repository share its files, so give each writer its own worktree.
64
+ - **Sessions outlive Pi:** closing Pi leaves them running. That's the point, but idle ones are only cleaned up by a timer or the next board activity.
65
+ - **Answering prompts:** a session waiting on a permission prompt shows `Needs answer`, and you attach to answer it. A reply from Peek waits in the queue.
66
+ - **Saved to disk:** sessions and a screen log are plain files under `~/.pi/agent/agent-board/`.
348
67
 
349
- ### Other settings
68
+ More detail is in [How it works](docs/how-it-works.md) and the [reference](docs/reference.md).
350
69
 
351
- | Key | Default | Purpose |
352
- | --- | --- | --- |
353
- | `model` | off | Helper model, as `provider/id`. |
354
- | `groupBy` | `state` | `state` or `directory`. `Ctrl+S` changes it. |
355
- | `root` | `~/.pi/agent/agent-board/` | Where the board stores its state. |
356
- | `titleThinking` | `low` | Thinking level for titles. |
357
- | `autoDone` | `false` | Let the helper model mark sessions Done. |
358
- | `codeRefs` | `true` | Issue and pull request badges. |
359
- | `disablePty` | `false` | Turn off live terminal sessions and attach. |
360
- | `attachMouse` | `true` | Mouse handling in attached sessions. |
361
- | `mouseScroll` | `true` | Mouse wheel scrolling in attached sessions. |
362
- | `wheelLines` | `1` | Lines per wheel notch, from 1 to 50. |
363
- | `maxWarmHosts` | `4` | Idle sessions kept ready for fast attach, from 0 to 50. |
364
- | `warmHostTtlMs` | `600000` | How long an idle one is kept; `0` keeps it. |
365
- | `nativePaste` | `true` | X11 PRIMARY copy and middle-click paste. |
366
- | `forwardClipboard` | `true` | Forward OSC 52 clipboard writes from attached sessions. |
367
- | `forwardImages` | `true` | Forward terminal images from attached sessions. |
368
- | `imeFix` | `true` | IME cursor fix in attached sessions. |
369
- | `terminalSnapshot` | `true` | Newer attach path; `false` uses the older one. |
370
- | `replyGuard` | `true` | Discard stray terminal replies delivered as input. |
70
+ ## `pi-frame`
371
71
 
372
- An `AGENT_BOARD_*` environment variable that's already set overrides the file for that run.
373
-
374
- Setting `terminalSnapshot` to `false` routes attach onto the legacy fallback family: the screen.log replay tail plus the shrink-and-hold jiggle redraw. These paths exist only for pre-protocol runners and as a rollback hatch — they are not part of the snapshot+subscribe protocol path (issue #91 phase 4). They will be retired once the installed runner fleet is on the snapshot protocol baseline (detectable on the wire via hello protocol fields).
375
-
376
- Older `AGENT_VIEW_*` names are still read in selected compatibility paths. Prefer `AGENT_BOARD_*` for new setups. Internal child markers are managed by Agent Board and are not user settings.
377
-
378
- The `providers.json` file under the configured store root can extend the built-in issue/PR reference providers; see the [Evidence and Code References](#evidence-and-code-references) section for the feature overview.
379
-
380
- ## Troubleshooting
381
-
382
- ### Rows stay in `Running`
383
-
384
- First verify that Pi itself can complete a one-shot model call:
385
-
386
- ```bash
387
- pi --mode json -p --no-session "Reply with exactly: DONE"
388
- ```
389
-
390
- The command should emit an assistant reply, then an `agent_end` event, and exit. If it hangs before the assistant reply, fix Pi provider authentication or network access first. Agent Board cannot produce live model results until Pi works independently.
391
-
392
- ### `node-pty unavailable`
393
-
394
- Press `!` in the dashboard to open the diagnostic panel and follow its fix steps. Common causes include a missing native `node-pty` binary, a Node/architecture mismatch, a missing or non-executable macOS `spawn-helper`, or macOS quarantine. You can temporarily set `AGENT_BOARD_DISABLE_PTY=1` to use background JSON-runner behavior where supported.
395
-
396
- ### Attach is slow or keeps reconnecting
397
-
398
- A cold PTY host may briefly show a loading or reconnecting surface while it starts. Check the PTY status in the dashboard with `!`; stale hosts are diagnosed separately from active task workers. If the host never becomes healthy, repair `node-pty` or use background mode for eligible managed sessions.
399
-
400
- ### IME candidate window is stuck at the window edge (Windows WezTerm)
401
-
402
- On Windows WezTerm with a WSL2 backend, the IME candidate window may stay pinned to the right edge instead of following the text cursor in an attached session. Windows WezTerm only tracks the IME candidate position from the visible hardware cursor, and Pi hides the hardware cursor by default — the block cursor you see in the editor is drawn content, not the hardware cursor. Linux terminals are not affected.
403
-
404
- Make the hardware cursor visible, either way:
405
-
406
- ```bash
407
- export PI_HARDWARE_CURSOR=1 # machine-local, e.g. ~/.zshrc.local
408
- ```
409
-
410
- or set `"showHardwareCursor": true` in Pi's `settings.json` (syncs across machines if the config is version-controlled; harmless on Linux).
411
-
412
- Trade-off: the real terminal cursor becomes visible inside the TUI. This is cosmetic only.
413
-
414
- ### Start & attach falls back to background
415
-
416
- Start & attach requires PTY support. When PTY is unavailable, the task is still dispatched in the background and the dashboard displays a warning. Repair PTY and retry attach from the normal `/agent-board` command path.
417
-
418
- ### Inline reply is rejected
419
-
420
- A pending Pi question or questionnaire requires the real interactive session. Attach to the row and answer it there; ordinary replies can be sent from Peek and are queued while a session is busy.
421
-
422
- ### Sessions in the same repository conflict
423
-
424
- Worktree isolation is not enabled. Stop overlapping writers, separate their working directories, or create and manage Git worktrees yourself before running concurrent coding tasks.
425
-
426
- See [VERIFY.md](VERIFY.md) for no-auth checks, extension loading checks, provider checks, persistence checks, and the manual dashboard flow.
427
-
428
- ## Development
429
-
430
- For local development:
431
-
432
- ```bash
433
- npm install
434
- npm run verify
435
- ```
72
+ [`pi-frame`](https://github.com/huseynsnmz/pi-frame) 0.3.8 or newer draws its header and footer again when the board closes.
436
73
 
437
- `npm run verify` runs typecheck, the perf gate (`npm run test:perf`), tests, coverage, and a package dry-run. The A11 perf assertions are opt-in — they skip under `npm test` / `npm run test:coverage` and only measure via `npm run test:perf` (issue #121). The same checks run in CI on Node 22 and Node 24. See [VERIFY.md](VERIFY.md) for the full verification checklist and known environment-dependent limitations.
74
+ ## Contributing
438
75
 
439
- ## Publishing
76
+ Issues are welcome, and pull requests are turned off. See [CONTRIBUTING.md](CONTRIBUTING.md) and [SECURITY.md](SECURITY.md).
440
77
 
441
- Published to npm by hand, with `npm publish --access public`. There's no publish workflow.
78
+ ## Credits and license
442
79
 
443
- ## Further Reading
80
+ MIT. See [LICENSE](LICENSE), which keeps the original copyright notice.
444
81
 
445
- - [Manual verification](VERIFY.md) — static checks, Pi loading, provider authentication, persistence, and dashboard flows.
446
- - [Release process](docs/RELEASE.md) — release commands, trusted publishing setup, and failure recovery.
447
- - [Product requirements](PRD.md) — original product scope and design context.
448
- - [Progress log](PROGRESS.md) — implementation checkpoints and known environment notes.
449
- - [Exploration notes](docs/EXPLORATION.md) — Pi API and integration research.
82
+ - [pi-agent-board](https://github.com/zhuxixi/pi-agent-board) by zhuxixi and its contributors
83
+ - The keys and layout follow [Claude Code's agent view](https://code.claude.com/docs/en/agent-view).
package/SECURITY.md ADDED
@@ -0,0 +1,19 @@
1
+ # Security
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Please don't open a public issue for a security problem. Use **Report a vulnerability** on the repository's Security tab, or email huseyin@snmz.org.
6
+
7
+ Examples that count as security problems:
8
+
9
+ - A reply or other input from the board that answers a permission prompt in a session.
10
+ - Output from a session that reaches your terminal as a command, or runs anything outside that session.
11
+ - Another local user reaching a session through the board's sockets or files.
12
+
13
+ Fixes go into the latest release only.
14
+
15
+ ## What this extension does not protect against
16
+
17
+ - **What a session can do:** each one is a real Pi session with your access. Use your permission rules and sandbox.
18
+ - **Project files:** a trusted project's Pi settings apply to its sessions.
19
+ - **Secrets on screen:** anything printed in a session is saved in its session file and screen log.
@@ -0,0 +1,31 @@
1
+ # How it works
2
+
3
+ Every session on the board is a real Pi session, running in a terminal the board keeps open for it.
4
+
5
+ ```text
6
+ /agent-board (a screen inside your Pi)
7
+ │ start a task
8
+ ▼
9
+ detached runner ──→ real `pi` in a hidden terminal (node-pty)
10
+ │ ├─ your extensions, permissions and session file
11
+ │ └─ keeps running after you close Pi
12
+ ▼
13
+ ~/.pi/agent/agent-board/ ──→ the board reads state from here
14
+ ```
15
+
16
+ - **Starting a task:** a detached runner starts Pi at a saved session file, and types your task into it.
17
+ - **State:** the extension also loads inside each session, and reports what it's doing to a small coordinator process, which is the only writer of each row's state. The board reads that.
18
+ - **Waiting on you:** a permission prompt or other dialog takes the keyboard from Pi's prompt during a run, and that puts the row in `Needs answer`. A reply from Peek waits in the queue, because typing into the session would answer the dialog.
19
+ - **Attaching:** the board shows the session's real terminal inside your Pi, and hands the keyboard over until you detach.
20
+ - **The session you're in:** pressing `Left` twice adds its session file as a row. Pi keeps running it, so the board never starts a second Pi on that file.
21
+ - **Without node-pty:** tasks run with `pi --mode json -p`, where nothing can answer a prompt, and you can't attach.
22
+
23
+ ## What it costs
24
+
25
+ The board makes no model calls of its own unless you choose a helper model with `/board-model`. See the [reference](reference.md#helper-model).
26
+
27
+ ## What it doesn't do
28
+
29
+ - **Isolate sessions:** sessions in one repository share its working tree, so they can overwrite each other. Use your own worktrees for parallel changes.
30
+ - **Sandbox anything:** each session has what any Pi session has, with your extensions and permissions.
31
+ - **Protect what's on screen:** session files and a replayable screen log are stored as plain files, so a secret printed in a terminal gets saved.