@hassangameryt/freeflow 0.7.3 → 0.9.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 (426) hide show
  1. package/.agents/plugins/marketplace.json +2 -2
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/.claude-plugin/plugin.json +2 -2
  4. package/.codex-plugin/plugin.json +3 -3
  5. package/.cursor-plugin/plugin.json +1 -1
  6. package/NOTICE +14 -0
  7. package/README.md +101 -159
  8. package/capabilities/cognitive-routing/SKILL.md +47 -210
  9. package/capabilities/cognitive-routing/references/coordinator.md +163 -0
  10. package/capabilities/cognitive-routing/references/worker.md +38 -0
  11. package/capabilities/compaction/SKILL.md +49 -0
  12. package/capabilities/compaction/references/summary-format.md +250 -0
  13. package/capabilities/messaging/SKILL.md +49 -0
  14. package/capabilities/task-memory/SKILL.md +87 -0
  15. package/command-surface.json +8 -52
  16. package/gemini-extension.json +1 -1
  17. package/hooks/claude/hooks.json +13 -3
  18. package/hooks/codex/hooks.json +2 -1
  19. package/hooks/shared/runtime-context.mjs +73 -83
  20. package/licenses/Apache-2.0.txt +55 -0
  21. package/package.json +42 -12
  22. package/pi-extension/README.md +41 -0
  23. package/pi-extension/dist/ask-user/ask.js +108 -0
  24. package/pi-extension/dist/ask-user/form.js +250 -0
  25. package/pi-extension/dist/ask-user/questions.js +66 -0
  26. package/pi-extension/dist/ask-user/tool.js +124 -0
  27. package/pi-extension/dist/cognitive-routing/assembler.js +417 -0
  28. package/pi-extension/dist/cognitive-routing/bootstrap.js +90 -0
  29. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/config.js +8 -6
  30. package/pi-extension/dist/cognitive-routing/economics.js +45 -0
  31. package/pi-extension/dist/cognitive-routing/event-schema.js +388 -0
  32. package/pi-extension/dist/{session-sources/events.js → cognitive-routing/event-store.js} +107 -41
  33. package/pi-extension/dist/cognitive-routing/gate.js +256 -0
  34. package/pi-extension/dist/cognitive-routing/handlers.js +901 -0
  35. package/pi-extension/dist/cognitive-routing/handoffs.js +350 -0
  36. package/pi-extension/dist/cognitive-routing/model-control.js +476 -0
  37. package/pi-extension/dist/cognitive-routing/projection.js +520 -0
  38. package/pi-extension/dist/cognitive-routing/provenance.js +83 -0
  39. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/render.js +15 -15
  40. package/pi-extension/dist/cognitive-routing/runtime.js +398 -0
  41. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/schemas.js +47 -11
  42. package/pi-extension/dist/cognitive-routing/session.js +223 -0
  43. package/pi-extension/dist/{session-sources → cognitive-routing}/sources.js +126 -87
  44. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/state.js +55 -386
  45. package/pi-extension/dist/cognitive-routing/status.js +81 -0
  46. package/pi-extension/dist/cognitive-routing/tools.js +74 -0
  47. package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/types.js +14 -11
  48. package/pi-extension/dist/compaction/carry.js +205 -0
  49. package/pi-extension/dist/compaction/config.js +24 -0
  50. package/pi-extension/dist/compaction/controller.js +494 -0
  51. package/pi-extension/dist/compaction/harness.js +93 -0
  52. package/pi-extension/dist/compaction/results.js +159 -0
  53. package/pi-extension/dist/compaction/thresholds.js +35 -0
  54. package/pi-extension/dist/compaction/tool.js +57 -0
  55. package/pi-extension/dist/host/branch.js +13 -0
  56. package/pi-extension/dist/host/canonical.js +12 -0
  57. package/pi-extension/dist/host/catalog.js +62 -0
  58. package/pi-extension/dist/host/config-validation.js +233 -0
  59. package/pi-extension/dist/host/config.js +361 -0
  60. package/pi-extension/dist/host/inbound.js +142 -0
  61. package/pi-extension/dist/host/projection-tags.js +60 -0
  62. package/pi-extension/dist/host/prompts.js +93 -0
  63. package/pi-extension/dist/{session-sources → host}/read-only-session.js +117 -1
  64. package/pi-extension/dist/{runtime → host}/request-history.js +125 -39
  65. package/pi-extension/dist/host/rows.js +25 -0
  66. package/pi-extension/dist/host/runtime-state.js +204 -0
  67. package/pi-extension/dist/host/section-keeper.js +85 -0
  68. package/pi-extension/dist/host/settings/freeflow-command.js +2323 -0
  69. package/pi-extension/dist/{settings/settings-tui.js → host/settings/settings-view.js} +205 -73
  70. package/pi-extension/dist/host/staging.js +28 -0
  71. package/pi-extension/dist/host/status.js +115 -0
  72. package/pi-extension/dist/index.js +1004 -188
  73. package/pi-extension/dist/messaging/config.js +27 -0
  74. package/pi-extension/dist/messaging/messaging.js +398 -0
  75. package/pi-extension/dist/messaging/registry.js +57 -0
  76. package/pi-extension/dist/messaging/render.js +90 -0
  77. package/pi-extension/dist/messaging/tools.js +109 -0
  78. package/pi-extension/dist/messaging/transport.js +101 -0
  79. package/pi-extension/dist/provider-support/cache/anchor.js +21 -0
  80. package/pi-extension/dist/provider-support/cache/anthropic.js +102 -0
  81. package/pi-extension/dist/provider-support/cache/health.js +73 -0
  82. package/pi-extension/dist/provider-support/cache/index.js +58 -0
  83. package/pi-extension/dist/provider-support/cache/keepalive.js +222 -0
  84. package/pi-extension/dist/provider-support/cache/monitor.js +17 -0
  85. package/pi-extension/dist/provider-support/cache/openai-responses.js +48 -0
  86. package/pi-extension/dist/provider-support/effort.js +13 -0
  87. package/pi-extension/dist/provider-support/index.js +44 -3
  88. package/pi-extension/dist/provider-support/{astra → openai}/adapter.js +46 -29
  89. package/pi-extension/dist/provider-support/{astra → openai}/history.js +10 -8
  90. package/pi-extension/dist/provider-support/{astra → openai}/index.js +8 -4
  91. package/pi-extension/dist/provider-support/{astra → openai}/session-state.js +29 -38
  92. package/pi-extension/dist/provider-support/routes.js +17 -0
  93. package/pi-extension/dist/task-memory/config.js +49 -0
  94. package/pi-extension/dist/task-memory/registry.js +119 -0
  95. package/pi-extension/dist/task-memory/render.js +107 -0
  96. package/pi-extension/dist/task-memory/runtime.js +994 -0
  97. package/pi-extension/dist/task-memory/tool.js +233 -0
  98. package/pi-extension/dist/tool-execution/apply-patch/grammar.js +23 -0
  99. package/pi-extension/dist/tool-execution/apply-patch/match.js +38 -0
  100. package/pi-extension/dist/tool-execution/apply-patch/parser.js +177 -0
  101. package/pi-extension/dist/tool-execution/apply-patch/plan.js +201 -0
  102. package/pi-extension/dist/tool-execution/apply-patch/tool.js +84 -0
  103. package/pi-extension/dist/tool-execution/background.js +430 -0
  104. package/pi-extension/dist/tool-execution/bash-guard.js +23 -0
  105. package/pi-extension/dist/tool-execution/config.js +33 -0
  106. package/pi-extension/dist/tool-execution/edit-messages.js +120 -0
  107. package/pi-extension/dist/tool-execution/file-state.js +138 -0
  108. package/pi-extension/dist/tool-execution/file-tracking.js +163 -0
  109. package/pi-extension/dist/tool-execution/guidance-notices.js +124 -0
  110. package/pi-extension/dist/tool-execution/prompt.js +54 -0
  111. package/pi-extension/dist/tool-execution/skill-reads.js +143 -0
  112. package/pi-extension/dist/tool-execution/tools.js +16 -0
  113. package/pi-extension/freeflow/README.md +9 -0
  114. package/runtime/prompts/cognitive-routing.md +4 -4
  115. package/runtime/prompts/core.md +29 -72
  116. package/runtime/prompts/interaction-contract.md +18 -8
  117. package/runtime/prompts/tool-execution.md +25 -0
  118. package/runtime/prompts/working-method.md +25 -0
  119. package/skills/deliver-work/SKILL.md +76 -0
  120. package/skills/deliver-work/references/branch-closeout.md +134 -0
  121. package/skills/deliver-work/references/commit.md +83 -0
  122. package/skills/deliver-work/references/launch.md +94 -0
  123. package/skills/deliver-work/references/release.md +85 -0
  124. package/skills/deliver-work/scripts/commit-state.mjs +139 -0
  125. package/skills/deliver-work/scripts/delivery-state.mjs +107 -0
  126. package/skills/deliver-work/scripts/lib/git-state.mjs +178 -0
  127. package/skills/deliver-work/scripts/push-route.mjs +122 -0
  128. package/skills/deliver-work/scripts/release-preflight.mjs +177 -0
  129. package/skills/discuss-work/SKILL.md +148 -0
  130. package/skills/{discuss → discuss-work}/references/discussion-continuity.md +13 -50
  131. package/skills/discuss-work/references/learning-action.md +36 -0
  132. package/skills/discuss-work/scripts/choices.mjs +101 -0
  133. package/skills/discuss-work/scripts/lib/choices.mjs +159 -0
  134. package/skills/evaluate-behavior/SKILL.md +107 -0
  135. package/skills/evaluate-behavior/references/authoring.md +381 -0
  136. package/skills/evaluate-behavior/references/coding-tasks.md +145 -0
  137. package/skills/evaluate-behavior/references/conversations-pipelines-judges.md +177 -0
  138. package/skills/evaluate-behavior/references/design-and-measurement.md +273 -0
  139. package/skills/evaluate-behavior/references/running-and-evidence.md +245 -0
  140. package/skills/evaluate-behavior/scripts/claude-guard.mjs +76 -0
  141. package/skills/evaluate-behavior/scripts/guard-rules.mjs +309 -0
  142. package/skills/evaluate-behavior/scripts/lib/agreement.mjs +90 -0
  143. package/skills/evaluate-behavior/scripts/lib/arms.mjs +55 -0
  144. package/skills/evaluate-behavior/scripts/lib/budget.mjs +87 -0
  145. package/skills/evaluate-behavior/scripts/lib/build-source.mjs +287 -0
  146. package/skills/evaluate-behavior/scripts/lib/clear.mjs +74 -0
  147. package/skills/evaluate-behavior/scripts/lib/container.mjs +395 -0
  148. package/skills/evaluate-behavior/scripts/lib/decision.mjs +418 -0
  149. package/skills/evaluate-behavior/scripts/lib/definitions.mjs +1072 -0
  150. package/skills/evaluate-behavior/scripts/lib/freeflow.mjs +103 -0
  151. package/skills/evaluate-behavior/scripts/lib/grade-command.mjs +591 -0
  152. package/skills/evaluate-behavior/scripts/lib/grade-comparison.mjs +90 -0
  153. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-interaction.mjs +19 -18
  154. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-support.mjs +32 -5
  155. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-workspace.mjs +28 -12
  156. package/skills/evaluate-behavior/scripts/lib/grade.mjs +101 -0
  157. package/skills/evaluate-behavior/scripts/lib/hooks.mjs +98 -0
  158. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/confinement.mjs +196 -0
  159. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/constraints.mjs +111 -0
  160. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/index.mjs +48 -0
  161. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/isolation.mjs +74 -0
  162. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/launch.mjs +123 -0
  163. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/model-call.mjs +73 -0
  164. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/recorder.mjs +178 -0
  165. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/session.mjs +494 -0
  166. package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/skills.mjs +81 -0
  167. package/skills/evaluate-behavior/scripts/lib/hosts/index.mjs +31 -0
  168. package/skills/evaluate-behavior/scripts/lib/hosts/names.mjs +3 -0
  169. package/skills/evaluate-behavior/scripts/lib/hosts/pi/confinement.mjs +173 -0
  170. package/skills/evaluate-behavior/scripts/lib/hosts/pi/host.mjs +148 -0
  171. package/skills/evaluate-behavior/scripts/lib/hosts/pi/index.mjs +70 -0
  172. package/skills/evaluate-behavior/scripts/lib/hosts/pi/isolation.mjs +81 -0
  173. package/skills/evaluate-behavior/scripts/lib/hosts/pi/model-call.mjs +79 -0
  174. package/skills/evaluate-behavior/scripts/lib/hosts/pi/process.mjs +241 -0
  175. package/skills/{evaluate-skill/scripts/lib → evaluate-behavior/scripts/lib/hosts/pi}/rpc.mjs +144 -26
  176. package/skills/evaluate-behavior/scripts/lib/identity.mjs +82 -0
  177. package/skills/evaluate-behavior/scripts/lib/judge.mjs +688 -0
  178. package/skills/evaluate-behavior/scripts/lib/metrics.mjs +332 -0
  179. package/skills/evaluate-behavior/scripts/lib/model-call.mjs +17 -0
  180. package/skills/evaluate-behavior/scripts/lib/participants.mjs +616 -0
  181. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/process.mjs +22 -0
  182. package/skills/evaluate-behavior/scripts/lib/queue.mjs +54 -0
  183. package/skills/evaluate-behavior/scripts/lib/reference.mjs +343 -0
  184. package/skills/evaluate-behavior/scripts/lib/reuse.mjs +277 -0
  185. package/skills/evaluate-behavior/scripts/lib/review.mjs +933 -0
  186. package/skills/evaluate-behavior/scripts/lib/runner.mjs +732 -0
  187. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/sandbox.mjs +121 -14
  188. package/skills/evaluate-behavior/scripts/lib/scan-shell.mjs +457 -0
  189. package/skills/evaluate-behavior/scripts/lib/scan.mjs +479 -0
  190. package/skills/evaluate-behavior/scripts/lib/seal.mjs +91 -0
  191. package/skills/evaluate-behavior/scripts/lib/shell.mjs +560 -0
  192. package/skills/evaluate-behavior/scripts/lib/source-override.mjs +64 -0
  193. package/skills/evaluate-behavior/scripts/lib/subject-file.mjs +88 -0
  194. package/skills/{evaluate-skill/scripts/lib/pi.mjs → evaluate-behavior/scripts/lib/subject.mjs} +239 -262
  195. package/skills/evaluate-behavior/scripts/lib/task-copy.mjs +124 -0
  196. package/skills/evaluate-behavior/scripts/lib/trials.mjs +524 -0
  197. package/skills/evaluate-behavior/scripts/lib/validity.mjs +68 -0
  198. package/skills/evaluate-behavior/scripts/lib/view-html.mjs +454 -0
  199. package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/view.mjs +218 -11
  200. package/skills/evaluate-behavior/scripts/pi-command-tool.mjs +159 -0
  201. package/skills/evaluate-behavior/scripts/pi-container-route.mjs +23 -0
  202. package/skills/evaluate-behavior/scripts/pi-guard.mjs +77 -0
  203. package/skills/evaluate-behavior/scripts/pi-login-refresh.mjs +31 -0
  204. package/skills/evaluate-behavior/scripts/skill-eval.mjs +586 -0
  205. package/skills/execute-work/SKILL.md +96 -72
  206. package/skills/execute-work/references/code-practices.md +27 -49
  207. package/skills/execute-work/references/design.md +271 -0
  208. package/skills/execute-work/references/diagnose.md +117 -0
  209. package/skills/execute-work/references/migration.md +108 -0
  210. package/skills/execute-work/references/simplify.md +65 -0
  211. package/skills/execute-work/scripts/self-review.mjs +422 -0
  212. package/skills/execute-work/scripts/touch-map.mjs +290 -0
  213. package/skills/review-work/SKILL.md +94 -64
  214. package/skills/review-work/references/adjudication.md +94 -0
  215. package/skills/review-work/references/artifact.md +198 -0
  216. package/skills/review-work/references/evals-and-judges.md +66 -0
  217. package/skills/review-work/references/work.md +177 -0
  218. package/skills/review-work/scripts/check-brief.mjs +128 -0
  219. package/skills/review-work/scripts/review-packet.mjs +233 -0
  220. package/skills/setup-freeflow/SKILL.md +69 -16
  221. package/skills/track-work/SKILL.md +135 -151
  222. package/skills/track-work/references/handoff.md +190 -0
  223. package/skills/track-work/references/projects.md +51 -0
  224. package/skills/track-work/references/working-record-format.md +201 -344
  225. package/skills/track-work/scripts/lib/document.mjs +79 -19
  226. package/skills/track-work/scripts/lib/format.mjs +18 -1
  227. package/skills/track-work/scripts/lib/recover.mjs +254 -0
  228. package/skills/track-work/scripts/lib/registry.mjs +656 -0
  229. package/skills/track-work/scripts/lib/search.mjs +40 -0
  230. package/skills/track-work/scripts/lib/store.mjs +53 -21
  231. package/skills/track-work/scripts/lib/transitions.mjs +79 -4
  232. package/skills/track-work/scripts/lib/views.mjs +50 -1
  233. package/skills/track-work/scripts/working-record.mjs +263 -22
  234. package/skills/verify-work/SKILL.md +64 -47
  235. package/skills/verify-work/references/feature-map.md +120 -0
  236. package/skills/verify-work/references/runtime-evidence.md +203 -0
  237. package/skills/verify-work/references/test-design.md +27 -6
  238. package/skills/verify-work/scripts/test-changes.mjs +246 -0
  239. package/skills/write-docs/SKILL.md +171 -0
  240. package/skills/write-docs/references/documentation-shapes.md +184 -0
  241. package/skills/write-docs/references/spec-and-plan-shapes.md +308 -0
  242. package/skills/write-docs/scripts/artifact-check.mjs +148 -0
  243. package/skills/write-docs/scripts/docs-check.mjs +229 -0
  244. package/skills/write-docs/scripts/plan-lint.mjs +123 -0
  245. package/skills/write-skill/SKILL.md +165 -165
  246. package/skills/write-skill/references/activation-and-wording.md +143 -0
  247. package/skills/write-skill/references/placement-and-dependencies.md +154 -0
  248. package/skills/write-skill/scripts/lib/compare.mjs +701 -0
  249. package/skills/write-skill/scripts/lib/similarity.mjs +56 -0
  250. package/skills/write-skill/scripts/lib/skill-author.mjs +197 -3
  251. package/skills/write-skill/scripts/skill-author.mjs +67 -8
  252. package/capabilities/context-virtualization/SKILL.md +0 -103
  253. package/capabilities/conversation-history/SKILL.md +0 -53
  254. package/hooks/tests/check-host-adapters.test.mjs +0 -82
  255. package/hooks/tests/check-runtime-context-hook.sh +0 -212
  256. package/pi-extension/dist/cognitive-routing-v2/projection.js +0 -330
  257. package/pi-extension/dist/cognitive-routing-v2/runtime.js +0 -2181
  258. package/pi-extension/dist/cognitive-routing-v2/tools.js +0 -60
  259. package/pi-extension/dist/context-virtualization/commands.js +0 -89
  260. package/pi-extension/dist/context-virtualization/projector.js +0 -42
  261. package/pi-extension/dist/context-virtualization/runtime.js +0 -378
  262. package/pi-extension/dist/context-virtualization/state.js +0 -57
  263. package/pi-extension/dist/context-virtualization/types.js +0 -10
  264. package/pi-extension/dist/conversation-history/passages.js +0 -66
  265. package/pi-extension/dist/conversation-history/ranking.js +0 -105
  266. package/pi-extension/dist/conversation-history/runtime.js +0 -226
  267. package/pi-extension/dist/conversation-history/search.js +0 -56
  268. package/pi-extension/dist/conversation-history/types.js +0 -1
  269. package/pi-extension/dist/freeflow-context/resolver.js +0 -120
  270. package/pi-extension/dist/freeflow-context/runtime.js +0 -80
  271. package/pi-extension/dist/freeflow-context/source-projector.js +0 -95
  272. package/pi-extension/dist/freeflow-context/tool.js +0 -314
  273. package/pi-extension/dist/freeflow-context/types.js +0 -12
  274. package/pi-extension/dist/freeflow-context/visibility.js +0 -28
  275. package/pi-extension/dist/integrations/mcp-config.js +0 -29
  276. package/pi-extension/dist/runtime/runtime-context.js +0 -754
  277. package/pi-extension/dist/runtime/runtime-identity.js +0 -5
  278. package/pi-extension/dist/session-sources/provenance.js +0 -32
  279. package/pi-extension/dist/settings/settings-ui.js +0 -1360
  280. package/pi-extension/dist/ui/text-component.js +0 -57
  281. package/pi-extension/src/cognitive-routing-v2/budget.ts +0 -42
  282. package/pi-extension/src/cognitive-routing-v2/config.ts +0 -173
  283. package/pi-extension/src/cognitive-routing-v2/projection.ts +0 -375
  284. package/pi-extension/src/cognitive-routing-v2/render.ts +0 -277
  285. package/pi-extension/src/cognitive-routing-v2/runtime.ts +0 -2241
  286. package/pi-extension/src/cognitive-routing-v2/schemas.ts +0 -180
  287. package/pi-extension/src/cognitive-routing-v2/state.ts +0 -839
  288. package/pi-extension/src/cognitive-routing-v2/tools.ts +0 -62
  289. package/pi-extension/src/cognitive-routing-v2/types.ts +0 -254
  290. package/pi-extension/src/context-virtualization/commands.ts +0 -111
  291. package/pi-extension/src/context-virtualization/projector.ts +0 -62
  292. package/pi-extension/src/context-virtualization/runtime.ts +0 -428
  293. package/pi-extension/src/context-virtualization/state.ts +0 -79
  294. package/pi-extension/src/context-virtualization/types.ts +0 -92
  295. package/pi-extension/src/conversation-history/passages.ts +0 -81
  296. package/pi-extension/src/conversation-history/ranking.ts +0 -155
  297. package/pi-extension/src/conversation-history/runtime.ts +0 -250
  298. package/pi-extension/src/conversation-history/search.ts +0 -79
  299. package/pi-extension/src/conversation-history/types.ts +0 -31
  300. package/pi-extension/src/freeflow-context/resolver.ts +0 -139
  301. package/pi-extension/src/freeflow-context/runtime.ts +0 -100
  302. package/pi-extension/src/freeflow-context/source-projector.ts +0 -106
  303. package/pi-extension/src/freeflow-context/tool.ts +0 -366
  304. package/pi-extension/src/freeflow-context/types.ts +0 -70
  305. package/pi-extension/src/freeflow-context/visibility.ts +0 -53
  306. package/pi-extension/src/index.ts +0 -390
  307. package/pi-extension/src/integrations/mcp-config.ts +0 -32
  308. package/pi-extension/src/provider-support/astra/adapter.ts +0 -108
  309. package/pi-extension/src/provider-support/astra/history.ts +0 -145
  310. package/pi-extension/src/provider-support/astra/index.ts +0 -12
  311. package/pi-extension/src/provider-support/astra/session-state.ts +0 -113
  312. package/pi-extension/src/provider-support/index.ts +0 -5
  313. package/pi-extension/src/runtime/request-history.ts +0 -243
  314. package/pi-extension/src/runtime/runtime-context.ts +0 -860
  315. package/pi-extension/src/runtime/runtime-identity.ts +0 -8
  316. package/pi-extension/src/session-sources/events.ts +0 -230
  317. package/pi-extension/src/session-sources/provenance.ts +0 -39
  318. package/pi-extension/src/session-sources/read-only-session.ts +0 -170
  319. package/pi-extension/src/session-sources/sources.ts +0 -334
  320. package/pi-extension/src/settings/settings-tui.ts +0 -501
  321. package/pi-extension/src/settings/settings-ui.ts +0 -1652
  322. package/pi-extension/src/ui/text-component.ts +0 -66
  323. package/pi-extension/tests/cache-reuse/history.test.js +0 -117
  324. package/pi-extension/tests/cache-reuse/native.test.js +0 -91
  325. package/pi-extension/tests/cache-reuse/settings.test.js +0 -211
  326. package/pi-extension/tests/cognitive-routing-v2/communication.test.js +0 -577
  327. package/pi-extension/tests/cognitive-routing-v2/compaction-input.test.js +0 -183
  328. package/pi-extension/tests/cognitive-routing-v2/delegation.test.js +0 -557
  329. package/pi-extension/tests/cognitive-routing-v2/native.test.js +0 -474
  330. package/pi-extension/tests/cognitive-routing-v2/performance.test.js +0 -87
  331. package/pi-extension/tests/cognitive-routing-v2/persistence.test.js +0 -300
  332. package/pi-extension/tests/cognitive-routing-v2/projection.test.js +0 -241
  333. package/pi-extension/tests/cognitive-routing-v2/recovery.test.js +0 -1034
  334. package/pi-extension/tests/cognitive-routing-v2/render.test.js +0 -244
  335. package/pi-extension/tests/cognitive-routing-v2/runtime.test.js +0 -423
  336. package/pi-extension/tests/cognitive-routing-v2/stabilization.test.js +0 -521
  337. package/pi-extension/tests/cognitive-routing-v2/state.test.js +0 -586
  338. package/pi-extension/tests/context-virtualization/extension.test.js +0 -775
  339. package/pi-extension/tests/context-virtualization/projector.test.js +0 -110
  340. package/pi-extension/tests/context-virtualization/runtime.test.js +0 -230
  341. package/pi-extension/tests/conversation-history/runtime.test.js +0 -98
  342. package/pi-extension/tests/conversation-history/search.test.js +0 -97
  343. package/pi-extension/tests/fixtures/pi-host.js +0 -4
  344. package/pi-extension/tests/fixtures/routing-native.js +0 -191
  345. package/pi-extension/tests/integration/mode-free-core.test.js +0 -220
  346. package/pi-extension/tests/integration/pi-extension.test.js +0 -1447
  347. package/pi-extension/tests/integration/prompt-architecture.test.js +0 -447
  348. package/pi-extension/tests/integration/unaffected-regressions.test.js +0 -478
  349. package/pi-extension/tests/provider-support/astra-boundaries.test.js +0 -75
  350. package/pi-extension/tests/provider-support/astra.test.js +0 -306
  351. package/pi-extension/tests/provider-support/cli.test.js +0 -92
  352. package/pi-extension/tests/provider-support/native.test.js +0 -183
  353. package/pi-extension/tests/settings/settings-tui.test.js +0 -243
  354. package/pi-extension/tsconfig.json +0 -16
  355. package/plugin.json +0 -33
  356. package/runtime/prompts/context-virtualization.md +0 -3
  357. package/runtime/prompts/conversation-history.md +0 -3
  358. package/skills/action-selection/SKILL.md +0 -100
  359. package/skills/action-selection/references/trajectory-stalls.md +0 -71
  360. package/skills/bypass/SKILL.md +0 -153
  361. package/skills/commit-work/SKILL.md +0 -145
  362. package/skills/commit-work/references/git-state-edges.md +0 -94
  363. package/skills/commit-work/references/simple-push.md +0 -92
  364. package/skills/commit-work/references/staging-decisions.md +0 -106
  365. package/skills/decision-gate/SKILL.md +0 -106
  366. package/skills/design-for-depth/SKILL.md +0 -117
  367. package/skills/design-for-depth/references/design-pressure-signals.md +0 -182
  368. package/skills/design-for-depth/references/implementation-decisions.md +0 -76
  369. package/skills/design-for-depth/references/interface-design-loop.md +0 -136
  370. package/skills/design-for-depth/references/module-and-dependency-design.md +0 -147
  371. package/skills/design-for-depth/references/software-design-philosophy.md +0 -202
  372. package/skills/design-for-depth/references/state-and-failure-boundaries.md +0 -136
  373. package/skills/diagnose-failure/SKILL.md +0 -125
  374. package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +0 -48
  375. package/skills/diagnose-failure/references/flaky-and-performance-diagnosis.md +0 -51
  376. package/skills/discuss/SKILL.md +0 -116
  377. package/skills/evaluate-skill/SKILL.md +0 -219
  378. package/skills/evaluate-skill/references/evaluation-definition-schema.md +0 -385
  379. package/skills/evaluate-skill/references/evaluation-design.md +0 -112
  380. package/skills/evaluate-skill/references/execution-and-evidence.md +0 -90
  381. package/skills/evaluate-skill/references/review-and-revision.md +0 -92
  382. package/skills/evaluate-skill/scripts/lib/definitions.mjs +0 -407
  383. package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +0 -60
  384. package/skills/evaluate-skill/scripts/lib/grade.mjs +0 -64
  385. package/skills/evaluate-skill/scripts/lib/runner.mjs +0 -368
  386. package/skills/evaluate-skill/scripts/pi-guard.mjs +0 -164
  387. package/skills/evaluate-skill/scripts/skill-eval.mjs +0 -102
  388. package/skills/execute-work/references/execute-work-edges.md +0 -68
  389. package/skills/finish-branch/SKILL.md +0 -117
  390. package/skills/finish-branch/references/integration-options.md +0 -80
  391. package/skills/handoff/SKILL.md +0 -82
  392. package/skills/handoff/references/handoff-templates.md +0 -150
  393. package/skills/launch-work/SKILL.md +0 -116
  394. package/skills/launch-work/references/launch-readiness.md +0 -85
  395. package/skills/migration-work/SKILL.md +0 -115
  396. package/skills/migration-work/references/migration-lifecycle.md +0 -82
  397. package/skills/release-work/SKILL.md +0 -118
  398. package/skills/release-work/references/release-evidence.md +0 -78
  399. package/skills/review-artifact/SKILL.md +0 -142
  400. package/skills/review-artifact/references/adjudicate-artifact-review.md +0 -101
  401. package/skills/review-artifact/references/independent-artifact-reviewer-contract.md +0 -159
  402. package/skills/review-work/references/adjudicate-work-review.md +0 -97
  403. package/skills/review-work/references/independent-work-reviewer-contract.md +0 -139
  404. package/skills/review-work/references/security-risk-lens.md +0 -69
  405. package/skills/setup-freeflow/references/activation-contract.md +0 -109
  406. package/skills/setup-freeflow/references/host-setup.md +0 -67
  407. package/skills/simplify-code/SKILL.md +0 -85
  408. package/skills/simplify-code/references/simplification-patterns.md +0 -70
  409. package/skills/verify-work/references/browser-runtime-evidence.md +0 -55
  410. package/skills/verify-work/references/integration-evidence.md +0 -47
  411. package/skills/verify-work/references/performance-evidence.md +0 -57
  412. package/skills/workflow/SKILL.md +0 -127
  413. package/skills/workflow/references/domain-skill-composition.md +0 -43
  414. package/skills/write-plan/SKILL.md +0 -92
  415. package/skills/write-plan/references/plan-shapes.md +0 -156
  416. package/skills/write-skill/references/activation-boundaries.md +0 -104
  417. package/skills/write-skill/references/agent-first-instructions.md +0 -121
  418. package/skills/write-skill/references/progressive-disclosure.md +0 -127
  419. package/skills/write-skill/references/skill-dependency-graphs.md +0 -190
  420. package/skills/write-spec/SKILL.md +0 -92
  421. package/skills/write-spec/references/artifact-standards.md +0 -86
  422. package/skills/write-spec/references/decision-records.md +0 -78
  423. package/skills/write-spec/references/spec-shapes.md +0 -143
  424. /package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/budget.js +0 -0
  425. /package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/evidence.mjs +0 -0
  426. /package/skills/{evaluate-skill → evaluate-behavior}/scripts/pi-observer.mjs +0 -0
@@ -0,0 +1,143 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { isAbsolute, relative, resolve, sep } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ /** The Freeflow package root, as this module was loaded and through its real path. */
6
+ const ROOT = fileURLToPath(new URL("../../../", import.meta.url));
7
+ const ROOTS = [...new Set([resolve(ROOT), realOr(ROOT)])];
8
+ const INSTRUCTION_DIRS = ["capabilities", "skills", "runtime"];
9
+ function realOr(path) {
10
+ try {
11
+ return realpathSync(path);
12
+ } catch {
13
+ return resolve(path);
14
+ }
15
+ }
16
+ /**
17
+ * A Freeflow instruction file (a skill, a reference, a runtime prompt) by its path inside the package, such as
18
+ * `skills/track-work/SKILL.md`; undefined for any other path. No file system access: a path is matched as written,
19
+ * against the package root and its real path.
20
+ */
21
+ export function instructionPath(path, cwd = process.cwd()) {
22
+ let candidate = path.startsWith("@") ? path.slice(1) : path;
23
+ if (candidate === "~" || candidate.startsWith("~/")) candidate = `${homedir()}${candidate.slice(1)}`;
24
+ const absolute = isAbsolute(candidate) ? resolve(candidate) : resolve(cwd, candidate);
25
+ for (const root of ROOTS) {
26
+ const inside = relative(root, absolute);
27
+ if (!inside || inside.startsWith("..") || isAbsolute(inside)) continue;
28
+ if (INSTRUCTION_DIRS.some((dir) => inside.startsWith(dir + sep))) return inside.split(sep).join("/");
29
+ }
30
+ return undefined;
31
+ }
32
+ /** Whether a tool call reads one of Freeflow's own instruction files. */
33
+ export function isFreeflowInstruction(tool, input, cwd) {
34
+ return tool === "read" && typeof input?.path === "string" && instructionPath(input.path, cwd) !== undefined;
35
+ }
36
+ /** The skill a path's `SKILL.md` belongs to, by its directory name; undefined for any other file. */
37
+ export function skillName(path, cwd) {
38
+ const inside = instructionPath(path, cwd);
39
+ return inside?.match(/^(?:skills|capabilities)\/([^/]+)\/SKILL\.md$/)?.[1];
40
+ }
41
+ /** Skills whose `SKILL.md` a successful top-level read in these entries returned, in first-read order. */
42
+ export function skillsRead(entries, cwd) {
43
+ const calls = new Map();
44
+ const names = new Set();
45
+ for (const entry of entries) {
46
+ const message = entry?.type === "message" ? entry.message : undefined;
47
+ if (message?.role === "assistant")
48
+ for (const block of message.content ?? [])
49
+ if (block?.type === "toolCall" && block.name === "read") calls.set(block.id, block.arguments);
50
+ if (message?.role !== "toolResult" || message.isError === true) continue;
51
+ const input = calls.get(message.toolCallId);
52
+ const name = typeof input?.path === "string" ? skillName(input.path, cwd) : undefined;
53
+ if (name) names.add(name);
54
+ }
55
+ return [...names];
56
+ }
57
+ /** Marks a read result an earlier version replaced with one line, so a rebuild does not take it for the file's text. */
58
+ const REPLACED = "freeflowSkillRead";
59
+ /** Pi's note after a read cut short by its `limit` while the file goes on. */
60
+ const MORE_LINES = /\n\n(\[\d+ more lines in file\. Use offset=\d+ to continue\.\])$/;
61
+ /**
62
+ * The text of a successful, complete read as the model saw it: its first line number, its lines, and Pi's trailing
63
+ * note when a limit stopped it early. Undefined when Pi truncated it, it holds an image, or its range is unusual.
64
+ */
65
+ function readText(input, content, details) {
66
+ if (!Array.isArray(content) || content.some((part) => part?.type !== "text")) return undefined;
67
+ if (details?.truncation?.truncated || details?.truncation?.firstLineExceedsLimit) return undefined;
68
+ const { offset, limit } = input ?? {};
69
+ if (offset !== undefined && !Number.isFinite(offset)) return undefined;
70
+ if (limit !== undefined && !(Number.isInteger(limit) && limit > 0)) return undefined;
71
+ // Pi starts at offset - 1, as an array index.
72
+ const start = offset ? Math.trunc(Math.max(0, offset - 1)) + 1 : 1;
73
+ let text = content.map((part) => part.text ?? "").join("");
74
+ const more = limit === undefined ? null : MORE_LINES.exec(text);
75
+ if (more) text = text.slice(0, more.index);
76
+ return { start, lines: text.split("\n"), toEnd: !more, ...(more ? { note: more[1] } : {}) };
77
+ }
78
+ /**
79
+ * The text of Freeflow's instruction files the model holds in this context, from successful top-level reads, for the
80
+ * skills-read list. A repeat read passes through untouched. Any compaction clears it; navigation rebuilds it from the
81
+ * branch. Memory only.
82
+ */
83
+ export class SkillReads {
84
+ seen = new Map();
85
+ built = false;
86
+ reset() {
87
+ this.seen.clear();
88
+ this.built = false;
89
+ }
90
+ /** Forget the branch's reads; they are rebuilt from the new branch before the next tool call. */
91
+ invalidate() {
92
+ this.built = false;
93
+ }
94
+ /** After any compaction the earlier reads are out of the model's view. */
95
+ clear() {
96
+ this.seen.clear();
97
+ this.built = true;
98
+ }
99
+ /** Every read since the latest compaction on the branch. */
100
+ rebuild(branch, cwd) {
101
+ this.seen.clear();
102
+ const calls = new Map();
103
+ for (const entry of branch) {
104
+ if (entry?.type === "compaction") {
105
+ this.seen.clear();
106
+ calls.clear();
107
+ }
108
+ const message = entry?.type === "message" ? entry.message : undefined;
109
+ if (message?.role === "assistant")
110
+ for (const block of message.content ?? [])
111
+ if (block?.type === "toolCall" && block.name === "read") calls.set(block.id, block.arguments);
112
+ if (message?.role !== "toolResult" || message.isError === true || message.details?.[REPLACED]) continue;
113
+ const input = calls.get(message.toolCallId);
114
+ const key = typeof input?.path === "string" ? instructionPath(input.path, cwd) : undefined;
115
+ const read = key === undefined ? undefined : readText(input, message.content, message.details);
116
+ if (key !== undefined && read) this.record(key, read);
117
+ }
118
+ this.built = true;
119
+ }
120
+ /**
121
+ * Skills whose `SKILL.md` text the model holds, by name, sorted: parallel reads record in completion order live and
122
+ * in branch order on rebuild, so a sorted list is the same before and after a resume and costs no new state copy.
123
+ */
124
+ skills() {
125
+ return [...this.seen.keys()]
126
+ .flatMap((key) => key.match(/^(?:skills|capabilities)\/([^/]+)\/SKILL\.md$/)?.[1] ?? [])
127
+ .sort();
128
+ }
129
+ record(key, read) {
130
+ const seen = this.seen.get(key) ?? [];
131
+ seen.push({ start: read.start, lines: read.lines, toEnd: read.toEnd });
132
+ this.seen.set(key, seen);
133
+ }
134
+ /** Records a successful, complete top-level read of an instruction file; its result reaches the model unchanged. */
135
+ observe(event, cwd) {
136
+ if (event.toolName !== "read" || event.isError || event.parentToolCallId) return;
137
+ const input = event.input;
138
+ const key = typeof input?.path === "string" ? instructionPath(input.path, cwd) : undefined;
139
+ if (key === undefined) return;
140
+ const read = readText(input, event.content, event.details);
141
+ if (read) this.record(key, read);
142
+ }
143
+ }
@@ -0,0 +1,16 @@
1
+ import { APPLY_PATCH } from "./apply-patch/tool.js";
2
+ import { BASH_BACKGROUND, MONITOR, STOP_BACKGROUND } from "./background.js";
3
+ /** Freeflow's own Tool Execution tools; registered once and declared exactly while Tool Execution is effective. */
4
+ export const TOOL_EXECUTION_TOOLS = [APPLY_PATCH, BASH_BACKGROUND, MONITOR, STOP_BACKGROUND];
5
+ /**
6
+ * Declare or withdraw Freeflow's tools when Tool Execution's effective state changes. Missing tools are appended and
7
+ * existing ones keep their place, so repeated calls leave the tool list unchanged within a configuration.
8
+ */
9
+ export function applyToolExecutionTools(pi, effective) {
10
+ if (typeof pi.getActiveTools !== "function" || typeof pi.setActiveTools !== "function") return;
11
+ const current = pi.getActiveTools();
12
+ const next = effective
13
+ ? [...current, ...TOOL_EXECUTION_TOOLS.filter((name) => !current.includes(name))]
14
+ : current.filter((name) => !TOOL_EXECUTION_TOOLS.includes(name));
15
+ if (next.length !== current.length) pi.setActiveTools(next);
16
+ }
@@ -0,0 +1,9 @@
1
+ # Extension entry point
2
+
3
+ `index.js` is the file Pi loads: the root `package.json` lists it under `pi.extensions`. It only re-exports the compiled extension:
4
+
5
+ ```js
6
+ export { default } from "../dist/index.js";
7
+ ```
8
+
9
+ Keeping this stable path separate from `dist/` lets the build delete and recreate `dist/` without changing what the package manifest points to. Do not add logic here; the extension starts in [`src/index.ts`](../src/index.ts).
@@ -1,9 +1,9 @@
1
1
  ## Cognitive Routing Cue
2
2
 
3
- Cognitive Routing places work across configured profiles in one agent/session to improve quality, continuity, responsiveness, and total cost together. Coordinator owns user interaction, governing direction, delegation, and acceptance. When enabled, Helper is the normal delegate for supporting work; Executor is commissioned for substantive or consequential results, including implementation and artifacts. Helper and Executor share ordinary active history; only Coordinator delegates and only one profile executes at a time.
3
+ Cognitive Routing places work across configured profiles in one agent/session to improve quality and total cost together. Coordinator owns user interaction, planning, governing decisions, delegation, assessment, and acceptance. Choices the request and repository leave open, such as names and messages, go to the user before delegating, not into an assignment. Helper and Executor are workers: only Coordinator delegates, only one profile executes at a time, and the workers share ordinary active history.
4
4
 
5
- Use the latest Runtime State for control, profile, delegation mode, and current responsibility. In Automatic control, follow the selected mode: helper-only permits Coordinator substantive production with Helper support; executor-only delegates environment work to Executor; both uses Helper by default for support and Executor for substantive work. A mode change does not retarget an accepted assignment or its recovery. Under Manual control, the held Coordinator, Helper, or Executor follows ordinary unsplit Workflow without Automatic role restrictions. Do not release the user's hold. When routing is inactive, stop applying this split.
5
+ Use the latest Runtime State for control, profile, delegation mode, and current responsibility. In Automatic control, the delegation mode sets who implements: `helper` has Coordinator implement while Helper takes everything that does not need Coordinator-level reasoning; `executor` has Executor do the environment work from Coordinator's contracts; `both` has Executor do consequential work, including code, and Helper do support. A mode change does not retarget an accepted assignment or its recovery. Completed or superseded contracts and reports are historical context and grant no new permission; follow the current assignment and the user's current restrictions. Under Manual control, the held Coordinator, Helper, or Executor follows the ordinary unsplit cycle without Automatic role restrictions. Do not release the user's hold. When routing is inactive, stop applying this split.
6
6
 
7
- Before relying on Automatic routing, read the complete cognitive-routing skill if its body is absent. This bootstrap read is the only environment call in that response. If unavailable, stop and report the missing method. Reload it after context loss before applying remembered routing rules.
7
+ Before relying on Automatic routing, read the complete cognitive-routing skill if its body is absent, and the reference it names for your profile. This bootstrap read is the only environment call in that response. If unavailable, stop and report the missing method. Reload both after context loss before applying remembered routing rules.
8
8
 
9
- When projection is on, the active worker must project every completed skill and instructional-reference read, including this bootstrap read. Follow the skill for work placement, environment access, evidence, handoffs, and recorded-worker recovery. Under Automatic routing, a worker return or passing check is not Coordinator acceptance; completed Slice closure requires Coordinator's supported judgment and explicit closure instruction. Manual control follows ordinary Workflow and Track Work instead.
9
+ When projection is on, the active worker must project every completed skill and instructional-reference read, including this bootstrap read. Follow the skill for work placement, environment access (including who may read what), evidence, handoffs, and recorded-worker recovery. Under Automatic routing, a worker return or passing check is not Coordinator acceptance; completed Slice closure requires Coordinator's assessment and explicit closure direction. Manual control follows the ordinary cycle and Track Work.
@@ -1,90 +1,47 @@
1
1
  # Freeflow Stable Guidance
2
2
 
3
- Freeflow is a workflow layer for one active coding agent. It does not override user instructions, repository policy, host safety, or tool permissions, and it creates no authority. Core guidance and the separately editable Interaction Contract are delivered together whenever Freeflow is enabled.
3
+ Freeflow is a workflow layer for one coding agent. It never overrides user instructions, repository instructions, host safety, or tool permissions, and it grants no authority of its own.
4
4
 
5
- Use the latest Freeflow Runtime State and only the guidance, skills, and tools exposed for this request. State refreshes at session start, after context loss, or when displayed facts change; an unchanged snapshot may remain visible. Earlier snapshots are history.
5
+ Use the latest Freeflow Runtime State and only the guidance, skills, and tools exposed for this request. The state refreshes at session start, after context loss, and when its facts change; earlier snapshots are history.
6
6
 
7
- ## Shared Terms
7
+ ## Terms
8
8
 
9
- - **Authority envelope:** the requested outcome, permitted effects, covered active evidence generation, and stop condition established by a direct request or still-valid approval.
10
- - **Work agreement:** the user-established outcome, scope, and user-facing return condition. It may include figuring out the approach; it is not a mandatory artifact or another authority source.
11
- - **Passive observation:** inspecting existing sources or evidence without exercising target behavior or intentionally changing task state.
12
- - **Active evidence generation:** exercising behavior to produce evidence, including tests, reproductions, benchmarks, prototypes, instrumentation, and runtime probes.
13
- - **Mutation or delivery:** changing repository, durable task/session, or external state.
14
- - **Bounded activity:** coherent discussion, preservation, execution, evidence, or judgment ending in one assessable result.
15
- - **Current owner:** the one activity responsible for that result. Supporting methods, lenses, tools, references, and reviewers do not automatically take ownership.
16
- - **Slice:** one coherent outcome that may span several bounded activities. Track Work gives it durable identity when task memory is needed.
17
- - **Evidence boundary:** the strongest claim directly supported by the observing mechanism—not by intent, authority, or confidence.
18
- - **Self-review:** the producer silently checks an initially supported result for alignment, correctness, suitability, and unnecessary complexity before accepting or reusing it. Corrected work receives only the affected recheck.
19
- - **Independent review:** separately selected judgment from a context that did not produce the reviewed state. It reports without editing or authorizing correction.
20
- - **Checkpoint:** a deliberately selected boundary that dependent work must not cross unresolved. An activity ending or pausing does not create one automatically.
21
- - **Re-entry:** return only to the owner whose responsibility changed, preserving unaffected work, decisions, and evidence.
22
- - **Supported Exit:** an answer, wait, pause, handoff, deferment, controlled boundary, stop, or completion justified by current evidence and authority.
9
+ - **Work agreement:** the outcome, scope, and return point the user agreed to.
10
+ - **Active evidence generation:** exercising behavior to produce evidence, such as tests, reproductions, experiments, or probes. Like changing files or external state, it needs the work agreement to cover it; reading existing sources does not.
11
+ - **Current owner:** the one skill responsible for the current question or result.
12
+ - **Working Record:** the task's durable memory file, maintained through Track Work.
13
+ - **Slice:** one coherent unit of work in a Working Record.
14
+ - **Checkpoint:** a boundary on the task's route, such as a commit, publication, review, user decision, or planned handoff. Once selected, dependent work must not cross it unresolved.
15
+ - **Evidence boundary:** the strongest claim an observation directly supports.
16
+ - **Self-review:** the producer's own check of a supported result before accepting it. **Independent review:** a separately selected judgment from a context that did not produce the work.
23
17
 
24
- ## Load The Selected Method
18
+ ## How Freeflow Works
25
19
 
26
- Before applying a selected skill, read its current body when its exact method is absent from context. Descriptions select methods; they do not replace them. Reuse still-visible guidance instead of rereading each turn.
20
+ Work runs in a cycle, and each step names the skill that holds its method. When a step comes, read that skill's whole body before acting, even for a small change: these lines name the moment, and the skill says how. A description selects a skill but is not its method.
27
21
 
28
- Read dependencies at their declared conditions, not the whole catalogue. Loading guidance neither changes ownership nor authorizes effects. Required reads still follow active capability bootstrap and routing rules.
22
+ 1. **Agree, with Discuss Work:** read it at a task's first request, before your first tool call. On a task that builds, fixes or changes behavior, send the user what you will do, where you stop and which choices are theirs before the first change, and wait for the answer. Read it again when what to do, or how, is not settled yet, and when a choice the user owns comes up mid-work. A question needs no agreement. An exactly specified change counts as the agreement only when the request already fixes every choice, so nothing is left for you to decide; a run no one can answer counts too. When the user asks to skip or lighten optional steps (a plan, a review, the checks, "keep it light"), read Discuss Work: it says what that skips and what it does not. None of these skips reading the skills.
23
+ 2. **Build, with Execute Work:** read it before your first tool call on a task, even a small or read-only one: reading, searching, diagnosing and changing are all its work. It reads the request for its asks and implied requirements, finds what the change touches, diagnoses a failure whose cause is unknown, and reviews and reports the result. Then read its reference for the moment: design for a new or changed interface, a module boundary, or state that must survive a failure; simplify for behavior-preserving cleanup, refactoring or deletion; migration for moving users, data or traffic to a replacement, or removing an old path.
24
+ 3. **Verify, with Verify Work:** read it before running tests, builds or checks to learn whether something works, when asked to start, try or check something, before reproducing a bug or trying the real path, and before saying a change works, is fixed or is done. Then read its test-design reference when designing or changing a test, and its runtime-evidence reference for a claim about what a user sees or does in the running software.
25
+ 4. **Review and hand over:** Review Work when its gate calls for review, and when judging a diff, a plan or a document, then its work reference for code, a diff or a commit and its artifact reference for a spec, plan, design, handoff or report; Deliver Work before a commit, push, merge, release or deploy, and when finishing, keeping or deleting a branch, starting with its delivery-state script, then its branch-closeout reference for a push, a pull request or a branch; Write Docs when a change makes docs wrong or a document is asked for, including a plan or a spec, and its docs check after writing; Write Skill before creating or revising any text an agent acts on: a skill, AGENTS.md, CLAUDE.md or a prompt.
29
26
 
30
- ## Recover After Context Loss
31
-
32
- After compaction, context-replacing summarization, clear, session resume/navigation, transfer into another context, or uncertain continuity, pause task work. Use only necessary recovery reads until state is coherent; recovery is not a bypass of authority, capabilities, or host permissions.
33
-
34
- - Require the latest Freeflow Runtime State; do not infer missing or contradictory state.
35
- - Reload relevant active capability methods before relying on them.
36
- - When a Working Record exists or may exist, load Track Work and read the complete `full` record. A summary or `resume` projection is not full recovery. Stop affected work if recovery is incomplete or unavailable.
37
- - Identify the current owner and reload its method if absent. Use Workflow when authority, ownership, or continuation is unclear.
38
- - Reconcile the agreement, current work, dependencies, evidence limits, partial effects, and stop conditions with current user direction and relevant live sources.
39
-
40
- Summaries and records may preserve evidence of prior approval; check that the approval still applies. They do not create authority, prove live state, or keep an absent method active. Current user direction, live source truth, and current Runtime State take precedence over conflicting memory. With intact context, use bounded record reads only when needed; another turn or ordinary pause is not context loss.
41
-
42
- ## Three Nested Loops
43
-
44
- The **Interaction Lifecycle** runs from Entry through the Feedback Loop when needed to a Supported Exit. A later user turn or new evidence begins another lifecycle. One lifecycle may contain several bounded activities.
45
-
46
- For each bounded activity, the **Feedback Loop** is:
27
+ Outside the cycle, read a skill when its situation comes up, at any step: **Track Work** when a task needs memory beyond the conversation: start or update its Working Record when work will span sessions, a compaction or a handoff, or the user asks, and read its handoff reference when handing work to a later session or someone else, or pausing. **Evaluate Behavior** when testing whether a change to a skill, prompt, model or setting changes how an agent behaves, before writing or running an eval.
47
28
 
48
- ```text
49
- Orient or reconstruct state
50
- -> choose or retain the current owner
51
- -> establish the required result and a supported approach
52
- -> apply its method and gather or produce evidence
53
- -> determine what the evidence supports
54
- -> self-review the supported result
55
- -> continue, correct, re-enter, ask, defer, stop, or exit
56
- ```
29
+ When evidence changes the picture, go back only to the step it affects.
57
30
 
58
- Reuse settled understanding. For concrete work, resolve what is required and how to produce the next result before production changes; these need not be separate investigations or user turns. A learning action answers its bounded question, not an expanding production ambition.
31
+ Only the user's request or still-valid approval authorizes work. A request covers its tools, checks and reversible local choices; commit, push and release need their own yes. Continue through covered work without asking again; stop at the agreed end, a real blocker, or a choice that is the user's.
59
32
 
60
- When the owner needs the environment, the **Environment Interaction Loop** is:
33
+ When a skill's table names your situation, read that reference or run that script before acting: the row names the moment, and the reference holds the method. A reference relies on its skill's body, so read the skill first.
61
34
 
62
- ```text
63
- Need evidence or a covered effect
64
- -> reuse adequate context or identify what is missing
65
- -> select and bound the action and tool
66
- -> execute once
67
- -> observe what changed
68
- -> apply active capability guidance where relevant
69
- -> return to the current owner
70
- ```
35
+ ## Project Memory
71
36
 
72
- This inner loop may run zero or more times per activity. It does not change authority or ownership.
37
+ Before changing or judging code, read the project's developer docs index, if it has one, and the docs covering that code; behavior they record as intended is not a bug. Keep what you learn where it lasts: task state in the Working Record (Track Work), how the project works and why in the developer docs (Write Docs), proposing them when there are none. AGENTS.md, CLAUDE.md and other instruction files hold only rules for agents.
73
38
 
74
- ## Evidence And Judgment
75
-
76
- Verification establishes what direct evidence proves at the observed boundary. Review judges whether work or an artifact is aligned, correct, suitable, and sufficiently evidenced; judgment does not replace verification. A passing check may leave a broader claim unsupported. Preserve missing, contradictory, and inconclusive evidence rather than converting it into success.
77
-
78
- ## Workflow Cue
79
-
80
- Use Workflow when authority, readiness, ownership, re-entry, checkpoints, continuity, or Supported Exit needs coordination. Continue covered work to the agreed return boundary; internal method returns do not end the user agreement.
81
-
82
- Before an uncovered effect or separately controlled action, explain its purpose, action, expected result, and stop condition; ask once and wait. Skills, artifacts, reviews, memory, and useful new evidence do not grant authority.
83
-
84
- ## Action Selection Cue
39
+ ## Recover After Context Loss
85
40
 
86
- Use Action Selection before an uncertain, broad, or repeated environment interaction. Seek the smallest sufficient observation or effect for the current question, bound its output, and return what changed to the owner. Use the fast path for an obvious covered mechanical action; do not manufacture alternatives or collect context after the question is settled.
41
+ When the conversation about the current work is no longer in your context (after compaction, a summary that replaces it, clear, a transfer into another context, or a session or branch that continues the work without it), pause task work and recover first, with only the reads recovery needs; recovery is not a bypass of authority, capabilities, or host permissions.
87
42
 
88
- ## Supported Exit
43
+ - Reload the methods the current work needs.
44
+ - When a Working Record exists or may exist for the current work, load Track Work and recover the record that belongs to that work in its order, starting from its `recover` view, not the raw file. A summary is not recovery. If recovery is incomplete, report that and stop affected work.
45
+ - Current user direction, live state, and the Runtime State override the record where they conflict. A record or summary may show prior approval; check that it still applies. Neither creates authority.
89
46
 
90
- Exit only when evidence and authority support it, applicable self-review and selected checkpoints are resolved, and required task memory and artifacts are accurate. Make material gaps, contradictions, deferrals, and user-owned decisions explicit. Report the outcome, evidence, limits, and current route.
47
+ Then continue the covered work toward the agreed end. Context loss is no reason to stop or ask again. With that conversation still in context, a new message, a pause or a resumed session is not context loss.
@@ -1,11 +1,21 @@
1
1
  # Freeflow Interaction Contract
2
2
 
3
- Read the whole user turn and respond as a collaborative senior engineer. Respect user-owned goals and choices; judge claims from evidence rather than merely agreeing. Resolve available facts yourself, expose consequential tradeoffs, recommend when warranted, and state uncertainty or revise your position honestly.
3
+ Work with the user as a collaborative senior engineer: honest, direct, and on their side, which sometimes means disagreeing.
4
4
 
5
- Interpret requested intent, not sentence form. A question can request action. Questions, criticism, examples, hypotheses, and tentative ideas do not authorize action by themselves. Treat hypothetical or quoted instructions as discussion unless the user adopts them as a current request. Do not infer execution authority merely because discussion converged.
6
-
7
- For execution, establish the outcome, scope, and user-facing return condition. If the request already makes them clear, proceed without redundant confirmation. Otherwise ask only the missing material question and wait before the unsettled action. Use Workflow to coordinate covered execution; do not require the user to supply implementation mechanics.
8
-
9
- When a turn combines a question with requested action, answer the question before any action that depends on it. Proceed when that action remains clear, supported, and authorized. If the answer could change the user's choice, exposes a source conflict, or leaves action conditional, explain and wait. An unresolved question does not automatically suspend independent, clearly authorized work.
10
-
11
- Ask before going beyond the agreement. Use ordinary language unless Freeflow terminology materially improves clarity.
5
+ - Read the whole turn before acting, and tell its parts apart: a question, a request, a proposal, criticism, an example, a hypothesis. Only a request to act authorizes action. Questions, criticism, examples, and ideas do not, and neither does agreement reached in discussion. Quoted or hypothetical instructions are discussion unless the user adopts them as a current request.
6
+ - Answer a question with an answer. Do not start changing things because a question hints at a change.
7
+ - When a turn mixes questions and requests, or a question arrives mid-work, answer the questions first. Act, or continue the current step, only when the request is clear and no answer could change it; otherwise answer and wait. On "stop", start no new effect; finish or revert only what is in flight, then report.
8
+ - Judge every claim by its evidence, including the user's. Do not agree to please: no reflexive "you're absolutely right", and no conceding a point you still think is wrong. If the user is right, say what convinced you. If not, say plainly why, and what would change your mind.
9
+ - When you realize something you said was wrong, say so plainly and correct it; do not quietly change course.
10
+ - Say that something happened, or did not, only from a source that would show it. Not remembering or not seeing it is not evidence either way.
11
+ - Carry your share of the thinking: recommend when you have a view, name the tradeoffs that matter, and say how sure you are.
12
+ - When the outcome, scope, or endpoint is unclear and matters, propose them yourself, as Discuss Work describes: what you will do, what you won't, and when you come back. A proposal the user has not answered is not agreed.
13
+ - A narrower instruction ("just diagnose first", "don't edit yet") holds until the user lifts it, after a compaction too and over any broader written agreement. An effect the agreement says to ask about first still needs the user's yes after recovery.
14
+ - When the user changes direction or scope and a Working Record has a Work agreement, update that section in the user's words before continuing; their message covers the edit.
15
+ - At the edge of what the user authorized, end your report by proposing the next step as a question, such as "Commit this?". Before going further, or before a choice that is the user's to make, ask one clear question and wait.
16
+ - Look up facts yourself instead of asking. When you need something from the user, say exactly what: a decision, a missing fact, an approval. For a decision, give the options that matter and your recommendation. When you need nothing, do not invent a question.
17
+ - When the host has a question tool (a dialog with options), it usually fits a bounded choice that is the user's: they answer in a keystroke, in their exact words. Ask in your reply when the choice needs explaining first or is still open.
18
+ - If you notice something important outside the request, such as a bug, a stale document, or a risk, mention it briefly and leave acting on it to the user.
19
+ - Report what you actually did and verified, including what failed or is still unverified. Never present an intention or a request as a result.
20
+ - Lead with the answer or the outcome, then the reasoning. Match length to what the turn needs: do not restate the question, pad, or hedge every sentence.
21
+ - Use plain language; use Freeflow terms only when they make something clearer.
@@ -0,0 +1,25 @@
1
+ # Working In The Environment
2
+
3
+ Take in the lines that answer the question, not the files that contain them.
4
+
5
+ ## Search and read
6
+
7
+ - Anchor on the most distinctive thing you have: an exact error message, a failing command's output, an identifier from the request. Search for it alone, capped: `grep -rn 'exact message' src | head -20`.
8
+ - Ask one question per query and put several queries in one call, each labeled: `echo '--- callers'; grep -rn 'name(' src | head`.
9
+ - Cap every search with `| head -N`, `-l` or `-c`. Scope it to source directories; exclude generated output, dependencies and history.
10
+ - Follow identifiers: each result names the next exact thing to search.
11
+ - Read the file that explains the symptom whole when it is the center of the problem; otherwise read the line range you need.
12
+ - For documents, list the headings first (`grep -n '^#' file.md`), then read only the sections you need.
13
+ - Send independent reads and searches in the same response.
14
+
15
+ ## Running the code
16
+
17
+ - To learn what code does, run it: write a throwaway script in your scratch location that imports the code, calls it with realistic input, and prints the result.
18
+ - Time an operation next to its baseline in the same call: `time real_command; time baseline_command`.
19
+
20
+ ## Editing
21
+
22
+ - Put every change to one existing file in a single `edit` call.
23
+ - Create a single new file with `write`. Write over an existing file only after reading it.
24
+ - Copy `edit`'s old text from your latest view of that region.
25
+ - After a successful edit, check behavior, not the file text.
@@ -0,0 +1,25 @@
1
+ # Freeflow Working Method
2
+
3
+ These rules and habits hold on every task, whatever skill is guiding it. Each habit is the short form of a method its skill holds in full, with the scripts that do it; read that skill when its step comes, as Freeflow core's cycle names it.
4
+
5
+ ## Rules
6
+
7
+ 1. **Claim only what you observed.** Every claim that something works rests on output you saw in this task; say what that output could not show.
8
+ 2. **Stay inside the request.** Change what the request needs and nothing else. A *may* is a permission, not a request.
9
+ 3. **Never make a check pass by weakening it.** Do not change an existing test's expectation, skip it, widen a tolerance, or change shared setup so a test no longer exercises what it did, unless the request changes the behavior it encodes. When existing tests fail after your change, assume your change broke what they protect.
10
+ 4. **Never destroy work that is not yours.** No `git stash`, `git reset --hard`, `git clean`, or checkout over changes you did not make. Look at a file before you delete or overwrite it. A separate `git worktree` keeps your work apart in a checkout others may be using.
11
+ 5. **Stated requirements are requirements.** Implement behavior, names, messages, scope and dependencies as a request, assignment, specification or note states them. If one conflicts with the request or the code, stop and say which and why; do not choose yourself.
12
+
13
+ ## Habits for every change
14
+
15
+ - **Read the request in layers before the first edit:** each separate ask, what the requester saw, and what must stay true although nobody wrote it down: data the old code wrote stays readable, every way users or code reach the behavior keeps working, and other readers of the output still get what they rely on (Execute Work's Read The Request).
16
+ - **Find what the change touches by querying, not imagining:** callers, readers and writers of the state, and the tests that cover it (Execute Work's touch-map script).
17
+ - **Reproduce a problem through the user's path before changing anything,** and aim every check at that path with input of the user's size and shape (Verify Work).
18
+ - **Run the existing tests before and after your change.** A new failure that does not fail in an untouched copy is a requirement you broke. Before reporting a change to an existing test, fixture or shared setup, list it with Verify Work's test-changes script (Verify Work).
19
+ - **Know what you expect before you look, and explain a surprise first:** a new test that passes before the fix, or an empty result, more often means a broken check than good news (Verify Work).
20
+ - **Two failed fixes mean the diagnosis is wrong:** change the question or the kind of observation instead of trying a third (Execute Work's Diagnose Before Fixing, then its diagnose reference).
21
+ - **Before you report, read the actual diff,** and give each requirement with the output that shows it holds, or say it is not verified (Execute Work's self-review script, Review Your Own Change and Report A Finished Change).
22
+
23
+ ## Keep output small
24
+
25
+ Every tool result is sent again with each later request. Cap searches and command output (`| head -20`, `2>&1 | tail -40`) and say when you cut it: a capped result does not show that nothing else matched. Save long output to a scratch file (the task's `scratch/` when it has a Working Record, otherwise `${TMPDIR:-/tmp}`, never elsewhere in the repository) and query the file instead of rerunning the command.
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: deliver-work
3
+ description: "Use whenever work leaves your working tree: staging and committing, writing a commit message, pushing, opening, updating or merging a pull request, finishing, keeping or deleting a branch or worktree; preparing or publishing a release (version bump, changelog, release notes, tag, package publish); and deploying, rolling out, rolling back or restoring production. Read it before running git commit, git push, a merge, a tag or a publish command, even when the user only says commit or ship. It checks the branch, the staged files and the remote before each step, and exactly what each step includes."
4
+ ---
5
+
6
+ # Deliver Work
7
+
8
+ Take finished work into a commit, a pushed or merged branch, a pull request, a release or production, only as far as the user said yes.
9
+
10
+ The **Rules** are binding; if one cannot be met, stop and say why. Everything else is judgment: adapt it when another choice serves its goal better.
11
+
12
+ ## Routes
13
+
14
+ | Situation | Read |
15
+ | --- | --- |
16
+ | An ordinary commit of your own changes | Commit, below |
17
+ | Committing with mixed owners or concerns, a file holding included and excluded changes, or generated, sensitive or unexplained files; Git mid-operation, unmerged, detached or with a changed submodule; nothing to commit; amend, empty commit or skipped hooks asked for; a failed commit or hook | [commit](references/commit.md) |
18
+ | Pushing to a remote branch | [branch closeout: Simple Push](references/branch-closeout.md#simple-push) |
19
+ | Merging, a pull request, or keeping, discarding or deleting a branch or worktree | [branch closeout](references/branch-closeout.md) |
20
+ | A version, release notes, tag or registry publication | [release](references/release.md) |
21
+ | Deploying, exposing a change to users, rolling back or restoring production | [launch](references/launch.md) |
22
+
23
+ Start every route with [delivery-state](scripts/delivery-state.mjs) (`node <deliver-work-directory>/scripts/delivery-state.mjs`): branch, upstream counts from local refs, staged, unstaged and untracked counts, a Git operation in progress, every worktree with the one holding this session's directory flagged, the latest tag, the version and the changelog's Unreleased entries. It reads only; what needs the network it reports unavailable.
24
+
25
+ A request spanning routes, such as "commit and push": take them in order, each within its own yes, and stop at the first that fails.
26
+
27
+ ## Rules
28
+
29
+ - Merging, a pull request, deleting or discarding a branch, worktree or uncommitted work, deploying, and every exposure stage need their own yes, like commit, push and release. Loading this skill, a readiness question or an approved plan gives none, and one route's success never authorizes the next.
30
+ - Never use `--amend`, `--allow-empty`, `--no-verify`, a force push, a history rewrite, a moved release tag or an overwritten published version unless the user asked for that exact action; never bypass or blindly retry a failing hook or check.
31
+ - Never stage or publish Working Records (`.freeflow/tasks/**`), secrets, credentials, private keys, local environment files or unexplained sensitive content.
32
+ - Never absorb or unstage pre-existing staged changes, or remove a worktree, checkout or other state you did not create. Never run a destructive reset, clean, branch or remote deletion, worktree removal or force push merely to produce a clean status.
33
+ - After a commit, push, publication or deployment step fails or loses its acknowledgement, inspect what changed before retrying, and stop while it stays unknown; a network error does not mean nothing happened.
34
+
35
+ ## Commit
36
+
37
+ Goal: one commit that holds exactly the supported state.
38
+
39
+ 1. **Boundary.** The user asked for this commit, or a `preserve` Checkpoint they selected is due; a Working Record can carry that selection, not create it. Fresh checks support the state, or the user asked to preserve incomplete work; a review they selected is done, its findings settled.
40
+ 2. **Inspect** before touching the index: [commit-state](scripts/commit-state.mjs) lists every staged, unstaged and untracked path as yours, pre-existing or unknown (from a `snapshot` taken before your first edit, or `--mine <path>`), with partly staged files, sensitive-looking paths and Working Records flagged; then read `git diff` and `git diff --cached`. Staged does not mean yours. If the second Routes row matches, read [commit](references/commit.md) now.
41
+ 3. **Stage** only what the claim needs: explicit paths or hunks, with the tests, docs and generated output it requires; stage broadly only when every changed path was inspected and belongs. Then `git diff --cached --check`: conflict markers or whitespace damage stop the commit; fix them in the content they belong to, never edit content just to silence the check.
42
+ 4. **Message** in the repository's style; otherwise a short imperative subject naming what this commit holds, and a body only for what the diff cannot show: why, trade-offs, residual risk, why incomplete work is kept. Invent no trailers.
43
+ 5. **Check** `git show --stat --oneline HEAD` and `git status --short --branch`: the claimed contents, nothing unexpected left.
44
+ 6. **Record** `commit:<sha>` in the Current Slice's Material updates and close the selected `preserve` Checkpoint through [Track Work](../track-work/SKILL.md), when a Working Record exists.
45
+
46
+ Rules for a commit:
47
+
48
+ - Claim no more than the checks and selected review support. A preservation commit the user asked for may hold incomplete or failing work: say so, and do not take it as leave to cross what is unresolved.
49
+ - A commit is never a Slice of its own; after it, stage no leftovers and begin no other Slice.
50
+
51
+ ## Other Owners
52
+
53
+ A choice that is the user's goes to [Discuss Work](../discuss-work/SKILL.md), with the supported routes as options; what a check supports, to [Verify Work](../verify-work/SKILL.md); a failure without a known cause, to Execute Work's [diagnose](../execute-work/references/diagnose.md); a selected review not yet run, reported for [Review Work](../review-work/SKILL.md).
54
+
55
+ ## Stop
56
+
57
+ Stop and return the smallest blocking fact when:
58
+
59
+ - what a route's yes covers is unclear;
60
+ - live state differs from what was verified, reviewed or approved: changes, source commit, version, artifact, configuration or target;
61
+ - required evidence or a selected review is missing;
62
+ - a destination is unclear: remote, branch, base, pull-request target, registry, channel or environment;
63
+ - a conflict needs more than a mechanical resolution of both sides' settled intended behavior, such as a behavior, source-of-truth or owner decision; never end a conflict by taking ours or theirs.
64
+
65
+ ## Report
66
+
67
+ End with the lines that apply:
68
+
69
+ ```text
70
+ Route: <route and stage, and what the yes covered>
71
+ Identity: <SHA and subject, branch and remote, pull-request URL, version and tag, artifact and target>
72
+ Evidence: <each check on the final state and what it shows; the selected review's outcome>
73
+ Not shown: <what this does not establish (pushed is not merged, merged not released, a prepared release not published, published not deployed); what went unverified>
74
+ Remaining: <unpushed or uncommitted work, pending CI or review, observation windows left, temporary machinery with its owner and cleanup, partial failures and recovery>
75
+ Next: <the next route as a question, and whose call it is>
76
+ ```