From rune
Use when processing GitHub Issues as the arc work queue — fetching issue details, auto-generating plans, running /rune:arc for each, then posting results back to the originating issues. Covers: label-driven batch (--label), file-based queue, inline issue numbers, resume mode (--resume), paging (--all), dry-run preview, cleanup of orphaned labels (--cleanup-labels). Use instead of arc-batch when your work queue lives in GitHub Issues, not plan files. Closes the loop: Issue → Plan → Arc → PR → Comment → Close (via Fixes #N). Keywords: arc-issues, github issues, issue queue, issue backlog, batch from issues, label-driven, rune:ready, --label, --all, --resume, --cleanup-labels, issue-to-plan. <example> Context: User has GitHub issues labeled "rune:ready" to implement user: "/rune:arc-issues --label \"rune:ready\"" assistant: "Fetching issues with label rune:ready..." </example> <example> Context: User has a file with issue numbers user: "/rune:arc-issues issues-queue.txt" assistant: "Reading issue queue from issues-queue.txt..." </example> <example> Context: User wants to process specific issues user: "/rune:arc-issues 42 55 78" assistant: "Processing issues #42, #55, #78..." </example>
How this skill is triggered — by the user, by Claude, or both
Slash command
/rune:arc-issuesThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Processes GitHub Issues as a work queue. For each issue: fetches content → generates plan in `tmp/gh-plans/` → runs `/rune:arc` → posts summary comment → closes issue via `Fixes #N` in PR body.
Processes GitHub Issues as a work queue. For each issue: fetches content → generates plan in tmp/gh-plans/ → runs /rune:arc → posts summary comment → closes issue via Fixes #N in PR body.
Core loop: Stop hook pattern (same as arc-batch). Each arc runs as a native Claude Code turn. Between arcs, the Stop hook reads .rune/arc-issues-loop.local.md, marks current issue completed, posts GitHub comment, updates labels, and re-injects the next arc prompt.
/rune:arc-issues --label "rune:ready" # All open issues with label (FIFO)
/rune:arc-issues --label "rune:ready" --all # Page through ALL matching issues
/rune:arc-issues --label "bug" --milestone "Sprint 3" --limit 5
/rune:arc-issues issues-queue.txt # File-based queue (URLs, #N, bare numbers)
/rune:arc-issues 42 55 78 # Inline issue numbers
/rune:arc-issues --resume # Resume from batch-progress.json
/rune:arc-issues --label "rune:ready" --dry-run # Preview without running
/rune:arc-issues --cleanup-labels # Sweep orphaned rune:in-progress labels
| Flag | Description | Default |
|---|---|---|
--label LABEL | Fetch issues with this label | (required for label mode) |
--all | Page through ALL matching issues (label-driven cursor) | Off |
--page-size N | Issues per page when using --all | 10 |
--limit N | Max issues to fetch (single batch mode) | 20 |
--milestone NAME | Filter by milestone | (none) |
--no-merge | Skip auto-merge in each arc run | Off (auto-merge enabled) |
--dry-run | List issues and exit without running | Off |
--force | Skip plan quality gate (body < 50 chars) | Off |
--resume | Resume from tmp/gh-issues/batch-progress.json | Off |
--cleanup-labels | Remove orphaned rune:in-progress labels (> 2h old) | Off |
| Label | Meaning | Re-process how? |
|---|---|---|
rune:in-progress | Currently being processed | Wait, or --cleanup-labels if orphaned (> 2h) |
rune:done | Completed — PR linked via Fixes #N | Issue auto-closes when PR merges |
rune:failed | Arc failed, needs human fix | Fix issue body → remove label → re-run |
rune:needs-review | Plan quality low or conflicts | Add detail → remove label → re-run |
All 4 labels are automatically excluded from new fetches via --search filter. Re-running the same command resumes where it left off.
// SEC-DECREE-003: Disable gh interactive prompts in all automation contexts
const GH_ENV = 'GH_PROMPT_DISABLED=1'
This constant MUST be prepended to every gh CLI call in this skill.
See arc-issues-algorithm.md for full pseudocode.
const lockConflicts = Bash(`cd "${CWD}" && source plugins/rune/scripts/lib/workflow-lock.sh && rune_check_conflicts "writer"`)
if (lockConflicts.includes("CONFLICT")) {
AskUserQuestion({ question: `Active workflow conflict:\n${lockConflicts}\nProceed anyway?` })
}
Bash(`cd "${CWD}" && source plugins/rune/scripts/lib/workflow-lock.sh && rune_acquire_lock "arc-issues" "writer"`)
Phase 0: Parse arguments (4 input methods + flags)
Phase 1: Pre-flight validation (arc-issues-preflight.sh)
Phase 2: Issue → Plan generation (sanitize, template, stub sections)
Phase 3: Dry run (if --dry-run)
Phase 4: Initialize batch-progress.json
Phase 5: Confirm batch with user
Phase 6: Write state file + invoke first arc (Stop hook handles rest)
(Stop hook: arc-issues-stop-hook.sh handles all subsequent issues + final summary)
Phase 6 writes .rune/arc-issues-loop.local.md (state file) and invokes the first arc natively. The Stop hook (scripts/arc-issues-stop-hook.sh) handles all subsequent issues via self-invoking loop.
How the loop works:
/rune:arc for the first issue's plan (native turn)arc-issues-stop-hook.sh reads .rune/arc-issues-loop.local.mdbatch-progress.json{"decision":"block","reason":"<prompt>"}Lock release: The stop hook releases the workflow lock on the final iteration:
source "${CWD}/plugins/rune/scripts/lib/workflow-lock.sh" && rune_release_lock "arc-issues"
| Error | Recovery |
|---|---|
gh CLI not installed | Pre-flight check fails with actionable message: brew install gh or apt install gh |
API rate limiting (gh api 403/429) | Exponential backoff (3 retries, 5s/15s/45s). After exhaustion, mark issue as rune:failed with rate-limit note |
| Issue not found (404) or already closed | Skip issue, log warning, mark as SKIPPED in batch-progress.json |
| Issue body too short (< 50 chars) | Block by default (plan quality gate). Override with --force flag |
| Stop hook timeout cascade (> 15s) | GH API calls deferred to beginning of next arc turn. If still timing out, state file persists for --resume |
Crash recovery via --resume | Reads tmp/gh-issues/batch-progress.json, skips completed/failed issues, resumes from next pending |
Orphaned rune:in-progress labels (> 2h) | Run --cleanup-labels to sweep stale labels from aborted runs |
| Concurrent session conflict | Session isolation guard in stop hook filters by owner_pid; second session skips state file belonging to first |
| Plan generation fails (issue body unparseable) | Mark issue as rune:needs-review, post error comment, continue to next issue |
rune:in-progress after fetching creates a narrow race window if two sessions run concurrently. Documented v1 limitation.Fixes org/repo#N requires PR repo write access to issue repo.npx claudepluginhub vinhnxv/rune --plugin runeSweeps open GitHub issues, optionally filtered by label, triages out complex ones, and drives the rest to completion autonomously via /big-plan.
Triage GitHub issues through a configurable label-based state machine. Moves issues between workflow states like triage_pending, awaiting_info, ready_for_agent, and ready_for_human.
Grooms all open GitHub issues with subagents for clarity then loops implementation: branch, research, swarm code, test, commit, merge PRs until backlog cleared.