pi-crew 0.2.2 → 0.2.4

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 (354) hide show
  1. package/AGENTS.md +57 -32
  2. package/CHANGELOG.md +466 -413
  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 -0
  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-plan-2026-05-12.md +463 -0
  25. package/docs/followup-review-2026-05-12.md +297 -0
  26. package/docs/followup-review-round3-2026-05-12.md +342 -0
  27. package/docs/followup-review-round4-2026-05-13.md +107 -0
  28. package/docs/implementation-plan-top3.md +333 -0
  29. package/docs/live-mailbox-runtime.md +36 -36
  30. package/docs/next-upgrade-roadmap.md +808 -808
  31. package/docs/oh-my-pi-research.md +509 -0
  32. package/docs/perf/baseline-2026-05.md +113 -0
  33. package/docs/perf/final-report-2026-05.md +206 -0
  34. package/docs/perf/sprint-1-report.md +71 -0
  35. package/docs/perf/sprint-2-report.md +81 -0
  36. package/docs/perf/sprint-2.5-report.md +53 -0
  37. package/docs/perf/sprint-3-report.md +36 -0
  38. package/docs/perf/sprint-4-report.md +47 -0
  39. package/docs/perf/sprint-5-report.md +51 -0
  40. package/docs/perf/sprint-6-report.md +94 -0
  41. package/docs/perf/sprint-7-report.md +74 -0
  42. package/docs/perf/upgrade-plan-2026-05.md +147 -0
  43. package/docs/pi-subagents3-deep-analysis.md +508 -0
  44. package/docs/product/README.md +31 -0
  45. package/docs/product/platform.md +27 -0
  46. package/docs/product/runtime-safety.md +37 -0
  47. package/docs/product/team-run.md +39 -0
  48. package/docs/product/team-tool.md +37 -0
  49. package/docs/publishing.md +65 -65
  50. package/docs/resource-formats.md +134 -134
  51. package/docs/runtime-analysis-child-vs-live.md +171 -0
  52. package/docs/runtime-flow.md +148 -148
  53. package/docs/runtime-migration-in-process-analysis.md +250 -0
  54. package/docs/stories/README.md +30 -0
  55. package/docs/stories/backlog.md +36 -0
  56. package/docs/templates/decision.md +27 -0
  57. package/docs/templates/story.md +44 -0
  58. package/docs/templates/validation-report.md +32 -0
  59. package/docs/usage.md +238 -238
  60. package/index.ts +7 -6
  61. package/install.mjs +65 -65
  62. package/package.json +107 -99
  63. package/schema.json +222 -222
  64. package/skills/child-pi-spawning/SKILL.md +213 -0
  65. package/skills/context-artifact-hygiene/SKILL.md +32 -0
  66. package/skills/event-log-tracing/SKILL.md +299 -0
  67. package/skills/git-master/SKILL.md +225 -24
  68. package/skills/live-agent-lifecycle/SKILL.md +192 -0
  69. package/skills/mailbox-interactive/SKILL.md +300 -19
  70. package/skills/model-routing-context/SKILL.md +94 -0
  71. package/skills/multi-perspective-review/SKILL.md +88 -0
  72. package/skills/read-only-explorer/SKILL.md +250 -26
  73. package/skills/safe-bash/SKILL.md +307 -21
  74. package/skills/verification-before-done/SKILL.md +11 -2
  75. package/skills/widget-rendering/SKILL.md +258 -0
  76. package/skills/workspace-isolation/SKILL.md +202 -0
  77. package/skills/worktree-isolation/SKILL.md +202 -18
  78. package/src/adapters/claude-adapter.ts +25 -25
  79. package/src/adapters/codex-adapter.ts +21 -21
  80. package/src/adapters/cursor-adapter.ts +17 -17
  81. package/src/adapters/export-util.ts +137 -137
  82. package/src/adapters/index.ts +15 -15
  83. package/src/adapters/registry.ts +18 -18
  84. package/src/adapters/types.ts +23 -23
  85. package/src/agents/agent-config.ts +38 -38
  86. package/src/agents/agent-serializer.ts +38 -38
  87. package/src/agents/discover-agents.ts +121 -118
  88. package/src/config/config.ts +740 -858
  89. package/src/config/defaults.ts +96 -96
  90. package/src/config/drift-detector.ts +211 -211
  91. package/src/config/markers.ts +327 -327
  92. package/src/config/resilient-parser.ts +109 -108
  93. package/src/config/suggestions.ts +74 -74
  94. package/src/config/types.ts +199 -0
  95. package/src/extension/async-notifier.ts +123 -89
  96. package/src/extension/autonomous-policy.ts +169 -169
  97. package/src/extension/cross-extension-rpc.ts +104 -103
  98. package/src/extension/help.ts +47 -47
  99. package/src/extension/import-index.ts +69 -69
  100. package/src/extension/management.ts +395 -382
  101. package/src/extension/notification-router.ts +116 -116
  102. package/src/extension/notification-sink.ts +51 -51
  103. package/src/extension/project-init.ts +168 -168
  104. package/src/extension/register.ts +859 -668
  105. package/src/extension/registration/artifact-cleanup.ts +15 -15
  106. package/src/extension/registration/command-utils.ts +54 -54
  107. package/src/extension/registration/commands.ts +559 -452
  108. package/src/extension/registration/compaction-guard.ts +125 -125
  109. package/src/extension/registration/subagent-helpers.ts +102 -102
  110. package/src/extension/registration/subagent-tools.ts +220 -158
  111. package/src/extension/registration/team-tool.ts +159 -98
  112. package/src/extension/registration/viewers.ts +29 -0
  113. package/src/extension/result-watcher.ts +128 -128
  114. package/src/extension/run-bundle-schema.ts +89 -89
  115. package/src/extension/run-export.ts +73 -73
  116. package/src/extension/run-import.ts +84 -84
  117. package/src/extension/run-index.ts +94 -94
  118. package/src/extension/run-maintenance.ts +142 -142
  119. package/src/extension/session-summary.ts +8 -8
  120. package/src/extension/team-manager-command.ts +96 -95
  121. package/src/extension/team-recommendation.ts +188 -188
  122. package/src/extension/team-tool/api.ts +5 -2
  123. package/src/extension/team-tool/cancel.ts +224 -209
  124. package/src/extension/team-tool/config-patch.ts +36 -36
  125. package/src/extension/team-tool/context.ts +60 -60
  126. package/src/extension/team-tool/doctor.ts +242 -242
  127. package/src/extension/team-tool/handle-settings.ts +421 -195
  128. package/src/extension/team-tool/inspect.ts +41 -41
  129. package/src/extension/team-tool/lifecycle-actions.ts +139 -139
  130. package/src/extension/team-tool/parallel-dispatch.ts +156 -156
  131. package/src/extension/team-tool/plan.ts +19 -19
  132. package/src/extension/team-tool/respond.ts +112 -111
  133. package/src/extension/team-tool/run.ts +246 -228
  134. package/src/extension/team-tool/status.ts +110 -110
  135. package/src/extension/team-tool-types.ts +13 -13
  136. package/src/extension/team-tool.ts +16 -4
  137. package/src/extension/tool-result.ts +16 -16
  138. package/src/extension/validate-resources.ts +77 -77
  139. package/src/hooks/registry.ts +61 -61
  140. package/src/hooks/types.ts +40 -40
  141. package/src/i18n.ts +184 -184
  142. package/src/observability/correlation.ts +35 -35
  143. package/src/observability/event-to-metric.ts +68 -68
  144. package/src/observability/exporters/adapter.ts +30 -30
  145. package/src/observability/exporters/otlp-exporter.ts +106 -92
  146. package/src/observability/exporters/prometheus-exporter.ts +54 -54
  147. package/src/observability/metric-registry.ts +87 -87
  148. package/src/observability/metric-retention.ts +54 -54
  149. package/src/observability/metric-sink.ts +81 -56
  150. package/src/observability/metrics-primitives.ts +167 -167
  151. package/src/prompt/prompt-runtime.ts +72 -72
  152. package/src/runtime/adaptive-plan.ts +338 -0
  153. package/src/runtime/agent-control.ts +169 -169
  154. package/src/runtime/agent-memory.ts +72 -72
  155. package/src/runtime/agent-observability.ts +114 -114
  156. package/src/runtime/async-marker.ts +26 -26
  157. package/src/runtime/async-runner.ts +153 -79
  158. package/src/runtime/attention-events.ts +28 -28
  159. package/src/runtime/auto-resume.ts +100 -100
  160. package/src/runtime/background-runner.ts +122 -88
  161. package/src/runtime/cancellation.ts +61 -61
  162. package/src/runtime/capability-inventory.ts +116 -116
  163. package/src/runtime/child-pi-pool.ts +68 -0
  164. package/src/runtime/child-pi.ts +541 -463
  165. package/src/runtime/code-summary.ts +247 -247
  166. package/src/runtime/compaction-summary.ts +271 -271
  167. package/src/runtime/concurrency.ts +58 -58
  168. package/src/runtime/crash-recovery.ts +317 -301
  169. package/src/runtime/crew-agent-records.ts +379 -281
  170. package/src/runtime/crew-agent-runtime.ts +60 -60
  171. package/src/runtime/cross-extension-rpc.ts +72 -0
  172. package/src/runtime/custom-tools/irc-tool.ts +201 -201
  173. package/src/runtime/custom-tools/submit-result-tool.ts +90 -90
  174. package/src/runtime/deadletter.ts +47 -47
  175. package/src/runtime/delivery-coordinator.ts +176 -176
  176. package/src/runtime/delta-conflict.ts +360 -360
  177. package/src/runtime/diagnostic-export.ts +102 -102
  178. package/src/runtime/direct-run.ts +35 -35
  179. package/src/runtime/effectiveness.ts +82 -81
  180. package/src/runtime/errors/crew-errors.ts +166 -0
  181. package/src/runtime/event-stream-bridge.ts +92 -92
  182. package/src/runtime/foreground-control.ts +82 -82
  183. package/src/runtime/green-contract.ts +46 -46
  184. package/src/runtime/group-join.ts +234 -106
  185. package/src/runtime/heartbeat-watcher.ts +145 -124
  186. package/src/runtime/iteration-hooks.ts +267 -264
  187. package/src/runtime/live-agent-control.ts +88 -88
  188. package/src/runtime/live-agent-manager.ts +377 -179
  189. package/src/runtime/live-control-realtime.ts +36 -36
  190. package/src/runtime/live-session-runtime.ts +676 -599
  191. package/src/runtime/loop-gates.ts +129 -129
  192. package/src/runtime/manifest-cache.ts +263 -263
  193. package/src/runtime/mcp-proxy.ts +113 -113
  194. package/src/runtime/metric-parser.ts +40 -40
  195. package/src/runtime/model-fallback.ts +282 -274
  196. package/src/runtime/model-resolver.ts +118 -0
  197. package/src/runtime/output-validator.ts +187 -187
  198. package/src/runtime/overflow-recovery.ts +175 -175
  199. package/src/runtime/parallel-research.ts +44 -44
  200. package/src/runtime/parallel-utils.ts +156 -156
  201. package/src/runtime/parent-guard.ts +80 -80
  202. package/src/runtime/phase-progress.ts +217 -217
  203. package/src/runtime/pi-args.ts +165 -165
  204. package/src/runtime/pi-json-output.ts +111 -111
  205. package/src/runtime/pi-spawn.ts +167 -167
  206. package/src/runtime/policy-engine.ts +79 -79
  207. package/src/runtime/post-checks.ts +125 -122
  208. package/src/runtime/post-exit-stdio-guard.ts +86 -86
  209. package/src/runtime/process-status.ts +97 -73
  210. package/src/runtime/progress-event-coalescer.ts +43 -43
  211. package/src/runtime/recovery-recipes.ts +74 -74
  212. package/src/runtime/retry-executor.ts +81 -81
  213. package/src/runtime/role-permission.ts +39 -39
  214. package/src/runtime/run-tracker.ts +99 -0
  215. package/src/runtime/runtime-policy.ts +21 -0
  216. package/src/runtime/runtime-resolver.ts +94 -90
  217. package/src/runtime/scheduler.ts +294 -0
  218. package/src/runtime/semaphore.ts +131 -131
  219. package/src/runtime/sensitive-paths.ts +92 -92
  220. package/src/runtime/session-usage.ts +79 -79
  221. package/src/runtime/settings-store.ts +103 -0
  222. package/src/runtime/sidechain-output.ts +29 -29
  223. package/src/runtime/skill-instructions.ts +222 -222
  224. package/src/runtime/stale-reconciler.ts +198 -189
  225. package/src/runtime/streaming-output.ts +47 -0
  226. package/src/runtime/subagent-manager.ts +404 -395
  227. package/src/runtime/subprocess-tool-registry.ts +67 -67
  228. package/src/runtime/task-display.ts +38 -38
  229. package/src/runtime/task-graph-scheduler.ts +122 -122
  230. package/src/runtime/task-graph.ts +207 -207
  231. package/src/runtime/task-output-context.ts +177 -177
  232. package/src/runtime/task-packet.ts +93 -93
  233. package/src/runtime/task-quality.ts +207 -207
  234. package/src/runtime/task-runner/capabilities.ts +78 -78
  235. package/src/runtime/task-runner/live-executor.ts +131 -113
  236. package/src/runtime/task-runner/progress.ts +119 -119
  237. package/src/runtime/task-runner/prompt-builder.ts +139 -139
  238. package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
  239. package/src/runtime/task-runner/result-utils.ts +14 -14
  240. package/src/runtime/task-runner/run-projection.ts +103 -103
  241. package/src/runtime/task-runner/state-helpers.ts +22 -22
  242. package/src/runtime/task-runner.ts +469 -458
  243. package/src/runtime/team-runner.ts +693 -945
  244. package/src/runtime/usage-tracker.ts +71 -0
  245. package/src/runtime/worker-heartbeat.ts +21 -21
  246. package/src/runtime/worker-startup.ts +57 -57
  247. package/src/runtime/workflow-state.ts +187 -187
  248. package/src/runtime/yield-handler.ts +190 -189
  249. package/src/schema/config-schema.ts +172 -168
  250. package/src/schema/team-tool-schema.ts +126 -125
  251. package/src/schema/validation-types.ts +151 -148
  252. package/src/skills/discover-skills.ts +67 -67
  253. package/src/skills/skill-templates.ts +374 -374
  254. package/src/state/active-run-registry.ts +227 -191
  255. package/src/state/artifact-store.ts +130 -129
  256. package/src/state/atomic-write.ts +262 -178
  257. package/src/state/blob-store.ts +116 -116
  258. package/src/state/contracts.ts +111 -111
  259. package/src/state/event-log-rotation.ts +161 -158
  260. package/src/state/event-log.ts +383 -240
  261. package/src/state/event-reconstructor.ts +217 -217
  262. package/src/state/jsonl-writer.ts +82 -82
  263. package/src/state/locks.ts +146 -148
  264. package/src/state/mailbox.ts +446 -405
  265. package/src/state/state-store.ts +364 -351
  266. package/src/state/task-claims.ts +44 -44
  267. package/src/state/types.ts +285 -285
  268. package/src/state/usage.ts +29 -29
  269. package/src/subagents/async-entry.ts +1 -1
  270. package/src/subagents/index.ts +3 -3
  271. package/src/subagents/live/control.ts +1 -1
  272. package/src/subagents/live/manager.ts +1 -1
  273. package/src/subagents/live/realtime.ts +1 -1
  274. package/src/subagents/live/session-runtime.ts +1 -1
  275. package/src/subagents/manager.ts +1 -1
  276. package/src/subagents/spawn.ts +1 -1
  277. package/src/teams/discover-teams.ts +116 -116
  278. package/src/teams/team-config.ts +27 -27
  279. package/src/teams/team-serializer.ts +38 -38
  280. package/src/types/diff.d.ts +18 -18
  281. package/src/ui/agent-management-overlay.ts +144 -144
  282. package/src/ui/crew-widget.ts +487 -370
  283. package/src/ui/dashboard-panes/agents-pane.ts +109 -28
  284. package/src/ui/dashboard-panes/cancellation-pane.ts +42 -42
  285. package/src/ui/dashboard-panes/capability-pane.ts +59 -59
  286. package/src/ui/dashboard-panes/health-pane.ts +30 -30
  287. package/src/ui/dashboard-panes/mailbox-pane.ts +35 -35
  288. package/src/ui/dashboard-panes/progress-pane.ts +30 -30
  289. package/src/ui/dashboard-panes/transcript-pane.ts +10 -10
  290. package/src/ui/heartbeat-aggregator.ts +63 -63
  291. package/src/ui/keybinding-map.ts +97 -94
  292. package/src/ui/live-conversation-overlay.ts +152 -0
  293. package/src/ui/live-run-sidebar.ts +180 -180
  294. package/src/ui/mascot.ts +442 -442
  295. package/src/ui/overlays/agent-picker-overlay.ts +57 -57
  296. package/src/ui/overlays/confirm-overlay.ts +58 -58
  297. package/src/ui/overlays/mailbox-compose-overlay.ts +144 -144
  298. package/src/ui/overlays/mailbox-compose-preview.ts +63 -63
  299. package/src/ui/overlays/mailbox-detail-overlay.ts +122 -122
  300. package/src/ui/pi-ui-compat.ts +57 -57
  301. package/src/ui/powerbar-publisher.ts +221 -197
  302. package/src/ui/render-scheduler.ts +216 -143
  303. package/src/ui/run-action-dispatcher.ts +118 -117
  304. package/src/ui/run-dashboard.ts +526 -464
  305. package/src/ui/run-event-bus.ts +208 -208
  306. package/src/ui/run-snapshot-cache.ts +826 -777
  307. package/src/ui/settings-overlay.ts +721 -0
  308. package/src/ui/snapshot-types.ts +86 -70
  309. package/src/ui/theme-adapter.ts +190 -190
  310. package/src/ui/tool-progress-formatter.ts +89 -0
  311. package/src/ui/transcript-cache.ts +94 -94
  312. package/src/ui/transcript-viewer.ts +335 -335
  313. package/src/utils/conflict-detect.ts +662 -0
  314. package/src/utils/env-filter.ts +30 -0
  315. package/src/utils/file-coalescer.ts +86 -86
  316. package/src/utils/frontmatter.ts +68 -68
  317. package/src/utils/fs-watch.ts +88 -31
  318. package/src/utils/gh-protocol.ts +479 -0
  319. package/src/utils/ids.ts +17 -17
  320. package/src/utils/incremental-reader.ts +104 -104
  321. package/src/utils/internal-error.ts +6 -6
  322. package/src/utils/names.ts +27 -27
  323. package/src/utils/paths.ts +102 -63
  324. package/src/utils/redaction.ts +44 -44
  325. package/src/utils/resolve-shell.ts +34 -0
  326. package/src/utils/safe-paths.ts +47 -47
  327. package/src/utils/scan-cache.ts +136 -136
  328. package/src/utils/sleep.ts +2 -1
  329. package/src/utils/sse-parser.ts +134 -134
  330. package/src/utils/task-name-generator.ts +337 -337
  331. package/src/utils/timings.ts +33 -33
  332. package/src/utils/visual.ts +243 -198
  333. package/src/workflows/discover-workflows.ts +139 -139
  334. package/src/workflows/validate-workflow.ts +40 -40
  335. package/src/workflows/workflow-config.ts +26 -26
  336. package/src/workflows/workflow-serializer.ts +32 -32
  337. package/src/worktree/branch-freshness.ts +45 -45
  338. package/src/worktree/cleanup.ts +75 -72
  339. package/src/worktree/worktree-manager.ts +188 -146
  340. package/teams/default.team.md +12 -12
  341. package/teams/fast-fix.team.md +11 -11
  342. package/teams/implementation.team.md +18 -18
  343. package/teams/parallel-research.team.md +14 -14
  344. package/teams/research.team.md +11 -11
  345. package/teams/review.team.md +12 -12
  346. package/tsconfig.json +19 -19
  347. package/workflows/default.workflow.md +30 -30
  348. package/workflows/fast-fix.workflow.md +23 -23
  349. package/workflows/implementation.workflow.md +43 -43
  350. package/workflows/parallel-research.workflow.md +46 -46
  351. package/workflows/research.workflow.md +22 -22
  352. package/workflows/review.workflow.md +30 -30
  353. package/skills/task-packet/SKILL.md +0 -28
  354. 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.