A Claude Code plugin that turns a one-line Jira intake ticket into a fully-designed, self-contained set of 15 subtasks that any teammate or sub-agent can execute.
The core discipline: every Jira subtask is self-contained. A teammate picks up a subtask, reads the description, and executes it — no docs folder, no slack thread, no prerequisite context required.
Four skills covering setup + the full end-to-end flow:
Walks you through Jira Cloud URL, email, API token (opens the Atlassian token page in your browser), project picker, auto-discovered account ID, components, and directories. Validates live against /rest/api/3/myself. Writes config to ~/.claude/settings.json. The other three skills hand off to this automatically if any required config is missing.
Activates on prompts like set up the jira plugin, reconfigure jira plugin, connect jira.
Brainstorm → Embed spec in Jira → Implementation plan → Test plan → 15 self-contained subtasks → "is blocked by" chain → Selected for Development
Activates on prompts like let's design WFR-42, brainstorm this and create the tasks, break this into subtasks.
Pick up Story → Autonomously walk 15-subtask chain → Pause at subtask 10 (sandbox manual test) → Resume → Pause at subtask 12 (merge approval) → Resume → Done
Activates on prompts like pick up WFR-42, execute WFR-42, continue WFR-42.
Sub-agents dispatched by Phase 2 transition their subtask to In Progress and post incremental Progress: comments as they work, so any crashed or paused run resumes cleanly from Jira state alone.
0. Branch+Worktree
│
├─→ 1. Implement ───┐
│ ↓
└─→ 1b. Test Cases → 2. Code Review → 3. Fix → 4. UI Test → 5. Fix → 6. Local Smoke → 7. Architect Review → 8. Fix → 9. Deploy to Sandbox → 10. Sandbox Manual Test [human ✋] → 11. Fix Sandbox → 12. Merge to Sandbox Branch [human ✋] → 13. Push to Prod (sandbox → main PR) → 14. Prod Sanity
Two human checkpoints:
- Step 10 — Sandbox Manual Test (validate the feature on a real-deployed sandbox env)
- Step 12 — Merge to Sandbox Branch (explicit
Approved — merge to sandbox branchto join the release train)
Everything else runs via sub-agents. Fix loops (2↔3, 4↔5, 7↔8, and 9→10→11) cap at 3 cycles each before escalating.
feature branch ──(subtask 12, with approval)──→ sandbox ──(subtask 13 PR)──→ main (prod)
The sandbox branch is the integration buffer — multiple features may merge into sandbox before any one of them ships to prod. Subtask 13 opens a sandbox → main PR with a release-train manifest listing every feature included.
- Priority — inherited from parent Task, set explicitly (Jira inheritance for Sub-tasks is unreliable)
- Component — product area from your team's configured components
- Assignee — Sub Agent subtasks are
unassigned(the signal for autonomous execution); subtasks 10 (Sandbox Manual Test) and 12 (Merge to Sandbox Branch) = the Story owner - "is blocked by" links — wired per the chain diagram, direction verified on creation
From a Claude Code session:
/plugin marketplace add Harsh1210/jira-sprint-workflow
(Or for local development: /plugin marketplace add ./path/to/this/directory)
/plugin install jira-sprint-workflow
After install, in any Claude Code session say:
set up the jira plugin
This triggers the jira-setup skill, which walks you through the whole thing in ~2 minutes:
- Asks for your Jira Cloud URL and email
- Opens
https://id.atlassian.com/manage-profile/security/api-tokensin your browser so you can generate an API token, then validates it with a live call - Auto-discovers your
accountIdvia/rest/api/3/myself(no hunting for it in Jira) - Lists the projects you have access to and lets you pick the target project
- Lists the project's existing Components, offers to add missing ones (creates them via API if you have permission)
- Confirms defaults for
plans_directory(docs/superpowers/plans) andspecs_directory(docs/superpowers/specs) - Validates the full config with a final API round-trip
- Writes everything to
~/.claude/settings.jsonunderpluginConfigsso the three workflow skills pick it up
The other skills in this plugin (jira-story-design, jira-story-execute, jira-architect-review) all run a config gate on invocation — if they detect missing or empty fields, they hand off to jira-setup automatically before proceeding. You never end up midway through designing a Story with a broken auth token.
Restart Claude Code (or /plugin reload) after setup so the new config takes effect.
The setup skill collects these (stored in ~/.claude/settings.json under pluginConfigs.jira-sprint-workflow@jira-sprint-workflow.options; jira_api_token can live in the OS keychain instead if you prefer — run /plugin configure jira-sprint-workflow and re-enter just the token):
| Config key | Example value | Purpose |
|---|---|---|
jira_url |
https://acme.atlassian.net |
Your Jira Cloud base URL |
jira_username |
jane@acme.com |
Your Jira account email |
jira_api_token |
ATATT3xFfGF... |
API token (https://id.atlassian.com/manage-profile/security/api-tokens) |
project_key |
ENG |
Jira project where Tasks + Subtasks live |
default_owner_account_id |
712020:959044f3-fca7-4abf-8021-c8f2a85aaa74 |
Default assignee for parent Tasks + Subtask 10 (Sandbox Manual Test) + Subtask 12 (Merge to Sandbox Branch) — find yours at https://<your-jira>.atlassian.net/rest/api/3/myself |
components |
Backend,Frontend,Infrastructure |
Comma-separated Component names (must already exist in your Jira project) |
plans_directory |
docs/plans |
Where implementation plans + test plans are saved in the repo |
specs_directory |
docs/specs |
Where design specs are saved |
You can reconfigure later by either (a) running /plugin configure jira-sprint-workflow (CLI-driven, masks sensitive input) or (b) saying "reconfigure jira plugin" to re-trigger the jira-setup skill (interactive, validates live against Jira).
Before your first story:
- Create your Components in Jira (Project Settings → Components). These represent product areas that features can touch — e.g.,
Backend,Frontend,Infrastructure,Auth. Add them to thecomponentsuser config as a comma-separated list. - Confirm your project supports Sub-tasks. Some team-managed projects call them
Subtask(one word), othersSub-task. The skill detects this automatically but a missing issue type will surface as an error. - Note your workflow's "Selected for Development" equivalent status. The skill transitions parent Tasks to this after creating subtasks. If your workflow uses a different name (e.g.
Ready for Dev,To Do,Up Next), the skill will offer the available transitions and you pick.
This plugin assumes the superpowers plugin is installed (provides brainstorming, writing-plans, subagent-driven-development, code-reviewer, using-git-worktrees, plan-document-reviewer).
/plugin marketplace add anthropics/claude-plugins-official
/plugin install superpowers
It also assumes the Atlassian MCP server is configured — either:
- Official Atlassian MCP (OAuth — recommended for most teams):
{ "mcpServers": { "atlassian": { "command": "npx", "args": ["-y", "mcp-remote@latest", "https://mcp.atlassian.com/v1/mcp"] } } } - Or the sooperset/mcp-atlassian server (API-token based, more tools)
See https://github.com/atlassian/atlassian-mcp-server for setup.
Imagine your team is Acme Corp. Jane (tech lead) has intake ticket ENG-42 that reads:
ENG-42 — Customer export needs a CSV download
From a Claude Code session in her repo:
jane: let's design ENG-42
The skill kicks in automatically (matches the trigger phrase), and:
- Fetches ENG-42 from Jira
- Invokes
superpowers:brainstorming— Jane answers clarifying questions about scope, users, data model - Produces a design spec and writes it to
docs/specs/2026-04-21-customer-export-csv-design.md - Runs the
spec-document-reviewerloop, fixes any issues - Jane reviews and approves the spec
- Invokes
superpowers:writing-plans— produces the implementation plan + test plan - Runs
plan-document-reviewerper chunk, fixes any issues - Updates ENG-42's description with the full spec (markdown)
- Creates 15 subtasks (ENG-43 through ENG-57), each self-contained, each correctly assigned (Jane on parent Task + subtasks 10 and 12; unassigned on the rest)
- Wires 16 "is blocked by" links per the chain (0→1, 0→1b, 1→2, ..., 12→13, 13→14)
- Transitions ENG-42 to Selected for Development
- Reports back with a table of every subtask and its state
A teammate (or a sub-agent) can now pick up ENG-43 ("0. Setup Branch & Worktree") and execute — everything they need is in the Jira description.
The chain has many sub-agent steps because AI is good at: implementation, code review, UI testing with Playwright, Docker builds, sandbox deploys, prod deploys. Two things AI can't reliably judge:
- "Does this feel right on a real-deployed instance?" — that's subtask 10 (Sandbox Manual Test). The human walks the feature on a real sandbox environment using structured test cases (What / Preconditions / How / Expected / Pass criteria) that subtask 1b produced. Catches issues that local Docker doesn't surface (infra interactions, third-party integrations, real DNS, real auth flows).
- "Is this feature ready to join the release train?" — that's subtask 12 (Merge to Sandbox Branch). The human's explicit
Approved — merge to sandbox branchcomment is the audit-trail signal that this feature passed both sandbox manual test AND architect review and should be promoted.
Architect review (subtask 7) runs BEFORE sandbox deploy — gates whether the diff is worth deploying. Local Docker (subtask 6) is automated smoke only, no human walkthrough.
Because distributed teams and sub-agents both benefit from the same thing: context locality. A teammate picks up subtask 4 (UI Testing) a week after it was designed — if the description says "see docs/…", they have to leave Jira, clone the repo, navigate to a directory, and read the file. If the description embeds the test cases inline, they start executing in 30 seconds.
The tradeoff is that specs/plans live in two places (the repo AND Jira). The repo is the source of truth for sub-agent execution (subagents read files); Jira is the source of truth for humans and context. The two stay in sync because the design phase writes both together.
In Jira, both Task and Story can have subtasks. The issue type is a label, not a structural difference. Most intake lands as Task (from users, stakeholders, shift-left triage), and forcing a Task→Story conversion costs UI clicks with no structural benefit. We leave it as Task unless the team's workflow specifically requires Story.
The skill documents these so future sessions don't re-discover them:
- Jira subtask assignee inheritance — new subtasks silently inherit the parent's assignee if you don't pass
assignee_account_idexplicitly. Always re-fetch to verify. createIssueLinkdirection is counterintuitive — in our verified behavior,inwardIssue= the blocker andoutwardIssue= the blocked. Docs say otherwise; verify by fetching one link after creation before batching.- ~32KB description limit — long implementation plans don't fit in a single subtask description. Strategy: outline + key code in Jira, full plan in repo file (sub-agents read both).
- MCP tool occasional Cloudflare 403 during heavy batch operations. Fall back to raw REST with the
jira_api_tokenviabun -e/fetch. - Markdown → ADF via the MCP tool can double-escape brackets in checkboxes. Review rendered output and fix if needed.
PRs welcome. The plugin is designed to be team-agnostic via the userConfig — if you find yourself hardcoding a value that should be configurable, please file an issue.
Harsh Agarwal · harsh12101998@gmail.com · https://github.com/Harsh1210