devlyn-cli 4.1.0 → 4.2.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 +10 -94
- package/CLAUDE.md +7 -160
- package/LICENSE +21 -0
- package/README.md +65 -110
- package/bin/devlyn.js +95 -116
- package/bin/instruction-templates.json +43 -2
- package/bin/instructions.js +29 -8
- package/config/skills/_shared/adapters/claude.md +8 -85
- package/config/skills/_shared/adapters/codex.md +14 -34
- package/config/skills/_shared/adapters/omp.md +1 -11
- package/config/skills/_shared/codex-monitored.sh +4 -54
- package/config/skills/_shared/engine-doctor.sh +18 -58
- package/config/skills/_shared/engine-preflight.md +15 -47
- package/config/skills/_shared/expected-contract.py +242 -0
- package/config/skills/_shared/expected.schema.json +10 -95
- package/config/skills/_shared/invocation-receipt.py +26 -757
- package/config/skills/_shared/platform-support.py +37 -28
- package/config/skills/_shared/role-config.py +100 -421
- package/config/skills/_shared/runtime-principles.md +17 -93
- package/config/skills/_shared/task-complete.py +490 -285
- package/config/skills/_shared/task-completion.md +235 -0
- package/config/skills/devlyn-engines/SKILL.md +9 -11
- package/config/skills/devlyn-ideate/SKILL.md +57 -107
- package/config/skills/devlyn-ideate/references/elicitation.md +18 -99
- package/config/skills/devlyn-ideate/references/loop.md +110 -0
- package/config/skills/devlyn-ideate/references/package-format.md +128 -0
- package/config/skills/devlyn-ideate/scripts/acceptance.py +795 -0
- package/config/skills/devlyn-ideate/scripts/queue.py +1780 -0
- package/package.json +2 -3
- package/config/commit-conventions.md +0 -28
- package/config/skills/_shared/adapters/README.md +0 -74
- package/config/skills/_shared/adapters/grok.md +0 -100
- package/config/skills/_shared/archive_run.py +0 -969
- package/config/skills/_shared/codex-config.md +0 -81
- package/config/skills/_shared/collect-codex-findings.py +0 -505
- package/config/skills/_shared/finish-gate.py +0 -521
- package/config/skills/_shared/grok-anchor-guard.py +0 -78
- package/config/skills/_shared/judge-output-parser.py +0 -200
- package/config/skills/_shared/judge-role-evidence.py +0 -320
- package/config/skills/_shared/phase-prompt-render.py +0 -183
- package/config/skills/_shared/process-evidence.py +0 -926
- package/config/skills/_shared/resolve-bootstrap.py +0 -1410
- package/config/skills/_shared/resolve-stop-hook.py +0 -359
- package/config/skills/_shared/run-bounded.py +0 -58
- package/config/skills/_shared/spec-verify-check.py +0 -5083
- package/config/skills/_shared/state-phase-write.py +0 -5989
- package/config/skills/_shared/terminal-claim-check.py +0 -777
- package/config/skills/_shared/verify-merge-findings.py +0 -3528
- package/config/skills/devlyn-design-ui/SKILL.md +0 -650
- package/config/skills/devlyn-ideate/references/from-spec-mode.md +0 -61
- package/config/skills/devlyn-ideate/references/project-mode.md +0 -80
- package/config/skills/devlyn-ideate/references/spec-template.md +0 -121
- package/config/skills/devlyn-ideate/references/templates/decision.md +0 -48
- package/config/skills/devlyn-ideate/references/templates/roadmap.md +0 -50
- package/config/skills/devlyn-ideate/references/templates/vision.md +0 -44
- package/config/skills/devlyn-queue/SKILL.md +0 -66
- package/config/skills/devlyn-queue/scripts/append.py +0 -94
- package/config/skills/devlyn-resolve/SKILL.md +0 -379
- package/config/skills/devlyn-resolve/references/free-form-mode.md +0 -71
- package/config/skills/devlyn-resolve/references/outer-loop.md +0 -23
- package/config/skills/devlyn-resolve/references/phases/build-gate.md +0 -75
- package/config/skills/devlyn-resolve/references/phases/cleanup.md +0 -33
- package/config/skills/devlyn-resolve/references/phases/implement.md +0 -44
- package/config/skills/devlyn-resolve/references/phases/plan.md +0 -39
- package/config/skills/devlyn-resolve/references/phases/probe-derive.md +0 -261
- package/config/skills/devlyn-resolve/references/phases/surface-close.md +0 -34
- package/config/skills/devlyn-resolve/references/phases/verify.md +0 -310
- package/config/skills/devlyn-resolve/references/state-schema.md +0 -152
- package/config/skills/devlyn-resolve/references/task-completion.md +0 -160
- package/config/templates/prompt-templates.md +0 -71
- package/config/templates/template-feature.spec.md +0 -255
- package/config/templates/template-product-spec.md +0 -680
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
### Context, Harness & Loop Engineering Toolkit for AI Coding Agents
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
**Engineering principles for every coding agent, and a loop designer that turns one intent into tasks agents drain without you.**
|
|
12
12
|
|
|
13
13
|
[](https://www.npmjs.com/package/devlyn-cli)
|
|
14
14
|
[](https://www.npmjs.com/package/devlyn-cli)
|
|
@@ -27,129 +27,62 @@ 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 installer asks
|
|
30
|
+
That's it. The installer asks:
|
|
31
31
|
|
|
32
32
|
1. **What** — `AGENTS.md — Codex · omp · Pi · Grok` (checked) and `CLAUDE.md — Claude Code` (checked when this project already has a devlyn Claude install). Space toggles, Enter confirms.
|
|
33
33
|
2. **Where** — `This project` (default) or `Global — every project on this machine`.
|
|
34
|
+
3. **Optional skills & packs** — none checked; see [Optional Add-ons](#optional-add-ons) below. MCP servers are offered only with CLAUDE.md.
|
|
34
35
|
|
|
35
|
-
In a project, AGENTS.md readers load the skills from `.agents/skills/`; Claude Code loads only `.claude/skills/` and reads AGENTS.md when the project has no CLAUDE.md. Global installs skills only: `~/.agents/skills/` (omp, Pi, Grok) and `~/.codex/skills/` (Codex), plus `~/.claude/skills/` for Claude Code. Every target gets the `devlyn-
|
|
36
|
+
In a project, AGENTS.md readers load the skills from `.agents/skills/`; Claude Code loads only `.claude/skills/` and reads AGENTS.md when the project has no CLAUDE.md; a CLAUDE.md the installer creates imports an existing AGENTS.md (`@AGENTS.md`). Global installs skills only: `~/.agents/skills/` (omp, Pi, Grok) and `~/.codex/skills/` (Codex), plus `~/.claude/skills/` for Claude Code. Every target gets the `devlyn-ideate` skill and the `devlyn-engines` utility. In Codex / omp / Pi, invoke them as skills (`$devlyn-ideate`); in Claude Code and Grok they're slash commands (`/devlyn-ideate`). Rerunning refreshes skills and the managed instruction block while preserving project rules outside it. See [Migration from earlier versions](#migration-from-earlier-versions) for legacy migration and merge recovery.
|
|
36
37
|
|
|
37
38
|
Without prompts, `npx devlyn-cli -y` installs AGENTS.md + `.agents/skills/` plus every target this project already has; add `--claude` for Claude Code. With `--global` it installs for every project on this machine, plus `~/.claude/skills/` with `--claude` or when it already has a devlyn install.
|
|
38
39
|
|
|
39
40
|
---
|
|
40
41
|
|
|
41
|
-
## How It Works —
|
|
42
|
+
## How It Works — Principles and Loops
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
The managed `CLAUDE.md` / `AGENTS.md` block carries the North Star, seven principles (no workaround, no overengineering, no guesswork, worldclass, best practice, optimized, production ready) and three discipline rules, plus short pointers to the skills. Agents do the work directly under it; for work that splits into tasks, ideate designs a loop and drains it:
|
|
44
45
|
|
|
45
46
|
```
|
|
46
|
-
|
|
47
|
+
intent → direct work under the installed principles, or an ideate loop → ship
|
|
47
48
|
```
|
|
48
49
|
|
|
49
|
-
Non-Claude agents (Codex / omp / Pi / Grok): the AGENTS.md choice installs the
|
|
50
|
+
Non-Claude agents (Codex / omp / Pi / Grok): the AGENTS.md choice installs the skills for them. In Codex / omp / Pi, use `$devlyn-ideate`; in Grok, use `/devlyn-ideate`, the same slash-command form as Claude Code. A drain from Pi or Grok needs [a pinned executor](#executor--devlyn-engines).
|
|
50
51
|
|
|
51
|
-
###
|
|
52
|
+
### Plan and drain loops — `/devlyn-ideate`
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
Give ideate an intent or a document. It writes a loop package — a meta-prompt plus self-contained task contracts with mechanical acceptance — and agents drain the tasks one by one without you.
|
|
54
55
|
|
|
55
|
-
|
|
56
|
-
/devlyn-ideate "I want to build a habit tracking app with AI nudges"
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Default mode produces a `docs/specs/<id>-<slug>/spec.md` plus `spec.expected.json` (mechanical verification block) that `/devlyn-resolve --spec` consumes directly. Modes:
|
|
60
|
-
|
|
61
|
-
| Mode | When to use |
|
|
56
|
+
| Command | What it does |
|
|
62
57
|
|---|---|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
|
66
|
-
|
|
|
58
|
+
| `/devlyn-ideate plan <intent or document>` | Inspects the project, asks only what it must, and writes a validated package to `docs/specs/<loop-id>/`. Nothing is queued or run. |
|
|
59
|
+
| `/devlyn-ideate add <intent or package>` | Plans when needed, then queues the package's tasks in dependency order. It makes no commit on your branch: the package and its rows in `docs/specs/<loop-id>/queue.md` are held at `refs/devlyn/captures/<loop-id>` and your copies are removed. The first task's commit brings them into history, and the drain report's `Bring into` command brings the result into your branch. |
|
|
60
|
+
| `/devlyn-ideate status` | Pending, active, accepted and failed counts; the next runnable task; delivery and recovery blockers. |
|
|
61
|
+
| `/devlyn-ideate drain` | Runs the queue serially and hands-free. |
|
|
67
62
|
|
|
68
|
-
|
|
63
|
+
A bare intent is planned and, when your request authorizes the work, added and drained without another confirmation; no arguments shows status. Questions come only when the answer changes behavior, scope, data semantics, acceptance or delivery, each with a recommended answer; `--autonomous` plans without questions, recording ordinary low-consequence, reversible defaults within the request, including user-visible details; material ambiguity in intended outcomes, persistent data or state semantics, or public surface beyond the request stops planning with a concrete question. Each task runs in its own worktree with the executor pinned by `/devlyn-engines` (default: the CLI you opened; Pi and Grok need a pin) under your installed CLAUDE.md/AGENTS.md instructions. Tasks start from committed state, the branch you added the loop on or the remote base for `auto`/`pr`, so commit the installer's changes and whatever a plan depends on before adding a loop, and push them for `auto`/`pr`. It is marked `[x]` only when its declared checks pass on its committed source and its required reviews cover it: the checks run through the drain's runner (a wholly clean run the executor lists for that source is reused; the drain runs any other check itself), and review coverage is attested by records the executor submits; a failed task becomes `[F]` with its reason and blocks only its dependents. An interrupted drain resumes without repeating accepted work. `--local-only` (or `--no-push`) keeps delivery local: each accepted task stays on its `devlyn/<loop-id>/<task-id>` branch in a retained worktree, nothing is merged or pushed, and the drain report's `Bring into` command is `git merge --ff <latest accepted task branch>`.
|
|
69
64
|
|
|
70
|
-
###
|
|
71
|
-
|
|
72
|
-
Inspect the requested behavior, affected callers and tests first. Default to direct work when its scope and verification are tractable, including bounded multi-file changes; honor constraints and executor pins, run risk-proportionate checks and independent review for consequential changes, then review the diff and deliver. Automatically use full `/devlyn-resolve` only for concrete interacting requirements or verification too complex to manage reliably in the current context, such as coupled durable state, concurrent ownership and failure recovery. Domain labels, file count and a spec document alone do not trigger it. Investigate or clarify missing intent/access first. Explicit resolve (including small tasks), explicit spec-mode workflows and queue drains keep the full workflow below.
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
/devlyn-resolve "fix the login bug" # free-form
|
|
76
|
-
/devlyn-resolve --spec docs/specs/2026-05-04-auth/spec.md # spec mode
|
|
77
|
-
/devlyn-resolve --verify-only <diff-or-PR-ref> --spec <path> # verify-only
|
|
78
|
-
```
|
|
65
|
+
### Delivery
|
|
79
66
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
PLAN → IMPLEMENT → BUILD_GATE → CLEANUP → VERIFY (fresh subagent, findings-only)
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
- **PLAN** runs in the owner context and freezes requirements, verification and the authorized file surface before implementation.
|
|
87
|
-
- **BUILD_GATE** runs commands in the owner context without another model invocation, using 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.
|
|
88
|
-
- **VERIFY** runs in a fresh subagent context with no code-mutation tools — findings only, structurally independent.
|
|
89
|
-
- Git checkpoints at every phase for safe rollback. Fix-loop budget shared across BUILD_GATE, CLEANUP and VERIFY (`--max-rounds N`, default 4).
|
|
90
|
-
|
|
91
|
-
Common flags: `--engine claude|codex|omp` (default: the orchestrator-supported default), `--role-config <path>` (one-run worker/judge profiles, see below), `--bypass build-gate,cleanup`, `--pair-verify` (force pair-mode JUDGE in VERIFY), `--no-pair` (intentional solo VERIFY), `--risk-probes` / `--no-risk-probes`, `--perf` (per-phase timing).
|
|
92
|
-
`--pair-verify` and `--no-pair` are mutually exclusive; using both stops with `BLOCKED:invalid-flags`.
|
|
93
|
-
|
|
94
|
-
Each task gets its own linked worktree; accepted tasks default to scoped commit → push → PR
|
|
95
|
-
→ merge when the repository allows it (otherwise the PR waits for a person). After the
|
|
67
|
+
Direct work edits your current checkout; run parallel sessions in separate worktrees (for example `claude -w`). Completed, verified direct requests with changes, and
|
|
68
|
+
every drained task, are delivered by project policy from their own linked worktrees. A commit request stays local and a PR request stops at the PR; otherwise accepted tasks default to
|
|
69
|
+
scoped commit → push → PR → merge when the repository allows it (otherwise the PR waits for a person). After the
|
|
96
70
|
PR merges, the worktree and branch its session released are cleaned; anything in use is
|
|
97
71
|
kept. Set `git config --local devlyn.completionMode pr` to stop at the PR; `task-complete.py complete --mode auto|pr`
|
|
98
|
-
overrides one task. Local-only/no-push instructions take precedence;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
72
|
+
overrides one task. Local-only/no-push instructions take precedence: nothing is pushed or merged;
|
|
73
|
+
a direct task's commit is fast-forwarded into your branch when that is safe, and a drained task
|
|
74
|
+
stays on its task branch in its retained worktree. Existing
|
|
75
|
+
branches cannot be adopted. Direct tasks use their actual checks and root
|
|
76
|
+
acceptance. Pending checks or unsupported merge policy retain resources and
|
|
102
77
|
report a receipt-based resume command separately from product verification.
|
|
103
|
-
See [task completion](config/skills/
|
|
78
|
+
See [task completion](config/skills/_shared/task-completion.md)
|
|
104
79
|
for allocation, acceptance, writer cessation and recovery.
|
|
105
80
|
|
|
106
|
-
###
|
|
107
|
-
|
|
108
|
-
Stack tasks to run back-to-back without supervision. `/devlyn-queue add "<intent>"` appends to `docs/specs/queue.md` (an ordered checklist); `/devlyn-queue drain` runs each item serially — spec it, run the resolve outer loop, commit `[x]` done or `[F]` blocked with a reason, then complete eligible delivery once. Product verdict and delivery status are separate. A blocked product otherwise never halts the queue; pending delivery retains its branch, and the next item requires separate safe placement. Unattended runs only take scope-narrowing, reversible defaults — anything user-visible or ambiguous is marked `[F] needs-review` for you to adjudicate afterward. `/devlyn-queue` with no args shows status.
|
|
81
|
+
### Executor — `/devlyn-engines`
|
|
109
82
|
|
|
110
|
-
|
|
83
|
+
The orchestrator is the CLI you opened (Claude Code, Codex, omp, Pi or Grok); the contract is symmetric (`CLAUDE.md` ↔ `AGENTS.md`), so the loop's file artifacts carry over if you switch. The executor does the implementation work, direct or drained: the engine pinned in machine-local `.devlyn/engines.json`, else the CLI you opened. Pi and Grok have no executor adapter, so a drain from them needs `devlyn-engines executor <claude|codex|omp>`.
|
|
111
84
|
|
|
112
|
-
devlyn
|
|
113
|
-
|
|
114
|
-
- **Orchestrator** — the CLI you opened (Claude Code, Codex, or omp) that drives the conversation and loop. The contract is symmetric (`CLAUDE.md` ↔ `AGENTS.md`), so the same phase-gated pipeline runs whichever you launch; the file artifacts (spec, queue, state) carry over if you switch.
|
|
115
|
-
- **Executor** (legacy) — the worker for IMPLEMENT, its included code/doc cleanup, and their repair rounds, and the primary VERIFY judge, unless either is separately profiled (below). Defaults to the orchestrator-supported default. PLAN is orchestrator-fixed and never inherits `--engine` or an executor pin. An absent primary profile follows the legacy executor, not an opt-in worker profile.
|
|
116
|
-
- **Pair judge** — the first available *other* engine, default for VERIFY and conditional for risk probes.
|
|
117
|
-
|
|
118
|
-
`--engine <name>` sets the legacy executor for one run as an engine-only entry (it clears any lower-precedence profile's model/effort). PLAN stays in the owner context; BUILD_GATE/CLEANUP run owner commands; risk-probe derivation keeps its existing route. VERIFY/JUDGE runs pair mode by default when the OTHER engine is available.
|
|
119
|
-
|
|
120
|
-
Pin roles durably with `/devlyn-engines` (no args shows the role table + detected engines; `executor <name>` / `pair <name>,...` / `role <worker|primary_judge|pair_judge> <JSON object>` / `role <name> clear` manage the pins, stored machine-local in `.devlyn/engines.json`; `clear` removes all legacy and role pins, preserves unrelated keys, and deletes an empty file). Pins fail closed: an unavailable pinned engine stops with `BLOCKED:<engine>-unavailable`, and a name with no `_shared/adapters/<name>.md` adapter stops with `BLOCKED:invalid-engine-config`. New engines plug in by shipping an adapter file — no skill changes.
|
|
121
|
-
|
|
122
|
-
#### Explicit worker and judge profiles
|
|
123
|
-
|
|
124
|
-
`.devlyn/engines.json` may add a `roles` object with `worker`, `primary_judge`, and `pair_judge` entries. Each entry requires `engine` and accepts an optional exact `model` ID and `effort`; unknown fields, aliases (`default`, `auto`, `opus`, `sonnet`, `fable`, `codex` as a model), null/empty values, and duplicate keys stop with `BLOCKED:invalid-engine-config`. Only the project's own `.devlyn/engines.json` is read — no parent or global lookup. Example (an example, not a default or ranking):
|
|
125
|
-
|
|
126
|
-
```json
|
|
127
|
-
{
|
|
128
|
-
"executor": "codex",
|
|
129
|
-
"pair_judge_priority": ["claude"],
|
|
130
|
-
"roles": {
|
|
131
|
-
"worker": {"engine": "codex", "model": "gpt-6-astra", "effort": "xhigh"},
|
|
132
|
-
"primary_judge": {"engine": "codex", "model": "gpt-6-astra", "effort": "high"},
|
|
133
|
-
"pair_judge": {"engine": "claude", "model": "claude-fable-5-1", "effort": "medium"}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
`--role-config <path>` supplies the same `{"roles": {...}}` object for one run only, with no other top-level keys; the flag may appear once.
|
|
139
|
-
|
|
140
|
-
- **Precedence** — an entry replaces the lower one as a whole; model/effort never merge across engines. Worker and primary judge: run `--role-config` entry > `--engine` (engine-only) > project role entry > legacy executor/default. Pair judge: run entry > project entry > `pair_judge_priority` / the OTHER-engine complement. A missing `model`/`effort` keeps that route's current default and is shown as inherited/unresolved.
|
|
141
|
-
- **Boundaries** — `worker` covers IMPLEMENT, its included code/doc cleanup, and their repair rounds; `primary_judge` and `pair_judge` cover VERIFY only. PLAN stays orchestrator-fixed, BUILD_GATE/CLEANUP run owner commands, and risk-probe derivation stays outside these controls. OTHER must differ from the primary by engine: an explicit same-engine pair is `BLOCKED:invalid-engine-config`. `--no-pair` is unchanged — explicit solo VERIFY; an unused pair entry is neither dispatched nor availability-checked.
|
|
142
|
-
- **Initial explicit routes** — Codex worker/primary/pair accept exact `model` + `effort` (dispatched as `-m` / `-c model_reasoning_effort=`, validated against the installed Codex CLI's native model metadata for its version). Claude primary/pair judges pass an exact `model` as `--model` and validate native result identity; model-only selection needs no source update for a new ID. Explicit `effort` separately requires the adapter's version/model support declaration. The Claude worker stays the native `Agent` route and is engine-only: explicit `model`/`effort` on a Claude worker is `BLOCKED:unsupported-role-option` — a supported-route boundary, not a claim that Claude cannot implement. Other adapters (omp, grok) are engine-only for their eligible roles.
|
|
143
|
-
- **Errors** — `BLOCKED:unsupported-role-option` names the role, engine and field with guidance; there is no clamp, fallback, substituted model, or weaker retry. An explicitly selected engine (flag, pin, or profile) that is unavailable stops with `BLOCKED:<engine>-unavailable`. A native warning that a requested option was ignored is a failed promise even at exit 0.
|
|
144
|
-
- **Requested vs observed** — `/devlyn-engines` status prints each role's requested engine/model/effort, source and dispatch channel before dispatch; it describes a request and does not prove a native invocation happened. Effective model is reported only with native evidence; a Codex worker receipt binds requested dispatch and leaves effective model unknown. A reported worker model reroute blocks completion even at exit 0. SURFACE_CLOSE inherits native Claude model settings and records the model from its required JSON result. Effective effort stays unknown unless native evidence establishes it — invocation arguments prove dispatch, not provider-internal reasoning.
|
|
145
|
-
|
|
146
|
-
`--engine codex` routes IMPLEMENT and its included code/doc cleanup to Codex as a supported engine-only route (exact model/effort via the profiles above). Historical record: 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). Separately, PLAN-pair remains research-only: iter-0033g + iter-0034 closed it 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:
|
|
147
|
-
|
|
148
|
-
```
|
|
149
|
-
/devlyn-resolve "fix the auth bug" --engine codex
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
If an engine is absent when explicitly selected by flag, pin, or role profile, or OTHER engine is absent under `--pair-verify`, the harness stops with `BLOCKED:<engine>-unavailable` and prints setup guidance. Automatic VERIFY absence is a reported solo route. Use `--no-pair` only when intentionally accepting solo VERIFY; use `--no-risk-probes` only when intentionally disabling automatic high-risk probes.
|
|
85
|
+
`/devlyn-engines` with no arguments shows the executor and the engines detected on this machine; `executor <name>` pins one and `clear` removes the pin. A pin is a promise: an unavailable pinned engine stops dispatch with `BLOCKED:<engine>-unavailable`, and a name with no executor-eligible `_shared/adapters/<name>.md` stops with `BLOCKED:invalid-engine-config`. Adapters ship with devlyn-cli releases; a reinstall replaces `_shared`.
|
|
153
86
|
|
|
154
87
|
### Migration from earlier versions
|
|
155
88
|
|
|
@@ -180,9 +113,27 @@ install no longer refreshes them and names each one it finds. Refresh them with
|
|
|
180
113
|
or delete them; delete `~/.grok/skills`, since Grok now reads `~/.agents/skills`.
|
|
181
114
|
`npx devlyn-cli agents` was removed.
|
|
182
115
|
|
|
183
|
-
<!-- legacy-surface-map:begin — retired command names below are documented as OLD, not current; lint
|
|
116
|
+
<!-- legacy-surface-map:begin — retired command names below are documented as OLD, not current; lint Checks 5e and 10c skip this block -->
|
|
117
|
+
Upgrading to 4.2.0: `/devlyn-resolve` and the pipeline helpers only it used are retired;
|
|
118
|
+
no measured replacement ships in their place. Run the installer again where devlyn is
|
|
119
|
+
installed. It removes the `devlyn-resolve` folders (and pre-4.0.0 `devlyn:resolve` ones)
|
|
120
|
+
where it installs, removes the Stop hook it added to `.claude/settings.json` while keeping
|
|
121
|
+
your own hooks, and names the other settings it once added for the pipeline
|
|
122
|
+
(`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` and its `.devlyn` and git permissions) without
|
|
123
|
+
deleting them. `/devlyn-engines` keeps only the executor pin: `pair_judge_priority` and
|
|
124
|
+
`roles` in `.devlyn/engines.json` stay as written, select nothing, and `clear` removes them.
|
|
125
|
+
`task-complete.py` refuses acceptance that points at an archived resolve run
|
|
126
|
+
(`kind: pipeline`) before changing anything, and prints the command that finishes the run
|
|
127
|
+
with the release that produced it: `npm pack devlyn-cli@4.1.0`, extract the tarball, and run
|
|
128
|
+
`python3 package/config/skills/_shared/task-complete.py complete --receipt <receipt>
|
|
129
|
+
--acceptance <acceptance>` with your delivery flags. A PR/merge completion there binds the
|
|
130
|
+
acceptance before publishing, and a receipt it binds resumes delivery with the current
|
|
131
|
+
helper; with `--local-only` it ends as LOCAL_ONLY without binding, as 4.1.0 always did. To
|
|
132
|
+
keep using resolve itself, stay on `devlyn-cli@4.1.0`. The Claude target no longer installs
|
|
133
|
+
`.claude/templates`; a copy an earlier release installed stays yours.
|
|
134
|
+
|
|
184
135
|
Upgrading to 4.0.0: every devlyn skill is renamed to the Agent Skills standard
|
|
185
|
-
(`/devlyn:
|
|
136
|
+
(`/devlyn:ideate` → `/devlyn-ideate`; the full list is in the table below). Run the
|
|
186
137
|
installer in each project that has devlyn (`npx devlyn-cli`, or `-y` with `--claude` and
|
|
187
138
|
`--global` as needed): each run removes the old folders
|
|
188
139
|
where it installs and keeps an optional skill you had under its new name. A 3.x installer run
|
|
@@ -193,15 +144,18 @@ devlyn skill by its old name or path (for example Codex `[[skills.config]]` or o
|
|
|
193
144
|
`disabledExtensions`) needs the new name. A project that committed the old `devlyn:*`
|
|
194
145
|
folders checks out on Windows once that re-sync is committed.
|
|
195
146
|
|
|
196
|
-
Earlier versions of devlyn-cli shipped 16+ slash commands. The iter-0034 Phase 4 cutover (2026-05-04) and the 2026-05-14 follow-up consolidated them
|
|
147
|
+
Earlier versions of devlyn-cli shipped 16+ slash commands. The iter-0034 Phase 4 cutover (2026-05-04) and the 2026-05-14 follow-up consolidated them, 4.0.0 renamed every devlyn skill to the Agent Skills naming standard (`devlyn-<name>`: lowercase, digits and hyphens, the same as its folder), and after 4.1.0 resolve and design-ui were retired and the queue moved into ideate. Upgrades automatically purge the legacy skill directories.
|
|
197
148
|
|
|
198
149
|
| Old command | Now use |
|
|
199
150
|
|---|---|
|
|
200
|
-
| `/devlyn:auto-resolve`, `/devlyn:preflight`, `/devlyn:evaluate`, `/devlyn:review`, `/devlyn:team-resolve`, `/devlyn:team-review`, `/devlyn:clean`, `/devlyn:update-docs`, `/devlyn:browser-validate`, `/devlyn:implement-ui` |
|
|
151
|
+
| `/devlyn:auto-resolve`, `/devlyn:preflight`, `/devlyn:evaluate`, `/devlyn:review`, `/devlyn:team-resolve`, `/devlyn:team-review`, `/devlyn:clean`, `/devlyn:update-docs`, `/devlyn:browser-validate`, `/devlyn:implement-ui` | Folded into resolve, now retired — work directly under the installed principles |
|
|
201
152
|
| `/devlyn:product-spec`, `/devlyn:feature-spec`, `/devlyn:recommend-features`, `/devlyn:discover-product` | `/devlyn-ideate` |
|
|
202
|
-
| `/devlyn:team-design-ui` | `/devlyn-design-ui` (now always spawns the 5-specialist team — Creative Director, Product Designer, Visual Designer, Interaction Designer, Accessibility Designer) |
|
|
203
153
|
| `/devlyn:design-system` | Removed 2026-05-14 — no replacement |
|
|
204
|
-
| `/devlyn:
|
|
154
|
+
| `/devlyn:ideate`, `/devlyn:engines`, `devlyn:pencil-pull`, `devlyn:pencil-push`, `devlyn:reap` (3.x and earlier) | `/devlyn-ideate`, `/devlyn-engines`, `devlyn-pencil-pull`, `devlyn-pencil-push`, `devlyn-reap` (4.0.0) |
|
|
155
|
+
| `/devlyn:resolve` (3.x and earlier), `/devlyn-resolve` (4.0.0–4.1.0) | Retired — work directly under the installed principles; `/devlyn-ideate` plans and drains multi-task work |
|
|
156
|
+
| `/devlyn:queue` (3.x and earlier), `/devlyn-queue` (4.0.0–4.1.0) | `/devlyn-ideate add`, `status` and `drain` |
|
|
157
|
+
| `/devlyn-ideate --quick`, `--from-spec`, `--project` (4.1.0 and earlier) | `/devlyn-ideate plan`; `--autonomous` replaces `--quick` |
|
|
158
|
+
| `/devlyn:team-design-ui`, `/devlyn:design-ui` (3.x and earlier), `/devlyn-design-ui` (4.0.0–4.1.0) | Retired — no replacement |
|
|
205
159
|
<!-- legacy-surface-map:end -->
|
|
206
160
|
|
|
207
161
|
---
|
|
@@ -220,6 +174,7 @@ Selected during install. Run `npx devlyn-cli` again to add more.
|
|
|
220
174
|
| `generate-skill` | Create Claude Code skills following Anthropic best practices |
|
|
221
175
|
| `prompt-engineering` | Claude prompt optimization |
|
|
222
176
|
| `better-auth-setup` | Better Auth + Hono + Drizzle + PostgreSQL |
|
|
177
|
+
| `polar-billing-setup` | Polar usage-based / metered billing — setup and silent $0-billing diagnosis |
|
|
223
178
|
| `pyx-scan` | Check if an AI agent skill is safe before installing |
|
|
224
179
|
| `dokkit` | Document template filling for DOCX/HWPX |
|
|
225
180
|
| `devlyn-pencil-pull` | Pull Pencil designs into code |
|
|
@@ -250,9 +205,9 @@ Selected during install. Run `npx devlyn-cli` again to add more.
|
|
|
250
205
|
|
|
251
206
|
| Server | Description |
|
|
252
207
|
|---|---|
|
|
253
|
-
| `playwright` | Playwright MCP
|
|
208
|
+
| `playwright` | Playwright MCP for browser testing |
|
|
254
209
|
|
|
255
|
-
>
|
|
210
|
+
> A Codex executor uses the local `codex` CLI binary, not MCP. Install it from https://platform.openai.com/docs/codex, run the current Codex auth/login flow and verify `codex --version`.
|
|
256
211
|
|
|
257
212
|
</details>
|
|
258
213
|
|
|
@@ -263,22 +218,22 @@ Selected during install. Run `npx devlyn-cli` again to add more.
|
|
|
263
218
|
## Requirements
|
|
264
219
|
|
|
265
220
|
- **Node.js 18+** and npm
|
|
266
|
-
- **Python 3.11+** available as `python3`, and Git for the
|
|
221
|
+
- **Python 3.11+** available as `python3`, and Git for the harness
|
|
267
222
|
- **An agent CLI** installed and configured: Codex, omp, Pi or Grok (AGENTS.md), or [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (CLAUDE.md)
|
|
223
|
+
- **For `auto`/`pr` delivery**, an `origin` remote naming one GitHub repository and an authenticated [`gh`](https://cli.github.com/)
|
|
268
224
|
|
|
269
|
-
On native Windows, use native Node/npm and Python plus Git for Windows Bash for the shipped shell wrapper. Run `npx devlyn-cli -y` in the project (add `--claude` for Claude Code). Skill folders follow the Agent Skills naming standard (for example `devlyn-
|
|
225
|
+
On native Windows, use native Node/npm and Python plus Git for Windows Bash for the shipped shell wrapper. Run `npx devlyn-cli -y` in the project (add `--claude` for Claude Code). Skill folders follow the Agent Skills naming standard (for example `devlyn-ideate`), so a project that commits them checks out on Windows. Harness text is UTF-8 without requiring `PYTHONUTF8`.
|
|
270
226
|
|
|
271
227
|
Windows completion preserves the workspace, owned refs and recovery receipt when writer cessation cannot be proved, even after merge; resume guidance and delivery status remain separate from product verification. The portability workflow checks out the repository on native Windows and tests the POSIX-packed npm artifact there. A POSIX pass alone does not establish Windows support: acceptance requires the passing Windows job for the exact source SHA/artifact hashes.
|
|
272
228
|
|
|
273
229
|
## Contributing
|
|
274
230
|
|
|
275
|
-
- **Add a skill** —
|
|
276
|
-
- **Add optional skill** — add to `optional-skills/` and `OPTIONAL_ADDONS` in [`bin/devlyn.js`](bin/devlyn.js)
|
|
231
|
+
- **Add a skill** — add it to `optional-skills/` and `OPTIONAL_ADDONS` in [`bin/devlyn.js`](bin/devlyn.js); the core skills are fixed by `DEVLYN_CORE_SKILLS` (lint Checks 5a and 6)
|
|
277
232
|
- **Suggest a pack** — PR to the pack list
|
|
278
233
|
|
|
279
234
|
## Supercharge it — pair devlyn with persistent agent memory
|
|
280
235
|
|
|
281
|
-
devlyn-cli gives your agent a
|
|
236
|
+
devlyn-cli gives your agent a **harness**. Give it a world-class **memory** and the loop compounds — decisions, corrections, and hard-won context survive across sessions instead of resetting every conversation.
|
|
282
237
|
|
|
283
238
|
> [!TIP]
|
|
284
239
|
> ### 🧠 [pyx-memory](https://memory.pyxmate.com) — world-class agentic memory (hybrid RAG) for coding agents
|
|
@@ -288,7 +243,7 @@ devlyn-cli gives your agent a world-class **harness**. Give it a world-class **m
|
|
|
288
243
|
- **Hybrid retrieval** — semantic *and* graph recall: find by meaning *and* by relationship
|
|
289
244
|
- **Learns the loop** — reinforces what works, records corrections when it doesn't
|
|
290
245
|
|
|
291
|
-
**Harness (devlyn) + Memory (pyx-memory) = agents that don't just execute — they improve.** Wire up **pyx-memory** as an MCP server
|
|
246
|
+
**Harness (devlyn) + Memory (pyx-memory) = agents that don't just execute — they improve.** Wire up **pyx-memory** as an MCP server so your agent recalls prior decisions before it plans and stores what it learns after it ships.
|
|
292
247
|
|
|
293
248
|
## Support & Attribution
|
|
294
249
|
|