@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.
- package/.agents/plugins/marketplace.json +2 -2
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +3 -3
- package/.cursor-plugin/plugin.json +1 -1
- package/NOTICE +14 -0
- package/README.md +101 -159
- package/capabilities/cognitive-routing/SKILL.md +47 -210
- package/capabilities/cognitive-routing/references/coordinator.md +163 -0
- package/capabilities/cognitive-routing/references/worker.md +38 -0
- package/capabilities/compaction/SKILL.md +49 -0
- package/capabilities/compaction/references/summary-format.md +250 -0
- package/capabilities/messaging/SKILL.md +49 -0
- package/capabilities/task-memory/SKILL.md +87 -0
- package/command-surface.json +8 -52
- package/gemini-extension.json +1 -1
- package/hooks/claude/hooks.json +13 -3
- package/hooks/codex/hooks.json +2 -1
- package/hooks/shared/runtime-context.mjs +73 -83
- package/licenses/Apache-2.0.txt +55 -0
- package/package.json +42 -12
- package/pi-extension/README.md +41 -0
- package/pi-extension/dist/ask-user/ask.js +108 -0
- package/pi-extension/dist/ask-user/form.js +250 -0
- package/pi-extension/dist/ask-user/questions.js +66 -0
- package/pi-extension/dist/ask-user/tool.js +124 -0
- package/pi-extension/dist/cognitive-routing/assembler.js +417 -0
- package/pi-extension/dist/cognitive-routing/bootstrap.js +90 -0
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/config.js +8 -6
- package/pi-extension/dist/cognitive-routing/economics.js +45 -0
- package/pi-extension/dist/cognitive-routing/event-schema.js +388 -0
- package/pi-extension/dist/{session-sources/events.js → cognitive-routing/event-store.js} +107 -41
- package/pi-extension/dist/cognitive-routing/gate.js +256 -0
- package/pi-extension/dist/cognitive-routing/handlers.js +901 -0
- package/pi-extension/dist/cognitive-routing/handoffs.js +350 -0
- package/pi-extension/dist/cognitive-routing/model-control.js +476 -0
- package/pi-extension/dist/cognitive-routing/projection.js +520 -0
- package/pi-extension/dist/cognitive-routing/provenance.js +83 -0
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/render.js +15 -15
- package/pi-extension/dist/cognitive-routing/runtime.js +398 -0
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/schemas.js +47 -11
- package/pi-extension/dist/cognitive-routing/session.js +223 -0
- package/pi-extension/dist/{session-sources → cognitive-routing}/sources.js +126 -87
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/state.js +55 -386
- package/pi-extension/dist/cognitive-routing/status.js +81 -0
- package/pi-extension/dist/cognitive-routing/tools.js +74 -0
- package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/types.js +14 -11
- package/pi-extension/dist/compaction/carry.js +205 -0
- package/pi-extension/dist/compaction/config.js +24 -0
- package/pi-extension/dist/compaction/controller.js +494 -0
- package/pi-extension/dist/compaction/harness.js +93 -0
- package/pi-extension/dist/compaction/results.js +159 -0
- package/pi-extension/dist/compaction/thresholds.js +35 -0
- package/pi-extension/dist/compaction/tool.js +57 -0
- package/pi-extension/dist/host/branch.js +13 -0
- package/pi-extension/dist/host/canonical.js +12 -0
- package/pi-extension/dist/host/catalog.js +62 -0
- package/pi-extension/dist/host/config-validation.js +233 -0
- package/pi-extension/dist/host/config.js +361 -0
- package/pi-extension/dist/host/inbound.js +142 -0
- package/pi-extension/dist/host/projection-tags.js +60 -0
- package/pi-extension/dist/host/prompts.js +93 -0
- package/pi-extension/dist/{session-sources → host}/read-only-session.js +117 -1
- package/pi-extension/dist/{runtime → host}/request-history.js +125 -39
- package/pi-extension/dist/host/rows.js +25 -0
- package/pi-extension/dist/host/runtime-state.js +204 -0
- package/pi-extension/dist/host/section-keeper.js +85 -0
- package/pi-extension/dist/host/settings/freeflow-command.js +2323 -0
- package/pi-extension/dist/{settings/settings-tui.js → host/settings/settings-view.js} +205 -73
- package/pi-extension/dist/host/staging.js +28 -0
- package/pi-extension/dist/host/status.js +115 -0
- package/pi-extension/dist/index.js +1004 -188
- package/pi-extension/dist/messaging/config.js +27 -0
- package/pi-extension/dist/messaging/messaging.js +398 -0
- package/pi-extension/dist/messaging/registry.js +57 -0
- package/pi-extension/dist/messaging/render.js +90 -0
- package/pi-extension/dist/messaging/tools.js +109 -0
- package/pi-extension/dist/messaging/transport.js +101 -0
- package/pi-extension/dist/provider-support/cache/anchor.js +21 -0
- package/pi-extension/dist/provider-support/cache/anthropic.js +102 -0
- package/pi-extension/dist/provider-support/cache/health.js +73 -0
- package/pi-extension/dist/provider-support/cache/index.js +58 -0
- package/pi-extension/dist/provider-support/cache/keepalive.js +222 -0
- package/pi-extension/dist/provider-support/cache/monitor.js +17 -0
- package/pi-extension/dist/provider-support/cache/openai-responses.js +48 -0
- package/pi-extension/dist/provider-support/effort.js +13 -0
- package/pi-extension/dist/provider-support/index.js +44 -3
- package/pi-extension/dist/provider-support/{astra → openai}/adapter.js +46 -29
- package/pi-extension/dist/provider-support/{astra → openai}/history.js +10 -8
- package/pi-extension/dist/provider-support/{astra → openai}/index.js +8 -4
- package/pi-extension/dist/provider-support/{astra → openai}/session-state.js +29 -38
- package/pi-extension/dist/provider-support/routes.js +17 -0
- package/pi-extension/dist/task-memory/config.js +49 -0
- package/pi-extension/dist/task-memory/registry.js +119 -0
- package/pi-extension/dist/task-memory/render.js +107 -0
- package/pi-extension/dist/task-memory/runtime.js +994 -0
- package/pi-extension/dist/task-memory/tool.js +233 -0
- package/pi-extension/dist/tool-execution/apply-patch/grammar.js +23 -0
- package/pi-extension/dist/tool-execution/apply-patch/match.js +38 -0
- package/pi-extension/dist/tool-execution/apply-patch/parser.js +177 -0
- package/pi-extension/dist/tool-execution/apply-patch/plan.js +201 -0
- package/pi-extension/dist/tool-execution/apply-patch/tool.js +84 -0
- package/pi-extension/dist/tool-execution/background.js +430 -0
- package/pi-extension/dist/tool-execution/bash-guard.js +23 -0
- package/pi-extension/dist/tool-execution/config.js +33 -0
- package/pi-extension/dist/tool-execution/edit-messages.js +120 -0
- package/pi-extension/dist/tool-execution/file-state.js +138 -0
- package/pi-extension/dist/tool-execution/file-tracking.js +163 -0
- package/pi-extension/dist/tool-execution/guidance-notices.js +124 -0
- package/pi-extension/dist/tool-execution/prompt.js +54 -0
- package/pi-extension/dist/tool-execution/skill-reads.js +143 -0
- package/pi-extension/dist/tool-execution/tools.js +16 -0
- package/pi-extension/freeflow/README.md +9 -0
- package/runtime/prompts/cognitive-routing.md +4 -4
- package/runtime/prompts/core.md +29 -72
- package/runtime/prompts/interaction-contract.md +18 -8
- package/runtime/prompts/tool-execution.md +25 -0
- package/runtime/prompts/working-method.md +25 -0
- package/skills/deliver-work/SKILL.md +76 -0
- package/skills/deliver-work/references/branch-closeout.md +134 -0
- package/skills/deliver-work/references/commit.md +83 -0
- package/skills/deliver-work/references/launch.md +94 -0
- package/skills/deliver-work/references/release.md +85 -0
- package/skills/deliver-work/scripts/commit-state.mjs +139 -0
- package/skills/deliver-work/scripts/delivery-state.mjs +107 -0
- package/skills/deliver-work/scripts/lib/git-state.mjs +178 -0
- package/skills/deliver-work/scripts/push-route.mjs +122 -0
- package/skills/deliver-work/scripts/release-preflight.mjs +177 -0
- package/skills/discuss-work/SKILL.md +148 -0
- package/skills/{discuss → discuss-work}/references/discussion-continuity.md +13 -50
- package/skills/discuss-work/references/learning-action.md +36 -0
- package/skills/discuss-work/scripts/choices.mjs +101 -0
- package/skills/discuss-work/scripts/lib/choices.mjs +159 -0
- package/skills/evaluate-behavior/SKILL.md +107 -0
- package/skills/evaluate-behavior/references/authoring.md +381 -0
- package/skills/evaluate-behavior/references/coding-tasks.md +145 -0
- package/skills/evaluate-behavior/references/conversations-pipelines-judges.md +177 -0
- package/skills/evaluate-behavior/references/design-and-measurement.md +273 -0
- package/skills/evaluate-behavior/references/running-and-evidence.md +245 -0
- package/skills/evaluate-behavior/scripts/claude-guard.mjs +76 -0
- package/skills/evaluate-behavior/scripts/guard-rules.mjs +309 -0
- package/skills/evaluate-behavior/scripts/lib/agreement.mjs +90 -0
- package/skills/evaluate-behavior/scripts/lib/arms.mjs +55 -0
- package/skills/evaluate-behavior/scripts/lib/budget.mjs +87 -0
- package/skills/evaluate-behavior/scripts/lib/build-source.mjs +287 -0
- package/skills/evaluate-behavior/scripts/lib/clear.mjs +74 -0
- package/skills/evaluate-behavior/scripts/lib/container.mjs +395 -0
- package/skills/evaluate-behavior/scripts/lib/decision.mjs +418 -0
- package/skills/evaluate-behavior/scripts/lib/definitions.mjs +1072 -0
- package/skills/evaluate-behavior/scripts/lib/freeflow.mjs +103 -0
- package/skills/evaluate-behavior/scripts/lib/grade-command.mjs +591 -0
- package/skills/evaluate-behavior/scripts/lib/grade-comparison.mjs +90 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-interaction.mjs +19 -18
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-support.mjs +32 -5
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/grade-workspace.mjs +28 -12
- package/skills/evaluate-behavior/scripts/lib/grade.mjs +101 -0
- package/skills/evaluate-behavior/scripts/lib/hooks.mjs +98 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/confinement.mjs +196 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/constraints.mjs +111 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/index.mjs +48 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/isolation.mjs +74 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/launch.mjs +123 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/model-call.mjs +73 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/recorder.mjs +178 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/session.mjs +494 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/claude-code/skills.mjs +81 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/index.mjs +31 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/names.mjs +3 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/confinement.mjs +173 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/host.mjs +148 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/index.mjs +70 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/isolation.mjs +81 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/model-call.mjs +79 -0
- package/skills/evaluate-behavior/scripts/lib/hosts/pi/process.mjs +241 -0
- package/skills/{evaluate-skill/scripts/lib → evaluate-behavior/scripts/lib/hosts/pi}/rpc.mjs +144 -26
- package/skills/evaluate-behavior/scripts/lib/identity.mjs +82 -0
- package/skills/evaluate-behavior/scripts/lib/judge.mjs +688 -0
- package/skills/evaluate-behavior/scripts/lib/metrics.mjs +332 -0
- package/skills/evaluate-behavior/scripts/lib/model-call.mjs +17 -0
- package/skills/evaluate-behavior/scripts/lib/participants.mjs +616 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/process.mjs +22 -0
- package/skills/evaluate-behavior/scripts/lib/queue.mjs +54 -0
- package/skills/evaluate-behavior/scripts/lib/reference.mjs +343 -0
- package/skills/evaluate-behavior/scripts/lib/reuse.mjs +277 -0
- package/skills/evaluate-behavior/scripts/lib/review.mjs +933 -0
- package/skills/evaluate-behavior/scripts/lib/runner.mjs +732 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/sandbox.mjs +121 -14
- package/skills/evaluate-behavior/scripts/lib/scan-shell.mjs +457 -0
- package/skills/evaluate-behavior/scripts/lib/scan.mjs +479 -0
- package/skills/evaluate-behavior/scripts/lib/seal.mjs +91 -0
- package/skills/evaluate-behavior/scripts/lib/shell.mjs +560 -0
- package/skills/evaluate-behavior/scripts/lib/source-override.mjs +64 -0
- package/skills/evaluate-behavior/scripts/lib/subject-file.mjs +88 -0
- package/skills/{evaluate-skill/scripts/lib/pi.mjs → evaluate-behavior/scripts/lib/subject.mjs} +239 -262
- package/skills/evaluate-behavior/scripts/lib/task-copy.mjs +124 -0
- package/skills/evaluate-behavior/scripts/lib/trials.mjs +524 -0
- package/skills/evaluate-behavior/scripts/lib/validity.mjs +68 -0
- package/skills/evaluate-behavior/scripts/lib/view-html.mjs +454 -0
- package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/view.mjs +218 -11
- package/skills/evaluate-behavior/scripts/pi-command-tool.mjs +159 -0
- package/skills/evaluate-behavior/scripts/pi-container-route.mjs +23 -0
- package/skills/evaluate-behavior/scripts/pi-guard.mjs +77 -0
- package/skills/evaluate-behavior/scripts/pi-login-refresh.mjs +31 -0
- package/skills/evaluate-behavior/scripts/skill-eval.mjs +586 -0
- package/skills/execute-work/SKILL.md +96 -72
- package/skills/execute-work/references/code-practices.md +27 -49
- package/skills/execute-work/references/design.md +271 -0
- package/skills/execute-work/references/diagnose.md +117 -0
- package/skills/execute-work/references/migration.md +108 -0
- package/skills/execute-work/references/simplify.md +65 -0
- package/skills/execute-work/scripts/self-review.mjs +422 -0
- package/skills/execute-work/scripts/touch-map.mjs +290 -0
- package/skills/review-work/SKILL.md +94 -64
- package/skills/review-work/references/adjudication.md +94 -0
- package/skills/review-work/references/artifact.md +198 -0
- package/skills/review-work/references/evals-and-judges.md +66 -0
- package/skills/review-work/references/work.md +177 -0
- package/skills/review-work/scripts/check-brief.mjs +128 -0
- package/skills/review-work/scripts/review-packet.mjs +233 -0
- package/skills/setup-freeflow/SKILL.md +69 -16
- package/skills/track-work/SKILL.md +135 -151
- package/skills/track-work/references/handoff.md +190 -0
- package/skills/track-work/references/projects.md +51 -0
- package/skills/track-work/references/working-record-format.md +201 -344
- package/skills/track-work/scripts/lib/document.mjs +79 -19
- package/skills/track-work/scripts/lib/format.mjs +18 -1
- package/skills/track-work/scripts/lib/recover.mjs +254 -0
- package/skills/track-work/scripts/lib/registry.mjs +656 -0
- package/skills/track-work/scripts/lib/search.mjs +40 -0
- package/skills/track-work/scripts/lib/store.mjs +53 -21
- package/skills/track-work/scripts/lib/transitions.mjs +79 -4
- package/skills/track-work/scripts/lib/views.mjs +50 -1
- package/skills/track-work/scripts/working-record.mjs +263 -22
- package/skills/verify-work/SKILL.md +64 -47
- package/skills/verify-work/references/feature-map.md +120 -0
- package/skills/verify-work/references/runtime-evidence.md +203 -0
- package/skills/verify-work/references/test-design.md +27 -6
- package/skills/verify-work/scripts/test-changes.mjs +246 -0
- package/skills/write-docs/SKILL.md +171 -0
- package/skills/write-docs/references/documentation-shapes.md +184 -0
- package/skills/write-docs/references/spec-and-plan-shapes.md +308 -0
- package/skills/write-docs/scripts/artifact-check.mjs +148 -0
- package/skills/write-docs/scripts/docs-check.mjs +229 -0
- package/skills/write-docs/scripts/plan-lint.mjs +123 -0
- package/skills/write-skill/SKILL.md +165 -165
- package/skills/write-skill/references/activation-and-wording.md +143 -0
- package/skills/write-skill/references/placement-and-dependencies.md +154 -0
- package/skills/write-skill/scripts/lib/compare.mjs +701 -0
- package/skills/write-skill/scripts/lib/similarity.mjs +56 -0
- package/skills/write-skill/scripts/lib/skill-author.mjs +197 -3
- package/skills/write-skill/scripts/skill-author.mjs +67 -8
- package/capabilities/context-virtualization/SKILL.md +0 -103
- package/capabilities/conversation-history/SKILL.md +0 -53
- package/hooks/tests/check-host-adapters.test.mjs +0 -82
- package/hooks/tests/check-runtime-context-hook.sh +0 -212
- package/pi-extension/dist/cognitive-routing-v2/projection.js +0 -330
- package/pi-extension/dist/cognitive-routing-v2/runtime.js +0 -2181
- package/pi-extension/dist/cognitive-routing-v2/tools.js +0 -60
- package/pi-extension/dist/context-virtualization/commands.js +0 -89
- package/pi-extension/dist/context-virtualization/projector.js +0 -42
- package/pi-extension/dist/context-virtualization/runtime.js +0 -378
- package/pi-extension/dist/context-virtualization/state.js +0 -57
- package/pi-extension/dist/context-virtualization/types.js +0 -10
- package/pi-extension/dist/conversation-history/passages.js +0 -66
- package/pi-extension/dist/conversation-history/ranking.js +0 -105
- package/pi-extension/dist/conversation-history/runtime.js +0 -226
- package/pi-extension/dist/conversation-history/search.js +0 -56
- package/pi-extension/dist/conversation-history/types.js +0 -1
- package/pi-extension/dist/freeflow-context/resolver.js +0 -120
- package/pi-extension/dist/freeflow-context/runtime.js +0 -80
- package/pi-extension/dist/freeflow-context/source-projector.js +0 -95
- package/pi-extension/dist/freeflow-context/tool.js +0 -314
- package/pi-extension/dist/freeflow-context/types.js +0 -12
- package/pi-extension/dist/freeflow-context/visibility.js +0 -28
- package/pi-extension/dist/integrations/mcp-config.js +0 -29
- package/pi-extension/dist/runtime/runtime-context.js +0 -754
- package/pi-extension/dist/runtime/runtime-identity.js +0 -5
- package/pi-extension/dist/session-sources/provenance.js +0 -32
- package/pi-extension/dist/settings/settings-ui.js +0 -1360
- package/pi-extension/dist/ui/text-component.js +0 -57
- package/pi-extension/src/cognitive-routing-v2/budget.ts +0 -42
- package/pi-extension/src/cognitive-routing-v2/config.ts +0 -173
- package/pi-extension/src/cognitive-routing-v2/projection.ts +0 -375
- package/pi-extension/src/cognitive-routing-v2/render.ts +0 -277
- package/pi-extension/src/cognitive-routing-v2/runtime.ts +0 -2241
- package/pi-extension/src/cognitive-routing-v2/schemas.ts +0 -180
- package/pi-extension/src/cognitive-routing-v2/state.ts +0 -839
- package/pi-extension/src/cognitive-routing-v2/tools.ts +0 -62
- package/pi-extension/src/cognitive-routing-v2/types.ts +0 -254
- package/pi-extension/src/context-virtualization/commands.ts +0 -111
- package/pi-extension/src/context-virtualization/projector.ts +0 -62
- package/pi-extension/src/context-virtualization/runtime.ts +0 -428
- package/pi-extension/src/context-virtualization/state.ts +0 -79
- package/pi-extension/src/context-virtualization/types.ts +0 -92
- package/pi-extension/src/conversation-history/passages.ts +0 -81
- package/pi-extension/src/conversation-history/ranking.ts +0 -155
- package/pi-extension/src/conversation-history/runtime.ts +0 -250
- package/pi-extension/src/conversation-history/search.ts +0 -79
- package/pi-extension/src/conversation-history/types.ts +0 -31
- package/pi-extension/src/freeflow-context/resolver.ts +0 -139
- package/pi-extension/src/freeflow-context/runtime.ts +0 -100
- package/pi-extension/src/freeflow-context/source-projector.ts +0 -106
- package/pi-extension/src/freeflow-context/tool.ts +0 -366
- package/pi-extension/src/freeflow-context/types.ts +0 -70
- package/pi-extension/src/freeflow-context/visibility.ts +0 -53
- package/pi-extension/src/index.ts +0 -390
- package/pi-extension/src/integrations/mcp-config.ts +0 -32
- package/pi-extension/src/provider-support/astra/adapter.ts +0 -108
- package/pi-extension/src/provider-support/astra/history.ts +0 -145
- package/pi-extension/src/provider-support/astra/index.ts +0 -12
- package/pi-extension/src/provider-support/astra/session-state.ts +0 -113
- package/pi-extension/src/provider-support/index.ts +0 -5
- package/pi-extension/src/runtime/request-history.ts +0 -243
- package/pi-extension/src/runtime/runtime-context.ts +0 -860
- package/pi-extension/src/runtime/runtime-identity.ts +0 -8
- package/pi-extension/src/session-sources/events.ts +0 -230
- package/pi-extension/src/session-sources/provenance.ts +0 -39
- package/pi-extension/src/session-sources/read-only-session.ts +0 -170
- package/pi-extension/src/session-sources/sources.ts +0 -334
- package/pi-extension/src/settings/settings-tui.ts +0 -501
- package/pi-extension/src/settings/settings-ui.ts +0 -1652
- package/pi-extension/src/ui/text-component.ts +0 -66
- package/pi-extension/tests/cache-reuse/history.test.js +0 -117
- package/pi-extension/tests/cache-reuse/native.test.js +0 -91
- package/pi-extension/tests/cache-reuse/settings.test.js +0 -211
- package/pi-extension/tests/cognitive-routing-v2/communication.test.js +0 -577
- package/pi-extension/tests/cognitive-routing-v2/compaction-input.test.js +0 -183
- package/pi-extension/tests/cognitive-routing-v2/delegation.test.js +0 -557
- package/pi-extension/tests/cognitive-routing-v2/native.test.js +0 -474
- package/pi-extension/tests/cognitive-routing-v2/performance.test.js +0 -87
- package/pi-extension/tests/cognitive-routing-v2/persistence.test.js +0 -300
- package/pi-extension/tests/cognitive-routing-v2/projection.test.js +0 -241
- package/pi-extension/tests/cognitive-routing-v2/recovery.test.js +0 -1034
- package/pi-extension/tests/cognitive-routing-v2/render.test.js +0 -244
- package/pi-extension/tests/cognitive-routing-v2/runtime.test.js +0 -423
- package/pi-extension/tests/cognitive-routing-v2/stabilization.test.js +0 -521
- package/pi-extension/tests/cognitive-routing-v2/state.test.js +0 -586
- package/pi-extension/tests/context-virtualization/extension.test.js +0 -775
- package/pi-extension/tests/context-virtualization/projector.test.js +0 -110
- package/pi-extension/tests/context-virtualization/runtime.test.js +0 -230
- package/pi-extension/tests/conversation-history/runtime.test.js +0 -98
- package/pi-extension/tests/conversation-history/search.test.js +0 -97
- package/pi-extension/tests/fixtures/pi-host.js +0 -4
- package/pi-extension/tests/fixtures/routing-native.js +0 -191
- package/pi-extension/tests/integration/mode-free-core.test.js +0 -220
- package/pi-extension/tests/integration/pi-extension.test.js +0 -1447
- package/pi-extension/tests/integration/prompt-architecture.test.js +0 -447
- package/pi-extension/tests/integration/unaffected-regressions.test.js +0 -478
- package/pi-extension/tests/provider-support/astra-boundaries.test.js +0 -75
- package/pi-extension/tests/provider-support/astra.test.js +0 -306
- package/pi-extension/tests/provider-support/cli.test.js +0 -92
- package/pi-extension/tests/provider-support/native.test.js +0 -183
- package/pi-extension/tests/settings/settings-tui.test.js +0 -243
- package/pi-extension/tsconfig.json +0 -16
- package/plugin.json +0 -33
- package/runtime/prompts/context-virtualization.md +0 -3
- package/runtime/prompts/conversation-history.md +0 -3
- package/skills/action-selection/SKILL.md +0 -100
- package/skills/action-selection/references/trajectory-stalls.md +0 -71
- package/skills/bypass/SKILL.md +0 -153
- package/skills/commit-work/SKILL.md +0 -145
- package/skills/commit-work/references/git-state-edges.md +0 -94
- package/skills/commit-work/references/simple-push.md +0 -92
- package/skills/commit-work/references/staging-decisions.md +0 -106
- package/skills/decision-gate/SKILL.md +0 -106
- package/skills/design-for-depth/SKILL.md +0 -117
- package/skills/design-for-depth/references/design-pressure-signals.md +0 -182
- package/skills/design-for-depth/references/implementation-decisions.md +0 -76
- package/skills/design-for-depth/references/interface-design-loop.md +0 -136
- package/skills/design-for-depth/references/module-and-dependency-design.md +0 -147
- package/skills/design-for-depth/references/software-design-philosophy.md +0 -202
- package/skills/design-for-depth/references/state-and-failure-boundaries.md +0 -136
- package/skills/diagnose-failure/SKILL.md +0 -125
- package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +0 -48
- package/skills/diagnose-failure/references/flaky-and-performance-diagnosis.md +0 -51
- package/skills/discuss/SKILL.md +0 -116
- package/skills/evaluate-skill/SKILL.md +0 -219
- package/skills/evaluate-skill/references/evaluation-definition-schema.md +0 -385
- package/skills/evaluate-skill/references/evaluation-design.md +0 -112
- package/skills/evaluate-skill/references/execution-and-evidence.md +0 -90
- package/skills/evaluate-skill/references/review-and-revision.md +0 -92
- package/skills/evaluate-skill/scripts/lib/definitions.mjs +0 -407
- package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +0 -60
- package/skills/evaluate-skill/scripts/lib/grade.mjs +0 -64
- package/skills/evaluate-skill/scripts/lib/runner.mjs +0 -368
- package/skills/evaluate-skill/scripts/pi-guard.mjs +0 -164
- package/skills/evaluate-skill/scripts/skill-eval.mjs +0 -102
- package/skills/execute-work/references/execute-work-edges.md +0 -68
- package/skills/finish-branch/SKILL.md +0 -117
- package/skills/finish-branch/references/integration-options.md +0 -80
- package/skills/handoff/SKILL.md +0 -82
- package/skills/handoff/references/handoff-templates.md +0 -150
- package/skills/launch-work/SKILL.md +0 -116
- package/skills/launch-work/references/launch-readiness.md +0 -85
- package/skills/migration-work/SKILL.md +0 -115
- package/skills/migration-work/references/migration-lifecycle.md +0 -82
- package/skills/release-work/SKILL.md +0 -118
- package/skills/release-work/references/release-evidence.md +0 -78
- package/skills/review-artifact/SKILL.md +0 -142
- package/skills/review-artifact/references/adjudicate-artifact-review.md +0 -101
- package/skills/review-artifact/references/independent-artifact-reviewer-contract.md +0 -159
- package/skills/review-work/references/adjudicate-work-review.md +0 -97
- package/skills/review-work/references/independent-work-reviewer-contract.md +0 -139
- package/skills/review-work/references/security-risk-lens.md +0 -69
- package/skills/setup-freeflow/references/activation-contract.md +0 -109
- package/skills/setup-freeflow/references/host-setup.md +0 -67
- package/skills/simplify-code/SKILL.md +0 -85
- package/skills/simplify-code/references/simplification-patterns.md +0 -70
- package/skills/verify-work/references/browser-runtime-evidence.md +0 -55
- package/skills/verify-work/references/integration-evidence.md +0 -47
- package/skills/verify-work/references/performance-evidence.md +0 -57
- package/skills/workflow/SKILL.md +0 -127
- package/skills/workflow/references/domain-skill-composition.md +0 -43
- package/skills/write-plan/SKILL.md +0 -92
- package/skills/write-plan/references/plan-shapes.md +0 -156
- package/skills/write-skill/references/activation-boundaries.md +0 -104
- package/skills/write-skill/references/agent-first-instructions.md +0 -121
- package/skills/write-skill/references/progressive-disclosure.md +0 -127
- package/skills/write-skill/references/skill-dependency-graphs.md +0 -190
- package/skills/write-spec/SKILL.md +0 -92
- package/skills/write-spec/references/artifact-standards.md +0 -86
- package/skills/write-spec/references/decision-records.md +0 -78
- package/skills/write-spec/references/spec-shapes.md +0 -143
- /package/pi-extension/dist/{cognitive-routing-v2 → cognitive-routing}/budget.js +0 -0
- /package/skills/{evaluate-skill → evaluate-behavior}/scripts/lib/evidence.mjs +0 -0
- /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
|
|
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,
|
|
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
|
|
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
|
|
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.
|
package/runtime/prompts/core.md
CHANGED
|
@@ -1,90 +1,47 @@
|
|
|
1
1
|
# Freeflow Stable Guidance
|
|
2
2
|
|
|
3
|
-
Freeflow is a workflow layer for one
|
|
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.
|
|
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
|
-
##
|
|
7
|
+
## Terms
|
|
8
8
|
|
|
9
|
-
- **
|
|
10
|
-
- **
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
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
|
-
##
|
|
18
|
+
## How Freeflow Works
|
|
25
19
|
|
|
26
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3
|
+
Work with the user as a collaborative senior engineer: honest, direct, and on their side, which sometimes means disagreeing.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
When
|
|
10
|
-
|
|
11
|
-
|
|
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
|
+
```
|