devlyn-cli 2.9.0 → 2.9.2
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/CLAUDE.md +4 -4
- package/README.md +31 -2
- package/benchmark/auto-resolve/fixtures/test-repo/README.md +8 -23
- package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +2 -2
- package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +2 -2
- package/benchmark/auto-resolve/fixtures/test-repo/package.json +2 -2
- package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +3 -3
- package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +2 -2
- package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +3 -3
- package/package.json +5 -2
package/CLAUDE.md
CHANGED
|
@@ -28,7 +28,7 @@ The runtime sub-agent contract below (Subtractive-first / Goal-locked / No-worka
|
|
|
28
28
|
|
|
29
29
|
## Quick Start
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
Engine selection follows the role map below.
|
|
32
32
|
|
|
33
33
|
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`.
|
|
34
34
|
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).
|
|
@@ -60,7 +60,7 @@ The user does not invoke skills manually; the orchestrating model does. Small ta
|
|
|
60
60
|
|
|
61
61
|
**Intent queue (unattended drain)**: the user stacks intents in `docs/specs/queue.md` (ordered checklist; `/devlyn:queue` is the front-end — no args shows status, `add <intent>` appends, `drain` starts the serial drain). Drain strictly serially — per item: spec it, run the outer loop, mark `[x]` done or `[F]` blocked with reason, continue; a blocked item never halts the queue. The queue entry is the user's go-ahead, so assume-and-log replaces the interactive checkpoint — but unattended assumptions may only take scope-narrowing, reversible, non-user-visible defaults. Material ambiguity (user-visible behavior, data/state semantics, new files/scripts/flags, implementation surface) → mark `[F] needs-review` and move on. End the drain with a per-item verdict + assumptions report.
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
## Subtractive-first editing — perfection = nothing left to remove
|
|
64
64
|
<!-- runtime-principles:section=subtractive-first:begin -->
|
|
65
65
|
|
|
66
66
|
> **Operating definition of "done" in this repo** (Saint-Exupéry discipline rule above): a change is finished when no further line, branch, flag, or doc paragraph can be removed without breaking a learned failure mode. Not before.
|
|
@@ -96,7 +96,7 @@ If you skip question 1 or 2, you are violating this rule even if the resulting c
|
|
|
96
96
|
**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.
|
|
97
97
|
<!-- runtime-principles:section=subtractive-first:end -->
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
## Goal-locked execution — stay on the North Star, do not wander
|
|
100
100
|
<!-- runtime-principles:section=goal-locked:begin -->
|
|
101
101
|
|
|
102
102
|
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.
|
|
@@ -139,7 +139,7 @@ Any orchestrating engine (Claude, Codex, or future) continuing harness / loop-en
|
|
|
139
139
|
- **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.
|
|
140
140
|
- **Pattern**: `try { doThing() } catch (error) { showErrorUI(error) }` — NOT `try { doThing() } catch { return fallbackValue }`.
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
## Evidence over claim
|
|
143
143
|
<!-- runtime-principles:section=evidence:begin -->
|
|
144
144
|
|
|
145
145
|
Every finding cites concrete evidence. Vague claims are speculation; exclude them.
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<img alt="DEVLYN" src="assets/logo.svg" width="540" />
|
|
7
7
|
</picture>
|
|
8
8
|
|
|
9
|
-
### Context
|
|
9
|
+
### Context, Harness & Loop Engineering Toolkit for AI Coding Agents
|
|
10
10
|
|
|
11
11
|
**Structured prompts, agent orchestration, and automated pipelines — debugging, code review, UI design, product specs, and more.**
|
|
12
12
|
|
|
@@ -33,7 +33,7 @@ That's it. The installer opens with a single **agent selector** — pick any com
|
|
|
33
33
|
|
|
34
34
|
## How It Works — Two Skills, Full Cycle
|
|
35
35
|
|
|
36
|
-
devlyn-cli turns
|
|
36
|
+
devlyn-cli turns your AI coding agent into a hands-free development pipeline. The pipeline surface is two skills, with `/devlyn:design-ui` installed as the required creative UI surface:
|
|
37
37
|
|
|
38
38
|
```
|
|
39
39
|
ideate (optional) → resolve → ship
|
|
@@ -278,6 +278,35 @@ Selected during install. Run `npx devlyn-cli` again to add more.
|
|
|
278
278
|
- **Add optional skill** — add to `optional-skills/` and `OPTIONAL_ADDONS` in [`bin/devlyn.js`](bin/devlyn.js)
|
|
279
279
|
- **Suggest a pack** — PR to the pack list
|
|
280
280
|
|
|
281
|
+
## Supercharge it — pair devlyn with persistent agent memory
|
|
282
|
+
|
|
283
|
+
devlyn-cli gives your agent a world-class **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.
|
|
284
|
+
|
|
285
|
+
> [!TIP]
|
|
286
|
+
> ### 🧠 [pyx-memory](https://memory.pyxmate.com) — world-class agentic memory (hybrid RAG) for coding agents
|
|
287
|
+
> Durable facts, corrections, and project state your agent recalls and reinforces — so every run starts smarter than the last. → **[memory.pyxmate.com](https://memory.pyxmate.com)**
|
|
288
|
+
|
|
289
|
+
- **Remembers across sessions** — decisions, gotchas, preferences, and project state, not just this conversation
|
|
290
|
+
- **Hybrid retrieval** — semantic *and* graph recall: find by meaning *and* by relationship
|
|
291
|
+
- **Learns the loop** — reinforces what works, records corrections when it doesn't
|
|
292
|
+
|
|
293
|
+
**Harness (devlyn) + Memory (pyx-memory) = agents that don't just execute — they improve.** Wire up **pyx-memory** as an MCP server and `/devlyn:resolve` recalls prior decisions before it plans and stores what it learns after it ships.
|
|
294
|
+
|
|
295
|
+
## Support & Attribution
|
|
296
|
+
|
|
297
|
+
devlyn-cli is built and maintained in the open. If it earns a place in your workflow, two small things keep it alive and help others find it:
|
|
298
|
+
|
|
299
|
+
- ⭐️ **Star the repo** — [give it a star](https://github.com/fysoul17/devlyn-cli) if it saved you time. It's the single biggest signal that keeps the project going.
|
|
300
|
+
- 🔗 **Leave a credit** — if devlyn-cli helped ship your project, a small attribution is genuinely appreciated (kindly requested, never required — the MIT license asks nothing of you here). Drop this badge in your README:
|
|
301
|
+
|
|
302
|
+
```md
|
|
303
|
+
[](https://github.com/fysoul17/devlyn-cli)
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Renders as [](https://github.com/fysoul17/devlyn-cli)
|
|
307
|
+
|
|
308
|
+
Thank you for using devlyn — it genuinely means a lot. 🙏
|
|
309
|
+
|
|
281
310
|
## Star History
|
|
282
311
|
|
|
283
312
|
[](https://star-history.com/#fysoul17/devlyn-cli&Date)
|
|
@@ -1,27 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# harbor-tools
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
A small Node.js toolkit with a command-line interface, an HTTP server, and a
|
|
4
|
+
minimal browser page.
|
|
5
5
|
|
|
6
|
-
##
|
|
6
|
+
## Commands
|
|
7
7
|
|
|
8
|
-
- `
|
|
9
|
-
- `
|
|
10
|
-
- `
|
|
11
|
-
- `tests/cli.test.js`, `tests/server.test.js` — node:test fixtures
|
|
12
|
-
- `playwright.config.js` — used by web/browser fixtures only
|
|
13
|
-
- `package.json` — `express` dep, `engines: node >= 18`
|
|
8
|
+
- `npm test` runs the test suite.
|
|
9
|
+
- `npm run cli -- --help` prints command-line help.
|
|
10
|
+
- `npm start` starts the HTTP server.
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
`run-fixture.sh` copies this directory to a temp path per run, applies the
|
|
18
|
-
fixture's `setup.sh`, then invokes the arm (variant or bare) against that
|
|
19
|
-
copy. No fixture modifies this source tree — modifications happen only in
|
|
20
|
-
the per-run temp copies.
|
|
21
|
-
|
|
22
|
-
## Keep it minimal
|
|
23
|
-
|
|
24
|
-
Adding features to `test-repo` enlarges the surface every fixture works
|
|
25
|
-
against. Add only when an existing fixture can't express itself against the
|
|
26
|
-
current baseline. Preferred path: push complexity into the fixture's
|
|
27
|
-
`setup.sh`, not into this base.
|
|
12
|
+
The project intentionally keeps each component small and independent.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
//
|
|
3
|
-
//
|
|
2
|
+
// harbor-tools — small command-line utilities for local workflows.
|
|
3
|
+
// Keep the core commands minimal and easy to understand.
|
|
4
4
|
|
|
5
5
|
const fs = require('fs');
|
|
6
6
|
const path = require('path');
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "harbor-tools",
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
|
-
"name": "
|
|
8
|
+
"name": "harbor-tools",
|
|
9
9
|
"version": "0.1.0",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"express": "4.19.2"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "harbor-tools",
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"private": true,
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "A small Node.js toolkit with a command-line interface and HTTP server.",
|
|
6
6
|
"bin": {
|
|
7
7
|
"bench-cli": "bin/cli.js"
|
|
8
8
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// Playwright config
|
|
2
|
-
// Runs against web/index.html served via `npx serve web` (
|
|
3
|
-
//
|
|
1
|
+
// Playwright config for the browser checks.
|
|
2
|
+
// Runs against web/index.html served via `npx serve web` (the check starts the
|
|
3
|
+
// server). Keep config minimal.
|
|
4
4
|
module.exports = {
|
|
5
5
|
testDir: './tests/e2e',
|
|
6
6
|
timeout: 30_000,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Tiny Express server
|
|
1
|
+
// Tiny Express server with a deliberately small API surface.
|
|
2
2
|
const express = require('express');
|
|
3
3
|
|
|
4
4
|
const app = express();
|
|
@@ -30,7 +30,7 @@ app.get('/items/:id', (req, res) => {
|
|
|
30
30
|
if (require.main === module) {
|
|
31
31
|
const port = Number(process.env.PORT) || 3000;
|
|
32
32
|
app.listen(port, () => {
|
|
33
|
-
console.log(`
|
|
33
|
+
console.log(`harbor-tools server listening on :${port}`);
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
|
-
<title>
|
|
5
|
+
<title>harbor-tools</title>
|
|
6
6
|
<style>
|
|
7
7
|
body {
|
|
8
8
|
font-family: system-ui, sans-serif;
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
</style>
|
|
24
24
|
</head>
|
|
25
25
|
<body>
|
|
26
|
-
<h1>
|
|
27
|
-
<p>Minimal page
|
|
26
|
+
<h1>harbor-tools</h1>
|
|
27
|
+
<p>Minimal page for checking the browser interaction.</p>
|
|
28
28
|
<button id="greet">Greet</button>
|
|
29
29
|
<div id="output" data-testid="output"></div>
|
|
30
30
|
<script>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devlyn-cli",
|
|
3
|
-
"version": "2.9.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.9.2",
|
|
4
|
+
"description": "Loop & harness engineering for AI coding agents (Claude Code, Codex, and any AGENTS.md-driven agent) — take intent to shipped, engineer-quality software hands-free with phase-gated pipelines and agent orchestration",
|
|
5
5
|
"homepage": "https://github.com/fysoul17/devlyn-cli#readme",
|
|
6
6
|
"bin": {
|
|
7
7
|
"devlyn": "bin/devlyn.js"
|
|
@@ -78,11 +78,14 @@
|
|
|
78
78
|
"keywords": [
|
|
79
79
|
"claude",
|
|
80
80
|
"claude-code",
|
|
81
|
+
"codex",
|
|
82
|
+
"ai-coding-agents",
|
|
81
83
|
"ai",
|
|
82
84
|
"ai-agent",
|
|
83
85
|
"ai-tools",
|
|
84
86
|
"context-engineering",
|
|
85
87
|
"harness-engineering",
|
|
88
|
+
"loop-engineering",
|
|
86
89
|
"agent-orchestration",
|
|
87
90
|
"prompt-engineering",
|
|
88
91
|
"code-review",
|