mcpbeat

Deferred Capture

athola/deferred-capture

Defines the contract for deferred-item capture across plugins. Use when building or validating a plugin's deferred-capture wrapper or adding source labels.

1k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
324
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/athola/claude-night-market --skill deferred-capture

The instruction itself

14 sections, as written by the author

Deferred Capture Contract

When To Use

  • Building a new plugin deferred-capture wrapper
  • Validating an existing wrapper against the contract
  • Adding new source labels or template fields

When NOT To Use

  • Capturing a deferred item at runtime (use the plugin

wrapper directly, e.g. scripts/deferred_capture.py)

  • Creating GitHub issues manually

Specification that all plugin deferred-capture wrappers implement.

Not a runtime dependency, just a convention.

CLI Interface

Required arguments:

  • --title (str): Concise description. Becomes issue title

after [Deferred] prefix

  • --source (str): Origin skill. One of: war-room, brainstorm,

scope-guard, feature-review, review, regression, egregore

  • --context (str): Why raised and why deferred

Optional arguments:

  • --labels (str): Comma-separated additional labels beyond

deferred and source

  • --session-id (str): Session ID. Canonical source:

session_id from the hook payload stdin

(jq -r '.session_id'), fallback: UTC timestamp

YYYYMMDD-HHMMSS

  • --artifact-path (str): Absolute path or $HOME-based

path to source artifact

  • --captured-by (str): explicit (default) or safety-net
  • --dry-run (flag): Print JSON output without creating issue

Issue Template

Title: [Deferred] <title>

Labels: deferred and <source>

Body:

Deferred Item

Source: <source> (session <session-id>)

Captured: <YYYY-MM-DD>

Branch: <current git branch>

Captured by: <explicit|safety-net>

Context

<context argument verbatim>

Original Artifact

<artifact-path if provided, otherwise "N/A">

Next Steps

  • [ ] Evaluate feasibility in a future cycle
  • [ ] Link to related work if applicable

Label Taxonomy

| Label | Color | Purpose |

|-------|-------|---------|

| deferred | #7B61FF | Universal query handle |

| war-room | #B60205 | Source: war-room deliberation |

| brainstorm | #1D76DB | Source: brainstorming session |

| scope-guard | #FBCA04 | Source: scope-guard deferral |

| feature-review | #F9A825 | Source: feature-review |

| review | #0E8A16 | Source: code/PR review |

| regression | #D73A4A | Source: skill regression |

| egregore | #5319E7 | Source: autonomous agent |

Duplicate Detection

Search: `gh issue list --search "<title> in:title"

--state open --json number,title`

Compare: exact title match after stripping [Deferred]

prefix and normalizing to lowercase.

Only open issues are checked. Re-filing a closed deferred

item is intentional.

Output (JSON to stdout)

Created: {"status": "created", "issue_url": "...", "number": 42}

Duplicate: {"status": "duplicate", "existing_url": "...", "number": 17}

Error: {"status": "error", "message": "..."}

Compliance Test

Any wrapper can verify conformance with:

python3 scripts/deferred_capture.py \

--title "Test: compliance check" \

--source test \

--context "Automated compliance verification" \

--dry-run

Must output valid JSON with a status field.

Exit Criteria

  • [ ] Compliance test passes: deferred_capture.py --dry-run outputs

valid JSON with a status field (created, duplicate, or

error) for any conformant wrapper

  • [ ] Created issues have title prefixed [Deferred], carry both

the deferred label and the source label, and body matches the

required template (Source, Captured, Branch, Captured by,

Context, Original Artifact, Next Steps)

  • [ ] Duplicate detection runs before creation: `gh issue list

--search "<title> in:title"` called and exact match (after

stripping prefix and lowercasing) suppresses the new issue

  • [ ] JSON written to stdout on every invocation; `{"status":

"created", "issue_url": "...", "number": N}` on success,

{"status": "duplicate", ...} on duplicate, `{"status":

"error", "message": "..."}` on failure

How to use it

Copy the folder

Take athola/deferred-capture from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.