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.
npx skills add https://github.com/athola/claude-night-market --skill deferred-capture
wrapper directly, e.g. scripts/deferred_capture.py)
Specification that all plugin deferred-capture wrappers implement.
Not a runtime dependency, just a convention.
Required arguments:
--title (str): Concise description. Becomes issue titleafter [Deferred] prefix
--source (str): Origin skill. One of: war-room, brainstorm,scope-guard, feature-review, review, regression, egregore
--context (str): Why raised and why deferredOptional arguments:
--labels (str): Comma-separated additional labels beyonddeferred 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-basedpath to source artifact
--captured-by (str): explicit (default) or safety-net--dry-run (flag): Print JSON output without creating issueTitle: [Deferred] <title>
Labels: deferred and <source>
Body:
Source: <source> (session <session-id>)
Captured: <YYYY-MM-DD>
Branch: <current git branch>
Captured by: <explicit|safety-net>
<context argument verbatim>
<artifact-path if provided, otherwise "N/A">
| 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 |
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.
Created: {"status": "created", "issue_url": "...", "number": 42}
Duplicate: {"status": "duplicate", "existing_url": "...", "number": 17}
Error: {"status": "error", "message": "..."}
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.
deferred_capture.py --dry-run outputsvalid JSON with a status field (created, duplicate, or
error) for any conformant wrapper
[Deferred], carry boththe deferred label and the source label, and body matches the
required template (Source, Captured, Branch, Captured by,
Context, Original Artifact, Next Steps)
--search "<title> in:title"` called and exact match (after
stripping prefix and lowercasing) suppresses the new issue
"created", "issue_url": "...", "number": N}` on success,
{"status": "duplicate", ...} on duplicate, `{"status":
"error", "message": "..."}` on failure
Take athola/deferred-capture from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
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.