pi-crew 0.2.3 → 0.2.5

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 (348) hide show
  1. package/AGENTS.md +57 -32
  2. package/CHANGELOG.md +466 -448
  3. package/LICENSE +21 -21
  4. package/NOTICE.md +16 -16
  5. package/README.md +323 -323
  6. package/docs/FEATURE_INTAKE.md +126 -0
  7. package/docs/HARNESS.md +86 -0
  8. package/docs/HARNESS_BACKLOG.md +41 -0
  9. package/docs/TEST_MATRIX.md +49 -0
  10. package/docs/actions-reference.md +595 -595
  11. package/docs/architecture.md +180 -180
  12. package/docs/code-review-2026-05-11.md +592 -592
  13. package/docs/commands-reference.md +347 -347
  14. package/docs/comparison-pi-subagents-vs-pi-crew.md +303 -0
  15. package/docs/decisions/0001-durable-state.md +41 -0
  16. package/docs/decisions/0002-child-process-for-async.md +42 -0
  17. package/docs/decisions/0003-depth-guard.md +36 -0
  18. package/docs/decisions/0004-execfile-over-exec.md +34 -0
  19. package/docs/decisions/0005-no-parameter-properties.md +49 -0
  20. package/docs/decisions/0006-publish-bundled-esm.md +63 -0
  21. package/docs/decisions/0007-active-run-binary-index.md +54 -0
  22. package/docs/decisions/0008-child-pi-warm-pool.md +61 -0
  23. package/docs/decisions/README.md +23 -0
  24. package/docs/followup-review-round4-2026-05-13.md +107 -0
  25. package/docs/implementation-plan-top3.md +333 -0
  26. package/docs/live-mailbox-runtime.md +36 -36
  27. package/docs/next-upgrade-roadmap.md +808 -808
  28. package/docs/oh-my-pi-research.md +509 -0
  29. package/docs/perf/baseline-2026-05.md +113 -0
  30. package/docs/perf/final-report-2026-05.md +206 -0
  31. package/docs/perf/sprint-1-report.md +71 -0
  32. package/docs/perf/sprint-2-report.md +81 -0
  33. package/docs/perf/sprint-2.5-report.md +53 -0
  34. package/docs/perf/sprint-3-report.md +36 -0
  35. package/docs/perf/sprint-4-report.md +47 -0
  36. package/docs/perf/sprint-5-report.md +51 -0
  37. package/docs/perf/sprint-6-report.md +94 -0
  38. package/docs/perf/sprint-7-report.md +74 -0
  39. package/docs/perf/upgrade-plan-2026-05.md +147 -0
  40. package/docs/pi-subagents3-deep-analysis.md +508 -0
  41. package/docs/product/README.md +31 -0
  42. package/docs/product/platform.md +27 -0
  43. package/docs/product/runtime-safety.md +37 -0
  44. package/docs/product/team-run.md +39 -0
  45. package/docs/product/team-tool.md +37 -0
  46. package/docs/publishing.md +65 -65
  47. package/docs/resource-formats.md +134 -134
  48. package/docs/runtime-analysis-child-vs-live.md +171 -0
  49. package/docs/runtime-flow.md +148 -148
  50. package/docs/runtime-migration-in-process-analysis.md +250 -0
  51. package/docs/stories/README.md +30 -0
  52. package/docs/stories/backlog.md +36 -0
  53. package/docs/templates/decision.md +27 -0
  54. package/docs/templates/story.md +44 -0
  55. package/docs/templates/validation-report.md +32 -0
  56. package/docs/usage.md +238 -238
  57. package/index.ts +7 -6
  58. package/install.mjs +65 -65
  59. package/package.json +107 -100
  60. package/schema.json +222 -222
  61. package/skills/child-pi-spawning/SKILL.md +213 -0
  62. package/skills/context-artifact-hygiene/SKILL.md +32 -0
  63. package/skills/event-log-tracing/SKILL.md +299 -0
  64. package/skills/git-master/SKILL.md +225 -24
  65. package/skills/live-agent-lifecycle/SKILL.md +192 -0
  66. package/skills/mailbox-interactive/SKILL.md +300 -19
  67. package/skills/model-routing-context/SKILL.md +94 -0
  68. package/skills/multi-perspective-review/SKILL.md +88 -0
  69. package/skills/read-only-explorer/SKILL.md +250 -26
  70. package/skills/safe-bash/SKILL.md +307 -21
  71. package/skills/verification-before-done/SKILL.md +11 -2
  72. package/skills/widget-rendering/SKILL.md +258 -0
  73. package/skills/workspace-isolation/SKILL.md +202 -0
  74. package/skills/worktree-isolation/SKILL.md +202 -18
  75. package/src/adapters/claude-adapter.ts +25 -25
  76. package/src/adapters/codex-adapter.ts +21 -21
  77. package/src/adapters/cursor-adapter.ts +17 -17
  78. package/src/adapters/export-util.ts +137 -137
  79. package/src/adapters/index.ts +15 -15
  80. package/src/adapters/registry.ts +18 -18
  81. package/src/adapters/types.ts +23 -23
  82. package/src/agents/agent-config.ts +38 -38
  83. package/src/agents/agent-serializer.ts +38 -38
  84. package/src/agents/discover-agents.ts +121 -118
  85. package/src/config/config.ts +740 -858
  86. package/src/config/defaults.ts +96 -96
  87. package/src/config/drift-detector.ts +211 -211
  88. package/src/config/markers.ts +327 -327
  89. package/src/config/resilient-parser.ts +109 -108
  90. package/src/config/suggestions.ts +74 -74
  91. package/src/config/types.ts +199 -0
  92. package/src/extension/async-notifier.ts +123 -89
  93. package/src/extension/autonomous-policy.ts +169 -169
  94. package/src/extension/cross-extension-rpc.ts +104 -104
  95. package/src/extension/help.ts +47 -47
  96. package/src/extension/import-index.ts +69 -69
  97. package/src/extension/management.ts +395 -382
  98. package/src/extension/notification-router.ts +116 -116
  99. package/src/extension/notification-sink.ts +51 -51
  100. package/src/extension/project-init.ts +168 -168
  101. package/src/extension/register.ts +859 -668
  102. package/src/extension/registration/artifact-cleanup.ts +15 -15
  103. package/src/extension/registration/command-utils.ts +54 -54
  104. package/src/extension/registration/commands.ts +559 -452
  105. package/src/extension/registration/compaction-guard.ts +125 -125
  106. package/src/extension/registration/subagent-helpers.ts +102 -102
  107. package/src/extension/registration/subagent-tools.ts +220 -159
  108. package/src/extension/registration/team-tool.ts +159 -99
  109. package/src/extension/registration/viewers.ts +29 -0
  110. package/src/extension/result-watcher.ts +128 -128
  111. package/src/extension/run-bundle-schema.ts +89 -89
  112. package/src/extension/run-export.ts +73 -73
  113. package/src/extension/run-import.ts +84 -84
  114. package/src/extension/run-index.ts +94 -94
  115. package/src/extension/run-maintenance.ts +142 -142
  116. package/src/extension/session-summary.ts +8 -8
  117. package/src/extension/team-manager-command.ts +96 -96
  118. package/src/extension/team-recommendation.ts +188 -188
  119. package/src/extension/team-tool/api.ts +5 -2
  120. package/src/extension/team-tool/cancel.ts +224 -209
  121. package/src/extension/team-tool/config-patch.ts +36 -36
  122. package/src/extension/team-tool/context.ts +60 -60
  123. package/src/extension/team-tool/doctor.ts +242 -242
  124. package/src/extension/team-tool/handle-settings.ts +421 -195
  125. package/src/extension/team-tool/inspect.ts +41 -41
  126. package/src/extension/team-tool/lifecycle-actions.ts +139 -139
  127. package/src/extension/team-tool/parallel-dispatch.ts +156 -156
  128. package/src/extension/team-tool/plan.ts +19 -19
  129. package/src/extension/team-tool/respond.ts +112 -111
  130. package/src/extension/team-tool/run.ts +246 -229
  131. package/src/extension/team-tool/status.ts +110 -110
  132. package/src/extension/team-tool-types.ts +13 -13
  133. package/src/extension/team-tool.ts +344 -344
  134. package/src/extension/tool-result.ts +16 -16
  135. package/src/extension/validate-resources.ts +77 -77
  136. package/src/hooks/registry.ts +61 -61
  137. package/src/hooks/types.ts +40 -40
  138. package/src/i18n.ts +184 -184
  139. package/src/observability/correlation.ts +35 -35
  140. package/src/observability/event-to-metric.ts +68 -68
  141. package/src/observability/exporters/adapter.ts +30 -30
  142. package/src/observability/exporters/otlp-exporter.ts +106 -92
  143. package/src/observability/exporters/prometheus-exporter.ts +54 -54
  144. package/src/observability/metric-registry.ts +87 -87
  145. package/src/observability/metric-retention.ts +54 -54
  146. package/src/observability/metric-sink.ts +81 -56
  147. package/src/observability/metrics-primitives.ts +167 -167
  148. package/src/prompt/prompt-runtime.ts +72 -72
  149. package/src/runtime/adaptive-plan.ts +338 -0
  150. package/src/runtime/agent-control.ts +169 -169
  151. package/src/runtime/agent-memory.ts +72 -72
  152. package/src/runtime/agent-observability.ts +114 -114
  153. package/src/runtime/async-marker.ts +26 -26
  154. package/src/runtime/async-runner.ts +153 -153
  155. package/src/runtime/attention-events.ts +28 -28
  156. package/src/runtime/auto-resume.ts +100 -100
  157. package/src/runtime/background-runner.ts +122 -89
  158. package/src/runtime/cancellation.ts +61 -61
  159. package/src/runtime/capability-inventory.ts +116 -116
  160. package/src/runtime/child-pi-pool.ts +68 -0
  161. package/src/runtime/child-pi.ts +541 -461
  162. package/src/runtime/code-summary.ts +247 -247
  163. package/src/runtime/compaction-summary.ts +271 -271
  164. package/src/runtime/concurrency.ts +58 -58
  165. package/src/runtime/crash-recovery.ts +317 -301
  166. package/src/runtime/crew-agent-records.ts +379 -281
  167. package/src/runtime/crew-agent-runtime.ts +60 -60
  168. package/src/runtime/cross-extension-rpc.ts +72 -0
  169. package/src/runtime/custom-tools/irc-tool.ts +201 -201
  170. package/src/runtime/custom-tools/submit-result-tool.ts +90 -90
  171. package/src/runtime/deadletter.ts +47 -47
  172. package/src/runtime/delivery-coordinator.ts +176 -176
  173. package/src/runtime/delta-conflict.ts +360 -360
  174. package/src/runtime/diagnostic-export.ts +102 -102
  175. package/src/runtime/direct-run.ts +35 -35
  176. package/src/runtime/effectiveness.ts +82 -81
  177. package/src/runtime/errors/crew-errors.ts +166 -0
  178. package/src/runtime/event-stream-bridge.ts +92 -92
  179. package/src/runtime/foreground-control.ts +82 -82
  180. package/src/runtime/green-contract.ts +46 -46
  181. package/src/runtime/group-join.ts +234 -106
  182. package/src/runtime/heartbeat-watcher.ts +145 -124
  183. package/src/runtime/iteration-hooks.ts +267 -267
  184. package/src/runtime/live-agent-control.ts +88 -88
  185. package/src/runtime/live-agent-manager.ts +377 -179
  186. package/src/runtime/live-control-realtime.ts +36 -36
  187. package/src/runtime/live-session-runtime.ts +676 -600
  188. package/src/runtime/loop-gates.ts +129 -129
  189. package/src/runtime/manifest-cache.ts +263 -263
  190. package/src/runtime/mcp-proxy.ts +113 -113
  191. package/src/runtime/metric-parser.ts +40 -40
  192. package/src/runtime/model-fallback.ts +282 -274
  193. package/src/runtime/model-resolver.ts +118 -0
  194. package/src/runtime/output-validator.ts +187 -187
  195. package/src/runtime/overflow-recovery.ts +175 -175
  196. package/src/runtime/parallel-research.ts +44 -44
  197. package/src/runtime/parallel-utils.ts +156 -156
  198. package/src/runtime/parent-guard.ts +80 -80
  199. package/src/runtime/phase-progress.ts +217 -217
  200. package/src/runtime/pi-args.ts +165 -165
  201. package/src/runtime/pi-json-output.ts +111 -111
  202. package/src/runtime/pi-spawn.ts +167 -167
  203. package/src/runtime/policy-engine.ts +79 -79
  204. package/src/runtime/post-checks.ts +125 -125
  205. package/src/runtime/post-exit-stdio-guard.ts +86 -86
  206. package/src/runtime/process-status.ts +97 -73
  207. package/src/runtime/progress-event-coalescer.ts +43 -43
  208. package/src/runtime/recovery-recipes.ts +74 -74
  209. package/src/runtime/retry-executor.ts +81 -81
  210. package/src/runtime/role-permission.ts +39 -39
  211. package/src/runtime/run-tracker.ts +99 -0
  212. package/src/runtime/runtime-policy.ts +21 -0
  213. package/src/runtime/runtime-resolver.ts +94 -91
  214. package/src/runtime/scheduler.ts +294 -0
  215. package/src/runtime/semaphore.ts +131 -131
  216. package/src/runtime/sensitive-paths.ts +92 -92
  217. package/src/runtime/session-usage.ts +79 -79
  218. package/src/runtime/settings-store.ts +103 -0
  219. package/src/runtime/sidechain-output.ts +29 -29
  220. package/src/runtime/skill-instructions.ts +222 -222
  221. package/src/runtime/stale-reconciler.ts +198 -189
  222. package/src/runtime/streaming-output.ts +47 -0
  223. package/src/runtime/subagent-manager.ts +404 -400
  224. package/src/runtime/subprocess-tool-registry.ts +67 -67
  225. package/src/runtime/task-display.ts +38 -38
  226. package/src/runtime/task-graph-scheduler.ts +122 -122
  227. package/src/runtime/task-graph.ts +207 -207
  228. package/src/runtime/task-output-context.ts +177 -177
  229. package/src/runtime/task-packet.ts +93 -93
  230. package/src/runtime/task-quality.ts +207 -207
  231. package/src/runtime/task-runner/capabilities.ts +78 -78
  232. package/src/runtime/task-runner/live-executor.ts +131 -113
  233. package/src/runtime/task-runner/progress.ts +119 -119
  234. package/src/runtime/task-runner/prompt-builder.ts +139 -139
  235. package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
  236. package/src/runtime/task-runner/result-utils.ts +14 -14
  237. package/src/runtime/task-runner/run-projection.ts +103 -103
  238. package/src/runtime/task-runner/state-helpers.ts +22 -22
  239. package/src/runtime/task-runner.ts +469 -459
  240. package/src/runtime/team-runner.ts +693 -945
  241. package/src/runtime/usage-tracker.ts +71 -0
  242. package/src/runtime/worker-heartbeat.ts +21 -21
  243. package/src/runtime/worker-startup.ts +57 -57
  244. package/src/runtime/workflow-state.ts +187 -187
  245. package/src/runtime/yield-handler.ts +190 -190
  246. package/src/schema/config-schema.ts +172 -168
  247. package/src/schema/team-tool-schema.ts +126 -126
  248. package/src/schema/validation-types.ts +151 -148
  249. package/src/skills/discover-skills.ts +67 -67
  250. package/src/skills/skill-templates.ts +374 -374
  251. package/src/state/active-run-registry.ts +227 -191
  252. package/src/state/artifact-store.ts +130 -129
  253. package/src/state/atomic-write.ts +262 -195
  254. package/src/state/blob-store.ts +116 -116
  255. package/src/state/contracts.ts +111 -111
  256. package/src/state/event-log-rotation.ts +161 -158
  257. package/src/state/event-log.ts +383 -303
  258. package/src/state/event-reconstructor.ts +217 -217
  259. package/src/state/jsonl-writer.ts +82 -82
  260. package/src/state/locks.ts +146 -146
  261. package/src/state/mailbox.ts +446 -405
  262. package/src/state/state-store.ts +364 -351
  263. package/src/state/task-claims.ts +44 -44
  264. package/src/state/types.ts +285 -285
  265. package/src/state/usage.ts +29 -29
  266. package/src/subagents/async-entry.ts +1 -1
  267. package/src/subagents/index.ts +3 -3
  268. package/src/subagents/live/control.ts +1 -1
  269. package/src/subagents/live/manager.ts +1 -1
  270. package/src/subagents/live/realtime.ts +1 -1
  271. package/src/subagents/live/session-runtime.ts +1 -1
  272. package/src/subagents/manager.ts +1 -1
  273. package/src/subagents/spawn.ts +1 -1
  274. package/src/teams/discover-teams.ts +116 -116
  275. package/src/teams/team-config.ts +27 -27
  276. package/src/teams/team-serializer.ts +38 -38
  277. package/src/types/diff.d.ts +18 -18
  278. package/src/ui/agent-management-overlay.ts +144 -144
  279. package/src/ui/crew-widget.ts +487 -370
  280. package/src/ui/dashboard-panes/agents-pane.ts +109 -28
  281. package/src/ui/dashboard-panes/cancellation-pane.ts +42 -42
  282. package/src/ui/dashboard-panes/capability-pane.ts +59 -59
  283. package/src/ui/dashboard-panes/health-pane.ts +30 -30
  284. package/src/ui/dashboard-panes/mailbox-pane.ts +35 -35
  285. package/src/ui/dashboard-panes/progress-pane.ts +30 -30
  286. package/src/ui/dashboard-panes/transcript-pane.ts +10 -10
  287. package/src/ui/heartbeat-aggregator.ts +63 -63
  288. package/src/ui/keybinding-map.ts +97 -94
  289. package/src/ui/live-conversation-overlay.ts +152 -0
  290. package/src/ui/live-run-sidebar.ts +180 -180
  291. package/src/ui/mascot.ts +442 -442
  292. package/src/ui/overlays/agent-picker-overlay.ts +57 -57
  293. package/src/ui/overlays/confirm-overlay.ts +58 -58
  294. package/src/ui/overlays/mailbox-compose-overlay.ts +144 -144
  295. package/src/ui/overlays/mailbox-compose-preview.ts +63 -63
  296. package/src/ui/overlays/mailbox-detail-overlay.ts +122 -122
  297. package/src/ui/pi-ui-compat.ts +57 -57
  298. package/src/ui/powerbar-publisher.ts +221 -197
  299. package/src/ui/render-scheduler.ts +216 -143
  300. package/src/ui/run-action-dispatcher.ts +118 -118
  301. package/src/ui/run-dashboard.ts +526 -464
  302. package/src/ui/run-event-bus.ts +208 -208
  303. package/src/ui/run-snapshot-cache.ts +826 -777
  304. package/src/ui/settings-overlay.ts +721 -0
  305. package/src/ui/snapshot-types.ts +86 -70
  306. package/src/ui/theme-adapter.ts +190 -190
  307. package/src/ui/tool-progress-formatter.ts +89 -0
  308. package/src/ui/transcript-cache.ts +94 -94
  309. package/src/ui/transcript-viewer.ts +335 -335
  310. package/src/utils/conflict-detect.ts +662 -0
  311. package/src/utils/file-coalescer.ts +86 -86
  312. package/src/utils/frontmatter.ts +68 -68
  313. package/src/utils/fs-watch.ts +88 -31
  314. package/src/utils/gh-protocol.ts +479 -0
  315. package/src/utils/ids.ts +17 -17
  316. package/src/utils/incremental-reader.ts +104 -104
  317. package/src/utils/internal-error.ts +6 -6
  318. package/src/utils/names.ts +27 -27
  319. package/src/utils/paths.ts +102 -63
  320. package/src/utils/redaction.ts +44 -44
  321. package/src/utils/safe-paths.ts +47 -47
  322. package/src/utils/scan-cache.ts +136 -136
  323. package/src/utils/sse-parser.ts +134 -134
  324. package/src/utils/task-name-generator.ts +337 -337
  325. package/src/utils/timings.ts +33 -33
  326. package/src/utils/visual.ts +243 -198
  327. package/src/workflows/discover-workflows.ts +139 -139
  328. package/src/workflows/validate-workflow.ts +40 -40
  329. package/src/workflows/workflow-config.ts +26 -26
  330. package/src/workflows/workflow-serializer.ts +32 -32
  331. package/src/worktree/branch-freshness.ts +45 -45
  332. package/src/worktree/cleanup.ts +75 -75
  333. package/src/worktree/worktree-manager.ts +188 -188
  334. package/teams/default.team.md +12 -12
  335. package/teams/fast-fix.team.md +11 -11
  336. package/teams/implementation.team.md +18 -18
  337. package/teams/parallel-research.team.md +14 -14
  338. package/teams/research.team.md +11 -11
  339. package/teams/review.team.md +12 -12
  340. package/tsconfig.json +19 -19
  341. package/workflows/default.workflow.md +30 -30
  342. package/workflows/fast-fix.workflow.md +23 -23
  343. package/workflows/implementation.workflow.md +43 -43
  344. package/workflows/parallel-research.workflow.md +46 -46
  345. package/workflows/research.workflow.md +22 -22
  346. package/workflows/review.workflow.md +30 -30
  347. package/skills/task-packet/SKILL.md +0 -28
  348. package/skills/verify-evidence/SKILL.md +0 -27
@@ -1,26 +1,250 @@
1
- ---
2
- name: read-only-explorer
3
- description: Read-only exploration and audit workflow. Use for explorer, analyst, reviewer, and source-audit roles that must inspect code without modifying files.
4
- ---
5
-
6
- # read-only-explorer
7
-
8
- Use this skill for explorer, analyst, reviewer, and source-audit roles.
9
-
10
- ## Contract
11
-
12
- - Do not edit files.
13
- - Do not write generated artifacts outside the run artifact directory.
14
- - Prefer `read`, `rg`, `find`, `git status`, and package metadata inspection.
15
- - Record exact files inspected.
16
- - Distinguish direct evidence from inference.
17
- - If implementation is needed, recommend it instead of modifying code.
18
-
19
- ## Output shape
20
-
21
- Return:
22
-
23
- 1. files inspected;
24
- 2. findings with path references;
25
- 3. risks/unknowns;
26
- 4. recommended next tests or implementation tasks.
1
+ ---
2
+ name: read-only-explorer
3
+ description: Read-only exploration and audit workflow. Use for explorer, analyst, reviewer, and source-audit roles that must inspect code without modifying files.
4
+ ---
5
+
6
+ # read-only-explorer
7
+
8
+ Use this skill for explorer, analyst, reviewer, and source-audit roles. These roles must inspect code without modifying it.
9
+
10
+ ## Core Contract
11
+
12
+ 1. **Do not edit files** — no write, no edit, no delete
13
+ 2. **Do not write generated artifacts** outside the run artifact directory
14
+ 3. **Prefer read-only commands**: `read`, `rg`, `find`, `ls`, `git status`
15
+ 4. **Record exact files inspected** — include path and relevant line numbers
16
+ 5. **Distinguish direct evidence from inference** — don't guess
17
+ 6. **If implementation is needed, recommend** don't modify code
18
+
19
+ ## Tool Selection Guide
20
+
21
+ Choosing the right tool for the task reduces noise and speeds up discovery.
22
+
23
+ ### `rg` (ripgrep) — Code pattern search
24
+
25
+ **Best for:** Finding function definitions, imports, patterns, usages
26
+ ```
27
+ # Find all uses of a function
28
+ rg "functionName" --type ts
29
+
30
+ # Find with context (2 lines before/after)
31
+ rg "pattern" -B2 -A2
32
+
33
+ # Case-insensitive
34
+ rg -i "error handling"
35
+
36
+ # Only match whole word
37
+ rg -w "agent"
38
+
39
+ # JSON output for machine parsing
40
+ rg "pattern" --json | head -20
41
+
42
+ # Respect .gitignore (skip node_modules)
43
+ rg "pattern" --type-add 'exclude:*.json' --type ts
44
+ ```
45
+
46
+ ### `find` — File and directory search
47
+
48
+ **Best for:** Finding files by name, type, or path pattern
49
+ ```
50
+ # Find all TypeScript files
51
+ find . -name "*.ts" -not -path "*/node_modules/*" | head -20
52
+
53
+ # Find recently modified files
54
+ find . -name "*.ts" -mtime -7 | head -20
55
+
56
+ # Find files larger than 100KB
57
+ find . -size +100k -name "*.ts"
58
+
59
+ # Find by path pattern
60
+ find . -path "*/runtime/*" -name "*.ts" | head -10
61
+ ```
62
+
63
+ ### `read` — File content inspection
64
+
65
+ **Best for:** Reading specific files or file sections
66
+ ```
67
+ # Read full file
68
+ read file.ts
69
+
70
+ # Read with line numbers
71
+ read -n file.ts # (use read tool with offset/limit)
72
+
73
+ # Read first N lines
74
+ read --limit 50 file.ts
75
+
76
+ # Read specific section
77
+ read --offset 100 --limit 30 file.ts
78
+ ```
79
+
80
+ ### `ls` — Directory structure
81
+
82
+ **Best for:** Listing directories, understanding layout
83
+ ```
84
+ ls src/runtime/
85
+ ls -la .crew/state/runs/ | head -20
86
+ ls skills/ | head -20
87
+ ```
88
+
89
+ ### `git` — Version control inspection
90
+
91
+ **Best for:** Understanding history, changes, and authorship
92
+ ```
93
+ git status --short
94
+ git diff HEAD~3 --stat
95
+ git log --oneline -10
96
+ git show <commit-hash> --stat
97
+ git blame src/file.ts | head -20
98
+ git branch -a
99
+ ```
100
+
101
+ ## Scope Containment
102
+
103
+ Limit searches to relevant areas to avoid noise.
104
+
105
+ ### By directory
106
+ ```
107
+ # Only search runtime directory
108
+ rg "pattern" src/runtime/ --type ts
109
+
110
+ # Exclude test and node_modules
111
+ rg "pattern" --type ts --exclude "test/**" --exclude "node_modules/**"
112
+ ```
113
+
114
+ ### By file type
115
+ ```
116
+ # Only TypeScript files
117
+ rg "pattern" --type ts
118
+
119
+ # Only test files
120
+ rg "pattern" --type-add 'test:*.test.ts' --type test
121
+
122
+ # Exclude generated files
123
+ rg "pattern" --glob "!**/*.generated.ts"
124
+ ```
125
+
126
+ ### By depth
127
+ ```
128
+ # Only top-level config files
129
+ find . -maxdepth 2 -name "*.json" | head -20
130
+ ```
131
+
132
+ ## Findings Format
133
+
134
+ Every finding should be documented with:
135
+
136
+ ```text
137
+ path/to/file.ts:123
138
+ Evidence: <what you read>
139
+ Severity: critical|high|medium|low
140
+ Finding: <what the problem is>
141
+ Impact: <why it matters>
142
+ Recommendation: <what to do next>
143
+ ```
144
+
145
+ **Example:**
146
+ ```
147
+ src/runtime/agent-manager.ts:87
148
+ Evidence: throw new Error("Agent not found") with no error code
149
+ Severity: medium
150
+ Finding: Error thrown without structured error code makes debugging harder
151
+ Impact: Hard to distinguish "not found" from "access denied" or other failures
152
+ Recommendation: Use typed CrewError with error code enum instead
153
+ ```
154
+
155
+ ## Risk Assessment Criteria
156
+
157
+ | Severity | Criteria |
158
+ |---|---|
159
+ | **critical** | Data loss, secret leak, arbitrary command/path escape, broken install |
160
+ | **high** | Broken core workflow, ownership bypass, persistent incorrect state |
161
+ | **medium** | Important regression, flaky test, confusing behavior |
162
+ | **low** | Polish, maintainability, missing docs |
163
+
164
+ ## Next Steps Format
165
+
166
+ When recommending implementation, structure it as:
167
+
168
+ ```
169
+ 1. Files to create:
170
+ - src/new-feature.ts (new module)
171
+
172
+ 2. Files to modify:
173
+ - src/existing.ts (add function X, change line Y)
174
+
175
+ 3. Tests to add:
176
+ - test/unit/new-feature.test.ts
177
+
178
+ 4. Verification:
179
+ - npx tsc --noEmit
180
+ - npm test
181
+ ```
182
+
183
+ ## Reading Large Codebases Efficiently
184
+
185
+ ### Chunk strategy
186
+ 1. Start with entry point (main file, index, README)
187
+ 2. Find key function calls → follow the chain
188
+ 3. Read function signatures before bodies
189
+ 4. Skip test files unless investigating specific test behavior
190
+
191
+ ### Trace data flow
192
+ ```
193
+ user input → config resolution → function call → state write → UI update
194
+ ```
195
+
196
+ For each step, identify:
197
+ - What data enters
198
+ - What transforms it
199
+ - What exits
200
+ - Where it could fail
201
+
202
+ ### Distinguish evidence from inference
203
+
204
+ | Type | Description | Example |
205
+ |---|---|---|
206
+ | **Direct evidence** | Exact content read from file | `"type": "worker.spawned"` found at line 42 |
207
+ | **Inference** | Interpretation based on evidence | "Worker likely crashed because exit code was 1" |
208
+ | **Unknown** | Not confirmed | "This might be a race condition" |
209
+
210
+ Always label uncertainty clearly. Use "may", "might", "could" for inference; "is", "shows", "contains" for evidence.
211
+
212
+ ## Anti-patterns
213
+
214
+ - **Editing during exploration**: If you need to add logging or print statements, use a separate test script instead of modifying source files.
215
+ - **Broad searches without context**: `rg "error"` returns thousands of results. Narrow by file, directory, or surrounding context.
216
+ - **Trusting comments over code**: Comments can be outdated. Read the actual code.
217
+ - **Skipping test files**: Tests often reveal the intended behavior and edge cases. Read them.
218
+ - **Not recording files inspected**: Without exact paths, findings can't be verified.
219
+ - **Inference as fact**: If unsure, mark it as inference.
220
+
221
+ ---
222
+
223
+ ## Source patterns
224
+
225
+ - `src/runtime/task-runner.ts` — task execution pipeline
226
+ - `src/runtime/child-pi.ts` — worker spawning
227
+ - `src/runtime/live-agent-manager.ts` — live agent lifecycle
228
+ - `src/state/event-log.ts` — event logging system
229
+ - `src/extension/team-tool/` — API and tool handling
230
+ - `src/ui/` — widget and TUI rendering
231
+
232
+ ---
233
+
234
+ ## Verification
235
+
236
+ ```bash
237
+ cd pi-crew
238
+
239
+ # Verify no files were modified
240
+ git status --short
241
+
242
+ # Count inspected files
243
+ rg "pattern" --type ts | wc -l
244
+
245
+ # Check for direct evidence in event log
246
+ cat .crew/state/runs/<runId>/events.jsonl | grep "worker.spawned"
247
+
248
+ # TypeScript
249
+ npx tsc --noEmit
250
+ ```
@@ -1,21 +1,307 @@
1
- ---
2
- name: safe-bash
3
- description: Safe shell-command workflow. Use whenever a task may execute shell commands, especially to prefer read-only commands and avoid destructive actions without confirmation.
4
- ---
5
-
6
- # safe-bash
7
-
8
- Use this skill whenever a task may execute shell commands.
9
-
10
- ## Rules
11
-
12
- - Prefer read-only commands first: `pwd`, `ls`, `find`, `rg`, `git status`, package-manager dry runs.
13
- - Before mutating commands, explain the target path and expected effect.
14
- - Never run destructive cleanup (`rm -rf`, `git clean`, force delete, prune, reset hard) without explicit confirmation.
15
- - Avoid shell-specific assumptions when a cross-platform Node/Pi API exists.
16
- - On Windows, prefer argv-based process execution and avoid `cmd /c start` or `/bin/bash` unless explicitly required.
17
- - Capture verification output and summarize exit status.
18
-
19
- ## Reporting
20
-
21
- Mention commands run and whether they were read-only or mutating.
1
+ ---
2
+ name: safe-bash
3
+ description: Safe shell-command workflow. Use whenever a task may execute shell commands, especially to prefer read-only commands and avoid destructive actions without confirmation.
4
+ ---
5
+
6
+ # safe-bash
7
+
8
+ Use this skill whenever a task may execute shell commands. This skill covers cross-platform shell safety, destructive action confirmation, and Windows-specific patterns.
9
+
10
+ ## Classification
11
+
12
+ Every shell command is either **read-only** or **mutating**. Always report which it is.
13
+
14
+ ### Read-only commands (safe)
15
+ ```bash
16
+ pwd # print working directory
17
+ ls -la # list files
18
+ find . -name "*.ts" | head -20 # search without writing
19
+ rg "pattern" --type ts | head -20 # ripgrep without write
20
+ git status # inspect state
21
+ git log --oneline -5 # recent commits
22
+ git diff --staged # staged changes
23
+ npm view <pkg> # query registry (no install)
24
+ npx tsc --noEmit # typecheck (no write)
25
+ node -e "console.log(process.version)" # inspect version
26
+ ```
27
+
28
+ ### Mutating commands (require confirmation)
29
+ ```bash
30
+ npm install # changes node_modules
31
+ git commit # creates new commit
32
+ git push # publishes to remote
33
+ rm -rf <path> # DESTRUCTIVE
34
+ git reset --hard # rewrites history
35
+ npm publish # publishes to registry
36
+ ```
37
+
38
+ ## Cross-Platform Considerations
39
+
40
+ ### Windows vs Unix paths
41
+
42
+ ```typescript
43
+ // ❌ Never hardcode paths with forward slashes on Windows
44
+ const path = "D:/project/src/file.ts";
45
+
46
+ // ✅ Use path.join() or Node's path module
47
+ import * as path from "path";
48
+ const filePath = path.join(cwd, "src", "file.ts");
49
+
50
+ // ✅ Or use forward slashes that work on both
51
+ const filePath = "src/file.ts"; // relative paths work on both
52
+ ```
53
+
54
+ ### argv vs cmd /c
55
+
56
+ ```typescript
57
+ // ✅ Preferred on Windows: argv-based execution (no shell)
58
+ import { spawn } from "child_process";
59
+ spawn("node", ["--version"], { stdio: "pipe" });
60
+
61
+ // ✅ If shell needed: use cmd /c explicitly
62
+ spawn("cmd", ["/c", "dir /b"], { stdio: "pipe" });
63
+
64
+ // ❌ Don't use cmd /c with complex commands as single string
65
+ spawn("cmd", ["/c", "node --version && npm test"], { stdio: "pipe" });
66
+ ```
67
+
68
+ ### Package manager detection
69
+
70
+ ```typescript
71
+ // Detect npm vs pnpm vs yarn
72
+ function detectPackageManager(cwd: string): "npm" | "pnpm" | "yarn" | "unknown" {
73
+ if (fs.existsSync(path.join(cwd, "pnpm-lock.yaml"))) return "pnpm";
74
+ if (fs.existsSync(path.join(cwd, "yarn.lock"))) return "yarn";
75
+ return "npm";
76
+ }
77
+ ```
78
+
79
+ ## Heredoc and Quoting Gotchas
80
+
81
+ ### Quoting variables in commands
82
+
83
+ ```bash
84
+ # ❌ Unsafe: variable expansion without quoting
85
+ node -e "console.log('$PATH')" # breaks on spaces
86
+
87
+ # ✅ Safe: escape single quotes in the string
88
+ node -e "console.log(process.env.PATH)" # use env, not shell var
89
+
90
+ # ✅ For file paths with spaces
91
+ ls "D:/my project/src"
92
+ ```
93
+
94
+ ### Heredoc in scripts
95
+
96
+ ```bash
97
+ # ❌ Heredoc inside double quotes expands variables
98
+ cat << EOF
99
+ HOME is $HOME
100
+ EOF
101
+
102
+ # ✅ Use single quotes to prevent expansion
103
+ cat << 'EOF'
104
+ HOME is $HOME
105
+ EOF
106
+ ```
107
+
108
+ ## Timeout and Background Execution
109
+
110
+ ### Timeout long-running commands
111
+
112
+ ```bash
113
+ # Linux/macOS: use timeout command
114
+ timeout 30 npm test # kill after 30 seconds
115
+
116
+ # Node.js: use AbortSignal
117
+ const controller = new AbortController();
118
+ setTimeout(() => controller.abort(), 30_000);
119
+ spawn("npm", ["test"], { signal: controller.signal });
120
+
121
+ # Windows: use /wait flag
122
+ start /wait cmd /c "npm test"
123
+ ```
124
+
125
+ ### Background vs foreground
126
+
127
+ ```bash
128
+ # Background: run and forget (no output capture)
129
+ npm test &
130
+
131
+ # Foreground with timeout
132
+ timeout 60 npm test || echo "Timed out or failed"
133
+ ```
134
+
135
+ ## Signal Handling
136
+
137
+ ### SIGTERM vs SIGKILL
138
+
139
+ | Signal | Effect | Use case |
140
+ |---|---|---|
141
+ | SIGTERM (15) | Graceful termination request | Normal shutdown |
142
+ | SIGKILL (9) | Immediate forced termination | Unresponsive process |
143
+ | SIGINT (2) | Interrupt (Ctrl+C) | User cancel |
144
+
145
+ ```bash
146
+ # Graceful: request termination
147
+ kill -15 <pid> # or: kill <pid>
148
+
149
+ # Force: immediate termination
150
+ kill -9 <pid> # or: kill -SIGKILL <pid>
151
+
152
+ # On Windows (cmd):
153
+ taskkill /pid <pid> /t /f # /t=tree, /f=force
154
+ ```
155
+
156
+ ### Child process inheritance
157
+
158
+ When spawning subprocesses, child processes inherit the parent's signal handlers. Use `signal: controller.signal` in Node.js to give the child its own abort signal.
159
+
160
+ ## Sudo and Interactive Prompts
161
+
162
+ ### Detecting interactive prompts
163
+
164
+ ```bash
165
+ # Check if stdin is a terminal
166
+ [ -t 0 ] && echo "Interactive" || echo "Non-interactive"
167
+ ```
168
+
169
+ ### Avoiding sudo prompts in scripts
170
+
171
+ ```bash
172
+ # ❌ This will hang waiting for password
173
+ npm install -g typescript
174
+
175
+ # ✅ Use expect or non-interactive mode
176
+ sudo npm install -g typescript 2>/dev/null # ignores prompt
177
+ NPM_CONFIG_INTERACTIVE=false npm install -g typescript
178
+ ```
179
+
180
+ ## Error Trapping
181
+
182
+ ### set -e and set -o pipefail
183
+
184
+ ```bash
185
+ #!/bin/bash
186
+ set -e # Exit immediately on error
187
+ set -o pipefail # Pipeline fails if any command fails
188
+
189
+ # Good for CI/CD scripts
190
+ npm test
191
+ ```
192
+
193
+ ### Capture and handle errors
194
+
195
+ ```bash
196
+ # Capture exit code
197
+ npm test || {
198
+ echo "Tests failed with exit code $?"
199
+ exit 1
200
+ }
201
+
202
+ # Check for command existence
203
+ command -v npm >/dev/null 2>&1 || { echo "npm not found"; exit 1; }
204
+ ```
205
+
206
+ ## ANSI Color Code Stripping
207
+
208
+ For log parsing, strip ANSI escape codes:
209
+
210
+ ```typescript
211
+ // Strip ANSI color codes from output
212
+ function stripAnsi(text: string): string {
213
+ return text.replace(/\x1B\[[0-9;]*[mK]/g, "");
214
+ }
215
+
216
+ // Usage
217
+ const output = stripAnsi(child.stdout);
218
+ const hasFailure = output.includes("FAIL");
219
+ ```
220
+
221
+ Or via shell:
222
+ ```bash
223
+ # Strip ANSI codes using sed
224
+ npm test 2>&1 | sed 's/\x1B\[[0-9;]*[mK]//g'
225
+ ```
226
+
227
+ ## Node.js vs Binary Detection
228
+
229
+ ```typescript
230
+ // Detect node executable
231
+ import { execSync } from "child_process";
232
+ function findNode(): string {
233
+ // Try common paths
234
+ for (const candidate of [
235
+ process.execPath,
236
+ "node",
237
+ "C:\\Program Files\\nodejs\\node.exe",
238
+ "/usr/local/bin/node",
239
+ ]) {
240
+ try {
241
+ execSync(`"${candidate}" --version`, { stdio: "ignore" });
242
+ return candidate;
243
+ } catch { /* continue */ }
244
+ }
245
+ return "node"; // fallback
246
+ }
247
+ ```
248
+
249
+ ## Destructive Action Confirmation
250
+
251
+ Never execute destructive commands without explicit confirmation:
252
+
253
+ | Command | Risk | Confirmation needed |
254
+ |---|---|---|
255
+ | `rm -rf <path>` | Permanent data loss | "Type the path to confirm" |
256
+ | `git reset --hard` | Undo all changes | "Confirm with: YES" |
257
+ | `git clean -fd` | Remove untracked files | "Confirm with: YES" |
258
+ | `npm publish` | Public package | "Confirm version X.Y.Z" |
259
+
260
+ **Confirmation pattern:**
261
+ ```bash
262
+ # Require user to type the exact path
263
+ read -p "Type the directory path to confirm deletion: " CONFIRM
264
+ if [ "$CONFIRM" = "$TARGET_PATH" ]; then
265
+ rm -rf "$TARGET_PATH"
266
+ else
267
+ echo "Aborted: paths do not match"
268
+ fi
269
+ ```
270
+
271
+ ## Anti-patterns
272
+
273
+ - **`rm -rf` without path validation**: Always double-check the path before rm -rf
274
+ - **Blocking on subprocess**: Always use async spawn with timeout
275
+ - **Ignoring exit codes**: Check `$?` or capture `exitCode` from Node.js spawn
276
+ - **Leaking secrets in args**: Use environment variables instead of command-line args
277
+ - **Not handling Windows spaces**: Test on Windows before assuming paths work
278
+ - **Background process zombie**: Always handle process exit or store the pid for cleanup
279
+
280
+ ---
281
+
282
+ ## Source patterns
283
+
284
+ - `src/utils/resolve-shell.ts` — cross-platform shell detection
285
+ - `src/runtime/child-pi.ts` — spawn, killProcessPid, signal handling
286
+ - `src/worktree/worktree-manager.ts` — git commands via execFileSync
287
+ - `src/config/defaults.ts` — platform detection
288
+
289
+ ---
290
+
291
+ ## Verification
292
+
293
+ ```bash
294
+ cd pi-crew
295
+
296
+ # Check exit code handling
297
+ node -e "const {spawnSync}=require('child_process'); console.log(spawnSync('false').status)"
298
+
299
+ # Test ANSI stripping
300
+ node -e "console.log('\x1B[32mgreen\x1B[0m'.replace(/\x1B\[[0-9;]*[mK]/g,''))"
301
+
302
+ # Verify cross-platform path
303
+ node -e "const p=require('path'); console.log(p.join('D:\\\\','project','src'))"
304
+
305
+ # TypeScript
306
+ npx tsc --noEmit
307
+ ```
@@ -23,7 +23,7 @@ Before any completion claim:
23
23
 
24
24
  | Claim | Requires | Not sufficient |
25
25
  |---|---|---|
26
- | Tests pass | Fresh test output with zero failures | Prior run, should pass |
26
+ | Tests pass | Fresh test output with zero failures | Prior run, "should pass" |
27
27
  | Typecheck passes | Typecheck command exit 0 | Lint or targeted tests only |
28
28
  | Bug fixed | Original symptom/regression test passes | Code changed |
29
29
  | Requirements met | Checklist against request/plan | Generic test success |
@@ -52,6 +52,15 @@ Include:
52
52
  - skipped checks and why;
53
53
  - risks and rollback notes.
54
54
 
55
+ ## Required Final Evidence
56
+
57
+ Before finalizing any work, report:
58
+
59
+ - **changed files**: list of files modified (or `none` for read-only work)
60
+ - **tests/checks run**: command and pass/fail result for each
61
+ - **artifacts**: run IDs, log paths, or state files inspected
62
+ - **risks and rollback notes**: any known risks, how to undo the changes
63
+
55
64
  ## Red Flags
56
65
 
57
- Stop before saying done if you are using words like should”, probably”, looks”, seems”, I think”, or if you are trusting an agent report without checking evidence.
66
+ Stop before saying done if you are using words like "should", "probably", "looks", "seems", "I think", or if you are trusting an agent report without checking evidence.