st
Start task issue-first.
- License 许可
- MIT
- 最近更新
- 2026-11-12
- Stars
- ★ 4
- Forks
- 1
01 前言 Front Matter
- name
- st
- description
- Start task issue-first.
- allowed-tools
- [ "Bash", "Read", "Edit", "Write" ]
- user-invocable
- true
03 SKILL.md 正文
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
gion 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
# GitHub — open first, then all states (it may already be filed or closed)
gh issue list --state open --search "<keywords>" --json number,title,url | cat # SEARCH_ISSUES
gh issue list --state all --search "<keywords>" --limit 10 \
--json number,title,state,url | cat # SEARCH_ISSUES
# GitLab
glab issue list --search "<keywords>" --per-page=20 2>&1 | cat
- Open match → an issue already exists, so this is just
gion that number: invoke thegiskill from its claim step onward (claim → check history → cut a worktree and branch → open draft PR → implement → mark ready → ARDI). Skip the rest ofst--- 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)
# GitHub
gh issue create --title "<concise title>" --body "<what & why>
**Done when:** <acceptance criteria>
<scope notes / out-of-scope>" \
--label ai-authored --label "model:<model-id>" --label P2 # CREATE_ISSUE
# GitLab
glab issue create --title "<concise title>" --description "<what & why>
**Done when:** <acceptance criteria>" \
--label "ai-authored,model:<model-id>,P2"
- Keep scope tight — one concern per issue (see
split-concerns). If the task is really several concerns, file several issues. - Capture acceptance criteria so "done" is unambiguous later.
- The labels above are not optional: every issue an agent files into a
repo we administrate carries
ai-authored,model:<model-id>and one ofP1,P2orP3(P2is the default), perissue-first. Normalize the model id and create the labels where they are missing, perlabel-agent-filed-issues. - Add any further labels the repo's own taxonomy calls for.
- Then claim it (
claim-prpattern) so a parallel session / the@claudebot doesn't collide:gh issue comment <N> --body "Claude Code CLI (local session) is working on this — please hold off until I'm done. _Posted by Claude Code (AI agent) --- not written by a human._" # COMMENT_ISSUE
3a. If the task builds on an existing issue or PR
When the task naturally builds on an open issue or PR (it needs that work's code, or edits the same passages), link the two before branching, per issue-first:
- File the new issue as usual.
- Mark it blocked by the existing issue (or the existing PR) in GitHub's issue relationships field:
gh issue edit <new> --add-blocked-by <existing number or URL>(the REST fallback for olderghis inissue-first). - Then either wait for the lower-level issue or PR to finish, or, if feasible, stack a new PR on it with
stack-prs. Runstack-prs's decision gate first; step 5's branch frommainapplies only when the work is independent of every open PR.
4. Check history and research DRW
- Invoke
check-historybefore implementing --- review merged/closed MRs that touched the same area so you don't undo past progress. - Perform a research step to check whether the functionality or helper already
exists (Don't Reinvent the Wheel / DRW): search our own repos
(
Morrison-Lab/gha, lab packages, ai-config) and trustworthy upstream ecosystems (standard libraries, r-lib / tidyverse, PyPI, npm) viaprefer-upstreamanddont-reinvent-wheelbefore hand-rolling custom code. - Choose explicitly whether to centralize or distribute the content or other
work, both within the repo and across repos, and state the choice in the
issue or PR, per
centralize-or-distribute. Ezra, 2026-11-09: "when planning and/or performing work, we should choose explicitly whether to centralize vs distribute content or other work, both within and across repos" (ai-config#5185).
5. Branch → open draft PR → implement → ready → ARDI
From here the tail is identical to gi:
git fetch origin main # FETCH
git checkout -b <type>/<slug> origin/main # CREATE_BRANCH — fix/ feat/ docs/ refactor/
-
Open the draft PR now, before implementing — an empty commit gives the branch a diff to open against, kept as a draft so the review bot doesn't run on an empty diff (see
pr-on-claim):git commit --allow-empty -m "start: <title> (closes #<N>)" # COMMITPush as a separate Bash call, per
check-before-pushing's "Keep the commit in its own Bash call":git push -u origin <type>/<slug> # PUSHOpen the draft PR in a separate Bash call:
gh pr create --draft --title "<title>" --body "Closes #<N> WIP — opened up front to claim the issue; implementing now." # CREATE_PR -
Implement (code, tests, docs), researching existing libraries/functions before hand-rolling custom code, run the repo's standard checks, and push the implementation onto the PR, committing with a message referencing the issue (
fix: … (closes #N)). -
Mark the PR ready for review (
gh pr ready <N>—MARK_PR_READY) and requestthe repository owneras reviewer (request-pr-review). -
ARDI the PR to a clean verdict (
ardi). Don't merge unless asked.
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), runbrainstormfirst 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.stack-prs--- step 3a hands off to it when the task builds on an open PR; it supplies the decision gate and the branch mechanics.gi— once the issue exists, the implement → PR → ARDI tail is the same;stis "gi, but you write the issue first."prefer-upstream--- search existing packages and tools before writing custom code to prevent reinventing the wheel.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-claimis the "open the draft PR before implementing" step).post-merge— closes the lifecycle thatstopens, 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.
- ❌ Hand-rolling custom code without researching existing libraries/packages first (violating DRW).
- ❌ Cramming multiple independent concerns into one issue/PR.
04 同仓库更多 Skills
triage
Triage backlog: P1/P2/P3 or close.
mwc
Session merge grant with confidence gate.
migrate-discussion
Move items between Issues and Discussions.
memorize
Persist memory across sessions.
defer-issue
File issue for deferred work.
create-release-checklist
Create an R package release-checklist issue.