plugins/lisa-cursor/skills/lisa-agent-ready/SKILL.md
Make a brownfield project agent-ready: build the initial knowledge wiki from read-only, redacted ingestion of every inventoried source (repository, git history, connected trackers, docs, observability), then write wiki/gaps.md — the questions only a human can answer before agents can operate the project autonomously. Iterative convergence: humans answer the gaps inline, a fresh session re-runs the skill, verified answers are absorbed into wiki pages, and the loop repeats until every source is complete, zero open gaps remain, and the project is declared agent-ready. This is the knowledge half of brownfield onboarding; standards adoption (applying Lisa's lint rules, guardrails, and thresholds, then refactoring to conform without changing behavior) follows it.
npx skillsauth add codyswanngt/lisa lisa-agent-readyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Run this skill as if the following is literally true — it is the operating premise, not a role-play flourish:
Starting tomorrow, you — the agent — maintain this project without any human input. Today is your only chance to ask questions. Use the existing connections, the git history, the tracker, the docs, and anything else you have access to, to build the initial knowledge wiki. Critically: write down every gap a human must fill in today for you to be able to operate autonomously — the questions you would otherwise have to guess at tomorrow.
Greenfield projects start agent-ready by construction. Brownfield projects carry years of tacit knowledge in heads, not files — this skill converges that knowledge into the wiki before the factories are allowed to run unattended.
A gap is something that is (a) not derivable from any source you can reach, and (b) dangerous to guess — guessing would risk business logic, product intent, money, data, security, or an irreversible external effect. Examples: "why does the billing cutoff run at 02:00 and what breaks if it moves", "which of these two payment flows is the live one", "who are the users of the admin panel and what must never change for them".
Not a gap: anything you can derive by reading harder — architecture, conventions, test behavior, deploy topology, dead code. Derive it and write it into the wiki instead. A lazy gap that a later reader could have answered from the repository is a defect of this skill's output.
Ensure the knowledge wiki exists. If the project has no wiki/, install it first (delegate to
the wiki install/setup surface — /lisa:wiki:install / lisa-wiki-setup); do not hand-roll a
wiki layout.
Inventory every configured or discoverable source, including sources whose access probe fails:
the repository and its full git history, the configured tracker and source, connected MCP
servers and access layers (observability, docs, analytics), CI history, and deployed environments
named in config. An inaccessible source is still an inventoried source; never omit it to make the
run look complete.
Create or update the durable source-status registry at wiki/state/agent-ready/sources.json. Give each
independently accessible source/scope a stable source_id and preserve one row per source across
re-runs. Use this explicit JSON shape:
{
"schema_version": 1,
"updated_at": "<ISO-8601 UTC>",
"sources": [
{
"source_id": "repository",
"scope": "local repository and full git history",
"read_only_probe": { "command": "<reader-safe probe>", "observed": "<safe result>" },
"terminal_status": "complete",
"sanitized_evidence": ["wiki/sources/repository/<reader-safe-source-note>.md"],
"open_gap": null
}
]
}
terminal_status may be pending only while the current run is actively attempting that source.
Before Phase 5, every row must carry exactly one terminal value: complete, partial, or
unavailable. Never delete or merge away a failed row to reach readiness.
Detect a prior run: if wiki/gaps.md exists, this is an absorption run — go to Phase 3
first, then re-audit.
wiki/** plus
creating Lisa's own work items in the configured tracker through lisa-tracker-write — the Phase 6
readiness blockers, and nothing else. That carve-out authorizes creating a Lisa work item only; it is never license to edit,
comment on, transition, acknowledge, close, or otherwise mutate any ingested source item —
filing Lisa's own ticket and writing back to a source you ingested are different acts, and only
the first is permitted. The wiki's own git branch/PR publication flow and that single
tracker-create path are the only external mutations this skill authorizes.
If a connector cannot prove a read-only operation, do not invoke it; mark the source unavailable
and surface the access problem as a gap.wiki/ — including
source notes, synthesis, citations, the source-status registry, wiki/gaps.md, and wiki/log.md — run it
through the wiki ingestion connector's sanitizer / centralized scripts/wiki-safety.mjs policy.
Redact secrets, passwords, API keys, tokens, cookies, private keys, connection strings, OAuth/MCP
credentials and artifacts, plus the sensitive PII the policy detects (SSNs, payment-card numbers,
bank-account numbers, and routing numbers). Apply data minimization before the sanitizer: omit
or aggregate ordinary person-level user data such as names, email addresses, phone numbers,
addresses, account/session identifiers, and free-form user profiles; prefer role labels and
aggregate counts. If a required source scope contains a person-level class the configured approved
scanner cannot prove removed, do not persist that material and leave the source partial or
unavailable with an unresolved gap. Never place raw sensitive values, source excerpts containing
them, or scanner output in a wiki file, temp file, log, state field, gap entry, commit, or PR
summary.complete or partial, run the generated-output safety gate
(scripts/verify-wiki-safety.mjs) over every wiki file it affected. A failing or unavailable
required scanner blocks persistence and leaves the source partial or unavailable; it is never
evidence of completion. Preserve the wiki ingestion policy that redacted or sensitive runs require
human PR review rather than auto-merge.Delegate to the wiki's ingestion surface (lisa-wiki-ingest and its connectors) across the
repository, the git history, and each connected source from the Phase 0 inventory. Bounded and
resumable — prefer several focused ingests over one unbounded crawl.
After attempting each source, update its registry row with its terminal result and only sanitized, non-sensitive evidence:
complete — the entire inventoried scope was fetched read-only, sanitized before persistence,
written as source notes/synthesis, and passed the wiki safety and ingestion verification gates.partial — some usable scope was ingested and verified, but a named portion was not covered (for
example pagination stopped, a sub-project denied access, or the run hit a bounded limit).unavailable — no usable content could be ingested because the read-only tool, connection,
permission, or source was unavailable.Evidence must name the attempted scope, the safe count/range or cursor reached, and reader-safe wiki
source-note paths. It must not contain raw credentials, PII, sensitive source snippets, or scanner
output. partial and unavailable are valid honest terminal outcomes for a run, but they are not
knowledge-readiness success.
Beyond raw ingestion, author the pages an unattended operator needs, deriving everything derivable:
architecture and domain glossary, environment/deploy topology, who the users are (personas, if
discoverable), business rules encoded in code and tests, operational runbooks (how to see logs,
how to roll back), and the project's danger zones (migrations, money paths, irreversible jobs).
Update wiki/index.md and record the run in wiki/log.md per wiki conventions.
For each gap in wiki/gaps.md a human has answered inline:
open with a follow-up question) only when the answer is contradictory or incomplete.absorbed with a pointer to the page(s) it landed in, and move it to the
resolved section of the file.Never treat your own inference as a human answer, and never resolve an open gap by guessing.
For a source-coverage gap, do not absorb the answer merely because a human described the missing
material: re-run the source read-only and move its registry row to complete, or keep a narrower
unresolved source gap linked from that row.
Regenerate the open section of wiki/gaps.md (create it on the first run). Every entry is written
for a non-technical operator — plain language, no stack traces, no repo jargon — because the
person answering may not code:
## Open gaps (answer inline under each question, then re-run /lisa:agent-ready in a new session)
### <stable-slug>
- **Question**: <one plain-language question>
- **Why it blocks autonomy**: <what an unattended agent cannot safely do without this>
- **What was searched**: <the sources consulted before declaring this a gap>
- **How to answer**: <where the answer likely lives / what format is useful>
- **Source**: <source_id from wiki/state/agent-ready/sources.json, or `derived-knowledge`>
- **Answer**: _(human fills in)_
- **Status**: open
Order entries by autonomy impact (what would cause the worst unattended decision first). Keep the file short — a gaps file with fifty entries means Phase 2 stopped too early.
Reconcile source coverage before counting gaps. Every partial or unavailable registry row must
link, through its open_gap field, to a stable, unresolved gap entry whose Source field names that
row's source_id and explains the missing scope or access in plain language. A missing row, a
pending/invalid status, a broken gap link, or a partial/unavailable row without an unresolved gap
is itself an open blocking gap. Never mark that source gap absorbed while its registry status remains
partial or unavailable.
wiki/gaps.md, then re-runs /lisa:agent-ready in a new session (a fresh session avoids
anchoring on this run's assumptions). Commit the wiki changes through the normal wiki PR flow.complete, every row has verified sanitized evidence, and the open-gap count
is zero. If any row is missing, pending, partial, or unavailable, the zero-gap declaration is
blocked: regenerate/link the required unresolved source gap and report the project as not ready.
When the gate passes, record the verdict and date in the gaps file header and the wiki log, and
point at the next step — standards adoption.Knowledge readiness answers "does an agent know this project?" Repository readiness answers a
different question — "may an unattended fleet operate here?" — and this phase runs once Phase 5
has converged, using the readiness-rubric rule as the scoring contract. It never re-derives that
vocabulary; it consumes it.
Score the eight ownership dimensions once, from the shared assessment. Consume the RRR-3
readiness collector — run lisa doctor --readiness and read its persisted .lisa/readiness.json
(schema-versioned; verdict, blocker_count, per-dimension findings) — rather than computing a
parallel score. There is one assessment implementation, not two. Cite the readiness-rubric
slug for the eight ownership dimensions, the seven ship blockers, and the consequence-ordering
contract; do not restate or fork that vocabulary here. The evidence for dimensions 1 and 3 comes
from the danger-zone wiki pages Phase 2 already produced (migrations, money paths, irreversible
jobs) — no new discovery machinery.
Order findings by consequence and carry the five readiness fields. Present findings
highest-consequence-first, and give each finding the five fields the rubric requires on top of the
shared convergent-review shape: invariant_violated, evidence, why_proof_missed,
root_correction, and machinery_to_remove.
File each standing blocker as a tracker work item — never an in-session question. For every
standing ship blocker, create one Lisa work item through the vendor-neutral lisa-tracker-write
skill (never a vendor write skill directly), carrying the five finding fields in the body. Label it
build-ready when the correction is mechanical; mark it human-needed when it is a genuine
human decision. This is the skill's only tracker write, and it creates Lisa's own work item —
it never edits, comments on, transitions, or otherwise mutates any ingested source (see the
connected-source safety boundary above). The shipped never-ask posture is preserved: a blocker
becomes a filed ticket, never a prompt, and the session never pauses to ask a human anything,
even headless.
File idempotently. Filing must be idempotent. Before creating an item for a blocker, search the configured tracker for an existing open work item for that same blocker and reconcile with it (update in place) rather than filing a second. A re-run with the same blocker standing never creates a duplicate.
Audit the headless run for zero ingested-source mutation. Because this phase introduces the
skill's first tracker write, a real headless run must be audited to prove it performed zero
ingested-source mutation: every source-side call in the run log is a read-only verb, and the only
writes are to wiki/** and the single Lisa tracker-create path. Record that audit obligation with
the run — a run that cannot show zero writes to any ingested source is not a passing run.
Keep the two readiness claims distinct. Phase 5's agent-ready for knowledge declaration is
preserved unchanged and is now explicitly separated from repository readiness. Zero open gaps means
the project is knowledge-ready; the standing blocker set governs operability. A repository can
be knowledge-ready and NOT_READY at the same time — report both, and state plainly that these
are different claims: knowing the project is not the same as being safe to operate unattended.
Knowledge first, standards second. Once the loop reports no gaps, apply Lisa's full standards (lint rules, guardrails, thresholds) and expect the project to go red — that is the point. Agents then refactor the codebase to conform without changing business logic or functionality, via the existing improve/fix flows, proving behavior is preserved with the test suite and empirical verification. Only then should the automation fleet run unattended on a brownfield project.
wiki/gaps.md is a queue. Every absorbed answer must land in a
real wiki page with the gaps entry pointing at it.wiki/state/agent-ready/sources.json is the durable coverage record. Source access is always
read-only, all source-derived wiki content is sanitized before persistence, and no status may
claim more scope than its sanitized evidence proves.complete.wiki/index.md, and wiki/log.md — this skill
adds no parallel bookkeeping.tools
Configure the official SonarQube plugin + MCP as Lisa's single Sonar substrate across every supported coding agent. Installs/updates the SonarQube CLI, authenticates (browser login on a dev machine, or SONARQUBE_CLI_TOKEN headless), selects the Test Manager target, runs `sonar integrate <agent>` for each supported agent (Claude, Codex, Cursor, Copilot, Antigravity) and wires the MCP for OpenCode, then writes only non-secret policy to .lisa.config.json. Separate from the CI SonarCloud scan gate, which is unchanged.
tools
Configure the official SonarQube plugin + MCP as Lisa's single Sonar substrate across every supported coding agent. Installs/updates the SonarQube CLI, authenticates (browser login on a dev machine, or SONARQUBE_CLI_TOKEN headless), selects the Test Manager target, runs `sonar integrate <agent>` for each supported agent (Claude, Codex, Cursor, Copilot, Antigravity) and wires the MCP for OpenCode, then writes only non-secret policy to .lisa.config.json. Separate from the CI SonarCloud scan gate, which is unchanged.
tools
Configure the official SonarQube plugin + MCP as Lisa's single Sonar substrate across every supported coding agent. Installs/updates the SonarQube CLI, authenticates (browser login on a dev machine, or SONARQUBE_CLI_TOKEN headless), selects the Test Manager target, runs `sonar integrate <agent>` for each supported agent (Claude, Codex, Cursor, Copilot, Antigravity) and wires the MCP for OpenCode, then writes only non-secret policy to .lisa.config.json. Separate from the CI SonarCloud scan gate, which is unchanged.
tools
Configure the official SonarQube plugin + MCP as Lisa's single Sonar substrate across every supported coding agent. Installs/updates the SonarQube CLI, authenticates (browser login on a dev machine, or SONARQUBE_CLI_TOKEN headless), selects the Test Manager target, runs `sonar integrate <agent>` for each supported agent (Claude, Codex, Cursor, Copilot, Antigravity) and wires the MCP for OpenCode, then writes only non-secret policy to .lisa.config.json. Separate from the CI SonarCloud scan gate, which is unchanged.