plugins/lisa-copilot/skills/doctor/SKILL.md
Audit whether the current repository is ready to use Lisa. Runs grouped read-only checks across project detection, Lisa config, runtime distribution surfaces, tracker/source preflight access, automation prerequisites, optional GitHub Project coordination, and optional wiki delegation, then reports PASS/WARN/FAIL/SKIP results plus an overall readiness verdict (`READY`, `READY_WITH_WARNINGS`, or `NOT_READY`).
npx skillsauth add codyswanngt/lisa doctorInstall 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 a read-only Lisa readiness audit for the current repository.
/lisa:doctor is the deterministic answer to "is this repo actually ready to use Lisa?" It audits
the repository in grouped sections, reports each check as PASS, WARN, FAIL, or SKIP, and
emits one overall verdict: READY, READY_WITH_WARNINGS, or NOT_READY.
The command is repository-scoped. It validates only what can be observed from the current repo, current machine, and current runtime. It does not create automations, labels, tracker items, or other external state as part of the default audit path.
$ARGUMENTS that narrow or tune read-only validation..lisa.config.json,
.lisa.config.local.json) when present.Do not ask whether to proceed. Once invoked, run the read-only audit, print the grouped results, emit the overall verdict, and stop.
Specifically forbidden:
The only legitimate reasons to stop early are:
Doctor reports grouped checks in a stable, human-readable structure. The grouped sections include, as applicable to the current repo:
.lisa.config.json and .lisa.config.local.json using the
same local-overrides-global semantics defined by config-resolution; report missing required
keys, incompatible combinations, and committed-vs-local locality problems as findings rather
than mutating config.tracker
and source only. If a required CLI, MCP surface, or auth context is unavailable in the current
runtime, report that explicitly instead of pretending the repo is ready.github.projects.v2 is configured, delegate
the shared validation read to github-project-v2 instead of reimplementing ad-hoc GraphQL
checks. Honor the required=false vs required=true semantics documented by
config-resolution: best-effort failures are WARN, required-mode failures are FAIL.wiki/ exists, either summarize the
specialized lisa-wiki-doctor verdict or explicitly report that deeper wiki checks are
available there. The base doctor stays narrower than full wiki migration enforcement.If a check family is not applicable to the current repo, report SKIP with the reason.
The Lisa config group is not just "does a file exist?" Doctor must audit the config contract in this order:
FAIL when .lisa.config.json is missing, empty, or invalid JSON..lisa.config.local.json only when present; if present but invalid JSON, FAIL.config-resolution. Doctor must describe findings against the effective merged value, not by
pretending one file fully replaces the other.FAIL when merged tracker is missing or is not one of jira, github, or linear.FAIL when merged source is present but is not one of notion, confluence, linear,
github, or jira.FAIL when the configured tracker/source points at a vendor whose required keys are absent
after merge. Examples: tracker=github requires github.org + github.repo;
tracker=jira requires atlassian.cloudId + jira.project; source=notion requires
notion.workspaceId + notion.prdDatabaseId.config-resolution vendor tables rather than inventing a second required-key list.WARN when developer-specific fields appear in committed config. At minimum enforce the
documented local-only examples: atlassian.email, intake.assignee, and
jira.verified_workflow_hash.WARN when project-wide shared fields exist only in .lisa.config.local.json and are absent
from .lisa.config.json, because the current machine may work while the repository remains
under-configured for teammates and automations. Examples include tracker, source,
github.org, github.repo, atlassian.cloudId, atlassian.site, jira.project,
linear.workspace, linear.teamKey, and deploy.branches.Locality findings are advisory unless the merged config is unusable. Missing shared keys after the
merge are FAIL; shared keys that exist only locally are WARN.
After config readiness passes far enough to resolve the merged tracker and optional source,
doctor must perform read-only preflight checks for the configured vendors only. It does not probe
every vendor Lisa supports.
tracker.source only when present and distinct from the tracker.SKIP rather than pretending it was checked.tracker=github or source=github: require gh CLI availability, a passing gh auth status,
and a read probe against the configured repo such as gh repo view <org>/<repo>.tracker=jira, source=jira, or source=confluence: follow the atlassian-access
substrate ladder and prove at least one read-capable path can see the configured
atlassian.cloudId and vendor scope. Acceptable substrates are acli, Atlassian MCP, or the
validated API-token/curl path documented by config-resolution.tracker=linear or source=linear: require either readable Linear MCP access or a valid
personal API-key probe against the configured workspace. When Linear is the tracker, doctor
must also prove the configured linear.teamKey is visible.source=notion: require either a Notion MCP identity match for notion.workspaceId or a
valid internal-integration token probe, plus read visibility to notion.prdDatabaseId.PASS when at least one supported read-only substrate proves the configured vendor is
reachable with the required scope.WARN when the configured vendor is reachable, but an additional optional substrate is
unavailable and later Lisa flows would need to fall back.FAIL when no supported substrate can prove read access for the configured tracker/source, or
when the configured vendor target is unreadable from the current runtime.When github.projects.v2 is configured, doctor must run one additional read-only coordination
check instead of treating the config block as implicitly ready.
Call lisa:github-project-v2 in read-only resolution mode:
operation: resolve-project
Do not inline ad-hoc Project GraphQL in doctor. Setup, doctor, writers, and linked-PR flows must all read the same owner/access contract from the shared utility.
Enforce the v1 namespace rule exactly as documented by the shared utility. If
github.projects.v2.owner.slug does not match github.org, report:
code: project_namespace_mismatch
message: "github.projects.v2.owner.slug must match github.org in v1"
remediation: "Use a Project owned by <github.org> or remove github.projects.v2."
For owner-access or GraphQL failures, preserve the exact GitHub / GraphQL failure text in the
observed output. Examples include missing Project, Resource not accessible by integration,
unsupported owner kind, or a wrong owner/number pair.
github.projects.v2 when coordination is not required.required: false => doctor WARN. Repository-local GitHub issue/PR flows remain usable while
Project coordination is degraded.required: true => doctor FAIL. The same Project validation failure blocks Lisa readiness
because coordination was configured as required.Good output examples:
WARN github.projects.v2: Resource not accessible by integration
Observed: exact GitHub / GraphQL failure text preserved from resolve-project.
Remediation: grant the token Project read/write access or remove github.projects.v2.required.
Repository-local GitHub issue/PR flows remain usable; Project coordination is disabled.
FAIL github.projects.v2: github.projects.v2.owner.slug must match github.org in v1
Remediation: use a Project owned by CodySwannGT or remove github.projects.v2.
Doctor's automation-readiness group stays read-only: it audits whether this repo and runtime could
support /lisa:setup-automations and the resulting recurring jobs, but it does not create,
edit, delete, or reconcile automations on the default doctor path.
source.tracker.lisa:repair-intake
(identical source-dispatch contract to lisa:intake).source, tracker, or their vendor keys are
still unresolved after the config-readiness audit, report that automation as FAIL rather
than pretending scheduling can proceed safely.automation_update) needed by /lisa:setup-automations./schedule.exploratory-bugs is supported only when the project ships an exploratory-qa command
surface (the expo, rails, or harper-fabric stacks today). Reuse the same stack/support
rule documented by setup-automations; do not invent exploratory jobs for stacks that do not
ship that command.exploratory-qa, report exploratory-bugs as SKIP with the
reason.exploratory-prds remains applicable when the repo can run /lisa:project-ideation; if its
queue/config prerequisites are unresolved, report the exact blocking config fact.PASS when an automation's queue inputs are resolvable and the runtime exposes the required
native scheduler surface for that automation.WARN when Lisa remains usable manually, but the current runtime has no native scheduler
surface for unattended runs, so automation setup would be unavailable from here.SKIP when an optional automation is intentionally unsupported for this repo surface (for
example, exploratory-bugs on a stack with no exploratory-qa command).FAIL when the repo's config cannot resolve the queue that an automation needs, because that
would make unattended runs ambiguous or broken before scheduling even starts.When a repo-local wiki/ directory exists, doctor must surface the specialized wiki-readiness path
without turning the base doctor into a second lisa-wiki-doctor.
wiki/ directory exists, report the entire wiki group as SKIP with the
reason that no wiki surface is present in this repository.wiki/ exists, keep the group present in the final report; do not silently omit it.wiki/state/migration/doctor-report.json, doctor may
summarize the specialized verdict (READY, READY_WITH_WARNINGS, or NOT_READY) plus the
most relevant blocking/warning facts, clearly attributing them to lisa-wiki-doctor.If wiki/ exists but no specialized report is available yet, doctor must still tell the
operator that deeper wiki checks live behind lisa-wiki-doctor.
The report should make the next action explicit, for example:
WARN wiki-follow-up: wiki/ detected; deeper wiki migration checks not yet summarized
Observed: wiki/ exists, but no wiki/state/migration/doctor-report.json was found.
Remediation: run lisa-wiki-doctor to produce the wiki-specific readiness verdict.
SKIP when wiki/ is absent.PASS when wiki/ exists and doctor successfully summarizes an existing
lisa-wiki-doctor verdict.WARN when wiki/ exists and doctor can only advertise the specialized follow-up because no
persisted wiki verdict is available yet.FAIL only when wiki/ exists but the repo cannot surface the specialized follow-up at all
(for example, the required lisa-wiki-doctor distribution surface is missing or the existing
report is unreadable/malformed enough that doctor cannot safely summarize it).wiki/ is absent.The final report must:
PASS, WARN, FAIL, or SKIP.READY, READY_WITH_WARNINGS, or NOT_READY.Render the report in grouped sections using the shared scripts/doctor-report.mjs contract:
Overall verdict: <VERDICT> and one Counts: line covering PASS, WARN, FAIL,
and SKIP.<group-id>. <group-title>.- <STATUS> <check-id>: <summary>.Observed: and Remediation: lines beneath the check so the report keeps
facts separate from advice.SKIP with the reason instead of
silently omitting the section.The verdict ladder is:
READY — no FAIL and no WARN.READY_WITH_WARNINGS — no FAIL, but one or more WARN.NOT_READY — one or more FAIL.config-resolution for config and lifecycle role defaults instead of inventing a second
schema.github-project-v2 chokepoint for GitHub Project coordination checks instead
of inlining bespoke access logic.lisa-wiki-doctor for grouped verdict rendering where they fit, while keeping
the Lisa-wide doctor narrower than the wiki-specific migration/readiness workflow.config-resolution.WARN, FAIL, or SKIP
with the explicit missing dependency.documentation
Onboard a user to the project via its LLM Wiki. Interviews the user about themselves in relation to the project, captures that to project-scoped memory only, then gives a guided tour of what the project is and sample questions they can ask. Use when someone is new to the project or asks to be onboarded. Read-mostly — it does not open PRs or write PII into the wiki.
documentation
Migrate an existing, hand-rolled wiki implementation onto the lisa-wiki kernel — phased and compatibility-first, with a strict no-loss guarantee. Use when adopting lisa-wiki in a repo that already has its own wiki/, ingest skills, docs, or roles. Renaming things into the canonical shape is fine; losing functionality or data is not. Ends by running /doctor.
development
Health-check the LLM Wiki. Reports orphan pages, contradictions, stale claims, broken internal links, missing index/log coverage, structure-manifest violations, and secret/tenant leaks. Use periodically or before hardening a wiki. Read-only — it reports findings, it does not fix them.
testing
Ingest source material into the LLM Wiki. With an argument (URL, file path, or prompt) it ingests that one source; with no argument it runs a full ingest across every enabled non-external-write source. Routes to the right connector, then runs the ordered pipeline (source note → synthesis → index → log → verify → state → commit/PR). Use whenever new knowledge should enter the wiki.