File issues that read as specs
An issue states what must become true, so a later plan can be written against
it. The enemy is the story issue: the occasion that prompted it, a quote from
the prompt, and a background paragraph repeating the labels, type and parent
that GitHub already shows beside the body. The overcorrection is the one-line
issue that never says when it is done, which pushes the whole spec into the
plan. An issue is a spec before a plan; a plan reads it and never depends on
it staying open.
Invoking this skill authorizes creating the issues it showed you and you
approved, with their labels, type, project fields, relations and milestone,
and creating the default labels references/fields.md names when the
repository defines none of its own. It never closes an issue, never deletes
one, and never edits an existing one, except to add a relation to a parent or
a blocker you named.
Steps
Intake. Turn the request into one goal sentence per issue, and say
which sentence came from which part of the request. An issue whose goal
sentence needs an "and" for two unrelated outcomes is too big: propose a
parent plus sub-issues and ask once, listing the split you would make.
Never invent an issue the request does not ask for.
Read the repository, invent nothing. Read its labels, issue types,
milestones, project fields and issue templates, and pick the vocabulary,
as references/fields.md says. Read the language of the last five issues
with gh issue list --limit 5 --json title,body --jq '[.[].title]'.
Ground the references. Send the exo:explorer agent the paths and symbols the
goal sentences name, so References carries real paths. Skip this step for
an issue that names no code.
Show the draft, then ask once. Print, per issue: the title, the body,
and one metadata line holding labels, type, parent, blocked-by, milestone
and project fields. Ask one approval question covering all of them.
Create nothing before the yes.
Create in dependency order. A parent before its children, a blocker
before what it blocks, with the commands and field settings in
references/fields.md.
Read back. gh issue view <n> --json number,title,labels,milestone,url
per created issue, and report the URLs, plus everything Step 2 said this
repository does not define.
The body
Write it in the language of the existing issues. When there are none, follow
the language of the recent pull requests and commits
(gh pr list --limit 5 --json title --jq '[.[].title]',
git log -5 --format=%s). The skill's own text stays English.
Take the shape from references/fields.md: Spec for a brief or for feature
work, Report for a bug, a regression, a chore or a documentation fix. That
file holds both section lists, the ban on a background section and on
repeating the metadata, and how priority, size and estimate are read off the
body; no field and no section is decided here.
References
| File |
Read it when |
references/fields.md |
Steps 2 and 5, before reading the repository and before creating. |
Judgment
- Explicit user instructions outrank this skill, including a body section it
forbids: say once that the metadata already shows it, then write it.
- The repository's vocabulary outranks the request's wording: a label the
user names that does not exist is reported, not created.
- A request to change or close an existing issue leaves this skill: report it
and let the user run the
gh command, except the parent or blocker
relation the authorization above covers.
- Sizing belongs to the user. Propose a split once; a repeated request for one
issue is the decision.
1---2name: issuing3description: Write and create GitHub issues for this repository as specs, with the labels, type, relations, milestone and project fields the repository actually defines. Use when the user asks to file, open, write or split issues. Not for closing or editing an existing issue, for a plan, or for issues in a repository the working directory does not point at.4---56# File issues that read as specs78An issue states what must become true, so a later plan can be written against9it. The enemy is the story issue: the occasion that prompted it, a quote from10the prompt, and a background paragraph repeating the labels, type and parent11that GitHub already shows beside the body. The overcorrection is the one-line12issue that never says when it is done, which pushes the whole spec into the13plan. An issue is a spec before a plan; a plan reads it and never depends on14it staying open.1516Invoking this skill authorizes creating the issues it showed you and you17approved, with their labels, type, project fields, relations and milestone,18and creating the default labels `references/fields.md` names when the19repository defines none of its own. It never closes an issue, never deletes20one, and never edits an existing one, except to add a relation to a parent or21a blocker you named.2223## Steps24251. **Intake.** Turn the request into one goal sentence per issue, and say26 which sentence came from which part of the request. An issue whose goal27 sentence needs an "and" for two unrelated outcomes is too big: propose a28 parent plus sub-issues and ask once, listing the split you would make.29 Never invent an issue the request does not ask for.30312. **Read the repository, invent nothing.** Read its labels, issue types,32 milestones, project fields and issue templates, and pick the vocabulary,33 as `references/fields.md` says. Read the language of the last five issues34 with `gh issue list --limit 5 --json title,body --jq '[.[].title]'`.35363. **Ground the references.** Send the `exo:explorer` agent the paths and symbols the37 goal sentences name, so `References` carries real paths. Skip this step for38 an issue that names no code.39404. **Show the draft, then ask once.** Print, per issue: the title, the body,41 and one metadata line holding labels, type, parent, blocked-by, milestone42 and project fields. Ask one approval question covering all of them.43 Create nothing before the yes.44455. **Create in dependency order.** A parent before its children, a blocker46 before what it blocks, with the commands and field settings in47 `references/fields.md`.48496. **Read back.** `gh issue view <n> --json number,title,labels,milestone,url`50 per created issue, and report the URLs, plus everything Step 2 said this51 repository does not define.5253## The body5455Write it in the language of the existing issues. When there are none, follow56the language of the recent pull requests and commits57(`gh pr list --limit 5 --json title --jq '[.[].title]'`,58`git log -5 --format=%s`). The skill's own text stays English.5960Take the shape from `references/fields.md`: Spec for a brief or for feature61work, Report for a bug, a regression, a chore or a documentation fix. That62file holds both section lists, the ban on a background section and on63repeating the metadata, and how priority, size and estimate are read off the64body; no field and no section is decided here.6566## References6768| File | Read it when |69|---|---|70| `references/fields.md` | Steps 2 and 5, before reading the repository and before creating. |7172## Judgment7374- Explicit user instructions outrank this skill, including a body section it75 forbids: say once that the metadata already shows it, then write it.76- The repository's vocabulary outranks the request's wording: a label the77 user names that does not exist is reported, not created.78- A request to change or close an existing issue leaves this skill: report it79 and let the user run the `gh` command, except the parent or blocker80 relation the authorization above covers.81- Sizing belongs to the user. Propose a split once; a repeated request for one82 issue is the decision.