| name | st |
| description | Start task issue-first. |
| user-invocable | true |
| allowed-tools | ["Bash","Read","Edit","Write"] |
st — Start Task (issue-first)
Kick off a new piece of work issue-first: never jump straight into a PR.
Every new task gets a tracking issue before any branch or edit. This is the
complement to gi — gi grabs an issue that already exists; st is for work
you have in mind that isn't tracked yet, so you write the issue first and then
flow into the same implement → PR → ARDI tail.
When this fires
- "st", "start a task", "start a new task", "new task", "let's work on X"
where X has no open issue yet.
- Any time you're about to start coding something that isn't already covered
by an open tracking issue.
Core rule: issue before PR
Before branching or editing, ensure an issue exists:
- Search the tracker for an existing issue covering the task.
- Exists → use it — this is just
gi on that number.
- None → file one first, then proceed.
Why issue-first: the issue is the durable record of intent, scope, and "done"
criteria. It gives reviewers context, lets the PR auto-close it via
Closes #N, prevents duplicate/undiscoverable work, and means there's a
tracked home for the task even if the PR stalls.
Procedure
1. Restate the task and "done" criteria
One or two sentences: what's the change, why, and what "done" looks like. If
you can't state "done", the issue isn't ready to write yet — clarify scope
first.
2. Search for an existing issue
gh issue list --state open --search "<keywords>" --json number,title,url | cat
gh issue list --state all --search "<keywords>" --limit 10 \
--json number,title,state,url | cat
glab issue list --search "<keywords>" --per-page=20 2>&1 | cat
- Open match → an issue already exists, so this is just
gi on that
number: invoke the gi skill from its claim step onward (claim → check
history → branch → open draft PR → implement → mark ready → ARDI). Skip the
rest of st — you don't need to file anything.
- Closed match → surface it ("looks like #N already covered this and was
closed") and confirm with the user before re-doing the work.
3. File the issue (if none exists)
gh issue create --title "<concise title>" --body "<what & why>
**Done when:** <acceptance criteria>
<scope notes / out-of-scope>"
glab issue create --title "<concise title>" --description "<what & why>
**Done when:** <acceptance criteria>"
4. Check history
Invoke check-history before implementing — review merged/closed MRs that
touched the same area so you don't undo past progress.
5. Branch → open draft PR → implement → ready → ARDI
From here the tail is identical to gi:
git fetch origin main
git checkout -b <type>/<slug> origin/main
6. Report
Linked issue + PR, ARDI round count, and any deferred follow-up issues.
Relationship to other skills
brainstorm — when the task's shape isn't settled yet (multiple
reasonable interpretations, a real design tradeoff, "done" can't yet be
stated in one sentence), run brainstorm first to resolve that through a
Socratic Q&A loop and a plan file, then hand the result to this skill's
"restate the task and 'done' criteria" step instead of starting from
scratch.
gi — once the issue exists, the implement → PR → ARDI tail is the same;
st is "gi, but you write the issue first."
defer-issue — same issue-creation mechanics, for sub-tasks that emerge.
check-history, claim-pr, pr-on-claim,
request-pr-review, ardi, split-concerns — invoked along the
way (pr-on-claim is the "open the draft PR before implementing" step).
post-merge — closes the lifecycle that st opens, once the PR lands.
Anti-patterns
- ❌ Opening a PR with no tracking issue behind it.
- ❌ Filing a duplicate without searching open and closed issues first.
- ❌ A vague issue with no "done" criteria.
- ❌ Re-doing already-closed work without flagging it to the user.
- ❌ Cramming multiple independent concerns into one issue/PR.