Package Exports
- @spec-driven/lisa
- @spec-driven/lisa/bin/lisa.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@spec-driven/lisa) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Lisa
Lisa is a spec-driven agent orchestration CLI.
It turns markdown specs into implementation work, runs a selected coding harness, and checks for drift between specs, code, tests, and benchmark budgets.
What it does
- Treats
activespecs in.specs/as the source of truth for intended behavior - Uses Git diffs on specs to decide what implementation work needs to happen
- Runs a single writer harness for implementation and isolated verifier audits during checks
- Prefers deterministic evidence first: code paths, test paths, test commands, benchmark commands
- Supports multiple harness adapters behind one CLI surface
Install
Lisa currently installs via the repository install.sh script.
Requirements:
Optional for agent-backed workflows:
- A supported harness CLI:
opencode,claude,codex, orgemini
git clone https://github.com/wkronmiller/lisa
cd lisa
./install.shThe installer runs bun install, links the lisa command locally, and surfaces harness warnings when supported CLIs are missing.
Quick start
# initialize a workspace in your repo
lisa spec init
# inspect workspace and harness availability
lisa spec status
# install Lisa guidance into local harness configs
lisa skill install --local
# see installed harness adapters
lisa spec harness list
# create or reuse a seed spec for your coding agent
lisa spec guide backend checkout-flow
# create a new spec
lisa spec generate backend checkout-flow
# inspect the spec delta and derived implementation plan
lisa spec diff
# implement changed specs
lisa spec implement
# verify changed specs or all specs
lisa spec check --changed
lisa spec check --allCore workflow
specs -> git diff -> structured deltas -> plan -> single writer harness -> tests/benchmarks -> parallel read-only verification -> reportsTypical loop:
- Run
lisa skill install --localwhen you want repo-local harness guidance installed automatically. - Run
lisa spec guide backend <name>when you want a draft seed spec and harness-specific next steps. - Write or update a spec under
.specs/backend/or.specs/frontend/. - Run
lisa spec implementto turn the spec delta into code and test changes. - Run
lisa spec check --changedorlisa spec check --allto verify conformance.
Spec layout
.specs/
project.md # optional global project descriptor
config.yaml
backend/
<spec-name>.md
<spec-name>.bench.<environment>.md
frontend/
<spec-name>.md
<spec-name>.bench.<environment>.md
environments/
<environment>.yamlproject.mdis an optional global project descriptor (see below)- Base behavioral specs live in
.specs/backend/and.specs/frontend/ - Benchmark sidecars live next to their base spec
- Environment definitions live in
.specs/environments/ - Runtime artifacts and reports are written under
.lisa/
Project descriptor
.specs/project.md is an optional file that declares project-level defaults. When present, its content is included as harness context for all stages (generate, implement, check, import), so the harness knows the project stack instead of guessing.
---
language: java
runtime: jdk21
framework: spring-boot
default_code_paths:
- src/main/java/**
default_test_paths:
- src/test/java/**
default_test_commands:
- ./gradlew test
build_commands:
- ./gradlew build
---
# My Service
A Spring Boot REST API for order management.
## Conventions
- Source code follows standard Maven/Gradle layout.
- Tests use JUnit 5 and Mockito.
- Integration tests live in `src/test/java/**/integration/`.The frontmatter fields provide structured defaults that individual specs can override. The markdown body is freeform and can describe conventions, patterns, or anything else the harness should know.
When a spec declares its own code_paths, test_paths, or test_commands, those values take precedence over the project-level defaults.
lisa spec init scaffolds a project.md template when creating a new workspace.
Spec format
Base specs are markdown with YAML frontmatter.
---
id: frontend.checkout-flow
status: active
code_paths:
- src/components/checkout/**
- src/services/orders/**
test_paths:
- tests/checkout/**
test_commands:
- npm run test -- checkout
context_paths:
- docs/checkout-flow.md
- src/services/payments/types.ts
owners:
- payments-team
---
# Summary
Enable customers to complete purchase with payment and address validation.
## Use Cases
- Customer reviews cart and enters shipping address.
- Customer selects a payment method.
- System processes payment and creates an order.
## Invariants
- No order is created until payment is captured.
- Retries never double-charge the customer.
## Failure Modes
- Invalid addresses are rejected before payment.
- Payment retries do not create duplicate orders.
## Acceptance Criteria
- Given valid address and payment, an order is created.
- Given payment decline, the customer can retry with another card.
## Out of Scope
- International shipping.Required sections for active base specs:
- frontmatter with
id,status,code_paths, andtest_commandsortest_paths - optional
context_pathsin frontmatter: additional files passed to the harness as context duringgenerate,implement, andcheckstages # Summary## Use Cases## Invariants## Acceptance Criteria## Out of Scope
lisa spec generate also includes ## Failure Modes, and that section is used by planning workflows, but it is not currently required by the validator.
Status values:
draft: imported, not yet authoritativeactive: source of truth and enforceddeprecated: kept for history, not enforced for new work
Benchmark sidecars
Use a sidecar spec when a feature has performance requirements.
---
id: frontend.checkout-flow.bench.ci-perf
kind: benchmark
extends: frontend.checkout-flow
status: active
required: true
environment: ci-perf
command: npm run bench:checkout -- --profile ci-perf --output json
baseline: origin/main
noise_tolerance_pct: 5
metrics:
page_load_ms: "<= 2000"
checkout_completion_ms: "<= 5000"
error_rate_pct: "<= 0.1"
---
# Scenario
Checkout flow under expected concurrent load.lisa spec check runs the benchmark command and enforces declared thresholds for sidecars marked required: true.
baseline is a label used during verification. Lisa does not check out and run the baseline revision automatically; the benchmark command must emit baseline metrics if you want relative regression checks enforced.
Commands
| Command | Purpose |
|---|---|
lisa skill install --global |
Install Lisa guidance into global harness config roots |
lisa skill install --local |
Install Lisa guidance into the current repository |
lisa spec init |
Scaffold a .specs workspace |
lisa spec status |
Show workspace and harness status |
lisa spec harness list |
List registered harness adapters and capabilities |
| `lisa spec guide [backend | frontend] [name]` |
| `lisa spec generate [backend | frontend] [name]` |
lisa spec diff |
Show changed spec deltas and the derived plan |
lisa spec implement |
Apply code and test changes from changed specs |
lisa spec check --changed |
Verify only impacted specs |
lisa spec check --all |
Scan every base spec and verify active ones |
lisa spec import <path...> |
Draft specs from existing code paths |
| `lisa skill install --global | --local` |
Harness model
Lisa keeps the core workflow harness-agnostic.
Built-in adapters:
opencodecodexclaude-codegemini
Harness selection lives in .specs/config.yaml and can be overridden by CLI flags.
Coding agent skills
Checked-in Lisa skill artifacts live under skills/:
skills/codex/AGENTS.mdskills/opencode/AGENTS.mdskills/claude-code/CLAUDE.mdskills/gemini/GEMINI.md
Install them with:
lisa skill install --local
lisa skill install --globalInstall targets:
- Local:
AGENTS.mdfor Codex,.opencode/skills/lisa/SKILL.mdfor OpenCode,CLAUDE.mdfor Claude Code,GEMINI.mdfor Gemini CLI - Global:
${CODEX_HOME:-~/.codex}/AGENTS.md,${XDG_CONFIG_HOME:-~/.config}/opencode/skills/lisa/SKILL.md,~/.claude/CLAUDE.md,~/.gemini/GEMINI.md
Keep these files aligned with the current CLI surface, supported harness adapters, install destinations, and .specs/ layout whenever Lisa workflows change.
Install those checked-in skills into supported harnesses with:
lisa skill install --local
lisa skill install --globalInstall targets:
- Codex:
AGENTS.mdlocally,${CODEX_HOME:-~/.codex}/AGENTS.mdglobally - Claude Code:
CLAUDE.mdlocally,~/.claude/CLAUDE.mdglobally - Gemini CLI:
GEMINI.mdlocally,~/.gemini/GEMINI.mdglobally - OpenCode:
.opencode/skills/lisa/SKILL.mdlocally,${XDG_CONFIG_HOME:-~/.config}/opencode/skills/lisa/SKILL.mdglobally
Set LISA_OUTPUT_MODE=interactive or LISA_OUTPUT_MODE=concise to override Lisa's help and installer output mode.
lisa spec guide uses those checked-in skill artifacts to point a coding agent at the right harness-specific guidance before you return to lisa spec diff, lisa spec implement, and lisa spec check. In repos that do not keep checked-in skills/ files yet, Lisa materializes the built-in skill under .lisa/skills/ for the selected harness.
Optional managed agent guidance can be enabled in .specs/config.yaml:
agent_guidance:
enabled: true
target: docs/lisa-guidance.mdWhen enabled, successful lisa spec generate, lisa spec implement, and lisa spec import runs refresh only the Lisa-managed block in the target file with the current command surface, skill artifact paths, and active-spec pointers. Avoid targeting AGENTS.md, CLAUDE.md, or GEMINI.md once those files have diverged from Lisa's bundled root guidance, because Lisa only rewrites those root targets when they still match the bundled artifact exactly or already contain a Lisa-managed block.
Example:
default_stage_profiles:
generate: planner
implement: implementer
check: verifier
import: importer
profiles:
planner:
harness: opencode
allow_edits: false
implementer:
harness: opencode
allow_edits: true
verifier:
harness: opencode
allow_edits: false
importer:
harness: opencode
allow_edits: false
harnesses:
opencode:
command: opencode
args: []
codex:
command: codex
args: []
claude-code:
command: claude
args: []
gemini:
command: gemini
args: []Reports and outputs
lisa spec check writes:
.lisa/spec-report.json.lisa/spec-report.md.lisa/check/<spec-id>.jsonfor per-spec details
Possible verification verdicts:
PASSFAILUNSURESKIPPED
Development
bun install
bun test ./tests
bun build lisa.ts --outfile bin/lisa-runtime.js --target bunPackage scripts:
bun run startbun run testbun run buildbun run install-local
Project status
Lisa is usable today and, based on the current feature set, roughly 80% complete.
Implemented:
- spec parsing and validation
- Git-backed spec diff and planning
- spec generation, implementation, verification, import, and harness listing
- benchmark sidecars and environment-based checks
- parallel snapshot-isolated verifier audits
- built-in
opencode,codex,claude-code, andgeminiadapters
Still rough:
lisa spec statusis useful but not very deep- structured-output handling is not fully consistent across adapters
- edge-case coverage around adapter failures and benchmark parsing can be improved
- draft-to-active review flow after import is still lightweight
Design reference
Current design and workflow guidance lives in AGENTS.md and the self-hosted specs under .specs/backend/.
License
MIT