devlyn-cli 1.15.0 → 2.1.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.md +104 -0
- package/CLAUDE.md +135 -21
- package/README.md +43 -125
- package/benchmark/auto-resolve/BENCHMARK-DESIGN.md +272 -0
- package/benchmark/auto-resolve/README.md +114 -0
- package/benchmark/auto-resolve/RUBRIC.md +162 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/NOTES.md +30 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/expected.json +68 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/spec.md +45 -0
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.txt +8 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/NOTES.md +54 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json +170 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json +84 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/metadata.json +21 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-fail.json +214 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-pass.json +223 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/setup.sh +5 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md +56 -0
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/task.txt +14 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/NOTES.md +28 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected-pair-plan-registry.json +162 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected.json +65 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/metadata.json +19 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/spec.md +56 -0
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/NOTES.md +40 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/expected.json +57 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/setup.sh +6 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/spec.md +49 -0
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/NOTES.md +38 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/expected.json +65 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/setup.sh +55 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/spec.md +49 -0
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/task.txt +7 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/NOTES.md +38 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/expected.json +77 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/spec.md +49 -0
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/task.txt +10 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/NOTES.md +50 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/expected.json +76 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/setup.sh +36 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/spec.md +46 -0
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/task.txt +7 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/NOTES.md +50 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/expected.json +63 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/spec.md +48 -0
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/task.txt +1 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/NOTES.md +93 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/expected.json +74 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/setup.sh +28 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/spec.md +62 -0
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/task.txt +5 -0
- package/benchmark/auto-resolve/fixtures/SCHEMA.md +130 -0
- package/benchmark/auto-resolve/fixtures/test-repo/README.md +27 -0
- package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +63 -0
- package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +823 -0
- package/benchmark/auto-resolve/fixtures/test-repo/package.json +22 -0
- package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +17 -0
- package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +37 -0
- package/benchmark/auto-resolve/fixtures/test-repo/tests/cli.test.js +25 -0
- package/benchmark/auto-resolve/fixtures/test-repo/tests/server.test.js +58 -0
- package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +37 -0
- package/benchmark/auto-resolve/scripts/build-pair-eligible-manifest.py +174 -0
- package/benchmark/auto-resolve/scripts/check-f9-artifacts.py +256 -0
- package/benchmark/auto-resolve/scripts/compile-report.py +331 -0
- package/benchmark/auto-resolve/scripts/iter-0033c-compare.py +552 -0
- package/benchmark/auto-resolve/scripts/judge-opus-pass.sh +430 -0
- package/benchmark/auto-resolve/scripts/judge.sh +359 -0
- package/benchmark/auto-resolve/scripts/oracle-scope-tier-a.py +260 -0
- package/benchmark/auto-resolve/scripts/oracle-scope-tier-b.py +274 -0
- package/benchmark/auto-resolve/scripts/oracle-test-fidelity.py +328 -0
- package/benchmark/auto-resolve/scripts/pair-plan-idgen.py +401 -0
- package/benchmark/auto-resolve/scripts/pair-plan-lint.py +468 -0
- package/benchmark/auto-resolve/scripts/run-fixture.sh +691 -0
- package/benchmark/auto-resolve/scripts/run-iter-0033c.sh +234 -0
- package/benchmark/auto-resolve/scripts/run-suite.sh +214 -0
- package/benchmark/auto-resolve/scripts/ship-gate.py +222 -0
- package/bin/devlyn.js +175 -17
- package/config/skills/_shared/adapters/README.md +64 -0
- package/config/skills/_shared/adapters/gpt-5-5.md +29 -0
- package/config/skills/_shared/adapters/opus-4-7.md +29 -0
- package/config/skills/{devlyn:auto-resolve/scripts → _shared}/archive_run.py +26 -0
- package/config/skills/_shared/codex-config.md +54 -0
- package/config/skills/_shared/codex-monitored.sh +141 -0
- package/config/skills/_shared/engine-preflight.md +35 -0
- package/config/skills/_shared/expected.schema.json +93 -0
- package/config/skills/_shared/pair-plan-schema.md +298 -0
- package/config/skills/_shared/runtime-principles.md +110 -0
- package/config/skills/_shared/spec-verify-check.py +519 -0
- package/config/skills/devlyn:ideate/SKILL.md +99 -429
- package/config/skills/devlyn:ideate/references/elicitation.md +97 -0
- package/config/skills/devlyn:ideate/references/from-spec-mode.md +54 -0
- package/config/skills/devlyn:ideate/references/project-mode.md +76 -0
- package/config/skills/devlyn:ideate/references/spec-template.md +102 -0
- package/config/skills/devlyn:resolve/SKILL.md +172 -184
- package/config/skills/devlyn:resolve/references/free-form-mode.md +68 -0
- package/config/skills/devlyn:resolve/references/phases/build-gate.md +45 -0
- package/config/skills/devlyn:resolve/references/phases/cleanup.md +39 -0
- package/config/skills/devlyn:resolve/references/phases/implement.md +42 -0
- package/config/skills/devlyn:resolve/references/phases/plan.md +42 -0
- package/config/skills/devlyn:resolve/references/phases/verify.md +69 -0
- package/config/skills/devlyn:resolve/references/state-schema.md +106 -0
- package/{config/skills → optional-skills}/devlyn:design-system/SKILL.md +1 -0
- package/{config/skills → optional-skills}/devlyn:reap/SKILL.md +1 -0
- package/{config/skills → optional-skills}/devlyn:team-design-ui/SKILL.md +5 -0
- package/package.json +12 -2
- package/scripts/lint-skills.sh +431 -0
- package/config/skills/devlyn:auto-resolve/SKILL.md +0 -252
- package/config/skills/devlyn:auto-resolve/evals/evals.json +0 -21
- package/config/skills/devlyn:auto-resolve/evals/task-doctor-subcommand.md +0 -42
- package/config/skills/devlyn:auto-resolve/references/build-gate.md +0 -130
- package/config/skills/devlyn:auto-resolve/references/engine-routing.md +0 -82
- package/config/skills/devlyn:auto-resolve/references/findings-schema.md +0 -103
- package/config/skills/devlyn:auto-resolve/references/phases/phase-1-build.md +0 -54
- package/config/skills/devlyn:auto-resolve/references/phases/phase-2-evaluate.md +0 -45
- package/config/skills/devlyn:auto-resolve/references/phases/phase-3-critic.md +0 -84
- package/config/skills/devlyn:auto-resolve/references/pipeline-routing.md +0 -114
- package/config/skills/devlyn:auto-resolve/references/pipeline-state.md +0 -201
- package/config/skills/devlyn:auto-resolve/scripts/terminal_verdict.py +0 -96
- package/config/skills/devlyn:browser-validate/SKILL.md +0 -164
- package/config/skills/devlyn:browser-validate/references/flow-testing.md +0 -118
- package/config/skills/devlyn:browser-validate/references/tier1-chrome.md +0 -137
- package/config/skills/devlyn:browser-validate/references/tier2-playwright.md +0 -195
- package/config/skills/devlyn:browser-validate/references/tier3-curl.md +0 -57
- package/config/skills/devlyn:clean/SKILL.md +0 -285
- package/config/skills/devlyn:design-ui/SKILL.md +0 -351
- package/config/skills/devlyn:discover-product/SKILL.md +0 -124
- package/config/skills/devlyn:evaluate/SKILL.md +0 -564
- package/config/skills/devlyn:feature-spec/SKILL.md +0 -630
- package/config/skills/devlyn:ideate/references/challenge-rubric.md +0 -122
- package/config/skills/devlyn:ideate/references/codex-critic-template.md +0 -42
- package/config/skills/devlyn:ideate/references/templates/item-spec.md +0 -90
- package/config/skills/devlyn:implement-ui/SKILL.md +0 -466
- package/config/skills/devlyn:preflight/SKILL.md +0 -355
- package/config/skills/devlyn:preflight/references/auditors/browser-auditor.md +0 -32
- package/config/skills/devlyn:preflight/references/auditors/code-auditor.md +0 -86
- package/config/skills/devlyn:preflight/references/auditors/docs-auditor.md +0 -38
- package/config/skills/devlyn:product-spec/SKILL.md +0 -603
- package/config/skills/devlyn:recommend-features/SKILL.md +0 -286
- package/config/skills/devlyn:review/SKILL.md +0 -161
- package/config/skills/devlyn:team-resolve/SKILL.md +0 -631
- package/config/skills/devlyn:team-review/SKILL.md +0 -493
- package/config/skills/devlyn:update-docs/SKILL.md +0 -463
- package/config/skills/workflow-routing/SKILL.md +0 -73
- /package/{config/skills → optional-skills}/devlyn:reap/scripts/reap.sh +0 -0
- /package/{config/skills → optional-skills}/devlyn:reap/scripts/scan.sh +0 -0
package/AGENTS.md
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Codex Project Instructions
|
|
2
|
+
|
|
3
|
+
devlyn-cli installs `/devlyn:ideate` (optional) and `/devlyn:resolve` (required) into Claude Code, plus the contract below. Codex CLI reads this file when invoked inside a project that has it. The principles are non-negotiable on every change.
|
|
4
|
+
|
|
5
|
+
## Core principles
|
|
6
|
+
|
|
7
|
+
Seven rules govern every change. Cite them by name when a decision touches one.
|
|
8
|
+
|
|
9
|
+
1. **No workaround** — fix the root cause, never the symptom. No `any`, no `@ts-ignore`, no silent `catch`, no hardcoded fallback that hides a broken contract.
|
|
10
|
+
2. **No overengineering** — smallest change that closes the goal. New abstractions require an observed failure mode they prevent. Subtractive-first: ask "what can I delete instead?" before writing anything new.
|
|
11
|
+
3. **No guesswork** — verify with the actual files, logs, diffs, and run output before forming conclusions. State the falsifiable prediction BEFORE the experiment; record raw results AFTER.
|
|
12
|
+
4. **Worldclass** — code that survives review at a non-trivial codebase. Zero CRITICAL, zero HIGH security/design findings on the shippable path.
|
|
13
|
+
5. **Best practice** — idiomatic for the language and framework. Use standard primitives; do not hand-roll what the library already provides.
|
|
14
|
+
6. **Optimized** — efficient on the resource that matters (wall-time, tokens, attention, cognitive load on the next reader). "Slower but more thoughtful" is not free.
|
|
15
|
+
7. **Production ready** — error states are explicit and visible; behavior under failure is what the user expects, not silent corruption.
|
|
16
|
+
|
|
17
|
+
Three discipline rules govern HOW the principles are applied:
|
|
18
|
+
|
|
19
|
+
- **Root cause via flexible why-chain.** Keep asking "why?" until you find the violated invariant. **If the answer surfaces in 2 questions, stop.** If it takes 5 or 7, keep going. Strict counts are wrong; until-found is right.
|
|
20
|
+
- **First-principles thinking.** Challenge the requirement before optimizing the answer. Most "we have to do X" assumptions are habit, not necessity. Reduce to irreducible truths and rebuild from there.
|
|
21
|
+
- **Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.** — Saint-Exupéry. The operating definition of "done." A change is finished when no further line, branch, flag, or doc paragraph can be removed without breaking a learned failure mode.
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
ideate (optional) -> resolve -> ship
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- `/devlyn:ideate` (optional) — unstructured idea → `docs/specs/<id>/spec.md` + `spec.expected.json`. Modes: default Q&A, `--quick` (autonomous-pipeline-safe), `--from-spec <path>`, `--project` (multi-feature).
|
|
30
|
+
- `/devlyn:resolve` — hands-free pipeline for any coding task. Free-form goal, `--spec <path>`, or `--verify-only <ref> --spec <path>`. Phases run inline: PLAN → IMPLEMENT → BUILD_GATE → CLEANUP → VERIFY (fresh-subagent, findings-only).
|
|
31
|
+
- Three creative power-user skills (`/devlyn:reap`, `/devlyn:design-system`, `/devlyn:team-design-ui`) live in `optional-skills/` and install only when the user opts in.
|
|
32
|
+
|
|
33
|
+
Each skill's `SKILL.md` is the source of truth for flags and workflow. Do not duplicate.
|
|
34
|
+
|
|
35
|
+
## Subtractive-First Editing
|
|
36
|
+
|
|
37
|
+
Before writing any change, answer in this order:
|
|
38
|
+
|
|
39
|
+
1. What can I delete that makes the addition unnecessary?
|
|
40
|
+
2. What can I delete that makes the addition smaller?
|
|
41
|
+
3. What is the minimum addition still required?
|
|
42
|
+
|
|
43
|
+
Hard rules:
|
|
44
|
+
|
|
45
|
+
- A pure-addition diff needs a citation: an explicit user/spec requirement OR an observed failure mode.
|
|
46
|
+
- Refactor-only changes should reduce line count unless a cited failure requires the new shape.
|
|
47
|
+
- Do not add flags, branches, or options for hypothetical users.
|
|
48
|
+
- Do not add defensive wrappers when an upstream contract can be corrected instead.
|
|
49
|
+
- Doc growth has the same cost as code growth. Delete the now-stale sentence before adding new prose.
|
|
50
|
+
- A change is not done until you have attempted one more deletion and confirmed it would break something.
|
|
51
|
+
|
|
52
|
+
## Goal-Locked Execution
|
|
53
|
+
|
|
54
|
+
Default mode is execution toward the user's stated goal. Do not drift.
|
|
55
|
+
|
|
56
|
+
Refuse these patterns:
|
|
57
|
+
|
|
58
|
+
- Unrequested work ("while here, also fix...").
|
|
59
|
+
- Tangential cleanup in files the task does not require.
|
|
60
|
+
- Speculative robustness for cases not observed in production, tests, findings, or the spec.
|
|
61
|
+
- Mid-flight re-scoping without user approval.
|
|
62
|
+
- Curiosity exploration that is not on the critical path.
|
|
63
|
+
|
|
64
|
+
Drift test: **did the user ask for this, OR does the stated goal strictly require it?** If both no, surface it as a follow-up note and continue on the original path.
|
|
65
|
+
|
|
66
|
+
In interactive sessions, ask a concise clarification when scope expansion is real. In hands-free pipelines, stay on scope and log the assumption in the final artifact.
|
|
67
|
+
|
|
68
|
+
## Error Handling
|
|
69
|
+
|
|
70
|
+
No silent fallbacks.
|
|
71
|
+
|
|
72
|
+
- Show clear errors, retry paths, or actionable guidance.
|
|
73
|
+
- Fallbacks allowed only when widely accepted and harmless (CSS fallback fonts, CDN failover, image placeholders).
|
|
74
|
+
- Silent `catch` blocks are bugs.
|
|
75
|
+
- Logging is not user-visible error handling.
|
|
76
|
+
- The Codex CLI availability downgrade is the one documented exception: emit `engine downgraded: codex-unavailable` and behave exactly like explicit Claude routing.
|
|
77
|
+
|
|
78
|
+
## Evidence Over Claim
|
|
79
|
+
|
|
80
|
+
Every finding cites concrete evidence:
|
|
81
|
+
|
|
82
|
+
- Code: `file:line` you opened.
|
|
83
|
+
- Missing implementation: state exactly what you searched and found absent.
|
|
84
|
+
- Doc: cite the stale text + section/line.
|
|
85
|
+
- Browser: route/URL + screenshot or observed evidence.
|
|
86
|
+
- Benchmark: run id, fixture id, metric, raw result path.
|
|
87
|
+
|
|
88
|
+
Exclude vague claims. They produce vague fixes.
|
|
89
|
+
|
|
90
|
+
## Working In a devlyn-cli Project
|
|
91
|
+
|
|
92
|
+
- Check `git status --short` before editing.
|
|
93
|
+
- Never revert user changes unless explicitly asked.
|
|
94
|
+
- Use `rg` / `rg --files` for search.
|
|
95
|
+
- Keep changes scoped to the task; stop when the core request is answered or the change is verified.
|
|
96
|
+
- For installer or skill edits inside the devlyn-cli source repo, run `bash scripts/lint-skills.sh`.
|
|
97
|
+
- Treat the project's own `docs/VISION.md`, `docs/ROADMAP.md`, `docs/roadmap/**`, and any local `AGENTS.md` / `CLAUDE.md` overrides as authoritative when present.
|
|
98
|
+
|
|
99
|
+
## Communication
|
|
100
|
+
|
|
101
|
+
- Lead with objective evidence before opinion.
|
|
102
|
+
- Be concise and specific.
|
|
103
|
+
- State blockers plainly.
|
|
104
|
+
- Separate completed work, verification, and remaining risks.
|
package/CLAUDE.md
CHANGED
|
@@ -1,15 +1,113 @@
|
|
|
1
1
|
# Project Instructions
|
|
2
2
|
|
|
3
|
+
devlyn-cli installs `/devlyn:ideate` (optional) and `/devlyn:resolve` (required) into Claude Code, plus the contract below. These principles are non-negotiable on every change — yours and any sub-agent's.
|
|
4
|
+
|
|
5
|
+
## Core principles
|
|
6
|
+
|
|
7
|
+
Seven rules govern every change. Cite them by name when a decision touches one.
|
|
8
|
+
|
|
9
|
+
1. **No workaround** — fix the root cause, never the symptom. No `any`, no `@ts-ignore`, no silent `catch`, no hardcoded fallback that hides a broken contract. Configuration-level skips that bypass the real issue are also rejects.
|
|
10
|
+
2. **No overengineering** — smallest change that closes the goal. New abstractions require an observed failure mode they prevent. Subtractive-first: ask "what can I delete instead?" before writing anything new.
|
|
11
|
+
3. **No guesswork** — verify with the actual files, logs, diffs, and run output before forming conclusions. State the falsifiable prediction BEFORE the experiment; record raw results AFTER. Retroactive prediction edits are dishonest.
|
|
12
|
+
4. **Worldclass** — code that survives review at a non-trivial codebase. Zero CRITICAL, zero HIGH security/design findings on the shippable path.
|
|
13
|
+
5. **Best practice** — idiomatic for the language and framework. Use standard primitives; do not hand-roll what the library already provides.
|
|
14
|
+
6. **Optimized** — efficient on the resource that matters (wall-time, tokens, attention, cognitive load on the next reader). "Slower but more thoughtful" is not free. Each layer of composition or process must beat the simpler baseline.
|
|
15
|
+
7. **Production ready** — error states are explicit and visible; behavior under failure is what the user expects, not silent corruption.
|
|
16
|
+
|
|
17
|
+
Three discipline rules govern HOW the principles are applied:
|
|
18
|
+
|
|
19
|
+
- **Root cause via flexible why-chain.** Keep asking "why?" until you find the violated invariant. **If the answer surfaces in 2 questions, stop.** If it takes 5 or 7, keep going. Strict counts are wrong; until-found is right.
|
|
20
|
+
- **First-principles thinking.** Challenge the requirement before optimizing the answer. Most "we have to do X" assumptions are habit, not necessity. Reduce the problem to its irreducible truths and rebuild from there.
|
|
21
|
+
- **Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.** — Saint-Exupéry. This is the operating definition of "done." A change is finished when no further line, branch, flag, or doc paragraph can be removed without breaking a learned failure mode. Not before.
|
|
22
|
+
|
|
23
|
+
The runtime sub-agent contract below (Subtractive-first / Goal-locked / No-workaround discipline / Evidence over claim) expands these principles into concrete operational tests. Sub-agents in `/devlyn:resolve` and `/devlyn:ideate` enforce them at every phase.
|
|
24
|
+
|
|
3
25
|
## Quick Start
|
|
4
26
|
|
|
5
|
-
|
|
27
|
+
Two skills cover the full cycle post iter-0034 Phase 4 cutover (2026-05-04). `/devlyn:ideate` is OPTIONAL; `/devlyn:resolve` is REQUIRED. **Both default to `--engine claude`** — pair / multi-engine routing is research-only at HEAD per the iter-0020 + iter-0033g + iter-0034 close-outs (see [`autoresearch/iterations/0020-pair-policy-narrow.md`](autoresearch/iterations/0020-pair-policy-narrow.md) + [`autoresearch/iterations/0034-phase-4-cutover.md`](autoresearch/iterations/0034-phase-4-cutover.md)). Pass `--engine auto` or `--engine codex` explicitly to opt into the research path; the harness silently downgrades to `claude` and emits a banner if the Codex CLI is missing.
|
|
6
28
|
|
|
7
|
-
1. `/devlyn:ideate` — unstructured idea →
|
|
8
|
-
2. `/devlyn:
|
|
9
|
-
3. `/devlyn:preflight` — verify the implementation matches the roadmap
|
|
29
|
+
1. `/devlyn:ideate` (optional) — unstructured idea → `docs/specs/<id>/spec.md` + `spec.expected.json`. Modes: default Q&A, `--quick` (autonomous-pipeline-safe), `--from-spec <path>`, `--project`.
|
|
30
|
+
2. `/devlyn:resolve` — hands-free pipeline for any coding task. Free-form goal, `--spec <path>`, or `--verify-only <diff> --spec <path>`. Phases: PLAN → IMPLEMENT → BUILD_GATE → CLEANUP → VERIFY (fresh subagent, findings-only).
|
|
10
31
|
|
|
11
32
|
Each skill's `SKILL.md` is the source of truth for its flags and workflow — don't duplicate them here.
|
|
12
33
|
|
|
34
|
+
### When to use which
|
|
35
|
+
|
|
36
|
+
| Situation | Command |
|
|
37
|
+
|-----------|---------|
|
|
38
|
+
| New project / multi-feature plan / external spec to normalize | `/devlyn:ideate` (`--project`, default, or `--from-spec`) |
|
|
39
|
+
| One-line goal you want turned into a spec autonomously | `/devlyn:ideate --quick` |
|
|
40
|
+
| Spec already in hand | `/devlyn:resolve --spec <path>` |
|
|
41
|
+
| Free-form fix / feature / refactor / debug / PR review | `/devlyn:resolve "<describe the work>"` |
|
|
42
|
+
| Verify a diff or PR against a spec | `/devlyn:resolve --verify-only <ref> --spec <path>` |
|
|
43
|
+
|
|
44
|
+
### Subtractive-first editing — perfection = nothing left to remove
|
|
45
|
+
<!-- runtime-principles:section=subtractive-first:begin -->
|
|
46
|
+
|
|
47
|
+
> "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away." — Saint-Exupéry. **This is the operating definition of "done" in this repo.** A change is finished when no further line, branch, flag, or doc paragraph can be removed without breaking a learned failure mode. Not before.
|
|
48
|
+
|
|
49
|
+
This rule overrides instinct. LLMs (including you) are trained on corpora that reward elaborate, defensive, "thorough" code — so the default impulse is to add. That impulse is wrong here. Read the rules below as hard tests, not aesthetic preferences. They are not optional, not negotiable, and not satisfiable by writing more careful additions.
|
|
50
|
+
|
|
51
|
+
**Mandatory pre-edit question.** Before writing any change, you must answer in this order:
|
|
52
|
+
|
|
53
|
+
1. **What can I delete that makes the addition unnecessary?** If the addition becomes redundant after the deletion, ship the deletion alone.
|
|
54
|
+
2. **What can I delete that makes the addition smaller?** Trim the surrounding accretion before adding.
|
|
55
|
+
3. **Only then**, what is the minimum addition required?
|
|
56
|
+
|
|
57
|
+
If you skip question 1 or 2, you are violating this rule even if the resulting code looks clean.
|
|
58
|
+
|
|
59
|
+
**Hard tests every edit must pass:**
|
|
60
|
+
|
|
61
|
+
- **Net-negative is the default; pure-addition needs a citation.** A diff that adds N lines and removes 0 must point to a specific cause: a previously-observed failure mode (commit hash, fixture ID, finding ID, user-reported incident), OR an explicit user request / spec requirement that demands new user-visible behavior. The latter is a sufficient citation — do not block legitimate requested additions on the absence of a past failure. What is rejected: vague justifications like "it seems clearer," "for future flexibility," "just in case," "to be safe," "for completeness," "to handle edge cases" — these are the exact phrases that produce accretion.
|
|
62
|
+
- **Delete the line that makes the bug impossible, not the line that catches it.** Defensive wrappers, validation layers, error normalizers, and `try/catch` shells are usually evidence that an upstream contract is unclear. Fix the contract upstream and remove the defenses downstream. The trap: adding the wrapper feels like progress because it makes a test pass. The wrapper is debt; the contract fix is the work. **Scope guard**: if the upstream contract fix is outside the user's stated scope, stop and surface the scope expansion to the user before editing — Goal-locked execution overrides this. The right scope-expansion outcome is "user authorizes the upstream fix" or "user accepts a scoped local fix and a follow-up for upstream"; never silently restructure something the user didn't ask you to.
|
|
63
|
+
- **A new flag, branch, or option is admitting two failures**: (a) the default was wrong, (b) every reader pays attention cost forever. Default-fix-and-delete-flag beats add-flag-with-better-default. The bar for adding a configuration knob is "I have observed two real users with genuinely conflicting needs," not "this might be useful someday."
|
|
64
|
+
- **Doc additions are subject to the same rule.** Before adding a section to any `.md` file (CLAUDE.md, SKILL.md, README, references/), find the now-stale sentence or section the new one supersedes — delete that first. A growing instructions file dilutes the instructions that actually need to be followed; readers (human and LLM) skim long files and miss load-bearing rules.
|
|
65
|
+
- **A "cleaner" refactor that grows line count is not cleaner.** It is a sideways move that increases context, parsing, and review cost. **For refactor-only changes**, line count must drop unless a cited observed failure requires the new shape. **Never delete tests, contracts, public API, comments documenting non-obvious WHY, or user-facing behavior just to win the count** — that is gaming the metric, not honoring the principle. The metric serves complexity reduction; if a deletion would lose information not recoverable from code + commit history, it is the wrong deletion.
|
|
66
|
+
- **Stop adding when no further deletion is possible.** This is the Saint-Exupéry test inverted into a stopping rule: if you have made an addition and you cannot identify anything else that can be removed, examine the addition itself — is part of it still removable? Iterate until the diff is irreducible.
|
|
67
|
+
|
|
68
|
+
**Anti-rationalization clause** — explicitly guarding against LLM-style hedging:
|
|
69
|
+
|
|
70
|
+
- "More explicit is safer" is **not** a justification. Explicitness has a cost in attention and rot. Required-explicit goes in; nice-to-explicit gets cut.
|
|
71
|
+
- "Adding context for future readers" is **not** a justification. Future readers benefit more from shorter files than from explanatory prose. The code and the commit message together carry the why.
|
|
72
|
+
- "Defense-in-depth" is **not** a justification at the harness layer. Two layers that catch the same bug are evidence one of them should be the only layer.
|
|
73
|
+
- If you find yourself writing the phrase "in case" in a comment, code reviewer note, or doc, **stop and re-evaluate** — that phrase predicts an unjustified addition.
|
|
74
|
+
|
|
75
|
+
**Stopping rule.** A change is done when (a) all hypotheses it was meant to close are closed, AND (b) you have attempted at least one further deletion and confirmed it would break something. If you have not tried to delete more, you are not done. If nothing can be deleted to justify the current addition, the addition itself is too large — re-scope or surface the conflict to the user before proceeding.
|
|
76
|
+
|
|
77
|
+
**Never grow surface area silently.** Every accretion-shaped change must be visible: in the commit message, in the iteration file, or in a flagged review. Silent growth is the failure mode this rule exists to prevent.
|
|
78
|
+
<!-- runtime-principles:section=subtractive-first:end -->
|
|
79
|
+
|
|
80
|
+
### Goal-locked execution — stay on the North Star, do not wander
|
|
81
|
+
<!-- runtime-principles:section=goal-locked:begin -->
|
|
82
|
+
|
|
83
|
+
Even with a North Star defined, work drifts off-course ("산으로 간다" / "삼천포로 빠진다" — going up the wrong mountain instead of forward). The harness must **actively block** this drift at run time, not merely discourage it. The default is ruler-straight execution toward the user's stated goal; any deviation requires explicit justification, not the inverse.
|
|
84
|
+
|
|
85
|
+
This rule exists because LLMs (including you) are trained to be helpful, comprehensive, and thorough — and "helpful" easily becomes "did more than asked." Doing more than asked is not helpfulness; it is scope creep. Read the rules below as hard blocks, not soft preferences.
|
|
86
|
+
|
|
87
|
+
**The five drift patterns you must refuse to execute on:**
|
|
88
|
+
|
|
89
|
+
1. **Unrequested work.** "While I'm here, I noticed X is broken/ugly/inefficient" → **stop**. The user did not ask for X. If X is a real defect, surface it as a finding, a follow-up suggestion, or an entry in a TODO list — do NOT fix it inside the current change. Mixing unrequested work with requested work is what makes diffs unreviewable and PRs eternal.
|
|
90
|
+
2. **Tangential cleanup.** "This file looks messy, let me also tidy..." → **stop**. The current task is the only task. Unrelated cleanup is a separate change requiring its own justification, scope, and pre-flight 0 check.
|
|
91
|
+
3. **Speculative robustness.** "Just adding a check / fallback / handler for the case where..." → **stop**. If the case has not been observed (in production, in tests, in a finding), it does not belong in this change. Defensive code added for unobserved cases is the most common form of accretion debt — it never gets removed because nobody can prove the case never happens.
|
|
92
|
+
4. **Re-scoping mid-flight.** "Actually, the better way to do this is to also restructure / rename / migrate..." → **stop**. If you discover the requested approach is wrong, surface that to the user with evidence and let them adjudicate. Do NOT silently expand scope. The user's explicit redirect is the only authorization to enlarge a task.
|
|
93
|
+
5. **Curiosity detours.** "Let me also explore how Y works to understand this better..." → **stop**, unless Y is provably on the goal's critical path. Curiosity-driven exploration is creative-mode; default is execution-mode.
|
|
94
|
+
|
|
95
|
+
**The single drift test before any deviation from the stated goal:** *"Did the user ask for this, OR does the user's stated goal strictly require it?"* If the answer to both is no, do not do it. Surface it as a note (commit message, end-of-turn summary, finding) and continue on the original path.
|
|
96
|
+
|
|
97
|
+
**Creative-mode is the narrow exception, not the default.** Creative-mode applies only when (a) the user explicitly invoked an ideation/exploration surface (`/devlyn:ideate`, optional `/devlyn:design-system`, "let's brainstorm", "explore options for"), OR (b) the goal is genuinely under-specified and a clarifying question is impossible (extremely rare — usually you should ask). For everything else — bug fixes, feature work, refactors, doc updates, pipeline runs, code review, debugging — execution-mode is the default and drift is a defect, not a feature.
|
|
98
|
+
|
|
99
|
+
**Anti-rationalization clause** — explicitly guarding against LLM hedging:
|
|
100
|
+
|
|
101
|
+
- "It's a small extra change" is **not** a justification. Small accretions compound; one of them is always small.
|
|
102
|
+
- "It's related to what they asked for" is **not** a justification. Related ≠ requested. Requested is the only standard.
|
|
103
|
+
- "It would be incomplete without this" is **not** a justification. The user defines completeness, not your sense of it.
|
|
104
|
+
- "I'm being thorough" is **not** a justification. Thoroughness on the requested goal is required; thoroughness extending past the goal is drift.
|
|
105
|
+
|
|
106
|
+
**When in doubt, ask — outside hands-free pipelines.** In interactive sessions a short clarification ("the requested fix touches the X code path; I notice Y also looks broken — should I fix it in this change or surface it as a follow-up?") is always cheaper than a wrong-scope diff. Asking is not a weakness; silently expanding scope is. **Inside hands-free pipelines** (`/devlyn:resolve`, scheduled remote agents, autonomous skill runs) the contract forbids mid-pipeline prompts — there asking is unsafe because there is no user to answer. The substitute is: stay strictly on the requested goal, do not expand scope, and log the question/assumption explicitly in the final report (or `.devlyn/runs/<run_id>/` artifacts) so the user can adjudicate after the run completes. Choosing scope creep over logging-and-staying-on-path is always wrong.
|
|
107
|
+
|
|
108
|
+
**Stopping rule.** A task is done when the user's stated goal is closed AND no off-path work was added. If you find yourself hesitating because "I should also do Z" — Z is drift. Note it for follow-up, do not execute.
|
|
109
|
+
<!-- runtime-principles:section=goal-locked:end -->
|
|
110
|
+
|
|
13
111
|
## Error Handling Philosophy
|
|
14
112
|
|
|
15
113
|
**No silent fallbacks.** Handle errors explicitly and show the user what happened.
|
|
@@ -18,33 +116,49 @@ Each skill's `SKILL.md` is the source of truth for its flags and workflow — do
|
|
|
18
116
|
- **Fallbacks are the exception.** Only use them when it's a widely accepted best practice (CSS fallback fonts, CDN failover, image placeholders). Otherwise handle the error explicitly.
|
|
19
117
|
- **Pattern**: `try { doThing() } catch (error) { showErrorUI(error) }` — NOT `try { doThing() } catch { return fallbackValue }`.
|
|
20
118
|
|
|
21
|
-
|
|
119
|
+
### No-workaround discipline (runtime salience)
|
|
120
|
+
<!-- runtime-principles:section=no-workaround:begin -->
|
|
121
|
+
|
|
122
|
+
No `any`, no `@ts-ignore`, no silent `catch`, no hardcoded values, no helper scripts that bypass the root cause. Fix root causes; handle errors with user-visible state per the rule above.
|
|
123
|
+
|
|
124
|
+
**Permitted exceptions** (explicitly carved out):
|
|
125
|
+
- CSS fallback fonts, CDN failover, image placeholders — widely-accepted best practices.
|
|
126
|
+
- Codex CLI availability downgrade — the one documented silent fallback in this repo. Fires when the resolved engine is `auto` or `codex` (either via skill default or explicit `--engine` flag) and the Codex CLI is absent. Banner `engine downgraded: codex-unavailable` always prints; verdict identical to `--engine claude`. Any other silent fallback in skills code is a bug — file it against the skill that introduced it.
|
|
127
|
+
<!-- runtime-principles:section=no-workaround:end -->
|
|
128
|
+
|
|
129
|
+
### Evidence over claim
|
|
130
|
+
<!-- runtime-principles:section=evidence:begin -->
|
|
131
|
+
|
|
132
|
+
Every finding cites concrete evidence. Vague claims are speculation; exclude them.
|
|
133
|
+
|
|
134
|
+
- **Code findings**: `file:line` you have opened.
|
|
135
|
+
- **Missing findings**: explicit "searched X and found no implementation" statement.
|
|
136
|
+
- **Doc findings**: quote of the stale text + section/line reference.
|
|
137
|
+
- **Browser findings**: screenshot reference + URL/route.
|
|
138
|
+
|
|
139
|
+
A finding without one of these forms is excluded. Vague findings produce vague fixes.
|
|
140
|
+
<!-- runtime-principles:section=evidence:end -->
|
|
22
141
|
|
|
23
|
-
|
|
142
|
+
## Codex invocation
|
|
24
143
|
|
|
25
|
-
|
|
26
|
-
2. **Checkpoint progress** — use `TaskCreate`/`TaskUpdate` every 5–10 minutes.
|
|
27
|
-
3. **Intermediate summaries** — output "current understanding" snapshots so work isn't lost if interrupted.
|
|
28
|
-
4. **Always deliver findings** — never end mid-analysis. Minimum output: files examined, key findings, remaining unknowns, recommended next steps.
|
|
144
|
+
When `/devlyn:resolve` or `/devlyn:ideate` route a phase to Codex (`--engine codex` or `--engine auto`), the wrapper-form contract lives in `config/skills/_shared/codex-config.md` (or `.claude/skills/_shared/codex-config.md` once installed). Omit `-m <model>` — the CLI's current flagship is used automatically. MCP is not in the loop. If the Codex CLI is absent the harness silently downgrades to Claude and prints `engine downgraded: codex-unavailable` in the final report.
|
|
29
145
|
|
|
30
|
-
|
|
146
|
+
## Working Mode
|
|
31
147
|
|
|
32
|
-
|
|
148
|
+
- **Checkpoint with TaskCreate / TaskUpdate.** Long investigations or multi-phase work: create tasks at start, mark completed as each one closes — don't batch.
|
|
149
|
+
- **Don't stop early on token-budget concerns.** Context auto-compacts; the model resumes after compaction. Run the work to a real stopping point.
|
|
150
|
+
- **Persist across context windows via disk.** `/devlyn:resolve` writes `.devlyn/pipeline.state.json` plus per-phase log/findings under `.devlyn/runs/<run_id>/`; for ad-hoc long work use `HANDOFF.md` and resume with `@HANDOFF.md continue`.
|
|
151
|
+
- **Parallelize independent tool calls; reserve `Agent` subagents for independent fan-out or isolated-context verification** — a single perspective is the default on the resolve hot path.
|
|
33
152
|
|
|
34
|
-
|
|
153
|
+
## Skill Boundary Policy
|
|
35
154
|
|
|
36
|
-
|
|
37
|
-
- auto-resolve writes durable state to `.devlyn/runs/<run_id>/` (pipeline.state.json, `<phase>.findings.jsonl`, `<phase>.log.md`) plus git commits. Pick up by reading `state.json` first; drill into JSONL/log files as needed.
|
|
38
|
-
- preflight writes `.devlyn/PREFLIGHT-REPORT.md`.
|
|
39
|
-
- For long investigations, write progress to `HANDOFF.md`; resume with `@HANDOFF.md continue`.
|
|
155
|
+
Post iter-0034 Phase 4 cutover (2026-05-04) the runtime product surface is two skills — `/devlyn:resolve` and `/devlyn:ideate`. `/devlyn:resolve` runs PLAN → IMPLEMENT → BUILD_GATE → CLEANUP → VERIFY inline; verification, cleanup, and security review (delegated to the native `security-review` Claude Code skill from BUILD_GATE) all live inside the pipeline. There are no standalone `/devlyn:review`, `/devlyn:evaluate`, `/devlyn:team-resolve`, etc. surfaces to delegate to — those skills were folded into resolve's phases or removed in iter-0034. Three creative power-user skills (`/devlyn:reap`, `/devlyn:design-system`, `/devlyn:team-design-ui`) live in `optional-skills/` and are user-invoked only; resolve never delegates to them.
|
|
40
156
|
|
|
41
|
-
|
|
157
|
+
Browser validation routes through `_shared/browser-runner.sh` (Chrome MCP → Playwright → curl tier) directly from BUILD_GATE — there is no separate `/devlyn:browser-validate` skill at HEAD.
|
|
42
158
|
|
|
43
159
|
## Communication Style
|
|
44
160
|
|
|
45
|
-
|
|
46
|
-
- When the user asks "what's popular" or "what do others use", answer with data.
|
|
47
|
-
- Keep recommendations actionable and specific.
|
|
161
|
+
Lead with **objective data** (popularity, benchmarks, community adoption) before opinions — especially when the user asks "what's popular" or "what do others use."
|
|
48
162
|
|
|
49
163
|
## Commit Conventions
|
|
50
164
|
|
package/README.md
CHANGED
|
@@ -27,124 +27,71 @@ If devlyn-cli saved you time, [give it a star](https://github.com/fysoul17/devly
|
|
|
27
27
|
npx devlyn-cli
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
That's it. The interactive installer handles everything. Run it again anytime to update.
|
|
30
|
+
That's it. The interactive installer handles everything. Claude Code config is installed by default; optional AI CLI instructions can be selected during install. Choose **Codex CLI (OpenAI)** to install `AGENTS.md` AND `/devlyn:resolve` + `/devlyn:ideate` skills into `~/.codex/skills/` so the same slash commands work inside Codex too. Run it again anytime to update.
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
## How It Works —
|
|
34
|
+
## How It Works — Two Skills, Full Cycle
|
|
35
35
|
|
|
36
|
-
devlyn-cli turns Claude Code into
|
|
36
|
+
devlyn-cli turns Claude Code into a hands-free development pipeline. The product surface is two skills:
|
|
37
37
|
|
|
38
38
|
```
|
|
39
|
-
ideate →
|
|
39
|
+
ideate (optional) → resolve → ship
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
### Step 1 — Plan with `/devlyn:ideate`
|
|
42
|
+
### Step 1 (optional) — Plan with `/devlyn:ideate`
|
|
43
43
|
|
|
44
|
-
Turn a raw idea into
|
|
44
|
+
Turn a raw idea into a verifiable spec — single-feature, multi-feature, or "normalize this external doc".
|
|
45
45
|
|
|
46
46
|
```
|
|
47
47
|
/devlyn:ideate "I want to build a habit tracking app with AI nudges"
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
Default mode produces a `docs/specs/<id>-<slug>/spec.md` plus `spec.expected.json` (mechanical verification block) that `/devlyn:resolve --spec` consumes directly. Modes:
|
|
51
51
|
|
|
52
|
-
|
|
|
52
|
+
| Mode | When to use |
|
|
53
53
|
|---|---|
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
|
|
|
54
|
+
| `default` | One feature, AI drives focused Q&A |
|
|
55
|
+
| `--quick` | One-line goal → assume-and-confirm spec, single-turn (autonomous-pipeline-safe) |
|
|
56
|
+
| `--from-spec <path>` | You already wrote a spec; ideate normalizes + lints it |
|
|
57
|
+
| `--project` | Multi-feature project: emits `plan.md` index + N child specs |
|
|
57
58
|
|
|
58
|
-
|
|
59
|
+
Skip ideate entirely if you have a spec or just want to describe the work — `/devlyn:resolve` accepts free-form goals too.
|
|
59
60
|
|
|
60
|
-
### Step 2 —
|
|
61
|
+
### Step 2 — Resolve with `/devlyn:resolve`
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
Hands-free pipeline for any coding task — bug fix, feature, refactor, debug, modify, PR review. Pass a spec, a free-form goal, or a diff to verify.
|
|
63
64
|
|
|
64
65
|
```
|
|
65
|
-
/devlyn:
|
|
66
|
+
/devlyn:resolve "fix the login bug" # free-form
|
|
67
|
+
/devlyn:resolve --spec docs/specs/2026-05-04-auth/spec.md # spec mode
|
|
68
|
+
/devlyn:resolve --verify-only <diff-or-PR-ref> --spec <path> # verify-only
|
|
66
69
|
```
|
|
67
70
|
|
|
68
|
-
|
|
71
|
+
Internal phases run sequentially with file-based handoff via `.devlyn/pipeline.state.json`:
|
|
69
72
|
|
|
70
73
|
```
|
|
71
|
-
|
|
74
|
+
PLAN → IMPLEMENT → BUILD_GATE → CLEANUP → VERIFY (fresh subagent, findings-only)
|
|
72
75
|
```
|
|
73
76
|
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
- **
|
|
77
|
-
-
|
|
78
|
-
- Evaluation grades against done-criteria — if it fails, auto-fix and re-evaluate
|
|
77
|
+
- **PLAN** is the heaviest phase by design — formalizes invariants from the spec/goal and the file list to touch.
|
|
78
|
+
- **BUILD_GATE** runs your project's real compilers, typecheckers, linters, and `python3 .claude/skills/_shared/spec-verify-check.py` (verification commands literal-match). Auto-detects Next.js, Rust, Go, Solidity, Expo, Swift, and Dockerfiles. Browser flows route through Chrome MCP → Playwright → curl tier.
|
|
79
|
+
- **VERIFY** runs in a fresh subagent context with no code-mutation tools — findings only, structurally independent.
|
|
80
|
+
- Git checkpoints at every phase for safe rollback. Fix-loop budget shared across BUILD_GATE and VERIFY (`--max-rounds N`, default 4).
|
|
79
81
|
|
|
80
|
-
|
|
81
|
-
Customize the build gate: `--build-gate strict` (warnings = errors), `--build-gate no-docker` (skip Docker builds for speed)
|
|
82
|
-
Use dual-model routing: `--engine auto` (Codex builds, Claude evaluates — see below)
|
|
82
|
+
Common flags: `--engine claude|codex|auto` (default `claude`), `--bypass build-gate,cleanup`, `--pair-verify` (force pair-mode JUDGE in VERIFY), `--perf` (per-phase timing).
|
|
83
83
|
|
|
84
|
-
###
|
|
84
|
+
### Engine selection — Claude solo by default
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
`--engine claude` (default) is the canonical surface. Every phase routes to Claude.
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
/devlyn:preflight
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
Reads every commitment from your vision, roadmap, and item specs, then audits the codebase evidence-based. Catches what you missed:
|
|
93
|
-
|
|
94
|
-
| Category | What It Finds |
|
|
95
|
-
|---|---|
|
|
96
|
-
| `MISSING` | In roadmap but not implemented |
|
|
97
|
-
| `INCOMPLETE` | Started but unfinished |
|
|
98
|
-
| `DIVERGENT` | Implemented differently than spec |
|
|
99
|
-
| `BROKEN` | Has a bug preventing it from working |
|
|
100
|
-
| `STALE_DOC` | Docs don't match current code |
|
|
101
|
-
|
|
102
|
-
Confirmed gaps become new roadmap items — feed them back into auto-resolve. Use `--autofix` to do this automatically, or `--phase 2` to check only one phase.
|
|
103
|
-
|
|
104
|
-
### Bonus — Intelligent Model Routing with `--engine`
|
|
105
|
-
|
|
106
|
-
Install the Codex MCP server during setup, then:
|
|
88
|
+
`--engine codex` routes IMPLEMENT to Codex; `--engine auto` opts into the experimental dual-engine routing where applicable. Both are research-only at HEAD: iter-0020 closed Codex BUILD/IMPLEMENT below the quality floor on the 9-fixture suite (L2 vs L1 = −3.6, 3/8 gated fixtures cleared the +5 margin floor — release-readiness FAIL); iter-0033g + iter-0034 closed PLAN-pair as research-only with explicit unblock conditions (container/sandbox infra OR production telemetry capturing positive evidence of subagent introspection). Install the Codex CLI (https://platform.openai.com/docs/codex) and pass the flag explicitly to opt in:
|
|
107
89
|
|
|
108
90
|
```
|
|
109
|
-
/devlyn:
|
|
91
|
+
/devlyn:resolve "fix the auth bug" --engine auto # experimental, research-only
|
|
110
92
|
```
|
|
111
93
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
> `--engine auto` (default, recommended) · `--engine codex` (force Codex for build) · `--engine claude` (Claude only)
|
|
115
|
-
|
|
116
|
-
Works across the full pipeline:
|
|
117
|
-
|
|
118
|
-
```
|
|
119
|
-
/devlyn:auto-resolve "implement feature" --engine auto
|
|
120
|
-
/devlyn:ideate "plan new project" --engine auto
|
|
121
|
-
/devlyn:preflight --engine auto
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
<details>
|
|
125
|
-
<summary><strong>How routing works</strong> — A/B tested on 6 roles, 11 integration tests</summary>
|
|
126
|
-
|
|
127
|
-
**Pipeline phases** — builder and critic are always different models (GAN dynamic):
|
|
128
|
-
|
|
129
|
-
| Phase | Model | Why |
|
|
130
|
-
|---|---|---|
|
|
131
|
-
| Build (implementation) | **Codex GPT-5.4** | SWE-bench Pro +11.7pp for hard coding tasks |
|
|
132
|
-
| Evaluate | **Claude** | Long-context (MRCR +28pp) for full-diff grading |
|
|
133
|
-
| Fix Loop | **Codex GPT-5.4** | Same advantage as Build |
|
|
134
|
-
| Challenge | **Claude** | Fresh skeptical review needs different model family |
|
|
135
|
-
| Browser Validate | **Claude** | Chrome MCP session-bound |
|
|
136
|
-
|
|
137
|
-
**Team roles** — each of 21 roles routes to the best model:
|
|
138
|
-
|
|
139
|
-
| Engine | Roles | Examples |
|
|
140
|
-
|---|---|---|
|
|
141
|
-
| Claude (11) | Analysis, design, architecture | root-cause-analyst, architecture-reviewer, ux-designer, product-analyst |
|
|
142
|
-
| Codex (4) | Code generation, performance | implementation-planner, test-engineer, performance-engineer |
|
|
143
|
-
| Dual (6) | Both models find unique issues | security-auditor, quality-reviewer, api-designer |
|
|
144
|
-
|
|
145
|
-
**Key finding**: Benchmark predictions were only 33% accurate. 4 of 6 A/B-tested roles needed routing changes after real testing — proving that benchmarks alone are insufficient for optimal routing.
|
|
146
|
-
|
|
147
|
-
</details>
|
|
94
|
+
If Codex is absent when `--engine auto` or `--engine codex` is requested, the harness silently downgrades to `--engine claude` and emits a banner in the final report.
|
|
148
95
|
|
|
149
96
|
<details>
|
|
150
97
|
<summary><strong>What's new in 1.14.0</strong> — CPO lens + handoff enforcement</summary>
|
|
@@ -169,7 +116,7 @@ Works across the full pipeline:
|
|
|
169
116
|
Core pipeline skills (`ideate`, `auto-resolve`, `preflight`) rewritten against Anthropic's Opus 4.7 prompting guidance, validated by multi-round comprehension and quality-grading subagents.
|
|
170
117
|
|
|
171
118
|
- **4.7 prompt patterns** — `<investigate_before_answering>` on evaluator and challenge, `<coverage_over_filtering>` with per-finding confidence, 3 few-shot examples in the Challenge phase, `<orchestrator_context>` (auto-compaction + xhigh effort), `<use_parallel_tool_calls>` in ideate EXPLORE and preflight Phase 0.
|
|
172
|
-
- **`--with-codex` consolidated into `--engine auto`** — auto
|
|
119
|
+
- **`--with-codex` consolidated into `--engine auto`** — auto covers BUILD/FIX + team roles + ideate CHALLENGE critic. Legacy flag still accepted with a graceful handoff. *(Note: post iter-0020 close-out, `--engine auto` is experimental research-only; default is `--engine claude`.)*
|
|
173
120
|
- **Bug fixes** — PHASE 1.5 BLOCKED browser failures re-route correctly via PHASE 2.5; PHASE 1.4-fix and PHASE 2.5 share one global round counter; preflight PHASE 1 numbering fixed; build-gate-exhausted now produces a graceful final report.
|
|
174
121
|
- **CLAUDE.md refresh** (shipped to `npx` installers) — Quick Start pointing to ideate → auto-resolve → preflight, Context Window Management updated for Opus 4.7 auto-compaction, terminology refresh (TodoWrite → task tools, Task agents → Agent subagents).
|
|
175
122
|
|
|
@@ -177,47 +124,16 @@ Core pipeline skills (`ideate`, `auto-resolve`, `preflight`) rewritten against A
|
|
|
177
124
|
|
|
178
125
|
---
|
|
179
126
|
|
|
180
|
-
##
|
|
181
|
-
|
|
182
|
-
When you want step-by-step control instead of the full pipeline.
|
|
183
|
-
|
|
184
|
-
### Debugging & Resolution
|
|
185
|
-
|
|
186
|
-
| Command | Use When |
|
|
187
|
-
|---|---|
|
|
188
|
-
| `/devlyn:resolve` | Simple bugs (1-2 files) |
|
|
189
|
-
| `/devlyn:team-resolve` | Complex issues — spawns root-cause analyst, test engineer, security auditor |
|
|
190
|
-
| `/devlyn:browser-validate` | Test a web feature in a real browser (Chrome MCP → Playwright → curl fallback) |
|
|
127
|
+
## Optional Power-User Skills
|
|
191
128
|
|
|
192
|
-
|
|
129
|
+
Two creative skills have moved to `optional-skills/` — install them via the interactive installer when you need them.
|
|
193
130
|
|
|
194
131
|
| Command | Use When |
|
|
195
132
|
|---|---|
|
|
196
|
-
| `/devlyn:
|
|
197
|
-
| `/devlyn:team-
|
|
198
|
-
| `/devlyn:evaluate` | Grade work against done-criteria with calibrated skepticism |
|
|
199
|
-
| `/devlyn:clean` | Remove dead code, unused deps, complexity hotspots |
|
|
200
|
-
|
|
201
|
-
### UI Design Pipeline
|
|
202
|
-
|
|
203
|
-
| Step | Command | What It Does |
|
|
204
|
-
|---|---|---|
|
|
205
|
-
| 1 | `/devlyn:design-ui` | Generate 5 distinct style explorations |
|
|
206
|
-
| 2 | `/devlyn:design-system` | Extract design tokens from chosen style |
|
|
207
|
-
| 3 | `/devlyn:implement-ui` | Team builds it — component architect, UX, accessibility, responsive, visual QA |
|
|
133
|
+
| `/devlyn:design-system` | Extract exact design tokens (colors, type scale, spacing) from a chosen UI style |
|
|
134
|
+
| `/devlyn:team-design-ui` | Multi-perspective design team generates 5 distinct UI style explorations |
|
|
208
135
|
|
|
209
|
-
>
|
|
210
|
-
|
|
211
|
-
### Planning & Docs
|
|
212
|
-
|
|
213
|
-
| Command | What It Does |
|
|
214
|
-
|---|---|
|
|
215
|
-
| `/devlyn:preflight` | Verify codebase matches vision/roadmap — gap analysis with evidence |
|
|
216
|
-
| `/devlyn:product-spec` | Generate or update product specs |
|
|
217
|
-
| `/devlyn:feature-spec` | Turn product spec → implementable feature spec |
|
|
218
|
-
| `/devlyn:discover-product` | Scan codebase → auto-generate product docs |
|
|
219
|
-
| `/devlyn:recommend-features` | Prioritize top 5 features to build next |
|
|
220
|
-
| `/devlyn:update-docs` | Sync all docs with current codebase |
|
|
136
|
+
> Earlier versions of devlyn-cli shipped 16+ skills (auto-resolve / preflight / evaluate / review / team-review / clean / update-docs / browser-validate / product-spec / feature-spec / recommend-features / discover-product / design-ui / implement-ui). These were consolidated into `/devlyn:resolve` (which folds verification, review, and cleanup into its phases) plus `/devlyn:ideate` (which absorbs the planning surfaces) in the iter-0034 Phase 4 cutover (2026-05-04). Upgrades automatically remove the legacy skill directories from `~/.claude/skills/`.
|
|
221
137
|
|
|
222
138
|
---
|
|
223
139
|
|
|
@@ -231,7 +147,6 @@ These activate automatically — no commands needed. They shape how Claude think
|
|
|
231
147
|
| `code-review-standards` | Reviews — severity framework, approval criteria |
|
|
232
148
|
| `ui-implementation-standards` | UI work — design fidelity, accessibility, responsiveness |
|
|
233
149
|
| `code-health-standards` | Maintenance — dead code prevention, complexity thresholds |
|
|
234
|
-
| `workflow-routing` | Any task — guides you to the right command |
|
|
235
150
|
|
|
236
151
|
---
|
|
237
152
|
|
|
@@ -253,6 +168,9 @@ Selected during install. Run `npx devlyn-cli` again to add more.
|
|
|
253
168
|
| `dokkit` | Document template filling for DOCX/HWPX |
|
|
254
169
|
| `devlyn:pencil-pull` | Pull Pencil designs into code |
|
|
255
170
|
| `devlyn:pencil-push` | Push codebase UI to Pencil canvas |
|
|
171
|
+
| `devlyn:reap` | Safely reap orphaned MCP / codex / Superset child processes |
|
|
172
|
+
| `devlyn:design-system` | Extract design tokens from a chosen UI style for exact reproduction |
|
|
173
|
+
| `devlyn:team-design-ui` | 5 distinct UI style explorations from a full design team |
|
|
256
174
|
|
|
257
175
|
</details>
|
|
258
176
|
|
|
@@ -274,8 +192,9 @@ Selected during install. Run `npx devlyn-cli` again to add more.
|
|
|
274
192
|
|
|
275
193
|
| Server | Description |
|
|
276
194
|
|---|---|
|
|
277
|
-
| `
|
|
278
|
-
|
|
195
|
+
| `playwright` | Playwright MCP — powers `/devlyn:resolve` BUILD_GATE browser tier (Chrome MCP → Playwright → curl fallback) |
|
|
196
|
+
|
|
197
|
+
> `--engine auto/codex` uses the local `codex` CLI binary, not MCP. Install from https://platform.openai.com/docs/codex; the harness silently downgrades to `--engine claude` if the CLI is missing.
|
|
279
198
|
|
|
280
199
|
</details>
|
|
281
200
|
|
|
@@ -290,9 +209,8 @@ Selected during install. Run `npx devlyn-cli` again to add more.
|
|
|
290
209
|
|
|
291
210
|
## Contributing
|
|
292
211
|
|
|
293
|
-
- **Add a command** — `.md` file in `config/commands/`
|
|
294
212
|
- **Add a skill** — directory in `config/skills/` with `SKILL.md`
|
|
295
|
-
- **Add optional skill** — add to `optional-skills/` and `OPTIONAL_ADDONS`
|
|
213
|
+
- **Add optional skill** — add to `optional-skills/` and `OPTIONAL_ADDONS` in [`bin/devlyn.js`](bin/devlyn.js)
|
|
296
214
|
- **Suggest a pack** — PR to the pack list
|
|
297
215
|
|
|
298
216
|
## Star History
|