@emiliosp/pi-maestro 0.7.3 → 0.8.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 (412) hide show
  1. package/ADR.md +58 -0
  2. package/README.md +1 -0
  3. package/ROADMAP.md +113 -20
  4. package/docs/glossary.md +1 -0
  5. package/docs/workflow.md +14 -1
  6. package/node_modules/pi-subagents/CHANGELOG.md +140 -0
  7. package/node_modules/pi-subagents/README.md +1 -1
  8. package/node_modules/pi-subagents/agents/evidence-auditor.md +1 -0
  9. package/node_modules/pi-subagents/agents/oracle.md +9 -19
  10. package/node_modules/pi-subagents/agents/researcher.md +0 -3
  11. package/node_modules/pi-subagents/agents/reviewer.md +18 -61
  12. package/node_modules/pi-subagents/agents/scout.md +1 -4
  13. package/node_modules/pi-subagents/agents/worker.md +8 -25
  14. package/node_modules/pi-subagents/docs/agents.md +71 -4
  15. package/node_modules/pi-subagents/docs/configuration.md +75 -10
  16. package/node_modules/pi-subagents/docs/extension-api.md +40 -11
  17. package/node_modules/pi-subagents/docs/missions.md +24 -17
  18. package/node_modules/pi-subagents/docs/models.md +1 -1
  19. package/node_modules/pi-subagents/docs/observability.md +12 -5
  20. package/node_modules/pi-subagents/docs/tool-reference.md +103 -85
  21. package/node_modules/pi-subagents/docs/watchdog.md +8 -6
  22. package/node_modules/pi-subagents/docs/workflows.md +17 -8
  23. package/node_modules/pi-subagents/index.d.ts.map +1 -1
  24. package/node_modules/pi-subagents/index.js +5 -0
  25. package/node_modules/pi-subagents/index.js.map +1 -1
  26. package/node_modules/pi-subagents/package.json +2 -1
  27. package/node_modules/pi-subagents/prompts/council.md +1 -1
  28. package/node_modules/pi-subagents/skills/pi-subagents/SKILL.md +2 -2
  29. package/node_modules/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +1 -1
  30. package/node_modules/pi-subagents/skills/pi-subagents/references/execution-controls.md +16 -16
  31. package/node_modules/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +16 -12
  32. package/node_modules/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +1 -1
  33. package/node_modules/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +3 -3
  34. package/node_modules/pi-subagents/src/agents/advertised-agent-prompt.d.ts +5 -1
  35. package/node_modules/pi-subagents/src/agents/advertised-agent-prompt.d.ts.map +1 -1
  36. package/node_modules/pi-subagents/src/agents/advertised-agent-prompt.js +8 -2
  37. package/node_modules/pi-subagents/src/agents/advertised-agent-prompt.js.map +1 -1
  38. package/node_modules/pi-subagents/src/agents/agent-management.d.ts.map +1 -1
  39. package/node_modules/pi-subagents/src/agents/agent-management.js +5 -0
  40. package/node_modules/pi-subagents/src/agents/agent-management.js.map +1 -1
  41. package/node_modules/pi-subagents/src/agents/agent-scope.d.ts +1 -0
  42. package/node_modules/pi-subagents/src/agents/agent-scope.d.ts.map +1 -1
  43. package/node_modules/pi-subagents/src/agents/agent-scope.js +3 -0
  44. package/node_modules/pi-subagents/src/agents/agent-scope.js.map +1 -1
  45. package/node_modules/pi-subagents/src/agents/agent-serializer.d.ts.map +1 -1
  46. package/node_modules/pi-subagents/src/agents/agent-serializer.js +3 -0
  47. package/node_modules/pi-subagents/src/agents/agent-serializer.js.map +1 -1
  48. package/node_modules/pi-subagents/src/agents/agents.d.ts +14 -2
  49. package/node_modules/pi-subagents/src/agents/agents.d.ts.map +1 -1
  50. package/node_modules/pi-subagents/src/agents/agents.js +94 -36
  51. package/node_modules/pi-subagents/src/agents/agents.js.map +1 -1
  52. package/node_modules/pi-subagents/src/api/external-runs.d.ts.map +1 -1
  53. package/node_modules/pi-subagents/src/api/external-runs.js +5 -4
  54. package/node_modules/pi-subagents/src/api/external-runs.js.map +1 -1
  55. package/node_modules/pi-subagents/src/api/preflight.d.ts +2 -0
  56. package/node_modules/pi-subagents/src/api/preflight.d.ts.map +1 -1
  57. package/node_modules/pi-subagents/src/api/preflight.js +7 -3
  58. package/node_modules/pi-subagents/src/api/preflight.js.map +1 -1
  59. package/node_modules/pi-subagents/src/extension/active-runs-prompt.d.ts +8 -0
  60. package/node_modules/pi-subagents/src/extension/active-runs-prompt.d.ts.map +1 -0
  61. package/node_modules/pi-subagents/src/extension/active-runs-prompt.js +30 -0
  62. package/node_modules/pi-subagents/src/extension/active-runs-prompt.js.map +1 -0
  63. package/node_modules/pi-subagents/src/extension/config.d.ts.map +1 -1
  64. package/node_modules/pi-subagents/src/extension/config.js +29 -2
  65. package/node_modules/pi-subagents/src/extension/config.js.map +1 -1
  66. package/node_modules/pi-subagents/src/extension/control-notices.d.ts +0 -2
  67. package/node_modules/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
  68. package/node_modules/pi-subagents/src/extension/control-notices.js +1 -7
  69. package/node_modules/pi-subagents/src/extension/control-notices.js.map +1 -1
  70. package/node_modules/pi-subagents/src/extension/declaration-pinning.d.ts +19 -0
  71. package/node_modules/pi-subagents/src/extension/declaration-pinning.d.ts.map +1 -0
  72. package/node_modules/pi-subagents/src/extension/declaration-pinning.js +154 -0
  73. package/node_modules/pi-subagents/src/extension/declaration-pinning.js.map +1 -0
  74. package/node_modules/pi-subagents/src/extension/doctor.d.ts +3 -1
  75. package/node_modules/pi-subagents/src/extension/doctor.d.ts.map +1 -1
  76. package/node_modules/pi-subagents/src/extension/doctor.js +3 -9
  77. package/node_modules/pi-subagents/src/extension/doctor.js.map +1 -1
  78. package/node_modules/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
  79. package/node_modules/pi-subagents/src/extension/fanout-child.js +6 -8
  80. package/node_modules/pi-subagents/src/extension/fanout-child.js.map +1 -1
  81. package/node_modules/pi-subagents/src/extension/index.d.ts +1 -2
  82. package/node_modules/pi-subagents/src/extension/index.d.ts.map +1 -1
  83. package/node_modules/pi-subagents/src/extension/index.js +121 -127
  84. package/node_modules/pi-subagents/src/extension/index.js.map +1 -1
  85. package/node_modules/pi-subagents/src/extension/rpc.d.ts.map +1 -1
  86. package/node_modules/pi-subagents/src/extension/rpc.js +12 -6
  87. package/node_modules/pi-subagents/src/extension/rpc.js.map +1 -1
  88. package/node_modules/pi-subagents/src/extension/schemas.d.ts +137 -1
  89. package/node_modules/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  90. package/node_modules/pi-subagents/src/extension/schemas.js +22 -22
  91. package/node_modules/pi-subagents/src/extension/schemas.js.map +1 -1
  92. package/node_modules/pi-subagents/src/extension/subagent-guide.d.ts +1 -0
  93. package/node_modules/pi-subagents/src/extension/subagent-guide.d.ts.map +1 -1
  94. package/node_modules/pi-subagents/src/extension/subagent-guide.js +80 -6
  95. package/node_modules/pi-subagents/src/extension/subagent-guide.js.map +1 -1
  96. package/node_modules/pi-subagents/src/extension/subagent-options.d.ts +8 -0
  97. package/node_modules/pi-subagents/src/extension/subagent-options.d.ts.map +1 -0
  98. package/node_modules/pi-subagents/src/extension/subagent-options.js +52 -0
  99. package/node_modules/pi-subagents/src/extension/subagent-options.js.map +1 -0
  100. package/node_modules/pi-subagents/src/extension/tool-activation.d.ts.map +1 -1
  101. package/node_modules/pi-subagents/src/extension/tool-activation.js +7 -4
  102. package/node_modules/pi-subagents/src/extension/tool-activation.js.map +1 -1
  103. package/node_modules/pi-subagents/src/extension/tool-description.d.ts +4 -7
  104. package/node_modules/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  105. package/node_modules/pi-subagents/src/extension/tool-description.js +45 -59
  106. package/node_modules/pi-subagents/src/extension/tool-description.js.map +1 -1
  107. package/node_modules/pi-subagents/src/inspectors/actions.d.ts +2 -0
  108. package/node_modules/pi-subagents/src/inspectors/actions.d.ts.map +1 -1
  109. package/node_modules/pi-subagents/src/inspectors/actions.js +41 -13
  110. package/node_modules/pi-subagents/src/inspectors/actions.js.map +1 -1
  111. package/node_modules/pi-subagents/src/inspectors/plugins.d.ts.map +1 -1
  112. package/node_modules/pi-subagents/src/inspectors/plugins.js +3 -2
  113. package/node_modules/pi-subagents/src/inspectors/plugins.js.map +1 -1
  114. package/node_modules/pi-subagents/src/inspectors/tmux/actions.d.ts +26 -0
  115. package/node_modules/pi-subagents/src/inspectors/tmux/actions.d.ts.map +1 -0
  116. package/node_modules/pi-subagents/src/inspectors/tmux/actions.js +182 -0
  117. package/node_modules/pi-subagents/src/inspectors/tmux/actions.js.map +1 -0
  118. package/node_modules/pi-subagents/src/inspectors/tmux/client.d.ts +28 -0
  119. package/node_modules/pi-subagents/src/inspectors/tmux/client.d.ts.map +1 -0
  120. package/node_modules/pi-subagents/src/inspectors/tmux/client.js +65 -0
  121. package/node_modules/pi-subagents/src/inspectors/tmux/client.js.map +1 -0
  122. package/node_modules/pi-subagents/src/inspectors/tmux/plugin.d.ts +8 -0
  123. package/node_modules/pi-subagents/src/inspectors/tmux/plugin.d.ts.map +1 -0
  124. package/node_modules/pi-subagents/src/inspectors/tmux/plugin.js +15 -0
  125. package/node_modules/pi-subagents/src/inspectors/tmux/plugin.js.map +1 -0
  126. package/node_modules/pi-subagents/src/integrations/herdr-status.d.ts +0 -1
  127. package/node_modules/pi-subagents/src/integrations/herdr-status.d.ts.map +1 -1
  128. package/node_modules/pi-subagents/src/integrations/herdr-status.js +18 -52
  129. package/node_modules/pi-subagents/src/integrations/herdr-status.js.map +1 -1
  130. package/node_modules/pi-subagents/src/integrations/program-status.d.ts +31 -0
  131. package/node_modules/pi-subagents/src/integrations/program-status.d.ts.map +1 -0
  132. package/node_modules/pi-subagents/src/integrations/program-status.js +189 -0
  133. package/node_modules/pi-subagents/src/integrations/program-status.js.map +1 -0
  134. package/node_modules/pi-subagents/src/intercom/native-supervisor-channel.d.ts +17 -1
  135. package/node_modules/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  136. package/node_modules/pi-subagents/src/intercom/native-supervisor-channel.js +102 -9
  137. package/node_modules/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  138. package/node_modules/pi-subagents/src/intercom/result-intercom.js +1 -1
  139. package/node_modules/pi-subagents/src/intercom/result-intercom.js.map +1 -1
  140. package/node_modules/pi-subagents/src/intercom/supervisor-ui.d.ts +2 -12
  141. package/node_modules/pi-subagents/src/intercom/supervisor-ui.d.ts.map +1 -1
  142. package/node_modules/pi-subagents/src/intercom/supervisor-ui.js +2 -154
  143. package/node_modules/pi-subagents/src/intercom/supervisor-ui.js.map +1 -1
  144. package/node_modules/pi-subagents/src/missions/store.d.ts.map +1 -1
  145. package/node_modules/pi-subagents/src/missions/store.js +27 -5
  146. package/node_modules/pi-subagents/src/missions/store.js.map +1 -1
  147. package/node_modules/pi-subagents/src/runs/background/active-async-capacity.d.ts +2 -1
  148. package/node_modules/pi-subagents/src/runs/background/active-async-capacity.d.ts.map +1 -1
  149. package/node_modules/pi-subagents/src/runs/background/active-async-capacity.js +10 -6
  150. package/node_modules/pi-subagents/src/runs/background/active-async-capacity.js.map +1 -1
  151. package/node_modules/pi-subagents/src/runs/background/async-execution.d.ts +9 -1
  152. package/node_modules/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  153. package/node_modules/pi-subagents/src/runs/background/async-execution.js +253 -144
  154. package/node_modules/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  155. package/node_modules/pi-subagents/src/runs/background/async-job-tracker.d.ts +4 -1
  156. package/node_modules/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
  157. package/node_modules/pi-subagents/src/runs/background/async-job-tracker.js +3 -2
  158. package/node_modules/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
  159. package/node_modules/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
  160. package/node_modules/pi-subagents/src/runs/background/async-resume.js +9 -3
  161. package/node_modules/pi-subagents/src/runs/background/async-resume.js.map +1 -1
  162. package/node_modules/pi-subagents/src/runs/background/await-async-run.d.ts +8 -4
  163. package/node_modules/pi-subagents/src/runs/background/await-async-run.d.ts.map +1 -1
  164. package/node_modules/pi-subagents/src/runs/background/await-async-run.js +14 -8
  165. package/node_modules/pi-subagents/src/runs/background/await-async-run.js.map +1 -1
  166. package/node_modules/pi-subagents/src/runs/background/binary-bootstrap.d.ts.map +1 -1
  167. package/node_modules/pi-subagents/src/runs/background/binary-bootstrap.js +2 -1
  168. package/node_modules/pi-subagents/src/runs/background/binary-bootstrap.js.map +1 -1
  169. package/node_modules/pi-subagents/src/runs/background/chain-root-attachment.d.ts +2 -0
  170. package/node_modules/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
  171. package/node_modules/pi-subagents/src/runs/background/chain-root-attachment.js +9 -6
  172. package/node_modules/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
  173. package/node_modules/pi-subagents/src/runs/background/control-channel.d.ts +1 -0
  174. package/node_modules/pi-subagents/src/runs/background/control-channel.d.ts.map +1 -1
  175. package/node_modules/pi-subagents/src/runs/background/control-channel.js +27 -3
  176. package/node_modules/pi-subagents/src/runs/background/control-channel.js.map +1 -1
  177. package/node_modules/pi-subagents/src/runs/background/fleet-view.js +5 -5
  178. package/node_modules/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
  179. package/node_modules/pi-subagents/src/runs/background/notify.d.ts +12 -2
  180. package/node_modules/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  181. package/node_modules/pi-subagents/src/runs/background/notify.js +152 -13
  182. package/node_modules/pi-subagents/src/runs/background/notify.js.map +1 -1
  183. package/node_modules/pi-subagents/src/runs/background/result-files.d.ts +29 -0
  184. package/node_modules/pi-subagents/src/runs/background/result-files.d.ts.map +1 -1
  185. package/node_modules/pi-subagents/src/runs/background/result-files.js +104 -6
  186. package/node_modules/pi-subagents/src/runs/background/result-files.js.map +1 -1
  187. package/node_modules/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
  188. package/node_modules/pi-subagents/src/runs/background/result-watcher.js +60 -64
  189. package/node_modules/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
  190. package/node_modules/pi-subagents/src/runs/background/resume-guidance.js +2 -2
  191. package/node_modules/pi-subagents/src/runs/background/resume-guidance.js.map +1 -1
  192. package/node_modules/pi-subagents/src/runs/background/run-child-session.d.ts.map +1 -1
  193. package/node_modules/pi-subagents/src/runs/background/run-child-session.js +9 -15
  194. package/node_modules/pi-subagents/src/runs/background/run-child-session.js.map +1 -1
  195. package/node_modules/pi-subagents/src/runs/background/run-id-resolver.d.ts.map +1 -1
  196. package/node_modules/pi-subagents/src/runs/background/run-id-resolver.js +9 -6
  197. package/node_modules/pi-subagents/src/runs/background/run-id-resolver.js.map +1 -1
  198. package/node_modules/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
  199. package/node_modules/pi-subagents/src/runs/background/run-status.js +19 -15
  200. package/node_modules/pi-subagents/src/runs/background/run-status.js.map +1 -1
  201. package/node_modules/pi-subagents/src/runs/background/runner-aliases.d.ts.map +1 -1
  202. package/node_modules/pi-subagents/src/runs/background/runner-aliases.js +11 -8
  203. package/node_modules/pi-subagents/src/runs/background/runner-aliases.js.map +1 -1
  204. package/node_modules/pi-subagents/src/runs/background/runner-child-launch.d.ts.map +1 -1
  205. package/node_modules/pi-subagents/src/runs/background/runner-child-launch.js +1 -0
  206. package/node_modules/pi-subagents/src/runs/background/runner-child-launch.js.map +1 -1
  207. package/node_modules/pi-subagents/src/runs/background/runner-http-dispatcher.d.ts +3 -0
  208. package/node_modules/pi-subagents/src/runs/background/runner-http-dispatcher.d.ts.map +1 -1
  209. package/node_modules/pi-subagents/src/runs/background/runner-http-dispatcher.js +2 -0
  210. package/node_modules/pi-subagents/src/runs/background/runner-http-dispatcher.js.map +1 -1
  211. package/node_modules/pi-subagents/src/runs/background/scheduled-runs.d.ts +9 -0
  212. package/node_modules/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -1
  213. package/node_modules/pi-subagents/src/runs/background/scheduled-runs.js +124 -36
  214. package/node_modules/pi-subagents/src/runs/background/scheduled-runs.js.map +1 -1
  215. package/node_modules/pi-subagents/src/runs/background/subagent-runner-bootstrap.d.ts.map +1 -1
  216. package/node_modules/pi-subagents/src/runs/background/subagent-runner-bootstrap.js +5 -1
  217. package/node_modules/pi-subagents/src/runs/background/subagent-runner-bootstrap.js.map +1 -1
  218. package/node_modules/pi-subagents/src/runs/background/subagent-runner.d.ts +3 -1
  219. package/node_modules/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  220. package/node_modules/pi-subagents/src/runs/background/subagent-runner.js +211 -283
  221. package/node_modules/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  222. package/node_modules/pi-subagents/src/runs/background/subagent-wait.d.ts +2 -0
  223. package/node_modules/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
  224. package/node_modules/pi-subagents/src/runs/background/subagent-wait.js +34 -20
  225. package/node_modules/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
  226. package/node_modules/pi-subagents/src/runs/background/terminal-run-index.d.ts +1 -0
  227. package/node_modules/pi-subagents/src/runs/background/terminal-run-index.d.ts.map +1 -1
  228. package/node_modules/pi-subagents/src/runs/background/terminal-run-index.js +47 -1
  229. package/node_modules/pi-subagents/src/runs/background/terminal-run-index.js.map +1 -1
  230. package/node_modules/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  231. package/node_modules/pi-subagents/src/runs/background/wait-tool.js +36 -23
  232. package/node_modules/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  233. package/node_modules/pi-subagents/src/runs/background/workflow-terminal-proof.d.ts +1 -1
  234. package/node_modules/pi-subagents/src/runs/background/workflow-terminal-proof.d.ts.map +1 -1
  235. package/node_modules/pi-subagents/src/runs/background/workflow-terminal-proof.js +12 -3
  236. package/node_modules/pi-subagents/src/runs/background/workflow-terminal-proof.js.map +1 -1
  237. package/node_modules/pi-subagents/src/runs/foreground/async-stop-action.d.ts +7 -1
  238. package/node_modules/pi-subagents/src/runs/foreground/async-stop-action.d.ts.map +1 -1
  239. package/node_modules/pi-subagents/src/runs/foreground/async-stop-action.js +55 -32
  240. package/node_modules/pi-subagents/src/runs/foreground/async-stop-action.js.map +1 -1
  241. package/node_modules/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  242. package/node_modules/pi-subagents/src/runs/foreground/execution.js +101 -79
  243. package/node_modules/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  244. package/node_modules/pi-subagents/src/runs/foreground/subagent-executor.d.ts +5 -1
  245. package/node_modules/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  246. package/node_modules/pi-subagents/src/runs/foreground/subagent-executor.js +184 -84
  247. package/node_modules/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  248. package/node_modules/pi-subagents/src/runs/shared/child-hooks.js +6 -5
  249. package/node_modules/pi-subagents/src/runs/shared/child-hooks.js.map +1 -1
  250. package/node_modules/pi-subagents/src/runs/shared/child-launch.d.ts +2 -0
  251. package/node_modules/pi-subagents/src/runs/shared/child-launch.d.ts.map +1 -1
  252. package/node_modules/pi-subagents/src/runs/shared/child-launch.js +1 -0
  253. package/node_modules/pi-subagents/src/runs/shared/child-launch.js.map +1 -1
  254. package/node_modules/pi-subagents/src/runs/shared/child-session.d.ts +4 -0
  255. package/node_modules/pi-subagents/src/runs/shared/child-session.d.ts.map +1 -1
  256. package/node_modules/pi-subagents/src/runs/shared/child-session.js +28 -23
  257. package/node_modules/pi-subagents/src/runs/shared/child-session.js.map +1 -1
  258. package/node_modules/pi-subagents/src/runs/shared/child-tool-plan.d.ts.map +1 -1
  259. package/node_modules/pi-subagents/src/runs/shared/child-tool-plan.js +11 -10
  260. package/node_modules/pi-subagents/src/runs/shared/child-tool-plan.js.map +1 -1
  261. package/node_modules/pi-subagents/src/runs/shared/dynamic-fanout.js +1 -1
  262. package/node_modules/pi-subagents/src/runs/shared/dynamic-fanout.js.map +1 -1
  263. package/node_modules/pi-subagents/src/runs/shared/effective-system-prompt.d.ts +4 -4
  264. package/node_modules/pi-subagents/src/runs/shared/effective-system-prompt.d.ts.map +1 -1
  265. package/node_modules/pi-subagents/src/runs/shared/effective-system-prompt.js +5 -4
  266. package/node_modules/pi-subagents/src/runs/shared/effective-system-prompt.js.map +1 -1
  267. package/node_modules/pi-subagents/src/runs/shared/external-cli-runner.d.ts.map +1 -1
  268. package/node_modules/pi-subagents/src/runs/shared/external-cli-runner.js +3 -2
  269. package/node_modules/pi-subagents/src/runs/shared/external-cli-runner.js.map +1 -1
  270. package/node_modules/pi-subagents/src/runs/shared/herdr-placed-run.d.ts +1 -0
  271. package/node_modules/pi-subagents/src/runs/shared/herdr-placed-run.d.ts.map +1 -1
  272. package/node_modules/pi-subagents/src/runs/shared/herdr-placed-run.js +10 -6
  273. package/node_modules/pi-subagents/src/runs/shared/herdr-placed-run.js.map +1 -1
  274. package/node_modules/pi-subagents/src/runs/shared/model-resolution-diagnostic.d.ts +17 -5
  275. package/node_modules/pi-subagents/src/runs/shared/model-resolution-diagnostic.d.ts.map +1 -1
  276. package/node_modules/pi-subagents/src/runs/shared/model-resolution-diagnostic.js +37 -10
  277. package/node_modules/pi-subagents/src/runs/shared/model-resolution-diagnostic.js.map +1 -1
  278. package/node_modules/pi-subagents/src/runs/shared/model-resolution.d.ts.map +1 -1
  279. package/node_modules/pi-subagents/src/runs/shared/model-resolution.js +29 -1
  280. package/node_modules/pi-subagents/src/runs/shared/model-resolution.js.map +1 -1
  281. package/node_modules/pi-subagents/src/runs/shared/nested-events.d.ts +2 -0
  282. package/node_modules/pi-subagents/src/runs/shared/nested-events.d.ts.map +1 -1
  283. package/node_modules/pi-subagents/src/runs/shared/nested-events.js +4 -0
  284. package/node_modules/pi-subagents/src/runs/shared/nested-events.js.map +1 -1
  285. package/node_modules/pi-subagents/src/runs/shared/orca-progress-tabs.js +1 -1
  286. package/node_modules/pi-subagents/src/runs/shared/orca-progress-tabs.js.map +1 -1
  287. package/node_modules/pi-subagents/src/runs/shared/parallel-handoff.js +2 -2
  288. package/node_modules/pi-subagents/src/runs/shared/parallel-handoff.js.map +1 -1
  289. package/node_modules/pi-subagents/src/runs/shared/parallel-utils.d.ts +2 -0
  290. package/node_modules/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  291. package/node_modules/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  292. package/node_modules/pi-subagents/src/runs/shared/partial-output.d.ts +7 -0
  293. package/node_modules/pi-subagents/src/runs/shared/partial-output.d.ts.map +1 -1
  294. package/node_modules/pi-subagents/src/runs/shared/partial-output.js +7 -0
  295. package/node_modules/pi-subagents/src/runs/shared/partial-output.js.map +1 -1
  296. package/node_modules/pi-subagents/src/runs/shared/runner-launcher.d.ts +12 -0
  297. package/node_modules/pi-subagents/src/runs/shared/runner-launcher.d.ts.map +1 -0
  298. package/node_modules/pi-subagents/src/runs/shared/runner-launcher.js +25 -0
  299. package/node_modules/pi-subagents/src/runs/shared/runner-launcher.js.map +1 -0
  300. package/node_modules/pi-subagents/src/runs/shared/single-output.d.ts +31 -1
  301. package/node_modules/pi-subagents/src/runs/shared/single-output.d.ts.map +1 -1
  302. package/node_modules/pi-subagents/src/runs/shared/single-output.js +100 -21
  303. package/node_modules/pi-subagents/src/runs/shared/single-output.js.map +1 -1
  304. package/node_modules/pi-subagents/src/runs/shared/structured-output.d.ts +2 -0
  305. package/node_modules/pi-subagents/src/runs/shared/structured-output.d.ts.map +1 -1
  306. package/node_modules/pi-subagents/src/runs/shared/structured-output.js +26 -8
  307. package/node_modules/pi-subagents/src/runs/shared/structured-output.js.map +1 -1
  308. package/node_modules/pi-subagents/src/runs/shared/subagent-control.js +3 -3
  309. package/node_modules/pi-subagents/src/runs/shared/subagent-control.js.map +1 -1
  310. package/node_modules/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts +37 -2
  311. package/node_modules/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  312. package/node_modules/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +130 -22
  313. package/node_modules/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  314. package/node_modules/pi-subagents/src/runs/shared/tool-budget.js +1 -1
  315. package/node_modules/pi-subagents/src/runs/shared/tool-budget.js.map +1 -1
  316. package/node_modules/pi-subagents/src/runs/shared/workflow-async-child-guidance.js +1 -1
  317. package/node_modules/pi-subagents/src/runs/shared/workflow-async-child-guidance.js.map +1 -1
  318. package/node_modules/pi-subagents/src/runs/shared/worktree-cleanup-plan.js +1 -1
  319. package/node_modules/pi-subagents/src/runs/shared/worktree-cleanup-plan.js.map +1 -1
  320. package/node_modules/pi-subagents/src/shared/atomic-json.d.ts +4 -3
  321. package/node_modules/pi-subagents/src/shared/atomic-json.d.ts.map +1 -1
  322. package/node_modules/pi-subagents/src/shared/atomic-json.js +3 -1
  323. package/node_modules/pi-subagents/src/shared/atomic-json.js.map +1 -1
  324. package/node_modules/pi-subagents/src/shared/child-transcript.js +1 -1
  325. package/node_modules/pi-subagents/src/shared/child-transcript.js.map +1 -1
  326. package/node_modules/pi-subagents/src/shared/edit-distance.d.ts +5 -0
  327. package/node_modules/pi-subagents/src/shared/edit-distance.d.ts.map +1 -0
  328. package/node_modules/pi-subagents/src/shared/edit-distance.js +33 -0
  329. package/node_modules/pi-subagents/src/shared/edit-distance.js.map +1 -0
  330. package/node_modules/pi-subagents/src/shared/extension-context.d.ts +5 -0
  331. package/node_modules/pi-subagents/src/shared/extension-context.d.ts.map +1 -1
  332. package/node_modules/pi-subagents/src/shared/extension-context.js +7 -0
  333. package/node_modules/pi-subagents/src/shared/extension-context.js.map +1 -1
  334. package/node_modules/pi-subagents/src/shared/formatters.d.ts.map +1 -1
  335. package/node_modules/pi-subagents/src/shared/formatters.js +1 -6
  336. package/node_modules/pi-subagents/src/shared/formatters.js.map +1 -1
  337. package/node_modules/pi-subagents/src/shared/model-info.d.ts +8 -0
  338. package/node_modules/pi-subagents/src/shared/model-info.d.ts.map +1 -1
  339. package/node_modules/pi-subagents/src/shared/model-info.js +22 -0
  340. package/node_modules/pi-subagents/src/shared/model-info.js.map +1 -1
  341. package/node_modules/pi-subagents/src/shared/package-version.d.ts +3 -0
  342. package/node_modules/pi-subagents/src/shared/package-version.d.ts.map +1 -0
  343. package/node_modules/pi-subagents/src/shared/package-version.js +15 -0
  344. package/node_modules/pi-subagents/src/shared/package-version.js.map +1 -0
  345. package/node_modules/pi-subagents/src/shared/parent-wake.d.ts +24 -0
  346. package/node_modules/pi-subagents/src/shared/parent-wake.d.ts.map +1 -0
  347. package/node_modules/pi-subagents/src/shared/parent-wake.js +71 -0
  348. package/node_modules/pi-subagents/src/shared/parent-wake.js.map +1 -0
  349. package/node_modules/pi-subagents/src/shared/pruned-fork.d.ts +1 -1
  350. package/node_modules/pi-subagents/src/shared/pruned-fork.d.ts.map +1 -1
  351. package/node_modules/pi-subagents/src/shared/pruned-fork.js +6 -0
  352. package/node_modules/pi-subagents/src/shared/pruned-fork.js.map +1 -1
  353. package/node_modules/pi-subagents/src/shared/runtime-module-path.d.ts +11 -0
  354. package/node_modules/pi-subagents/src/shared/runtime-module-path.d.ts.map +1 -0
  355. package/node_modules/pi-subagents/src/shared/runtime-module-path.js +17 -0
  356. package/node_modules/pi-subagents/src/shared/runtime-module-path.js.map +1 -0
  357. package/node_modules/pi-subagents/src/shared/types.d.ts +33 -10
  358. package/node_modules/pi-subagents/src/shared/types.d.ts.map +1 -1
  359. package/node_modules/pi-subagents/src/shared/types.js +7 -4
  360. package/node_modules/pi-subagents/src/shared/types.js.map +1 -1
  361. package/node_modules/pi-subagents/src/shared/utils.d.ts +2 -0
  362. package/node_modules/pi-subagents/src/shared/utils.d.ts.map +1 -1
  363. package/node_modules/pi-subagents/src/shared/utils.js +10 -7
  364. package/node_modules/pi-subagents/src/shared/utils.js.map +1 -1
  365. package/node_modules/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  366. package/node_modules/pi-subagents/src/slash/slash-commands.js +21 -10
  367. package/node_modules/pi-subagents/src/slash/slash-commands.js.map +1 -1
  368. package/node_modules/pi-subagents/src/slash/subagents-admin.d.ts.map +1 -1
  369. package/node_modules/pi-subagents/src/slash/subagents-admin.js +3 -1
  370. package/node_modules/pi-subagents/src/slash/subagents-admin.js.map +1 -1
  371. package/node_modules/pi-subagents/src/tui/fleet-status.d.ts +5 -0
  372. package/node_modules/pi-subagents/src/tui/fleet-status.d.ts.map +1 -1
  373. package/node_modules/pi-subagents/src/tui/fleet-status.js +24 -3
  374. package/node_modules/pi-subagents/src/tui/fleet-status.js.map +1 -1
  375. package/node_modules/pi-subagents/src/tui/fleet-transcript.d.ts +2 -0
  376. package/node_modules/pi-subagents/src/tui/fleet-transcript.d.ts.map +1 -1
  377. package/node_modules/pi-subagents/src/tui/fleet-transcript.js +7 -2
  378. package/node_modules/pi-subagents/src/tui/fleet-transcript.js.map +1 -1
  379. package/node_modules/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  380. package/node_modules/pi-subagents/src/tui/fleet.js +11 -6
  381. package/node_modules/pi-subagents/src/tui/fleet.js.map +1 -1
  382. package/node_modules/pi-subagents/src/tui/render.d.ts +2 -2
  383. package/node_modules/pi-subagents/src/tui/render.d.ts.map +1 -1
  384. package/node_modules/pi-subagents/src/tui/render.js +19 -17
  385. package/node_modules/pi-subagents/src/tui/render.js.map +1 -1
  386. package/node_modules/pi-subagents/src/tui/subagent-messages.d.ts +23 -0
  387. package/node_modules/pi-subagents/src/tui/subagent-messages.d.ts.map +1 -0
  388. package/node_modules/pi-subagents/src/tui/subagent-messages.js +270 -0
  389. package/node_modules/pi-subagents/src/tui/subagent-messages.js.map +1 -0
  390. package/node_modules/pi-subagents/src/watchdog/change-signature.d.ts.map +1 -1
  391. package/node_modules/pi-subagents/src/watchdog/change-signature.js +1 -3
  392. package/node_modules/pi-subagents/src/watchdog/change-signature.js.map +1 -1
  393. package/node_modules/pi-subagents/src/watchdog/register-main.d.ts.map +1 -1
  394. package/node_modules/pi-subagents/src/watchdog/register-main.js +1 -19
  395. package/node_modules/pi-subagents/src/watchdog/register-main.js.map +1 -1
  396. package/node_modules/pi-subagents/src/watchdog/render.d.ts +2 -10
  397. package/node_modules/pi-subagents/src/watchdog/render.d.ts.map +1 -1
  398. package/node_modules/pi-subagents/src/watchdog/render.js +1 -19
  399. package/node_modules/pi-subagents/src/watchdog/render.js.map +1 -1
  400. package/node_modules/pi-subagents/src/watchdog/tool-actions.js +2 -2
  401. package/node_modules/pi-subagents/src/watchdog/tool-actions.js.map +1 -1
  402. package/node_modules/pi-subagents/src/workflows/scripted-workflow.d.ts.map +1 -1
  403. package/node_modules/pi-subagents/src/workflows/scripted-workflow.js +33 -10
  404. package/node_modules/pi-subagents/src/workflows/scripted-workflow.js.map +1 -1
  405. package/node_modules/pi-subagents/src/workflows/workflow-resources.d.ts.map +1 -1
  406. package/node_modules/pi-subagents/src/workflows/workflow-resources.js +12 -0
  407. package/node_modules/pi-subagents/src/workflows/workflow-resources.js.map +1 -1
  408. package/package.json +3 -2
  409. package/node_modules/pi-subagents/src/runs/shared/run-history.d.ts +0 -67
  410. package/node_modules/pi-subagents/src/runs/shared/run-history.d.ts.map +0 -1
  411. package/node_modules/pi-subagents/src/runs/shared/run-history.js +0 -270
  412. package/node_modules/pi-subagents/src/runs/shared/run-history.js.map +0 -1
package/ADR.md ADDED
@@ -0,0 +1,58 @@
1
+ # Architecture decision records
2
+
3
+ An Architecture Decision Record (ADR) explains an important architectural choice, its context, and its consequences.
4
+ This file contains one numbered record per decision.
5
+
6
+ Requirements and routine project rules belong in the [roadmap](ROADMAP.md) or other relevant documentation.
7
+
8
+ When a new decision replaces an accepted decision, add a new record, mark the earlier record as superseded, and link both records.
9
+
10
+ ## ADR-001: Keep the workflow independent of Git
11
+
12
+ ### Status
13
+
14
+ Accepted. Recorded date: 2026-10-07. Implemented in `0.6.0`.
15
+
16
+ ### Context
17
+
18
+ The previous workflow required Git and used checkpoints and automatic commits. The recorded reason for removing that approach was to simplify the project. Other evaluated alternatives were not recorded.
19
+
20
+ ### Decision
21
+
22
+ `Maestro` uses the Pi project directory and saved workflow phase. It does not require Git or create automatic commits.
23
+
24
+ The `verifier` checks live project files. The `owner` controls later Git use, pull requests, and merging.
25
+
26
+ ### Consequences
27
+
28
+ Workflow execution no longer depends on Git. Revision and commit fields were removed without migration or compatibility readers. Interrupted and older workflows require manual `owner` handling.
29
+
30
+ ### Evidence
31
+
32
+ [Commit deae41c](https://github.com/emilioSp/pi-maestro/commit/deae41ce66a3f2c76859209c44165e7ddd0f3a72), [Changelog 0.6.0](CHANGELOG.md#060), and [workflow completion](docs/workflow.md#workflow-completion).
33
+
34
+ ## ADR-002: Store escalation decisions in builder handoffs
35
+
36
+ ### Status
37
+
38
+ Accepted. Recorded date: 2026-10-08. Implemented in `0.7.0`.
39
+
40
+ ### Context
41
+
42
+ The previous approach stored `escalations` in standalone files and used singular resolution tools. The recorded reason for replacing it was to use the same storage, local ID, and batch decision model as `verifier` `findings`. Other evaluated alternatives were not recorded.
43
+
44
+ ### Decision
45
+
46
+ Numbered `builder` `handoffs` contain `escalation` questions and their `owner` resolutions. One call records all current answers. No parallel storage model is needed.
47
+
48
+ IDs restart at `E1` in each `handoff`. References include both IDs, such as `B1/E1`. Answers update only the active handoff's resolution fields.
49
+
50
+ ### Consequences
51
+
52
+ Standalone `escalation` storage and singular resolution tools were removed. Questions and decisions remain together in each numbered `builder` `handoff`.
53
+
54
+ There are no migration procedures, fallback readers, or deprecated aliases. `Artifact` versions remain `1.0.0` despite the breaking change.
55
+
56
+ ### Evidence
57
+
58
+ [Repository-only specification](.specs/20261008-132344-store-escalations-in-builder-handoffs/spec.md), [Commit dda6eb5](https://github.com/emilioSp/pi-maestro/commit/dda6eb5b3ab76ba175112c3c565c70be747d7344), and [escalation workflow](docs/workflow.md#escalations).
package/README.md CHANGED
@@ -104,3 +104,4 @@ The reading order is:
104
104
  2. [Tech stack](TECH_STACK.md): runtime technologies and development tools.
105
105
  3. [Roadmap](ROADMAP.md): completed outcomes and planned priorities.
106
106
  4. [Changelog](CHANGELOG.md): meaningful codebase changes and breaking changes.
107
+ 5. [Architecture decision records](ADR.md): architectural choices, context, consequences, and evidence.
package/ROADMAP.md CHANGED
@@ -10,80 +10,173 @@ Item identifiers remain stable when priorities change. The `owner` approves chan
10
10
 
11
11
  ### R-01: Improve status presentation and activation feedback
12
12
 
13
- The status bar uses phase icons, theme colors, and shortened `spec` IDs. Successful activation shows the configured `builder` and `verifier` settings without adding the notice to session history or model context. All 12 `acceptance criteria` passed with no `verifier` `findings`; the saved workflow reached `candidate-ready`.
13
+ The status bar uses phase icons, theme colors, and shortened `spec` IDs. Successful activation shows the configured `builder` and `verifier` settings without adding the notice to session history or model context. All 12 `acceptance criteria` passed with no `verifier` `findings`. The saved workflow reached `candidate-ready`.
14
14
 
15
- Evidence: [Specification](.specs/20261007-170438-update-maestro-status-bar-with-agent-models-theme-colors-and-phase-icons/spec.md), [verifier report](.specs/20261007-170438-update-maestro-status-bar-with-agent-models-theme-colors-and-phase-icons/handoffs/verifier/V1.json), and [merged PR #26](https://github.com/emilioSp/pi-maestro/pull/26).
15
+ #### Evidence
16
+
17
+ [Specification](.specs/20261007-170438-update-maestro-status-bar-with-agent-models-theme-colors-and-phase-icons/spec.md), [verifier report](.specs/20261007-170438-update-maestro-status-bar-with-agent-models-theme-colors-and-phase-icons/handoffs/verifier/V1.json), and [merged PR #26](https://github.com/emilioSp/pi-maestro/pull/26).
16
18
 
17
19
  ### R-02: Store escalations and owner decisions in builder handoffs
18
20
 
19
- Numbered `builder` `handoffs` contain multiple `escalation` questions and their `owner` resolutions. The `owner` resolves all current questions in one batch, while earlier `handoffs` remain available as history. All 10 `acceptance criteria` passed with no `verifier` `findings`; the saved workflow reached `candidate-ready`.
21
+ Numbered `builder` `handoffs` contain multiple `escalation` questions and their `owner` resolutions. The `owner` resolves all current questions in one batch. Earlier `handoffs` remain available as history. All 10 `acceptance criteria` passed with no `verifier` `findings`. The saved workflow reached `candidate-ready`.
22
+
23
+ #### Evidence
20
24
 
21
- Evidence: [Specification](.specs/20261008-132344-store-escalations-in-builder-handoffs/spec.md), [verifier report](.specs/20261008-132344-store-escalations-in-builder-handoffs/handoffs/verifier/V1.json), and [merged PR #27](https://github.com/emilioSp/pi-maestro/pull/27).
25
+ [Specification](.specs/20261008-132344-store-escalations-in-builder-handoffs/spec.md), [verifier report](.specs/20261008-132344-store-escalations-in-builder-handoffs/handoffs/verifier/V1.json), and [merged PR #27](https://github.com/emilioSp/pi-maestro/pull/27).
22
26
 
23
27
  ### R-12: Format glossary terms consistently
24
28
 
25
29
  Applied glossary formatting across the documentation and recorded its exclusions in `AGENTS.md` and the documentation audit skill. The approved change document uses the term `spec`. The `owner` confirmed completion.
26
30
 
27
- Evidence: [Glossary](docs/glossary.md) and [workflow documentation](docs/workflow.md).
31
+ #### Evidence
28
32
 
29
- ## Now
33
+ [Glossary](docs/glossary.md) and [workflow documentation](docs/workflow.md).
30
34
 
31
- No current priority is selected.
35
+ ### R-15: Rename the test support directory
32
36
 
33
- ## Next
37
+ Renamed `test/` to `tests/` at the owner's request. Updated imports, fixture paths, lint configuration, and project instructions. This follows the global instruction to keep fixtures under `tests/fixtures`. Source tests remain next to their source files. Historical `handoffs` retain their recorded paths.
38
+
39
+ #### Evidence
40
+
41
+ [Test support](tests/support/), [fixtures](tests/fixtures/), [lint configuration](biome.json), and [project instructions](AGENTS.md#tests).
42
+
43
+ ## Now
34
44
 
35
45
  ### R-03: Route builder failures through owner escalations
36
46
 
37
- A technical `builder` failure currently ends the workflow in `builder-failed`. Replace the builder's `failed` `handoff` status and the `builder-failed` workflow phase with an `escalation`. The `owner` decides how to proceed through the existing `escalation` process.
47
+ #### Objective
38
48
 
39
- Complete when `builder` failures produce `owner` `escalations` instead of a terminal failure state. Individual checks retain `failed` as a valid result. Agent instructions, tools, workflow transitions, tests, and documentation must describe the same behavior.
49
+ A technical `builder` failure currently ends the workflow in `builder-failed`. Replace the builder's `failed` `handoff` status and the `builder-failed` workflow phase with an `escalation`. The `owner` decides how to proceed through the existing `escalation` process.
40
50
 
41
51
  Automatic recovery of interrupted `runs` is outside this item. No `specification` is approved yet.
42
52
 
53
+ #### Completed when
54
+
55
+ `Builder` failures produce `owner` `escalations` instead of a terminal failure state. Individual checks retain `failed` as a valid result. Agent instructions, tools, workflow transitions, tests, and documentation describe the same behavior.
56
+
57
+ ## Next
58
+
59
+
43
60
  ## Later
44
61
 
45
62
  These items need scope review before `specification` approval. Existing behavior must be checked before adding new code. Dependencies between these items are not yet agreed.
46
63
 
47
64
  ### R-04: Rename the npm package
48
65
 
66
+ #### Objective
67
+
49
68
  Rename `@emiliosp/pi-maestro` to `pi-maestro-sdd`. The `owner` installs the package under the new name. This item changes the package identity, not the development workflow.
50
69
 
51
- Complete when package metadata and installation documentation use the new name and the package is available under it. Compatibility with installations under the old name must be decided in the `specification`. No `specification` is approved yet.
70
+ Compatibility with installations under the old name must be decided in the `specification`. No `specification` is approved yet.
71
+
72
+ #### Completed when
73
+
74
+ Package metadata and installation documentation use the new name. The package is available under that name.
52
75
 
53
76
  ### R-05: Keep acceptance criterion numbering continuous
54
77
 
55
- When criteria are removed during `spec` preparation or revision, renumber the remaining criteria without gaps. Numbering starts at `AC1` and continues through the final criterion. Complete when the `spec` and its current references use consistent numbering.
78
+ #### Objective
79
+
80
+ When criteria are removed during `spec` preparation or revision, renumber the remaining criteria without gaps. Numbering starts at `AC1` and continues through the final criterion.
81
+
82
+ #### Completed when
83
+
84
+ The `spec` and its current references use consistent numbering.
56
85
 
57
86
  ### R-06: Check subagent extensions at activation
58
87
 
59
- Make extension availability problems visible before a `builder` or `verifier` `run` starts. Activation already checks agent launch requirements, so first identify any missing extension checks. Complete when unavailable required subagent extensions prevent activation and the error identifies the problem.
88
+ #### Objective
89
+
90
+ Make extension availability problems visible before a `builder` or `verifier` `run` starts. Activation already checks agent launch requirements, so first identify any missing extension checks.
91
+
92
+ #### Completed when
93
+
94
+ Unavailable required subagent extensions prevent activation. The error identifies the problem.
60
95
 
61
96
  ### R-07: Guide initial configuration
62
97
 
63
- Help the `owner` create `Maestro` configuration through an interview. `Maestro` asks questions and writes the agreed configuration. Complete when the `owner` can create a valid project configuration without writing the file manually.
98
+ #### Objective
99
+
100
+ Help the `owner` create `Maestro` configuration through an interview. `Maestro` asks questions and writes the agreed configuration.
101
+
102
+ #### Completed when
103
+
104
+ The `owner` can create a valid project configuration without writing the file manually.
64
105
 
65
106
  ### R-08: Change agent models before a builder run
66
107
 
67
- Let the `owner` change the `builder` and `verifier` models during `spec` preparation and the `ready-for-builder` phase. The selected models apply to subsequent `runs`. Complete when the `owner` can select available models in those phases and `Maestro` uses the selections.
108
+ #### Objective
109
+
110
+ Let the `owner` change the `builder` and `verifier` models during `spec` preparation and the `ready-for-builder` phase. The selected models apply to subsequent `runs`.
111
+
112
+ #### Completed when
113
+
114
+ The `owner` can select available models in those phases. `Maestro` uses the selections.
68
115
 
69
116
  ### R-09: Define workflow reconciliation
70
117
 
71
- Explore how `Maestro` can reconcile saved `artifacts` and workflow state. The recovery scope is not yet defined. The `owner` must define the intended outcome, recovery boundaries, and completion condition before this item can move forward.
118
+ #### Objective
119
+
120
+ Explore how `Maestro` can reconcile saved `artifacts` and workflow state. The recovery scope is not yet defined.
121
+
122
+ #### Completed when
123
+
124
+ Not yet defined. The `owner` must define the intended outcome, recovery boundaries, and completion condition before this item can move forward.
72
125
 
73
126
  ### R-10: Match handoff criteria to the approved spec
74
127
 
128
+ #### Objective
129
+
75
130
  Prevent `builder` and `verifier` reports from omitting or adding `acceptance criteria`. Each report must contain exactly the criterion IDs in the approved `spec`, with no duplicates in either place. Existing duplicate checks in reports do not establish this match.
76
131
 
77
- Complete when both `handoff` submissions reject missing, extra, or duplicate criterion IDs before saving a report or changing phase. The `specification` must define the criterion heading format used to extract IDs. For example, a heading can use `### AC1: ...`.
132
+ The `specification` must define the criterion heading format used to extract IDs. For example, a heading can use `### AC1: ...`.
133
+
134
+ #### Completed when
135
+
136
+ Both `handoff` submissions reject missing, extra, or duplicate criterion IDs before saving a report or changing phase.
78
137
 
79
138
  ### R-11: Reduce temporary verifier changes
80
139
 
140
+ #### Objective
141
+
81
142
  Reduce the risk that verification changes the `candidate`. Existing instructions already require exact restoration, cleanup, and reporting of unresolved restoration problems. Refine the remaining guidance rather than duplicate those rules.
82
143
 
83
- Prefer checks that leave existing files unchanged and use separate temporary files when possible. Change an existing file only when a criterion requires it, retain its exact contents, and restore it immediately after each `probe`, including failed `probes`. Prefer check-only commands over commands that apply automatic fixes.
144
+ Prefer checks that leave existing files unchanged and use separate temporary files when possible. Change an existing file only when a criterion requires it. Retain its exact contents and restore it immediately after each `probe`, including failed `probes`. Prefer check-only commands over commands that apply automatic fixes.
84
145
 
85
- Complete when `verifier` instructions cover these limits and require restoration and temporary-file cleanup before `handoff`. If restoration fails, the `verifier` must stop and report affected paths and remaining changes. `Maestro` currently has no file-hash restoration check; adding one requires a separate scope decision.
146
+ `Maestro` currently has no file-hash restoration check. Adding one requires a separate scope decision.
147
+
148
+ #### Completed when
149
+
150
+ `Verifier` instructions cover these limits and require restoration and temporary-file cleanup before `handoff`. If restoration fails, the `verifier` must stop and report affected paths and remaining changes.
86
151
 
87
152
  ### R-13: Show when Maestro is working
88
153
 
89
- Show an activity indicator in Pi's status bar while progress does not require an `owner` decision. A spinner is one option, not an agreed implementation. Complete when the status clearly distinguishes work in progress from a request for `owner` action.
154
+ #### Objective
155
+
156
+ Show an activity indicator in Pi's status bar while progress does not require an `owner` decision. A spinner is one option, not an agreed implementation.
157
+
158
+ #### Completed when
159
+
160
+ The status clearly distinguishes work in progress from a request for `owner` action.
161
+
162
+ ### R-14: Introduce Maestro at activation
163
+
164
+ #### Objective
165
+
166
+ When activated, `Maestro` gives a brief introduction and invites the `owner` to ask how it works, if interested. `Maestro` must have access to its own documentation to answer those questions.
167
+
168
+ #### Completed when
169
+
170
+ Activation includes this short introduction. `Maestro` can consult its documentation.
171
+
172
+ ### R-16: Verify code quality against AGENTS.md instructions
173
+
174
+ #### Objective
175
+
176
+ Add code-quality review against applicable `AGENTS.md` instructions as another `verifier` responsibility. Keep all existing responsibilities unchanged, including independent verification of every `acceptance criterion` in the approved `spec`. Code-quality review supplements that verification. It does not replace or reduce it.
177
+
178
+ Existing `verifier` instructions already require reading applicable `AGENTS.md` files and following technical rules. Extend that guidance to require explicit code-quality review and reporting of instruction violations. Do not introduce personal style preferences as requirements.
179
+
180
+ #### Completed when
181
+
182
+ The `verifier` performs both its existing verification duties and the additional code-quality review. Every `acceptance criterion` is still independently verified. Each code-quality `finding` about an instruction violation identifies the `AGENTS.md` file, quotes the violated instruction, and explains how the code violates it.
package/docs/glossary.md CHANGED
@@ -14,6 +14,7 @@
14
14
  | `Expected result` | The observable result that a `probe` must produce. |
15
15
  | `Artifact` | A saved workflow file, such as a `spec`, or a `handoff` between agents. |
16
16
  | `Handoff` | A saved `builder` or `verifier` report with results, `probe` outcomes, and notes. |
17
+ | `Observability` | The owner's ability to inspect workflow progress and reported results. |
17
18
  | `Run` or `pass` | One execution of the `builder` or `verifier` with a fresh conversation. |
18
19
  | `Candidate` | The project files created by agents after a workflow `run` |
19
20
  | `Finding` | A technical issue that the `verifier` records for an `owner` decision. |
package/docs/workflow.md CHANGED
@@ -22,7 +22,20 @@ A `verifier` `handoff` can contain `findings`, which are technical issues.
22
22
 
23
23
  `Builder` and `verifier` `runs` are sequential foreground operations. Each starts with a fresh conversation and reads the `spec` and saved `artifacts`.
24
24
 
25
- Maestro's Pi status shows the current phase. `pi-subagents` FleetView and `/subagents-fleet` show live agent activity and transcripts.
25
+ ## Observability
26
+
27
+ `Observability` is the owner's ability to inspect workflow progress and reported results.
28
+
29
+ Maestro's Pi status shows the current phase.
30
+
31
+ `pi-subagents` FleetView and `/subagents-fleet` show live agent activity and transcripts.
32
+
33
+ Saved `handoffs` provide a structured account of each reported `run`.
34
+ The `builder` reports its outcome, `probe` results, notes, and any `escalation` questions.
35
+ The `verifier` reports its independent checks, results, and `findings`.
36
+ Recorded `owner` decisions explain how questions and issues were resolved. Earlier numbered reports remain available for inspection.
37
+
38
+ For example, the `owner` can read `B1.json` to see what the `builder` reports implementing and which `probes` it ran. `V1.json` shows what the `verifier` reports checking independently and which issues it found.
26
39
 
27
40
  ## Main flow
28
41
 
@@ -2,6 +2,146 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.78.0] - 2026-10-12
6
+
7
+ ### Highlights
8
+
9
+ - Background subagents work on Pi 1.2.0 again. With 0.77.0 they failed to start on that Pi version.
10
+ - Pressing `Esc` now keeps the parent agent stopped: a background subagent that finishes a moment later no longer starts it up again. `/subagents-stop` can also stop every running background subagent at once.
11
+ - Fewer tokens spent re-reading the conversation: forked subagents, staged resumes, and the resume after `/compact` now reuse the provider's prompt cache.
12
+ - Reports are no longer lost. Resuming a run saves a new report next to the old one instead of overwriting it, and a timed-out child's partial output now reaches the parent.
13
+ - Sessions that run workflows no longer run out of background run slots after a child is stopped or fails to launch.
14
+
15
+ ### Added
16
+
17
+ - New `pinToolDeclarations` config key. A long-running session keeps the `subagent` tool definition it started with, so an edited `subagent-tool-description.md`, a `toolDescriptionMode` change, or a package upgrade did not reach it until you started a new session. Set `pinToolDeclarations: false` (the default is `true`) and a resumed session picks up the current definitions on its next restart, at the cost of one prompt-cache miss. Thanks to [@advaitpaliwal](https://github.com/advaitpaliwal) for [#2853](https://github.com/nicobailon/pi-subagents/pull/2853). ([#2852](https://github.com/nicobailon/pi-subagents/issues/2852))
18
+ - New `activeRunsPrompt` config key, off by default. A parent agent heard about its background subagents only from completion notices or a `status` call, so a few turns later it could forget one was running, launch the same work again, or say nothing was running. With this on, the parent's system prompt lists each queued or running background run (id, agents, mode, and chain step) until the last one finishes. Thanks to [@advaitpaliwal](https://github.com/advaitpaliwal) for the request. ([#2831](https://github.com/nicobailon/pi-subagents/issues/2831))
19
+
20
+ ### Changed
21
+
22
+ - After you press `Esc` to stop the parent, a background subagent that finishes or asks for input no longer starts a new parent turn, so the agent you just stopped stays stopped. Its result or request is added to the session, and the parent sees it with your next prompt. A completion notice added this way tells the parent not to resume the stopped task unless you ask. Background runs keep running, and the TUI shows how many are still active and points to `/subagents-stop`.
23
+ - `/subagents-stop` now starts with a "stop all" row when two or more background runs from this session are active, so you can stop them all after one confirmation instead of one at a time. Scheduled runs are not paused.
24
+ - A forked subagent's first request re-sent the parent's whole conversation without the prompt cache, because the child's tools and history differed from the parent's. A forked child now declares the same tools as its parent (a tool it may not use fails with "not found" if called) and inherits the history exactly as the parent sent it. A session with the `subagent` tool also declares `contact_supervisor`, which returns an error if the parent calls it. A fork launched through `subagent` can now reuse the parent's prompt cache; one launched by a slash command before `subagent` is enabled still starts uncached. A session that already has `subagent` when you update may miss the prompt cache once, on its next request.
25
+ - The built-in `reviewer`, `oracle`, and `evidence-auditor` agents are no longer asked to end with an acceptance report when the call has no `acceptance`, since that report is meant for agents that edit files. Pass `acceptance` to still get one. Without it these runs have no child report, so `/subagents-refine` no longer sees their review findings. Thanks to [@8FAX](https://github.com/8FAX) for finding it. ([#2865](https://github.com/nicobailon/pi-subagents/issues/2865))
26
+ - pi-subagents no longer writes `run-history.jsonl`. The file got one line per run, grew without limit, and nothing read it. You can delete an existing `run-history.jsonl` from your Pi agent directory (`~/.pi/agent/` or `PI_CODING_AGENT_DIR`). Thanks to [@nycruslan](https://github.com/nycruslan) for the report. ([#2864](https://github.com/nicobailon/pi-subagents/issues/2864))
27
+ - The pi-subagents skill now says that `worktree: true` refuses to launch from a checkout with uncommitted or untracked changes, and what to do in a shared or dirty checkout. Agents used to learn this only from a failed launch. Thanks to [@jmclaughlin724](https://github.com/jmclaughlin724) for the report. ([#2851](https://github.com/nicobailon/pi-subagents/issues/2851))
28
+
29
+ ### Fixed
30
+
31
+ - Background subagents failed to start on Pi 1.2.0 with "does not provide @earendil-works/chord, @earendil-works/chord/context". Pi 1.2.0 no longer ships that package, but pi-subagents required it on every Pi from 0.85 on. It is now required only when the installed Pi declares it. Thanks to [@tlitovsk](https://github.com/tlitovsk) and [@amchen2310](https://github.com/amchen2310) for the reports, and to [@ArdalanM](https://github.com/ArdalanM) for the fix. ([#2854](https://github.com/nicobailon/pi-subagents/issues/2854), [#2855](https://github.com/nicobailon/pi-subagents/pull/2855))
32
+ - A finished workflow kept its `maxActiveAsyncRunsPerSession` slot for the rest of the session, so later launches were rejected, when one of its background children had been stopped or had finished after the Pi process that launched it exited. Such a workflow is now released after `capacity.abandonedSlotReleaseAfterMs`, the same as one whose child failed. Top-level runs still release this way only when they failed. Thanks to [@nycruslan](https://github.com/nycruslan) and [@builtroller](https://github.com/builtroller) for the reports. ([#2863](https://github.com/nicobailon/pi-subagents/issues/2863))
33
+ - An async workflow kept its `maxActiveAsyncRunsPerSession` slot for as long as its session lived when one of its children failed to launch, for example because of an unknown model. The slot is now released once the workflow ends. Thanks to [@nycruslan](https://github.com/nycruslan) for the report and the fix. ([#2856](https://github.com/nicobailon/pi-subagents/issues/2856))
34
+ - A child stopped by a hard `toolBudget` block was not reported as blocked. A delegated foreground run said `completed` instead of `tool_budget_exhausted`, a workflow child got no `budget_exhausted` outcome, a background run's live status never showed the block, and the notice about a child repeatedly failing to change files never appeared. Tool results are now read the way Pi reports them. Thanks to [@adameq](https://github.com/adameq) for the report and the diagnosis. ([#2846](https://github.com/nicobailon/pi-subagents/issues/2846))
35
+ - A `toolBudget` state reported `outcome: "hard-blocked"` as soon as the tool count passed `hard`, even when `block` listed only some tools and none had been blocked. It now reports `hard-reached` until a call is actually blocked, then `hard-blocked` with `blockedTool`. Thanks to [@adameq](https://github.com/adameq) for spotting it. ([#2866](https://github.com/nicobailon/pi-subagents/issues/2866))
36
+ - A child resumed for a later stage with a new output path re-sent its whole conversation without the prompt cache, because the output path was part of its system prompt. Through `pi-claude-bridge`, one staged run re-cached about 1.65M tokens this way. The output path now goes only in the task message, so the system prompt stays the same across stages.
37
+ - After a manual `/compact` with background subagents still running, the parent's next turn went out without the prompt sections that extensions add at the start of a turn, so the provider re-read the whole conversation without its prompt cache. Pi reports the compaction before it is ready for a new turn ([earendil-works/pi#5581](https://github.com/earendil-works/pi/issues/5581)). The resume now waits until the parent is idle, and it is dropped if another turn starts first, the session ends, or the parent is still busy after 10 seconds. Thanks to [@rnavarro](https://github.com/rnavarro) for [#2812](https://github.com/nicobailon/pi-subagents/pull/2812).
38
+ - `subagent({ action: "resume", id, message })` without `output` reused the original run's output path, so the revived run overwrote the earlier report. A resume without its own `output`, including a `steer` that revives a finished child, now saves to a new file next to the original, named with the new run id (for example `report.1a2b3c4d.md`), and its completion notice names that file. An explicit `output` still wins, and resumes inside a workflow script still use the workflow's own output paths. ([#2837](https://github.com/nicobailon/pi-subagents/issues/2837))
39
+ - A workflow stage that resumed a run started outside the workflow, without its own `output`, wrote its report over that run's saved report. It now writes to its own default output path, so the earlier report is kept. ([#2839](https://github.com/nicobailon/pi-subagents/issues/2839))
40
+ - A background run with a required `file-only` output and valid structured output failed with "Required file-only output was not produced" when its final message held only an acceptance report, and the JSON was never written. It is now written. If a required `file-only` output cannot be written, for example because of a permission error, the run now fails instead of finishing with the report inline. Thanks to [@8FAX](https://github.com/8FAX) for the fix. ([#2850](https://github.com/nicobailon/pi-subagents/pull/2850))
41
+ - When a background child timed out mid-reply, the completion notice and `status` showed only `Subagent timed out after …ms.`, so the parent never saw the text the child had already written. The notice now shows the first 2,000 characters of that partial output and the path of the file with the full text, followed by the child's recovery summary. Thanks to [@advaitpaliwal](https://github.com/advaitpaliwal) for [#2830](https://github.com/nicobailon/pi-subagents/pull/2830). ([#2829](https://github.com/nicobailon/pi-subagents/issues/2829))
42
+ - Since 0.77.0, apps that run Pi in RPC mode and can draw custom screens, such as pi-web, got the plain-text version of `/subagents-fleet`, `/subagents-stop`, and the `/subagents` model and thinking pickers. Such an app can now set `PI_SUBAGENTS_COMPONENT_UI=1` to get the full screens; plain RPC keeps the text version. Thanks to [@kushaldotdev](https://github.com/kushaldotdev) for the report and the fix. ([#2848](https://github.com/nicobailon/pi-subagents/issues/2848))
43
+ - Every workflow script that launched children in a loop or from its `args` printed a `workflowScript contains dynamic child launches` warning across Pi's input area on each run, although that is the normal way to write a fan-out. Launches no longer print it; `subagent({ action: "validate" })` still lists it under `warnings`. Thanks to [@builtroller](https://github.com/builtroller) for the report and the first fix, and to [@VincentHanxiaoDu](https://github.com/VincentHanxiaoDu) for removing it from launches. ([#2835](https://github.com/nicobailon/pi-subagents/issues/2835), [#2847](https://github.com/nicobailon/pi-subagents/pull/2847))
44
+ - FleetView printed external-run problems, such as `Failed to inspect external jobs: …`, straight over Pi's screen and repeated them on every refresh. In an interactive session each distinct message is now shown once as a TUI warning, and headless runs print it once. A malformed record is now named by its run id. ([#2844](https://github.com/nicobailon/pi-subagents/issues/2844))
45
+ - Opening Pi in a directory whose path contains a non-breaking space logged `Failed to inspect external jobs: External-run snapshot sessionId must contain only display-safe text.` on every refresh. Run and session ids may now contain any text except terminal control, bidirectional, and line-break characters. Thanks to [@louisje](https://github.com/louisje) for the report and the diagnosis. ([#2841](https://github.com/nicobailon/pi-subagents/issues/2841))
46
+ - Workflow scripts that called `Promise.all`, `Promise.allSettled`, `Promise.race`, `Promise.any`, or `Promise.resolve` failed with a "Proxy handler's 'get' result …" error on Pi builds that freeze `Promise`, such as pi-bolt. They now work there. Thanks to [@albertgwo](https://github.com/albertgwo) for [#2828](https://github.com/nicobailon/pi-subagents/pull/2828).
47
+ - Stopping a background subagent with `subagent({ action: "stop" })` produced a notice saying `Subagent stopped by user.` even when the parent agent stopped it, so it read as if you had stepped in. Stop notices for background runs, external CLI runs, and workflow children now say `Subagent stopped.`, `Placed external run stopped.`, or `Workflow child '<key>' stopped.` ([#2826](https://github.com/nicobailon/pi-subagents/issues/2826))
48
+ - When an extension in a background child switched its model, for example a model router acting on the first message, status and FleetView kept naming the launch model. In one session, 14 of 15 children ran on a different model than status showed. Status now names the model the child's replies came from. Reviving the child still starts it on the launch model. Thanks to [@dodo-robot](https://github.com/dodo-robot) for the report and the fix. ([#2824](https://github.com/nicobailon/pi-subagents/issues/2824))
49
+ - A child launched on a virtual model registered with `pi.registerVirtualModel()` failed with "model not found" when the extension that registers it was not loaded in the child, and the explanation suggested the model should have resolved. The explanation now says foreground children inherit providers but not virtual models, and names the fix, `registerRequiredChildExtensions`, next to the agent frontmatter options. Thanks to [@toomanyopenfiles](https://github.com/toomanyopenfiles) for the report. ([#2820](https://github.com/nicobailon/pi-subagents/issues/2820))
50
+ - When a background run kept failing to read its control inbox, such as the `EPERM` errors seen on Windows, it wrote the same stack trace to `runner.stderr.log` on every retry and could fill gigabytes in minutes. A repeating error is now logged once, then once a minute with a repeat count. Retries continue, so queued requests still arrive once the inbox can be read. Thanks to [@infectiousstupidity](https://github.com/infectiousstupidity) for the report. ([#2811](https://github.com/nicobailon/pi-subagents/issues/2811))
51
+ - A child whose structured output used a value outside a schema's `enum` or `const` got only "must be equal to one of the allowed values" or "must be equal to constant". The error now names the allowed values, up to 20 for a long `enum`. Thanks to [@rtbe](https://github.com/rtbe) for the report. ([#2813](https://github.com/nicobailon/pi-subagents/issues/2813))
52
+
53
+ ## [0.77.0] - 2026-10-09
54
+
55
+ ### Highlights
56
+
57
+ - Subagents cost the parent far fewer tokens. The `subagent` tool's schema and description dropped from about 18,700 to 3,300 characters per request, `bg_wait` from about 4,500 to 1,100, and the bundled role prompts are about 20% shorter. Long child reports and guide pages now arrive as a short preview plus a file path instead of the full text.
58
+ - Upgrading pi-subagents no longer costs resumed sessions their prompt cache, and upgrading under a running Pi no longer breaks every child launch.
59
+ - Fewer wasted parent turns: launch an agent by name and a wrong agent or model name comes back with suggestions, the new built-in `parallel` workflow runs a batch of children without a script, and a parent woken by a result handles it instead of going quiet.
60
+ - Background children can run inside a sandbox with `launcher:`, terminals such as Ghostty show each run's state, and tmux users get a bundled inspector pane.
61
+ - A session that declined project trust no longer takes models, agents, or settings from that project.
62
+
63
+ ### Added
64
+
65
+ - Running independent subagents in parallel needed a JavaScript workflow script that the model had to write in its reply, and some parents had to save it to a file first. The built-in `parallel` workflow takes the children as data: `subagent({ workflow: "parallel", args: { tasks: [{ agent, task }, ...] } })` runs them in one batch and returns each child's output in order. The tool schema is unchanged. ([#2773](https://github.com/nicobailon/pi-subagents/issues/2773))
66
+ - Background children could run in a sandbox only through an external CLI runner, which loses native steering and results. An agent can now set `launcher:` to a command from the user config's `runnerLaunchers`, such as a sandbox, and that command wraps its background runner. Steering, supervisor questions, stop, resume and results keep working. Thanks to [@aaronkyriesenbach](https://github.com/aaronkyriesenbach) for the idea, design and nono testing. ([#2577](https://github.com/nicobailon/pi-subagents/issues/2577))
67
+ - A terminal could not tell which background subagent runs were working, waiting on you, finished, or failed without reading the screen. Each run's state is now reported with OSC 7501, the Program Status Protocol, which terminals such as Ghostty can show next to Pi's own status. Set `programStatus: false` or `PI_PROGRAM_STATUS=0` to turn it off. ([#2724](https://github.com/nicobailon/pi-subagents/issues/2724))
68
+ - Fleet's `Enter`/`H` inspector needed Herdr or Ghostty, so tmux users had to write their own provider. A bundled `tmux` inspector now opens the read-only inspector in a split pane of the current tmux window, with status and close support. Thanks to [@tobymao](https://github.com/tobymao) for the plugin. ([#2719](https://github.com/nicobailon/pi-subagents/pull/2719))
69
+ - The async widget under the editor gives each active background run two or more lines while the terminal has room, and `asyncWidgetCollapsed: true` folds it to a count that names no run. Set `asyncWidgetLayout: "rows"` to show a header and one line per run; clicking the header still folds the widget, and Pi's expand key still shows the details. Thanks to [@pwguler](https://github.com/pwguler) for [#2738](https://github.com/nicobailon/pi-subagents/pull/2738).
70
+ - Session browsers and usage tools could link a subagent run to the session that launched it only by parsing the directory layout. A new child session's header now records the launching session's file as `parentSession`, the same field Pi writes for forks, and the run's `_meta.json` records `parentSessionId`. Thanks to [@yingzhi0808](https://github.com/yingzhi0808) for the request. ([#2763](https://github.com/nicobailon/pi-subagents/issues/2763))
71
+ - A host that shows subagent activity could not tell which run a `subagent-notify` completion notice belonged to without parsing its text. Each entry in the notice's `details.runs` now carries the run id (`runId`, plus `workflowRunId` and per-child `childRuns` for workflows), status, duration and saved paths. The text the model sees is unchanged. Thanks to [@kushaldotdev](https://github.com/kushaldotdev) for the request. ([#2788](https://github.com/nicobailon/pi-subagents/issues/2788))
72
+
73
+ ### Changed
74
+
75
+ - The `subagent` tool sent about 13,000 characters of parameter schema on every model request, mostly for management fields a typical delegation never uses. The schema now lists `agent`, `task`, `workflow`, `args`, `async`, `model`, `cwd`, `worktree`, `output`, `action`, `id` and `message` at the top level and every other field inside one `options` object, which cuts it to about 2,100 characters. Management fields and the `runId`, `maxRuntimeMs` and `isolation` aliases still work at the top level, so existing calls and resumed sessions are unaffected. An unknown `options` key gets the closest valid name, and a field given in both places with different values is rejected. Docs, guides, skills and the run hints in tool results now show `options`. ([#2767](https://github.com/nicobailon/pi-subagents/issues/2767))
76
+ - The default `subagent` tool description took about 5,700 characters on every model request, and the rule about when delegation is allowed appeared three times. The description is now about 1,200 characters and states each rule once: how to call the tool, that async runs wake the parent on their own, one writer per worktree, and not to silently switch to another runner after a failure. It points to the guide for workflow scripts, resume and external CLIs. The tool no longer registers a prompt guideline, and its prompt snippet no longer repeats the delegation rule. `toolDescriptionMode: "full"` keeps the old detail inline. ([#2768](https://github.com/nicobailon/pi-subagents/issues/2768))
77
+ - The `bg_wait` tool's description and parameters took about 4,500 characters on every model request, and each of its five parameters repeated that ordinary async runs already wake the session. They now take about 1,100 characters: the description says it once and lists the call shapes, and each parameter has a short label. ([#2769](https://github.com/nicobailon/pi-subagents/issues/2769))
78
+ - The `subagent` tool description told the parent to call `{action:"list"}` before delegating and `{action:"models"}` before choosing a model, which cost an extra parent turn each time plus 1,300–2,000 tokens that stayed in history. It now says to launch by name with an exact `provider/id`. An unknown or disabled agent fails with a "did you mean" and the available agents with one-line descriptions (at most 30). An unknown or ambiguous model fails with up to 5 of the closest model ids. `list` and `models` still work on demand. ([#2771](https://github.com/nicobailon/pi-subagents/issues/2771))
79
+ - The catalog of agents marked `advertise: true` also told the parent to call `{action:"list"}` before every delegation. Now that a launch with an unknown agent returns the available agents, new sessions no longer get that instruction. A resumed session keeps the catalog text it already has, so the upgrade does not change its prompt or cost it the provider's prompt cache. ([#2791](https://github.com/nicobailon/pi-subagents/issues/2791))
80
+ - Changing a pi-subagents tool description, schema, prompt snippet, or guideline made every resumed or reloaded session re-declare that tool before its next request, so the provider re-read the whole conversation without its prompt cache. The `subagent`, `bg_wait` and `subagents_enable` tools, and a child session's `bg_wait` and fanout `subagent`, now keep the definition and prompt text the session already declared. Only sessions that never declared a tool get its current definition. ([#2778](https://github.com/nicobailon/pi-subagents/issues/2778))
81
+ - Every turn of a child launched with a bundled role resent its full role prompt, and those prompts repeated their own rules and the supervisor instructions that are already appended. The `oracle`, `reviewer`, `worker`, `researcher` and `scout` prompts drop the repeats and keep every rule, going from 21,283 to 17,139 characters in total (oracle 6,059 → 4,789, reviewer 5,211 → 4,443, worker 4,296 → 3,083). ([#2775](https://github.com/nicobailon/pi-subagents/issues/2775))
82
+ - Async completion notices, completed-run `status` and foreground results put a child's whole output into the parent's context (about 38,000 characters for one long report), and every async launch receipt repeated about 870 characters of waiting guidance. They now show the first 2,000 characters of a longer output followed by the path, size and line count of the file that holds all of it; output with no such file stays whole. Workflow child previews are capped at 2,000 characters, structured-output previews in `status` at 500 when a path line follows, failure notices now include an `Error:` line even when the child produced output, and the receipt guidance is two short lines. ([#2774](https://github.com/nicobailon/pi-subagents/issues/2774))
83
+ - `subagent({action:"guide",topic})` returned a whole document, up to 62 KB for `tool-reference`, and that text stayed in the parent's history for every later turn. A docs-backed topic now returns its intro and a list of sections, and `topic: "<topic>/<section>"` returns one section of at most 8,000 characters. `overview` and `council` are unchanged. ([#2772](https://github.com/nicobailon/pi-subagents/issues/2772))
84
+ - Each message pi-subagents put in the main chat had its own look: bordered cards for supervisor requests, replies and attention notices, `✓`/`✗` lines for completions, plain colored lines for steering, and Pi's default block with raw labels such as `[subagent-wait-subscription]` for reminders and wakes. They now all use Pi's own message block, the one behind `[skill]`: a single `[subagent]` line whose label color names the kind (supervisor question or attention, reply, result, or watchdog) and whose status word uses the theme's status color. A click opens one block and Pi's expand key opens them all, showing the text the main agent read. Thanks to [@pwguler](https://github.com/pwguler) for [#2753](https://github.com/nicobailon/pi-subagents/pull/2753).
85
+ - Subagent model displays (Fleet, the async widget, run status, nested renders and result cards) showed only the model id, so two providers or logins serving the same model looked identical. They now show `provider/model`. Thanks to [@IdrisGit](https://github.com/IdrisGit) for [#2734](https://github.com/nicobailon/pi-subagents/pull/2734).
86
+
87
+ ### Fixed
88
+
89
+ - A session that declined Pi project trust still took subagent models, `modelScope` and agent definitions from the project, although Pi loads nothing from an untrusted project's `.pi` directory. Such a session now ignores project subagent settings, project agents and chains, and agents from packages installed for the project or declared in its `package.json`. The default scope behaves as `user`, and an explicit `agentScope: "project"` is rejected. Public preflight takes `projectTrusted` to match. Thanks to [@Saturnoon](https://github.com/Saturnoon) for the report. ([#2764](https://github.com/nicobailon/pi-subagents/issues/2764))
90
+ - In a session that declined project trust, a malformed project `.pi/settings.json` still made subagent discovery and launch checks fail with "Failed to parse settings file", and a project's `agentExcludeDirs` could still hide user agents. An untrusted lookup now reads nothing from the project's settings; trusted lookups still report a broken file. ([#2804](https://github.com/nicobailon/pi-subagents/issues/2804))
91
+ - After pi-subagents was upgraded under a running Pi session, every child launch could fail at once with "Extension path does not exist" or MODULE_NOT_FOUND, because the paths of the child runtime extensions and the async runner kept the file extension (`.ts` or `.js`) of the copy loaded at startup. They are now found on disk at each launch, preferring `.js`. Thanks to [@barjatiyasaurabh](https://github.com/barjatiyasaurabh) for the fix ([#2761](https://github.com/nicobailon/pi-subagents/pull/2761)) and [@gitwyy](https://github.com/gitwyy) for the report. ([#2780](https://github.com/nicobailon/pi-subagents/issues/2780))
92
+ - A parent could wake for a supervisor decision or a finished workflow, reply with nothing, and leave the delegated work unhandled until you sent another message. The wake message now asks the parent to handle the result within the authority it already has. If it still replies with nothing, it gets one more turn and then a short notice that the work is unhandled, never an automatic approval. A visible reply, including a question to you, does not force another turn. Thanks to [@CamAnNguyen](https://github.com/CamAnNguyen) for [#2716](https://github.com/nicobailon/pi-subagents/pull/2716).
93
+ - When a subagent notice and an intercom message reached an idle parent at the same moment, both extensions started a turn, and the second failed with `Extension "<runtime>" error: Agent is already processing a prompt`. pi-subagents and pi-intercom now share one wake per session, so the second message joins the turn the first one starts. This needs the matching pi-intercom release.
94
+ - A message you typed while a blocking `bg_wait` was open sat in Pi's queue until the wait ended, which could take the whole wait window (30 minutes by default). A steer or follow-up from you now ends the wait with a non-error `user_input` result that lists the work still running; the work keeps going. Messages sent by extensions do not end the wait. Thanks to [@nuzayets](https://github.com/nuzayets) for [#2736](https://github.com/nicobailon/pi-subagents/pull/2736).
95
+ - A scheduled run whose async runner died before writing a final status kept its schedule's claim, so every later fire was recorded as `skipped_overlap` and the schedule did nothing until someone deleted its `active.lock`. A fire that overlaps an active run, and a session that restores the schedule, now check whether that run is still alive: when its process is gone, or its status has not changed for 24 hours, the run is recorded as `failed_run` with the reason and the due fire launches. A run whose runner is alive is still skipped. Thanks to [@kmatzen](https://github.com/kmatzen) for the report and the first fix. ([#2806](https://github.com/nicobailon/pi-subagents/issues/2806))
96
+ - Starting Pi in the home directory failed with "Project schedule root ... resolves outside the real project" when `~/.pi` was a symlink to a directory outside home, such as a mounted drive. When the project is the home directory, the real user config directory is now accepted as a schedule root; a project `.pi` that links outside its project is still rejected. Thanks to [@mecha](https://github.com/mecha) for the report. ([#2737](https://github.com/nicobailon/pi-subagents/issues/2737))
97
+ - A host still handling a background run's paused result could delete or overwrite the final result written after it under the same run id, or remove that run's session, run and mission indexes. When the final result could not replace the paused file (EPERM/EACCES), it was delivered over and over without completing. Results are now written and consumed under a per-run lock, and a consumer leaves alone any result written after it read the run, along with its indexes. ([#2744](https://github.com/nicobailon/pi-subagents/issues/2744))
98
+ - When a workflow awaited an async child, it could read the child's result before the child had written its index entries, so those entries were written after the workflow cleaned up and stayed behind in the child's run directory. A child now writes all index entries before its result becomes readable. ([#2741](https://github.com/nicobailon/pi-subagents/issues/2741))
99
+ - A foreground child that detached to ask its supervisor kept running after a reload or session switch. Status and resume then said "Async run not found", and its workflow showed as stopped. Reloading pi-subagents now stops each detached foreground child and records it as stopped, so status shows the stop and its cause, resume works from its session, and its pending supervisor question is closed. Thanks to [@Saturnoon](https://github.com/Saturnoon) for the report. ([#2762](https://github.com/nicobailon/pi-subagents/issues/2762))
100
+ - Interrupting a run id that could not be resolved interrupted the newest unrelated running job instead, and a nested async child whose owner had no foreground route to it could not be interrupted at all. An explicit interrupt id now fails when it does not resolve (a bare interrupt still picks the newest run), and an interrupt the owner cannot route now goes to the nested child directly. Thanks to [@leopepe](https://github.com/leopepe) for the fix ([#2760](https://github.com/nicobailon/pi-subagents/pull/2760)).
101
+ - RPC stop refused queued and paused async runs, which the `subagent` tool's own stop action already handles. RPC stop now follows the tool's stop rules, with the same session and process checks. Thanks to [@alexei-led](https://github.com/alexei-led) for the fix (split from [#2717](https://github.com/nicobailon/pi-subagents/pull/2717)).
102
+ - An RPC client that lost the spawn reply for a direct async run could not find the run by its tool-call ID once the result was delivered. Direct runs now keep the tool-call ID for status lookup after delivery, and an ID shared by a live run and a finished run is reported as ambiguous. Thanks to [@alexei-led](https://github.com/alexei-led) for [#2717](https://github.com/nicobailon/pi-subagents/pull/2717).
103
+ - Over Pi's RPC mode, the `/subagents` admin screen's "Change model" and "Change thinking level", `/subagents-fleet` and `/subagents-stop` closed with no screen and no message, because RPC mode has no custom UI. These screens now use their component only in the TUI; elsewhere they use a select prompt or text instead. Thanks to [@gelubodrug](https://github.com/gelubodrug) for the report. ([#2766](https://github.com/nicobailon/pi-subagents/issues/2766))
104
+ - A mission created through one path to a project was "not found" by `mission.show`, `mission.list` or a `missionId` launch through another path to the same directory, such as `/tmp/x` and its real path `/private/tmp/x` on macOS. The default mission store is now keyed by the project's real path, so symlinks, junctions and, on case-insensitive filesystems, letter case no longer split it; a configured `directory` or `globalIndexDir` still expands against the path as given. Missions created before this change through a path other than the real one stay on disk but are no longer found through that path. Thanks to [@hughy](https://github.com/hughy) for the report and the fix ([#2785](https://github.com/nicobailon/pi-subagents/pull/2785)). ([#2783](https://github.com/nicobailon/pi-subagents/issues/2783))
105
+ - When TypeBox was installed only in Pi's own dependencies, every `structured_output` call failed with "Cannot load typebox/compile for structured output validation" unless `PI_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT` was set. Validation now also looks for TypeBox in the running Pi's package. Thanks to [@Saturnoon](https://github.com/Saturnoon) for the report. ([#2765](https://github.com/nicobailon/pi-subagents/issues/2765))
106
+ - Pruned fork context failed with `400 MissingSessionID` when `forkContext.model` was an OpenCode or OpenCode Go model, because the summary request carried no session id. It now sends the parent session id and the `x-opencode-session` header, as the watchdog and prompt-audit requests do. ([#2759](https://github.com/nicobailon/pi-subagents/issues/2759))
107
+ - The `subagent` tool schema marked the `reviewed` value of `acceptance` with `deprecated: true`, which strict tool-schema validators reject with HTTP 400, so the tool failed on those providers. The schema no longer includes `deprecated`. Thanks to [@kingofdies](https://github.com/kingofdies) for the report. ([#2713](https://github.com/nicobailon/pi-subagents/issues/2713))
108
+ - Background children failed within a second with "Request timed out" on networks where connecting to the provider takes longer than 250 ms. The background runner used Node's 250 ms per-address connection limit, while Pi uses 2 s; the runner now uses 2 s too. Thanks to [@robinchm](https://github.com/robinchm) for the report and the fix. ([#2758](https://github.com/nicobailon/pi-subagents/issues/2758))
109
+ - A foreground child whose model comes from a provider that a parent extension registered gets the provider but not that extension's session hooks, so a provider that needs those hooks failed the first request with an error only the provider understood. That failure now also says the child ran in the foreground without the extension and names the fixes: `async: true`, or loading the extension for that agent. Thanks to [@tharanee-bit](https://github.com/tharanee-bit) for the report. ([#2730](https://github.com/nicobailon/pi-subagents/issues/2730))
110
+ - Prompt sections that other extensions add in `before_agent_start` reached a child's transcript but not its provider requests, because the child prompt was finished before those extensions ran. The child's prompt now keeps their sections and adds its own boundary after every other extension. Thanks to [@adameq](https://github.com/adameq) for the report. ([#2745](https://github.com/nicobailon/pi-subagents/issues/2745))
111
+ - Every workflow script failed before its first line with "Cannot redefine property: then" (or "Attempting to change value of a readonly property") when the host Pi build froze `Promise.prototype` everywhere, including the workflow sandbox. The runner now works with a frozen `Promise.prototype` and still catches children that were never awaited. Thanks to [@albertgwo](https://github.com/albertgwo) for [#2793](https://github.com/nicobailon/pi-subagents/pull/2793).
112
+ - A workflow script failed with "emit.<field> must be a JSON value; received undefined" when it emitted an object with an undefined field, such as a child result's missing `outputPathMapping`, although `return` accepted the same object. `emit` now drops undefined object fields and turns undefined array entries into `null`, as `return` does, and workflow script errors report the script's own line numbers instead of one line later. Thanks to [@vip0351](https://github.com/vip0351) for [#2751](https://github.com/nicobailon/pi-subagents/issues/2751).
113
+ - A workflow stage that resumed an earlier stage without its own `output` reused the earlier stage's report path, so it failed before launch when the earlier stage ran in the background, and overwrote the earlier report otherwise. It now writes to its own default report path. ([#2711](https://github.com/nicobailon/pi-subagents/issues/2711))
114
+ - A background workflow's child rows showed no token usage or turn count, although each child's own status had them and the workflow total was their sum. Each child row now shows the usage and turn count from that child's result. Thanks to [@moxuun](https://github.com/moxuun) for the report. ([#2715](https://github.com/nicobailon/pi-subagents/issues/2715))
115
+ - A long-running foreground child re-formatted every past tool call on each progress update, although progress shows only the latest 64, so each update got slower as the child's history grew. Progress updates now format only those 64 calls. ([#2704](https://github.com/nicobailon/pi-subagents/issues/2704))
116
+ - Fleet reread and re-rendered the selected transcript every 750 ms even when it had not changed, which took hundreds of milliseconds per refresh for a long transcript. It now reuses the rendered transcript until the file, selection, width or tool view changes. ([#2705](https://github.com/nicobailon/pi-subagents/issues/2705))
117
+ - A Herdr-placed Pi child's bridge kept every frame it received, so a healthy run failed and started reconnecting after its 1,024th frame. Frames are now released once the session has taken them. ([#2706](https://github.com/nicobailon/pi-subagents/issues/2706))
118
+ - Two inspector opens for the same run or child at once, for example from Fleet and a tool call or from two Pi processes, could each open a pane and save a binding, so one pane could no longer be reached by `inspector.status` or `inspector.close`, and a close racing an open could miss the pane the open created. Open and close for the same run or child now wait for each other, across processes too. ([#2727](https://github.com/nicobailon/pi-subagents/issues/2727))
119
+
120
+ ## [0.76.1] - 2026-10-05
121
+
122
+ ### Highlights
123
+
124
+ - When a subagent result wakes an idle parent, that run keeps the subagent list, MCP servers, and other extensions' prompt sections, and no longer churns the provider's prompt cache.
125
+ - Updating pi-subagents while Pi is running now stops `/reload` with a clear "restart Pi" error instead of running a mix of old and new code.
126
+ - In Herdr, a child asking its parent agent for help no longer turns the pane red.
127
+ - `stop` works on a paused run whose result was already delivered, and `subagent doctor` now shows the same async capacity that launches use.
128
+ - Reloading extensions while a child's result is waiting no longer lets a host such as pi-web lose that result.
129
+
130
+ ### Changed
131
+
132
+ - The npm package now has the `extension` keyword, so Pi's extension catalog lists pi-subagents under Extensions instead of Unlabelled.
133
+
134
+ ### Fixed
135
+
136
+ - When a subagent result, supervisor question, or other notice woke an idle parent, the run it started skipped Pi's normal prompt setup. From its second request on, it lost the subagent list, the MCP server list, and other extensions' prompt sections, and the changing prompt could invalidate the provider's prompt cache. The parent now gets the notice followed by a short `Subagent updates above.` message, which starts the run the normal way. Thanks to [@ashlineldridge](https://github.com/ashlineldridge) for [#2688](https://github.com/nicobailon/pi-subagents/issues/2688).
137
+ - Reloading extensions while a child's result was waiting in Pi's queue made the session look idle, so a host such as pi-web could replace the session and lose the result. The session now stays busy until Pi picks up the result. Thanks to [@brettinternet](https://github.com/brettinternet) for [#2687](https://github.com/nicobailon/pi-subagents/pull/2687).
138
+ - After pi-subagents was updated while Pi was running, `/reload` ran a mix of old and new code and failed with errors such as `completionNotifier.messageStarted is not a function`. Node cannot reload a module it has already imported, so loading now stops with an error that names both versions and asks you to restart Pi. Thanks to [@TheAsda](https://github.com/TheAsda) for [#2695](https://github.com/nicobailon/pi-subagents/issues/2695).
139
+ - Child system prompts started with pi-subagents' own instructions instead of Pi's base prompt. Providers and extensions that recognize Pi's default prompt by its first sentence then sent `systemPromptMode: append` children Pi's whole prompt unchanged. Pi's prompt now comes first. ([#2692](https://github.com/nicobailon/pi-subagents/issues/2692))
140
+ - When a per-tool timeout stopped a foreground child, its output said `Subagent timed out after <run timeout>ms.` (or `0ms` when no run timeout was set), naming a deadline that never fired. It now names the tool timeout, for example `Tool 'find' exceeded its timeout of 300000ms.` Thanks to [@mannainsect](https://github.com/mannainsect) for [#2691](https://github.com/nicobailon/pi-subagents/issues/2691).
141
+ - `stop` failed with `paused result is missing` on a paused run whose result had already been delivered or was never written, and a finished parent workflow kept that run's async capacity slot. When the run's process has exited, `stop` now marks it stopped and the slot is freed. Thanks to [@builtroller](https://github.com/builtroller) for reporting [#2699](https://github.com/nicobailon/pi-subagents/issues/2699).
142
+ - `subagent doctor` could report `usage: 0/3 used` while launches were rejected with `3/3 used`, for example in a session resumed with `pi --session <id>`, because doctor counted a different capacity pool than launches do. It now reads the same pool for both active async capacity and the spawn budget. Thanks to [@builtroller](https://github.com/builtroller) for reporting [#2698](https://github.com/nicobailon/pi-subagents/issues/2698).
143
+ - In Herdr, the pane turned red, which means a person needs to act, whenever an async child needed attention, including a child waiting for its parent agent's answer. Those requests go to the parent agent, so pi-subagents no longer marks the pane blocked; the `⚠` in the pane's subagent label still shows it. Thanks to [@nateberkopec](https://github.com/nateberkopec) for reporting [#2702](https://github.com/nicobailon/pi-subagents/issues/2702).
144
+
5
145
  ## [0.76.0] - 2026-10-04
6
146
 
7
147
  ### Highlights
@@ -110,7 +110,7 @@ For bounded orchestration, `maxSubagentSpawnsPerRun` limits cumulative logical c
110
110
 
111
111
  or ask: "Check whether subagents and intercom are set up correctly."
112
112
 
113
- For installed-version help, use `/subagents-guide [topic]` or `subagent({ action: "guide", topic: "workflows" })`. The default topic is `overview`; available topics are `overview`, `workflows`, `agents`, `missions`, `observability`, `tool-reference`, `configuration`, `models`, `watchdog`, `extension-api`, and `council`.
113
+ For installed-version help, use `/subagents-guide [topic]` or `subagent({ action: "guide", options: { topic: "workflows" } })`. The default topic is `overview`; available topics are `overview`, `workflows`, `agents`, `missions`, `observability`, `tool-reference`, `configuration`, `models`, `watchdog`, `extension-api`, and `council`.
114
114
 
115
115
  ## Documentation
116
116
 
@@ -2,6 +2,7 @@
2
2
  name: evidence-auditor
3
3
  description: Independent evidence reviewer for checking whether important research claims are supported by their sources
4
4
  tools: read, web_search, fetch_content, get_search_content, source_check
5
+ acceptanceRole: read-only
5
6
  thinking: high
6
7
  systemPromptMode: replace
7
8
  inheritProjectContext: true
@@ -3,6 +3,7 @@ name: oracle
3
3
  aliases: advisor
4
4
  description: High-context decision-consistency oracle that protects inherited state and prevents drift
5
5
  tools: read, grep, find, ls, bash
6
+ acceptanceRole: read-only
6
7
  thinking: high
7
8
  systemPromptMode: replace
8
9
  inheritProjectContext: true
@@ -14,40 +15,29 @@ You are the oracle: a high-context decision-consistency subagent.
14
15
 
15
16
  Your primary job is to prevent the main agent from making hidden, conflicting, or inconsistent decisions by treating the inherited forked context as the authoritative contract. You are not the primary executor. You do not silently become a second decision-maker.
16
17
 
17
- Before you do anything else, reconstruct the key inherited decisions, constraints, and open questions from the forked conversation, codebase state, and task. Those decisions form your baseline contract. Preserve them unless there is strong evidence they should be overturned.
18
+ Before anything else, reconstruct the key inherited decisions, constraints, and open questions from the forked conversation, codebase state, and task. They form your baseline contract. Preserve them unless there is strong evidence they should be overturned.
18
19
 
19
20
  Match search scope to the question. For runtime behavior, begin with specific source symbols, types, methods, and paths. For product, plan, policy, or decision drift, treat supplied documents and inherited context as first-class evidence. If source conflicts with docs about runtime behavior, trust source and report the conflict.
20
21
 
21
- If the task asks about asking or consulting the oracle, or asks to ask, consult, discuss with, or come to agreement with the oracle about a plan, design, or architecture decision, treat it as a short live consultation unless the parent explicitly requests a one-shot report. In a first response, return the strongest challenge point or focused follow-up question when a material tradeoff remains, so the parent can resume this same session for one targeted round. A one-shot response remains suitable for an explicit one-shot request, a trivial question, or a fully settled first answer. When runtime bridge instructions provide `contact_supervisor`, ask one focused question or challenge if a material unknown, contradiction, or unapproved decision would make a final recommendation guessy. If no supervisor channel is available, return the best recommendation and name the decision that still needs the main agent.
22
+ If the task asks about asking or consulting the oracle, or asks to ask, consult, discuss with, or come to agreement with the oracle about a plan, design, or architecture decision, treat it as a short live consultation unless the parent explicitly requests a one-shot report. In a first response, return the strongest challenge point or focused follow-up question when a material tradeoff remains, so the parent can resume this same session for one targeted round. A one-shot response suits an explicit one-shot request, a trivial question, or a fully settled first answer.
22
23
 
23
- If you need clarification from the main agent and bridge instructions provide `contact_supervisor`, use it with `reason: "need_decision"` and wait for the reply. Use `reason: "progress_update"` only for concise updates when blocked, explicitly asked for progress, or when a recommendation or concern would benefit from immediate discussion. Keep coordination traffic tight and purposeful. Do not narrate your whole review through `contact_supervisor`.
24
-
25
- Do not send routine completion handoffs. If no coordination is needed, or after needed coordination is answered, return the final oracle recommendation normally. If `contact_supervisor` is unavailable, return the best recommendation and name the decision that still needs the main agent. Use generic `intercom` only when an external intercom provider explicitly supplies that tool and the task identifies a safe target.
24
+ When runtime bridge instructions provide `contact_supervisor` and a material unknown, contradiction, or unapproved decision would make a recommendation guessy, ask one focused question with `reason: "need_decision"` and wait for the reply. Do not guess. Use `reason: "progress_update"` only for concise updates when blocked, when explicitly asked for progress, or when a recommendation or concern would benefit from immediate discussion. Keep coordination traffic tight and purposeful; do not narrate your review through `contact_supervisor` or send routine completion handoffs. If no supervisor channel is available, return the best recommendation and name the decision that still needs the main agent. Use generic `intercom` only when an external intercom provider explicitly supplies that tool and the task identifies a safe target.
26
25
 
27
26
  Core responsibilities:
28
- - reconstruct inherited decisions, constraints, and open questions from the context
29
- - identify drift between the current trajectory and those inherited decisions
27
+ - identify drift between the current trajectory and the inherited decisions, and call out when a proposed move conflicts with an earlier decision or constraint
30
28
  - surface contradictions and hidden assumptions the main agent may be missing
31
- - call out when a proposed move conflicts with an earlier decision or constraint
32
29
  - protect consistency over novelty; prefer the path that honors existing decisions unless the context clearly supports a pivot
33
- - when you do recommend a pivot, explain exactly which prior assumption or decision should be revised and why
34
- - exploit your clean forked context to spot things the main agent may have missed due to context rot, accumulated reasoning, or errors in the original instruction
30
+ - when you recommend a pivot, explain exactly which prior assumption or decision should be revised and why
31
+ - use your clean forked context to spot what the main agent may have missed due to context rot, accumulated reasoning, or errors in the original instruction
35
32
  - look beyond the explicit question and suggest guidance based on the overall agent trajectory, even when not directly asked
36
33
 
37
34
  What you do not do by default:
38
- - do not edit files or write code
35
+ - do not edit files or write code; use `bash` only for inspection, verification, or read-only analysis
39
36
  - do not propose additional parallel decision-makers or new subagent trees unless explicitly asked
40
37
  - do not assume a `worker` implementation handoff is the default outcome
41
- - do not propose broad pivots unless the context clearly supports them
38
+ - do not propose broad pivots unless the context clearly supports them; prefer narrow, specific corrections to the current path over rewriting the whole plan
42
39
  - do not continue the user conversation directly
43
40
 
44
- Working rules:
45
- - Use `bash` only for inspection, verification, or read-only analysis.
46
- - If information is missing and it matters, ask the main agent with `contact_supervisor` and `reason: "need_decision"` when bridge instructions provide that tool. If no supervisor channel is available, return the best recommendation and name the unresolved decision instead of guessing.
47
- - If the answer depends on a decision the main agent has not made yet, stop and ask with `contact_supervisor` when bridge instructions provide that tool. If no supervisor channel is available, mark the decision as still needed in the final recommendation.
48
- - When bridge instructions are present, send concise coordination messages only when a recommendation, concern, or question would benefit from immediate discussion instead of waiting silently until the final return.
49
- - Prefer narrow, specific corrections to the current path over rewriting the whole plan.
50
-
51
41
  Your output should follow this shape. If no executor handoff is warranted, say so plainly.
52
42
 
53
43
  Inherited decisions:
@@ -57,6 +57,3 @@ Unverified claims and unresolved questions.
57
57
 
58
58
  ## Next steps
59
59
  Only the most useful follow-up research.
60
-
61
- ## Supervisor coordination
62
- If runtime bridge instructions identify a safe supervisor target and you are blocked or need a decision, use `contact_supervisor` with `reason: "need_decision"` and wait for the reply. Use `reason: "progress_update"` only for meaningful progress or unexpected discoveries that change the plan. Do not send routine completion handoffs; return the completed research brief normally.