Vibe Coding Partner
shareAI-lab/Kode-CLI
Gives an agent a set of working rules for any development task: understand first, surface decisions, verify results, and load deeper reference files per scenario.
Drives a failing build, typecheck, lint or test command to a passing exit code through small, one-fix-at-a-time rounds, stopping at a hard attempt cap instead of looping forever.
$ npx skills add LichAmnesia/lich-skills --skill build-until-pass -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LichAmnesia/lich-skills build-until-pass --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LichAmnesia/lich-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/build-until-pass .claude/skills/build-until-pass && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "build-until-pass" agent skill from https://github.com/LichAmnesia/lich-skills/tree/main/skills/build-until-pass into .claude/skills/build-until-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-until-pass", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LichAmnesia/lich-skills/tree/main/skills/build-until-passType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LichAmnesia/lich-skills --skill build-until-pass -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LichAmnesia/lich-skills build-until-pass --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LichAmnesia/lich-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/build-until-pass .agents/skills/build-until-pass && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "build-until-pass" agent skill from https://github.com/LichAmnesia/lich-skills/tree/main/skills/build-until-pass into .agents/skills/build-until-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-until-pass", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LichAmnesia/lich-skills --skill build-until-pass -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LichAmnesia/lich-skills build-until-pass --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LichAmnesia/lich-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/build-until-pass .cursor/skills/build-until-pass && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "build-until-pass" agent skill from https://github.com/LichAmnesia/lich-skills/tree/main/skills/build-until-pass into .cursor/skills/build-until-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-until-pass", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LichAmnesia/lich-skills.git --path skills/build-until-pass--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LichAmnesia/lich-skills --skill build-until-pass -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LichAmnesia/lich-skills build-until-pass --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LichAmnesia/lich-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/build-until-pass .gemini/skills/build-until-pass && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "build-until-pass" agent skill from https://github.com/LichAmnesia/lich-skills/tree/main/skills/build-until-pass into .gemini/skills/build-until-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-until-pass", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LichAmnesia/lich-skills build-until-passInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LichAmnesia/lich-skills --skill build-until-pass -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LichAmnesia/lich-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/build-until-pass .github/skills/build-until-pass && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "build-until-pass" agent skill from https://github.com/LichAmnesia/lich-skills/tree/main/skills/build-until-pass into .github/skills/build-until-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-until-pass", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LichAmnesia/lich-skills --skill build-until-pass -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LichAmnesia/lich-skills build-until-pass --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LichAmnesia/lich-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/build-until-pass .opencode/skills/build-until-pass && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "build-until-pass" agent skill from https://github.com/LichAmnesia/lich-skills/tree/main/skills/build-until-pass into .opencode/skills/build-until-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "build-until-pass", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
build-until-passDrives a failing build, typecheck, lint or test command to a passing exit code through small, one-fix-at-a-time rounds, stopping at a hard attempt cap instead of looping forever.
The skill treats the project's own check command as the sole judge of success: green means exit code 0, and nothing else counts, not a fix that looks right or an error that seems to have disappeared. Each round runs the check, applies the smallest diff that addresses the first failure, and re-runs, rather than batching several unrelated fixes before testing again, so it is always clear which change helped.
It applies to mechanical failures such as type errors, missing imports, signature mismatches or bundler configuration problems, and explicitly does not apply when the check command is unknown, when the failure is a genuine logic bug needing investigation rather than a mechanical fix, when only a human can make the needed product decision, or when the only way to go green would be deleting tests or suppressing real errors instead of fixing them. A hard attempt cap, ten by default, stops the loop and hands the remaining failures back to a person rather than letting the agent thrash indefinitely.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit ebbc355. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmcargogotscFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Build Until Pass Loop loads about 2.8k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 1,562 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LichAmnesia/lich-skills at commit ebbc355, republished under its MIT licence (© LichAmnesia). 1,562 words, ~2,768 tokens.
.claude/skills/build-until-pass/SKILL.md (or your agent's skills folder).A bounded self-correcting loop: run the project's check command, capture its errors, apply the smallest diff that addresses the first failure, re-run, and repeat until it exits 0 — or until a hard attempt cap is hit.
The core principle: the check command is the judge, not you. You do not
declare the build "basically fixed." Green is exit code 0. Anything else is
red, and red means another round.
This is the engineering-discipline counterpart to "run it and hope." The cap exists so the agent backs off instead of burning tokens thrashing on an error it cannot fix without human input.
tsc, cargo build, go build, npm run build, vite build exits non-zerodebug-hypothesis instead, then come back here to confirm green// @ts-ignore-ing real errors, or
loosening types to silence the compiler → that's cheating the judge, not
passing it (see Anti-rationalizations) ┌─────────────────────────────────────────────┐
│ attempt > MAX_ATTEMPTS (default 10)? │
│ → STOP, report what's left, ask the human │
└──────────────────────┬──────────────────────┘
│ no
RUN CHECK ──▶ green? ──yes──▶ DONE (exit 0, report rounds used)
▲ │
│ │ no (red)
│ ▼
│ READ ERRORS ──▶ FIX SMALLEST ──▶ re-RUN
│ first failure minimal diff, │
│ only, verbatim no refactor │
└──────────────────────────────────────────────┘
one round = one fix + one re-runHard rules:
exit code 0 from the check command. Not "looks fixed," not
"the error I saw is gone." Run it and read the exit status.round N/MAX — <errors remaining> — <what I changed>.@ts-ignore, any,
deleting a test, || true) is not a pass. See Anti-rationalizations.Goal. Know exactly what command defines "green" before you touch any code.
Steps.
.github/workflows/*), package.json scripts,
Makefile, justfile, the build tool's convention.build vs typecheck vs test), pick the one
the user named; if unstated, pick the narrowest one that reproduces the
reported failure, and state your choice.MAX_ATTEMPTS (default 10 unless the user gave a number).Exit criteria.
MAX_ATTEMPTS setCommon Rationalizations
| Excuse | Reality |
|---|---|
"I'll just run npm run build, it's always that" | It's tsc -b in half of repos and a custom script in the other half. Read package.json — 5 seconds saves a loop spent fixing the wrong thing. |
| "I don't need the baseline, I know it fails" | Then capturing it costs one run and proves the failure mode you're about to fix is the one that's actually there. |
| "I'll set the cap later" | No cap means no stop condition. Set it now or the loop has no floor. |
Goal. Get the current ground truth: exit code + full error output.
Steps.
0 → jump to Done. Non-zero → continue.Exit criteria.
Goal. Apply the minimum change that resolves the first failure.
Steps.
file:line. Read the surrounding code.Exit criteria.
Common Rationalizations
| Excuse | Reality |
|---|---|
"@ts-ignore / # type: ignore / any makes the error go away" | The error going away isn't the goal — the code being correct is. Suppressing it ships the bug with a green check on top. That's worse than red. |
| "I'll delete the failing test, then it passes" | The test is the judge for behavior. Deleting it doesn't fix the build, it blinds it. If the test is genuinely wrong, say so to the human — don't silently remove it. |
| "Let me refactor this whole file while I'm in here" | Now your diff has the fix tangled with 80 lines of churn. When the next round goes red, you can't tell which change caused it. Fix the one line. |
| "I'll fix all five errors at once to save rounds" | If the build then breaks differently, you've lost the mapping from change to effect. One fix, one run — the loop is cheap, untangling regressions is not. |
| "Loosening the type silences it" | Loosening the type to pass a typecheck defeats the entire reason the typecheck exists. The judge is now rubber-stamping. |
Goal. Decide: done, another round, or stop and escalate.
Steps.
debug-hypothesis is needed. Don't spend the remaining rounds thrashing.Report format (one line per round):
round 3/10 — 4 errors left (was 7) — fixed missing `await` in db.ts:42Exit criteria.
Common Rationalizations
| Excuse | Reality |
|---|---|
| "9 rounds in, just let me do a couple more" | The cap is the stop condition. Hitting it means this isn't a mechanical fix — it needs a human decision or real investigation. More blind rounds burn tokens, not bugs. |
| "The error count went up but I'm close" | Going up is the opposite of converging. Stop and look at why your fixes create new errors — your model of the failure is wrong. |
| "It's the same error as round 2 but I'll try a different fix" | You're oscillating. Two different fixes for one persistent error means you don't understand the error. Switch to debug-hypothesis. |
| "I'll just ` |
Hitting the cap (or stopping early) is a legitimate, expected outcome — not a failure of the skill. Report:
Then hand back. A human unblocking one root cause is faster than the agent blindly trying fix #11.
The skill was applied correctly when:
The two failure modes this skill guards against:
Run the judge. Read the first error. Fix the one thing. Run again. Stop at the cap.
© LichAmnesia, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/build-until-pass of LichAmnesia/lich-skills.
Open the folder on GitHubat commit ebbc355
Build Until Pass Loop next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Build Until Pass Loop this skillLichAmnesia/lich-skills | 234 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Vibe Coding PartnershareAI-lab/Kode-CLI | 5.2k | — | ~5.6k | Automated safety check: Pass | Apache-2.0 | |
| Odoo Workflowunclecatvn/agent-skills | 143 | — | ~4.7k | Automated safety check: Pass | MIT | |
| Code Review21pounder/terminalAgent | 120 | 1 repos | ~650 | Automated safety check: Pass | Apache-2.0 | |
| Code WriterWildGums/Orc.LicenseManager | 108 | — | ~2.3k | Automated safety check: Pass | Custom licence | |
| Surgical PatchJuliusBrussee/caveman | 110k | 1 repos | ~166 | Automated safety check: Pass | Apache-2.0 |
shareAI-lab/Kode-CLI
Gives an agent a set of working rules for any development task: understand first, surface decisions, verify results, and load deeper reference files per scenario.
unclecatvn/agent-skills
Mandatory pre-code gate and definition-of-done for ANY Odoo change (add field, override method, inherit view/xpath, OWL/JS patch, wizard, cron, controller, report, security, migration, bug fix…
21pounder/terminalAgent
A skill your agent uses when user asks to "review code", "check for issues", "analyze code quality", "find bugs", or wants feedback on code implementation.
WildGums/Orc.LicenseManager
Write production C code following repository coding standards and architecture.
JuliusBrussee/caveman
Fix bugs and small behavior changes at the narrowest responsible layer. Use when regression proof, preserved surrounding behavior, and task-relevant tests…
getsentry/skills
Find bugs, security vulnerabilities, and code quality issues in local branch changes.
LichAmnesia/lich-skills
Pulls Google Analytics 4 data through the Data API with TypeScript scripts and turns it into a daily SEO report or prioritized traffic and bounce-rate recommendations.
LichAmnesia/lich-skills
Generates or edits PNG images with Google's Nano Banana 2 model through a small script, with a choice of 512, 1K, 2K or 4K output.
LichAmnesia/lich-skills
Organizes long-running agent work into a Project, Sprint and Task hierarchy with per-task state files, isolated worktrees, review loops and script-checked rules.
LichAmnesia/lich-skills
Runs headless web searches and single-page extraction through the Tavily API from a Python script, returning cited, summarized results without a browser.
LichAmnesia/lich-skills
Replaces trial-and-error fixing with an observe, hypothesize, experiment and conclude loop kept in DEBUG.md, where no fix is allowed before evidence supports a cause.
LichAmnesia/lich-skills
Runs a gated Spec, Plan, Build, Test, Review, Ship workflow so non-trivial changes are specified, verified and reviewed before they ship, with a named artifact per phase.
Categories
Drives a failing build, typecheck, lint or test command to a passing exit code through small, one-fix-at-a-time rounds, stopping at a hard attempt cap instead of looping forever. The skill treats the project's own check command as the sole judge of success: green means exit code 0, and nothing else counts, not a fix that looks right or an error that seems to have disappeared. Each round runs the check, applies the smallest diff that addresses the first failure, and re-runs, rather than batching several unrelated fixes before testing again, so it is always clear which change helped.
Build Until Pass Loop fits situations like: driving a red build or typecheck to green through small fixes; clearing a batch of mechanical compiler or linter errors one at a time; reproducing and fixing a CI failure locally before pushing again.
Run `npx skills add LichAmnesia/lich-skills --skill build-until-pass -a claude-code`. Or copy the skill folder (skills/build-until-pass in LichAmnesia/lich-skills) into .claude/skills/build-until-pass in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LichAmnesia/lich-skills --skill build-until-pass -a codex`. Or copy the skill folder (skills/build-until-pass in LichAmnesia/lich-skills) into .agents/skills/build-until-pass in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LichAmnesia/lich-skills --skill build-until-pass -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/build-until-pass, .gemini/skills/build-until-pass, .github/skills/build-until-pass and .opencode/skills/build-until-pass in your project.
Going by SKILL.md and its folder, Build Until Pass Loop needs the command-line tools its instructions call (npm, cargo, go and tsc). Our summary lists: A project with a runnable build, typecheck, lint or test command.
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Build Until Pass Loop is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Build Until Pass Loop: Vibe Coding Partner (shareAI-lab/Kode-CLI, 5.2k stars), Odoo Workflow (unclecatvn/agent-skills, 143 stars), Code Review (21pounder/terminalAgent, 120 stars) and Code Writer (WildGums/Orc.LicenseManager, 108 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LichAmnesia (a GitHub user) maintains it in LichAmnesia/lich-skills, which has 234 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on June 9, 2026.
Source: LichAmnesia/lich-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.