From spine
Captures completed fixes, features, architecture decisions, and plans as structured Obsidian Markdown docs in Spine vault. Auto-detects repo, feature, and type from git log/diff/context; supports --batch mode.
npx claudepluginhub nodewarrior/spine --plugin spineThis skill uses the workspace's default tool permissions.
Capture completed work into the Spine Architecture vault.
Manages Obsidian vault as developer knowledge base: create/search/update notes with standard frontmatter, organize by projects/technologies/Claude Code, auto-capture commits/tasks/components.
Saves Claude Code session context to Obsidian vault as structured Markdown notes in categories like session-log, decision, troubleshooting. Extracts summary, decisions, file changes, next steps, links related docs via grep, and git commits.
Audits Spine Architecture Obsidian vault for coverage gaps via git history, stale docs, duplicates, spine note integrity, tag consistency, and Claude memory sync. Maintains vault hygiene.
Share bugs, ideas, or general feedback.
Capture completed work into the Spine Architecture vault.
Resolve the vault path using this config chain:
$SPINE_VAULT_PATH environment variable~/.spine/config.json → read the vaultPath field~/Documents/SpineVault/If the vault doesn't exist, tell the user to run /spine-init first.
| Prefix | Tag | When to use |
|---|---|---|
Fix - {description} | type/fix | Bug fix — include root cause and code snippets |
Feature - {description} | type/feature | New functionality |
Architecture - {description} | type/architecture | Design doc, API structure, data flow |
Plan - {description} | type/plan | Implementation plan |
Decision - {description} | type/decision | Decision record with context and trade-offs |
Date prefixes: Add YYYY-MM-DD prefix on Fix and Feature docs only. No date prefix on Architecture, Plan, or Decision docs.
If $ARGUMENTS is provided, use that as the description. Otherwise:
git log --oneline -10 and git diff main...HEAD --stat to see recent workRepo: Detect from the git remote:
basename "$(git remote get-url origin 2>/dev/null)" .git
Fall back to the current directory name if no git remote.
Feature: Read existing spine notes at {vault}/{repo}/ to find matching features. Match by:
---
title: "{Type} - {Description}"
date: {YYYY-MM-DD}
tags:
- {repo}
- {feature-kebab-case}
- type/{type}
severity: {sev1|sev2|sev3} (fixes only)
status: {resolved|in-progress|pending}
---
# {Type} - {Description}
> [!bug|note|tip] {One-line summary}
> {2-3 sentence description of what happened / what was built}
**Files changed:** {list of key files}
---
## {Root Cause / Problem / Motivation}
{Detailed explanation with code snippets where helpful}
---
## {Fix / Implementation / Design}
{What was done, with code snippets showing before/after or key patterns}
---
## See Also
- [[{related spine doc 1}]]
- [[{related spine doc 2}]]
Guidelines:
> [!bug], > [!note], > [!warning], > [!tip])Show the user:
Ask: "Does this look right? Any changes before I save?"
After user approval:
{vault}/{repo}/{feature}/{filename}.md[[wikilink]] to the new doc under the appropriate section (Fixes, Features, Architecture, Plans, Decisions)After saving, quickly scan the feature's existing docs:
Report findings briefly — don't act without user approval.
After completing a capture (single or batch), emit a structured observation block.
spine_capture_result:
status: success | partial | skipped | error
summary: "Captured 2 docs (1 fix, 1 feature) into auth feature"
saved:
- { file: "2026-05-03 Fix - Login Race.md", feature: "auth", type: "fix", spine_updated: true }
- { file: "Feature - OAuth Flow.md", feature: "auth", type: "feature", spine_updated: true }
skipped: []
patterns_detected:
- { type: "recurring-fixes", feature: "auth", count: 4, suggestion: "consider architecture doc" }
next_actions:
- { action: "open Obsidian", path: "{vault}/spine/auth/" }
- { action: "review pattern", detail: "4 fixes in auth — architecture doc recommended" }
recovery_hint: null
Status values:
success — all docs saved and spine notes updatedpartial — some docs saved, some skipped or erroredskipped — user skipped all docs (batch mode)error — capture failed (vault missing, write error) — include recovery_hintCross-skill input: In batch mode, check for {vault}/.spine/scan-gaps.json first. If present, use it to pre-populate feature groups and file lists instead of re-scanning git history. Do not delete the file here — cleanup happens in Batch Step 6 after all save/skip decisions are finalized.
--batch)When invoked with $ARGUMENTS equal to --batch, switch to batch capture mode. This is typically triggered automatically by the Stop hook at session end.
Before proceeding, check if Tier 3 is enabled:
~/.spine/config.jsontier3 fieldtier3 is false or missing, skip silently — batch mode requires Tier 3.{vault}/.spine/scan-gaps.json (written by /spine-scan's output contract). If present, use it as the primary source for feature groups and file lists — skip re-scanning git history for those gaps. Do NOT delete this file yet — defer cleanup to Batch Step 6.{vault}/.spine/pending-commits.json{vault}/.spine/pending-commits.fallback.*.json sidecar files (written by the bash fallback when no JSON parser was available). If any exist, merge their commits arrays into the main pending data, then delete the sidecar files.🦴 Spine: No pending commits to capture. Session clean.
Then exit — do not proceed.files array{vault}/{repo}/{hash} ({message}) touches {files}. Which feature does this belong to? (or type a new feature name)"For each feature group:
git diff {hash}~1 {hash} -- {files}
Show the user all drafted docs at once:
🦴 Spine: You had {N} significant commits this session:
[1] {Type} - {Description} ({Feature})
→ {N} commits consolidated
Preview: {first 3 lines of the doc body}
[2] {Type} - {Description} ({Feature})
→ {N} commits
Preview: {first 3 lines of the doc body}
For each: (S)ave, (E)dit, or S(k)ip?
Process each doc based on user choice:
For each approved doc:
{vault}/{repo}/{feature}/{filename}.md[[wikilink]] under the appropriate section{vault}/.spine/curator-log.md:
## {YYYY-MM-DD} — Batch Capture
- **Saved:** `{filename}` (approved)
{vault}/.spine/pending-commits.json{vault}/.spine/scan-gaps.json now that all save/skip decisions are finalizedPrint a final summary:
🦴 Spine: {N} docs saved, {N} skipped. Vault updated.