lv-spec
Convert a decided brief or open bug into a step-by-step implementation plan.
Skill by slicedBread-marc
Chalk Labs
Need help deploying lv-spec?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/slicedbread-marc-lv-spec
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/lv-spec
What's inside
- Skill name
lv-spec- Description
- Convert a decided brief or open bug into a step-by-step implementation plan. Creates immovable plan folders in plans/. Use when the user wants to create or amend an implementation plan.
- License
- MIT
- Instructions
- 991 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Agent Skills spec issues
- body: 991 lines (spec recommends under 500)
Files (1)
- SKILL.md
SKILL.md (first lines)
# Spec Role
**`help` / `--help`:** if that is the whole argument, print the `## Usage` block at the end of this file verbatim and stop.
You are in **spec mode**. Your job is to convert decided briefs into precise, step-by-step implementation plans that another Claude session can execute without judgment calls.
## Unattended mode
If `LV_UNATTENDED=1` is set in your environment, you were launched by the orchestrator and **there is no human reading your output**. A question asked here hangs the pipeline.
Rules, in force for the whole session:
0. **Claim the artifact before you read anything** — the shared rule in [Claiming](#claiming), with `--if-free` so you stand down instead of racing:
```bash
scripts/lv-exec.sh lv-claim.sh PLN-NNN-<slug> --if-free # a plan
scripts/lv-exec.sh lv-claim.sh BRF-NNN --if-free # a brief, no plan folder yet
scripts/lv-exec.sh lv-claim.sh BUG-NNN --if-free # a bug, likewise
```
Exit 2 means **another** live session is already on it — print the message and exit 0. Exit 0 includes `already held on your behalf by the dispatcher`, which is the normal unattended case and means carry on: the claim names your own PID, and treating that as somebody else's is how the test role spun (WFI-073/075). Claiming *after* the work is claiming after the race: client-a ran two unattended lv-spec workers over one plan for twenty minutes, and the second wrote its `## Review` block on top of the first's, leaving plan.md with two contradicting verdicts (WFI-067). The dispatcher now claims at spawn, so under the orchestrator this is usually already held on your behalf — it costs one call to be sure.
1. If your instructions name an artifact (`PLN-NNN`, `BUG-NNN`, `BRF-NNN`), skip the selection menu entirely and work that artifact.
2. Prompts marked **[AUTO]** below resolve to their stated default. Take it and move on.
3. Prompts marked **[GATE]** below must never be guessed. Park the work instead:
```bash
scripts/lv-exec.sh lv-gate-open.sh <ID> <gate-name> "<question>" --context <path> --skill lv-spec
```
Then **exit cleanly** without changing REGISTRY state. The dispatcher skips gated artifacts; `/lv-attend` will bring a human to it.
**The claim is released for you.** `lv-gate-open.sh` drops it once the gate is up — gate first, claim second, so the plan is never both unguarded and parked (`docs/guard-ordering.md`). You do not call `lv-unclaim.sh` on a gate exit, and calling it anyway is harmless: the release is idempotent.
**Whatever happens — a finished plan, a blocked brief, nothing to do, or a parked gate — this skill never ends holding a claim.** Every exit path below says so again where it applies, but the rule is unconditional. It is written here because it was once true of only some of them: the Replanning path left a worker holding a claim on a plan it had just moved to `active`, which is WFI-012, and the fix went in there and nowhere else.
4. **Never guess.** If you are about to ask something that isn't in the table, treat it as a [GATE] — use gate name `needs-input`.
| Step | Prompt | Mode | Unattended behavior |
|-|-|-|-|
| Entry | Work selection menu | [AUTO] | Use the artifact named in your instructions |
| 1 | Deferred criteria to include | [AUTO] | Include none — do not widen scope unattended |
| 4b | Goal confirmation | [AUTO] | Accept your own draft if it is concrete and specific. If you cannot write a concrete goal from the source artifact, [GATE] `goal-missing` |
| 4c | Tag assignment | [AUTO] | Assign from `lv-list-tags.sh` based on slug, goal, and touched paths |
| 7c | Auto-test promotion (y/n) | [AUTO] | **Yes** — promote, the same as attended since WFI-006 |
| Review gate | Plan approval | **[GATE]** or [AUTO] | Depends on `specApproval.mode` — see below |
| 6a (replan) | An amendment narrows the Goal | **[GATE]** | `scope-reduction` — always, whatever the verdict and whatever the mode |
### The review gate
Read the mode before you exit — do not assume either behavior:
```bash
SPEC_MODE=$(scripts/lv-exec.sh lv-config-get.sh specApproval.mode verdict)
MAX_ROUNDS=$(scripts/lv-exec.sh lv-config-get.sh specApproval.maxReviewRounds 3)
GATE_TAGS=$(scripts/lv-exec.sh lv-config-get.sh specApproval.gateTags --list)
```
**`gate`** — the hard stop on *approval*. A spec may be written unattended; it may not be **approved** unattended. Park as `spec-approval` and exit.
**`verdict` (default since WFI-006)** — **the verdict is the gate**, not the plan's existence. An approved plan goes to `ready` with no human.
**`gateTags`** — plans carrying one of these tags always gate, whatever the verdict. The escape hatch, and not overridable.
**The review itself runs unattended in all three cases.** It is a read-only analysis that decides nothing; what differs is what its verdict is *allowed to do*. Every unattended exit goes through [Exit — unattended](#exit--unattended).
That ordering was once the other way around, and the tag path parked the plan *before* any review ran. Two consequences, both measured in a single drain: a tagged plan got **less** automated scrutiny than an untagged one and sat idle waiting for a human to commission a review a machine could have run immediately (one waited 3h20m unreviewed); and the human was handed approvable and unapprovable plans identically, so two of four gates were consumed only to end at `draft` with findings — exactly where an unattended Blocked verdict routes them anyway. A Blocked verdict needs no human. An Approved one is the only thing worth interrupting for.
Why the second mode exists, so you can judge whether the run in front of you fits it: in a measured 16-plan program the review found Critical findings in **8 of 8** plans drained with a human present. Not one was approvable as drafted, so the human's decision was never *"is this good?"* — it was always *"proceed with the fix loop the reviewer just specified."* The gate sat in front of the mechanism that does the filtering, admitting everything to a step that then rejected everything. Total human input across those 8 gates: the word "approve", then the word "all".
What that mode costs, stated plainly: some Criticals are found by *cross-plan* reasoning a per-plan reviewer cannot reach, and were caught only because a human skimming a queue of 15 plans noticed a contradiction. The [cross-plan consistency pass](#cross-plan-consistency) is the compensating control. If it is disabled, `verdict` mode is running without a safety net.
## IMMEDIATE STARTUP — run in parallel before reading further
1. Run branch check (do not prompt the user):
```bash
scripts/lv-exec.sh lv-branch-check.sh develop true
```
**Exit 2 means the check refused to switch.** Another session is holding this
shared checkout, and switching it would move a ref out from under them. Two
cases, both refused:
- parked on a branch the pipeline does not own — how four commits for one
plan landed on a human's topic branch (WFI-123);
- parked on `release` or `main` — a `/lv-release` or `/lv-deploy` is running.
The orchestrator never leaves the checkout there and never dispatches those
skills, so this is always somebody's deploy mid-flight. Switching sent a
deploy's last seven commits to `develop` instead of `main` (WFI-157).
Stop — do not `git checkout` past it. Under `LV_UNATTENDED=1` exit 0 without
claiming anything; the dispatcher offers the work again once the checkout is
back on develop.
2. Spawn a **haiku subagent** to fetch and format the worklist:
```
Agent(model: haiku, prompt: "Run `scripts/lv-exec.sh lv-list-specable.sh` in the current directory.
Parse the tab-separated output (sections: # replanning, # bugs, # briefs).
Format as TWO markdown tables:
**Table 1 — Available work** (actionable items with sequential numbering):
| # | Priority | Type | ID | Name | Detail |
|-|-|-|-|-|-|
- Replans: the third tab field is priority (show it). Type = Replan.
- Bugs: priority = '—', second field = severity, third = title. Type = Bug.
- Briefs: priority = '—', second field = name, third = description. Type = Brief.
If a brief's detail says 'Already has plan PLN-NNN', put it in Table 2 instead.
- A detail beginning 'GATED(<name>)' means the artifact is parked on an open gate.
Put it in Table 3 instead of Table 1, and do NOT give it a number.
**Table 3 — Parked on a gate** (informational, no numbering):
| Type | ID | Name | Gate |
|-|-|-|-|
Omit this table if empty.
**Table 2 — Already planned** (informational, no numbering):
| Type | ID | Name | Plan |
|-|-|-|-|
Only briefs that already have a plan go here. Omit this table if empty.
After the tables add: Mark a plan urgent: \`u <number>\` (replans only)
If no actionable items, say 'No specable work found.' — but still print Table 3 if it has rows.From slicedBread-marc/levain, MIT.
More from slicedBread-marc/levain
- 0.524score
lv-consistency
slicedBread-marc
Cross-plan consistency pass.
SkillBFreshness: BClaude Code +9 - 0.524score
lv-bug
slicedBread-marc
File a new bug report.
SkillBFreshness: BClaude Code +9 - 0.524score
lv-dep-notify
slicedBread-marc
File a notice, request or bug into another project's own pipeline.
SkillBFreshness: BClaude Code +9 - 0.524score
lv-rollback
slicedBread-marc
Execute a rollback for a completed or active plan.
SkillBFreshness: BClaude Code +9 - 0.524score
lv-brainstorm
slicedBread-marc
Capture and explore ideas.
SkillBFreshness: BClaude Code +9 - 0.521score
lv-help
slicedBread-marc
List every skill with its one-line purpose, or one skill's usage.
SkillBFreshness: BClaude Code +9 - 0.521score
lv-orchestrate
slicedBread-marc
Drive one bug, brief, or plan through the pipeline unattended, or start/stop the dispatcher daemon.
SkillBFreshness: BClaude Code +9 - 0.521score
lv-claim
slicedBread-marc
Take, release, or inspect the claim on a plan, bug, or brief — the lease that keeps another session off an artifact you are driving.
SkillBFreshness: BClaude Code +9 - 0.521score
lv-stage
slicedBread-marc
Start or stop the release-branch staging environment.
SkillBFreshness: BClaude Code +9 - 0.521score
lv-rack
slicedBread-marc
The cross-project board — every coordinated project's pipeline in one grid, and what waits on a human.
SkillBFreshness: BClaude Code +9 - 0.516score
lv-chrome-test
slicedBread-marc
Alias: now /lv-test <ID> browser.
SkillBFreshness: BClaude Code +9 - 0.516score
lv-debug
slicedBread-marc
Alias: now /lv-test (manual walkthrough) and /lv-bug.
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 24, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/slicedBread-marc/levain
- Website
- slicedbread.ca/levain
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from slicedBread-marc
- 0.524score
lv-rollback
slicedBread-marc
Execute a rollback for a completed or active plan.
SkillBFreshness: BClaude Code +9 - 0.524score
lv-brainstorm
slicedBread-marc
Capture and explore ideas.
SkillBFreshness: BClaude Code +9 - 0.524score
lv-bug
slicedBread-marc
File a new bug report.
SkillBFreshness: BClaude Code +9 - 0.524score
lv-dep-notify
slicedBread-marc
File a notice, request or bug into another project's own pipeline.
SkillBFreshness: BClaude Code +9 - 0.524score
lv-consistency
slicedBread-marc
Cross-plan consistency pass.
SkillBFreshness: BClaude Code +9 - 0.521score
lv-claim
slicedBread-marc
Take, release, or inspect the claim on a plan, bug, or brief — the lease that keeps another session off an artifact you are driving.
SkillBFreshness: BClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get lv-spec running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
lv-spec skill. Agent Mart. https://agentmart.dev/skills/slicedbread-marc-lv-spec (last updated 2026-10-24)