Skip to content
Agentmart
Submit a tool

capture-followup

Capture follow-up work discovered during backlog delivery — deferred tasks, out-of-scope findings, doc drift, split-off scope, waived acceptance criteria —…

Skill by Ryuking1228

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/ryuking1228-capture-followup

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Capture follow-up work discovered during backlog delivery — deferred tasks, out-of-scope findings, doc drift, split-off scope, waived acceptance criteria — into a reviewable local queue, then register the approved entries as tracker Issues linked to the in-flight Sub-Epic / Epic and appended to backlog-manifest.json, so deferred work enters the /architect:deliver-backlog loop as status::todo instead of dying in prose. /architect:capture-followup [title] [--parent=<local_id|#iid>] [--from=<file|issue-ref>] [--queue-only] [--flush] [--dry-run] [--auto] [--lang=en|ja]. With a title/--from, appends to the queue (and offers a flush); --queue-only stops after the append (the form the feeder skills use mid-run); --flush (or no args with a non-empty queue) reviews the queue and creates the Issues after an approval gate. Only runs when explicitly invoked.

Use cases: documents, productivity

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/capture-followup

What's inside

Skill name
capture-followup
Description
Capture follow-up work discovered during backlog delivery — deferred tasks, out-of-scope findings, doc drift, split-off scope, waived acceptance criteria — into a reviewable local queue, then register the approved entries as tracker Issues linked to the in-flight Sub-Epic / Epic and appended to backlog-manifest.json, so deferred work enters the /architect:deliver-backlog loop as status::todo instead of dying in prose. /architect:capture-followup [title] [--parent=<local_id|#iid>] [--from=<file|issue-ref>] [--queue-only] [--flush] [--dry-run] [--auto] [--lang=en|ja]. With a title/--from, appends to the queue (and offers a flush); --queue-only stops after the append (the form the feeder skills use mid-run); --flush (or no args with a non-empty queue) reviews the queue and creates the Issues after an approval gate. Only runs when explicitly invoked.
License
MIT
Instructions
246 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Agent Skills spec issues

  • name: missing

Files (2)

  • SKILL.md
  • followup-contract.test.py

SKILL.md (first lines)

# Follow-up Capture (Deferred Work → Backlog)

## Desired Outcome

Work discovered mid-delivery that cannot be done now stops disappearing into comments and review
prose. Instead it flows through three states, each durable:

- **Queued.** A `reports/backlog/followup-queue.md` entry records the task, its proposed parent,
  and where it was discovered — appendable at any point during `/architect:implement-backlog`,
  `/architect:review-issue`, or `/architect:merge-issue` without a remote write or an approval
  interruption.
- **Created.** After an explicit approval gate, each queued entry becomes a tracker Issue
  (`glab` / `gh`) labeled `status::todo`, linked to its parent Sub-Epic (or, explicitly, Epic),
  and appended to `reports/backlog/backlog-manifest.json` as a node the rest of the backlog
  family understands.
- **Delivered.** The new Issues are ordinary backlog Issues: `/architect:deliver-backlog` picks
  them up as `status::todo` with no special handling.

Runs against the **target project** (the one holding `reports/backlog/backlog-manifest.json` and
the tracked repository). It never edits ai-dev-loop itself.

## Decision Criteria

- **Parent selection precedence** — (1) `--parent=<local_id|#iid>` always wins. (2) Otherwise
  default to the parent Sub-Epic of the Issue currently in flight: the single `status::doing`
  Issue, resolved from the manifest's `impl.status` — when the tracker label and `impl.status`
  disagree, the tracker wins (same rule as `/architect:deliver-backlog`). (3) When zero or
  multiple Issues are `doing`, ask via AskUserQuestion. **Epic-direct attachment is allowed only
  explicitly** (`--parent=E<n>` or chosen in the dialog) — a cross-cutting follow-up may
  legitimately have no Sub-Epic home, but the default never silently picks the Epic.
- **Queue vs create** — Feeder skills always append with `--queue-only`; remote creation happens
  only past the Step 3 gate. Never create an Issue the user has not approved (unless `--auto`).
- **Fabrication ban** — The Issue body derives from the recorded finding (the queue entry, the
  `--from` source, or the user's words). Do not invent acceptance criteria, endpoints, or
  numbers; a follow-up whose "done" condition is unknown gets a single criterion restating the
  finding to resolve, marked `TBD`.
- **Follow-ups are not an escape hatch** — A `[B]` blocker, a failing preflight check, or an
  unmet criterion needed for the *current* Issue's merge is handled by the owning skill's own
  loop; only genuinely deferrable work belongs here.

## Prerequisites

| File / source | Required/Recommended | Produced by |
|---------------|----------------------|-------------|
| `reports/backlog/backlog-manifest.json` | Required | /architect:export-backlog |
| `glab` / `gh` authenticated for the target project | Required (flush only) | user |
| `reports/backlog/followup-queue.md` | Optional (created on first capture) | this skill + feeder skills |

Read the output language from `work/pipeline-progress.json` (`options.output_language`, default
`en`); `--lang` overrides. Queue entries, Issue titles/bodies, and reports use that language;
label keys, local IDs, and traceability IDs stay in English.

## Follow-up ID & Manifest Contract

Follow-up Issues live in their **own local-ID namespace** so they can never collide with the
positional IDs `/architect:export-backlog` synthesizes from reports:

- **Format**: `<parent_local_id>.F<n>` — e.g. `SE1.2` → `I1.2.F1`, `I1.2.F2`; an Epic-direct
  follow-up under `E1` is `I1.F1`. The `I` prefix marks the level (always `issue`); the `F<n>`
  suffix marks the namespace.
- **Allocation at create time** (Step 4, not at queueing): `n` = max existing `F` index among the
  parent's children in the manifest, plus 1. Queued-but-not-created entries reserve nothing, so
  dropping one leaves no gap.
- **Collision rule** — `export-backlog --update` re-synthesizes only positional IDs
  (`I1.2.1 … I1.2.n`); it must never assign, renumber, or reassign a `*.F<n>` node or any node
  carrying `origin` (stated on its side too). The two namespaces are disjoint by construction.

The manifest node uses the exact shape `export-backlog` defines, plus one new field, `origin`:

```json
{
  "local_id": "I1.2.F1",
  "level": "issue",
  "title": "Extract retry policy into shared config",
  "body": "## How\n…\n## Acceptance Criteria\n- [ ] …\n## References\n…",
  "labels": ["type:issue", "status::todo", "followup", "domain:payments"],
  "parent_local_id": "SE1.2",
  "source_reports": ["reports/backlog/impl-log/I1.2.3.md"],
  "traceability": ["NFR-03"],
  "origin": {
    "discovered_in": "I1.2.3",
    "source": "implement",
    "reference": "reports/backlog/impl-log/I1.2.3.md#finding-2",
    "queued_at": "2026-08-06T02:00:00Z"
  },
  "remote": { "id": 401, "iid": 57, "url": "…", "created_at": "…" }
}
```

- `origin.source` ∈ `implement | review | merge | manual`; `origin.discovered_in` is the local ID
  (or `#<iid>`) of the item being worked when the task surfaced; `origin.reference` points at the
  recorded finding (impl-log anchor, review doc, comment URL).
- `labels` is the **creation seed, not live state** (the standing manifest rule): seeded with
  `type:issue` (GitLab fallback: `type::issue`), `status::todo`, `followup`, and the `domain:` /
  `tier:` labels inherited from the parent Sub-Epic. Status advances on the tracker and in
  `impl.status`, never here.
- The node is appended to the manifest **immediately after each successful create**, with
  `remote` filled in, so an interrupted flush resumes cleanly.

This contract is asserted as behaviour by `skills/capture-followup/followup-contract.test.py`
(F-index allocation, namespace disjointness, node shape, parent resolution) — run it after
changing this section.

## Queue File Contract

`reports/backlog/followup-queue.md` — markdown (not JSON) so the user can hand-edit entries
before a flush. Created on first capture with the required YAML frontmatter (`title`,
`schema_version: 1`, `phase`, `skill: capture-followup`, `generated_at`, `input_files`). One
section per entry:

```markdown
## FQ-3: Extract retry policy into shared config

- status: queued            <!-- queued | created | dropped -->
- proposed_parent: SE1.2
- origin: implement · I1.2.3 · reports/backlog/impl-log/I1.2.3.md#finding-2
- queued_at: 2026-08-06T02:00:00Z

### Draft body

From Ryuking1228/ai-dev-codex-version, MIT.

More from Ryuking1228/ai-dev-codex-version

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Sep 29, 2026 (29 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Ryuking1228

Cite this page

capture-followup skill. Agent Mart. https://agentmart.dev/skills/ryuking1228-capture-followup (last updated 2026-10-24)