Apple notes
Read Apple Notes via AppleScript. Use when asked to check, search, or read notes. READ ONLY — no creating or modifying notes.From its SKILL.md
npx -y skills add eins78/agent-skills --skill apple-notesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 7 commands, including `${CLAUDE_SKILL_DIR}/scripts/list-folders.sh` and 6 more.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.3 KB, 768 tokens by cl100k_base, as published. Nobody here has run it
Apple Notes (Read Only)
Read notes via Notes.app AppleScript. No creating, updating, or deleting notes.
Prerequisites
- Notes.app running and synced
- Automation permissions granted (System Settings → Privacy & Security → Automation → Terminal/Claude Code → Notes)
- If first access attempt times out, ask user to check for macOS permission dialog
Reliability: always wrap osascript with timeout + retry
Notes.app's AppleScript bridge hangs intermittently. AppleScript-internal with timeout of N seconds does NOT kill a wedged osascript process — wrap with shell-level timeout and retry.
notes_query() {
local script="$1" attempt
for attempt in 1 2 3; do
result=$(timeout 15 osascript -e "$script" 2>&1) && { echo "$result"; return 0; }
sleep 2
done
echo "ERROR: Notes query failed after 3 attempts" >&2
return 1
}
Reasonable defaults: 15s timeout, 3 retries, 2s sleep. Bump to 30s for full-text search across many notes. If all retries fail, report and move on.
Scripts
List folders
${CLAUDE_SKILL_DIR}/scripts/list-folders.sh # All folders across all accounts
${CLAUDE_SKILL_DIR}/scripts/list-folders.sh iCloud # Only iCloud folders
List notes in a folder
${CLAUDE_SKILL_DIR}/scripts/list-notes.sh # iCloud/Notes (default)
${CLAUDE_SKILL_DIR}/scripts/list-notes.sh "Shopping" # iCloud/Shopping
${CLAUDE_SKILL_DIR}/scripts/list-notes.sh "Notes" "Gmail" # Gmail/Notes
Output: note name | modification date (one per line)
Read a note
${CLAUDE_SKILL_DIR}/scripts/read-note.sh "Shopping List" # Search all accounts
${CLAUDE_SKILL_DIR}/scripts/read-note.sh "Meeting Notes" "iCloud" # Specific account
Returns metadata header + HTML body.
Search notes by name
${CLAUDE_SKILL_DIR}/scripts/search-notes.sh "recipe" # Search all accounts
${CLAUDE_SKILL_DIR}/scripts/search-notes.sh "recipe" "iCloud" # Specific account
Output: note name | account/folder | modification date (one per line)
Direct Commands
For quick one-off access without scripts:
# List all iCloud folders
osascript -e 'tell application "Notes" to get name of every folder of account "iCloud"'
# List all note names in a folder
osascript -e 'tell application "Notes" to get name of every note in folder "Notes" of account "iCloud"'
# Read a note body (returns HTML)
osascript -e 'tell application "Notes" to get body of note "Note Name"'
# Count all notes
osascript -e 'tell application "Notes" to count every note'
Notes
- Note bodies are returned as HTML — use for display or pipe through a converter for plain text
- Note names are case-sensitive in AppleScript queries
- Searching large numbers of notes can be slow — scope to a specific account when possible
- The
whose name containsfilter is case-insensitive - Notes.app must be running — scripts will launch it if needed, but sync may take a moment
What ships with it: 5 files
8.5 KB alongside SKILL.md, 4 of them executable
scripts/
- list-folders.shruns1.2 KB
- list-notes.shruns1.2 KB
- read-note.shruns1.9 KB
- search-notes.shruns2.1 KB
- README.md2.0 KB
Gives 0 of the 12 instructions most note taking skills give in 768 tokens
Counted across 632 of the 857 authors here whose files we hold, read 2026-09-06
- Use standard Markdown links for external URLsin 16 of 632, across 8 files
- Use wikilinks for internal vault connectionsin 15 of 632, across 7 files
- Embed content using the exclamation mark prefixin 14 of 632, across 6 files
- Ask for clarification if the user request is ambiguousin 13 of 632
- Add frontmatter properties at the top of the filein 12 of 632, across 4 files
- Verify note renders correctly in reading viewin 12 of 632, across 4 files
- Include a visual element on every slidein 11 of 632, across 5 files
- Left-align body text and listsin 11 of 632, across 5 files
- Maintain 0.5 inch minimum marginsin 11 of 632, across 5 files
- Wrap formulas containing double quotes in single quotesin 11 of 632, across 5 files
- Repeat one distinctive visual motif across all slidesin 10 of 632, across 4 files
- Use 36pt or larger for slide titlesin 10 of 632, across 4 files
Said here and by no other author read
- Wrap osascript commands with timeout and retry logic
- List attachments if a note body search returns nothing
- Use list-attachments.sh to identify scanned documents by OCR text
- Use file names to identify PDF attachments
- Extract PDF content using pdftotext when necessary
- Scope searches to specific accounts for better performance
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.