{"id":45747982,"url":"https://github.com/mzd-hseokkim/jira-claude-code-integration","last_synced_at":"2026-05-14T08:05:03.330Z","repository":{"id":340598152,"uuid":"1158223610","full_name":"mzd-hseokkim/jira-claude-code-integration","owner":"mzd-hseokkim","description":"Automate your entire dev workflow — from Jira issue to merged PR — inside Claude Code. Jira 이슈부터 PR 완료까지 전 단계 자동화 플러그인.","archived":false,"fork":false,"pushed_at":"2026-05-03T17:49:25.000Z","size":1306,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T19:06:07.471Z","etag":null,"topics":["agile","atlassian","automation","claude-code","developer-workflow","jira","mcp"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mzd-hseokkim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-15T01:50:07.000Z","updated_at":"2026-05-03T17:48:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mzd-hseokkim/jira-claude-code-integration","commit_stats":null,"previous_names":["mzd-hseokkim/jira-claude-code-integration"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/mzd-hseokkim/jira-claude-code-integration","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzd-hseokkim%2Fjira-claude-code-integration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzd-hseokkim%2Fjira-claude-code-integration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzd-hseokkim%2Fjira-claude-code-integration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzd-hseokkim%2Fjira-claude-code-integration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mzd-hseokkim","download_url":"https://codeload.github.com/mzd-hseokkim/jira-claude-code-integration/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mzd-hseokkim%2Fjira-claude-code-integration/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33015821,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agile","atlassian","automation","claude-code","developer-workflow","jira","mcp"],"created_at":"2026-02-25T17:20:30.669Z","updated_at":"2026-05-14T08:05:03.323Z","avatar_url":"https://github.com/mzd-hseokkim.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jira-integration · Claude Code Plugin\n\n**[English]** | [한국어](#korean)\n\n[![Version](https://img.shields.io/badge/version-0.34.0-blue)](#)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n[![Claude Code](https://img.shields.io/badge/Claude_Code-plugin-orange)](https://docs.anthropic.com/en/docs/claude-code)\n[![MCP](https://img.shields.io/badge/MCP-mcp--atlassian-purple)](https://github.com/sooperset/mcp-atlassian)\n\n\u003e **Automate your entire dev workflow — from Jira issue to merged PR — inside Claude Code.**\n\n---\n\n## Why This Plugin?\n\nMost Jira + AI tools stop at CRUD (read/create/update issues). This plugin automates the **entire development lifecycle**: approach → implementation → testing → review → PR → done, with every step synced back to Jira automatically.\n\n| | **This Plugin** | Atlassian Official AI | netresearch/jira-skill |\n|---|:---:|:---:|:---:|\n| Jira MCP integration | ✅ | ✅ | ❌ Python scripts |\n| Full PDCA lifecycle | ✅ | ❌ code gen only | ❌ CRUD only |\n| Multi-worktree batch setup | ✅ | ❌ | ❌ |\n| Auto Jira status transitions | ✅ | ✅ | manual |\n| Approach / Test docs | ✅ | ❌ | ❌ |\n| Approach-Impl gap analysis | ✅ | ❌ | ❌ |\n| Iterative review (auto-fix + retry) | ✅ | ❌ | ❌ |\n| Progress tracking across sessions | ✅ | ❌ | ❌ |\n\n---\n\n## Workflow\n\n```mermaid\ngraph LR\n    DSC[\"/jira-task discover\\nTopic → requirements doc\"] -.-\u003e N[\"/jira-task create\\nNew issue + sub-tasks\"]\n    N -.-\u003e A[\"/jira-task init\\nBatch worktree setup\"]\n    A --\u003e B[\"/jira-task start\\nIn Progress\"]\n    B --\u003e C[\"/jira-task approach\\nApproach doc (L1/L2/L3)\"]\n    C --\u003e E[\"/jira-task impl\\nImplement\"]\n    E --\u003e F[\"/jira-task test\\nE2E + unit tests\"]\n    F --\u003e G[\"/jira-task review\\nGap analysis + review\"]\n    G --\u003e H[\"/jira-task merge\\nLocal merge\"]\n    H --\u003e I[\"/jira-task pr\\nCreate GitHub PR\"]\n    I --\u003e J[\"/jira-task done\\nDone\"]\n\n    AUTO[\"⚡ /jira-task auto\\nstart→review (auto)\"]\n\n    style DSC fill:#A0522D,color:#fff\n    style N fill:#8B4513,color:#fff\n    style A fill:#2B50D4,color:#fff\n    style J fill:#156030,color:#fff\n    style AUTO fill:#7B2D8B,color:#fff\n```\n\n\u003e **Discover (optional first step)**: `/jira-task discover \"\u003ctopic\u003e\"` turns a free-form topic into a structured `docs/requirements/\u003cslug\u003e.requirements.md`, which `/jira-task create --from-requirements \u003cfile\u003e` can then consume to bulk-register Epic/Story/Sub-tasks.\n\n\u003e **Shortcut**: `/jira-task auto \u003cID\u003e` runs `start → approach → impl → test → review` automatically. Each step runs as an isolated sub-agent, and already-completed steps are skipped. If review fails, it auto-fixes and retries (up to 2×).\n\nEach step automatically posts a comment and/or attachment to the Jira issue and transitions its status.\n\n---\n\n## Key Features\n\n**Interactive Issue Creation** *(v0.12.0)*\n`/jira-task create [hint]` registers a brand-new Jira issue from conversation context. If context is thin, it asks a few batched questions; if the scope warrants it, it proposes a sub-task breakdown (with `Blocks` links for dependencies so downstream `init` can auto-detect ready-to-start sub-tasks). Supports linking to an existing epic.\n- **No raw `jira_create_issue` footguns**: the skill encodes the exact `mcp-atlassian` schema (e.g. `additional_fields` is a JSON string, `parent` is a bare key, `priority` is `{\"name\": \"...\"}`, `components` is a CSV string, `assignee` must be top-level).\n- **Auto sub-task decision**: the skill judges whether to split based on scope; no flag needed.\n- **Silent-skip guard**: re-fetches created issues to verify priority/labels actually landed (unknown `additional_fields` keys are otherwise dropped with only a warning).\n\n**Auto Mode** *(v0.9.0)*\n`/jira-task auto PROJ-123` runs the full `start → approach → impl → test → review` pipeline automatically.\n- **Sub-agent isolation**: Each step runs as an independent sub-agent, preventing context pollution between stages.\n- **Iterative review**: When review finds issues (gap analysis or code quality), auto-fix → test → review retries up to 2 times before stopping.\n- **Smart resume**: Already-completed steps are skipped based on `.jira-context.json`.\n- **Scope boundary**: `merge`, `pr`, `done` are excluded (cross-worktree / externally visible actions require manual confirmation).\n\n**Interactive Setup Wizard** *(v0.6.0)*\n`/jira setup` guides you through prerequisites (uv, Python 3.10+), credential collection, MCP server registration, and connection validation — no manual CLI commands needed.\n\n**Multi-Worktree Parallel Development** *(v0.7.0)*\n`/jira-task init` supports three argument modes: count (`init 5` — bulk setup), issue key (`init PROJ-123` — sub-task analysis), or natural language (`init \"auth 관련 작업\"` — filtered search). Creates isolated git worktrees for each task.\n\n**Document Auto-generation**\nGenerates requirements / approach / test report / review / PR description documents from dedicated templates under `templates/`, then immediately posts them as Jira attachments and comments via `scripts/jira-attach.sh`. No copy-paste required.\n\n**Reviewer Calibration Log** *(v0.22.x)*\nEach `/jira-task review` run appends a structured entry to `docs/review-log/` (redacted per the project's policy). `scripts/analyze-review-log.py` aggregates pass/fail rates and recurring findings over time so reviewer behavior doesn't silently drift toward self-praise.\n\n**Status Transition Automation**\n`start` → In Progress, `merge` → In Review, `done` → Done. Jira stays up to date without opening a browser.\n\n**Approach-Impl Gap Analysis**\n`/jira-task review` compares your approach document against actual code changes and flags discrepancies alongside code quality issues.\n\n**Session Continuity**\nProgress is tracked in `.jira-context.json`. Reopen Claude Code anytime and see exactly where you left off:\n```\nProgress: init ✓ → start ✓ → approach ✓ → impl → test → review → merge → pr → done\n```\n\n---\n\n## Prerequisites\n\n| Requirement | Required | Purpose |\n|---|:---:|---|\n| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | Yes | CLI environment |\n| Python 3.10+ + [uv](https://docs.astral.sh/uv/) | Yes | Run MCP server (`uvx mcp-atlassian`) |\n| [Git](https://git-scm.com/) | Yes | Branch / worktree management |\n| Jira Cloud account + API Token | Yes | Jira integration |\n| [GitHub CLI (`gh`)](https://cli.github.com/) | PR step only | Create GitHub PRs |\n\n---\n\n## Quick Start\n\n```bash\n# 1. Install the plugin\nclaude plugin marketplace add mzd-hseokkim/jira-claude-code-integration\nclaude plugin install jira-integration@jira-claude-code-integration\n\n# 2. Register the Atlassian MCP server\nclaude mcp add atlassian \\\n  -e JIRA_URL=https://your-domain.atlassian.net \\\n  -e JIRA_USERNAME=your-email@company.com \\\n  -e JIRA_API_TOKEN=your-api-token \\\n  -e JIRA_PROJECTS_FILTER=PROJ \\\n  -- uvx mcp-atlassian\n\n# 3. Verify connection\nclaude\n\u003e /jira\n\n# 4a. (Optional) Create a brand-new issue interactively\n\u003e /jira-task create auth 모듈에 OTP 2차 인증 추가    # → parent + sub-tasks + Blocks links\n\n# 4b. Fetch your top tasks and set up worktrees\n\u003e /jira-task init 5\n\n# 5a. Auto mode — run the full pipeline in one command\n\u003e cd ../your-project_worktree/PROJ-123\n\u003e /jira-task auto       # start → approach → impl → test → review\n\n# 5b. Or step-by-step (TASK-ID is auto-detected from branch/directory)\n\u003e /jira-task start      # Transition to In Progress\n\u003e /jira-task approach   # Generate approach doc (L1/L2/L3)\n\u003e /jira-task impl       # Implement based on approach\n\u003e /jira-task test       # Run tests + post report to Jira\n\u003e /jira-task review     # Gap analysis + code review\n\u003e /jira-task merge      # Merge locally (choose strategy)\n\n# 6. Back in the main repo\n\u003e cd ../your-project\n\u003e /jira-task pr         # Push branch + create GitHub PR\n\u003e /jira-task done       # Transition to Done + post summary\n```\n\n---\n\n## Setup\n\n### Step 1: Install the Plugin\n\n```bash\nclaude plugin marketplace add mzd-hseokkim/jira-claude-code-integration\nclaude plugin install jira-integration@jira-claude-code-integration\n\n# For local dev / testing:\nclaude --plugin-dir /path/to/jira-claude-code-integration\n```\n\n\u003e **Tip**: Instead of running `claude mcp add` manually, you can use the interactive wizard after installing the plugin:\n\u003e ```\n\u003e \u003e /jira setup\n\u003e ```\n\u003e The wizard checks prerequisites, collects your credentials, registers the MCP server, and validates the connection.\n\n### Step 2: Create a Jira API Token\n\n1. Go to https://id.atlassian.com/manage-profile/security/api-tokens\n2. Click **\"Create API token\"**\n3. Enter a label (e.g. `claude-code`) → **Create**\n4. Copy the token (shown only once)\n\n### Step 3: Register the MCP Server\n\n```bash\nclaude mcp add atlassian \\\n  -e JIRA_URL=https://your-domain.atlassian.net \\\n  -e JIRA_USERNAME=your-email@company.com \\\n  -e JIRA_API_TOKEN=your-api-token \\\n  -e JIRA_PROJECTS_FILTER=PROJ \\\n  -- uvx mcp-atlassian\n```\n\nThis saves credentials to `.claude/settings.local.json`. **Add it to `.gitignore`**:\n```\n.claude/settings.local.json\n```\n\n| Variable | Required | Description |\n|---|:---:|---|\n| `JIRA_URL` | Yes | Jira Cloud URL (no trailing `/`) |\n| `JIRA_USERNAME` | Yes | Atlassian account email |\n| `JIRA_API_TOKEN` | Yes | API token from Step 2 |\n| `JIRA_PROJECTS_FILTER` | No | Comma-separated project keys (e.g. `PROJ,DEV`) |\n\n### Step 4: Verify Connection\n\n```bash\nclaude\n\u003e /jira\n```\n\n---\n\n## Commands\n\n| Command | Run from | Description |\n|---|---|---|\n| `/jira` | anywhere | Connection status + help |\n| `/jira setup` | anywhere | **Interactive setup wizard** (prerequisites → credentials → MCP registration → validation) |\n| `/jira-task discover [topic]` | anywhere | **Turn a free-form topic into a requirements doc** (`docs/requirements/\u003cslug\u003e.requirements.md`) for `/jira-task create --from-requirements` |\n| `/jira-task create [hint]` | anywhere | **Interactively create a new Jira issue** with optional sub-tasks, dependency links, and epic linking |\n| `/jira-task init [N\\|KEY\\|desc]` | main repo | Fetch tasks + create worktrees (count, issue key, or natural language) |\n| `/jira-task auto \u003cID\u003e` | worktree | **Auto-run full pipeline** with sub-agent isolation + iterative review |\n| `/jira-task start [ID]` | worktree | Start task (branch, In Progress) |\n| `/jira-task approach [ID]` | worktree | Generate `docs/approach/\u003cID\u003e.approach.md` (L1/L2/L3 level-aware; replaces plan+design) |\n| `/jira-task impl [ID]` | worktree | Implement based on approach doc |\n| `/jira-task test [ID]` | worktree | Run tests + post report to Jira |\n| `/jira-task review [ID]` | worktree | Gap analysis + code review → Jira |\n| `/jira-task merge [ID]` | worktree | Merge locally (strategy: ff/squash/rebase) |\n| `/jira-task pr [ID]` | main repo | Push branch + create GitHub PR |\n| `/jira-task done [ID]` | main repo | Transition Done + post summary |\n| `/jira-task clean \u003cID...\u003e\\|--all\\|--list` | main repo | Remove worktree, delete branch, clean MCP config + context |\n| `/jira-task report` | anywhere | My assigned issues status report |\n| `/jira-task status` | anywhere | Current active task status |\n\n### TASK-ID Auto-detection\n\nWhen working inside a worktree, `[ID]` can be omitted. It is resolved in this order:\n\n1. Git branch name: `feature/PROJ-123` → `PROJ-123`\n2. Current directory name matching `[A-Z]+-\\d+`\n3. `.jira-context.json` active task ID\n\n---\n\n## Project Structure\n\n```\njira-claude-code-integration/\n├── .claude-plugin/\n│   ├── plugin.json              # Plugin manifest\n│   └── marketplace.json\n├── CLAUDE.md                    # Claude behavior instructions\n│\n├── commands/\n│   ├── jira.md                  # /jira\n│   ├── jira-task.md             # /jira-task (router)\n│   └── dashboard.md             # /dashboard (alias of /jira dashboard)\n│\n├── skills/                      # One SKILL.md per workflow step\n│   │                            # Heavy SKILLs use refs/ for split details:\n│   │                            #   skills/\u003cname\u003e/refs/\u003ctopic\u003e.md is loaded\n│   │                            #   on demand by Read, not into the system\n│   │                            #   prompt. See SKILL bodies for explicit\n│   │                            #   `Read skills/\u003cname\u003e/refs/...` calls.\n│   ├── _shared/                 # script-lookup.md 등 공용 스니펫\n│   ├── jira-setup/              # interactive setup wizard\n│   ├── jira-dashboard/          # /jira dashboard 라우팅 SKILL\n│   ├── jira-task-discover/      # topic → requirements doc\n│   │   └── refs/                # conflict-detection / synthesis-confirm / trace-markers\n│   ├── jira-task-create/        # interactive issue creation\n│   │   └── refs/                # mcp-schema / from-requirements-mode\n│   ├── jira-task-init/\n│   │   └── refs/                # issue-key-mode / worktree-creation\n│   ├── jira-task-auto/          # auto-run full pipeline\n│   ├── jira-task-start/\n│   ├── jira-task-approach/      # level-aware approach doc (replaces plan+design)\n│   ├── jira-task-impl/\n│   ├── jira-task-test/\n│   ├── jira-task-review/        # heavy logic extracted to scripts/append-review-log.py\n│   ├── jira-local-merge/\n│   ├── jira-task-pr/\n│   ├── jira-task-done/\n│   ├── jira-task-clean/\n│   └── jira-task-report/\n│\n├── agents/                      # Subagent definitions\n│   └── jira-reviewer.md         # Gap analysis + code quality (forced delegation, opus)\n│\n├── hooks/                       # Session event hooks\n│   ├── hooks.json\n│   └── scripts/\n│       ├── session-start.js         # Show active task on startup\n│       ├── stop-sync.js             # Remind to sync Jira on exit\n│       ├── dashboard-ingest.sh      # Forward UserPromptSubmit/PreToolUse/PostToolUse/SubagentStop/Notification → POST /ingest\n│       ├── dashboard-ingest.test.sh # Unit test for dashboard-ingest.sh\n│       ├── stop-ingest.sh           # Forward Stop event (extracts last assistant text from transcript)\n│       ├── phase-gate.js            # Phase dependency hook (disabled by default)\n│       ├── phase-gate.config.json\n│       ├── phase-gate.test.js\n│       └── phase-gate.scenarios.test.js\n│\n├── scripts/                     # Helper scripts invoked by skills\n│   ├── jira-attach.sh             # Upload attachments via Jira REST API\n│   ├── jira-context-update.py     # merge/done: completedSteps/status 동기화\n│   ├── clean-worktree.py          # Worktree/branch cleanup helper\n│   ├── cleanup-worktree-mcp.py    # done: worktree 단위 MCP config 정리\n│   ├── analyze-review-log.py      # Reviewer calibration log analyzer\n│   ├── append-review-log.py       # /jira-task review: append entry to review-log\n│   ├── append-review-log-wrapper.sh # review SKILL → append-review-log.py wrapper\n│   ├── propagate-mcp-config.sh    # /jira-task init: propagate MCP config to worktree\n│   ├── dashboard-control.sh       # /jira dashboard start/stop/status/setup 제어\n│   ├── dashboard/                 # Dashboard 서버 + React SPA 소스\n│   └── review_log/                # Stored reviewer calibration entries\n│\n├── templates/                   # Document templates per workflow step\n│   ├── requirements.template.md\n│   ├── approach.template.md\n│   ├── test-report.template.md\n│   ├── review.template.md\n│   ├── pr-description.template.md\n│   └── report.template.md\n│\n├── docs/                        # Plugin reference docs\n│   ├── mcp-atlassian-tools.md   # Tool reference for the Atlassian MCP server\n│   └── review-log/              # Review log schema + sample entries\n│                                # (PDCA outputs approach/test/review/\n│                                #  requirements are gitignored as\n│                                #  per-task artifacts)\n│\n└── tests/                       # Python tests for analyze-review-log\n    ├── test_analyze_review_log.py\n    └── fixtures/\n```\n\n### Phase Gate (실험적 — 현재 비활성화)\n\n`/jira-task` 단계 호출 순서를 강제하는 PreToolUse hook이 코드베이스에 포함되어 있지만, **기본적으로 비활성화** 상태입니다. 활성화하려면 명시적으로 hook을 등록해야 합니다.\n\n**구현된 것** (Phase 1.2.1 ~ 1.2.4)\n\n- `hooks/scripts/phase-gate.config.json` — 12 phase 의존 그래프 + artifact 패턴\n- `hooks/scripts/phase-gate.js` — Node hook 스크립트 (의존성 미충족 시 차단, fail-open 설계)\n- `hooks/scripts/phase-gate.test.js`, `phase-gate.scenarios.test.js` — 단위 20 + 시나리오 5 테스트\n- bypass 메커니즘: `JIRA_PHASE_GATE_BYPASS=1` (1회성), `.jira-context.json`의 `bypassGate: true` (영속)\n\n**왜 비활성화 상태인가**\n\n이 플러그인은 본래 \"원하는 단계만 골라 쓰는 도구함\"으로 설계되었습니다 (작은 fix는 approach 생략, 문서 작업은 impl 생략 등). phase-gate를 켜면 모든 인접 단계가 강제 선행 조건이 되어 이 유연성을 깨뜨립니다. 따라서 강제 선형 워크플로를 원하는 팀만 명시적으로 켤 수 있도록 비활성화 상태로 둡니다.\n\n**활성화 방법**\n\n`hooks/hooks.json`의 `hooks` 객체에 다음 항목을 추가하세요:\n\n```json\n\"PreToolUse\": [\n  {\n    \"matcher\": \"Skill\",\n    \"hooks\": [\n      {\n        \"type\": \"command\",\n        \"command\": \"node ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/phase-gate.js\",\n        \"timeout\": 5\n      }\n    ]\n  }\n]\n```\n\n**커스터마이즈**\n\n`phase-gate.config.json`을 편집해 의존성을 완화하거나(`requires` 비우기), 필수 artifact를 바꾸거나, 특정 단계를 `enforced: false`로 끌 수 있습니다.\n\n**테스트 실행**\n\n```bash\nnpm test   # unit 20 + scenarios 5\n```\n\n### Worktree Layout\n\n```\nworkspace/\n├── your-project/                  ← main repo (base branch)\n└── your-project_worktree/         ← created by /jira-task init\n    ├── PROJ-101/                  ← feature/PROJ-101 branch\n    ├── PROJ-102/\n    └── PROJ-103/\n```\n\n---\n\n## Multi-Worktree Merge Strategy\n\nWhen multiple tasks touch the same files, merging in the wrong order causes conflicts.\n\n```\nCheck for file overlap at design time\n├─ No overlap            → PR in any order\n├─ Overlap (independent releases) → Sequential rebase-and-merge\n└─ Overlap (release together)     → Integration branch strategy\n```\n\nCheck before starting implementation:\n```bash\ngit diff --name-only main feature/PROJ-101\ngit diff --name-only main feature/PROJ-102\n```\n\nAvailable merge strategies when running `/jira-task merge`:\n\n| Strategy | Description | Equivalent GitHub option |\n|---|---|---|\n| `--no-ff` (default) | Merge commit, preserves branch history | Create a merge commit |\n| `--squash` | Squash all commits into one | Squash and merge |\n| `rebase` | Linear history, no merge commit | Rebase and merge |\n\n---\n\n## Troubleshooting\n\n**\"Atlassian MCP server not connected\"**\n```bash\nclaude mcp list                  # Check registered servers\nclaude mcp get atlassian         # Verify env vars\nuvx mcp-atlassian                # Test server directly (Ctrl+C to stop)\npip install uv                   # Install uv if missing\n```\n\n**\"Transition failed\"**\n```\n\"Show available transitions for PROJ-123\"\n```\nTransition names vary by Jira workflow. Common names: `To Do`, `In Progress`, `In Review`, `Done`.\n\n**\"Authentication failed\"**\n- Verify `JIRA_USERNAME` matches your Atlassian account email exactly\n- Confirm `JIRA_URL` has no trailing `/`\n- Check if the API token has expired\n\n**\"`gh` CLI not found\"**\n```bash\n# macOS\nbrew install gh \u0026\u0026 gh auth login\n\n# Windows\nwinget install GitHub.cli \u0026\u0026 gh auth login\n```\n\n**Worktree creation failed**\n```bash\ngit rev-parse --git-dir          # Confirm you're in a git repo\ngit branch -a | grep feature/    # Check for existing branches\ngit worktree prune               # Clean stale worktree refs\n```\n\n---\n\n## Dashboard\n\nA real-time activity monitor for every Claude Code worktree in your workspace. Hook events from each session (user prompts, tool calls, sub-agent lifecycle, final responses) stream into a browser UI via SSE so you can see at a glance which session is busy, which is waiting on you, and what each one just answered.\n\n### Quick Start (원클릭)\n\nClaude Code 안에서 슬래시 커맨드 한 줄로 Dashboard를 시작할 수 있습니다:\n\n```\n/jira dashboard\n```\n\n첫 실행 시 npm 의존성 설치와 UI 빌드를 자동으로 수행한 뒤 서버를 기동합니다.\n두 번째 이후 실행부터는 캐시 감지로 setup을 건너뛰고 바로 시작합니다.\n\n| 커맨드 | 동작 |\n|--------|------|\n| `/jira dashboard` | 상태 확인 → stopped이면 자동 setup+start |\n| `/jira dashboard start` | Dashboard 시작 |\n| `/jira dashboard stop` | Dashboard 중지 |\n| `/jira dashboard status` | 현재 상태 조회 (URL/PID/시작 시각) |\n| `/jira dashboard setup` | npm 의존성 설치 및 UI 빌드만 수행 |\n\n서버는 `http://127.0.0.1:8765`에 바인딩됩니다.\n\n### 수동 실행 (Troubleshooting)\n\n슬래시 커맨드 없이 직접 실행해야 하는 경우:\n\n```bash\n# 1) Install root deps (express, chokidar)\nnpm install\n\n# 2) Install web deps and build the SPA bundle into scripts/dashboard/public/\nnpm --prefix scripts/dashboard/web install\nnpm --prefix scripts/dashboard/web run build\n\n# 3) Start the dashboard server\nnpm run dashboard\n# or: node scripts/dashboard/server.js\n```\n\nAfter the first build, daily use is just `npm run dashboard`. Re-run the build step whenever the React source changes.\n\nThe server binds to `http://127.0.0.1:8765` and opens your default browser automatically.\n\n```bash\nDASHBOARD_NO_OPEN=1 npm run dashboard   # suppress auto-open (CI / headless)\nPORT=9000 npm run dashboard              # override default port\n```\n\n### What you see on each card\n\n- **Header** — Jira task id (or directory name when no Jira context), issue type, **outlined status badge with leading dot** (Jira workflow status, distinct from agent activity), `⚙ N` cumulative tool calls in this session, `X분 전` last activity, and badges for `⏵ 응답 대기` / `stale` / `⛔ blocked × N`.\n- **SDLC stepper** — One chip per `/jira-task` step (init/start/approach/impl/test/review/merge/pr/done) coloured by `completedSteps` in `.jira-context.json`. Skipped intermediate steps after `done` are shown with strikethrough.\n- **Activity panel** — Last prompt, **Last response (final concluding line of Claude's reply)**, current tool-in-flight, sub-agent indicator, and a blocked flag. Prompt/response signals are persisted on the server independent of the activity ring buffer so they survive long tool-call bursts.\n- **Issue links** — Below the meta row, `blocks` / `blocked by` chips show related issue keys. Open blockers are highlighted; resolved ones are struck through.\n- **Card border state**:\n  - **Blue glow + pulse** = busy. Defined as \"a `UserPromptSubmit` event without a matching `Stop` yet\" — i.e. Claude is generating right now. Time-independent.\n  - **Amber glow + pulse + 응답 대기 badge** = busy *and* most recent `Notification` mentions permission/input/waiting.\n  - **Red left stripe + `⛔ blocked` badge** = at least one un-resolved `is blocked by` link.\n  - **Dim + `stale` badge** = Jira status is 완료 but the worktree still exists (cleanup candidate).\n- **Header bar (KITT)** — Top of viewport scans left-right while connected (SSE live). The connection chip in the top-right fills bottom-up to indicate countdown to the next jira-collector poll.\n- **Sort \u0026 filter** — Header has chips for sort key (activity / taskId / summary) and a search field that matches taskId / summary / branch / path.\n- **View toggle: Cards ↔ Graph** *(v0.30.x)* — Header has a Cards / Graph toggle. Graph mode renders worktrees as a force-directed graph (react-flow + d3-force) showing `blocks` / `parent` / `epic` relationships with color-coded edges, marching-ants flow direction, and arrow markers. Parent/epic edges anchor the hierarchy (parent on top, children below); blocks edges connect siblings. Click a node → side panel with the full WorktreeCard. Drag a node → it pins in place (simulation won't drag it back). Status/assignee chip filters dim non-matches; isolated nodes get a dashed border; cycle members get heavier red dashes.\n- **Cleanup button** *(v0.30.x)* — Cards in `stale` state (Jira `완료` but worktree alive) get a `🗑 정리` floating button on hover at the bottom-right. Click → confirm → server runs `git worktree remove` + `git branch -d`. Backend safety: only registered worktrees, only when status is done, dirty trees rejected, branch name read from store (no body injection).\n- **Cards without Jira context** (e.g. main repo while running `/jira dashboard`) show only directory + path + activity, with stepper and Jira-only fields hidden.\n\n### Hooks\n\nHook events are wired in `hooks/hooks.json`, forwarded by two small scripts in `hooks/scripts/` to `POST /ingest`, then broadcast via SSE:\n\n| Hook | Forwarder | Used for |\n|------|-----------|----------|\n| `UserPromptSubmit` | `dashboard-ingest.sh` | Last prompt + busy detection |\n| `PreToolUse` | `dashboard-ingest.sh` | Current tool, tool-call counter |\n| `PostToolUse` | `dashboard-ingest.sh` | Closes a tool-in-flight marker |\n| `SubagentStop` | `dashboard-ingest.sh` | Sub-agent active indicator |\n| `Notification` | `dashboard-ingest.sh` | Awaiting / blocked detection |\n| `Stop` | `stop-ingest.sh` | Last response preview (reads `transcript_path`) |\n\nEach ingest is mapped to a worktree path and Jira task id via `.jira-context.json`. `SessionStart` and `Stop` also drive non-dashboard side-effects (Jira context injection, end-of-session reminder) — those forwarders are independent.\n\n### Logs\n\nLog file: `\u003cworkspaceRoot\u003e/logs/dashboard-server.log`\n\n- Append-only JSON Lines format; no rotation in this release.\n- Sensitive fields (`apiToken`, `Authorization`) are automatically redacted to `[REDACTED]` before writing.\n- The server prints the absolute log path to stdout on startup.\n\n### Out of Scope\n\n- Log rotation / size capping\n- Authentication / remote access (currently localhost-only by design)\n- Browser env var (`BROWSER`) support on Linux\n- Windows PowerShell fallback (current: `cmd /c start`)\n- Fallback stdout URL prompt on browser-open failure\n\n---\n\n## Roadmap\n\n- [x] Interactive setup wizard: `/jira setup` *(v0.6.0)*\n- [x] Auto mode: `/jira-task auto` *(v0.6.0)*\n- [x] Init argument expansion: count, issue key, natural language *(v0.7.0)*\n- [x] Iterative review: auto-fix + test + review retry loop *(v0.8.0)*\n- [x] Sub-agent isolation: each auto step in independent context *(v0.9.0)*\n- [x] Interactive issue creation: `/jira-task create` *(v0.12.0)*\n- [x] Requirements discovery: `/jira-task discover` → `docs/requirements/\u003cslug\u003e.requirements.md` *(v1.1.x)*\n- [x] Reviewer calibration log: review history analyzer (`scripts/analyze-review-log.py`) *(v0.22.x)*\n- [x] SKILL bloat refactor: 4 heavy SKILLs (create/discover/init/review) compressed from 1,989 → 921 lines (-54%) via `skills/\u003cname\u003e/refs/` split + script extraction *(v0.24.0)*\n- [x] Dashboard graph view: react-flow + d3-force visualization of `blocks` / `parent` / `epic` relationships with hierarchical force layout, drag-to-pin, status/assignee filters, isolated/cycle highlighting *(v0.30.x — Epic MAE-249)*\n- [x] Dashboard worktree cleanup button: in-card `🗑 정리` floating action for stale worktrees, with safety guards on the backend `POST /cleanup` *(v0.30.x)*\n- [x] Plan + Design → unified `/jira-task approach` (level-aware L1/L2/L3 sizing) *(v0.33.0 — MAE-350)*\n- [x] L3 Epic empty-child sequencing guard for `/jira-task auto` (early exit + guidance) *(v0.34.0 — MAE-364)*\n- [x] Auto SKILL.md hygiene: Scope Shortfall 출처 trail + PDCA 자동 분기 안내 *(v0.34.0 — MAE-366)*\n- [ ] Bitbucket Cloud + GitLab MR support for `/jira-task pr`\n- [ ] Jira Server / Data Center (Personal Access Token)\n- [ ] Sub-task auto-creation from approach doc task breakdown\n- [ ] Time tracking: auto-log work sessions to Jira\n- [ ] CI/CD result posting (GitHub Actions, Bitbucket Pipelines)\n- [ ] Slack / Teams notifications on PR creation and task completion\n- [ ] English documentation for all templates\n\n---\n\n## License\n\nMIT\n\n---\n\n\u003ca name=\"korean\"\u003e\u003c/a\u003e\n\n## 한국어 요약\n\n이 플러그인은 **Jira + Claude Code를 연결하는 개발 워크플로우 자동화 도구**입니다.\n\n### 대시보드\n\nClaude Code 안에서 `/jira dashboard` 한 줄로 셋업·기동을 자동 수행합니다. 첫 실행 시 npm 의존성 설치와 UI 빌드를 자동으로 처리하고, 두 번째부터는 캐시 감지로 즉시 시작합니다.\n\n| 커맨드 | 동작 |\n|--------|------|\n| `/jira dashboard` | 상태 확인 → stopped이면 자동 setup+start |\n| `/jira dashboard start/stop/status/setup` | 개별 액션 |\n\n서버는 `http://127.0.0.1:8765`에 바인딩되며 기본 브라우저가 자동으로 열립니다. 수동 실행은 `npm run dashboard`로도 가능 (CI/헤드리스: `DASHBOARD_NO_OPEN=1`, 포트 변경: `PORT=9000`).\n\n각 worktree 카드는 다음을 보여줍니다:\n\n- **상단 배지**: Jira 워크플로 상태(outlined + 좌측 dot), 누적 도구 호출 수(`⚙ N`), 마지막 활동 상대시간, 상태별 배지(`⏵ 응답 대기` / `stale` / `⛔ blocked × N`)\n- **SDLC stepper**: `.jira-context.json`의 `completedSteps` 기반 단계 진행. `done` 후 건너뛴 중간 단계는 취소선 표시\n- **활동 패널**: 마지막 prompt, **마지막 응답의 결론 줄**, 진행 중 도구, sub-agent / blocked 상태. prompt/response 신호는 ring buffer와 별도로 서버에 보존되어 도구 호출 폭주에도 사라지지 않음\n- **이슈 링크**: `blocks` / `blocked by` 칩 표시. 미해결 blocker는 강조, 완료된 것은 취소선\n- **카드 보더 상태**:\n  - **파란 펄스 = busy** — `UserPromptSubmit` 이후 `Stop`이 아직 안 옴(시간 임계값 없음, \"지금 응답 생성 중\")\n  - **앰버 펄스 + 응답 대기 배지** — busy + 최근 `Notification`이 permission/input/waiting을 포함\n  - **빨간 좌측 stripe + ⛔ blocked 배지** — 미해결 `is blocked by` 링크 존재\n  - **dim + stale 배지** — Jira 상태가 완료인데 worktree가 아직 살아있음(정리 대상)\n- **상단 KITT 바**: SSE 연결 시 좌→우 스캔. LIVE 칩은 다음 jira-collector polling까지의 진행률을 아래→위로 fill\n- **정렬/필터**: 헤더에 정렬 칩(최근활동 / 이슈키 / summary) + 제목 검색 필드(taskId/summary/branch/path 매치)\n- **카드/그래프 뷰 토글** *(v0.30.x)*: 헤더에서 두 모드 전환. 그래프 모드는 worktree를 force-directed 그래프(react-flow + d3-force)로 렌더링하여 `blocks` / `parent` / `epic` 관계를 색상 분리된 엣지(흐르는 점선 + 화살표)로 표시. parent/epic edge가 계층(부모 위, 자식 아래)을 형성하고 blocks edge는 형제 노드를 연결. 노드 클릭 → 우측 사이드 패널에 풀 카드, 노드 드래그 → 그 자리 고정(simulation이 끌어당기지 않음). status/assignee 필터·고립 노드(dashed border)·순환 엣지(굵은 빨간 점선) 강조 지원\n- **정리 버튼** *(v0.30.x)*: stale 상태(Jira 완료 + worktree 생존) 카드 우하단에 hover 시 `🗑 정리` floating 버튼 노출. 클릭 → confirm → 서버가 `git worktree remove` + `git branch -d` 실행. 백엔드 안전장치(등록된 worktree만, 완료 상태만, dirty 거부, branch 이름은 store에서만 조회)\n- **Jira context 없는 카드**(예: 메인 레포): 디렉토리명·path·활동만 표시, stepper와 Jira 전용 필드는 숨김\n\nHook 흐름: `hooks/hooks.json` → `hooks/scripts/dashboard-ingest.sh`(UserPromptSubmit·PreToolUse·PostToolUse·SubagentStop·Notification) / `hooks/scripts/stop-ingest.sh`(Stop, transcript에서 마지막 assistant 텍스트 추출) → `POST /ingest` → SSE. 서버 로그는 `\u003cworkspaceRoot\u003e/logs/dashboard-server.log`(JSON Lines, 민감 필드 자동 redact).\n\n### 핵심 특징\n\n- **`/jira-task discover [주제]`** — 자연어 주제를 **요구사항 문서(`docs/requirements/\u003cslug\u003e.requirements.md`)로 변환**. `/jira-task create --from-requirements \u003c파일\u003e`과 자연 연동되어 Epic/Story/Sub-task 일괄 등록의 입력으로 사용됨 *(v1.1.x)*\n- **`/jira-task create [힌트]`** — 대화 컨텍스트 기반으로 **신규 Jira 이슈를 대화형 생성**. 범위가 크면 서브태스크 분해를 스킬이 직접 제안하고, 의존성은 `Blocks` 링크로 등록되어 이후 `init`의 \"착수 가능 분석\"과 자연 연동. 기존 에픽 연결 지원. `mcp-atlassian`의 `jira_create_issue` 필드 규약(JSON string `additional_fields`, bare-key `parent`, CSV `components` 등)을 스킬에 박아 반복 실패 방지 *(v0.12.0)*\n- `/jira-task init` — 숫자(`init 5`), 이슈 키(`init PROJ-123`), 자연어(`init \"인증 관련\"`) 세 가지 모드로 **worktree 일괄 생성** *(v0.7.0)*\n- **Auto 모드** (`/jira-task auto PROJ-123`): 각 단계를 **독립 sub-agent**로 실행하여 컨텍스트 오염 방지. review 미통과 시 **자동 수정 → 재테스트 → 재리뷰** 최대 2회 반복 *(v0.9.0)*\n- **설정 위자드** (`/jira setup`): 사전 요건 확인 → 자격증명 입력 → MCP 등록 → 연결 검증 대화형 안내 *(v0.6.0)*\n- 접근 설계(approach) → 구현 → 테스트 → 리뷰 → PR → 완료까지 **전 단계 커맨드화** (plan/design 두 단계는 v0.33.0에서 `approach`로 통합)\n- 각 단계 완료 시 **Jira 코멘트·첨부파일·상태 전이 자동 처리**\n- approach 문서와 실제 구현 코드 간 **Gap 자동 분석**\n- **Reviewer Calibration Log** — 매 review 결과를 `docs/review-log/`에 누적하고 `scripts/analyze-review-log.py`로 통과율·반복 지적 패턴을 분석해 리뷰어 self-praise drift 방지 *(v0.22.x)*\n- `.jira-context.json`으로 **세션 간 진행 상황 자동 복원**\n\n### 설치\n\n```bash\nclaude plugin marketplace add mzd-hseokkim/jira-claude-code-integration\nclaude plugin install jira-integration@jira-claude-code-integration\n```\n\n플러그인 설치 후 `/jira setup`을 실행하면 대화형으로 MCP 서버를 설정할 수 있습니다. 또는 직접 등록:\n\n```bash\nclaude mcp add atlassian \\\n  -e JIRA_URL=https://your-domain.atlassian.net \\\n  -e JIRA_USERNAME=your-email@company.com \\\n  -e JIRA_API_TOKEN=your-api-token \\\n  -- uvx mcp-atlassian\n```\n\n자세한 설정은 [상세 설정 섹션](#setup-·-상세-설정)을 참고하세요.\n\n### 기타\n\n- 커맨드 목록, Worktree 전략, 트러블슈팅 등 상세 내용은 영문 섹션에 동일하게 기술되어 있습니다.\n- 이슈·제안은 [GitHub Issues](https://github.com/mzd-hseokkim/jira-claude-code-integration/issues)에 남겨주세요.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmzd-hseokkim%2Fjira-claude-code-integration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmzd-hseokkim%2Fjira-claude-code-integration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmzd-hseokkim%2Fjira-claude-code-integration/lists"}