Skip to content

/sdlc:backlog-capture

Generated from solutions/ontological/skills/backlog-capture/SKILL.md.

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.

  • Bash

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 call create once 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, the PR: <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 rolling backlog-capture PR. 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 --fast was 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 --tag per relevant theme (kebab-case, e.g. --tag docs --tag ci). Infer 0–3 tags; pass none when nothing clearly applies. Leave --status and --slug to the tail’s defaults unless the user explicitly named one.

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:

Terminal window
${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 rolling backlog-capture PR (or starts a fresh branch off main when none is open); per-item opens one backlog/<slug> PR per item.
  • enabled: false — author the file in the working tree and stop (no commit, push, or PR).

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, the PR: <url> marker) lives in the tail.
  • Committing model-generated messages. The tail handles its own commit (docs(backlog): capture <slug>) via git commit -F per ${CLAUDE_PLUGIN_ROOT}conventions/commit-messages.md — this skill commits nothing itself.
  • bun must be on PATH — the tail is a Bun-run script (see ${CLAUDE_PLUGIN_ROOT}conventions/typescript-runtime.md).