plugins/lisa-copilot/skills/lisa-track/SKILL.md
Resolves exactly one live configured-tracker leaf for durable project work, claims it idempotently, and persists its canonical reference in worktree-local state. Accepts an existing Jira/GitHub/Linear ref, a spec file, or plain text. Use directly to mention/create the related ticket, and as lisa-implement's mandatory input gate.
npx skillsauth add codyswanngt/lisa lisa-trackInstall 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.
Establish the tracked-work invariant before any durable project mutation. Discussion and read-only orientation may proceed without this skill; code, configuration, documentation, research artifacts, plans, investigation findings, tests, commits, and pull requests may not.
This flow must return exactly one canonical (tracker_provider, work_item_ref) pair or fail closed. It never returns an unvalidated textual guess.
.lisa.config.local.json over .lisa.config.json exactly as lisa-tracker-read / lisa-tracker-write do. Missing, unknown, or incomplete tracker configuration is a blocking error.$ARGUMENTS as exactly one of:
KEY-123, org/repo#123 or issue URL, Linear team identifier);Invoke lisa-tracker-read <ref> and require a live result from the configured project. Reject nonexistent, inaccessible, closed/resolved/terminal, wrong-project, wrong-repository, or container items. This live read is mandatory even if caller context already includes ticket text.
Search conservatively before creating:
gh issue list --repo <org>/<repo> --state open --search "<keywords> in:title,body".lisa-atlassian-access operation: search-issues with project-scoped JQL.lisa-linear-access operation: list-issues scoped to the configured team/workspace.lisa-tracker-read, and discard terminal, container, blocked, cross-repo, and materially different outcomes.lisa-tracker-write once. Synthesize one complete single-repository leaf (Bug, Task, Sub-task, or Improvement, never Epic/container) with the writer's required three-audience body, Gherkin acceptance criteria, repository, target environment, relationship search, and executable Validation Journey. Pass build_ready: true. Do not create placeholder/thin tickets, do not create a hierarchy, and do not retry creation by making another item if validation fails; repair the proposed spec and retry the same writer operation only if the vendor contract supports idempotent reuse.lisa-tracker-read. A create response without a verified live leaf is failure.This is intentionally conservative: ambiguity creates one explicit work item instead of silently attaching work to the wrong existing item. Across the entire invocation, at most one new work item may be created.
Invoke lisa-tracker-claim <canonical-ref>. Require its post-read verified claim_outcome: claimed|reused; no binding may be written after a failed/unverified claim.
Persist only the canonical reference in worktree-local machine state:
node scripts/lisa-work-item.mjs link <canonical-ref>
Read the binding back through node scripts/lisa-work-item.mjs current and require it to equal the canonical reference. If binding fails, stop before durable project work.
branch: null as a pending state. Create the feature branch only after the gate succeeds, then run node scripts/lisa-work-item.mjs attach-branch. Commit preparation and validation fail closed until that attachment succeeds.Return this structured result plus the full resolved work-item context:
tracker_provider: jira|github|linear
work_item_ref: <canonical-ref>
resolution_outcome: explicit|reused|created
claim_outcome: claimed|reused
binding_outcome: verified
node scripts/lisa-work-item.mjs attach-branch after the feature branch exists.node scripts/lisa-work-item.mjs clear and verifying no current binding remains.development
Prepare a machine — a fresh laptop or a throwaway container — to run coding agents, before any repository exists. Detects which of Lisa's supported agents (Claude Code, Codex, Cursor, OpenCode, Antigravity, Copilot) are already installed, asks which credential manager the machine uses (Bitwarden, 1Password, Doppler, Vault, AWS, or none), and installs only what is missing, each by its vendor's own preferred method. Idempotent, headless by default, and emits a Dockerfile for a spin-up/spin-down environment. Run it on a new machine, in a container, or before cloning anything.
tools
Provision and verify a remote execution environment for a host project — Codex Cloud today, other remote surfaces as they are added. Generates a repository-owned setup script that installs the declared toolchain, materializes secrets through lisa-secrets-access, and runs the project's own hook. Provisions by API where one exists, by driving the vendor console where one does not, and by emitting exact config otherwise — then proves the result with the same read-back regardless of which tier did the work. Use before dispatching any work with executionEnv.
tools
Bring a developer's machine in line with the toolchain the project declares. Reports every tool in remoteEnv.tools that is missing, outdated, or unpinned for this platform, and installs the missing ones into ~/.local/bin from the same pinned, checksummed entries the remote surfaces use — but only when asked. Same manifest, same pins, same installers as lisa-setup-remote-env; what differs is consent and that the pin is a floor rather than an equality. Run it on a fresh checkout, after a manifest change, or when a tool fails at the moment of use.
tools
Route one unit of work to a remote execution surface. Reads the executionEnv parameter (local by default, codex-cloud or claude-web today), verifies the environment is provisioned and bound to this repository, submits a thin skill invocation, records the task identifier to .lisa/remote-dispatch.json, and exits without polling. Routing only — the remote runs the identical skill from the identical repository. Composable and inline: other skills invoke it via the Skill tool rather than users calling it directly.