Stack Plugin
Untap, Upkeep, Draw, Deploy
Stack is an agentic DevOps workflow plugin for Claude Code. It manages your
project's planning, development, testing, and review through a file-based board
(.stack/BOARD.md): you describe what you want built, and an orchestrator dispatches
five specialized agent roles — product owner, architect, developer, tester, and a
four-angle review panel — one task at a time, in strict depends-on order.
Blocked work never silently retries; it waits for your decision. Small fixes can jump
the queue. Sessions pick up exactly where the last one ended, and everything ever
completed or dropped is preserved in a browsable graveyard archive. An optional
MTG-flavored naming mode (stack:theme) reskins the board's labels — tasks become
Spells, the backlog becomes The Stack — without changing any underlying data.
New to this kind of tool? GUIDE.md walks through the whole workflow in plain language — no technical background needed.
Installation Guide
Plugins load at session start — install first, then open a session in the project you
want Stack to manage (.stack/ is created there on your first "start turn").
Option 1 — Try it without installing (local development):
claude --plugin-dir D:\path\to\stack
Loads the plugin for that session only. While iterating on the plugin's files, apply
changes mid-session with /reload-plugins — no restart needed.
Option 2 — Install from a local clone (persistent):
Inside any Claude Code session:
/plugin marketplace add D:\path\to\stack
/plugin install stack@stack-marketplace
The plugin is then available in every future session.
Option 3 — Install straight from GitHub:
/plugin marketplace add kinojms/stack
/plugin install stack@stack-marketplace
No setup needed — the repo is public.
Staying up to date: enable auto-update once — /plugin → Marketplaces tab →
stack-marketplace → Enable auto-update — and new versions are fetched in the
background after each session starts (you'll be prompted to /reload-plugins when one
lands). Or update manually anytime with /plugin marketplace update stack-marketplace.
Then say start turn in your project and answer two questions (naming mode,
review mode) — the board takes it from there.
Using another AI tool? Stack's core is platform-neutral. A ready-made OpenAI
Codex CLI adapter lives in codex/ (skills install natively —
Codex reads the same SKILL.md standard — plus TOML role agents and an AGENTS.md
snippet). Platform bindings for other tools:
skills/cast/references/platforms.md.
Quick Start
# Begin your first work session — initializes .stack/ and asks your
# naming mode (default/mtg) and review mode (parallel/sequential)
start turn
# Add something to build
stack:new "User authentication"
# The work cycle dispatches the chain: product-owner → architect →
# developers → tester → reviewers. Continue until done or say no.
# End the session — prints a copy-paste-ready EoD report
end turn
Two Workflows
On a fresh project, start turn asks which workflow you want:
| Standard | Prototype | |
|---|---|---|
| Before code | product-owner interview → architect PLAN | nothing — straight to code |
| Who builds | developers, one at a time, in dependency order | one stack:builder agent |
| Testing | dedicated tester (Playwright or unit framework) | the builder runs the thing; no test files |
| Review | up to 4 specialists, unanimous PASS required | none |
| Spawns per feature | ~8 | 1 |
| Records | plan, tests, review verdicts | a Shortcuts list of the debt taken |
Prototype mode is for hackathons, spikes, and "will this even work?" — you expect to throw the code away, so the gates that check for correctness are the wrong trade. It still uses the board, the graveyard, and the session log, and blocked still blocks — nothing auto-retries.
When the prototype proves out, stack:promote switches to standard one-way and
asks what to do with the code: keep it (every recorded shortcut becomes a Harden prototype requirement, planned and reviewed like any other work) or start clean
(the board history is archived; your code files are never touched).
Existing projects always get standard mode, without being asked — say start turn the same way. The first time you add a requirement (stack:new) in a project
that already has code Stack didn't build, stack:analyst scans the codebase first
and shows you a plain-language report (tech stack, structure, conventions, notable
risks) before anything is created. The report is saved to
.stack/docs/CODEBASE-ANALYSIS.md and read by the product-owner and architect on
every requirement after that. Runs once per project — later stack:new calls skip
straight to the usual flow.
The Agent Chain
[standard mode]
User input
└→ product-owner: interviews you, writes REQ with acceptance criteria
└→ architect: explores codebase, writes PLAN (per-task subsections),
declares the task chain with depends-on links + cost estimates
└→ developer ×N: implement, strictly one at a time, in dependency order
└→ tester: Playwright (UI/E2E work) or unit framework (logic work)
└→ assessed + confirmed reviewer subset (parallel or sequential,
per review-mode), from:
├── reviewer-security
├── reviewer-architecture
├── reviewer-business-logic
└── reviewer-edge-case
├→ [selected PASS] requirement complete
└→ [issues] Fix tasks → re-review (max 2 rounds, then ask)
[prototype mode]
User input
└→ builder: decides its own approach, writes the code, runs it,
records the shortcuts it took → requirement complete
└→ (when it proves out) stack:promote → standard mode
Commands
Command names are fixed — they never change with naming mode.
| Command / phrase | What it does |
|---|---|
stack:cast / "start turn" / "start session" | Start/continue a work session: status report with last-session carry-over, routing menu, dependency-gated work cycle. Supports --dry-run (preview the next dispatch, change nothing). |
| "end turn" / "end session" | End the session: writes a technical summary + human EoD report to SESSION-LOG.md, prints only the human report for copy-pasting into standups. |
stack:status / "check board" | Read-only board view with a cost/effort breakdown and a Mermaid dependency graph per requirement. Never dispatches. |
stack:new / "new requirement" | Add a requirement stub + a product-owner task to gather details. |
stack:theme / "switch theme" | Switch naming mode between default and mtg. |
stack:release / "cut release" | Finalize done requirements: stamp CHANGELOG.md, archive to the graveyard, annotated git tag. Never pushes. Supports --dry-run. |
stack:graveyard / "show graveyard" | Browse the historical archive, newest first. Read-only. |
stack:promote / "promote the prototype" | Prototype mode only: switch to the full workflow, turning the prototype's recorded shortcuts into a hardening requirement (or archiving it for a clean rebuild). One-way. Supports --dry-run. |
Blocked/suspended-task triage lives inside stack:cast's routing menu; the dependency
graph lives inside stack:status — by design, no extra commands.
Naming Modes
.stack/config.yml (naming: default | mtg) is the single source of truth. Labels are
a display layer only — status values, field names, file formats, and commands are
identical in both modes. Switch anytime with stack:theme.
| Concept | Default | MTG |
|---|---|---|
| Task | Task | Spell |
| Backlog | Backlog | The Stack |
| In progress | In Progress | Resolving |
| Blocked | Blocked | Countered |
| Suspended | Suspended | Suspended |
| Done | Done | Resolved |
| Dropped | Dropped | Exile |
| Archive | Archive | Graveyard |
| Prerequisite | Depends-on | Cost |
| Fast-track task | Quick task | Instant |
The Board
BOARD.md has emoji-coded sections (emoji map to the status concept, so they're the
same in both naming modes):
| Section | Emoji | Meaning |
|---|---|---|
| Resolving | 🟡 | An agent is working on it |
| Backlog | ⚪ | Queued, dispatched when depends-on is satisfied |
| Blocked | 🔴 | Something's wrong — never auto-retries, waits for your decision (reset / edit / drop / suspend) |
| Suspended | 🔵 | Deliberately parked by you — never auto-resumes |
| Done | 🟢 | Completed (capped at 20 rows; full history in the graveyard) |
| Dropped | ⚫ | (In GRAVEYARD.md) permanently abandoned |
Task rules:
- Dependency rule: a task is only dispatched when every ID in its
depends-onhasstatus: done. Enforced every cycle, no exceptions. - Quick tasks (
quick: true): fast lane for small fixes — checked before normal backlog order, still dependency-gated. - Cost (
cost: 1-5): effort estimate per task;stack:statusshows the backlog breakdown. Advisory only — never affects ordering. - Blocked vs Suspended: blocked = something's wrong, needs review; suspended = nothing's wrong, you parked it. Neither ever auto-progresses.
The Graveyard
Two ways in:
- Release (
stack:release): done requirements + their tasks are archived to.stack/graveyard/{date}/and summarized inGRAVEYARD.md. - Drop: dropping a blocked/suspended task appends to
GRAVEYARD.mdimmediately, taggeddroppedwith the reason — no release wait.
Browse it all with stack:graveyard.
Session Continuity
- start turn reads only the latest
SESSION-LOG.mdentry (token discipline) and weaves it into the status report: "Last session you were mid-way through TASK-004…" - end turn appends two records to
SESSION-LOG.md— a technical summary (for the tool's memory) and a plain-language EoD report (for your standup) — and prints only the latter. The log file is never trimmed.
State Structure
.stack/
config.yml # naming + review-mode (single source of truth)
BOARD.md # the board (orchestrator-only writes)
SESSION-LOG.md # full session history
requirements/REQ-NNN.md
tasks/TASK-NNN.md
plans/PLAN-NNN.md # one per requirement, per-task subsections
docs/ # evergreen research/notes — survives releases
graveyard/
{release-date}/ # archived REQs/tasks/plans per release
GRAVEYARD.md # running index of everything resolved or dropped
Agents
| Agent | Model | Color | Role |
|---|---|---|---|
stack:analyst | Sonnet | teal | One-time codebase scan for existing projects, before the first requirement (not part of the task board) |
stack:builder | Sonnet | magenta | Prototype mode only — owns the whole slice: no plan, no tests, no review; records every shortcut it takes |
stack:product-owner | Sonnet | pink | Interviews you, writes the requirement — what/why only |
stack:architect | Opus | purple | Breaks a REQ into a plan + dependency-ordered task chain with costs |
stack:developer | Sonnet | blue | Implements one task, strictly sequential |
stack:tester | Sonnet | green | Writes/runs tests — Playwright or unit framework by task nature |
stack:reviewer-security | Haiku | red | OWASP Top 10, injection, auth, sensitive data |
stack:reviewer-architecture | Haiku | cyan | Plan alignment, patterns, separation of concerns |
stack:reviewer-business-logic | Haiku | orange | Acceptance criteria, business rules, testability |
stack:reviewer-edge-case | Haiku | yellow | Boundaries, error paths, concurrency, robustness |
role: reviewer on a task is a trigger alias — dispatching it spawns all 4 specialists
(concurrently with review-mode: parallel, one at a time with sequential); the task
passes only on 4/4 PASS verdicts.
License
MIT — Justin Sacdalan