# Issues

> GitHub issue workflow — ready queue with dependency resolution, claim, start, close, link

- **Type:** Skill
- **Install:** `agentstack add skill-loomantix-claude-platform-issues`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [loomantix](https://agentstack.voostack.com/s/loomantix)
- **Installs:** 0
- **Category:** [Developer Tools](https://agentstack.voostack.com/c/developer-tools)
- **Latest version:** 0.1.0
- **License:** Apache-2.0
- **Upstream author:** [loomantix](https://github.com/loomantix)
- **Source:** https://github.com/loomantix/claude-platform/tree/main/.claude/skills/issues
- **Website:** https://github.com/loomantix/claude-platform

## Install

```sh
agentstack add skill-loomantix-claude-platform-issues
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# /issues

Thin workflow over `gh issue` with a smart **ready** query that parses `Blocked by #N` / `Depends on #N` from issue bodies to compute dependency-free work. (`Blocks #N` is written as the reciprocal side by `/issues link`, but isn't parsed as a blocker itself — the authoritative direction is `Blocked by`.)

**Arguments**: `$ARGUMENTS`

Dispatch on the first word of `$ARGUMENTS`. If no verb is given, default to `ready`.

---

## Permission hygiene

**Never use heredocs in `gh` commands** — the auto-approval regex can't match multiline commands, which causes permission prompts. Always write multiline content to a temp file first:

```bash
cat > /tmp/issue-body.md  --body-file /tmp/issue-body.md
```

Apply to: `gh issue create`, `gh issue edit`, `gh issue comment`.

---

## ready

Show open issues with no open blockers, sorted by priority.

```bash
./.claude/skills/issues/scripts/ready.py
```

Flags (all optional):

- `--mine` — only issues assigned to me
- `--unassigned` — only unassigned issues
- `--agent` — only issues labeled `dev: agent`
- `--priority critical|high|medium|low`
- `--area ` (matches `area: ` label — e.g., `backend`, `frontend`, `mobile`, `packages`)
- `--limit N` (default 20)
- `--json` — machine-readable

Exclusion rules:

- Label `status: blocked`
- Label `status: on-staging` — fix merged to a staging/integration branch, awaiting release/promotion (done, pending; an opt-in convention — no-op in repos that don't apply it)
- Any `agent-bail:*` label — explicitly excluded by backlog refinement or a prior loop run, even if a stale `dev: agent` label remains
- Body contains `Blocked by #N` or `Depends on #N` where #N is still open
- Targeted by a closing reference from an **open** PR, or from a PR **merged in the last 30 days** (via `closingIssuesReferences`, with a closing-keyword body fallback) — keeps issues already fixed as a PR side-item or by an in-review PR out of the queue, including done-on-integration issues that a non-default-branch merge never auto-closed

The `--agent` / `--priority` / `--area` flags work via standard label conventions (`dev: agent`, `priority: `, `area: `). Repos that don't use those labels will simply get an empty result for those filters — the script doesn't enforce a label scheme, it just queries one when asked.

---

## show \

```bash
gh issue view 
```

Surface dependency refs explicitly (useful for triage):

```bash
gh issue view  --json body --jq '.body' | grep -iE '^[[:space:]]*[-*]?[[:space:]]*(blocked by|blocks|depends on)[:\s]+#[0-9]+' || echo "(no dependency refs)"
```

---

## claim \

```bash
gh issue edit  --add-assignee @me
printf 'Claiming this.\n' > /tmp/issue-comment.md
gh issue comment  --body-file /tmp/issue-comment.md
```

---

## start \

Claim + create working branch off the repo's default branch. The default branch is auto-detected (`main`, `staging`, etc.) via the upstream HEAD ref so this works across consumer repos without per-repo config:

```bash
gh issue edit  --add-assignee @me
slug=$(gh issue view  --json title --jq '.title' | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g; s/--*/-/g; s/^-//' | cut -c1-50 | sed 's/-$//')
default_branch=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')
default_branch="${default_branch:-main}"
git fetch origin "$default_branch"
git checkout -b "fix/issue--$slug" "origin/$default_branch"
```

Replace `` and the slug interpolation with the real issue number. If `git symbolic-ref` is unset (rare; happens when the remote was added without `--mirror` or `git remote set-head` was never run), the fallback is `main`. Run `git remote set-head origin --auto` once on the affected clone to fix it permanently.

---

## close \ \[msg\]

With a comment:

```bash
printf '\n' > /tmp/issue-close.md
gh issue close  --comment "$(cat /tmp/issue-close.md)"
```

Without:

```bash
gh issue close 
```

**Confirm with the user before closing** if the issue isn't assigned to them or the close reason isn't obvious from the conversation.

---

## link \ blocks|blocked-by \

Adds dependency refs to **both** issues so `ready` sees them regardless of which side you query.

```bash
./.claude/skills/issues/scripts/link.py  blocks 
./.claude/skills/issues/scripts/link.py  blocked-by 
```

- `link A blocks B` → writes `Blocks #B` to A, `Blocked by #A` to B
- `link A blocked-by B` → writes `Blocked by #B` to A, `Blocks #A` to B

Refs land under a `## Dependencies` section in each body. If a matching ref already exists, the script no-ops that side.

---

## search \

Forward to `gh issue list --search`:

```bash
gh issue list --search "" --limit 20
```

Useful query fragments: `label:"dev: agent"`, `is:open no:assignee`, `in:title pipeline`, `author:@me`.

---

## Dependency parsing rules

`ready` recognizes these patterns (case-insensitive, on their own line, optionally bulleted):

- `Blocked by #N`
- `Depends on #N`

To mark a dependency, prefer `/issues link` over manual edits — it keeps both issues consistent and under a parseable `## Dependencies` section. The label `status: blocked` is also honored (excludes from `ready` regardless of body content).

---

## Hard rules

- Never use heredocs in `gh` commands — always temp files.
- Never close someone else's issue without explicit user confirmation.
- Keep dependency refs under the `## Dependencies` section so they stay parseable and don't conflict with prose.
- If `ready` returns nothing, don't invent work — report the empty queue and stop.

---

## Source of truth

This skill lives upstream at `.claude/skills/issues/`. Synced to consumer repos via the sync mechanism. Edits in a consumer will be overwritten on next sync — make changes upstream.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [loomantix](https://github.com/loomantix)
- **Source:** [loomantix/claude-platform](https://github.com/loomantix/claude-platform)
- **License:** Apache-2.0
- **Homepage:** https://github.com/loomantix/claude-platform

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-loomantix-claude-platform-issues
- Seller: https://agentstack.voostack.com/s/loomantix
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
