Harness Contributing
FairladyZ625/harness-anything
Contribute a public change to Harness Anything from a GitHub issue through an isolated worktree, scoped tests, manifest-selected gates, a complete bilingual PR body, review triage, and maintainer…
Phase 2 of the loop pipeline for lago-front. An agent skill from getlago/lago-front.
$ npx skills add getlago/lago-front --skill loop-build -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install getlago/lago-front loop-build --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/getlago/lago-front.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/loop-build .claude/skills/loop-build && 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 "loop-build" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/loop-build into .claude/skills/loop-build/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "loop-build", 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/getlago/lago-front/tree/main/.agents/skills/loop-buildType 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 getlago/lago-front --skill loop-build -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install getlago/lago-front loop-build --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/loop-build .agents/skills/loop-build && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "loop-build" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/loop-build into .agents/skills/loop-build/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "loop-build", 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 getlago/lago-front --skill loop-build -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install getlago/lago-front loop-build --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/loop-build .cursor/skills/loop-build && 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 "loop-build" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/loop-build into .cursor/skills/loop-build/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "loop-build", 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/getlago/lago-front.git --path .agents/skills/loop-build--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 getlago/lago-front --skill loop-build -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install getlago/lago-front loop-build --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/loop-build .gemini/skills/loop-build && 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 "loop-build" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/loop-build into .gemini/skills/loop-build/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "loop-build", 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 getlago/lago-front loop-buildInstalls 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 getlago/lago-front --skill loop-build -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/loop-build .github/skills/loop-build && 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 "loop-build" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/loop-build into .github/skills/loop-build/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "loop-build", 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 getlago/lago-front --skill loop-build -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install getlago/lago-front loop-build --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/loop-build .opencode/skills/loop-build && 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 "loop-build" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/loop-build into .opencode/skills/loop-build/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "loop-build", 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.
loop-buildPhase 2 of the loop pipeline for lago-front. An agent skill from getlago/lago-front.
Loop Build is an agent skill from getlago/lago-front. Phase 2 of the loop pipeline for lago-front. Takes an ISSUE-ID, reads spec.md from the run state dir, declares the minimal diff in plan.md, implements it in a dedicated worktree — or in the current checkout with --in-place (automatic inside a Conductor workspace) — and gets lint + types + translations gates green. Use when user says "/loop-build <ISSUE-ID [--in-place]" or the loop-run orchestrator invokes the build phase.
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Git worktrees and Translation. The repository describes itself as: Open Source Metering and Usage Based Billing. The licence is AGPL-3.0.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d4cb9fe. 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:
gitpnpmdockerFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, pnpm and docker, 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.
Loop Build loads about 3.5k tokens when it runs. Until then it costs about 110 tokens; SKILL.md has 1,738 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 noted patterns worth knowing about, such as sudo or a known installer.
Use the repo's own tool (handles branch, .env copy, pnpm install, port slot, dedicated docker containers, isolated API wAutomated 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 getlago/lago-front at commit d4cb9fe, republished under its AGPL-3.0 licence (© getlago). 1,738 words, ~3,510 tokens.
.claude/skills/loop-build/SKILL.md (or your agent's skills folder).Input: an ISSUE-ID (e.g. <TEAM>-<N>). State dir: $LOOP_STATE_DIR/<ISSUE-ID>/ (default ~/.claude/loop-state/<ISSUE-ID>/). Requires spec.md there — if missing, stop and tell the operator to run loop-spec first.
Repo: a lago-front checkout. Two layouts, resolved by loop-run and defined in its ## Layout section — worktree (the default: front/ in the lago monorepo, worktrees in front-worktrees/ beside it) and in-place (the current checkout is the worktree; automatic inside a Conductor workspace, forced with --in-place). Invoked directly without loop-run, resolve it the same way: $CONDUCTOR_WORKSPACE_PATH set or --in-place passed → in-place, else worktree.
Nothing is fetched. spec.md carries the ticket and its sources; the coding styleguide is .agents/docs/frontend-coding-styleguide.md. No Linear, no Notion in this phase.
review.md in the state dir, or it says PASS.review.md (or adversarial.md) has verdict FAIL, or ci-failure.md was just written by loop-run — fix ONLY the numbered issues / CI failures listed there, nothing else. Reuse the existing worktree from state.md.Preflight — the worktree layout creates its workspace, in-place validates the one it was handed:
worktree layout (all must hold, else STOP and ask the operator):
docker ps --format '{{.Names}}' | grep lago_front_dev.main in front/ up to date: git -C front pull --ff-only origin main. If it fails (dirty checkout, diverged), STOP — never stash, reset, or force.front-worktrees/<ISSUE-ID>-* dir already exists from an aborted run, STOP and ask — never delete or force.in-place layout:
FRONT="$(git rev-parse --show-toplevel)"
[ -x "$FRONT/scripts/iter-budget.sh" ] || { echo "not a lago-front checkout"; exit 1; }
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
git fetch origin mainBRANCH is main (or $CONDUCTOR_DEFAULT_BRANCH), or is HEAD (detached). The loop only ever works on a feature branch.git fetch origin main is required: the review phase diffs against origin/main. Fetch only — NEVER pull, rebase, merge, stash or reset (the checkout is the operator's).state.md already exists for this ISSUE-ID and its worktree: is a different path, STOP — that state belongs to another checkout.docker ps --format '{{.Names}}' | grep lago_front_dev): missing → warn only, never block. Gates run on the host.Create the worktree — worktree layout ONLY; in in-place skip this step entirely (nothing is created, lago-worktree is never called). Use the repo's own tool (handles branch, .env copy, pnpm install, port slot, dedicated docker containers, isolated API worktree):
lago-worktree create <BRANCH> --from-front=main --from-api=main(lago-worktree = front/scripts/lago-worktree.sh; if the alias is unavailable, call the script directly.)
Branch naming — <BRANCH> = <ISSUE-ID>-<topic-slug>: the Linear issue ID first, UPPERCASE, then a short kebab-case slug of the ticket's main topic (3-6 words), e.g. <TEAM>-<N>-swap-customer-overview-connection. No Linear ticket (edge case, e.g. tooling change requested directly) → just the kebab-case topic slug: clean-vite-cache-on-worktree-start. Worktree dir name = branch name. The session stays in the lago root — operate on the worktree via git -C / cd in subshells.
In in-place the branch is whatever the checkout already carried and is never renamed (git branch -m is forbidden: Conductor persists the branch name in its own database, so a git-side rename desyncs its diff view and its archive-time branch deletion).
Record state: write state.md in the state dir (keyed on the bare ISSUE-ID). Key names are load-bearing — loop-review, loop-revise and scripts/loop-restart.sh read them:
layout: <worktree | in-place>
worktree: <absolute path — front-worktrees/<BRANCH> in worktree layout, the checkout itself in in-place>
branch: <BRANCH>
port: <front port printed by lago-worktree, or $CONDUCTOR_PORT in in-place>
workspace: <$CONDUCTOR_WORKSPACE_NAME — in-place under Conductor only>
container: <lago_front_wt_<SAN(branch)> | lago_front_ct_<SAN(workspace)> — omit when there is none>SAN = tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/_/g' on the branch (worktree layout) or on the workspace name (in-place).
Plan before code — write plan.md in the state dir. It is the declaration scripts/loop-plan-check.sh and the reviewers compare the diff against; a new file or export that appears in the diff without appearing here triggers the adversarial pass:
# <ISSUE-ID> plan
## Files to change
<path — one line: what changes>
## New files
<path — why no existing file could host it, naming the sibling checked; or "none">
## New exports
<symbol (path) — who consumes it, why inlining at the call sites is worse; or "none">
## Estimated size
<N lines>
## Comments kept
<one line per comment the diff keeps: `- <path> — constraint|why-not|trap — "<first words>"`; or "none">
## Deviations
<appended during implementation: what changed from the plan above and the one-line reason>Start from spec.md ## Files to touch and ## Premises. The default for ## New files, ## New exports and ## Comments kept is "none": write the diff in your head without the abstraction first, and add it only when the inline version is larger. Read .agents/docs/frontend-coding-styleguide.md now, before the first edit.
Implement per spec.md and plan.md, inside the worktree: path from state.md only (in in-place that is the cwd). The checks below are capped by scripts/skill-budget.sh.
<!-- checks:start -->
## Deviations and continue only if minor; otherwise stop and report. A premise spec.md marks unverified is not built around: build what the code shows, and say so in the report.packages/design-system) and src/components/designSystem, the shared modules and the global layers (Apollo error link, toast, router wrappers) for one that already does the job - reuse or extend, never duplicate. When the spec says to mirror a sibling, diff YOUR dependency list against ITS: a dependency the sibling deliberately avoided (an aggregate hook, a wider query) needs a reason in the report. When the component used or touched has an entry in the lago-frontend-patterns skill's index, read it before writing the code.translations/base.json): search for an existing label with the same meaning before adding a key; new keys only when nothing fits, following the naming pattern; remove a key when the change removes its last usage.scripts/diff-hygiene.sh flags every comment the diff adds unless plan.md ## Comments kept lists it with its category — constraint (an external rule the reader cannot see, identifier named), why-not (the obvious alternative is wrong), trap (an edit here breaks something elsewhere) — and refuses outright a comment inside a type/interface body, above an import, one that repeats the export's name, or one over 2 lines. Nothing else is a category: "explains the prop", "describes the step", "summarises the function" are deletions. Expect none on a typical diff.as unknown as your way past a type. A shared component's prop type: narrow to Pick<...> of the fields it reads. Two enums with identical members: an exhaustive Record<Source, Target> lookup, the only form that breaks the build when one enum grows.MainHeader.Configure), a drawer open({ children }), a child seeding useState from a prop: each copies a mutable value once. Either encode every field it reads in a key (remount / snapshot key) or pass a getter / read the prop. A parent that resets a value the child also stores is a silent wrong-save.useEffect does not stop its own render: pair every guard effect with an early return null on the same condition (after all hooks), and assert container.firstChild is null.<!-- checks:end -->
GraphQL documents changed → pnpm codegen, and when the worktree's API runs a feature branch, keep only the hunks in src/generated/graphql.tsx that belong to your own operations (CI regenerates from lago-api main).
Tests — ALWAYS: after the implementation is complete, invoke the make-tests skill on the changes. NEVER hand-write tests.
Gates (run in the worktree, all must pass):
pnpm lint (use pnpm lint:fix first if there are formatting issues), pnpm types, pnpm translations:inspect, pnpm translations:ensure-consistency.<front>/scripts/diff-hygiene.sh origin/main <worktree> <state dir>/plan.md — every added comment is declared with a category, none in a refused position. Flagged → delete it (the default) or, for a real constraint/why-not/trap, add its line to ## Comments kept.<front>/scripts/loop-plan-check.sh <worktree> <state dir>/plan.md — every new file / export / re-export is declared. Exit 1 → either delete the abstraction or declare it in plan.md with its reason; never leave it undeclared. Exit 3 (all declared) passes the gate: it is loop-run's signal to run the adversarial pass on what was declared.pnpm test with no path is FORBIDDEN).--runInBand is load/cold-cache flake, not a regression: rerun before diagnosing or consuming a cycle.Report: diff stat, plan.md deviations, gates output summary. Do NOT commit — shipping happens in loop-run after review PASS.
Read the numbered issues from review.md / adversarial.md (or the failure report in ci-failure.md). ci-failure.md is already distilled by loop-run — never open the ci-raw-<N>.log it references; if it looks insufficient, grep that raw file for the one specific symbol you need, never read it whole.
Escalating retry — attempt N>1 must not be a blind rerun of attempt N-1:
review-history.md / ci-failure-history.md in the state dir.<checkout>/scripts/iter-budget.sh.Fix only those issues, in the worktree: path from state.md. A fix does not earn a comment: if the reviewer misread the code, rename or split it; the reasoning goes in the report and the commit body. An [adversarial] issue is fixed by inlining or deleting, never by justifying the abstraction in plan.md after the fact.
Operator input that changes behaviour (a design, a copy change, a new rule) is a spec amendment, not a patch: write the new acceptance criteria into spec.md FIRST and enumerate the state transitions they imply (mount / select / change / revert / user-edited / locked), then code.
Re-run the gates (step 7 above). If the fix touched testable logic, re-invoke make-tests for the affected paths.
Report what changed per issue number, including the "what's different from the previous attempt" line for each.
worktree: path from state.md. In the worktree layout that means never the main front/ checkout; in in-place never $CONDUCTOR_ROOT_PATH and never another workspace.in-place creates and destroys nothing: no lago-worktree, no branch rename, no Conductor workspace created, archived or renamed.git stash there: the review phase leaves git add -N entries and the pop conflicts. Compare against the base with git show <base>:<path>, or in a throwaway git worktree.© getlago, AGPL-3.0. 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 .agents/skills/loop-build of getlago/lago-front.
Open the folder on GitHubat commit d4cb9fe
Loop Build 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 |
|---|---|---|---|---|---|---|
| Loop Build this skillgetlago/lago-front | 163 | — | ~3.5k | Automated safety check: Notes | AGPL-3.0 | |
| Harness ContributingFairladyZ625/harness-anything | 225 | — | ~4.2k | Automated safety check: Pass | AGPL-3.0 | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Migrate Core Code to Submodulestinyhumansai/openhuman | 42k | — | ~2.6k | Automated safety check: Pass | GPL-3.0 | |
| Finishing A Development Branchfarm-fe/farm | 5.6k | 34 repos | ~1.8k | Automated safety check: Pass | MIT | |
| PonytailDavidObando/gsharp | 565 | 8 repos | ~1.7k | Automated safety check: Pass | MIT |
FairladyZ625/harness-anything
Contribute a public change to Harness Anything from a GitHub issue through an isolated worktree, scoped tests, manifest-selected gates, a complete bilingual PR body, review triage, and maintainer…
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
tinyhumansai/openhuman
Plans and carries out moving non-host-specific code and its tests from the OpenHuman core into vendored tiny submodule libraries, then releases the submodule and re-pins the host.
farm-fe/farm
A skill your agent uses when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for…
DavidObando/gsharp
Forces the laziest solution that actually works, simplest, shortest, most minimal.
lobehub/lobehub
Audits stale Git worktrees and branches with a bundled script, classifies each one, and deletes only after you approve the exact candidates.
getlago/lago-front
A skill your agent uses when asked to babysit, monitor, shepherd, or keep working on a GitHub pull request until it is green, review-ready, approved, mergeable, or ready to merge.
getlago/lago-front
Triage a CVE / Dependabot alert in a JS/TS project and recommend the least-invasive fix.
getlago/lago-front
Extract a Formik form section into a TanStack Form drawer with Zod validation, following the plan form migration pattern.
getlago/lago-front
Cleanup phase of the loop pipeline for lago-front, for the worktree layout only.
getlago/lago-front
You are an advanced Docker containerization expert with comprehensive, practical knowledge of container optimization, security hardening, multi-stage builds, orchestration patterns, and production…
getlago/lago-front
Harvest phase of the loop pipeline for lago-front. An agent skill from getlago/lago-front.
Categories
Phase 2 of the loop pipeline for lago-front. An agent skill from getlago/lago-front. Loop Build is an agent skill from getlago/lago-front. Phase 2 of the loop pipeline for lago-front.
Loop Build fits situations like: user says /loop-build <ISSUE-ID [--in-place]; the loop-run orchestrator invokes the build phase.
Run `npx skills add getlago/lago-front --skill loop-build -a claude-code`. Or copy the skill folder (.agents/skills/loop-build in getlago/lago-front) into .claude/skills/loop-build in your project. Claude Code loads it when a task matches its description.
Run `npx skills add getlago/lago-front --skill loop-build -a codex`. Or copy the skill folder (.agents/skills/loop-build in getlago/lago-front) into .agents/skills/loop-build 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 getlago/lago-front --skill loop-build -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/loop-build, .gemini/skills/loop-build, .github/skills/loop-build and .opencode/skills/loop-build in your project.
Going by SKILL.md and its folder, Loop Build needs the command-line tools its instructions call (git, pnpm and docker). Our summary lists: Docker.
SKILL.md contains no URLs. Its commands use git and docker, 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 notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Loop Build is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k 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 Loop Build: Harness Contributing (FairladyZ625/harness-anything, 225 stars), Finishing a Development Branch (obra/superpowers, 296k stars), Migrate Core Code to Submodules (tinyhumansai/openhuman, 42k stars) and Finishing A Development Branch (farm-fe/farm, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
getlago (a GitHub organization) maintains it in getlago/lago-front, which has 163 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 8, 2026.
Source: getlago/lago-front on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.