From pbr
Captures ideas as timestamped Markdown notes in .planning/notes or ~/.claude/notes. Append text, list notes, promote indexed note to todo via /note.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pbr:noteThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**STOP — DO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by Claude Code's plugin system. Using the Read tool on this SKILL.md file wastes ~7,600 tokens. Begin executing Step 1 immediately.**
STOP — DO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by Claude Code's plugin system. Using the Read tool on this SKILL.md file wastes ~7,600 tokens. Begin executing Step 1 immediately.
Before ANY tool calls, display this banner:
╔══════════════════════════════════════════════════════════════╗
║ PLAN-BUILD-RUN ► NOTE ║
╚══════════════════════════════════════════════════════════════╝
Then proceed to Step 1.
You are running the note skill. Your job is zero-friction idea capture. One Write call, one confirmation line. No questions, no prompts.
This skill runs inline — no Task, no AskUserQuestion, no Bash.
Notes are stored as individual markdown files in a notes directory:
.planning/notes/{YYYY-MM-DD}-{slug}.md — used when .planning/ directory exists in cwd~/.claude/notes/{YYYY-MM-DD}-{slug}.md — used as fallback when no .planning/, or when --global flag is presentEach note file has this format:
---
date: "YYYY-MM-DD HH:mm"
promoted: false
---
{note text verbatim}
--global flag: Strip --global from anywhere in $ARGUMENTS before parsing. When present, force global scope regardless of whether .planning/ exists.
Important: Do NOT create .planning/ if it doesn't exist. If there's no .planning/ directory, fall back to global scope silently.
Parse $ARGUMENTS after stripping --global:
| Condition | Subcommand |
|---|---|
Arguments are exactly list (case-insensitive) | list |
Arguments are exactly promote <N> where N is a number | promote |
| Arguments are empty (no text at all) | list |
| Anything else | append (the text IS the note) |
Critical: list is only a subcommand when it's the ENTIRE argument. /pbr:note list of groceries saves a note with text "list of groceries". Same for promote — only a subcommand when followed by exactly one number.
Create a timestamped note file in the target directory.
.planning/notes/ or ~/.claude/notes/){YYYY-MM-DD}-{slug}.md
-2, -3, etc.Noted ({scope}): {note text}
{scope} is "project" or "global"YYYY-MM-DD HH:mm (24-hour, no seconds)Show notes from both project and global scopes.
.planning/notes/*.md (if directory exists) — these are "project" notes~/.claude/notes/*.md (if directory exists) — these are "global" notesdate and promoted statuspromoted: true from active counts (but still show them, dimmed)Notes:
Project (.planning/notes/):
1. [2026-02-08 14:32] refactor the hook system to support async validators
2. [promoted] [2026-02-08 14:40] add rate limiting to the API endpoints
3. [2026-02-08 15:10] consider adding a --dry-run flag to build
Global (~/.claude/notes/):
4. [2026-02-08 10:00] cross-project idea about shared config
{count} active note(s). Use `/pbr:note promote <N>` to convert to a todo.
If a scope has no directory or no entries, show: (no notes)
Convert a note into a todo file.
.planning/ directory — if it doesn't exist, warn: "Todos require a Plan-Build-Run project. Run /pbr:begin to initialize one, or use /pbr:todo add in an existing project.".planning/todos/pending/ directory exists{NNN}-{slug} where NNN is the next sequential number (scan both .planning/todos/pending/ and .planning/todos/done/ for the highest existing number, increment by 1, zero-pad to 3 digits) and slug is the first ~4 meaningful words of the note text, lowercase, hyphen-separated.planning/todos/pending/{id}.md:---
title: "{note text}"
status: pending
priority: P2
source: "promoted from /pbr:note"
created: {YYYY-MM-DD}
theme: general
---
## Goal
{note text}
## Context
Promoted from quick note captured on {original date}.
## Acceptance Criteria
- [ ] {primary criterion derived from note text}
promoted: truePromoted note {N} to todo {id}: {note text}/pbr:note list of things → saves note "list of things" (subcommand only when list is the entire arg).planning/: Falls back to global ~/.claude/notes/ — works in any directory.planning/, suggests /pbr:beginlist shows last 10 when >20 active entries-2, -3 etc. to filename if slug already used on same date--global position: Stripped from anywhere — --global my idea and my idea --global both save "my idea" globallylist subcommandIf the Write tool fails (permissions, disk full, etc.), display:
╔══════════════════════════════════════════════════════════════╗
║ ERROR ║
╚══════════════════════════════════════════════════════════════╝
Failed to write note to {target_file}.
**To fix:** Check file permissions or disk space.
If the specified note index is invalid, display:
╔══════════════════════════════════════════════════════════════╗
║ ERROR ║
╚══════════════════════════════════════════════════════════════╝
Note {N} not found. Valid range: 1-{max}.
**To fix:** Run `/pbr:note list` to see available notes.
.planning/ if it doesn't exist — fall back to globalnpx claudepluginhub sienklogic/plan-build-runCreates dated Markdown notes with YAML frontmatter, tags, summaries, and references in .claude/data/notes/ for secondbrain. Activates on 'create note', 'capture thought', 'save this', etc.
Captures ideas and brain dumps into an Obsidian Inbox, surfaces buried ideas from the vault, and promotes daily note ideas to permanent notes.
Captures lightweight short-form notes (observations, insights, strategy snippets) to `meta/notes/` with optional tags and artifact linkage. Use when you want to quickly jot something down.