/sdlc:backlog-capture
Generated from solutions/ontological/skills/backlog-capture/SKILL.md.
Description
Section titled “Description”Capture a stray idea fast: interpret freeform text in-session into a concise
headline, an optional body, and inferred tags, then shell out to
sdlc backlog create (the deterministic tail) to land it on the rolling
backlog-capture PR. Invoked as /sdlc:backlog-capture <text>; --fast takes
a single silent shot with no clarifying question.
Allowed tools
Section titled “Allowed tools”Bash
Source
Section titled “Source”Usage:
/sdlc:backlog-capture <freeform text>— capture a stray idea quickly. The freeform text is everything after the skill name./sdlc:backlog-capture --fast <freeform text>— single silent shot: interpret and callcreateonce with no clarifying question.
You — the model already running this session — are the interpreter: read the freeform text, turn it
into structured fields in-session, and shell to the deterministic tail sdlc backlog create. The
tail does all the side effects (file write, schema validation, rolling-branch management,
commit/push, PR create-or-update) and prints a PR: <url> marker.
Interpret in-session and call create directly. Do NOT shell sdlc backlog capture or claude -p:
a head never nests Claude (S0004 / the ADR at docs/planning/decisions/sdlc-cli/;
surfaced by PR #150’s review).
Project context (don’t re-derive every run):
- The deterministic tail is
${CLAUDE_PLUGIN_ROOT}cli/sdlc backlog create— a Bun-run script. Its exact flag surface, thePR: <url>marker, the rolling-branch behavior, and exit codes are documented in${CLAUDE_PLUGIN_ROOT}cli/backlog_cli/README.md; that README is the source of truth for the tail, this skill only feeds it structured args. - Backlog docs land at
docs/planning/backlog/B-NNNN-<slug>.md(id minted by the tail; no date prefix) on the rollingbacklog-capturePR. Triage of captured items is a separate flow (/sdlc:backlog-triage) — out of scope here.
1. Interpret the freeform text into structured fields
Section titled “1. Interpret the freeform text into structured fields”Read the freeform argument text and derive, in-session:
--headline— a concise, one-line summary of the idea (this becomes the doc’s# <headline>and the slug source). Required. Tighten a rambling input into a crisp headline rather than echoing the first sentence. If the freeform text is too thin to derive a sensible headline, you MAY ask one brief clarifying question first — unless--fastwas passed, in which case do a single silent shot from whatever text you were given.--body— the remaining detail as freeform markdown, only when the input carries detail beyond the headline. Omit the flag for a one-liner.--tag— inferred from the content: one--tagper relevant theme (kebab-case, e.g.--tag docs --tag ci). Infer 0–3 tags; pass none when nothing clearly applies. Leave--statusand--slugto the tail’s defaults unless the user explicitly named one.
2. Shell out to sdlc backlog create
Section titled “2. Shell out to sdlc backlog create”Run the tail from the project root, passing the fields you derived. Quote every value; repeat
--tag per tag; omit optional flags you didn’t derive:
${CLAUDE_PLUGIN_ROOT}cli/sdlc backlog create \ --headline "<your concise headline>" \ [--body "<derived body>"] \ [--tag <tag1>] [--tag <tag2>] ...The tail validates the frontmatter, then submits per the project’s
backlog.capture policy (${CLAUDE_PLUGIN_ROOT}conventions/sdlc-yaml.md) — read
deterministically inside the tail, so this skill passes no policy flags:
enabled: true(default) — commit + push + open-or-update a PR.pr_grouping: per-project(default) appends to the rollingbacklog-capturePR (or starts a fresh branch offmainwhen none is open);per-itemopens onebacklog/<slug>PR per item.enabled: false— author the file in the working tree and stop (no commit, push, or PR).
3. Report the result to the user
Section titled “3. Report the result to the user”On success the tail prints exactly one marker line:
PR: <url>— the item was submitted; report the URL (e.g. “Captured on the backlog PR:”). WROTE: <path>—backlog.capture.enabled: false; report that the file was authored locally at<path>and is left for the user to submit by hand.
If the tail exits non-zero, surface its stderr verbatim so the user can see why
(e.g. a bad slug, a schema-validation failure, or a gh/git error).
- This skill is a thin in-session head over
sdlc backlog create; all side-effect logic (file write, validation, branch management, PR create-or-update, thePR: <url>marker) lives in the tail. - Committing model-generated messages. The tail handles its own commit
(
docs(backlog): capture <slug>) viagit commit -Fper${CLAUDE_PLUGIN_ROOT}conventions/commit-messages.md— this skill commits nothing itself. bunmust be onPATH— the tail is a Bun-run script (see${CLAUDE_PLUGIN_ROOT}conventions/typescript-runtime.md).