Work a single GitHub issue end to end — fetch its full context, branch, and start. Use when Josh points at an issue and wants it worked: 'let's look at issue 43', 'work on #43', 'start 43', 'pick up foo/bar#43', 'what's next?', 'grab the next issue', 'let's fix that bug'. Also use with no ref when he says 'let's get started' or 'what am I on?' — the ref resolves from the conversation or from the current git branch. Routing: if the issue has at least one open sub-issue it is a parent, so hand off to the `epic` skill with that ref; `epic` covers 'close out the epic', 'work through all of #40's children', 'do the whole epic'.
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Pull the specified GitHub issue, gather its full context, create a working branch, and start.
CLAUDE.md's orchestration rules govern, without their escape hatch — work touching code always goes to an agent, however small it looks. Your exceptions are metadata: gh calls fetching issue context, git calls managing the branch. What you keep is the conversation.
$ARGUMENTS is the issue ref optionally followed by a note. The first token is the issue ref, everything after is a note providing additional context.
Example: /issue 123 focus on the api endpoint, ignore the frontend for now → issue ref: 123, note: focus on the api endpoint, ignore the frontend for now
$ARGUMENTS may be empty. Resolve the ref from the first source that yields one:
| Order | Source |
|---|---|
| 1 | A ref in $ARGUMENTS |
| 2 | A ref Josh named in the conversation |
| 3 | The issue tracked by the current branch — git rev-parse --abbrev-ref HEAD gives <TYPE>-<number>, e.g. FEATURE-43 |
Nothing resolves → ask which issue, one line, no preamble.
If a note is present, treat it as guidance throughout planning and execution — it may narrow scope, set priorities, or provide context not in the issue itself.
Parse the issue ref to determine the repo and issue number:
| Format | Example | Meaning |
|---|---|---|
| Number only | 123 | Current repo, issue 123 |
owner/repo#number | foo/bar#123 | Repo foo/bar, issue 123 |
repo#number | bar#123 | Current owner + repo bar, issue 123 |
To get the current repo's owner:
gh repo view --json owner -q '.owner.login'Gather everything the issue has attached. Any of it may carry relevant context; interpretation isn't this skill's job — pull it all first, then read.
gh issue view returns names but not label/milestone descriptions or type/parent/sub-issue/project data. Reach further for the rest:
# The issue itself
gh issue view <number> --repo <owner/repo> \
--json number,title,body,state,assignees,labels,milestone,comments
# Label descriptions (issue view returns only names)
gh label list --repo <owner/repo> --limit 200 --json name,description
# Milestone description (issue view returns only title)
gh api repos/<owner/repo>/milestones/<milestone-number>
# Issue type, parent, sub-issues, linked PRs, project fields
gh api graphql -f query='
query($url: URI!) {
resource(url: $url) {
... on Issue {
issueType { name description }
parent { number title url state }
subIssues(first: 50) { nodes { number title state url } }
closedByPullRequestsReferences(first: 20, includeClosedPrs: true) {
nodes { number title state url }
}
projectItems(first: 10) {
nodes {
project { title number }
fieldValues(first: 20) {
nodes {
... on ProjectV2ItemFieldSingleSelectValue {
field { ... on ProjectV2SingleSelectField { name } }
name
}
... on ProjectV2ItemFieldTextValue {
field { ... on ProjectV2Field { name } }
text
}
... on ProjectV2ItemFieldNumberValue {
field { ... on ProjectV2Field { name } }
number
}
}
}
}
}
}
}
}' -f url="https://github.com/<owner/repo>/issues/<number>"The GraphQL call returns subIssues with a state on every node. If at least one sub-issue is OPEN, this is a parent with work left in it and the epic skill owns it — say so in one line and invoke epic with the same ref and note.
Otherwise announce what's running in one line, then go straight to Step 4 — invoking /issue with a resolved ref is Josh's go-ahead to work it, not a prompt for a second yes:
Working issue #43 — <title>Only pause for confirmation when something genuinely needs it: the ref resolved implicitly and might be the wrong issue, or the issue itself leaves a decision open that you can't settle from context.
Ensure you're on the base branch (usually master or main), then:
git issue <number>Track the issue as active session context: Active Issue: #<number> - <title>.
Read the fetched context and assess.
If any signal suggests this is a bug — issue type set to a bug variant, a label indicating a defect, body or comments describing broken or regressed behavior, a linked PR that reverted something, or the note frames it as an investigation:
systematic-debugging skill.Otherwise, assess complexity:
Straightforward — requirements clear, approach obvious, no architectural decisions needed:
Complex — ambiguous requirements, multiple approaches possible, architectural decisions needed, or the note asks to plan first:
planning skill to draft a plan.Default to just starting. Only plan when the work genuinely needs it.
Dispatch an implementer agent. It starts cold, so everything bearing on the work goes in the prompt:
Work GitHub issue #<n> in <owner/repo>: <title>
## The issue
<full body>
## Discussion
<comments carrying requirements or constraints>
## Direction
<the note, the approved plan, the root cause traced in triage — whatever applies>
## Your scope
Only this issue, in the current working tree on branch <branch>.BLOCKED: <question> comes back — 100% confident from the conversation or the issue → answer it and resume the same agent with SendMessage so its context survives. Anything less → put the question to Josh verbatim with the context needed to answer it; don't soften it, don't answer around it, don't hand him a guess to confirm.
Scope expands past the issue → stop and ask about a new issue.
The project defines a team-review skill → invoke it yourself as the gate; it's a skill, not an agent to dispatch. Otherwise dispatch a code-reviewer agent with the diff (the uncommitted working tree on branch <branch>), the list of changed files, the issue URL, and the implementer's claims quoted verbatim.
SendMessage. All of them, no cherry-picking. If one looks wrong, dispatch an agent to check it before dismissing it.One pass: the implementer fixes every finding, then the work goes to Josh. No second reviewer. Tests failing means the issue isn't done — it does not go to Josh with a caveat.
Hand it over like a colleague would — a short plain-language paragraph, not a file listing. Then stop and wait for review. Changes requested → implementer via SendMessage, feedback verbatim, then back through steps 8 and 9.
joshmanders/dotfiles
92186fe
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.