Lamina verify
Headless Product Design skill for AI coding agents | Design how it works, verify what you ship.
npx -y skills add aryaniyaps/lamina --skill lamina-verifyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Use only when explicitly invoked as lamina-verify. Verify a live or brownfield product against its product graph: critical promises, reachable workflows, authority, invariants, state integrity, recovery, accessibility, and contract drift; emit evidence-backed fixes before merge. Vague “audit our app” briefs must clarify-and-STOP before any seed.
SKILL.md
8.3 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
/lamina-verify
Treat application source as read-only evidence. Write findings and reports only under .lamina/; a later fix turn edits application source.
Writes: .lamina/ only. Repo: read-only. Do not create, edit, delete, format, or refactor application source.
Gate order (do this first — before EXEC NOW)
- Init gate — require a structurally valid
.lamina/business-context.md(see Step 0). If blocked, emit init-blocked and STOP. - Clarify gate — if the audit target has no concrete flow/surface/feature named (signals: literally “Audit our app.”, “review the product”, only generic app/product language) and the user did not say “brief is complete” / “do not clarify” / “proceed with labeled assumptions”: emit only the clarification contract below and STOP. Do not run
seed-verify-run.mjs, do not write.lamina/runs, do not emit Executive summary/Findings. - Otherwise → EXEC NOW (seed-verify) for concrete audits (any domain — named flow, surface, route, or feature).
Clarification contract (copy exactly when clarify applies — keep heading casing)
## Lamina: clarification needed
### Status
Blocked before artifact generation.
### Clarifying questions
1. Which concrete flow, surface, route, or feature should be audited?
2. Which primary persona or success outcome should ground the review?
3. Any known failure/empty/permission concerns to prioritize?
### Why these block the artifact
Need a concrete flow before writing audit artifacts.
### How to proceed
Name the flow/surface, or say proceed with labeled assumptions.
### Do not
- Do not create run.json, fix.md, or report.md yet
Do not paraphrase these five ### headings. Do not seed on “Audit our app.”
EXEC NOW — concrete audit briefs only (any named target)
Applies only after init passes and clarify does not apply. A named flow/surface/route/feature from any domain is concrete enough — EXEC NOW. Never use this path for “Audit our app.” without a named target.
Before claiming init failure: read .lamina/business-context.md with a file tool. If it exists and validates, init passes — do not invent missing context.
- Read
.lamina/business-context.md(required). Domain mismatch is not an init failure — note under### Open questions. - From workspace root, first shell command must be the verify seed — do not explore
node_modulesor invent init failures when a concrete target is already named:
SEED=$(ls ./{.claude,.codex,.opencode,.agents}/skills/lamina-verify/scripts/seed-verify-run.mjs ./{.claude,.codex,.opencode,.agents}/skills/lamina/scripts/seed-verify-run.mjs 2>/dev/null | head -1)
node "$SEED" --slug <kebab-slug> --problem "<brief>" --outcome "<outcome>" --users primary-user
test -f .lamina/runs/<kebab-slug>/run.json
test -f .lamina/runs/<kebab-slug>/run.md
Never --help/-h. Never rm / clean up .lamina/ or the workspace. Wrong slug? Re-seed with the correct --slug.
If seed prints REFUSE_SEED, you attempted a vague audit — emit the clarification contract and STOP (no retries with invented flows).
When seed prints status=draft: continue verification — do not stop or emit completion headings yet. The seed only initializes the workspace; it never completes the audit.
-
Inspect the target project (read-only). Read application source and/or attempt a runnable UI. Build or load a project-grounded graph in
run.json. Setstatus: verifyingwhile auditing. Disclose grounding mode (live UI vs static source) and evidence gaps in the final report. -
Visual grounding: Prefer live UI capture per
../lamina-orchestrator/patterns/visual-walkthrough.mdwhen a productbase_urlis runnable. Fall back to static UI source when the app cannot run; record limitations explicitly. -
Persona panel completion gate (unconditional for brownfield): Persona simulation is never optional. If
.lamina/personas.jsonis missing, empty, or invalid, read../lamina-user-modeling/SKILL.md, derive evidence-grounded provisional personas from.lamina/business-context.mdplus observed brownfield source, write and validate.lamina/personas.json, then rungraph-tool.mjs persona-packs. Spawn isolated reviewers per../lamina-orchestrator/patterns/persona-panel.mdand populatepersona_findings[]only from reviewer output. Never skip the panel, never inline-fake persona results. -
Truncation refuse: If the user asks to “pick top N lenses”, “skip the rest”, or otherwise truncate full-flow audit, refuse. Apply the full-flow lens set (
lamina-flow-design,lamina-heuristic-review,lamina-navigation,lamina-discoverability,lamina-forms,lamina-error-handling,lamina-content-design,lamina-accessibility,lamina-trust,lamina-feedback-and-status,lamina-decision-making) and say you will not skip lenses. Never write “Remaining lenses skipped”. -
Completion gate: Write evidence-backed
findings[], validate withgraph-tool.mjs validate, renderreport.md,fix.md, andimplement.md, setstatus: complete, then reply with exact headings:### Executive summary,### Findings,### Open questions. Repeat any@pathcitations from the brief in Findings, or write insufficient detail. Mention audit / findings / prioritized improvements; empty / failure / permission; persona ids from the validated persona set; literally mentionlamina-user-modelingwhen provisional personas were derived.
Step 0 — Init gate
Check .lamina/business-context.md per ../lamina-orchestrator/prerequisites/init-required.md.
Hard rejects: personas-only, “skip init”, prior run.json without business-context.
If the gate fails: emit only this contract and STOP:
## Lamina: init required
### Status
Blocked — `/lamina-init` has not been run on this project, or `.lamina/business-context.md` is incomplete.
### What's missing
- <specific validation failure>
### Next step
Run `/lamina-init` to establish `.lamina/business-context.md`, then retry this command.
### Do not
- Proceed with workflow steps or create `.lamina/` artifacts
- Auto-run init without the user invoking `/lamina-init`
- Treat personas or prior product graphs as a substitute for business context
Shell workflow (fallback when seed is unavailable)
node ../lamina-orchestrator/lib/graph-tool.mjs create .lamina/runs/<slug>/run.json id=<slug> stage=shape hook=audit problem="<problem>" outcome="<outcome>" users=<user-id>
# Inspect project; build grounded graph; set status=verifying; run persona panel when personas exist
# Populate evidence-backed findings[]; validate; render report.md + fix.md + implement.md; set status=complete
node ../lamina-orchestrator/lib/graph-tool.mjs validate .lamina/runs/<slug>/run.json
test -f .lamina/runs/<slug>/fix.md && test -f .lamina/runs/<slug>/report.md
Prefer the seed path whenever the script exists.
Completion output contract (after evidence-backed verification)
Only after run.json validates at status: complete and report.md, fix.md, and implement.md exist:
### Executive summary
### Findings
### Open questions
Required reads
../lamina-orchestrator/load-protocol.md../lamina-orchestrator/artifacts.md../lamina-orchestrator/references/product-graph.md../lamina-orchestrator/workflows/verify.md../lamina-orchestrator/patterns/persona-panel.md../lamina-orchestrator/prompts/subagents/persona-panel-spawn.md../lamina-orchestrator/prerequisites/init-required.md../lamina-orchestrator/prompts/outputs/init-blocked.md
Verification order
Follow ../lamina-orchestrator/workflows/verify.md. Inspect the target project, ground the graph in observed evidence, derive or repair personas via lamina-user-modeling when needed, run persona reviewers unconditionally, and render completion artifacts only after validation.