A focused set of Claude Code skills for the day-to-day dev loop: tracker-aware ticket lifecycle (Linear, GitHub Issues, or JIRA), code review (adaptive depth, multi-model, ticket-grounded), debugging, design/QA, and supporting verbs (push, pr, merge, test, validate, research).
v3.0.0 — ccmagic was previously a project-management plugin (40 skills for epics/features/tasks/etc.). v3 removes the planning surface in favor of focusing on dev workflow. If you need project planning, use GSD or Superpowers. See CHANGELOG.md for the full rationale, what was removed, what replaced it, and the migration path. Short summary at Migration below.
# Option 1: Marketplace (recommended)
/plugin marketplace add devondragon/ccmagic
/plugin install ccmagic@ccmagic# Option 2: Direct
git clone https://github.com/devondragon/ccmagic.git ~/ccmagic
claude --plugin-dir ~/ccmagic# Option 3: Project-local
git clone https://github.com/devondragon/ccmagic.git .claude/plugins/ccmagic
claude --plugin-dir .claude/plugins/ccmagic/ccmagic:init # Bootstraps conventions.md, branching.md, .claude/ccmagic.local.md
/ccmagic:map-codebase # Brownfield projects: extracts stack/architecture/conventions
/ccmagic:doctor # Verify the install is healthy
/ccmagic:init asks which tracker you want (Linear / GitHub / JIRA / auto) and writes the answer to .claude/ccmagic.local.md. See docs/ccmagic.local.md.example for all configuration options.
24 skills organized by purpose:
| Skill | Purpose |
|---|---|
/ccmagic:work-ticket {ID} |
End-to-end: lookup → classify (Quick Fix / Complex / Debug) → branch → implement → review → PR |
/ccmagic:review-ticket [ID] |
Code review grounded in the ticket's stated scope and acceptance criteria. Adds explicit in-scope / out-of-scope / missing-from-ticket section |
/ccmagic:finish-ticket [--qa] |
Sanity-check PR → merge → close ticket with summary comment |
/ccmagic:auto-ticket [ID] |
Autonomous end-to-end driver — runs work → review → pr-feedback (looped) → finish with no human in the loop, and either merges or parks the ticket for a human. See Autonomous mode |
All four auto-detect the tracker (Linear MCP → GitHub CLI → Atlassian/JIRA MCP) or honor tracker: in .claude/ccmagic.local.md.
| Skill | Purpose |
|---|---|
/ccmagic:review [branch|full|PR#] [--quick|--deep] [--fix] |
Adaptive code review — auto-routes QUICK (inline checklist) vs DEEP (4 core agents + specialists + Codex CLI + MCP + verification). Biased toward depth. Read-only: reports findings and changes nothing unless you pass --fix, which edits the working tree only and never commits or pushes. |
/ccmagic:codex-review [branch|full|PR#] |
Multi-model cross-review: Codex + Gemini + Claude triage with dimension-focused passes |
/ccmagic:pr-feedback [PR#] |
Triage PR review comments, plan fixes for the valid ones |
/ccmagic:validate |
Pre-PR validation in parallel: lint, types, tests, build |
/ccmagic:test [pattern] [--coverage] [--watch] [--affected] |
Framework auto-detect, smart selection, coverage analysis, failure diagnosis |
| Skill | Purpose |
|---|---|
/ccmagic:push |
Smart commit and push with logical grouping (validated by the conventional-commit hook) |
/ccmagic:pr [--draft] |
Create PR with platform detection (gh/glab) and a smart description |
/ccmagic:merge [PR#] |
Safely merge an approved PR (strategy-aware: squash for feature, merge commit for release) |
| Skill | Purpose |
|---|---|
/ccmagic:debug [description] | resume <slug> |
Systematic debugging with scientific method, parallel investigation, persistent sessions |
/ccmagic:analyze-impact [file or name] |
Blast radius / dependency analysis. Three parallel agents trace inbound deps, outbound deps, test coverage |
/ccmagic:research <topic> |
Deep iterative research with parallel exploration, source evaluation, confidence scoring |
| Skill | Purpose |
|---|---|
/ccmagic:map-codebase |
Brownfield onboarding — three parallel agents produce STACK / ARCHITECTURE / CONVENTIONS knowledge files |
| Skill | Purpose |
|---|---|
/ccmagic:design-explore [description] [--count N] |
Generate distinct design directions, compare in browser, pick a winner before building |
/ccmagic:design-qa [URL] [--quick|--deep|--diff] |
Visual polish audit, catches AI slop, fixes issues atomically |
/ccmagic:browser-qa [URL] [--quick|--exhaustive] |
Systematic real-browser QA — find bugs, fix them, verify with screenshots |
| Skill | Purpose |
|---|---|
/ccmagic:quick "[task]" |
Ad-hoc task without ticket overhead |
| Skill | Purpose |
|---|---|
/ccmagic:init |
Bootstrap project config (conventions.md, branching.md, knowledge/, ccmagic.local.md) |
/ccmagic:doctor |
Diagnose setup, tracker availability, hook installation, branch convention |
/ccmagic:settings |
Configure tracker, QA workflow, ticket-ID regex |
/ccmagic:help [skill-name] |
Skill reference |
/ccmagic:work-ticket ENG-123 # Linear/JIRA, or use 42 for a GitHub issue
/ccmagic:review-ticket # Pre-merge: scope drift + code review
/ccmagic:finish-ticket # Merge + close ticket
/ccmagic:auto-ticket ENG-123 # Runs the whole cycle unattended:
# work → review → pr-feedback (looped) → finish.
# Merges if clean + CI green; otherwise parks the
# ticket for a human with a clear note. Never hangs.
See Autonomous mode for how it decides between merge and park.
/ccmagic:quick "rename FooBar to BarFoo across services"
/ccmagic:push
/ccmagic:pr
/ccmagic:validate # Lint, types, tests, build
/ccmagic:review # Adaptive code review
/ccmagic:init # Bootstrap config
/ccmagic:map-codebase # Populate knowledge files
/ccmagic:doctor # Verify setup
ccmagic's ticket lifecycle can run fully unattended — from Claude Code on your laptop, or headless from a Linear-triggered worker (e.g. Cyrus in Docker). /ccmagic:auto-ticket {ID} is the orchestrator; the five lifecycle skills it calls (work-ticket, review-ticket, pr-feedback, finish-ticket, push) each gained an opt-in, additive autonomous path.
auto-ticket {ID}
→ work-ticket implement, self-review, open PR
→ review-ticket scope-drift + code review; fix CRITICAL findings, re-review
→ pr-feedback loop apply fixes · reply · file follow-ups · push · validate
· wait for CI + bot reviews · recompute "clean" (× up to max_feedback_passes)
→ finish-ticket merge gate: mergeable + CI green + no unaddressed change-requests
→ summary posted to the PR and the ticket
Review-fix passes fix systemic findings as a whole class, re-reviews post deltas rather than fresh full reports, and the CI wait is a bounded blocking watch (gh pr checks --watch) — never a sleep loop.
For solo-dev projects, auto-merge with no human in the loop is intended. The safety property is not "avoid merging" — it's that when the work is genuinely uncertain or needs a human decision, the run parks the ticket instead of guessing or stalling:
- it does not merge,
- it moves the ticket to your configured
needs_human_state(or appliesneeds_human_labelif that state doesn't exist — always the case on GitHub Issues), - it posts a comment on the PR and the ticket saying exactly what it's waiting on, and
- it exits cleanly.
Every autonomous run ends in exactly one of two states: merged, or parked-needs-human (with a reason). There is no silent hang.
/ccmagic:auto-ticket always runs autonomously. To make the individual lifecycle skills default to autonomous when invoked directly, set config (or pass --autonomous per call):
# .claude/ccmagic.local.md
autonomous: true # default the lifecycle skills to autonomous
needs_human_state: Blocked # where parked tickets go (falls back to the label below)
needs_human_label: needs-human # applied when the state doesn't exist / on GitHub
max_feedback_passes: 3 # cap on the pr-feedback loop before parking
# Other autonomous loop bounds (skill defaults shown — set only to override):
# max_review_fix_passes: 3 # ticket-review fix loop
# max_validate_attempts: 2 # local /ccmagic:validate fix attempts
# ci_timeout_minutes: 30 # how long to wait for CI before parking on timeout
# ci_poll_interval_seconds: 60 # interval for the gh pr checks --watch CI waitConfig precedence: each key resolves highest-first — an explicit arg / grounding-block value → the project file .claude/ccmagic.local.md → the user file ~/.claude/ccmagic.local.md → the built-in skill default. Put personal defaults (e.g. a longer ci_timeout_minutes) in the user file once and override them per-repo in the project file.
The autonomous signal is checked in priority order: --autonomous arg → autonomous: true in the orchestrator's grounding block → autonomous: in ccmagic.local.md (project, then user). Absent all three, every skill runs its unchanged interactive path. Each autonomous sub-skill ends with a machine-readable status handshake (clean | fixable-findings | needs-human | done) that the orchestrator parses to decide the next step; the shared contract lives in skills/auto-ticket/autonomous-contract.md.
By default auto-ticket runs each lifecycle step in its own forked subagent on a best-fit model — strong models where judgment matters, light ones for mechanical steps — which keeps the orchestrator's context lean on long unattended runs and puts the right model on each step:
| Step | Default model |
|---|---|
| work-ticket / review-ticket | opus |
| pr-feedback / finish-ticket / validate | sonnet |
| push | haiku |
Each step always runs in its own subagent — override any step's model with model_<step> (e.g. model_pr_feedback: opus) (the agent file agents/auto-<step>.md is the authoritative model source).
auto-ticket runs unattended inside headless harnesses like Cyrus, which assigns a Linear issue, spins up a container with a fresh worktree, and runs the session. Cyrus provides the hosted Linear MCP, so runs go over the mcp transport by default — the ticket lifecycle reads and writes Linear directly via mcp__linear__*. The prompt-relay transport is the automatic fallback: for the brief window at session start before Cyrus's non-blocking MCP finishes connecting, and for any harness that injects the ticket into the prompt with no tracker MCP at all.
- Transport selection is automatic — by whether the Linear MCP is available, zero config keys.
- One consolidated summary (or parked note) reaches the tracker per run; the GitHub/PR half of the cycle is unaffected —
ghstill drives the branch, PR, and merge.
See docs/cyrus-deployment.md for the full deployment walkthrough, prerequisites, the build-time patches, and the required prompt template.
ccmagic reads (and /ccmagic:init creates) these files in the consuming project:
| File | Purpose |
|---|---|
.claude/ccmagic.local.md |
Per-project tracker config (which tracker, URL base, QA workflow, etc.) |
context/conventions.md |
Project coding standards — read by review, codex-review, pr-feedback, push, quick |
context/branching.md |
Branch strategy — read by pr, merge |
context/knowledge/*.md |
Architecture / stack / conventions knowledge — produced by map-codebase; read by review, codex-review, analyze-impact |
See docs/ccmagic.local.md.example for the full config template.
| Tracker | Integration | Auto-detection signal |
|---|---|---|
| Linear | Linear MCP server | mcp__*Linear*__get_issue registered |
| GitHub Issues | gh CLI |
command -v gh && gh repo view |
| JIRA | Atlassian MCP server | mcp__*atlassian*__* registered |
The tracker-aware skills (work-ticket, finish-ticket, review-ticket, auto-ticket) auto-detect, or honor a pinned tracker: in .claude/ccmagic.local.md. Multi-tracker projects are supported — set tracker: auto and let each invocation pick.
Linear is reachable over two transports: its MCP server (the default — including inside Cyrus, above), or prompt-relay, the automatic fallback for the session-start connect window and for headless harnesses that inject the ticket with no Linear MCP at all — see Headless runners (Cyrus).
ccmagic ships a PostToolUse hook (hooks/post-tool-use-commit.sh) that validates every commit's subject line against the conventional-commit format documented in .claude/CLAUDE.md. It's non-blocking — it warns but never rejects, so it's safe to install even on repos with non-conventional commit history.
Removed skills (now better served by GSD or Superpowers):
add-backlog, blockers, checkpoint, complete-task, context-load, context-save,
create-features, create-spike, create-tasks, current-feature, current-task,
daily-standup, discuss-feature, handoff, plan, progress, quick-start, resume,
start-spike, start-task, status, sync, verify
New skills:
work-ticket (multi-tracker ticket lifecycle)
review-ticket (code review grounded in ticket scope)
finish-ticket (sanity-check + merge + close ticket)
The context/ directory shape has changed:
- Kept:
context/conventions.md,context/branching.md,context/knowledge/ - Removed:
context/features/,context/tasks/,context/epics/,context/spikes/,context/sessions/,context/backlog.md,context/working-state.md
Existing v2.x project directories aren't auto-migrated — they're harmless if left in place but no v3 skill reads them.
ccmagic/
├── .claude-plugin/
│ ├── plugin.json
│ └── marketplace.json
├── skills/
│ └── <name>/SKILL.md
├── agents/
│ └── auto-*.md # per-step wrapper agents for auto-ticket
├── hooks/
│ ├── hooks.json
│ └── post-tool-use-commit.sh
├── docs/
│ └── ccmagic.local.md.example
├── .claude/
│ └── CLAUDE.md # Conventions + dev notes
├── README.md
├── CHANGELOG.md
└── LICENSE
Apache-2.0 — see LICENSE.
Devon Hillard (@devondragon)