@hecer/yoke 1.11.0 → 1.12.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/.claude-plugin/plugin.json +13 -13
- package/.codex-plugin/plugin.json +7 -7
- package/CHANGELOG.md +416 -398
- package/README.md +931 -915
- package/TODOS.md +5 -5
- package/agents/docs.toml +6 -6
- package/agents/implementer.toml +6 -6
- package/agents/reviewer.toml +6 -6
- package/agents/security.toml +6 -6
- package/bench/README.md +86 -86
- package/bench/RESULTS.md +35 -35
- package/bench/output-compaction.mjs +65 -65
- package/bench/result-schema.mjs +12 -12
- package/bench/results/claude-2026-07-27T18-03-26.json +50 -50
- package/bench/results/codex-unavailable-1785175418318.json +15 -15
- package/bench/results/gemini-2026-07-27T18-03-44.json +46 -46
- package/bench/run-matrix.mjs +26 -26
- package/bench/run.mjs +106 -106
- package/canon/AGENTS.md +30 -30
- package/canon/context/DECISIONS.md +4 -4
- package/canon/context/GLOSSARY.md +11 -11
- package/canon/context/KNOWLEDGE.md +4 -4
- package/canon/context/PROJECT.md +15 -15
- package/canon/loop/loop-spec.md +65 -65
- package/canon/loop/prd.schema.md +41 -41
- package/canon/manifest.yaml +59 -59
- package/canon/policy/gates.md +7 -7
- package/canon/policy/roles.md +9 -9
- package/canon/skills/ATTRIBUTION.md +99 -99
- package/canon/skills/authoring-prd/SKILL.md +56 -56
- package/canon/skills/brainstorming/SKILL.md +164 -164
- package/canon/skills/codebase-design/DEEPENING.md +15 -15
- package/canon/skills/codebase-design/DESIGN-IT-TWICE.md +12 -12
- package/canon/skills/codebase-design/SKILL.md +39 -39
- package/canon/skills/dispatching-parallel-agents/SKILL.md +182 -182
- package/canon/skills/document-release/SKILL.md +302 -302
- package/canon/skills/domain-modeling/ADR-FORMAT.md +19 -19
- package/canon/skills/domain-modeling/CONTEXT-FORMAT.md +39 -39
- package/canon/skills/domain-modeling/SKILL.md +35 -35
- package/canon/skills/executing-plans/SKILL.md +70 -70
- package/canon/skills/finishing-a-development-branch/SKILL.md +200 -200
- package/canon/skills/health/SKILL.md +177 -177
- package/canon/skills/maintaining-context/SKILL.md +34 -34
- package/canon/skills/minimal-code/SKILL.md +21 -21
- package/canon/skills/no-ai-slop/SKILL.md +103 -103
- package/canon/skills/no-ai-slop/eval.md +43 -43
- package/canon/skills/plan-ceo-review/SKILL.md +541 -541
- package/canon/skills/plan-eng-review/SKILL.md +362 -362
- package/canon/skills/receiving-code-review/SKILL.md +213 -213
- package/canon/skills/requesting-code-review/SKILL.md +105 -105
- package/canon/skills/resolving-merge-conflicts/SKILL.md +18 -18
- package/canon/skills/retro/SKILL.md +397 -397
- package/canon/skills/review/SKILL.md +246 -246
- package/canon/skills/ship/SKILL.md +691 -691
- package/canon/skills/subagent-driven-development/SKILL.md +277 -277
- package/canon/skills/systematic-debugging/SKILL.md +296 -296
- package/canon/skills/tdd/SKILL.md +371 -371
- package/canon/skills/unslop-ui/SKILL.md +34 -34
- package/canon/skills/using-git-worktrees/SKILL.md +218 -218
- package/canon/skills/verification-before-completion/SKILL.md +139 -139
- package/canon/skills/visual-verification/SKILL.md +54 -54
- package/canon/skills/workflow/SKILL.md +22 -22
- package/canon/skills/writing-for-agents/SKILL-MECHANICS.md +27 -27
- package/canon/skills/writing-for-agents/SKILL.md +42 -42
- package/canon/skills/writing-plans/SKILL.md +152 -152
- package/canon/skills/writing-skills/SKILL.md +655 -655
- package/canon/skills/yoke-retrofit/SKILL.md +26 -26
- package/canon/skills/yoke-workflow/SKILL.md +20 -20
- package/canon/tools/codex-rtk-hook.mjs +35 -35
- package/canon/tools/gemini-rtk-hook.mjs +25 -25
- package/canon/tools/graphify.md +3 -3
- package/canon/tools/playwright-mcp.md +3 -3
- package/canon/tools/qwen-rtk-hook.mjs +25 -0
- package/canon/tools/rtk.md +7 -7
- package/canon/tools/serena.md +6 -6
- package/dist/agents/host.js +1 -1
- package/dist/agents/providers.js +18 -5
- package/dist/agents/telemetry.js +35 -36
- package/dist/cli.js +18 -10
- package/dist/dashboard/page.js +122 -122
- package/dist/dashboard/panels.js +91 -91
- package/dist/loop/run-command.js +3 -3
- package/dist/prd/command.js +17 -17
- package/dist/retrofit/apply.js +8 -1
- package/dist/retrofit/config.js +1 -1
- package/dist/retrofit/detect.js +2 -0
- package/dist/retrofit/planners/claude.js +14 -14
- package/dist/retrofit/planners/qwen.js +3 -3
- package/dist/retrofit/preserve.js +2 -2
- package/dist/retrofit/qwen-settings.js +17 -0
- package/dist/retrofit/skill-actions.js +1 -1
- package/dist/setup/command.js +22 -8
- package/dist/setup/model-presets.js +48 -0
- package/docs/CAPABILITY-ROUTING.md +51 -51
- package/docs/DASHBOARD-EVOLUTION.md +33 -33
- package/docs/MIGRATING-TO-1.0.md +33 -33
- package/docs/MIGRATING-TO-1.1.md +27 -27
- package/docs/MIGRATING-TO-1.4.md +70 -70
- package/docs/PRODUCT-DIRECTION-2026-09-05.md +210 -210
- package/docs/PUBLISHING.md +114 -114
- package/docs/QWEN-MODEL-SUPPORT.md +142 -0
- package/docs/VERIFIED-PROJECTS-VALIDATION.md +29 -29
- package/docs/VERIFIED-PROJECTS.md +167 -167
- package/docs/superpowers/plans/2026-06-28-baustein-e-context-layer.md +981 -981
- package/docs/superpowers/plans/2026-06-29-baustein-f-routing.md +258 -258
- package/docs/superpowers/plans/2026-06-29-baustein-g-loop-observability.md +1006 -1006
- package/docs/superpowers/plans/2026-06-29-baustein-h-loop-robustness.md +374 -374
- package/docs/superpowers/plans/2026-06-30-baustein-i-visual-design-verification.md +450 -450
- package/docs/superpowers/plans/2026-07-02-baustein-k-zero-to-100-bootstrap.md +1024 -1024
- package/docs/superpowers/plans/2026-07-02-baustein-m-flow-smoke-proofs.md +574 -574
- package/docs/superpowers/plans/2026-08-13-gauntlet-quality-loop.md +537 -537
- package/docs/superpowers/plans/2026-08-16-artifact-backed-output-compaction.md +329 -329
- package/docs/superpowers/plans/2026-09-05-verified-projects.md +83 -83
- package/docs/superpowers/specs/2026-06-28-baustein-e-context-layer-design.md +146 -146
- package/docs/superpowers/specs/2026-06-29-baustein-f-routing-design.md +106 -106
- package/docs/superpowers/specs/2026-06-29-baustein-g-loop-observability-design.md +186 -186
- package/docs/superpowers/specs/2026-06-29-baustein-h-loop-robustness-design.md +113 -113
- package/docs/superpowers/specs/2026-06-30-baustein-i-visual-design-verification-design.md +98 -98
- package/docs/superpowers/specs/2026-07-02-baustein-k-zero-to-100-bootstrap-design.md +200 -200
- package/docs/superpowers/specs/2026-07-02-baustein-m-flow-smoke-proofs-design.md +155 -155
- package/docs/superpowers/specs/2026-08-13-gauntlet-quality-loop-design.md +422 -422
- package/docs/superpowers/specs/2026-08-16-artifact-backed-output-compaction-design.md +166 -166
- package/gemini-extension.json +6 -6
- package/hooks/hooks.json +19 -19
- package/package.json +87 -87
- package/dist/dashboard/discovery.js +0 -73
- package/docs/community-outreach-2026-08-20.md +0 -85
- package/docs/launch-copy-2026-08-21.md +0 -193
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { opendir, lstat, realpath } from 'node:fs/promises';
|
|
2
|
-
import { delimiter, dirname, join, parse, resolve } from 'node:path';
|
|
3
|
-
import { autoRegisterProject, listProjects } from './registry.js';
|
|
4
|
-
const skip = new Set(['node_modules', 'vendor', 'dist', 'build', 'coverage', 'bench', 'fixtures']);
|
|
5
|
-
export function discoveryRoots() {
|
|
6
|
-
const configured = process.env.YOKE_PROJECT_ROOTS?.split(delimiter).filter(Boolean);
|
|
7
|
-
const candidates = configured ?? [dirname(process.cwd()), ...listProjects().filter(p => !p.error).map(p => dirname(p.root))];
|
|
8
|
-
const roots = [...new Set(candidates.map(p => resolve(p)))].filter(p => p !== parse(p).root);
|
|
9
|
-
return roots.filter(p => !roots.some(other => other !== p && p.startsWith(other + (process.platform === 'win32' ? '\\' : '/'))));
|
|
10
|
-
}
|
|
11
|
-
/** Incremental traversal keeps directory IO out of the HTTP request path. */
|
|
12
|
-
export function startProjectDiscovery(roots = discoveryRoots) {
|
|
13
|
-
let stopped = false;
|
|
14
|
-
let active;
|
|
15
|
-
let queue = [];
|
|
16
|
-
let visited = new Set();
|
|
17
|
-
let current;
|
|
18
|
-
const scan = async () => {
|
|
19
|
-
if (!queue.length && !current) {
|
|
20
|
-
queue = roots();
|
|
21
|
-
visited = new Set();
|
|
22
|
-
}
|
|
23
|
-
let budget = 500;
|
|
24
|
-
while (!stopped && budget-- > 0 && (current || queue.length)) {
|
|
25
|
-
if (!current) {
|
|
26
|
-
const path = queue.shift();
|
|
27
|
-
try {
|
|
28
|
-
if ((await lstat(path)).isSymbolicLink())
|
|
29
|
-
continue;
|
|
30
|
-
const canonical = await realpath(path);
|
|
31
|
-
const key = process.platform === 'win32' ? canonical.toLowerCase() : canonical;
|
|
32
|
-
if (visited.has(key))
|
|
33
|
-
continue;
|
|
34
|
-
visited.add(key);
|
|
35
|
-
autoRegisterProject(canonical);
|
|
36
|
-
current = await opendir(canonical);
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
try {
|
|
43
|
-
const entry = await current.read();
|
|
44
|
-
if (!entry) {
|
|
45
|
-
await current.close();
|
|
46
|
-
current = undefined;
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
if (entry.isDirectory() && !entry.isSymbolicLink() && !entry.name.startsWith('.') && !skip.has(entry.name.toLowerCase()))
|
|
50
|
-
queue.push(join(current.path, entry.name));
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
try {
|
|
54
|
-
await current?.close();
|
|
55
|
-
}
|
|
56
|
-
catch { /* Already closed. */ }
|
|
57
|
-
current = undefined;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
const tick = () => {
|
|
62
|
-
if (!active && !stopped)
|
|
63
|
-
active = scan().catch(() => { }).finally(() => { active = undefined; });
|
|
64
|
-
return active ?? Promise.resolve();
|
|
65
|
-
};
|
|
66
|
-
const timer = setInterval(() => { void tick(); }, 5000);
|
|
67
|
-
timer.unref();
|
|
68
|
-
void tick();
|
|
69
|
-
return { tick, get pending() { return queue.length + (current ? 1 : 0); }, async close() { stopped = true; clearInterval(timer); await active; try {
|
|
70
|
-
await current?.close();
|
|
71
|
-
}
|
|
72
|
-
catch { /* Already closed. */ } } };
|
|
73
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# Yoke community outreach — 2026-08-20
|
|
2
|
-
|
|
3
|
-
These posts are intentionally feedback-first. They disclose the creator relationship, avoid vote requests, and link directly to the free MIT-licensed project.
|
|
4
|
-
|
|
5
|
-
## Hacker News — Show HN
|
|
6
|
-
|
|
7
|
-
**Title**
|
|
8
|
-
|
|
9
|
-
Show HN: Yoke – safety-gated autonomous coding loops for Claude, Codex, and Gemini
|
|
10
|
-
|
|
11
|
-
**URL**
|
|
12
|
-
|
|
13
|
-
https://github.com/HECer/yoke
|
|
14
|
-
|
|
15
|
-
**First comment**
|
|
16
|
-
|
|
17
|
-
Hi HN — I built Yoke after repeatedly seeing the same failure mode in long-running coding-agent loops: the agent says a task is done, but the tests were not actually run, the working tree is inconsistent, or a later iteration breaks earlier work.
|
|
18
|
-
|
|
19
|
-
Yoke is an MIT-licensed TypeScript CLI that puts mechanical gates around those loops. A story only passes after the configured verification command succeeds, review approves it, and the commit lands. Stories run in isolated worktrees, and optional Playwright evidence can attach screenshots to acceptance criteria. It generates native project instructions for Claude Code, Codex CLI, and Gemini CLI from one canon rather than asking all three tools to interpret the same generic prompt.
|
|
20
|
-
|
|
21
|
-
You can try it without signing up:
|
|
22
|
-
|
|
23
|
-
npm i -g @hecer/yoke
|
|
24
|
-
yoke new my-app
|
|
25
|
-
|
|
26
|
-
I would especially value feedback from people who already run Ralph-style or overnight agent loops: which gate feels essential, which feels like ceremony, and what would stop you from trying this on a real repository?
|
|
27
|
-
|
|
28
|
-
I am the creator and will be around to answer technical questions.
|
|
29
|
-
|
|
30
|
-
## Reddit — r/ClaudeCodeTLDR weekly showcase (English)
|
|
31
|
-
|
|
32
|
-
I built **Yoke**, a free MIT-licensed harness for running Claude Code, Codex CLI, or Gemini CLI in autonomous coding loops with mechanical safety gates.
|
|
33
|
-
|
|
34
|
-
The problem I wanted to solve was the gap between an agent saying “done” and the repository actually being in a verified state. Yoke uses isolated worktrees and only marks a story complete after the configured tests pass, review approves it, and the commit lands. It can also require Playwright screenshot evidence for visual acceptance criteria.
|
|
35
|
-
|
|
36
|
-
Claude Code was both a target runtime and part of the development/review workflow; the project also generates native instructions for Codex and Gemini from the same canon.
|
|
37
|
-
|
|
38
|
-
It is free to use, requires no account, and the quickstart is:
|
|
39
|
-
|
|
40
|
-
npm i -g @hecer/yoke
|
|
41
|
-
yoke new my-app
|
|
42
|
-
|
|
43
|
-
Repo: https://github.com/HECer/yoke
|
|
44
|
-
|
|
45
|
-
I’m the creator. I’d love blunt feedback from people who already use long-running Claude Code loops: would these gates make you trust an overnight run more, or does the workflow look too heavy? If you try it, which part is confusing first?
|
|
46
|
-
|
|
47
|
-
## Reddit — r/ChatGPTCoding self-promotion thread (English)
|
|
48
|
-
|
|
49
|
-
I built **Yoke**, an MIT-licensed CLI for people using Claude Code, Codex CLI, or Gemini CLI for longer autonomous coding runs.
|
|
50
|
-
|
|
51
|
-
Instead of trusting the agent’s “done” message, Yoke gates each story on a real verification command, review approval, and an atomic commit. It also isolates stories in worktrees and can collect Playwright screenshots as acceptance evidence.
|
|
52
|
-
|
|
53
|
-
Install and try it without an account:
|
|
54
|
-
|
|
55
|
-
npm i -g @hecer/yoke
|
|
56
|
-
yoke new my-app
|
|
57
|
-
|
|
58
|
-
https://github.com/HECer/yoke
|
|
59
|
-
|
|
60
|
-
I’m the creator. I’m mainly looking for honest feedback: if you already run coding agents for more than one task at a time, what would make you try this, and what looks like unnecessary process?
|
|
61
|
-
|
|
62
|
-
## German-language developer communities (draft for communities that explicitly permit project showcases)
|
|
63
|
-
|
|
64
|
-
**Titel**
|
|
65
|
-
|
|
66
|
-
Feedback gesucht: Yoke – abgesicherte autonome Coding-Loops für Claude, Codex und Gemini
|
|
67
|
-
|
|
68
|
-
**Text**
|
|
69
|
-
|
|
70
|
-
Ich habe **Yoke** gebaut, ein kostenloses, MIT-lizenziertes CLI für längere autonome Coding-Läufe mit Claude Code, Codex CLI oder Gemini CLI.
|
|
71
|
-
|
|
72
|
-
Der Auslöser war die Lücke zwischen „der Agent sagt, er sei fertig“ und einem tatsächlich verifizierten Repository. Yoke markiert eine Story erst dann als erledigt, wenn der konfigurierte Test-/Verify-Befehl erfolgreich war, ein Review zugestimmt hat und der Commit sauber gelandet ist. Einzelne Stories laufen isoliert in Worktrees; für visuelle Akzeptanzkriterien können Playwright-Screenshots als Nachweis verlangt werden.
|
|
73
|
-
|
|
74
|
-
Ausprobieren ohne Account:
|
|
75
|
-
|
|
76
|
-
npm i -g @hecer/yoke
|
|
77
|
-
yoke new meine-app
|
|
78
|
-
|
|
79
|
-
Repo: https://github.com/HECer/yoke
|
|
80
|
-
|
|
81
|
-
Ich bin der Entwickler des Projekts. Mich interessiert vor allem ehrliches Feedback von Leuten, die Coding-Agents länger oder autonom laufen lassen: Würden solche Gates euer Vertrauen erhöhen, oder wirkt der Ablauf zu schwergewichtig? Was wäre beim ersten Ausprobieren vermutlich die größte Hürde?
|
|
82
|
-
|
|
83
|
-
## Disclosure note
|
|
84
|
-
|
|
85
|
-
The outreach copy in this file was drafted with AI assistance on the creator's instructions. Add a human-readable AI-assistance disclosure wherever a community's rules require it; do not infer human authorship from the absence of machine-readable provenance.
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
# Yoke launch copy
|
|
2
|
-
|
|
3
|
-
## 1. Show HN
|
|
4
|
-
|
|
5
|
-
### Title
|
|
6
|
-
|
|
7
|
-
Show HN: Yoke – gated coding-agent loops for Claude, Codex, and Gemini
|
|
8
|
-
|
|
9
|
-
### URL
|
|
10
|
-
|
|
11
|
-
https://github.com/HECer/yoke
|
|
12
|
-
|
|
13
|
-
### First comment
|
|
14
|
-
|
|
15
|
-
I built Yoke after seeing coding agents report that a task was finished when the repository told a different story: tests had not run, the working tree contained unrelated changes, or a later iteration had broken earlier work.
|
|
16
|
-
|
|
17
|
-
Yoke is an MIT-licensed TypeScript CLI for running coding-agent work as a sequence of verifiable stories. It supports Claude Code, Codex CLI, and Gemini CLI.
|
|
18
|
-
|
|
19
|
-
The runner, rather than the agent, decides whether a story passed. It checks the configured verification command's exit code, requires review approval, and confirms that the commit landed. Stories run in isolated Git worktrees. For visual acceptance criteria, a run can require Playwright screenshots or video as evidence.
|
|
20
|
-
|
|
21
|
-
Yoke also generates native project instructions for each supported agent from one versioned skill canon. That part is Markdown. The state transitions, worktree lifecycle, process supervision, gates, and run state are executable TypeScript.
|
|
22
|
-
|
|
23
|
-
The closest comparison I know is WorkOS Case. Both projects treat the harness as the reliability boundary. Case is focused on turning GitHub or Linear issues into reviewed pull requests. Yoke includes greenfield and retrofit setup, PRD-to-story execution, and portable project configuration across three coding agents.
|
|
24
|
-
|
|
25
|
-
You can try it without an account:
|
|
26
|
-
|
|
27
|
-
npm install -g @hecer/yoke
|
|
28
|
-
yoke new my-app
|
|
29
|
-
|
|
30
|
-
I am looking for two kinds of feedback:
|
|
31
|
-
|
|
32
|
-
1. Which gate would you remove because it adds more process than safety?
|
|
33
|
-
2. What failure from a real autonomous run would Yoke still miss?
|
|
34
|
-
|
|
35
|
-
I am the maintainer and will be around to answer questions.
|
|
36
|
-
|
|
37
|
-
## 2. DEV Community (`#showdev`)
|
|
38
|
-
|
|
39
|
-
### Title
|
|
40
|
-
|
|
41
|
-
I moved coding-agent verification out of the prompt
|
|
42
|
-
|
|
43
|
-
### Tags
|
|
44
|
-
|
|
45
|
-
`showdev`, `ai`, `opensource`, `typescript`
|
|
46
|
-
|
|
47
|
-
### Article
|
|
48
|
-
|
|
49
|
-
A coding agent can agree to run the tests and still fail to run them. It can also run the wrong command, overlook a dirty working tree, or declare success before the result is committed.
|
|
50
|
-
|
|
51
|
-
Adding another sentence to the prompt does not change who controls the completion decision. The same model doing the work still decides whether it followed the instruction.
|
|
52
|
-
|
|
53
|
-
I built Yoke to put that decision in a TypeScript runner.
|
|
54
|
-
|
|
55
|
-
Yoke executes work as a sequence of stories. For each story, the runner creates an isolated Git worktree, starts a fresh agent session, runs the configured verification command, requests a separate review, and checks that the resulting commit landed. A story is not marked as passed because the agent says it is done.
|
|
56
|
-
|
|
57
|
-
For user-interface work, the acceptance criteria can require Playwright screenshots or video. The evidence belongs to the story instead of living in a chat transcript.
|
|
58
|
-
|
|
59
|
-
Yoke supports Claude Code, Codex CLI, and Gemini CLI. A versioned canon generates the native instructions each agent expects, so a project can keep one methodology without pretending that all three tools use identical configuration formats.
|
|
60
|
-
|
|
61
|
-
Some of Yoke is Markdown. The skills, policies, and project context should be readable and editable. The enforcement layer is code: process supervision, worktree isolation, persisted run state, verification exit codes, review gates, and commit checks.
|
|
62
|
-
|
|
63
|
-
The closest existing project is WorkOS Case. Case uses a deterministic TypeScript pipeline to turn issues into reviewed pull requests with evidence. Yoke covers a somewhat different workflow: creating or retrofitting a project, converting a PRD into ordered stories, and running those stories across Claude, Codex, or Gemini. The projects share more philosophy than I realized when I first described Yoke, and I now call that out directly.
|
|
64
|
-
|
|
65
|
-
Yoke is MIT-licensed and does not require an account.
|
|
66
|
-
|
|
67
|
-
npm install -g @hecer/yoke
|
|
68
|
-
yoke new my-app
|
|
69
|
-
|
|
70
|
-
Repository: https://github.com/HECer/yoke
|
|
71
|
-
|
|
72
|
-
I would value examples of failures that prompts and skills do not handle reliably. I am also interested in the opposite feedback: which Yoke gate feels unnecessary in normal development?
|
|
73
|
-
|
|
74
|
-
Disclosure: I used AI assistance while drafting and editing this article. The product description and technical claims were checked against the repository by the maintainer.
|
|
75
|
-
|
|
76
|
-
## 3. DevHunt
|
|
77
|
-
|
|
78
|
-
### Name
|
|
79
|
-
|
|
80
|
-
Yoke
|
|
81
|
-
|
|
82
|
-
### Tagline
|
|
83
|
-
|
|
84
|
-
Run coding agents with tests, review, and commit gates outside the model.
|
|
85
|
-
|
|
86
|
-
### Short description
|
|
87
|
-
|
|
88
|
-
Yoke is an MIT-licensed TypeScript CLI for autonomous coding loops with Claude Code, Codex CLI, and Gemini CLI. It runs stories in isolated Git worktrees and only records a pass after the configured verification command succeeds, review approves the change, and the commit lands. Visual stories can require Playwright screenshot or video evidence.
|
|
89
|
-
|
|
90
|
-
### Maker comment
|
|
91
|
-
|
|
92
|
-
I built Yoke because instructions such as “run the tests before finishing” leave the completion decision with the same agent doing the work. Yoke moves that decision into an executable runner.
|
|
93
|
-
|
|
94
|
-
I would like feedback from developers who already run agents unattended: which gate earns its cost, and what would prevent you from using Yoke on an existing repository?
|
|
95
|
-
|
|
96
|
-
Source: https://github.com/HECer/yoke
|
|
97
|
-
|
|
98
|
-
## 4. Uneed
|
|
99
|
-
|
|
100
|
-
### Title
|
|
101
|
-
|
|
102
|
-
Yoke
|
|
103
|
-
|
|
104
|
-
### Tagline
|
|
105
|
-
|
|
106
|
-
A safety-gated coding harness for Claude, Codex, and Gemini.
|
|
107
|
-
|
|
108
|
-
### Description
|
|
109
|
-
|
|
110
|
-
Yoke runs autonomous coding work as verifiable stories. Each story gets an isolated Git worktree and must pass the project's real verification command, an independent review, and a commit check. User-interface stories can also require Playwright screenshots or video.
|
|
111
|
-
|
|
112
|
-
The CLI can create a new project or retrofit an existing one. It generates native instructions for Claude Code, Codex CLI, and Gemini CLI from one versioned canon.
|
|
113
|
-
|
|
114
|
-
Yoke is open source under the MIT license and requires no account.
|
|
115
|
-
|
|
116
|
-
### Launch comment
|
|
117
|
-
|
|
118
|
-
I am the maintainer. I am looking for concrete failure cases from people who use coding agents for long or unattended runs. If Yoke would not catch one of yours, please tell me what happened.
|
|
119
|
-
|
|
120
|
-
https://github.com/HECer/yoke
|
|
121
|
-
|
|
122
|
-
## 5. Product Hunt
|
|
123
|
-
|
|
124
|
-
### Name
|
|
125
|
-
|
|
126
|
-
Yoke
|
|
127
|
-
|
|
128
|
-
### Tagline
|
|
129
|
-
|
|
130
|
-
Mechanical safety gates for autonomous coding agents
|
|
131
|
-
|
|
132
|
-
### Description
|
|
133
|
-
|
|
134
|
-
Run Claude Code, Codex CLI, or Gemini CLI through isolated worktrees, real test commands, independent review, commit checks, and optional visual evidence. Open source and local-first.
|
|
135
|
-
|
|
136
|
-
### First maker comment
|
|
137
|
-
|
|
138
|
-
Hi Product Hunt,
|
|
139
|
-
|
|
140
|
-
I built Yoke for developers who let coding agents work through more than one task at a time.
|
|
141
|
-
|
|
142
|
-
The failure I wanted to address was straightforward: an agent could say that tests passed without giving the repository a reliable completion boundary. Yoke makes the runner responsible for that boundary. A story passes only after the configured verification command exits successfully, review approves the change, and the commit lands.
|
|
143
|
-
|
|
144
|
-
Yoke supports Claude Code, Codex CLI, and Gemini CLI. It can bootstrap a new project or retrofit an existing repository, and it keeps stories isolated in Git worktrees.
|
|
145
|
-
|
|
146
|
-
The project is MIT-licensed, runs locally, and requires no account:
|
|
147
|
-
|
|
148
|
-
https://github.com/HECer/yoke
|
|
149
|
-
|
|
150
|
-
I would appreciate feedback from anyone already running coding agents unattended. What evidence do you need before trusting the result?
|
|
151
|
-
|
|
152
|
-
## 6. Peerlist Launchpad
|
|
153
|
-
|
|
154
|
-
### Project summary
|
|
155
|
-
|
|
156
|
-
Yoke is an open-source TypeScript CLI for running Claude Code, Codex CLI, and Gemini CLI with completion gates outside the model.
|
|
157
|
-
|
|
158
|
-
It breaks a PRD into stories, runs each story in an isolated Git worktree, and checks the project's verification command, review result, and final commit before recording a pass. Visual acceptance criteria can require Playwright screenshots or video.
|
|
159
|
-
|
|
160
|
-
I built it after finding that prompt-level instructions were useful guidance but a weak enforcement boundary for unattended work. The readable methodology lives in versioned Markdown; the enforcement lives in the runner.
|
|
161
|
-
|
|
162
|
-
Try it:
|
|
163
|
-
|
|
164
|
-
npm install -g @hecer/yoke
|
|
165
|
-
yoke new my-app
|
|
166
|
-
|
|
167
|
-
Source: https://github.com/HECer/yoke
|
|
168
|
-
|
|
169
|
-
I am looking for developers willing to try it on an existing repository and report the first confusing or unnecessary step.
|
|
170
|
-
|
|
171
|
-
## 7. Indie Hackers
|
|
172
|
-
|
|
173
|
-
### Title
|
|
174
|
-
|
|
175
|
-
I built a coding-agent harness, then learned that “it is just Markdown” was the right criticism to answer
|
|
176
|
-
|
|
177
|
-
### Post
|
|
178
|
-
|
|
179
|
-
I recently shared Yoke, an open-source harness for autonomous coding agents, and received a blunt question: why not encode the workflow in one skill or even one sentence?
|
|
180
|
-
|
|
181
|
-
That criticism exposed a problem in how I described the project. The interesting part is not the workflow advice. Agents can read instructions telling them to plan, test, review, and commit.
|
|
182
|
-
|
|
183
|
-
The product decision is who controls the pass condition.
|
|
184
|
-
|
|
185
|
-
Yoke puts that condition in a TypeScript runner. It creates isolated worktrees, executes the configured verification command, requests review, checks the commit, and persists story state. The agent produces the change, but it cannot mark its own story as passed merely by saying the work is complete.
|
|
186
|
-
|
|
187
|
-
The skills and policies are Markdown because users should be able to read and change them. If someone only needs those instructions, a skill is enough and Yoke is unnecessary.
|
|
188
|
-
|
|
189
|
-
I also learned that WorkOS Case already takes a closely related approach. Case focuses on moving an issue through a multi-agent pipeline into a reviewed pull request. Yoke focuses on creating or retrofitting projects, turning PRDs into stories, and running them across Claude Code, Codex CLI, or Gemini CLI. I now describe that overlap directly instead of pretending the category is empty.
|
|
190
|
-
|
|
191
|
-
The project is MIT-licensed: https://github.com/HECer/yoke
|
|
192
|
-
|
|
193
|
-
My question for other builders is about scope. Would you keep the product narrow around enforced story completion, or is cross-agent project setup a meaningful part of the value?
|