| name | notes |
| description | Use the notes CLI to create, list, read, append to, update, annotate, and delete notes in a date-based markdown archive — including daily todos with task rollover and tag operations across the store. |
Notes Skill
Use the notes CLI for all note operations. All commands respect $NOTES_PATH or --path (one MUST be set; there is no implicit default).
Basics
- Location:
$NOTES_PATH (or --path); no default — the CLI exits with an error if neither is set.
- Directory pattern:
YYYY/MM/YYYYMMDD_ID[_slug][.type].md
- UID:
YYYYMMDD_ID uniquely identifies each note. ID is a small integer that is unique within a day.
- Type-bearing notes (
todo, backlog, weekly) embed the type as a dot-suffix in the filename, e.g. 20260102_8814.todo.md. Other types live in the frontmatter only.
The authoritative frontmatter schema is SCHEMA.md in the repository. Reserved keys: title, slug, type, date, tags, aliases, description, public. Unknown keys are preserved verbatim.
Frontmatter Guidelines
- Include only the fields that are explicitly requested or clearly applicable; everything is optional.
- Do NOT add a
date field unless the authored date differs from the UID date — the UID-derived date in the filename is the canonical source.
- Add
description when there is clear context behind the note (e.g. responding to a message, capturing a decision). Use it to record the context/intention, not a summary of the body.
- Inline
#hashtag tokens in the body are indexed by notes tags; they are a separate feature from the tags frontmatter list.
- The
slug in frontmatter is canonical. The filename caches it; on mismatch, frontmatter wins.
CLI Reference
Most commands that act on a specific note take a numeric ID. To act on "the most recent note of type X" or "the most recent note with slug Y", use notes ls --limit 1 or notes resolve to turn a filter into an ID and shell-substitute.
Create
notes new
echo "# Content" | notes new --title "Title" --tag journal --tag idea --description "Context"
echo "# Content" | notes new --slug my-slug
echo "# Content" | notes new --type todo
echo "# Content" | notes new --type todo --upsert
notes new-todo
notes new and notes new-todo print the absolute path of the created (or reused) file to stdout.
List
notes ls --limit 10
notes ls --type todo --limit 1
notes ls --slug report
notes ls --tag journal --tag idea
notes ls --today
Read
notes read 8823
notes read 8823 --no-frontmatter
notes read requires a numeric ID. Compose with ls or resolve to read a filtered note:
notes read "$(notes ls --type todo --limit 1)"
Resolve (get path)
notes resolve
notes resolve --id 8823
notes resolve --type todo
notes resolve --slug meeting
notes resolve --tag work
At most one lookup flag may be provided.
Append
echo "more text" | notes append 8823
echo "more text" | notes append "$(notes ls --slug claude-sessions --limit 1)"
Update
notes update 8823 --title "New Title"
notes update 8823 --description "One-line summary"
notes update 8823 --tag work --tag planning
notes update 8823 --no-tags
notes update 8823 --no-slug
notes update 8823 --no-type
notes update 8823 --slug meeting
notes update 8823 --type todo
notes update 8823 --date 20260420
notes update 8823 --public
notes update 8823 --private
Delete
notes rm 8823
Annotate (auto-fill frontmatter via Claude Code)
notes annotate 8823
notes annotate 8823 --model claude-sonnet-4-6
notes annotate 8823 --max-chars 4000
notes annotate 8823 --timeout 2m
annotate shells out to the claude CLI and requires ANTHROPIC_API_KEY.
Tags
notes tags
notes tags list
notes tags rename work personal
notes tags rename --dry-run work personal
notes tags rm work
notes tags rm --dry-run work
Config
notes config
Prints the resolved store path, default values for per-command flags, and the presence of required env vars (NOTES_PATH, ANTHROPIC_API_KEY). Never prints env values.
Skill (this document)
notes skill
notes skill --install
notes skill --install --target=claude
notes skill --install --force
notes skill --install --dry-run
All targets share the Agent Skills format. Supported --target values:
claude → ~/.claude/skills/notes/SKILL.md (read by Claude Code)
pi → ~/.pi/agent/skills/notes/SKILL.md (read by Pi)
agents → ~/.agents/skills/notes/SKILL.md (cross-harness convention read by Codex, Cursor, OpenCode, Pi, VS Code Copilot, Warp, and others)
Editing Notes
Preserve YAML frontmatter structure when modifying notes. When cross-referencing other notes inside a note, prefer the UID (YYYYMMDD_ID) — it is stable across renames.
Composing with the shell
$EDITOR "$(notes resolve --slug meeting)"
pbpaste | notes append "$(notes ls --type todo --today --limit 1)"
Run notes <command> --help for the full flag list of any command. Run notes config to inspect the effective runtime configuration.