| name | pnote |
| description | pnote - The PromptNote CLI for managing prompts, notes, and snippets |
| allowed-tools | Bash(pnote *), mcp__promptnote__check_pin_status, mcp__promptnote__create_note, mcp__promptnote__create_snippet, mcp__promptnote__delete_note, mcp__promptnote__get_note, mcp__promptnote__get_shared_tag_notes, mcp__promptnote__get_snippet, mcp__promptnote__list_notes, mcp__promptnote__list_protected_notes, mcp__promptnote__list_shared_notes, mcp__promptnote__list_shared_tags, mcp__promptnote__list_snippets, mcp__promptnote__list_tags, mcp__promptnote__merge_tags, mcp__promptnote__rename_tag, mcp__promptnote__search, mcp__promptnote__toggle_favorite, mcp__promptnote__update_note, mcp__promptnote__update_snippet |
| user-invocable | true |
| argument-hint | <command> [options] |
| updated | 2026-03-22 |
pnote — PromptNote CLI
Manage prompts, notes, and snippets from the terminal or as an AI agent.
Tool preference: Use pnote CLI (Bash) for all operations — it's faster, token-efficient, and composable with grep, jq, pipes. Use mcp__promptnote__* tools as fallback when: (1) pnote is not installed, (2) accessing PIN-protected notes and PNOTE_PIN env is not set (MCP handles PIN transparently via its own config).
Install: npm install -g pnote
Auth: pnote auth token <your-pat> (get PAT from PromptNote web app → Settings → API Tokens)
Global Flags (apply to all commands)
| Flag | Description |
|---|
--json | Output as JSON (for scripting / jq) |
--plain | Plain text, no color/formatting |
--no-color | Disable color only |
-p, --pin <pin> | PIN for protected notes (avoid: visible in shell history) |
--pin-stdin | Read PIN from first line of stdin |
-V, --version | Show version |
Auth
pnote auth login
pnote auth token <pat>
pnote auth whoami
pnote auth logout
Notes
pnote notes
pnote notes --tag "AI/art"
pnote notes --archived
pnote notes --pinned
pnote notes --deleted
pnote notes --protected
pnote notes --search "query"
pnote notes --limit 20
pnote notes get <id>
pnote notes get <id> --latest
pnote notes create "Title"
pnote notes create "Title" --tags AI/art work
pnote notes create "Title" --content "..."
pnote notes update <id> --title "New"
pnote notes update <id> --tags AI work
pnote notes archive <id>
pnote notes archive <id> --undo
pnote notes pin <id>
pnote notes delete <id>
pnote notes delete <id> --force
Snippets (prompt versions)
pnote notes snippet <note-id>
pnote notes snippet list <note-id>
pnote notes snippet copy <note-id>
pnote notes snippet copy <note-id> --version 2
pnote notes snippet add <note-id>
pnote notes snippet update <snippet-id>
pnote notes snippet favorite <snippet-id>
stdin examples:
echo "My prompt text" | pnote notes snippet add <note-id>
cat prompt.txt | pnote notes snippet add <note-id>
pbpaste | pnote notes snippet add <note-id>
Tags
pnote tags
pnote tags --include-archived
pnote tags rename "old" "new"
pnote tags merge "AI" "ML" --into "AI/ML"
Tags are hierarchical: AI/art/portrait — filtering by AI matches all children.
Search
pnote search "query"
pnote search "query" --notes-only
pnote search "query" --snippets-only
pnote search "query" --limit 10
Share
pnote share tags
pnote share tags <shared-tag-id>
pnote share notes
pnote share notes --include-revoked
PIN Protection
Protected notes encrypt content server-side. PIN is set in PromptNote app → Settings.
PIN resolution order (CLI):
-p <pin> flag — direct (⚠️ visible in shell history)
--pin-stdin — first line of stdin
PNOTE_PIN env var — recommended for agents and automation
- Session cache — 5-min TTL in
$TMPDIR/pnote-pin-<uid>
- Interactive prompt — TTY only; 3 attempts; hidden input
- Fails gracefully — error: "PIN required but not provided. Use -p or set PNOTE_PIN environment variable."
In agent/non-TTY context — step 5 is skipped. Always use PNOTE_PIN:
PNOTE_PIN=1234 pnote notes --protected
PNOTE_PIN=1234 pnote notes get <protected-note-id>
echo "1234" | pnote notes get <id> --pin-stdin
Check PIN status:
pnote pin status
pnote pin list
MCP fallback for PIN: If MCP tools are configured with PROMPTNOTE_PIN in claude_desktop_config.json, use mcp__promptnote__* tools instead — PIN is handled transparently.
Agent Skills Sync
Notes with note_type=skill and title skill-name/filename.md are agent skill files.
pnote skills
pnote skills pull
pnote skills pull <name>
pnote skills pull --project
pnote skills pull --project <name>
pnote skills pull --dry-run
pnote skills push <dir>
Scope behaviour:
- Global (default): writes to
~/.agents/skills/<name>/, symlinks into ~/.claude/skills/, ~/.windsurf/skills/, ~/.augment/skills/ etc. for every agent installed on the system. Layout matches npx skills exactly — the two coexist without conflict.
- Project (
--project): same layout but relative to cwd (.agents/skills/, .claude/skills/, etc.). Use when skills should be scoped to a single project.
- Custom (
--dir <path>): writes files directly to <path>/<name>/, no symlinks. For manual control.
Scripting & Composability
The CLI's advantage over MCP: composable with Unix tools.
pnote notes --tag "AI" --json | jq '.[].id'
pnote notes --pinned --json | jq '.[] | select(.title | test("GPT"))'
pnote search "prompt" --json | jq -r '.notes[0].id' | xargs pnote notes get
pnote pin list --json | jq -r '.[0].id' | xargs -I{} bash -c 'PNOTE_PIN=1234 pnote notes snippet {}'
for id in abc123 def456; do echo "updated content" | pnote notes snippet add $id; done
Execute
Run the user's pnote command:
pnote $ARGUMENTS