export-open-issues
# export-open-issues This Claude Code skill audits and exports open issues from project trackers like GitHub and Linear, generating a consolidated report with aging analysis, priority distribution, and assignee workload metrics. Use it during sprint planning, backlog health reviews, or stakeholder reporting to capture a snapshot of current work status across active trackers. The skill runs collection agents in parallel for team mode or sequentially for solo mode, then archives the exported data to a vault directory with timestamp-tagged files.
git clone --depth 1 https://github.com/huytieu/COG-second-brain /tmp/export-open-issues && cp -r /tmp/export-open-issues/.claude/skills/export-open-issues ~/.claude/skills/export-open-issuesSKILL.md
# COG Export Open Issues Skill ## When to Invoke - User wants to audit open issues or backlog health - User says "export issues", "open issues", "backlog audit", "issue report", "what's open" - Sprint/cycle planning prep — need a clear picture of what's in flight - Stakeholder reporting — need a snapshot of current work status ## Agent Mode Awareness **Check `agent_mode` in `00-inbox/MY-PROFILE.md` frontmatter:** - If `agent_mode: team` — use parallel agents to collect from all active trackers simultaneously and produce a unified report - If `agent_mode: solo` — collect from the primary tracker sequentially ## Command: `/export-open-issues` ## Pre-Flight Check 1. **Read `00-inbox/MY-INTEGRATIONS.md`** to determine which trackers are active 2. **Read `00-inbox/MY-PROFILE.md`** for active projects 3. **Get current timestamp:** Run `date '+%Y-%m-%d %H:%M'` using Bash 4. **Ask the user** (if not already provided): - Which project? (if multiple active) - Scope: all open issues, or filtered by label/milestone/assignee? - Include additional analysis? (aging, priority distribution, assignee load) --- ## Execution Strategy ### Phase 1: Collect Open Issues #### Team Mode (parallel agents) Launch collection agents using the Task tool with `run_in_background: true`: **Agent: "github-issues-collector"** (if GitHub is active) ``` Export all open issues from GitHub. Repository: [CUSTOMIZE: your-org/your-repo] 1. Get all open issues: gh issue list --repo [CUSTOMIZE: your-org/your-repo] --state open --json number,title,author,assignees,labels,createdAt,updatedAt,milestone,url --limit 500 2. Get all open PRs (separate from issues): gh pr list --repo [CUSTOMIZE: your-org/your-repo] --state open --json number,title,author,labels,createdAt,updatedAt,reviewDecision,url --limit 200 For each issue, calculate: - Age in days (today - createdAt) - Days since last update (today - updatedAt) - Staleness flag: >30 days since last update = stale Return: full issue list with calculated fields ``` **Agent: "linear-issues-collector"** (if Linear is active) ``` Export all open issues from Linear. 1. Use ToolSearch to load Linear tools 2. List all teams: mcp__claude_ai_Linear_2__list_teams 3. For each relevant team, list open issues: mcp__claude_ai_Linear_2__list_issues 4. Get current cycles: mcp__claude_ai_Linear_2__list_cycles 5. Get milestones: mcp__claude_ai_Linear_2__list_milestones For each issue, collect: - ID, title, status, priority, assignee, labels, project - Created date, updated date - Cycle membership - Blocked status Return: full issue list with metadata ``` **Agent: "jira-issues-collector"** (if Jira is active) ``` Export all open issues from Jira. Project: [CUSTOMIZE: YOUR-PROJECT-KEY] 1. Search open issues: JQL: project = "[CUSTOMIZE: YOUR-PROJECT-KEY]" AND status NOT IN (Done, Closed, Resolved) ORDER BY priority DESC, created ASC 2. For each issue, collect: key, summary, issuetype, status, priority, assignee, reporter, labels, components, fixVersion, created, updated, duedate Return: full issue list with metadata ``` #### Solo Mode Run collection sequentially for the primary tracker. ### Phase 2: Analyze and Categorize Process the collected data to produce: #### 2.1 Summary Statistics ``` Total Open Issues: [N] - By Priority: Critical [N], High [N], Medium [N], Low [N], None [N] - By Type: Feature [N], Bug [N], Task [N], Other [N] - By Status: To Do [N], In Progress [N], In Review [N], Blocked [N] - By Assignee: [Name] ([N]), [Name] ([N]), Unassigned ([N]) ``` #### 2.2 Health Indicators - **Stale issues** (no update in >30 days): list with age - **Unassigned issues**: list with priority - **Blocked issues**: list with blocker details - **Overdue issues** (past due date): list with days overdue - **Oldest open issues**: top 10 by age - **In-progress bottleneck**: issues in "In Progress" for >7 days #### 2.3 Distribution Charts (text-based) ``` Priority Distribution: Critical ████░░░░░░ 12% High ████████░░ 38% Medium ██████░░░░ 28% Low ████░░░░░░ 22% Age Distribution: <7 days ██████████ 45% 7-30 days ██████░░░░ 30% 30-90 d ███░░░░░░░ 15% >90 days ██░░░░░░░░ 10% ``` ### Phase 3: Generate Report ```markdown --- type: open-issues-audit project: [project-name] date: [YYYY-MM-DD] created: [YYYY-MM-DD HH:MM] source: [github/linear/jira/multi] tags: ["#issues-audit", "#[project-name]", "#backlog"] summary: total_open: [N] critical: [N] high: [N] stale: [N] unassigned: [N] blocked: [N] oldest_days: [N] --- # Open Issues Audit — [Project Name] **Date:** [YYYY-MM-DD] **Source:** [Tracker(s) used] **Total Open Issues:** [N] --- ## Executive Summary [2-3 sentences: overall backlog health, biggest concerns, and recommended actions] --- ## Summary Statistics | Category | Count | % of Total | |----------|-------|-----------| | **By Priority** | | | | Critical | [N] | [%] | | High | [N] | [%] | | Medium | [N] | [%] | | Low | [N] | [%] | | No Priority | [N] | [%] | | **By Status** | | | | To Do | [N] | [%] | | In Progress | [N] | [%] | | In Review | [N] | [%] | | Blocked | [N] | [%] | | **By Type** | | | | Feature/Story | [N] | [%] | | Bug | [N] | [%] | | Task | [N] | [%] | | Other | [N] | [%] | --- ## Assignee Load | Assignee | Open Issues | Critical/High | In Progress | Oldest Issue (days) | |----------|-------------|---------------|-------------|-------------------| | [Name] | [N] | [N] | [N] | [N] | | [Name] | [N] | [N] | [N] | [N] | | Unassigned | [N] | [N] | — | [N] | --- ## Health Alerts ### Stale Issues (>30 days without update) | # | Title | Assignee | Priority | Age (days) | Last Updated | |---|-------|----------|----------|-----------|-------------| | [#] | [Title] | [Name] | [Priority] | [N] | [Date] | ### Blocked Issues | # | Title | Assignee | Blocked By | Days Blocked | |---|-------|----------|-----------|-------------| | [#] | [Title] | [Name] | [Reason] | [N] | ### Unass
Update people profiles in 05-knowledge/people/ with new information from brief data, meetings, or Slack
Collect data from GitHub, Slack, Jira, Linear, or file system. Structured extraction only — no synthesis.
Execute pre-approved mutations — Jira transitions, Linear updates, API calls, build commands.
Read, write, and organize vault files. Metadata updates, file moves, profile updates.
Execute publishing operations — Slack, Confluence, Notion, webhooks. Receives final content and posts it.
Web research agent. Searches, fetches URLs, extracts facts and evidence. No synthesis — just structured findings.
Deep strategic research engine — decomposes questions into parallel research threads, spawns multiple agents, and synthesizes into actionable strategic analysis
Quick capture of raw thoughts with intelligent domain classification and competitive intelligence extraction