@hassangameryt/freeflow 0.1.0 → 0.3.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 +1 -1
- package/.claude-plugin/marketplace.json +2 -2
- package/{plugins/freeflow/.claude-plugin → .claude-plugin}/plugin.json +1 -1
- package/{plugins/freeflow/.codex-plugin → .codex-plugin}/plugin.json +1 -1
- package/README.md +25 -16
- package/assets/freeflow-plugin-icon.png +0 -0
- package/{plugins/freeflow/command-surface.json → command-surface.json} +10 -10
- package/evals/README.md +32 -0
- package/evals/fixtures/copy-conventions.md +31 -0
- package/evals/fixtures/output-router/README.md +12 -0
- package/evals/fixtures/output-router/failed-command-output.txt +9 -0
- package/evals/fixtures/output-router/large-router-manual.md +63 -0
- package/evals/fixtures/output-router/native-large-output.txt +40 -0
- package/evals/fixtures/output-router/noisy-test-output.txt +30 -0
- package/evals/fixtures/output-router/verification-output.txt +8 -0
- package/evals/fixtures/tiny-artifact-review-app/README.md +5 -0
- package/evals/fixtures/tiny-artifact-review-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-artifact-review-app/docs/specs/billing-webhook-api-draft.md +21 -0
- package/evals/fixtures/tiny-artifact-review-app/docs/specs/failed-payment-grace-period.md +24 -0
- package/evals/fixtures/tiny-artifact-review-app/docs/specs/immediate-downgrade.md +17 -0
- package/evals/fixtures/tiny-artifact-review-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/.freeflow-eval-setup.sh +15 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-commit-ambiguous-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-commit-app/.freeflow-eval-setup.sh +14 -0
- package/evals/fixtures/tiny-commit-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-app/docs/specs/settings-title.md +5 -0
- package/evals/fixtures/tiny-commit-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-commit-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-commit-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-commit-everything-app/.freeflow-eval-setup.sh +15 -0
- package/evals/fixtures/tiny-commit-everything-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-everything-app/docs/specs/settings-title.md +5 -0
- package/evals/fixtures/tiny-commit-everything-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-commit-everything-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-commit-everything-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-commit-staged-app/.freeflow-eval-setup.sh +15 -0
- package/evals/fixtures/tiny-commit-staged-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-staged-app/docs/specs/settings-title.md +5 -0
- package/evals/fixtures/tiny-commit-staged-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-commit-staged-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-commit-staged-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/.freeflow-eval-setup.sh +15 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/README.md +3 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/docs/billing-policy.md +3 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/docs/release-notes.md +3 -0
- package/evals/fixtures/tiny-commit-staged-mixed-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-dashboard-stale-app/README.md +11 -0
- package/evals/fixtures/tiny-dashboard-stale-app/src/api-client.ts +13 -0
- package/evals/fixtures/tiny-dashboard-stale-app/src/dashboard-data.ts +19 -0
- package/evals/fixtures/tiny-dashboard-stale-app/tests/dashboard-data.test.md +9 -0
- package/evals/fixtures/tiny-decision-destination-app/README.md +6 -0
- package/evals/fixtures/tiny-decision-destination-app/src/risk.ts +8 -0
- package/evals/fixtures/tiny-decision-destination-app/tests/risk.test.md +4 -0
- package/evals/fixtures/tiny-design-depth-app/README.md +15 -0
- package/evals/fixtures/tiny-design-depth-app/src/routes.ts +25 -0
- package/evals/fixtures/tiny-design-depth-app/src/sendEmail.ts +3 -0
- package/evals/fixtures/tiny-design-depth-app/src/sendSms.ts +3 -0
- package/evals/fixtures/tiny-design-depth-app/src/telemetry.ts +3 -0
- package/evals/fixtures/tiny-design-depth-app/tests/routes.test.md +12 -0
- package/evals/fixtures/tiny-eval-method-app/README.md +8 -0
- package/evals/fixtures/tiny-eval-method-app/evals/reports/review-pr-eval-result.md +5 -0
- package/evals/fixtures/tiny-eval-method-app/evals/reports/triage-question-failure.md +17 -0
- package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.diff +11 -0
- package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.md +3 -0
- package/evals/fixtures/tiny-eval-method-app/skills/review-pr/SKILL.md +10 -0
- package/evals/fixtures/tiny-eval-method-app/skills/triage-question/SKILL.md +10 -0
- package/evals/fixtures/tiny-execute-plan-app/README.md +5 -0
- package/evals/fixtures/tiny-execute-plan-app/checks/settings-and-billing-check.sh +5 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/plans/immediate-downgrade-plan.md +11 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-plan.md +12 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-with-bad-check.md +15 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/plans/unverified-billing-plan.md +9 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/specs/failed-payment-grace-period.md +9 -0
- package/evals/fixtures/tiny-execute-plan-app/docs/specs/settings-title.md +9 -0
- package/evals/fixtures/tiny-execute-plan-app/src/billing.ts +7 -0
- package/evals/fixtures/tiny-execute-plan-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-execute-plan-app/tests/billing.test.md +7 -0
- package/evals/fixtures/tiny-execute-plan-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-execute-review-loop-app/README.md +5 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/billing-policy.md +9 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/plans/settings-title-plan.md +12 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/review/previous-agent-summary.md +15 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/review/review-pass-1-non-pass.md +11 -0
- package/evals/fixtures/tiny-execute-review-loop-app/docs/specs/settings-title.md +9 -0
- package/evals/fixtures/tiny-execute-review-loop-app/src/billing.ts +7 -0
- package/evals/fixtures/tiny-execute-review-loop-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-execute-review-loop-app/tests/billing.test.md +7 -0
- package/evals/fixtures/tiny-execute-review-loop-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-flaky-session-app/README.md +10 -0
- package/evals/fixtures/tiny-flaky-session-app/src/session-timeout.ts +13 -0
- package/evals/fixtures/tiny-flaky-session-app/tests/session-timeout.test.md +8 -0
- package/evals/fixtures/tiny-handoff-app/README.md +5 -0
- package/evals/fixtures/tiny-handoff-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-handoff-app/docs/handoffs/old-agent-handoff.md +8 -0
- package/evals/fixtures/tiny-handoff-app/docs/plans/billing-retry-plan.md +11 -0
- package/evals/fixtures/tiny-handoff-app/src/billing.ts +7 -0
- package/evals/fixtures/tiny-handoff-report-app/README.md +3 -0
- package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.diff +1 -0
- package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.md +1 -0
- package/evals/fixtures/tiny-handoff-report-app/evals/scores/hof-003-score.txt +4 -0
- package/evals/fixtures/tiny-plan-app/README.md +5 -0
- package/evals/fixtures/tiny-plan-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-plan-app/docs/specs/failed-payment-grace-period.md +25 -0
- package/evals/fixtures/tiny-plan-app/src/billing.ts +17 -0
- package/evals/fixtures/tiny-plan-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-plan-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-plan-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-plan-strict-api-app/README.md +3 -0
- package/evals/fixtures/tiny-plan-strict-api-app/docs/billing-policy.md +5 -0
- package/evals/fixtures/tiny-plan-strict-api-app/docs/specs/billing-webhook-api.md +25 -0
- package/evals/fixtures/tiny-plan-strict-api-app/src/billing.ts +5 -0
- package/evals/fixtures/tiny-plan-strict-api-app/src/webhooks.ts +3 -0
- package/evals/fixtures/tiny-plan-strict-api-app/tests/billing-webhook.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/.freeflow/config.json +3 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/AGENTS.md +15 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/README.md +16 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/auth-review.md +15 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/copy-conventions.md +15 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/src/auth-middleware.ts +12 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/src/billing.ts +20 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/src/login-copy.ts +1 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/auth-middleware.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/copy.test.md +7 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/AGENTS.md +15 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/README.md +16 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/docs/auth-review.md +15 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/docs/copy-conventions.md +15 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/src/auth-middleware.ts +12 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/src/billing.ts +20 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/src/login-copy.ts +1 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/tests/auth-middleware.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-missing-config-app/tests/copy.test.md +7 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/.freeflow/config.json +3 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/AGENTS.md +15 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/README.md +16 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/auth-review.md +15 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/copy-conventions.md +15 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/src/auth-middleware.ts +12 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/src/billing.ts +20 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/src/login-copy.ts +1 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/auth-middleware.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/copy.test.md +7 -0
- package/evals/fixtures/tiny-report-performance-app/README.md +11 -0
- package/evals/fixtures/tiny-report-performance-app/docs/performance.md +10 -0
- package/evals/fixtures/tiny-report-performance-app/src/report-summary.ts +29 -0
- package/evals/fixtures/tiny-report-performance-app/tests/report-performance.test.md +8 -0
- package/evals/fixtures/tiny-review-request-app/README.md +3 -0
- package/evals/fixtures/tiny-review-request-app/docs/billing-policy.md +5 -0
- package/evals/fixtures/tiny-review-request-app/docs/plans/billing-webhook-api.md +19 -0
- package/evals/fixtures/tiny-review-request-app/docs/review/previous-agent-summary.md +20 -0
- package/evals/fixtures/tiny-review-request-app/docs/specs/billing-webhook-api.md +25 -0
- package/evals/fixtures/tiny-review-request-app/src/billing.ts +11 -0
- package/evals/fixtures/tiny-review-request-app/src/webhooks.ts +19 -0
- package/evals/fixtures/tiny-review-request-app/tests/billing-webhook.test.md +8 -0
- package/evals/fixtures/tiny-review-work-app/README.md +5 -0
- package/evals/fixtures/tiny-review-work-app/docs/billing-policy.md +9 -0
- package/evals/fixtures/tiny-review-work-app/docs/plans/settings-title-plan.md +12 -0
- package/evals/fixtures/tiny-review-work-app/docs/review/previous-agent-summary.md +15 -0
- package/evals/fixtures/tiny-review-work-app/docs/specs/settings-title.md +9 -0
- package/evals/fixtures/tiny-review-work-app/src/billing.ts +7 -0
- package/evals/fixtures/tiny-review-work-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-review-work-app/tests/billing.test.md +7 -0
- package/evals/fixtures/tiny-review-work-app/tests/settings.test.md +5 -0
- package/evals/fixtures/tiny-saas-app/README.md +16 -0
- package/evals/fixtures/tiny-saas-app/docs/auth-review.md +15 -0
- package/evals/fixtures/tiny-saas-app/docs/billing-policy.md +10 -0
- package/evals/fixtures/tiny-saas-app/docs/copy-conventions.md +15 -0
- package/evals/fixtures/tiny-saas-app/docs/specs/settings-title.md +13 -0
- package/evals/fixtures/tiny-saas-app/src/auth-middleware.ts +12 -0
- package/evals/fixtures/tiny-saas-app/src/billing.ts +20 -0
- package/evals/fixtures/tiny-saas-app/src/login-copy.ts +1 -0
- package/evals/fixtures/tiny-saas-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-saas-app/tests/auth-middleware.test.md +8 -0
- package/evals/fixtures/tiny-saas-app/tests/billing.test.md +8 -0
- package/evals/fixtures/tiny-saas-app/tests/copy.test.md +7 -0
- package/evals/fixtures/tiny-setup-agents-app/AGENTS.md +6 -0
- package/evals/fixtures/tiny-setup-both-app/AGENTS.md +5 -0
- package/evals/fixtures/tiny-setup-both-app/CLAUDE.md +5 -0
- package/evals/fixtures/tiny-setup-claude-app/CLAUDE.md +6 -0
- package/evals/fixtures/tiny-setup-codex-rules-app/.codex/rules/shell.rules +5 -0
- package/evals/fixtures/tiny-setup-codex-rules-app/AGENTS.md +6 -0
- package/evals/fixtures/tiny-setup-conflict-app/AGENTS.md +6 -0
- package/evals/fixtures/tiny-setup-existing-block-app/AGENTS.md +14 -0
- package/evals/fixtures/tiny-setup-four-rules-app/CLAUDE.md +6 -0
- package/evals/fixtures/tiny-skill-dev-app/README.md +10 -0
- package/evals/fixtures/tiny-skill-dev-app/evals/prompts/review-pr-001.txt +8 -0
- package/evals/fixtures/tiny-skill-dev-app/evals/reports/review-pr-failure.md +17 -0
- package/evals/fixtures/tiny-skill-dev-app/skills/review-pr/SKILL.md +13 -0
- package/evals/fixtures/tiny-team-app/README.md +5 -0
- package/evals/fixtures/tiny-team-app/docs/product.md +6 -0
- package/evals/fixtures/tiny-team-app/src/teams.ts +9 -0
- package/evals/fixtures/tiny-team-app/src/users.ts +5 -0
- package/evals/fixtures/tiny-team-app/tests/teams.test.md +7 -0
- package/evals/fixtures/tiny-verify-app/README.md +5 -0
- package/evals/fixtures/tiny-verify-app/src/settings-nav.ts +1 -0
- package/evals/fixtures/tiny-verify-app/src/settings-page.ts +1 -0
- package/evals/fixtures/tiny-verify-app/tests/settings.test.md +7 -0
- package/evals/prompts/aon-001.txt +2 -0
- package/evals/prompts/byp-001.txt +2 -0
- package/evals/prompts/byp-002.txt +2 -0
- package/evals/prompts/cap-001.txt +3 -0
- package/evals/prompts/cap-002.txt +3 -0
- package/evals/prompts/cmd-001.txt +3 -0
- package/evals/prompts/cmd-002.txt +3 -0
- package/evals/prompts/cmd-003.txt +6 -0
- package/evals/prompts/cmd-004.txt +5 -0
- package/evals/prompts/cmd-005.txt +5 -0
- package/evals/prompts/cmd-006.txt +5 -0
- package/evals/prompts/cmd-007.txt +5 -0
- package/evals/prompts/cmd-008.txt +5 -0
- package/evals/prompts/cmd-009.txt +8 -0
- package/evals/prompts/cmd-010.txt +5 -0
- package/evals/prompts/cmd-011.txt +5 -0
- package/evals/prompts/cmd-012.txt +5 -0
- package/evals/prompts/cmd-013.txt +5 -0
- package/evals/prompts/cmd-014.txt +7 -0
- package/evals/prompts/cmd-015.txt +7 -0
- package/evals/prompts/cmd-016.txt +5 -0
- package/evals/prompts/cmt-001.txt +1 -0
- package/evals/prompts/cmt-002.txt +1 -0
- package/evals/prompts/cmt-003.txt +1 -0
- package/evals/prompts/cmt-004.txt +1 -0
- package/evals/prompts/cmt-005.txt +1 -0
- package/evals/prompts/dfd-001.txt +3 -0
- package/evals/prompts/dia-001.txt +3 -0
- package/evals/prompts/dia-002.txt +3 -0
- package/evals/prompts/dia-003.txt +3 -0
- package/evals/prompts/dis-001.txt +5 -0
- package/evals/prompts/dis-002.txt +5 -0
- package/evals/prompts/esk-001.txt +5 -0
- package/evals/prompts/esk-002.txt +5 -0
- package/evals/prompts/esk-003.txt +5 -0
- package/evals/prompts/grc-001.txt +3 -0
- package/evals/prompts/hof-001.txt +3 -0
- package/evals/prompts/hof-002.txt +1 -0
- package/evals/prompts/hof-003.txt +1 -0
- package/evals/prompts/hof-004.txt +1 -0
- package/evals/prompts/hof-005.txt +1 -0
- package/evals/prompts/ivg-001.txt +1 -0
- package/evals/prompts/ivg-002.txt +11 -0
- package/evals/prompts/ivg-003.txt +1 -0
- package/evals/prompts/ivg-004.txt +1 -0
- package/evals/prompts/mode-001.txt +3 -0
- package/evals/prompts/mode-002.txt +1 -0
- package/evals/prompts/mode-003.txt +3 -0
- package/evals/prompts/mode-004.txt +3 -0
- package/evals/prompts/mode-005.txt +3 -0
- package/evals/prompts/mode-006.txt +3 -0
- package/evals/prompts/mode-007.txt +3 -0
- package/evals/prompts/otr-001.txt +3 -0
- package/evals/prompts/otr-002.txt +3 -0
- package/evals/prompts/rar-001.txt +5 -0
- package/evals/prompts/rar-002.txt +3 -0
- package/evals/prompts/rar-003.txt +6 -0
- package/evals/prompts/rar-004.txt +15 -0
- package/evals/prompts/rar-005.txt +10 -0
- package/evals/prompts/rbr-001.txt +3 -0
- package/evals/prompts/rbr-002.txt +3 -0
- package/evals/prompts/rbr-003.txt +7 -0
- package/evals/prompts/rev-001.txt +3 -0
- package/evals/prompts/rev-002.txt +5 -0
- package/evals/prompts/rev-003.txt +6 -0
- package/evals/prompts/rev-004.txt +1 -0
- package/evals/prompts/rev-005.txt +15 -0
- package/evals/prompts/rev-006.txt +5 -0
- package/evals/prompts/stp-001.txt +1 -0
- package/evals/prompts/stp-002.txt +1 -0
- package/evals/prompts/stp-003.txt +1 -0
- package/evals/prompts/stp-004.txt +1 -0
- package/evals/prompts/stp-005.txt +1 -0
- package/evals/prompts/stp-006.txt +1 -0
- package/evals/prompts/stp-007.txt +1 -0
- package/evals/prompts/stp-008.txt +1 -0
- package/evals/prompts/stp-009.txt +1 -0
- package/evals/prompts/stp-010.txt +1 -0
- package/evals/prompts/stp-011.txt +1 -0
- package/evals/prompts/vfy-003.txt +1 -0
- package/evals/prompts/wpl-001.txt +3 -0
- package/evals/prompts/wpl-002.txt +5 -0
- package/evals/prompts/wpl-003.txt +3 -0
- package/evals/prompts/wpl-004.txt +5 -0
- package/evals/prompts/wpl-005.txt +1 -0
- package/evals/prompts/wrc-001.txt +10 -0
- package/evals/prompts/wrc-002.txt +3 -0
- package/evals/prompts/wsk-001.txt +6 -0
- package/evals/prompts/wsp-001.txt +5 -0
- package/evals/prompts/wsp-002.txt +15 -0
- package/evals/prompts/wsp-003.txt +3 -0
- package/evals/prompts/wsp-004.txt +15 -0
- package/evals/prompts/wsp-005.txt +5 -0
- package/evals/prompts/wsp-006.txt +12 -0
- package/evals/prompts/wsp-007.txt +9 -0
- package/evals/prompts/wsp-008.txt +13 -0
- package/evals/prompts/xpl-001.txt +1 -0
- package/evals/prompts/xpl-002.txt +3 -0
- package/evals/prompts/xpl-003.txt +3 -0
- package/evals/prompts/xpl-004.txt +3 -0
- package/evals/prompts/xpl-005.txt +5 -0
- package/evals/prompts/xpl-006.txt +3 -0
- package/evals/registries/adversarial-evals.json +39 -0
- package/evals/registries/fixture-evals.json +2513 -0
- package/evals/registries/handoff-evals.json +74 -0
- package/evals/registries/legacy-evals.json +147 -0
- package/evals/registries/skill-evidence.json +193 -0
- package/evals/registries/verify-work-evals.json +46 -0
- package/evals/reports/acceptance/v0.1-acceptance-report.md +130 -0
- package/evals/reports/by-command-surface/command-surface-1-report.md +45 -0
- package/evals/reports/by-command-surface/command-surface-10-report.md +76 -0
- package/evals/reports/by-command-surface/command-surface-11-report.md +77 -0
- package/evals/reports/by-command-surface/command-surface-12-report.md +91 -0
- package/evals/reports/by-command-surface/command-surface-13-report.md +64 -0
- package/evals/reports/by-command-surface/command-surface-14-report.md +66 -0
- package/evals/reports/by-command-surface/command-surface-15-report.md +124 -0
- package/evals/reports/by-command-surface/command-surface-16-report.md +39 -0
- package/evals/reports/by-command-surface/command-surface-2-report.md +80 -0
- package/evals/reports/by-command-surface/command-surface-3-report.md +86 -0
- package/evals/reports/by-command-surface/command-surface-4-report.md +76 -0
- package/evals/reports/by-command-surface/command-surface-5-report.md +80 -0
- package/evals/reports/by-command-surface/command-surface-6-report.md +74 -0
- package/evals/reports/by-command-surface/command-surface-7-report.md +84 -0
- package/evals/reports/by-command-surface/command-surface-8-report.md +79 -0
- package/evals/reports/by-command-surface/command-surface-9-report.md +79 -0
- package/evals/reports/by-command-surface/command-surface-matrix.md +91 -0
- package/evals/reports/by-skill/bypass-1-report.md +124 -0
- package/evals/reports/by-skill/capture-decisions-1-report.md +99 -0
- package/evals/reports/by-skill/capture-decisions-2-report.md +102 -0
- package/evals/reports/by-skill/commit-work-1-report.md +165 -0
- package/evals/reports/by-skill/commit-work-2-report.md +109 -0
- package/evals/reports/by-skill/design-for-depth-1-report.md +95 -0
- package/evals/reports/by-skill/diagnose-failure-1-report.md +91 -0
- package/evals/reports/by-skill/diagnose-failure-2-report.md +94 -0
- package/evals/reports/by-skill/discover-1-report.md +118 -0
- package/evals/reports/by-skill/evaluate-skill-2-report.md +71 -0
- package/evals/reports/by-skill/execute-plan-1-report.md +103 -0
- package/evals/reports/by-skill/execute-plan-2-report.md +112 -0
- package/evals/reports/by-skill/execute-plan-3-report.md +87 -0
- package/evals/reports/by-skill/grill-context-1-report.md +103 -0
- package/evals/reports/by-skill/handoff-1-report.md +123 -0
- package/evals/reports/by-skill/handoff-2-report.md +105 -0
- package/evals/reports/by-skill/handoff-3-report.md +100 -0
- package/evals/reports/by-skill/handoff-7-report.md +77 -0
- package/evals/reports/by-skill/interview-gate-1-report.md +63 -0
- package/evals/reports/by-skill/interview-gate-2-report.md +105 -0
- package/evals/reports/by-skill/mode-contract-1-report.md +74 -0
- package/evals/reports/by-skill/mode-contract-2-report.md +87 -0
- package/evals/reports/by-skill/mode-contract-3-report.md +65 -0
- package/evals/reports/by-skill/mode-contract-4-report.md +71 -0
- package/evals/reports/by-skill/mode-contract-5-report.md +70 -0
- package/evals/reports/by-skill/output-router-1-report.md +76 -0
- package/evals/reports/by-skill/output-router-2-report.md +65 -0
- package/evals/reports/by-skill/research-1-report.md +144 -0
- package/evals/reports/by-skill/research-brief-1-report.md +94 -0
- package/evals/reports/by-skill/research-brief-2-report.md +75 -0
- package/evals/reports/by-skill/review-artifact-1-report.md +91 -0
- package/evals/reports/by-skill/review-artifact-2-report.md +79 -0
- package/evals/reports/by-skill/review-artifact-3-report.md +120 -0
- package/evals/reports/by-skill/review-artifact-4-report.md +89 -0
- package/evals/reports/by-skill/review-artifact-5-report.md +66 -0
- package/evals/reports/by-skill/review-work-1-report.md +85 -0
- package/evals/reports/by-skill/review-work-2-report.md +87 -0
- package/evals/reports/by-skill/review-work-3-report.md +104 -0
- package/evals/reports/by-skill/review-work-4-report.md +108 -0
- package/evals/reports/by-skill/review-work-5-report.md +73 -0
- package/evals/reports/by-skill/review-work-6-report.md +66 -0
- package/evals/reports/by-skill/setup-freeflow-1-report.md +199 -0
- package/evals/reports/by-skill/setup-freeflow-2-report.md +105 -0
- package/evals/reports/by-skill/setup-freeflow-3-report.md +105 -0
- package/evals/reports/by-skill/setup-freeflow-4-report.md +88 -0
- package/evals/reports/by-skill/setup-freeflow-5-report.md +115 -0
- package/evals/reports/by-skill/skill-authoring-1-report.md +81 -0
- package/evals/reports/by-skill/verify-work-1-report.md +111 -0
- package/evals/reports/by-skill/verify-work-2-report.md +120 -0
- package/evals/reports/by-skill/workflow-1-report.md +65 -0
- package/evals/reports/by-skill/write-plan-1-report.md +123 -0
- package/evals/reports/by-skill/write-plan-2-report.md +98 -0
- package/evals/reports/by-skill/write-plan-3-report.md +110 -0
- package/evals/reports/by-skill/write-spec-1-report.md +88 -0
- package/evals/reports/by-skill/write-spec-2-report.md +89 -0
- package/evals/reports/by-skill/write-spec-3-report.md +90 -0
- package/evals/reports/by-skill/write-spec-4-report.md +167 -0
- package/evals/reports/harness/claude-harness-1-report.md +103 -0
- package/evals/reports/harness/eval-harness-1-report.md +91 -0
- package/evals/reports/iterations/iteration-1-report.md +71 -0
- package/evals/reports/iterations/iteration-2-report.md +78 -0
- package/evals/reports/iterations/iteration-3-report.md +118 -0
- package/evals/reports/iterations/iteration-4-report.md +131 -0
- package/evals/reports/iterations/iteration-5-report.md +149 -0
- package/evals/reports/iterations/iteration-6-report.md +136 -0
- package/evals/reports/runtime/always-on-runtime-1-report.md +107 -0
- package/evals/reports/runtime/context-mode-normalized-benchmark-1-report.md +52 -0
- package/evals/reports/runtime/context-mode-real-deep-baseline-1-report.md +410 -0
- package/evals/reports/runtime/context-mode-real-deep-final-slice-11-report.md +203 -0
- package/evals/reports/runtime/context-mode-real-deep-final-slice-11-review.md +51 -0
- package/evals/reports/runtime/context-saving-native-tools-baseline-1-report.md +99 -0
- package/evals/reports/runtime/eryx-python-compatibility-reprobe-1-report.md +166 -0
- package/evals/reports/runtime/eryx-python-proof-spike-1-report.md +96 -0
- package/evals/reports/runtime/eryx-python-proof-spike-2-report.md +151 -0
- package/evals/reports/runtime/eryx-python-script-derive-execution-1-report.md +233 -0
- package/evals/reports/runtime/jq-script-derive-execution-1-report.md +215 -0
- package/evals/reports/runtime/jq-wasm-proof-spike-1-report.md +67 -0
- package/evals/reports/runtime/output-router-benchmark-1-report.md +81 -0
- package/evals/reports/runtime/output-router-capture-derive-provider-eval-1-report.md +35 -0
- package/evals/reports/runtime/output-router-codex-large-index-sqlite-adhoc-report.md +150 -0
- package/evals/reports/runtime/output-router-codex-qa-benchmark-1-report.md +46 -0
- package/evals/reports/runtime/output-router-command-benchmark-1-report.md +62 -0
- package/evals/reports/runtime/output-router-index-benchmark-1-report.md +64 -0
- package/evals/reports/runtime/output-router-regression-1-report.md +81 -0
- package/evals/reports/runtime/output-router-transform-eval-1-report.md +28 -0
- package/evals/reports/runtime/pi-observed-routing-eval-1-report.md +44 -0
- package/evals/reports/runtime/quickjs-script-derive-execution-1-report.md +159 -0
- package/evals/reports/runtime/quickjs-wasi-proof-spike-1-report.md +55 -0
- package/evals/reports/runtime/render-format-row-protocol-1-report.md +58 -0
- package/evals/reports/runtime/script-sandbox-adapter-selection-review-1-report.md +84 -0
- package/evals/reports/runtime/script-sandbox-probe-resource-hardening-1-report.md +51 -0
- package/evals/reports/runtime/storage-policy-benchmark-1-report.md +176 -0
- package/evals/reports/runtime/vault-index-storage-spike-1-report.md +39 -0
- package/evals/reports/runtime/workflow-context-hook-1-report.md +82 -0
- package/evals/runbooks/adversarial-eval-runbook.md +28 -0
- package/evals/runbooks/fixture-eval-runbook.md +137 -0
- package/evals/runbooks/handoff-eval-runbook.md +22 -0
- package/evals/runbooks/verify-work-eval-runbook.md +27 -0
- package/evals/scripts/audit-command-surface.sh +160 -0
- package/evals/scripts/check-activation-contract.sh +121 -0
- package/evals/scripts/check-runtime-context-hook.sh +183 -0
- package/evals/scripts/grade-fixture-eval.sh +446 -0
- package/evals/scripts/run-claude-fixture-eval.sh +26 -0
- package/evals/scripts/run-codex-fixture-eval.sh +26 -0
- package/evals/scripts/run-eryx-python-proof-spike.js +559 -0
- package/evals/scripts/run-fixture-eval-by-id.sh +23 -0
- package/evals/scripts/run-fixture-eval.sh +464 -0
- package/evals/scripts/run-jq-wasm-proof-spike.js +299 -0
- package/evals/scripts/run-output-router-transform-eval.js +115 -0
- package/evals/scripts/run-pi-observed-routing-eval.js +478 -0
- package/evals/scripts/run-quickjs-wasi-proof-spike.js +339 -0
- package/evals/scripts/skill-evidence.sh +316 -0
- package/evals/scripts/validate-release-metadata.sh +486 -0
- package/evals/suites/v0.1-acceptance-suite.md +131 -0
- package/{plugins/freeflow/hooks → hooks}/freeflow-runtime-context.mjs +65 -14
- package/package.json +46 -13
- package/pi-extension/dist/host-producer-identification.js +186 -0
- package/pi-extension/dist/index.js +85 -0
- package/pi-extension/dist/mcp-config.js +30 -0
- package/pi-extension/dist/native-safety-net.js +209 -0
- package/pi-extension/dist/observed-tool-routing.js +114 -0
- package/pi-extension/dist/renderers.js +835 -0
- package/pi-extension/dist/router-tools.js +438 -0
- package/pi-extension/dist/runtime-context.js +288 -0
- package/pi-extension/dist/schemas.js +254 -0
- package/pi-extension/dist/status.js +449 -0
- package/pi-extension/dist/utils.js +467 -0
- package/pi-extension/src/host-producer-identification.ts +226 -0
- package/pi-extension/src/index.ts +121 -0
- package/pi-extension/src/mcp-config.ts +32 -0
- package/pi-extension/src/native-safety-net.ts +252 -0
- package/pi-extension/src/observed-tool-routing.ts +126 -0
- package/pi-extension/src/renderers.ts +917 -0
- package/pi-extension/src/router-tools.ts +478 -0
- package/pi-extension/src/runtime-context.ts +347 -0
- package/pi-extension/src/schemas.ts +259 -0
- package/pi-extension/src/status.ts +505 -0
- package/pi-extension/src/utils.ts +492 -0
- package/pi-extension/tsconfig.json +16 -0
- package/plugin-docs/README.md +40 -0
- package/plugin-docs/adr/0002-evals-before-hooks.md +17 -0
- package/{plugins/freeflow/docs → plugin-docs}/adr/0003-release-boundary.md +2 -2
- package/plugin-docs/adr/0004-discover-replaces-shallow-discovery-skills.md +26 -0
- package/plugin-docs/adr/README.md +10 -0
- package/plugin-docs/architecture.md +89 -0
- package/plugin-docs/output-router.md +396 -0
- package/plugin-docs/release-evidence.md +77 -0
- package/{plugins/freeflow/docs → plugin-docs}/skills.md +7 -7
- package/{plugins/freeflow/docs → plugin-docs}/workflow.md +4 -4
- package/router/dist/benchmarks/benchmark-harness.d.ts +32 -0
- package/router/dist/benchmarks/benchmark-harness.js +92 -0
- package/router/dist/benchmarks/benchmarks.d.ts +102 -0
- package/router/dist/benchmarks/benchmarks.js +880 -0
- package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +91 -0
- package/router/dist/benchmarks/codex-qa-benchmarks.js +461 -0
- package/router/dist/benchmarks/command-benchmarks.d.ts +128 -0
- package/router/dist/benchmarks/command-benchmarks.js +653 -0
- package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +74 -0
- package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +707 -0
- package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +124 -0
- package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1295 -0
- package/router/dist/benchmarks/context-saving-baseline.d.ts +54 -0
- package/router/dist/benchmarks/context-saving-baseline.js +439 -0
- package/router/dist/benchmarks/index-benchmarks.d.ts +98 -0
- package/router/dist/benchmarks/index-benchmarks.js +762 -0
- package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +90 -0
- package/router/dist/benchmarks/storage-policy-benchmarks.js +538 -0
- package/router/dist/benchmarks/vault-index-benchmarks.d.ts +47 -0
- package/router/dist/benchmarks/vault-index-benchmarks.js +257 -0
- package/router/dist/config/config.d.ts +96 -0
- package/router/dist/config/config.js +453 -0
- package/router/dist/config/router-contract.d.ts +10 -0
- package/router/dist/config/router-contract.js +54 -0
- package/router/dist/config/schema.d.ts +18 -0
- package/router/dist/config/schema.js +600 -0
- package/router/dist/config/types.d.ts +521 -0
- package/router/dist/config/types.js +30 -0
- package/router/dist/evidence/bounded-evidence.d.ts +40 -0
- package/router/dist/evidence/bounded-evidence.js +310 -0
- package/router/dist/evidence/evidence-range-selector.d.ts +22 -0
- package/router/dist/evidence/evidence-range-selector.js +231 -0
- package/router/dist/evidence/evidence-search.d.ts +25 -0
- package/router/dist/evidence/evidence-search.js +466 -0
- package/router/dist/evidence/evidence.d.ts +38 -0
- package/router/dist/evidence/evidence.js +196 -0
- package/router/dist/evidence/failure-contracts.d.ts +27 -0
- package/router/dist/evidence/failure-contracts.js +160 -0
- package/router/dist/evidence/line-ranges.d.ts +22 -0
- package/router/dist/evidence/line-ranges.js +22 -0
- package/router/dist/experiments/local-index.d.ts +58 -0
- package/router/dist/experiments/local-index.js +562 -0
- package/router/dist/index.d.ts +30 -0
- package/router/dist/index.js +32 -0
- package/router/dist/processing/engine.d.ts +108 -0
- package/router/dist/processing/engine.js +435 -0
- package/router/dist/processing/reducers.d.ts +266 -0
- package/router/dist/processing/reducers.js +1495 -0
- package/router/dist/processing/renderers.d.ts +25 -0
- package/router/dist/processing/renderers.js +186 -0
- package/router/dist/processing/scripts.d.ts +78 -0
- package/router/dist/processing/scripts.js +333 -0
- package/router/dist/repo/repo-traversal.d.ts +18 -0
- package/router/dist/repo/repo-traversal.js +242 -0
- package/router/dist/routing/observed-reducers.d.ts +35 -0
- package/router/dist/routing/observed-reducers.js +647 -0
- package/router/dist/routing/observed-routing.d.ts +17 -0
- package/router/dist/routing/observed-routing.js +377 -0
- package/router/dist/routing/parsers.d.ts +16 -0
- package/router/dist/routing/parsers.js +473 -0
- package/router/dist/routing/run-filters.d.ts +56 -0
- package/router/dist/routing/run-filters.js +230 -0
- package/router/dist/routing/run-reducers.d.ts +30 -0
- package/router/dist/routing/run-reducers.js +110 -0
- package/router/dist/sandbox/adapter-roots.d.ts +38 -0
- package/router/dist/sandbox/adapter-roots.js +64 -0
- package/router/dist/sandbox/eryx-python-adapter.d.ts +9 -0
- package/router/dist/sandbox/eryx-python-adapter.js +797 -0
- package/router/dist/sandbox/jq-wasm-adapter.d.ts +9 -0
- package/router/dist/sandbox/jq-wasm-adapter.js +421 -0
- package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +9 -0
- package/router/dist/sandbox/quickjs-wasi-adapter.js +381 -0
- package/router/dist/sandbox/script-sandbox.d.ts +113 -0
- package/router/dist/sandbox/script-sandbox.js +303 -0
- package/router/dist/setup/script-transform-adapters.d.ts +28 -0
- package/router/dist/setup/script-transform-adapters.js +259 -0
- package/router/dist/tools/batch.d.ts +22 -0
- package/router/dist/tools/batch.js +509 -0
- package/router/dist/tools/run.d.ts +50 -0
- package/router/dist/tools/run.js +1219 -0
- package/router/dist/tools/search.d.ts +44 -0
- package/router/dist/tools/search.js +1205 -0
- package/router/dist/transform/engine.d.ts +143 -0
- package/router/dist/transform/engine.js +1955 -0
- package/router/dist/vault/vault-index.d.ts +106 -0
- package/router/dist/vault/vault-index.js +411 -0
- package/router/dist/vault/vault.d.ts +103 -0
- package/router/dist/vault/vault.js +635 -0
- package/{plugins/freeflow/skills → skills}/commit-work/SKILL.md +17 -16
- package/{plugins/freeflow/skills → skills}/commit-work/references/staging-decisions.md +3 -3
- package/skills/design-for-depth/SKILL.md +90 -0
- package/skills/design-for-depth/references/design-pressure-signals.md +265 -0
- package/skills/design-for-depth/references/software-design-philosophy.md +219 -0
- package/{plugins/freeflow/skills → skills}/diagnose-failure/SKILL.md +6 -1
- package/skills/discover/ARTIFACT-DESTINATIONS.md +58 -0
- package/skills/discover/CHECKPOINTS.md +74 -0
- package/skills/discover/SKILL.md +173 -0
- package/skills/execute-plan/SKILL.md +133 -0
- package/skills/execute-plan/references/execution-map.md +122 -0
- package/{plugins/freeflow/skills → skills}/mode-contract/SKILL.md +10 -5
- package/skills/output-router/SKILL.md +202 -0
- package/skills/output-router/references/safety-policy.md +40 -0
- package/{plugins/freeflow/skills → skills}/review-artifact/SKILL.md +37 -1
- package/{plugins/freeflow/skills → skills}/review-artifact/references/reviewer-prompt.md +14 -2
- package/skills/review-work/SKILL.md +101 -0
- package/{plugins/freeflow/skills → skills}/review-work/references/reviewer-prompt.md +8 -0
- package/skills/setup-freeflow/SKILL.md +106 -0
- package/{plugins/freeflow/skills → skills}/setup-freeflow/references/activation-contract.md +14 -8
- package/{plugins/freeflow/skills → skills}/setup-freeflow/references/host-setup.md +5 -3
- package/skills/setup-freeflow/references/output-router-setup.md +102 -0
- package/{plugins/freeflow/skills → skills}/verify-work/SKILL.md +3 -1
- package/{plugins/freeflow/skills → skills}/workflow/SKILL.md +23 -13
- package/{plugins/freeflow/skills → skills}/workflow/references/workflow-map.md +21 -20
- package/{plugins/freeflow/skills → skills}/write-plan/SKILL.md +9 -1
- package/{plugins/freeflow/skills → skills}/write-skill/SKILL.md +1 -1
- package/{plugins/freeflow/skills → skills}/write-spec/SKILL.md +9 -6
- package/plugins/freeflow/docs/README.md +0 -39
- package/plugins/freeflow/docs/adr/0002-evals-before-hooks.md +0 -17
- package/plugins/freeflow/docs/adr/README.md +0 -7
- package/plugins/freeflow/docs/architecture.md +0 -86
- package/plugins/freeflow/docs/release-evidence.md +0 -49
- package/plugins/freeflow/pi-extension/index.js +0 -250
- package/plugins/freeflow/skills/capture-decisions/SKILL.md +0 -95
- package/plugins/freeflow/skills/capture-decisions/references/destination-guide.md +0 -65
- package/plugins/freeflow/skills/execute-plan/SKILL.md +0 -67
- package/plugins/freeflow/skills/grill-context/SKILL.md +0 -79
- package/plugins/freeflow/skills/grill-context/references/approach-framing.md +0 -52
- package/plugins/freeflow/skills/research-brief/SKILL.md +0 -69
- package/plugins/freeflow/skills/review-work/SKILL.md +0 -73
- package/plugins/freeflow/skills/setup-freeflow/SKILL.md +0 -84
- /package/{plugins/freeflow/assets → assets}/freeflow-plugin-icon-transparent.png +0 -0
- /package/{plugins/freeflow/hooks → hooks}/hooks.json +0 -0
- /package/{plugins/freeflow/docs → plugin-docs}/adr/0001-three-modes.md +0 -0
- /package/{plugins/freeflow/skills → skills}/bypass/SKILL.md +0 -0
- /package/{plugins/freeflow/skills → skills}/diagnose-failure/references/feedback-loop-catalog.md +0 -0
- /package/{plugins/freeflow/skills → skills}/diagnose-failure/references/flaky-and-performance.md +0 -0
- /package/{plugins/freeflow/skills → skills}/evaluate-skill/SKILL.md +0 -0
- /package/{plugins/freeflow/skills → skills}/evaluate-skill/references/eval-patterns.md +0 -0
- /package/{plugins/freeflow/skills → skills}/evaluate-skill/references/grading-priority.md +0 -0
- /package/{plugins/freeflow/skills → skills}/handoff/SKILL.md +0 -0
- /package/{plugins/freeflow/skills → skills}/handoff/references/templates.md +0 -0
- /package/{plugins/freeflow/skills → skills}/interview-gate/SKILL.md +0 -0
- /package/{plugins/freeflow/skills → skills}/write-plan/references/plan-shapes.md +0 -0
- /package/{plugins/freeflow/skills → skills}/write-spec/references/artifact-standards.md +0 -0
- /package/{plugins/freeflow/skills → skills}/write-spec/references/spec-shapes.md +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
Freeflow is a portable skill pack for coding agents.
|
|
4
|
+
|
|
5
|
+
## Runtime Boundary
|
|
6
|
+
|
|
7
|
+
Freeflow ships Markdown skills, bundled references, lightweight context-loading hooks, and a Pi extension. It does not ship a CLI, Codex/Claude native slash handlers, enforcement hooks, or a new agent runtime in this release.
|
|
8
|
+
|
|
9
|
+
Host runtimes still control tools, sandboxing, approvals, and permissions. Freeflow controls workflow pressure:
|
|
10
|
+
|
|
11
|
+
- how much clarification is needed
|
|
12
|
+
- when artifacts are useful
|
|
13
|
+
- when source-truth conflicts stop edits
|
|
14
|
+
- when review and verification are required
|
|
15
|
+
- when a handoff or durable decision is useful
|
|
16
|
+
|
|
17
|
+
## Package Layout
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
freeflow/
|
|
21
|
+
package.json
|
|
22
|
+
.agents/plugins/marketplace.json
|
|
23
|
+
.codex-plugin/plugin.json
|
|
24
|
+
.claude-plugin/marketplace.json
|
|
25
|
+
.claude-plugin/plugin.json
|
|
26
|
+
README.md
|
|
27
|
+
LICENSE
|
|
28
|
+
CHANGELOG.md
|
|
29
|
+
command-surface.json
|
|
30
|
+
assets/
|
|
31
|
+
plugin-docs/
|
|
32
|
+
docs/
|
|
33
|
+
evals/
|
|
34
|
+
hooks/
|
|
35
|
+
pi-extension/
|
|
36
|
+
router/
|
|
37
|
+
skills/
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The repository root is the plugin root. Codex uses `.agents/plugins/marketplace.json`; Claude uses `.claude-plugin/marketplace.json`. Both point at `.`. Pi uses the root `package.json` `pi` manifest to load `skills/` and the built extension at `pi-extension/dist/index.js`; TypeScript source lives under `pi-extension/src/`.
|
|
41
|
+
|
|
42
|
+
The repo root is the single runtime source of truth. Skill edits, bundled references, eval metadata, public docs, and command-surface metadata live there to avoid generated package drift. Public plugin docs live under `plugin-docs/`. Project-development memory lives under `docs/` and is not part of the runtime surface.
|
|
43
|
+
|
|
44
|
+
`router/src/` is organized by responsibility: public tool entrypoints in `tools/`, transformation internals in `transform/`, evidence helpers in `evidence/`, vault storage in `vault/`, repo traversal in `repo/`, capture/routing/parsers in `routing/`, sandbox adapters in `sandbox/`, configuration contracts in `config/`, benchmark harnesses in `benchmarks/`, and frozen experiments in `experiments/`. `router/dist/` mirrors that layout as generated package output; active deprecated or historical router artifacts stay outside runtime code under `deprecated/router/`.
|
|
45
|
+
|
|
46
|
+
## Progressive Disclosure
|
|
47
|
+
|
|
48
|
+
Each skill keeps its active `SKILL.md` short. Stable details move into `references/` files only when they prevent bloat, reduce repeated work, or address measured failures.
|
|
49
|
+
|
|
50
|
+
This keeps the model's first-loaded instructions focused on behavior:
|
|
51
|
+
|
|
52
|
+
- trigger
|
|
53
|
+
- loop
|
|
54
|
+
- stop condition
|
|
55
|
+
- failure prevention
|
|
56
|
+
|
|
57
|
+
## Host Setup
|
|
58
|
+
|
|
59
|
+
`setup-freeflow` installs a compact always-on contract into the host repo.
|
|
60
|
+
|
|
61
|
+
The canonical setup contract lives in `skills/setup-freeflow/references/activation-contract.md`; setup docs, fixtures, and eval assertions should reference it or be checked against it.
|
|
62
|
+
|
|
63
|
+
Codex setup targets `AGENTS.md` and `.freeflow/config.json`.
|
|
64
|
+
|
|
65
|
+
Claude setup targets `CLAUDE.md`, `.claude/rules/freeflow-core.md`, and `.freeflow/config.json` when Claude is the selected host.
|
|
66
|
+
|
|
67
|
+
Setup should not silently update both hosts or overwrite stronger repo-specific rules. Existing repo instructions are source truth.
|
|
68
|
+
|
|
69
|
+
## Runtime Context Hooks
|
|
70
|
+
|
|
71
|
+
The installed plugin owns `hooks/hooks.json`. Setup does not copy hook files into target repos.
|
|
72
|
+
|
|
73
|
+
The hooks load the existing `mode-contract`, `workflow`, `interview-gate`, `discover`, and `output-router` skills:
|
|
74
|
+
|
|
75
|
+
- at session start, including startup, resume, clear, and compact
|
|
76
|
+
|
|
77
|
+
They also report whether the current repo appears set up, partially set up, or missing setup, and state the runtime priority order: mode-contract handles mode issues first, workflow classifies, interview-gate stops silent decisions, discover handles context-building, and output-router chooses evidence transport. They do not run after edit/write tools, block tools, grant permissions, enforce mode policy, or replace repo instructions.
|
|
78
|
+
|
|
79
|
+
Setup handles the same-session case directly: after successful setup verification, it reads the mode-contract, workflow, interview-gate, discover, and output-router skills before its final response and only then says that context is loaded.
|
|
80
|
+
|
|
81
|
+
Host runtimes may require plugin hooks to be reviewed and trusted after install. If the host skips untrusted hooks, setup still writes activation/config files, but future session-start runtime context will not load until hooks are trusted and the session is restarted, resumed, cleared, or compacted.
|
|
82
|
+
|
|
83
|
+
Pi uses an extension instead of `hooks/hooks.json`. The built Pi extension registers direct commands, reads `mode-contract/SKILL.md`, `workflow/SKILL.md`, `interview-gate/SKILL.md`, `discover/SKILL.md`, and `output-router/SKILL.md`, refreshes that context on `session_start` and `session_compact`, injects full skill context once during Pi's `before_agent_start` lifecycle after that boundary, then keeps later turns to a short mode/priority refresh plus compact output-router tool reminder. The workflow-map and output-router safety-policy references remain available on demand but are not injected wholesale by default. The same extension registers `freeflow_status`, `freeflow_search`, `freeflow_run`, and `freeflow_batch` and gives them compact/expanded TUI renderers so collapsed tool rows stay readable while `ctrl+o` shows structured status, evidence, recovery details, and non-destructive migration recommendations. `freeflow_search action=transform operation.kind="script"` and `freeflow_run` script producers stay disabled until setup/user config opts in; setup can install JavaScript/Python/jq adapters into a user-global Freeflow cache, Pi auto-discovers that cache plus explicit `FREEFLOW_QUICKJS_WASI_ROOT`, `FREEFLOW_JQ_WASM_ROOT`, and `FREEFLOW_ERYX_ROOT` overrides, and only proof-passing languages are enabled. The Eryx Python adapter launches the setup-installed `node@24` child process with `--experimental-wasm-jspi` when needed, so normal Pi launches can still use Python after setup proof passes. When configured, its Pi `tool_result` hook observed-routes MCP, web, fetch, and code-search outputs after direct host execution; host permissions and execution remain owned by Pi. Pi `/workflow` commands set a session-scoped current-mode override, while `.freeflow/config.json` remains the default-mode source. It follows the same boundary as the Codex/Claude hooks: context loading and output routing only, no enforcement.
|
|
84
|
+
|
|
85
|
+
## Deferred Enforcement
|
|
86
|
+
|
|
87
|
+
Enforcement hooks and CLI checks are intentionally deferred. They are useful only after skill wording and evals prove a repeated behavior needs mechanical enforcement.
|
|
88
|
+
|
|
89
|
+
For this release, commands are model-routed language such as `/write-spec` or `/verify-work`; they are not native registered slash handlers.
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
# Output Router
|
|
2
|
+
|
|
3
|
+
Freeflow Output Router keeps agent context focused while preserving exact evidence outside context.
|
|
4
|
+
|
|
5
|
+
Use it when broad repo exploration, generated artifacts, large logs, or noisy command output would otherwise flood the model.
|
|
6
|
+
|
|
7
|
+
For the full architecture, see [`docs/designs/freeflow-output-router-architecture.md`](../docs/designs/freeflow-output-router-architecture.md).
|
|
8
|
+
|
|
9
|
+
## Core Idea
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
smallest sufficient evidence in context
|
|
13
|
+
+ exact recovery when exactness matters
|
|
14
|
+
+ no surprise native tool semantics
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The router ships explicit tools and Pi observed routing:
|
|
18
|
+
|
|
19
|
+
- `freeflow_search`: search/retrieve repo or vault evidence, and transform file/output sources through `action="transform"`.
|
|
20
|
+
- `freeflow_run`: run shell commands or sandboxed script producers, apply the run storage policy, and return compact evidence with recovery guidance.
|
|
21
|
+
- `freeflow_batch`: run independent `run`/`search` steps and optionally aggregate query answers.
|
|
22
|
+
- Pi observed routing: route enabled MCP/web/fetch/code-search outputs after direct host tool calls.
|
|
23
|
+
- `freeflow_status`: inspect effective config, observed routing, script transform, vault writability/index state, and non-destructive migration recommendations.
|
|
24
|
+
|
|
25
|
+
Native tools still matter:
|
|
26
|
+
|
|
27
|
+
- use native `read` for known whole files,
|
|
28
|
+
- use native `bash` for small/direct raw shell behavior,
|
|
29
|
+
- use native `edit`/`write` for mutations.
|
|
30
|
+
|
|
31
|
+
## Tiny Map
|
|
32
|
+
|
|
33
|
+
```mermaid
|
|
34
|
+
flowchart LR
|
|
35
|
+
Agent[agent]
|
|
36
|
+
Search[freeflow_search]
|
|
37
|
+
Run[freeflow_run]
|
|
38
|
+
Repo[repo files]
|
|
39
|
+
Vault[Freeflow vault]
|
|
40
|
+
Observed[Pi observed routing]
|
|
41
|
+
Transform[freeflow_search action=transform]
|
|
42
|
+
Status[freeflow_status]
|
|
43
|
+
Native[native read/bash]
|
|
44
|
+
Evidence[bounded evidence]
|
|
45
|
+
Raw[exact or metadata-only recovery]
|
|
46
|
+
|
|
47
|
+
Agent -->|existing info| Search
|
|
48
|
+
Agent -->|noisy command| Run
|
|
49
|
+
Agent -->|direct MCP/web/fetch/code-search| Observed
|
|
50
|
+
Agent -->|transform source| Transform
|
|
51
|
+
Agent -->|inspect config/status| Status
|
|
52
|
+
Agent -->|direct/raw known output| Native
|
|
53
|
+
Search --> Repo --> Evidence
|
|
54
|
+
Search --> Vault --> Evidence
|
|
55
|
+
Transform --> Vault
|
|
56
|
+
Transform --> Evidence
|
|
57
|
+
Run --> Vault
|
|
58
|
+
Observed --> Vault
|
|
59
|
+
Run --> Evidence
|
|
60
|
+
Observed --> Evidence
|
|
61
|
+
Vault --> Raw
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Tool Choice
|
|
65
|
+
|
|
66
|
+
| Need | Use |
|
|
67
|
+
| --- | --- |
|
|
68
|
+
| Find repo evidence before reading files | `freeflow_search action=query` |
|
|
69
|
+
| Get candidate paths first | `freeflow_search action=locate` |
|
|
70
|
+
| Find where exact-ish text/code exists | `freeflow_search action=get` |
|
|
71
|
+
| Retrieve exact known repo/vault lines | `freeflow_search action=retrieve` with `lineRange` |
|
|
72
|
+
| Widen previous evidence | `freeflow_search action=expand` |
|
|
73
|
+
| Explain a previous routed decision/output | `freeflow_search action=explain` |
|
|
74
|
+
| Run noisy/large command output | `freeflow_run` with `command` |
|
|
75
|
+
| Run code as a sandboxed base producer | `freeflow_run` with `script` |
|
|
76
|
+
| Use enabled Pi MCP/web/fetch/code-search output | Call the host tool directly; observed routing runs after the tool result |
|
|
77
|
+
| Transform repo/vault sources or compute deterministic subsets/stats from vaulted output | `freeflow_search action=transform` |
|
|
78
|
+
| Inspect script-transform disabled/unavailable state | `freeflow_status` |
|
|
79
|
+
| Inspect effective config, observed routing, script transform, vault/index state, or migration recommendations | `freeflow_status` |
|
|
80
|
+
| Read a known whole file | native `read` |
|
|
81
|
+
| Run small exact command | native `bash` |
|
|
82
|
+
|
|
83
|
+
## `freeflow_search`
|
|
84
|
+
|
|
85
|
+
Sources:
|
|
86
|
+
|
|
87
|
+
- `repo`: local repo files.
|
|
88
|
+
- `vault`: previous routed command/native/observed/transformed output, either by known `outputId` or vault-wide index query.
|
|
89
|
+
|
|
90
|
+
Actions:
|
|
91
|
+
|
|
92
|
+
- `query`: returns best evidence packets; default `topK=1`. For vault sources, omit `outputId` to search the current session's vault index.
|
|
93
|
+
- `locate`: returns candidate locations; default `topK=5`. For vault sources, omit `outputId` to locate indexed vault outputs without raw retrieval.
|
|
94
|
+
- `get`: maps exact-ish text/code/query to the best matching path or output id plus line range and matched content.
|
|
95
|
+
- `retrieve`: maps known coordinates to exact content; use it when path/output id and line range are already known.
|
|
96
|
+
- `expand`: expands a previous evidence packet to `lines_30`, `lines_80`, or `full`.
|
|
97
|
+
- `explain`: explains a route decision or vault output.
|
|
98
|
+
|
|
99
|
+
Example:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"action": "query",
|
|
104
|
+
"source": { "kind": "repo" },
|
|
105
|
+
"query": "Sandbox Permissions UseDefault RequireEscalated WithAdditionalPermissions",
|
|
106
|
+
"preserve": "important"
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Vault-wide indexed query:
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"action": "query",
|
|
115
|
+
"source": { "kind": "vault" },
|
|
116
|
+
"query": "rate limit deployment failed github issue",
|
|
117
|
+
"filters": { "producerKind": "mcp", "server": "github" }
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Evidence packets include:
|
|
122
|
+
|
|
123
|
+
- source/path,
|
|
124
|
+
- line range,
|
|
125
|
+
- exact excerpt,
|
|
126
|
+
- why the router selected it,
|
|
127
|
+
- expansion/recovery guidance.
|
|
128
|
+
|
|
129
|
+
Repo retrieval uses deterministic scanner ranking by default. Broad scans skip generated/dependency/cache paths such as `graphify-out/**`, but explicit path retrieval remains available.
|
|
130
|
+
|
|
131
|
+
Vault-wide retrieval uses the vault index sidecar. Exact records return source output ids, streams, and line ranges for recovery; metadata-only records can be found by metadata but do not expose raw recovery. Use `filters` for producer/server/tool/hostToolName/stream/record-kind/recoverability narrowing. Use `source.outputId` with `retrieve`, `expand`, or `explain` when the exact vaulted output is known.
|
|
132
|
+
|
|
133
|
+
## `freeflow_run`
|
|
134
|
+
|
|
135
|
+
`freeflow_run` executes one base producer, applies the configured run storage policy, then returns useful evidence. The base producer can be either a host-approved shell command or a sandboxed script. The default `hybrid-dedupe` policy keeps exact raw recovery for exactness-sensitive output while allowing small non-sensitive command successes to become metadata-only. Script producers are treated as exactness-sensitive because raw script text is not persisted.
|
|
136
|
+
|
|
137
|
+
Command example:
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"command": "npm test",
|
|
142
|
+
"goal": "verification",
|
|
143
|
+
"preserve": "important"
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Sandboxed script producer example:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"script": {
|
|
152
|
+
"language": "javascript",
|
|
153
|
+
"code": "console.log(JSON.stringify({ ok: true }))",
|
|
154
|
+
"label": "emit-json"
|
|
155
|
+
},
|
|
156
|
+
"preserve": "important"
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Returned results include:
|
|
161
|
+
|
|
162
|
+
- `outputId`,
|
|
163
|
+
- `execution.status` and `exitCode`,
|
|
164
|
+
- `producer.kind` (`command` or `script`),
|
|
165
|
+
- `scriptProducer` metadata for sandboxed script producers, including language, policy, adapter, limits, and code hash,
|
|
166
|
+
- parser metadata,
|
|
167
|
+
- important lines,
|
|
168
|
+
- exact recovery instructions when exact recovery exists, or metadata-only rerun guidance when it does not.
|
|
169
|
+
|
|
170
|
+
Command parsers currently cover:
|
|
171
|
+
|
|
172
|
+
- test runner output,
|
|
173
|
+
- TypeScript/lint diagnostics,
|
|
174
|
+
- git status/diffstat,
|
|
175
|
+
- build/toolchain errors,
|
|
176
|
+
- generic fallback,
|
|
177
|
+
- duplicate output detection.
|
|
178
|
+
|
|
179
|
+
## Pi Observed Routing
|
|
180
|
+
|
|
181
|
+
Pi observed routing handles configured MCP, web, fetch, and code-search outputs after direct host tool execution. Public Pi `freeflow_capture` has been removed; use the host MCP/web/fetch/code-search tool directly and configure `observedRouting` when routed recovery is needed.
|
|
182
|
+
|
|
183
|
+
Mutating MCP/tools remain direct host calls after explicit user intent. Freeflow treats read/write classification as routing metadata, not as a host permission gate.
|
|
184
|
+
|
|
185
|
+
## `freeflow_search action=transform`
|
|
186
|
+
|
|
187
|
+
`freeflow_search action=transform` transforms existing vaulted output. Current deterministic operations do not execute arbitrary code.
|
|
188
|
+
|
|
189
|
+
`operation.kind="script"` is the sandboxed transform branch under the same tool. `freeflow_run` also exposes the same sandbox engine as a base `script` producer. Both are disabled by default, have no unsandboxed fallback, and do not persist raw script text. Transform scripts vault successful stdout as transformed text with source lineage. Run script producers capture stdout/stderr/combined as run output with `producer.kind="script"`; failures and output-limit overflows return structured no-recovery results.
|
|
190
|
+
|
|
191
|
+
Current product execution support is Pi-first and explicit package-root opt-in:
|
|
192
|
+
|
|
193
|
+
- JavaScript can run through a proof-backed QuickJS adapter only when script transform is explicitly enabled and Pi can discover a local `quickjs-wasi` package root.
|
|
194
|
+
- Python can run through a proof-backed Eryx adapter only when script transform is explicitly enabled and Freeflow can discover an installed `@bsull/eryx` package root plus a JSPI-capable Node runtime. Setup installs `node@24` for this Python child runner. When the host process lacks JSPI, the adapter runs Eryx through that setup-installed child Node process launched with `--experimental-wasm-jspi` and enables Python only if the runner passes sandbox proofs.
|
|
195
|
+
- jq can run through a proof-backed `jq-wasm` adapter only when script transform is explicitly enabled and Pi can discover a local `jq-wasm` package root.
|
|
196
|
+
|
|
197
|
+
`freeflow_status` reports the script-sandbox contract version, configured languages, required adversarial proofs, rejected unsafe mechanisms such as Node `vm`/plain subprocesses, candidate-unproven OS sandbox adapters, and whether QuickJS, Eryx, and jq-wasm adapters are available. A language remains unavailable until a registered adapter passes every required proof. Proof results are cached in-process by adapter content hash and probe limits so repeated status/transform checks do not rerun the same adversarial probes.
|
|
198
|
+
|
|
199
|
+
Current deterministic operations include:
|
|
200
|
+
|
|
201
|
+
- regex filtering and match counts,
|
|
202
|
+
- JSON Pointer/path extraction,
|
|
203
|
+
- grouping, dedupe, and topN extraction,
|
|
204
|
+
- URL/citation extraction,
|
|
205
|
+
- line and size stats.
|
|
206
|
+
|
|
207
|
+
Transformed output is vaulted separately and points back to source output ids through lineage. Script operation hashing records code hashes, not raw code.
|
|
208
|
+
|
|
209
|
+
### Optional script adapters
|
|
210
|
+
|
|
211
|
+
Freeflow setup can install script adapters into a user-global cache after explicit consent. The default adapter home is `~/.cache/freeflow-script-adapters`; override it with `FREEFLOW_SCRIPT_TRANSFORM_ADAPTERS_HOME` when needed. Setup installs:
|
|
212
|
+
|
|
213
|
+
- `quickjs-wasi@3.0.1` for JavaScript.
|
|
214
|
+
- `jq-wasm@1.2.0-jq-1.8.2` for jq.
|
|
215
|
+
- `@bsull/eryx@0.5.0` plus `node@24` for Python. The adapter launches the setup-installed child Node process with `--experimental-wasm-jspi` when needed; setup enables Python only after that child runner passes sandbox proofs.
|
|
216
|
+
|
|
217
|
+
Freeflow auto-discovers adapters from the global cache. Explicit package-root overrides remain available:
|
|
218
|
+
|
|
219
|
+
- `FREEFLOW_QUICKJS_WASI_ROOT` for a custom `quickjs-wasi` package root.
|
|
220
|
+
- `FREEFLOW_JQ_WASM_ROOT` for a custom `jq-wasm` package root.
|
|
221
|
+
- `FREEFLOW_ERYX_ROOT` for a custom `@bsull/eryx` package root.
|
|
222
|
+
|
|
223
|
+
Discovery alone does not enable execution. `.freeflow/config.json` must opt in. The setup installer writes only proof-passing languages, for example:
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"defaultMode": "workflow",
|
|
228
|
+
"scriptTransform": {
|
|
229
|
+
"enabled": true,
|
|
230
|
+
"languages": ["javascript", "jq"]
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Supported `scriptTransform` keys are `enabled`, `sandbox`, `languages`, `network`, `limits`, and `rawScriptPersistence`. Defaults keep `sandbox: "auto"`, `network: "off"`, `rawScriptPersistence: "disabled"`, and conservative input/output/time limits. Per-call script limits may only tighten configured limits.
|
|
236
|
+
|
|
237
|
+
QuickJS guest JavaScript receives only `readText(alias)`, `writeText(text)`, `console.log`, and `console.error`. Eryx guest Python receives `read_text(alias)`, `write_text(text)`, and a `sources` dict keyed by source alias. jq receives a JSON object keyed by source alias, so a source with alias `log` is available as `.log`. Vault sources are copied into temporary input files before adapter execution; repo, home, vault, process, require, fetch, package loading, and host filesystem APIs are not exposed to guest code. Invalid or missing adapter roots fail closed as adapter unavailable.
|
|
238
|
+
|
|
239
|
+
The Python adapter runs Eryx inside a Node Worker with Worker termination for timeouts, bounded stdout/stderr before results cross the Worker-to-host boundary, a temp-copy import rewrite to force preview2 browser/in-memory shims, and a deny-only network shim. It collects no output files; transformed content comes from stdout. Residual caveat: Eryx/Python can still materialize large strings inside the Worker before wrapper truncation; product execution treats output-limit overflow as a structured failure with no exact recovery.
|
|
240
|
+
|
|
241
|
+
The jq adapter runs `jq-wasm` inside a Node Worker with Worker termination for timeouts and bounded stdout/stderr before results cross the Worker-to-host boundary. Residual caveat: `jq-wasm` can still generate large in-Worker strings before truncation; product execution treats output-limit overflow as a structured failure with no exact recovery.
|
|
242
|
+
|
|
243
|
+
### Local unsafe processing opt-in
|
|
244
|
+
|
|
245
|
+
Freeflow also has an internal processing-engine branch for local power users who explicitly accept unsandboxed execution risk. This is not enabled by shared repo config.
|
|
246
|
+
|
|
247
|
+
Use local-only `.freeflow/local.json`:
|
|
248
|
+
|
|
249
|
+
```json
|
|
250
|
+
{
|
|
251
|
+
"processing": {
|
|
252
|
+
"unsafeUnsandboxed": {
|
|
253
|
+
"enabled": true
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Rules:
|
|
260
|
+
|
|
261
|
+
- `.freeflow/local.json` is local-only and should be ignored by git.
|
|
262
|
+
- `.freeflow/config.json` cannot enable unsafe unsandboxed processing.
|
|
263
|
+
- Each call must still request `script.policy="unsafe-unsandboxed"`; sandboxed remains the default.
|
|
264
|
+
- Unsafe results must say `unsafe/unsandboxed`; they must not claim sandbox, read-only, or network-off execution.
|
|
265
|
+
- Missing or invalid local opt-in rejects the unsafe call. Freeflow must not silently fall back to an unsandboxed host path.
|
|
266
|
+
|
|
267
|
+
## `freeflow_status`
|
|
268
|
+
|
|
269
|
+
`freeflow_status` reports effective Freeflow behavior without rewriting config.
|
|
270
|
+
|
|
271
|
+
It shows:
|
|
272
|
+
|
|
273
|
+
- router enabled/profile and thresholds,
|
|
274
|
+
- vault path and writability,
|
|
275
|
+
- observed-routing policy and recoverability defaults,
|
|
276
|
+
- script-transform enabled/off state through `scriptTransform`, adapter availability, configured languages, required sandbox proofs, rejected/candidate mechanisms, no-network policy, limits, and raw-script persistence state,
|
|
277
|
+
- config warnings and safe fallbacks,
|
|
278
|
+
- non-destructive migration recommendations for stale explicit defaults or unknown keys.
|
|
279
|
+
|
|
280
|
+
Migration recommendations are informational only. They require explicit confirmation before any future rewrite of `.freeflow/config.json`.
|
|
281
|
+
|
|
282
|
+
## Vault Recovery
|
|
283
|
+
|
|
284
|
+
Recover exact command output with:
|
|
285
|
+
|
|
286
|
+
```json
|
|
287
|
+
{
|
|
288
|
+
"action": "retrieve",
|
|
289
|
+
"source": { "kind": "vault", "outputId": "ffout_...", "stream": "combined" },
|
|
290
|
+
"lineRange": { "start": 1, "end": 40 },
|
|
291
|
+
"preserve": "full"
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Streams:
|
|
296
|
+
|
|
297
|
+
- command output: `stdout`, `stderr`, `combined`,
|
|
298
|
+
- native safety-net output: `raw`.
|
|
299
|
+
|
|
300
|
+
Default vault root:
|
|
301
|
+
|
|
302
|
+
```text
|
|
303
|
+
~/.cache/freeflow-router/vault
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Config
|
|
307
|
+
|
|
308
|
+
The router works with built-in defaults. Minimal `/setup-freeflow` writes only `defaultMode`.
|
|
309
|
+
|
|
310
|
+
Optional repo config lives in `.freeflow/config.json` only after the setup evidence-routing decision point or an explicit request:
|
|
311
|
+
|
|
312
|
+
```json
|
|
313
|
+
{
|
|
314
|
+
"defaultMode": "workflow",
|
|
315
|
+
"outputRouter": {
|
|
316
|
+
"enabled": true,
|
|
317
|
+
"profile": "standard",
|
|
318
|
+
"postToolRouting": "off",
|
|
319
|
+
"storagePolicy": "hybrid-dedupe",
|
|
320
|
+
"largeOutputBytes": 64000,
|
|
321
|
+
"largeOutputLines": 1000,
|
|
322
|
+
"vaultRoot": "~/.cache/freeflow-router/vault",
|
|
323
|
+
"vaultRetentionDays": 7,
|
|
324
|
+
"generatedPaths": ["graphify-out/**"],
|
|
325
|
+
"noisyCommandHints": ["npm test"]
|
|
326
|
+
},
|
|
327
|
+
"observedRouting": {
|
|
328
|
+
"enabled": true,
|
|
329
|
+
"onRoutingFailure": "fail-open",
|
|
330
|
+
"mcp": {
|
|
331
|
+
"servers": {
|
|
332
|
+
"github": { "enabled": true, "persistence": "exact" },
|
|
333
|
+
"gmail": { "enabled": true, "persistence": "metadata-only" }
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"web": { "enabled": true, "persistence": "exact" },
|
|
337
|
+
"fetch": { "enabled": true, "persistence": "exact" },
|
|
338
|
+
"codeSearch": { "enabled": true, "persistence": "exact" }
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Rules:
|
|
344
|
+
|
|
345
|
+
- `postToolRouting` defaults to `off`.
|
|
346
|
+
- `storagePolicy` defaults to `hybrid-dedupe` for `freeflow_run` command/script capture. `store-everything` is the compatibility/diagnostic override.
|
|
347
|
+
- Small non-sensitive successful command output may be metadata-only; failures, verification/diagnosis/build/test output, `preserve=full`, filters/script filters, script producers, and large/noisy output stay exact.
|
|
348
|
+
- Exact duplicate run output may store current metadata pointing to a prior exact `outputId`; plain metadata-only records must not claim exact recovery.
|
|
349
|
+
- `safety-net` is opt-in.
|
|
350
|
+
- `strict` is reserved.
|
|
351
|
+
- Observed routing is opt-in per producer/server. Setup writes explicit entries only after the user chooses them.
|
|
352
|
+
- Observed-routing persistence modes are `exact`, `metadata-only`, and `none`. `redacted` is future-only and not a setup option.
|
|
353
|
+
- Native safety-net routing is configured with `outputRouter.postToolRouting`; removed `capture` and `providers` config must not be written.
|
|
354
|
+
- Do not dump defaults into config.
|
|
355
|
+
- Write only requested keys.
|
|
356
|
+
|
|
357
|
+
## Observed Routing
|
|
358
|
+
|
|
359
|
+
Pi can route enabled MCP, web, fetch, and code-search outputs after the direct host tool call. The agent still calls the host tool directly; Freeflow only routes/reduces/stores the completed output.
|
|
360
|
+
|
|
361
|
+
Observed routing is off by default. Setup must choose each enabled producer/server and its persistence mode up front.
|
|
362
|
+
|
|
363
|
+
## Native Safety Net
|
|
364
|
+
|
|
365
|
+
Pi can optionally route large native `read`/`bash` results after the tool runs.
|
|
366
|
+
|
|
367
|
+
Default: off.
|
|
368
|
+
|
|
369
|
+
When enabled, a routed native result is labeled, vaulted, and includes an `outputId`. If safety-net routing fails, Freeflow fails open and returns native output with a warning.
|
|
370
|
+
|
|
371
|
+
## Defaults And Experiments
|
|
372
|
+
|
|
373
|
+
Current adoption decisions:
|
|
374
|
+
|
|
375
|
+
- Scanner retrieval is the default backend.
|
|
376
|
+
- The no-dependency local index is experimental and not adopted by default.
|
|
377
|
+
- SQLite/FTS is not adopted.
|
|
378
|
+
- Model-assisted routing is not default.
|
|
379
|
+
- Graphify, Claude Context, RTK, and Squeez are optional references/comparators, not dependencies.
|
|
380
|
+
|
|
381
|
+
## Evidence
|
|
382
|
+
|
|
383
|
+
Current release evidence:
|
|
384
|
+
|
|
385
|
+
- Retrieval benchmark: improved router passed 7/7 fixtures.
|
|
386
|
+
- Command benchmark: `freeflow_run` passed 8/8 fixtures with exact recovery for exactness-sensitive command fixtures and duplicate recovery through prior exact output ids.
|
|
387
|
+
- Historical capture/transform/provider eval: targeted Slice 9 eval passed 14/14 objective gates before the provider-summary config surface was removed; observed routing now owns producer output routing.
|
|
388
|
+
- Pi observed-routing eval: targeted eval passed 28/28 objective gates for MCP, web, fetch, code-search, metadata-only persistence, and Pi capability status.
|
|
389
|
+
- Vault-index storage spike: selected deterministic local JSON sidecar behind the vault-index interface; SQLite/FTS remains deferred because native/runtime dependency adoption needs owner approval.
|
|
390
|
+
- Optional repo-source index benchmark: scanner remains default; repo-source index not adopted. Latest repo search backend benchmark compared scanner-only, local lexical index, Node `node:sqlite` FTS5/BM25/trigram, and conservative hybrid scanner+index; all passed 3/3 fixtures with recall@3 3/3 and zero generated false positives. FTS was tested through the experimental Node runtime available in this environment; no package dependency was added.
|
|
391
|
+
- Storage-policy benchmark: `hybrid-dedupe` is the command-capture default after benchmark evidence; threshold-only storage was disqualified.
|
|
392
|
+
- Codex Structured Q&A benchmark: improved router passed the Sandbox Permissions fixture where native broad search selected `graphify-out/graph.html`.
|
|
393
|
+
- Context Mode normalized benchmark: Freeflow-owned tools and the normalized Context Mode-style proxy both passed 6/6 fixtures. Freeflow preserved exact facts/recovery on 6/6 but did not beat the proxy on model-visible bytes in these normalized fixtures; no public superiority claim is made.
|
|
394
|
+
- Setup eval: optional `outputRouter`/`observedRouting`/`scriptTransform` config is opt-in through the capabilities branch; minimal setup remains only `defaultMode`.
|
|
395
|
+
|
|
396
|
+
See `release-evidence.md` and runtime reports under `evals/reports/runtime/`.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Release Evidence
|
|
2
|
+
|
|
3
|
+
Freeflow v0.3.0 is based on the v0.1 local acceptance suite plus targeted runtime, setup, and output-router evidence from the development repository.
|
|
4
|
+
|
|
5
|
+
## Acceptance Summary
|
|
6
|
+
|
|
7
|
+
The local v0.1 acceptance suite passed after measured fixes and was rerun during prepublish verification on 2026-05-26.
|
|
8
|
+
|
|
9
|
+
High-signal behaviors covered:
|
|
10
|
+
|
|
11
|
+
- Source-truth conflicts stop before edits.
|
|
12
|
+
- Strict public API specs ask for owner decisions.
|
|
13
|
+
- Execution stops when verification reveals a bad plan.
|
|
14
|
+
- Commit flow refuses mixed staged sensitive changes.
|
|
15
|
+
- Discovery checkpoints replace separate briefing, grilling, and decision-capture commands for discovery work.
|
|
16
|
+
- Bypass skips ceremony, not judgment.
|
|
17
|
+
|
|
18
|
+
## Command Surface
|
|
19
|
+
|
|
20
|
+
The development registry covers:
|
|
21
|
+
|
|
22
|
+
- 4 mode commands.
|
|
23
|
+
- 12 direct skill calls.
|
|
24
|
+
- 3 developer skill calls.
|
|
25
|
+
|
|
26
|
+
Codex/Claude native slash handlers are not shipped in this release. In those hosts, commands are model-routed through natural language and skill activation. Pi registers direct Freeflow commands through its extension, including `/output-router`.
|
|
27
|
+
|
|
28
|
+
## Runtime Context
|
|
29
|
+
|
|
30
|
+
Freeflow ships plugin-bundled context hooks that load the existing `mode-contract`, `workflow`, `interview-gate`, `discover`, and `output-router` skills at session start. The Pi extension injects full skill context once after session/compact boundaries, then keeps later turns to a short mode/priority refresh plus compact output-router tool reminder. Workflow-map and output-router safety-policy references remain available on demand but are not injected wholesale by default. Runtime context states the priority order: mode-contract handles mode issues first, workflow classifies, interview-gate stops silent decisions, discover handles context-building, and output-router chooses evidence transport. These hooks do not run after edit/write tools, enforce behavior, block tools, or create repo-local hook files.
|
|
31
|
+
|
|
32
|
+
For the same session that runs setup, `setup-freeflow` reads the mode-contract, workflow, interview-gate, discover, and output-router skills after successful setup verification before saying that context is loaded.
|
|
33
|
+
|
|
34
|
+
Host trust prompts for plugin hooks are expected host behavior. Local metadata validation checks hook packaging and deterministic output, not end-to-end host trust UI.
|
|
35
|
+
|
|
36
|
+
## Output Router Evidence
|
|
37
|
+
|
|
38
|
+
Output-router behavior is backed by deterministic runtime reports under `evals/reports/runtime/`.
|
|
39
|
+
|
|
40
|
+
Verified in the development repo:
|
|
41
|
+
|
|
42
|
+
- Retrieval benchmark: improved router passed 7/7 gated fixtures and fixed the generated-artifact Sandbox Permissions false-positive shape.
|
|
43
|
+
- Command-output benchmark: `freeflow_run` passed 8/8 fixtures, preserved exact facts, and verified raw vault recovery.
|
|
44
|
+
- Historical capture/transform/provider eval: targeted eval passed 14/14 objective gates before provider-summary config was removed; observed routing now owns producer output routing.
|
|
45
|
+
- Pi observed-routing eval: targeted eval passed 28/28 gates with 82.2% overall byte reduction across MCP/web/fetch/code-search fixtures, exact recovery where configured, metadata-only no-raw recovery, and Pi capability status.
|
|
46
|
+
- Vault-index storage/write/query path: selected deterministic local JSON sidecar for vault evidence indexing without adding native dependencies, indexes persisted appends immediately, supports vault-wide `freeflow_search` query/locate with recovery pointers, preserves metadata-only/no-persist rules, and keeps index failures non-blocking; SQLite/FTS remains deferred pending owner approval.
|
|
47
|
+
- Script execution schema/status gate: `freeflow_search action=transform operation.kind="script"` and `freeflow_run` script producers are shaped under existing public tools, disabled by default, report status/config/limits/raw-script persistence, and return structured disabled/unavailable before execution when script transform or a requested adapter is unavailable. Transform scripts resolve vault sources; run script producers execute with an empty source manifest and capture stdout/stderr as run output.
|
|
48
|
+
- Script-sandbox proof gate: router exposes a sandbox adapter/probe interface, required adversarial proofs, rejected unsafe mechanisms, and status-visible candidate-unproven mechanisms; no unsandboxed fallback exists. JavaScript, Python, and jq product execution are implemented only after setup/user config opts in and proof-backed adapters are available. Python uses the Eryx adapter from the global adapter cache or `FREEFLOW_ERYX_ROOT`; when the host lacks JSPI, the adapter launches the setup-installed `node@24` child process with `--experimental-wasm-jspi` and enables Python only after that runner passes proofs. Earlier adapter evidence is in `evals/reports/runtime/eryx-python-proof-spike-2-report.md`; current transform-routing evidence is in `evals/reports/runtime/output-router-transform-eval-1-report.md`; current setup smoke verifies Python availability through the child runner. Probe resource hardening reduced flood fixture sizes and caches proof results by adapter hash/probe limits.
|
|
49
|
+
- Optional repo-source local index benchmark: scanner remains default, index is not adopted by default, and the no-dependency repo-source index remains experimental. The latest repo search backend benchmark compares scanner-only, local lexical index, Node `node:sqlite` FTS5/BM25/trigram, and conservative hybrid scanner+index; all pass the current fixtures with recall@3 3/3 and zero generated false positives. FTS was tested through the experimental Node runtime available in this environment; no package dependency was added.
|
|
50
|
+
- Storage-policy benchmark/adoption: `hybrid-dedupe` is the `freeflow_run` command/script capture default after benchmark evidence; failures/verification/diagnostics, `preserve=full`, filters/script filters, script producers, and large/noisy outputs remain exact; small non-sensitive command successes may be metadata-only; exact duplicates may point to a prior exact output.
|
|
51
|
+
- Context Mode normalized benchmark: Freeflow-owned tools and the normalized Context Mode-style proxy both pass 6/6 fixtures. Freeflow preserves exact facts/recovery on 6/6, but visible answer accuracy is 4/6 and the proxy is smaller on model-visible bytes for these normalized fixtures; no public superiority claim is made.
|
|
52
|
+
- Context Mode real deep final benchmark: Freeflow improved from 17/28 correct and 76/92 facts to 35/36 correct and 124/124 facts, with weighted reduction improving from 76.28% to 95.76%. Freeflow beats Context Mode for covered reducers and batch aggregation on context size, but Context Mode still wins indexed repo/docs search compactness and latency. Evidence: `evals/reports/runtime/context-mode-real-deep-final-slice-11-report.md` and `evals/reports/runtime/context-mode-real-deep-final-slice-11-review.md`.
|
|
53
|
+
- Codex Structured Q&A macro benchmark: improved router passed the first Sandbox Permissions Q&A fixture while the native broad-search proxy selected `graphify-out/graph.html`.
|
|
54
|
+
- Large Codex scanner benchmark: scanner remains the retrieval backend; latest recorded report-refresh evidence kept scanner at 6/8 strict fixtures with bounded context.
|
|
55
|
+
- Setup/config eval: `setup-freeflow` supports optional capabilities repo config (`outputRouter`, `observedRouting`, `scriptTransform`) only after an explicit setup branch/request; minimal setup still writes only `defaultMode`.
|
|
56
|
+
|
|
57
|
+
Adoption decisions:
|
|
58
|
+
|
|
59
|
+
- Scanner improvements ship as default behavior.
|
|
60
|
+
- Native post-tool safety-net routing remains off unless explicitly configured.
|
|
61
|
+
- The no-dependency local index stays experimental.
|
|
62
|
+
- SQLite/FTS, model-assisted routing, Graphify, and Claude Context remain optional/non-default comparison paths, not product dependencies.
|
|
63
|
+
|
|
64
|
+
## Release Metadata
|
|
65
|
+
|
|
66
|
+
Run `evals/scripts/validate-release-metadata.sh` for local prepublish checks across marketplace metadata, host manifests, command-surface routing, release-boundary docs, package cleanliness, and deferred install-smoke status.
|
|
67
|
+
|
|
68
|
+
Run `evals/scripts/check-runtime-context-hook.sh` after changing lifecycle context hooks.
|
|
69
|
+
|
|
70
|
+
## Known Deferred Work
|
|
71
|
+
|
|
72
|
+
- Live Claude smoke evals after Hassan confirms Claude testing is available again.
|
|
73
|
+
- GitHub-install smoke tests in separate Codex, Claude, and fresh Pi environments.
|
|
74
|
+
- Enforcement hooks or CLI checks only after repeated behavior failures justify them.
|
|
75
|
+
- Public marketplace submission only after GitHub install works for required hosts.
|
|
76
|
+
|
|
77
|
+
Full eval reports are development evidence and are not included in the runtime package.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Skills
|
|
2
2
|
|
|
3
|
-
Freeflow ships a small workflow skill pack. Natural language is the preferred interface. In Codex/Claude, slash-style phrases work as model-routed skill hints
|
|
3
|
+
Freeflow ships a small workflow skill pack. Natural language is the preferred interface. In Codex/Claude, slash-style phrases work as model-routed skill hints; in Pi, the extension registers direct Freeflow commands.
|
|
4
4
|
|
|
5
5
|
## Core
|
|
6
6
|
|
|
@@ -9,29 +9,29 @@ Freeflow ships a small workflow skill pack. Natural language is the preferred in
|
|
|
9
9
|
| `workflow` | Choosing the next workflow entry point or explaining the full flow. |
|
|
10
10
|
| `mode-contract` | Inferring or switching `conversation`, `workflow`, or `strict-workflow`. |
|
|
11
11
|
| `interview-gate` | Ambiguity or a user-owned decision would change the next action. |
|
|
12
|
+
| `output-router` | Choosing routed tools for large/noisy output, vault recovery, or output-router configuration. |
|
|
12
13
|
| `bypass` | Skipping unnecessary ceremony without skipping judgment. |
|
|
14
|
+
| `design-for-depth` | Module/interface/seam choices affect complexity, locality, testability, future change, or repeated edge-case churn. |
|
|
13
15
|
|
|
14
16
|
## Discovery And Artifacts
|
|
15
17
|
|
|
16
18
|
| Skill | Use When |
|
|
17
19
|
| --- | --- |
|
|
18
|
-
| `
|
|
19
|
-
| `grill-context` | Direction is vague and a decision tree needs clarification. |
|
|
20
|
+
| `discover` | An idea, feature, architecture direction, vague task, or consequential question needs evidence, brainstorming, targeted questions, and a checkpoint before spec, plan, build, or durable memory. |
|
|
20
21
|
| `write-spec` | Agreed requirements or decisions need a durable spec. |
|
|
21
|
-
| `review-artifact` | A spec, plan, handoff,
|
|
22
|
+
| `review-artifact` | A spec, plan, handoff, discovery checkpoint, or decision note must guide future work. |
|
|
22
23
|
| `write-plan` | An approved spec or explicit task context needs executable slices. |
|
|
23
24
|
|
|
24
25
|
## Execution And Closeout
|
|
25
26
|
|
|
26
27
|
| Skill | Use When |
|
|
27
28
|
| --- | --- |
|
|
28
|
-
| `execute-plan` | An approved plan exists and should be implemented in checked slices. |
|
|
29
|
+
| `execute-plan` | An approved plan exists and should be implemented in checked slices, especially multi-slice/TDD work with verification, review, commit, or handoff checkpoints. |
|
|
29
30
|
| `diagnose-failure` | Behavior is broken, failing, flaky, slow, or unclear. |
|
|
30
|
-
| `review-work` | A completed diff or review feedback needs bug/risk-focused review. |
|
|
31
|
+
| `review-work` | A completed diff or review feedback needs bug/risk-focused review or adjudication before fixes. |
|
|
31
32
|
| `verify-work` | Fresh evidence is needed before claiming completion. |
|
|
32
33
|
| `commit-work` | Reviewed, verified, intended work is ready to commit. |
|
|
33
34
|
| `handoff` | Pausing, compacting, transferring context, or preserving continuation memory. |
|
|
34
|
-
| `capture-decisions` | Stable decisions, glossary terms, rejected approaches, or ADR-worthy tradeoffs should be recorded. |
|
|
35
35
|
|
|
36
36
|
## Contributor Skills
|
|
37
37
|
|
|
@@ -4,7 +4,7 @@ Freeflow is a workflow layer, not a new agent. It helps the agent choose the rig
|
|
|
4
4
|
|
|
5
5
|
## Modes
|
|
6
6
|
|
|
7
|
-
- `conversation`:
|
|
7
|
+
- `conversation`: non-mutating discussion, read-only exploration, and planning in chat; edits or other state-changing work require switching to `workflow` or `strict-workflow` first.
|
|
8
8
|
- `workflow`: default for consequential work; use the workflow spine and scale detail to risk.
|
|
9
9
|
- `strict-workflow`: high-risk or hard-to-reverse work with stronger gates.
|
|
10
10
|
|
|
@@ -16,7 +16,7 @@ Use strict-workflow for security, privacy, billing, public APIs, migrations, dat
|
|
|
16
16
|
flowchart LR
|
|
17
17
|
Request{request}
|
|
18
18
|
Talk[conversation<br/>answer directly]
|
|
19
|
-
Discover[discover<br/>
|
|
19
|
+
Discover[discover<br/>checkpoint]
|
|
20
20
|
Spec[spec]
|
|
21
21
|
Plan[plan]
|
|
22
22
|
Build[build<br/>execute / diagnose]
|
|
@@ -29,7 +29,7 @@ flowchart LR
|
|
|
29
29
|
Check -. new evidence or failed check .-> Discover
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
The map is orienting, not mandatory. Small reversible work can skip unnecessary artifacts and gates.
|
|
32
|
+
The map is orienting, not mandatory. Small reversible work can skip unnecessary artifacts and gates. Use `/discover` for the discovery loop.
|
|
33
33
|
|
|
34
34
|
## Backward Edge
|
|
35
35
|
|
|
@@ -40,7 +40,7 @@ flowchart LR
|
|
|
40
40
|
Trigger{new evidence<br/>conflict<br/>failed check<br/>owner decision}
|
|
41
41
|
Decide{changes<br/>next action?}
|
|
42
42
|
Continue[continue]
|
|
43
|
-
Reenter[clarify /
|
|
43
|
+
Reenter[clarify / discover<br/>revise spec or plan<br/>diagnose / split / stop]
|
|
44
44
|
|
|
45
45
|
Trigger --> Decide
|
|
46
46
|
Decide -->|no| Continue
|