From dstoic
Pin session decisions, questions, objections, scope constraints, and corrections to a persistent board that survives context compaction. Use PROACTIVELY when: (1) user approves/rejects a recommendation, (2) user asks a clarifying question about a proposal, (3) user states a scope constraint, (4) user corrects a misunderstanding. Also use when user says "pin", "track this", "mark as approved", "board", "show pins". This skill should be auto-invoked by the model without user asking — whenever a decision, question, or constraint is detected in conversation, pin it immediately after responding.
npx claudepluginhub digital-stoic-org/agent-skills --plugin dstoicThis skill is limited to using the following tools:
Persist decisions, questions, constraints, and corrections to a JSON file that survives context compaction. A companion hook injects the board into every tool call so the model never forgets.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Persist decisions, questions, constraints, and corrections to a JSON file that survives context compaction. A companion hook injects the board into every tool call so the model never forgets.
After responding to any user message where a decision was made, a question was asked about a proposal, or a constraint was stated, IMMEDIATELY invoke /pin with the appropriate category. Do not ask permission — just pin it.
Examples of auto-invoke triggers:
/pin ✅ use bun/pin ❓ split services — latency impact?/pin ❌ auth layer — skip for MVP/pin 📌 MVP only, max 3 files/pin 🔧 target = artisans, not developersDo NOT pin:
| Command | Action |
|---|---|
/pin ✅ <text> | Pin approved item |
/pin ❓ <text> | Pin pending question |
/pin ❌ <text> | Pin killed/rejected item |
/pin 📌 <text> | Pin scope constraint |
/pin 🔧 <text> | Pin correction |
/pin show or /pin | Display current board |
/pin rm <n> | Remove pin by number |
/pin clear | Clear all pins |
/pin clear triage | Clear ✅/❓ only, keep 📌/❌/🔧 |
Path: /home/mat/dev/praxis/.session-logs/<slug>/pins.json
Derive slug from CWD:
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
REL_PATH="${PWD#$GIT_ROOT/}"
SLUG=$(echo "$REL_PATH" | tr '/' '-')
PINS_DIR="/home/mat/dev/praxis/.session-logs/$SLUG"
PINS_FILE="$PINS_DIR/pins.json"
Schema:
{
"items": [
{
"id": 1,
"type": "approved",
"emoji": "✅",
"content": "use bun everywhere",
"detail": "",
"ts": "2026-04-01T14:30:00Z"
}
],
"next_id": 2
}
Type mapping: ✅=approved, ❓=pending, ❌=killed, 📌=scope, 🔧=correction
/pin <emoji> <text>)Parse the emoji prefix to determine type. Text after emoji is content. If text contains —, split into content and detail.
PINS_FILE path (see State File above)mkdir -p the directory{"items":[],"next_id":1}⚠️ Already pinned. and stopid=next_id, increment next_id📌 Pinned #N: <emoji> <content> — one line only, then resume prior work/pin show or /pin)PINS_FILE📋 Pin board is empty.📋 Pin Board (5 items)
1. ✅ use bun everywhere (minor: keep fallback for CI)
2. ✅ split the PR into 2
3. ❓ split services — latency impact?
4. ❌ auth rewrite — out of MVP scope
5. 📌 MVP only, max 3 files
/pin rm <n>)If no number: ⚠️ Usage: /pin rm <number>
PINS_FILE, find item with id === n⚠️ Pin #N not found.🗑️ Pin #N removed./pin clear){"items":[],"next_id":<keep current next_id>}🗑️ Pin board cleared./pin clear triage)approved or pendingkilled, scope, or correction🗑️ Triage cleared. <N> pins remaining.next_id always increments, never reuses.