Claude Code plugin marketplace β an autonomous ticket pipeline that takes work from business idea to merged pull request, plus the tooling around it.
New here? Read Which plugin do I need?, then follow Getting started and Your first run.
Four installable plugins. Install only what you need β they work standalone and compose when combined.
| Plugin | Version | What it does |
|---|---|---|
ticket-auto-pipeline |
0.76.0 | The core. Takes a Linear ticket and appraises, implements, verifies, and merges it with zero user input. 20+ slash commands, state-machine flow control, deterministic safety gates. |
ticket-planner |
0.34.0 | Upstream of the core. Turns a one-sentence business idea into dependency-ordered, ready-to-execute tickets across 11 planning phases. Supports grill-me validated intent files as optional pre-flight gate. |
fleet-controller |
0.44.2 | Above the core. Dispatches planned tickets, monitors every running pipeline via 19 detection engines, kills and restarts stuck runs, feeds results back to the planner. Bash-only. |
knowledge-curator |
0.2.1 | Beside the core. Durable cross-project knowledge tracking β captures ideas, decisions, and lessons, then resurfaces them when relevant. |
grill-me |
0.1.1 | Before the core. Pre-work readiness gate β assesses ideas against profile-driven dimensions, asks ranked clarification questions, and produces cryptographically sealed Validated Business Intent documents. |
| Your goal | Install | Then run |
|---|---|---|
| "I have a Linear ticket. Implement it for me." | ticket-auto-pipeline |
/ticket-auto CRE-47 |
| "I have an idea. Break it into tickets for me." | ticket-planner + ticket-auto-pipeline |
/ticket-planner plan "..." |
| "I have an idea β but is it ready to plan?" | grill-me |
/grill-me "..." |
| "Run many tickets at once, unattended, and recover from failures." | all three above | fleetd with FLEETD_SPAWN_ENABLED=1 |
| "Remember decisions and lessons across my projects." | knowledge-curator |
Nothing β it's hook-driven |
Most people start with ticket-auto-pipeline alone, run a few tickets by hand, and add the planner and fleet controller once they trust it.
ticket-plannerandfleet-controllerboth depend on libraries fromticket-auto-pipeline. Install it whenever you install either of them.
flowchart TD
idea["π‘ Business idea"] --> planner["ticket-planner<br/>11 planning phases"]
planner --> epic["Initiative epic +<br/>planned tickets in Linear"]
epic --> fleet["fleet-controller<br/>dispatch + monitor"]
fleet --> auto["ticket-auto-pipeline<br/>appraise β implement β verify β merge"]
auto --> pr["β
Merged PR"]
auto -.->|execution feedback| fleet
fleet -.->|aggregated feedback| planner
manual["π« Existing Linear ticket"] --> auto
Each layer is independently usable. The dotted lines are the feedback ring: what actually happened during execution flows back so the planner can re-plan.
Determinism boundary β the design rule that runs through every plugin: bash orchestrates, Claude reasons. State parsing, phase routing, gate decisions, and every Linear mutation are deterministic bash. Investigation, implementation, and review are Claude agents. No LLM ever decides a state transition.
# Add this marketplace (one-time)
claude plugin marketplace add willard-pro/claude-plugins
# Install the core pipeline
claude plugin install ticket-auto-pipeline@willard-pro-claude-pluginsAdd the others as needed:
claude plugin install ticket-planner@willard-pro-claude-plugins
claude plugin install fleet-controller@willard-pro-claude-plugins
claude plugin install knowledge-curator@willard-pro-claude-pluginsIn ~/.claude/settings.local.json:
{
"env": {
"LINEAR_API_KEY": "lin_api_...",
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_...",
"ANTHROPIC_AUTH_TOKEN": "sk-ant-..."
}
}| Variable | Purpose | Where to get it |
|---|---|---|
LINEAR_API_KEY |
Linear ticket reads and mutations | Linear β Settings β API |
GITHUB_PERSONAL_ACCESS_TOKEN (or GH_TOKEN) |
PR creation and review | GitHub β Settings β Developer settings β Tokens (repo, pull_requests scopes) |
ANTHROPIC_AUTH_TOKEN |
Claude API access | console.anthropic.com |
Full optional-variable reference: ticket-auto-pipeline README β Required Environment.
The pipeline needs three MCP servers in ~/.claude.json:
{
"mcpServers": {
"linear-server": {
"command": "npx",
"args": ["-y", "@linear/mcp-server"],
"env": { "LINEAR_API_KEY": "${LINEAR_API_KEY}" }
},
"playwright": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-playwright"]
},
"github": {
"command": "npx",
"args": ["-y", "@anthropic/github-mcp-server"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}" }
}
}
}linear-server handles tickets, playwright drives browser verification, github manages PRs. Restart Claude Code after adding these.
In the CLAUDE.md of the directory you'll run Claude Code from:
REPOS_ROOT: /home/you/repos
LOCAL_URL: http://localhost:5173
UAT_URL: https://staging.example.comREPOS_ROOT is where your source repos live. UAT_URL is the deployed environment the verify phase tests against.
Also export REPOS_ROOT as an environment variable (for example in the env block of ~/.claude/settings.local.json, next to LINEAR_API_KEY). /ticket-auto reads it from CLAUDE.md and exports it for its own phases, but the standalone /ticket-approve and /ticket-reject commands β and every other entry into the local manifest layer (lib/manifest-read.sh) β read only the environment. Without it they exit with "could not make β¦ manifest-addressable", even though /ticket-env-check reports REPOS_ROOT as OK.
From inside Claude Code:
/ticket-env-check
Then confirm your Linear team has the workflow states and labels the state machine expects:
bash "$(find ~/.claude/plugins/cache/willard-pro-claude-plugins/ticket-auto-pipeline \
-name validate-linear-config.sh -type f | sort -V | tail -1)"Add --dry-run to preview without failing. Fix every failure before running a pipeline β a missing Linear state will stop a run mid-flight. See state machine drift if it reports problems.
1. Write the ticket so the pipeline doesn't have to guess. Copy a ticket template into the Linear description β bug, feature, improvement, or security. This matters more than anything else you'll do: vague acceptance criteria are the top cause of false verification passes. See why it matters.
2. (Recommended) Prescan your repos once. Builds durable architecture docs the appraise phase reads instead of re-exploring your codebase every run:
/ticket-prescan
Optional β the pipeline works without it, just slower and less informed.
3. Run it.
/ticket-auto CRE-47
What happens: the pipeline moves your ticket Backlog β Todo, investigates the codebase, scores complexity, and writes a plan artifact. It then stops and waits for you β by default nothing is implemented until you approve it. Answer any Open Questions in the Linear comment, then run /ticket-approve CRE-47 and re-run /ticket-auto CRE-47 to continue. Approval is a fact in the ticket's local manifest, not a Linear label: adding an approved label (or dragging the card) in Linear does nothing, because the Linear column and labels are display-only.
| Your decision | Command | Effect |
|---|---|---|
| Approve the plan | /ticket-approve CRE-47 |
Records approval in the local manifest and moves the ticket Approve β Ready. Re-run /ticket-auto CRE-47 to implement. |
| Reject the plan | /ticket-reject CRE-47 |
Clears any approval and moves the ticket Approve β Todo for re-appraisal. |
Both commands need REPOS_ROOT set as an environment variable in the Claude Code session (see step 4 of Getting started) β they read and write the local manifest under $REPOS_ROOT/.ticket-auto/.
4. To reduce gating once you trust it:
/ticket-auto CRE-47 --auto
| Mode | Simple ticket | Complex ticket | PR merge |
|---|---|---|---|
--manual (default) |
β waits for you | β waits for you | you merge |
--auto / --semi-auto |
β proceeds | β waits for you | auto-merges if clean |
Complex tickets always wait for a human. Full detail: autonomy modes.
/ticket-planner plan "Add real-time collaboration to the document editor"
The planner runs 11 phases (Appraisal β Discovery β Architecture β Specify β Review β Consensus β Crosscheck β EpicGen β TicketGen β Refinement β Completed) and β once you authorize creation with resume --create (below) β produces a Linear epic plus dependency-ordered tickets, each carrying a Planner Context block that lets the pipeline skip re-investigation. Refinement runs a deterministic Definition-of-Ready check plus a semantic evaluator pass per ticket before the epic is released to fleet dispatch.
plan stops after Crosscheck so you can read the plan before anything is written to Linear. Nothing exists in Linear yet at this point β no epic, no tickets, no manifest. Review the plan, then authorize creation:
/ticket-planner resume INIT-42 --create # EpicGen β TicketGen β Refinement: writes the epic + tickets
Only after resume --create finishes (Refinement marks the epic dispatch-ready) is there anything to dispatch. Dispatching earlier finds no epic and queues nothing.
Then execute them:
/fleet-controller dispatch INIT-42 # queue the planned tickets
Queued tickets run only under fleetd with spawning on (FLEETD_SPAWN_ENABLED=1 python -m fleet-controller.fleetd --state-dir <workspace>/logs, see the fleet-controller README). /fleet-controller monitor detects and intervenes, but it does not start workers.
Details: ticket-planner README Β· fleet-controller README.
| What | Where |
|---|---|
| Ticket workspace (notes, plans, logs) | tickets/{TICKET-ID}--{slug}/ in your working directory |
| Pipeline log (the crash-recovery checkpoint) | tickets/{TICKET-ID}--{slug}/pipeline.log |
| Prescan architecture docs | $REPOS_ROOT/.ticket-auto/{repo}/docs/ |
| Planner initiative state | $REPOS_ROOT/.ticket-auto/initiatives/{INIT-ID}/ |
| Fleet health report | logs/reports/fleet-dashboard.md |
Just run the same command again β /ticket-auto CRE-47. The pipeline log is a checkpoint; the router reads it, finds the last completed step, and resumes there. Nothing is lost on a crash, timeout, or closed session.
Seven phases, each spawned as an isolated Claude agent with clean context:
APPRAISE β EXEC β GATE β IMPLEMENT β VERIFY β PR-REVIEW β MAINTENANCE
| Phase | Does what |
|---|---|
APPRAISE |
Investigates the codebase, traces call chains, scores complexity |
EXEC |
Writes the plan artifact (simple-fix.md or an OpenSpec change) |
GATE |
Deterministic bash β artifact exists? complexity coherent? approved? |
IMPLEMENT |
Makes the code changes, commits, pushes |
VERIFY |
Drives the real app in a browser via Playwright against your acceptance criteria |
PR-REVIEW |
Reviews the diff against the ticket's requirements, iterates on feedback |
MAINTENANCE |
Documentation and wiki upkeep |
Meanwhile a Linear state machine tracks the ticket:
Backlog β Todo β Approve β Ready β Review β UAT β Done
Two rework loops exist: failed PR review and failed verification both send the ticket back to Ready for another pass (capped at 3 attempts each). Safety gates halt the run on structural failures β missing artifacts, revoked approvals, unparseable verdicts β each emitting a diagnosable code like EXEC_NO_ARTIFACT. See the gate-stop code table for what each one means and how to fix it.
Interactive diagrams (open locally in a browser): ticket-auto pipeline Β· planner pipeline
| Symptom | Start here |
|---|---|
/ticket-env-check reports FAIL |
Env check failures |
| "Linear API key not configured" | MCP auth errors |
| Validator reports missing states/labels | State machine drift |
Pipeline halted with a GATE_STOP code |
Gate-stop codes |
| Run died partway through | Resuming an interrupted run β or just re-run it |
| Pipeline seems hung | /fleet-controller status |
| Want a post-mortem of a failed run | /ticket-retro CRE-47 |
Start with the plugin README that matches your goal:
| Document | For | Contents |
|---|---|---|
| ticket-auto-pipeline/README.md | Users | Quickstart, all slash commands, autonomy modes, safety gates, templates, troubleshooting |
| ticket-planner/README.md | Users | Quickstart, planning modes, branch-directive flags, resume |
| fleet-controller/README.md | Operators | Modes, detection engines, escalation, fleetd daemon, configuration |
| knowledge-curator/README.md | Users | Trigger paths, commands, item lifecycle |
Going deeper:
| Document | For | Contents |
|---|---|---|
| ticket-auto-pipeline/plugin-overview.md | Maintainers | Full architecture and design rationale |
| ticket-planner/docs/ticket-planner.md | Maintainers | State machine, contracts, confidence derivation, re-planning |
| fleet-controller/docs/fleet-controller.md | Operators | Detection engines, intervention safety model, crash recovery |
| docs/branch-directive-schema.md | Developers | Shared epic-branch directive format |
| docs/planner-context-schema.md | Developers | The planner β pipeline handoff contract |
| pipeline-log-format.md | Developers | Log schema β the crash-recovery checkpoint |
| CHANGELOG.md | Everyone | What changed between versions |
Contributing: each plugin's CLAUDE.md is the agent-facing guidance file β architecture, library reference, and known sharp edges. Start at the root CLAUDE.md.
rm -rf ~/.claude/plugins/cache/willard-pro-claude-plugins/ticket-auto-pipeline
claude plugin install ticket-auto-pipeline@willard-pro-claude-pluginsThe SessionStart hook re-syncs shared libraries on next launch. Your Linear config, credentials, and ticket workspaces are untouched. Check the CHANGELOG for breaking changes.
UNLICENSED β proprietary.