@hassangameryt/freeflow 0.2.0 → 0.4.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 +4 -4
- package/{plugins/freeflow/.claude-plugin → .claude-plugin}/plugin.json +5 -2
- package/{plugins/freeflow/.codex-plugin → .codex-plugin}/plugin.json +8 -9
- package/README.md +194 -127
- package/assets/feedback-loop.png +0 -0
- package/assets/freeflow-plugin-icon.png +0 -0
- package/assets/freeflow_workflow_map.png +0 -0
- package/assets/workflow.png +0 -0
- package/command-surface.json +129 -0
- package/hooks/freeflow-runtime-context.mjs +419 -0
- package/hooks/tests/check-runtime-context-hook.sh +223 -0
- package/package.json +41 -22
- package/pi-extension/dist/index.js +269 -0
- package/pi-extension/dist/integrations/mcp-config.js +29 -0
- package/pi-extension/dist/output-router/host-producer-identification.js +232 -0
- package/pi-extension/dist/output-router/native-safety-net.js +216 -0
- package/pi-extension/dist/output-router/observed-tool-routing.js +122 -0
- package/pi-extension/dist/output-router/renderers.js +1023 -0
- package/pi-extension/dist/output-router/router-tools.js +554 -0
- package/pi-extension/dist/output-router/schemas.js +383 -0
- package/pi-extension/dist/output-router/status.js +744 -0
- package/pi-extension/dist/output-router/utils.js +502 -0
- package/pi-extension/dist/runtime/runtime-context.js +798 -0
- package/pi-extension/dist/settings/settings-tui.js +314 -0
- package/pi-extension/dist/settings/settings-ui.js +1487 -0
- package/pi-extension/freeflow/index.js +1 -0
- package/pi-extension/src/index.ts +295 -0
- package/pi-extension/src/integrations/mcp-config.ts +32 -0
- package/pi-extension/src/output-router/host-producer-identification.ts +256 -0
- package/pi-extension/src/output-router/native-safety-net.ts +248 -0
- package/pi-extension/src/output-router/observed-tool-routing.ts +134 -0
- package/pi-extension/src/output-router/renderers.ts +1108 -0
- package/pi-extension/src/output-router/router-tools.ts +579 -0
- package/pi-extension/src/output-router/schemas.ts +387 -0
- package/pi-extension/src/output-router/status.ts +791 -0
- package/pi-extension/src/output-router/utils.ts +554 -0
- package/pi-extension/src/runtime/runtime-context.ts +895 -0
- package/pi-extension/src/settings/settings-tui.ts +408 -0
- package/pi-extension/src/settings/settings-ui.ts +1730 -0
- package/pi-extension/tests/integration/pi-extension.test.js +4018 -0
- package/pi-extension/tests/output-router/observed-producers.test.js +132 -0
- package/pi-extension/tests/output-router/search.test.js +722 -0
- package/pi-extension/tests/settings/settings-tui.test.js +243 -0
- package/pi-extension/tsconfig.json +16 -0
- package/{plugins/freeflow/router/dist → router/dist/benchmarks}/benchmark-harness.d.ts +16 -13
- package/router/dist/benchmarks/benchmark-harness.js +92 -0
- package/router/dist/benchmarks/benchmarks.d.ts +109 -0
- package/router/dist/benchmarks/benchmarks.js +979 -0
- package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +95 -0
- package/router/dist/benchmarks/codex-qa-benchmarks.js +500 -0
- package/router/dist/benchmarks/command-benchmarks.d.ts +143 -0
- package/router/dist/benchmarks/command-benchmarks.js +698 -0
- package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +82 -0
- package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +773 -0
- package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +132 -0
- package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1380 -0
- package/router/dist/benchmarks/context-saving-baseline.d.ts +60 -0
- package/router/dist/benchmarks/context-saving-baseline.js +470 -0
- package/router/dist/benchmarks/index-benchmarks.d.ts +103 -0
- package/router/dist/benchmarks/index-benchmarks.js +862 -0
- package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +101 -0
- package/router/dist/benchmarks/storage-policy-benchmarks.js +618 -0
- package/router/dist/benchmarks/vault-index-benchmarks.d.ts +56 -0
- package/router/dist/benchmarks/vault-index-benchmarks.js +322 -0
- package/router/dist/config/config.d.ts +103 -0
- package/router/dist/config/config.js +632 -0
- package/{plugins/freeflow/router/dist → router/dist/config}/router-contract.d.ts +2 -2
- package/router/dist/config/router-contract.js +54 -0
- package/{plugins/freeflow/router/dist → router/dist/config}/schema.d.ts +19 -10
- package/router/dist/config/schema.js +648 -0
- package/router/dist/config/types.d.ts +573 -0
- package/router/dist/config/types.js +41 -0
- package/router/dist/evidence/bounded-evidence.d.ts +40 -0
- package/router/dist/evidence/bounded-evidence.js +323 -0
- package/router/dist/evidence/evidence-range-selector.d.ts +24 -0
- package/router/dist/evidence/evidence-range-selector.js +232 -0
- package/router/dist/evidence/evidence-search.d.ts +27 -0
- package/router/dist/evidence/evidence-search.js +490 -0
- package/{plugins/freeflow/router/dist → router/dist/evidence}/evidence.d.ts +18 -18
- package/router/dist/evidence/evidence.js +200 -0
- package/router/dist/evidence/failure-contracts.d.ts +37 -0
- package/router/dist/evidence/failure-contracts.js +166 -0
- package/router/dist/evidence/line-ranges.d.ts +24 -0
- package/router/dist/evidence/line-ranges.js +22 -0
- package/router/dist/experiments/local-index.d.ts +64 -0
- package/router/dist/experiments/local-index.js +581 -0
- package/router/dist/index.d.ts +30 -0
- package/router/dist/index.js +32 -0
- package/router/dist/local/local-traversal.d.ts +18 -0
- package/router/dist/local/local-traversal.js +334 -0
- package/router/dist/processing/engine.d.ts +132 -0
- package/router/dist/processing/engine.js +533 -0
- package/router/dist/processing/reducers.d.ts +280 -0
- package/router/dist/processing/reducers.js +1673 -0
- package/router/dist/processing/renderers.d.ts +31 -0
- package/router/dist/processing/renderers.js +195 -0
- package/router/dist/processing/scripts.d.ts +91 -0
- package/router/dist/processing/scripts.js +386 -0
- package/{plugins/freeflow/router/dist → router/dist/repo}/repo-traversal.d.ts +9 -9
- package/router/dist/repo/repo-traversal.js +245 -0
- package/router/dist/routing/observed-reducers.d.ts +41 -0
- package/router/dist/routing/observed-reducers.js +661 -0
- package/router/dist/routing/observed-routing.d.ts +26 -0
- package/router/dist/routing/observed-routing.js +378 -0
- package/router/dist/routing/parsers.d.ts +16 -0
- package/router/dist/routing/parsers.js +521 -0
- package/router/dist/routing/run-filters.d.ts +60 -0
- package/router/dist/routing/run-filters.js +238 -0
- package/router/dist/routing/run-reducers.d.ts +49 -0
- package/router/dist/routing/run-reducers.js +122 -0
- package/router/dist/sandbox/adapter-roots.d.ts +46 -0
- package/router/dist/sandbox/adapter-roots.js +66 -0
- package/router/dist/sandbox/eryx-python-adapter.d.ts +13 -0
- package/router/dist/sandbox/eryx-python-adapter.js +868 -0
- package/router/dist/sandbox/jq-wasm-adapter.d.ts +9 -0
- package/router/dist/sandbox/jq-wasm-adapter.js +429 -0
- package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +13 -0
- package/router/dist/sandbox/quickjs-wasi-adapter.js +384 -0
- package/router/dist/sandbox/script-sandbox.d.ts +134 -0
- package/router/dist/sandbox/script-sandbox.js +337 -0
- package/router/dist/setup/script-transform-adapters.d.ts +32 -0
- package/router/dist/setup/script-transform-adapters.js +278 -0
- package/router/dist/tools/batch.d.ts +33 -0
- package/router/dist/tools/batch.js +586 -0
- package/router/dist/tools/run.d.ts +62 -0
- package/router/dist/tools/run.js +1304 -0
- package/router/dist/tools/search.d.ts +66 -0
- package/router/dist/tools/search.js +1364 -0
- package/router/dist/transform/engine.d.ts +168 -0
- package/router/dist/transform/engine.js +2072 -0
- package/router/dist/vault/vault-index.d.ts +125 -0
- package/router/dist/vault/vault-index.js +416 -0
- package/router/dist/vault/vault.d.ts +138 -0
- package/router/dist/vault/vault.js +630 -0
- package/runtime/interaction-contract.md +16 -0
- package/skills/bypass/SKILL.md +82 -0
- package/skills/commit-work/SKILL.md +106 -0
- package/skills/commit-work/references/staging-decisions.md +73 -0
- package/skills/decision-gate/SKILL.md +48 -0
- package/skills/design-for-depth/SKILL.md +106 -0
- package/skills/design-for-depth/references/design-pressure-signals.md +314 -0
- package/skills/design-for-depth/references/interface-design-loop.md +156 -0
- package/skills/design-for-depth/references/software-design-philosophy.md +248 -0
- package/skills/diagnose-failure/SKILL.md +105 -0
- package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +36 -0
- package/skills/diagnose-failure/references/flaky-and-performance.md +43 -0
- package/skills/discuss/SKILL.md +121 -0
- package/skills/discuss/references/checkpoints.md +66 -0
- package/skills/evaluate-skill/SKILL.md +105 -0
- package/skills/evaluate-skill/references/definition-schema.md +345 -0
- package/skills/evaluate-skill/references/evaluation-design.md +86 -0
- package/skills/evaluate-skill/references/execution-and-evidence.md +85 -0
- package/skills/evaluate-skill/references/review-and-revision.md +51 -0
- package/skills/evaluate-skill/scripts/lib/definitions.mjs +296 -0
- package/skills/evaluate-skill/scripts/lib/evidence.mjs +46 -0
- package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +60 -0
- package/skills/evaluate-skill/scripts/lib/grade-interaction.mjs +148 -0
- package/skills/evaluate-skill/scripts/lib/grade-support.mjs +126 -0
- package/skills/evaluate-skill/scripts/lib/grade-workspace.mjs +192 -0
- package/skills/evaluate-skill/scripts/lib/grade.mjs +56 -0
- package/skills/evaluate-skill/scripts/lib/pi.mjs +489 -0
- package/skills/evaluate-skill/scripts/lib/process.mjs +79 -0
- package/skills/evaluate-skill/scripts/lib/rpc.mjs +444 -0
- package/skills/evaluate-skill/scripts/lib/runner.mjs +346 -0
- package/skills/evaluate-skill/scripts/lib/sandbox.mjs +409 -0
- package/skills/evaluate-skill/scripts/lib/view.mjs +337 -0
- package/skills/evaluate-skill/scripts/pi-guard.mjs +164 -0
- package/skills/evaluate-skill/scripts/skill-eval.mjs +101 -0
- package/skills/execute-work/SKILL.md +99 -0
- package/skills/execute-work/references/code-practices.md +78 -0
- package/skills/execute-work/references/execution-loop.md +77 -0
- package/skills/finish-branch/SKILL.md +117 -0
- package/skills/finish-branch/references/integration-options.md +80 -0
- package/skills/handoff/SKILL.md +92 -0
- package/skills/handoff/references/templates.md +141 -0
- package/skills/launch-work/SKILL.md +116 -0
- package/skills/launch-work/references/launch-readiness.md +85 -0
- package/skills/migration-work/SKILL.md +115 -0
- package/skills/migration-work/references/migration-lifecycle.md +82 -0
- package/skills/mode-contract/SKILL.md +82 -0
- package/skills/output-router/SKILL.md +206 -0
- package/skills/output-router/references/safety-policy.md +40 -0
- package/skills/release-work/SKILL.md +118 -0
- package/skills/release-work/references/release-evidence.md +78 -0
- package/skills/review-artifact/SKILL.md +126 -0
- package/skills/review-artifact/references/reviewer-prompt.md +148 -0
- package/skills/review-work/SKILL.md +126 -0
- package/skills/review-work/references/reviewer-prompt.md +134 -0
- package/skills/review-work/references/security-risk-lens.md +67 -0
- package/skills/setup-freeflow/SKILL.md +98 -0
- package/skills/setup-freeflow/references/activation-contract.md +120 -0
- package/skills/setup-freeflow/references/host-setup.md +72 -0
- package/skills/setup-freeflow/references/output-router-setup.md +110 -0
- package/skills/simplify-code/SKILL.md +80 -0
- package/skills/simplify-code/references/simplification-patterns.md +70 -0
- package/skills/tdd/SKILL.md +96 -0
- package/skills/tdd/references/test-design.md +96 -0
- package/skills/track-work/SKILL.md +84 -0
- package/skills/track-work/references/working-record-schema.md +378 -0
- package/skills/verify-work/SKILL.md +85 -0
- package/skills/verify-work/references/browser-runtime-evidence.md +55 -0
- package/skills/verify-work/references/integration-evidence.md +51 -0
- package/skills/verify-work/references/performance-evidence.md +57 -0
- package/skills/workflow/SKILL.md +91 -0
- package/skills/workflow/references/domain-skill-composition.md +57 -0
- package/skills/workflow/references/workflow-loop.md +92 -0
- package/skills/write-plan/SKILL.md +123 -0
- package/skills/write-plan/references/plan-shapes.md +156 -0
- package/skills/write-skill/SKILL.md +119 -0
- package/skills/write-skill/references/activation-boundaries.md +62 -0
- package/skills/write-skill/references/agent-first-instructions.md +87 -0
- package/skills/write-skill/references/progressive-disclosure.md +63 -0
- package/skills/write-skill/scripts/lib/skill-author.mjs +653 -0
- package/skills/write-skill/scripts/skill-author.mjs +104 -0
- package/skills/write-spec/SKILL.md +104 -0
- package/skills/write-spec/references/artifact-standards.md +86 -0
- package/skills/write-spec/references/decision-records.md +77 -0
- package/skills/write-spec/references/spec-shapes.md +128 -0
- package/plugins/freeflow/command-surface.json +0 -77
- package/plugins/freeflow/docs/README.md +0 -40
- package/plugins/freeflow/docs/adr/0001-three-modes.md +0 -27
- package/plugins/freeflow/docs/adr/0002-evals-before-hooks.md +0 -17
- package/plugins/freeflow/docs/adr/0003-release-boundary.md +0 -21
- package/plugins/freeflow/docs/adr/0004-research-replaces-shallow-discovery-skills.md +0 -26
- package/plugins/freeflow/docs/adr/README.md +0 -8
- package/plugins/freeflow/docs/architecture.md +0 -86
- package/plugins/freeflow/docs/output-router.md +0 -212
- package/plugins/freeflow/docs/release-evidence.md +0 -69
- package/plugins/freeflow/docs/skills.md +0 -43
- package/plugins/freeflow/docs/workflow.md +0 -57
- package/plugins/freeflow/hooks/freeflow-runtime-context.mjs +0 -257
- package/plugins/freeflow/pi-extension/index.js +0 -1176
- package/plugins/freeflow/router/dist/benchmark-harness.js +0 -92
- package/plugins/freeflow/router/dist/benchmarks.d.ts +0 -102
- package/plugins/freeflow/router/dist/benchmarks.js +0 -880
- package/plugins/freeflow/router/dist/bounded-evidence.d.ts +0 -40
- package/plugins/freeflow/router/dist/bounded-evidence.js +0 -310
- package/plugins/freeflow/router/dist/codex-qa-benchmarks.d.ts +0 -91
- package/plugins/freeflow/router/dist/codex-qa-benchmarks.js +0 -461
- package/plugins/freeflow/router/dist/command-benchmarks.d.ts +0 -128
- package/plugins/freeflow/router/dist/command-benchmarks.js +0 -652
- package/plugins/freeflow/router/dist/config.d.ts +0 -22
- package/plugins/freeflow/router/dist/config.js +0 -114
- package/plugins/freeflow/router/dist/evidence-range-selector.d.ts +0 -22
- package/plugins/freeflow/router/dist/evidence-range-selector.js +0 -180
- package/plugins/freeflow/router/dist/evidence-search.d.ts +0 -25
- package/plugins/freeflow/router/dist/evidence-search.js +0 -450
- package/plugins/freeflow/router/dist/evidence.js +0 -196
- package/plugins/freeflow/router/dist/experimental-local-index.d.ts +0 -1
- package/plugins/freeflow/router/dist/experimental-local-index.js +0 -1
- package/plugins/freeflow/router/dist/experiments/local-index.d.ts +0 -58
- package/plugins/freeflow/router/dist/experiments/local-index.js +0 -562
- package/plugins/freeflow/router/dist/index-benchmarks.d.ts +0 -84
- package/plugins/freeflow/router/dist/index-benchmarks.js +0 -458
- package/plugins/freeflow/router/dist/index.d.ts +0 -12
- package/plugins/freeflow/router/dist/index.js +0 -12
- package/plugins/freeflow/router/dist/line-ranges.d.ts +0 -22
- package/plugins/freeflow/router/dist/line-ranges.js +0 -22
- package/plugins/freeflow/router/dist/parsers.d.ts +0 -16
- package/plugins/freeflow/router/dist/parsers.js +0 -473
- package/plugins/freeflow/router/dist/repo-traversal.js +0 -242
- package/plugins/freeflow/router/dist/retrieve.d.ts +0 -33
- package/plugins/freeflow/router/dist/retrieve.js +0 -855
- package/plugins/freeflow/router/dist/router-contract.js +0 -54
- package/plugins/freeflow/router/dist/run.d.ts +0 -26
- package/plugins/freeflow/router/dist/run.js +0 -356
- package/plugins/freeflow/router/dist/schema.js +0 -354
- package/plugins/freeflow/router/dist/types.d.ts +0 -234
- package/plugins/freeflow/router/dist/types.js +0 -9
- package/plugins/freeflow/router/dist/vault.d.ts +0 -80
- package/plugins/freeflow/router/dist/vault.js +0 -484
- package/plugins/freeflow/skills/bypass/SKILL.md +0 -68
- package/plugins/freeflow/skills/commit-work/SKILL.md +0 -98
- package/plugins/freeflow/skills/commit-work/references/staging-decisions.md +0 -51
- package/plugins/freeflow/skills/diagnose-failure/SKILL.md +0 -95
- package/plugins/freeflow/skills/diagnose-failure/references/feedback-loop-catalog.md +0 -25
- package/plugins/freeflow/skills/diagnose-failure/references/flaky-and-performance.md +0 -31
- package/plugins/freeflow/skills/evaluate-skill/SKILL.md +0 -96
- package/plugins/freeflow/skills/evaluate-skill/references/eval-patterns.md +0 -41
- package/plugins/freeflow/skills/evaluate-skill/references/grading-priority.md +0 -33
- package/plugins/freeflow/skills/execute-plan/SKILL.md +0 -132
- package/plugins/freeflow/skills/execute-plan/references/execution-map.md +0 -122
- package/plugins/freeflow/skills/handoff/SKILL.md +0 -66
- package/plugins/freeflow/skills/handoff/references/templates.md +0 -64
- package/plugins/freeflow/skills/interview-gate/SKILL.md +0 -90
- package/plugins/freeflow/skills/mode-contract/SKILL.md +0 -79
- package/plugins/freeflow/skills/output-router/SKILL.md +0 -69
- package/plugins/freeflow/skills/output-router/references/safety-policy.md +0 -33
- package/plugins/freeflow/skills/research/ARTIFACT-DESTINATIONS.md +0 -58
- package/plugins/freeflow/skills/research/CHECKPOINTS.md +0 -74
- package/plugins/freeflow/skills/research/LANGUAGE.md +0 -61
- package/plugins/freeflow/skills/research/SKILL.md +0 -128
- package/plugins/freeflow/skills/review-artifact/SKILL.md +0 -115
- package/plugins/freeflow/skills/review-artifact/references/reviewer-prompt.md +0 -56
- package/plugins/freeflow/skills/review-work/SKILL.md +0 -96
- package/plugins/freeflow/skills/review-work/references/reviewer-prompt.md +0 -97
- package/plugins/freeflow/skills/setup-freeflow/SKILL.md +0 -94
- package/plugins/freeflow/skills/setup-freeflow/references/activation-contract.md +0 -99
- package/plugins/freeflow/skills/setup-freeflow/references/host-setup.md +0 -35
- package/plugins/freeflow/skills/setup-freeflow/references/output-router-setup.md +0 -52
- package/plugins/freeflow/skills/verify-work/SKILL.md +0 -62
- package/plugins/freeflow/skills/workflow/SKILL.md +0 -95
- package/plugins/freeflow/skills/workflow/references/workflow-map.md +0 -102
- package/plugins/freeflow/skills/write-plan/SKILL.md +0 -88
- package/plugins/freeflow/skills/write-plan/references/plan-shapes.md +0 -70
- package/plugins/freeflow/skills/write-skill/SKILL.md +0 -88
- package/plugins/freeflow/skills/write-spec/SKILL.md +0 -90
- package/plugins/freeflow/skills/write-spec/references/artifact-standards.md +0 -67
- package/plugins/freeflow/skills/write-spec/references/spec-shapes.md +0 -69
- /package/{plugins/freeflow/assets → assets}/freeflow-plugin-icon-transparent.png +0 -0
- /package/{plugins/freeflow/hooks → hooks}/hooks.json +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { initSkill, inspectSkill, SkillAuthorError, validateSkill } from "./lib/skill-author.mjs";
|
|
4
|
+
|
|
5
|
+
const commands = new Set(["init", "validate", "inspect"]);
|
|
6
|
+
|
|
7
|
+
function printUsage() {
|
|
8
|
+
process.stdout.write(
|
|
9
|
+
`Usage: skill-author <init|validate|inspect> [options]\n\nCommands:\n init <directory> --name <name> --description <text>\n init creates a minimal SKILL.md and refuses to overwrite one\n validate <directory> [--package-root <directory>]\n validate checks structure and recursive resource containment\n inspect <directory> [--package-root <directory>]\n inspect reports factual inventory plus validation findings\n\nOutput:\n Commands emit JSON. Invalid structure still emits JSON and exits nonzero.\n Command errors emit structured error JSON.\n Package root defaults to the nearest package.json ancestor, then the skill parent.\n\nFrontmatter:\n Validation supports flat plain-string or JSON-compatible double-quoted scalars.\n Double-quote values when punctuation, numbers, booleans, or null-like text could be ambiguous.\n`,
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function fail(code, message, exitCode = 2) {
|
|
14
|
+
throw new SkillAuthorError(code, message, exitCode);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function parseOptions(args, allowedOptions) {
|
|
18
|
+
const positionals = [];
|
|
19
|
+
const options = {};
|
|
20
|
+
|
|
21
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
22
|
+
const argument = args[index];
|
|
23
|
+
if (!argument.startsWith("--")) {
|
|
24
|
+
positionals.push(argument);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (!allowedOptions.has(argument)) {
|
|
29
|
+
fail("unknown-option", `Unknown option: ${argument}`);
|
|
30
|
+
}
|
|
31
|
+
if (Object.hasOwn(options, argument)) {
|
|
32
|
+
fail("duplicate-option", `Option may be supplied once: ${argument}`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const value = args[index + 1];
|
|
36
|
+
if (value === undefined || value.startsWith("--")) {
|
|
37
|
+
fail("missing-option-value", `Option requires a value: ${argument}`);
|
|
38
|
+
}
|
|
39
|
+
options[argument] = value;
|
|
40
|
+
index += 1;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return { positionals, options };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function run(command, args) {
|
|
47
|
+
if (command === "init") {
|
|
48
|
+
const { positionals, options } = parseOptions(args, new Set(["--name", "--description"]));
|
|
49
|
+
if (positionals.length !== 1) {
|
|
50
|
+
fail("invalid-arguments", "init requires exactly one skill directory");
|
|
51
|
+
}
|
|
52
|
+
if (!Object.hasOwn(options, "--name") || !Object.hasOwn(options, "--description")) {
|
|
53
|
+
fail("invalid-arguments", "init requires --name and --description");
|
|
54
|
+
}
|
|
55
|
+
return initSkill({
|
|
56
|
+
directory: positionals[0],
|
|
57
|
+
name: options["--name"],
|
|
58
|
+
description: options["--description"],
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (command === "validate" || command === "inspect") {
|
|
63
|
+
const { positionals, options } = parseOptions(args, new Set(["--package-root"]));
|
|
64
|
+
if (positionals.length !== 1) {
|
|
65
|
+
fail("invalid-arguments", `${command} requires exactly one skill directory`);
|
|
66
|
+
}
|
|
67
|
+
const input = { directory: positionals[0], packageRoot: options["--package-root"] };
|
|
68
|
+
return command === "validate" ? validateSkill(input) : inspectSkill(input);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
fail("unknown-command", `Unknown command: ${command}`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async function main() {
|
|
75
|
+
const [command, ...args] = process.argv.slice(2);
|
|
76
|
+
|
|
77
|
+
if (!command || command === "--help" || command === "-h") {
|
|
78
|
+
printUsage();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (!commands.has(command)) {
|
|
82
|
+
fail("unknown-command", `Unknown command: ${command}`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const result = await run(command, args);
|
|
86
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
87
|
+
if (result.status === "invalid") process.exitCode = 1;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
try {
|
|
91
|
+
await main();
|
|
92
|
+
} catch (error) {
|
|
93
|
+
const knownError = error instanceof SkillAuthorError;
|
|
94
|
+
const result = {
|
|
95
|
+
command: process.argv[2] ?? null,
|
|
96
|
+
status: "error",
|
|
97
|
+
error: {
|
|
98
|
+
code: knownError ? error.code : "unexpected-error",
|
|
99
|
+
message: knownError ? error.message : "Skill Author failed unexpectedly",
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
process.stderr.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
103
|
+
process.exitCode = knownError ? error.exitCode : 1;
|
|
104
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-spec
|
|
3
|
+
description: Use when writing or revising a spec, PRD, issue, API contract, technical design, migration contract, decision artifact, or similar durable document.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Write Spec
|
|
7
|
+
|
|
8
|
+
Turn clear intent and source evidence into a durable artifact that later work can rely on.
|
|
9
|
+
|
|
10
|
+
A spec may be broad, deep, or both. Its shape follows its intended use. It is not a transcript, implementation plan, Working Record, or polished substitute for an unresolved decision.
|
|
11
|
+
|
|
12
|
+
## Identify The Artifact
|
|
13
|
+
|
|
14
|
+
Before writing, establish:
|
|
15
|
+
|
|
16
|
+
- artifact type and intended use;
|
|
17
|
+
- audience or future action it must support;
|
|
18
|
+
- accepted intent, scope, and source context;
|
|
19
|
+
- destination and repository convention;
|
|
20
|
+
- unresolved questions that belong in the artifact.
|
|
21
|
+
|
|
22
|
+
If the user is asking about an artifact, answer instead of writing one. If direction or alternatives still need shared understanding, read [Discuss](../discuss/SKILL.md). If one user-owned choice or source conflict blocks writing, read [Decision Gate](../decision-gate/SKILL.md).
|
|
23
|
+
|
|
24
|
+
Do not repeat discussion that already settled the artifact's intent.
|
|
25
|
+
|
|
26
|
+
## Write From Source
|
|
27
|
+
|
|
28
|
+
Inspect the sources that define the artifact:
|
|
29
|
+
|
|
30
|
+
- explicit user decisions and current shared understanding;
|
|
31
|
+
- [Track Work](../track-work/SKILL.md), which owns the living Working Record for current state, slices, task-local decisions, and evidence, when one exists;
|
|
32
|
+
- relevant code, tests, requirements, policies, ADRs, and established behavior;
|
|
33
|
+
- existing artifacts that this one revises or depends on;
|
|
34
|
+
- current primary sources when an external contract or version matters.
|
|
35
|
+
|
|
36
|
+
Use a Working Record as task memory, not authority over contradictory user decisions or live evidence. Distinguish accepted facts and decisions from hypotheses, proposals, and unresolved questions.
|
|
37
|
+
|
|
38
|
+
Do not infer goals or requirements from adjacent repository details merely because they are available.
|
|
39
|
+
|
|
40
|
+
## Shape The Artifact By Its Job
|
|
41
|
+
|
|
42
|
+
Read [spec shapes](references/spec-shapes.md) and use only the sections that help the artifact perform its intended job. Read [artifact standards](references/artifact-standards.md) when choosing a durable destination, identity, status, or revision shape. Read [decision records](references/decision-records.md) when the artifact records a durable decision.
|
|
43
|
+
|
|
44
|
+
Include, when relevant:
|
|
45
|
+
|
|
46
|
+
- purpose, context, scope, and accepted content;
|
|
47
|
+
- behavior, design, interfaces, constraints, and consequential failure semantics required by the artifact;
|
|
48
|
+
- acceptance and suitable evidence;
|
|
49
|
+
- accepted decisions, clearly marked uncertainty, and source references.
|
|
50
|
+
|
|
51
|
+
A technical design may go deeply into architecture, interfaces, ownership, state, and failure behavior. Do not remove useful depth merely to keep the artifact short.
|
|
52
|
+
|
|
53
|
+
Do not turn the artifact into ordered execution phases, task status, slice history, or a volatile file inventory. Ordered execution belongs in a Plan; living task state belongs in the Working Record.
|
|
54
|
+
|
|
55
|
+
## Stop Before Inventing Intent
|
|
56
|
+
|
|
57
|
+
Stop when writing would:
|
|
58
|
+
|
|
59
|
+
- invent or silently change product behavior, scope, requirements, public interfaces, compatibility, sensitive policy, failure semantics, or hard-to-reverse design;
|
|
60
|
+
- override code, tests, docs, policies, ADRs, or established behavior without resolving the conflict;
|
|
61
|
+
- present a tentative proposal or assumption as accepted;
|
|
62
|
+
- hide an owner decision behind `TBD`, polished prose, or an unmarked open question;
|
|
63
|
+
- reduce agreed scope into MVP, v1/v2, roadmap, or later-version framing without approval;
|
|
64
|
+
- create a destination or artifact convention whose authority or durability matters without resolving it.
|
|
65
|
+
|
|
66
|
+
Ask only for the decision that prevents the artifact from serving its intended use. Otherwise represent uncertainty honestly and continue.
|
|
67
|
+
|
|
68
|
+
## Revise Deliberately
|
|
69
|
+
|
|
70
|
+
When revising an artifact:
|
|
71
|
+
|
|
72
|
+
- preserve accepted content that still holds;
|
|
73
|
+
- update only what new intent or evidence changed;
|
|
74
|
+
- keep superseded decisions and material rationale recoverable through the owning decision record, change history, or version control.
|
|
75
|
+
|
|
76
|
+
Do not rewrite history or synchronize unaffected artifacts. A clerical correction does not reopen settled intent; a material revision changes the artifact's review boundary and may affect its dependencies.
|
|
77
|
+
|
|
78
|
+
## Self-Check
|
|
79
|
+
|
|
80
|
+
Silently review the artifact before routing it onward:
|
|
81
|
+
|
|
82
|
+
- Does it perform its stated job?
|
|
83
|
+
- Does it agree with accepted intent and source evidence?
|
|
84
|
+
- Can a future reader distinguish required, tentative, open, deferred, and superseded information?
|
|
85
|
+
- Is it broad and deep enough for its intended use without taking over another artifact's job?
|
|
86
|
+
- Are consequential claims, failure behavior, and acceptance supported or explicitly unresolved?
|
|
87
|
+
- Did writing introduce any decision the user did not make?
|
|
88
|
+
|
|
89
|
+
Correct clear local issues directly. Surface only unresolved material issues that prevent the artifact from being fit for use.
|
|
90
|
+
|
|
91
|
+
## Review The Artifact
|
|
92
|
+
|
|
93
|
+
After writing or materially revising the artifact, route it to [Review Artifact](../review-artifact/SKILL.md) before treating it as fit for its intended use.
|
|
94
|
+
|
|
95
|
+
Provide the reviewer with the complete artifact, its intended use, source truth, dependencies, and known evidence gaps. Review Artifact owns review items, judgment, adjudication, and the review cycle.
|
|
96
|
+
|
|
97
|
+
## Report
|
|
98
|
+
|
|
99
|
+
State:
|
|
100
|
+
|
|
101
|
+
- artifact path, type, and intended use;
|
|
102
|
+
- source context used;
|
|
103
|
+
- material unresolved questions or blocked decisions;
|
|
104
|
+
- artifact-review status.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Artifact Standards
|
|
2
|
+
|
|
3
|
+
Read this when a durable spec-like artifact needs a destination, identity, status, source trail, or revision history. Follow established repository conventions before introducing these defaults.
|
|
4
|
+
|
|
5
|
+
## Choose The Destination
|
|
6
|
+
|
|
7
|
+
Place the artifact where its intended readers and authority belong.
|
|
8
|
+
|
|
9
|
+
- Use an established product, design, API, issue, migration, policy, or architecture location when one exists.
|
|
10
|
+
- For a task-local artifact, read [Track Work](../../track-work/SKILL.md) and use the `specs/` location it owns unless the artifact should become canonical repo documentation.
|
|
11
|
+
- Use the repository's issue tracker when the requested artifact is an issue and that system is available and intended.
|
|
12
|
+
- Ask before choosing between task-local memory and canonical repository documentation when the distinction changes authority, review, or longevity.
|
|
13
|
+
|
|
14
|
+
Do not create a new top-level docs convention for one artifact without a real need.
|
|
15
|
+
|
|
16
|
+
## Give Durable Artifacts Identity
|
|
17
|
+
|
|
18
|
+
Use the repository's required frontmatter or metadata format. When no convention exists and identity will help future readers, use a compact title and header:
|
|
19
|
+
|
|
20
|
+
```md
|
|
21
|
+
# Team Invitations API
|
|
22
|
+
|
|
23
|
+
> **Doc ID:** SPEC-001-team-invitations-api
|
|
24
|
+
> **Type:** API Contract
|
|
25
|
+
> **Status:** Draft
|
|
26
|
+
> **Owner:** User
|
|
27
|
+
> **Source:** Working Record task-004 and accepted product decisions
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Add only useful fields:
|
|
31
|
+
|
|
32
|
+
- **Doc ID:** stable identifier when links, review history, or supersession need one.
|
|
33
|
+
- **Type:** the artifact's actual job, such as PRD, Issue, Technical Design, API Contract, Migration Contract, or Decision.
|
|
34
|
+
- **Status:** current artifact state under the repository or owner's vocabulary.
|
|
35
|
+
- **Owner:** person or role with authority over the artifact's intent.
|
|
36
|
+
- **Source:** compact pointers to accepted context and evidence.
|
|
37
|
+
- **Date / Last Updated:** only when a reliable date matters.
|
|
38
|
+
- **Supersedes / Superseded by:** when readers must follow artifact lineage.
|
|
39
|
+
|
|
40
|
+
Do not invent an owner, approval, date, or authority merely to complete a header. Writing or reviewing an artifact does not make it `Approved`.
|
|
41
|
+
|
|
42
|
+
## Represent Status Honestly
|
|
43
|
+
|
|
44
|
+
Use the repository's statuses when available. Otherwise keep the vocabulary small, for example:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
Draft | Reviewed | Approved | Rejected | Superseded
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The appropriate statuses depend on the artifact type. An issue, policy, ADR, and API contract need not share one lifecycle.
|
|
51
|
+
|
|
52
|
+
Status communicates artifact state; it does not replace review evidence or user authority.
|
|
53
|
+
|
|
54
|
+
## Preserve Sources Without Copying Them
|
|
55
|
+
|
|
56
|
+
Link to stable sources such as:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
file:<path>#<section>
|
|
60
|
+
working-record:<task>/record.md#<section>
|
|
61
|
+
commit:<sha>
|
|
62
|
+
issue:<id>
|
|
63
|
+
output:<output-id>
|
|
64
|
+
session:<session-id>/turn:<turn-id>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Use identifiers that actually exist. Prefer links and concise quotations over copied inventories, logs, diffs, or transcripts.
|
|
68
|
+
|
|
69
|
+
A source trail should let a future reader recover why the artifact says what it says. It does not require preserving every conversation turn.
|
|
70
|
+
|
|
71
|
+
## Revise Without Rewriting History
|
|
72
|
+
|
|
73
|
+
Do not add a changelog on first creation unless repository policy requires one.
|
|
74
|
+
|
|
75
|
+
For material revisions:
|
|
76
|
+
|
|
77
|
+
- update the artifact's current content and status honestly;
|
|
78
|
+
- preserve consequential rationale through a change note, decision record, supersession link, or version control;
|
|
79
|
+
- record only changes that help readers understand current intent or avoid repeating rejected work;
|
|
80
|
+
- do not turn the changelog into execution status or transcript history.
|
|
81
|
+
|
|
82
|
+
Use the Working Record for task progress, slice history, and current execution state.
|
|
83
|
+
|
|
84
|
+
## Keep The Artifact Usable
|
|
85
|
+
|
|
86
|
+
A durable artifact should be identifiable, source-backed, and understandable without the original conversation. It should contain enough depth for its intended use while avoiding information owned by a Plan, Working Record, Handoff, or another canonical document.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Decision Records
|
|
2
|
+
|
|
3
|
+
Read this when writing or revising an artifact whose primary job is to preserve a decision and its rationale.
|
|
4
|
+
|
|
5
|
+
## Choose The Right Record
|
|
6
|
+
|
|
7
|
+
Use the smallest record that preserves the decision where future work will look for it.
|
|
8
|
+
|
|
9
|
+
- **Working Record decision:** task-local choice that affects later slices or current task direction. [Track Work](../../track-work/SKILL.md) owns its `D-` ID, state, rationale, and supersession.
|
|
10
|
+
- **Decision note:** durable product, policy, scope, compatibility, or technical choice that needs a separate document but does not require the repository's ADR process.
|
|
11
|
+
- **ADR:** surprising, cross-cutting, or hard-to-reverse architecture or operational decision whose alternatives and consequences must remain durable.
|
|
12
|
+
- **Owning spec:** keep a decision inside a PRD, API contract, technical design, or other spec when that artifact clearly owns the decision and a separate record would only duplicate it.
|
|
13
|
+
|
|
14
|
+
Do not create a separate decision artifact merely because a decision occurred.
|
|
15
|
+
|
|
16
|
+
## When A Separate Decision Artifact Helps
|
|
17
|
+
|
|
18
|
+
A separate record is useful when the decision is:
|
|
19
|
+
|
|
20
|
+
- hard or expensive to reverse;
|
|
21
|
+
- surprising relative to repository or domain practice;
|
|
22
|
+
- a real tradeoff among materially different paths;
|
|
23
|
+
- cross-cutting across systems, teams, or operational boundaries;
|
|
24
|
+
- likely to be challenged again without its original rationale;
|
|
25
|
+
- intentionally rejected or superseded in a way future work must understand;
|
|
26
|
+
- explicitly requested as a durable decision artifact.
|
|
27
|
+
|
|
28
|
+
Ordinary reversible implementation choices, task progress, temporary constraints, assumptions, and unanswered questions do not belong in a durable decision record.
|
|
29
|
+
|
|
30
|
+
## Write The Decision Clearly
|
|
31
|
+
|
|
32
|
+
Use the repository's ADR or decision format when one exists. Otherwise adapt this shape:
|
|
33
|
+
|
|
34
|
+
```md
|
|
35
|
+
# Decision: <title>
|
|
36
|
+
|
|
37
|
+
> **Doc ID:** DECISION-<stable-id>
|
|
38
|
+
> **Type:** Decision | ADR
|
|
39
|
+
> **Status:** Proposed | Accepted | Rejected | Superseded
|
|
40
|
+
> **Owner:** <decision owner>
|
|
41
|
+
> **Source:** <accepted context and evidence>
|
|
42
|
+
|
|
43
|
+
## Context
|
|
44
|
+
<Decision question, constraints, and evidence.>
|
|
45
|
+
|
|
46
|
+
## Decision
|
|
47
|
+
<Chosen path and exact scope.>
|
|
48
|
+
|
|
49
|
+
## Alternatives
|
|
50
|
+
<Only materially different alternatives and why they were not chosen.>
|
|
51
|
+
|
|
52
|
+
## Consequences
|
|
53
|
+
<Benefits, costs, risks, compatibility, operations, and follow-up obligations.>
|
|
54
|
+
|
|
55
|
+
## Revisit Or Supersession
|
|
56
|
+
<Evidence, conditions, or later decision that would reopen or replace it.>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
State proposals as proposals. Do not write an assumption, reviewer suggestion, or agent preference as an accepted decision.
|
|
60
|
+
|
|
61
|
+
## Preserve Authority And History
|
|
62
|
+
|
|
63
|
+
Name who made or owns the decision when that matters. A reviewer can challenge a decision but cannot silently replace it. A Working Record, Plan, or Handoff cannot supersede a durable decision merely by describing a different path.
|
|
64
|
+
|
|
65
|
+
When a decision changes:
|
|
66
|
+
|
|
67
|
+
- preserve the old record as `Superseded` rather than rewriting it to match the present;
|
|
68
|
+
- create or identify the replacement decision;
|
|
69
|
+
- link both directions;
|
|
70
|
+
- update owning specs, plans, or policies whose current content depends on it;
|
|
71
|
+
- preserve the evidence that justified the change.
|
|
72
|
+
|
|
73
|
+
Live evidence may show that implementation violates a decision or that the decision is no longer viable. Use Decision Gate when resolving that conflict requires user authority.
|
|
74
|
+
|
|
75
|
+
## Avoid Duplication
|
|
76
|
+
|
|
77
|
+
Reference the decision from dependent artifacts instead of copying its full rationale. Keep task-local decisions in the Working Record unless they become durable beyond the task.
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Spec Shapes
|
|
2
|
+
|
|
3
|
+
Read this when choosing the structure of a spec-like artifact. These are composable shapes, not mandatory templates. Use only the sections the artifact needs for its intended use.
|
|
4
|
+
|
|
5
|
+
## Product Spec Or PRD
|
|
6
|
+
|
|
7
|
+
Use for a product, capability, workflow, or user-facing outcome.
|
|
8
|
+
|
|
9
|
+
Possible sections:
|
|
10
|
+
|
|
11
|
+
- problem and motivation;
|
|
12
|
+
- intended outcome;
|
|
13
|
+
- users or actors;
|
|
14
|
+
- scope and non-goals;
|
|
15
|
+
- user journeys or observable behavior;
|
|
16
|
+
- requirements and constraints;
|
|
17
|
+
- product, policy, or domain decisions;
|
|
18
|
+
- edge and failure behavior;
|
|
19
|
+
- acceptance criteria;
|
|
20
|
+
- unresolved questions and source evidence.
|
|
21
|
+
|
|
22
|
+
Do not turn a PRD into an implementation task list.
|
|
23
|
+
|
|
24
|
+
## Issue Or Problem Specification
|
|
25
|
+
|
|
26
|
+
Use when a durable issue must define a problem clearly enough to investigate, fix, or accept.
|
|
27
|
+
|
|
28
|
+
Possible sections:
|
|
29
|
+
|
|
30
|
+
- observed problem or requested change;
|
|
31
|
+
- affected behavior and users;
|
|
32
|
+
- current evidence, reproduction, or examples;
|
|
33
|
+
- expected behavior;
|
|
34
|
+
- scope and non-goals;
|
|
35
|
+
- severity, constraints, and known impact;
|
|
36
|
+
- acceptance criteria;
|
|
37
|
+
- unresolved facts or owner decisions.
|
|
38
|
+
|
|
39
|
+
Do not present a guessed cause or requested patch as established fact. A fix sequence belongs in a Plan after the cause and path are sufficiently understood.
|
|
40
|
+
|
|
41
|
+
## Requirements Or Behavioral Specification
|
|
42
|
+
|
|
43
|
+
Use when observable behavior and constraints matter more than implementation structure.
|
|
44
|
+
|
|
45
|
+
Possible sections:
|
|
46
|
+
|
|
47
|
+
- actors and preconditions;
|
|
48
|
+
- required behavior and invariants;
|
|
49
|
+
- inputs, outputs, states, and transitions;
|
|
50
|
+
- errors, rejection, degradation, and recovery;
|
|
51
|
+
- forbidden outcomes;
|
|
52
|
+
- compatibility and data guarantees;
|
|
53
|
+
- acceptance examples and evidence.
|
|
54
|
+
|
|
55
|
+
Express behavior precisely without copying implementation logic into the contract.
|
|
56
|
+
|
|
57
|
+
## Technical Design
|
|
58
|
+
|
|
59
|
+
Use when the artifact must define an accepted technical direction in depth.
|
|
60
|
+
|
|
61
|
+
Possible sections:
|
|
62
|
+
|
|
63
|
+
- problem and current evidence;
|
|
64
|
+
- goals and non-goals;
|
|
65
|
+
- proposed architecture or design;
|
|
66
|
+
- module, interface, state, and ownership boundaries;
|
|
67
|
+
- data flow and persistence;
|
|
68
|
+
- failure contract and recovery;
|
|
69
|
+
- security, privacy, performance, and operational constraints;
|
|
70
|
+
- alternatives and rationale;
|
|
71
|
+
- compatibility or migration impact;
|
|
72
|
+
- risks, validation, and unresolved design questions.
|
|
73
|
+
|
|
74
|
+
A technical design may contain implementation detail when that detail defines the accepted design. Ordered phases and execution slices still belong in a Plan.
|
|
75
|
+
|
|
76
|
+
## API, Protocol, Or Interface Contract
|
|
77
|
+
|
|
78
|
+
Use for a public or internal interface that callers will depend on.
|
|
79
|
+
|
|
80
|
+
Possible sections:
|
|
81
|
+
|
|
82
|
+
- interface, endpoint, command, event, or protocol name;
|
|
83
|
+
- callers, roles, authentication, and permissions;
|
|
84
|
+
- requests, inputs, responses, outputs, and schemas;
|
|
85
|
+
- invariants and ordering;
|
|
86
|
+
- errors and failure semantics;
|
|
87
|
+
- idempotency, retries, versioning, and compatibility;
|
|
88
|
+
- privacy, billing, data-safety, and operational constraints;
|
|
89
|
+
- examples and acceptance evidence.
|
|
90
|
+
|
|
91
|
+
Stop rather than inventing caller-visible behavior or compatibility promises.
|
|
92
|
+
|
|
93
|
+
## Migration Contract
|
|
94
|
+
|
|
95
|
+
Use when current and target states, compatibility, and safety obligations must be durable before execution is planned.
|
|
96
|
+
|
|
97
|
+
Possible sections:
|
|
98
|
+
|
|
99
|
+
- current and target contracts;
|
|
100
|
+
- affected consumers, data, traffic, or configuration;
|
|
101
|
+
- compatibility and support commitments;
|
|
102
|
+
- data and state invariants;
|
|
103
|
+
- cutover, rollback, or forward-recovery requirements;
|
|
104
|
+
- observation and removal conditions;
|
|
105
|
+
- consequential failure behavior;
|
|
106
|
+
- acceptance and completion evidence;
|
|
107
|
+
- decisions still required.
|
|
108
|
+
|
|
109
|
+
Include ordering only when it is part of the accepted migration contract. Detailed execution phases belong in a migration or implementation Plan.
|
|
110
|
+
|
|
111
|
+
## Decision Artifact
|
|
112
|
+
|
|
113
|
+
Use when a durable choice and its rationale are the artifact's primary job. Read [decision records](decision-records.md) before choosing a task-local decision note, durable decision record, or ADR.
|
|
114
|
+
|
|
115
|
+
Possible sections:
|
|
116
|
+
|
|
117
|
+
- context and decision question;
|
|
118
|
+
- decision and owner;
|
|
119
|
+
- materially different alternatives;
|
|
120
|
+
- rationale and evidence;
|
|
121
|
+
- consequences and constraints;
|
|
122
|
+
- revisit or supersession conditions.
|
|
123
|
+
|
|
124
|
+
## Combine Carefully
|
|
125
|
+
|
|
126
|
+
An artifact may combine shapes when it genuinely owns both jobs, such as a technical design containing an API contract. Keep each responsibility legible.
|
|
127
|
+
|
|
128
|
+
Do not create an omnibus artifact merely to avoid links. Separate artifacts when they have different owners, statuses, audiences, lifecycles, or review boundaries.
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"nativeSlashHandlers": false,
|
|
3
|
-
"modeCommands": [
|
|
4
|
-
{
|
|
5
|
-
"command": "/workflow conversation",
|
|
6
|
-
"routesTo": "mode-contract"
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
"command": "/workflow workflow",
|
|
10
|
-
"routesTo": "mode-contract"
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"command": "/workflow strict-workflow",
|
|
14
|
-
"routesTo": "mode-contract"
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"command": "/workflow reset",
|
|
18
|
-
"routesTo": "mode-contract"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"directSkillCalls": [
|
|
22
|
-
{
|
|
23
|
-
"command": "/research",
|
|
24
|
-
"skill": "research"
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"command": "/write-spec",
|
|
28
|
-
"skill": "write-spec"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"command": "/review-artifact",
|
|
32
|
-
"skill": "review-artifact"
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"command": "/write-plan",
|
|
36
|
-
"skill": "write-plan"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"command": "/execute-plan",
|
|
40
|
-
"skill": "execute-plan"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"command": "/diagnose-failure",
|
|
44
|
-
"skill": "diagnose-failure"
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"command": "/verify-work",
|
|
48
|
-
"skill": "verify-work"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"command": "/review-work",
|
|
52
|
-
"skill": "review-work"
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"command": "/commit-work",
|
|
56
|
-
"skill": "commit-work"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"command": "/handoff",
|
|
60
|
-
"skill": "handoff"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"command": "/bypass",
|
|
64
|
-
"skill": "bypass"
|
|
65
|
-
}
|
|
66
|
-
],
|
|
67
|
-
"developerSkillCalls": [
|
|
68
|
-
{
|
|
69
|
-
"command": "/write-skill",
|
|
70
|
-
"skill": "write-skill"
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"command": "/evaluate-skill",
|
|
74
|
-
"skill": "evaluate-skill"
|
|
75
|
-
}
|
|
76
|
-
]
|
|
77
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# Freeflow Docs
|
|
2
|
-
|
|
3
|
-
These docs describe the public plugin behavior. Historical research stays in root `docs/`; eval sources and reports live under `plugins/freeflow/evals/`.
|
|
4
|
-
|
|
5
|
-
After installing Freeflow, run setup in each repo where you want it active:
|
|
6
|
-
|
|
7
|
-
```text
|
|
8
|
-
/setup-freeflow
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Setup creates activation/config files only.
|
|
12
|
-
|
|
13
|
-
In Codex, open the hooks screen after install:
|
|
14
|
-
|
|
15
|
-
```text
|
|
16
|
-
/hooks
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Press `t` to trust/enable the Freeflow `SessionStart` hook when Codex marks it as needing review. Once enabled, plugin-bundled hooks load workflow and interview-gate context at session start, resume, clear, and compact.
|
|
20
|
-
|
|
21
|
-
In Pi, install Freeflow as a Pi package from npm:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
pi install npm:@hassangameryt/freeflow
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
Or install directly from GitHub:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
pi install git:github.com/hassan-mohiddin/freeflow
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
The package exposes `plugins/freeflow/skills/` and `plugins/freeflow/pi-extension/index.js`. The Pi extension registers direct Freeflow commands, keeps `/workflow` mode changes scoped to the Pi session, refreshes workflow, interview-gate, and output-router context on session start and compact, and injects that context before agent turns. Output-router context includes its safety-policy reference. The extension does not enforce policy, block tools, grant permissions, or create repo-local hooks.
|
|
34
|
-
|
|
35
|
-
- [Workflow](workflow.md): modes, entry points, loops, and the compact workflow map.
|
|
36
|
-
- [Skills](skills.md): shipped skills and what each one is for.
|
|
37
|
-
- [Architecture](architecture.md): package layout, runtime boundary, context hooks, and progressive disclosure model.
|
|
38
|
-
- [Output Router](output-router.md): compact guide to routed retrieval, command output routing, vault recovery, and config.
|
|
39
|
-
- [Release evidence](release-evidence.md): current release evidence and deferred checks.
|
|
40
|
-
- [ADRs](adr/README.md): durable release decisions.
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# ADR 0001: Three Modes
|
|
2
|
-
|
|
3
|
-
## Status
|
|
4
|
-
|
|
5
|
-
Accepted.
|
|
6
|
-
|
|
7
|
-
## Decision
|
|
8
|
-
|
|
9
|
-
Freeflow has exactly three modes:
|
|
10
|
-
|
|
11
|
-
- `conversation`
|
|
12
|
-
- `workflow`
|
|
13
|
-
- `strict-workflow`
|
|
14
|
-
|
|
15
|
-
## Rationale
|
|
16
|
-
|
|
17
|
-
Three modes give users explicit process control without creating a mode for every task shape.
|
|
18
|
-
|
|
19
|
-
`conversation` removes workflow pressure for questions and discussion.
|
|
20
|
-
|
|
21
|
-
`workflow` is the default for consequential work.
|
|
22
|
-
|
|
23
|
-
`strict-workflow` exists for high-risk or hard-to-reverse work.
|
|
24
|
-
|
|
25
|
-
## Consequences
|
|
26
|
-
|
|
27
|
-
Freeflow must scale process inside these modes instead of adding new modes. Host permission modes remain separate from Freeflow workflow modes.
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# ADR 0002: Evals Before Enforcement Hooks
|
|
2
|
-
|
|
3
|
-
## Status
|
|
4
|
-
|
|
5
|
-
Accepted.
|
|
6
|
-
|
|
7
|
-
## Decision
|
|
8
|
-
|
|
9
|
-
Freeflow ships plugin-bundled context-loading runtime: Codex/Claude hooks and a Pi extension that load existing workflow and interview-gate context. It still ships without enforcement hooks or CLI enforcement. Behavior must first be proven with baseline-vs-with-skill evals before mechanical enforcement is added.
|
|
10
|
-
|
|
11
|
-
## Rationale
|
|
12
|
-
|
|
13
|
-
Context-loading runtime addresses a measured lifecycle gap: workflow and interview-gate context may not be present at session start. The setup skill handles the same-session setup case by reading runtime context after successful verification. Enforcement hooks can prevent expensive mistakes, but early enforcement machinery can hide weak skill wording and turn the package into brittle workflow infrastructure.
|
|
14
|
-
|
|
15
|
-
## Consequences
|
|
16
|
-
|
|
17
|
-
Native enforcement remains future work. Enforcement hooks should be added only when a repeated failure is concrete, deterministic, and not solved by concise skill wording.
|