agentsclimarketplace

Macos notes

Skill lucaperret/agent-skills/skills/macos-notes

Agent Skills that give AI coding agents superpowers beyond code — macOS native apps, MCP server deployment, and AI connector publishing

Install
npx -y skills add lucaperret/agent-skills --skill macos-notes

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 5 stars5 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.

What its author says it does

Copied from the file, not written here

Create, read, search, and manage macOS Notes via AppleScript. Use when the user asks to take a note, jot something down, save an idea, create meeting notes, read a note, search notes, or anything involving Apple Notes on macOS. Triggers on requests like "note this down", "save this as a note", "create a note about X", "show my notes", "search my notes for X", "what did I write about X". macOS only.

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

4.8 KB, as published. Nobody here has run it

macOS Notes

Manage Apple Notes via $SKILL_DIR/scripts/notes.sh. Notes content is stored as HTML internally; the script accepts plain text or HTML body and returns plaintext when reading.

Quick start

List folders

Always list folders first to discover accounts and folder names:

"$SKILL_DIR/scripts/notes.sh" list-folders

Output format: account → folder (one per line).

Create a note

echo '<json>' | "$SKILL_DIR/scripts/notes.sh" create-note

JSON fields:

FieldRequiredDefaultDescription
titleyes-Note title (becomes the first line / heading)
bodyno""Note content (plain text — converted to HTML automatically)
htmlno""Raw HTML body (overrides body if both provided)
foldernodefault folderFolder name (from list-folders)
accountnodefault accountAccount name (from list-folders)

Read a note

echo '<json>' | "$SKILL_DIR/scripts/notes.sh" read-note

JSON fields:

FieldRequiredDefaultDescription
nameyes-Note title (exact match)
foldernoall foldersFolder to search in
accountnodefault accountAccount to search in

List notes

echo '<json>' | "$SKILL_DIR/scripts/notes.sh" list-notes

JSON fields:

FieldRequiredDefaultDescription
foldernodefault folderFolder name
accountnodefault accountAccount name
limitno20Max notes to return

Search notes

echo '<json>' | "$SKILL_DIR/scripts/notes.sh" search-notes

JSON fields:

FieldRequiredDefaultDescription
queryyes-Text to search for in note titles
accountnodefault accountAccount to search in
limitno10Max results to return

Interpreting natural language

Map user requests to commands:

User saysCommandKey fields
"Note this down: ..."create-notetitle, body
"Save meeting notes"create-notetitle: "Meeting notes — <date>", body
"What did I write about X?"search-notesquery: "X"
"Show my notes"list-notes(defaults)
"Read my note about X"read-notename: "X"
"Save this in my work notes"create-noteMatch closest account/folder from list-folders

Example prompts

"Note down the API key format: prefix_xxxx"

echo '{"title":"API key format","body":"Format: prefix_xxxx"}' | "$SKILL_DIR/scripts/notes.sh" create-note

"Show my recent notes"

echo '{}' | "$SKILL_DIR/scripts/notes.sh" list-notes

"What did I write about passwords?"

echo '{"query":"password"}' | "$SKILL_DIR/scripts/notes.sh" search-notes

"Read my note about Hinge"

echo '{"name":"Hinge"}' | "$SKILL_DIR/scripts/notes.sh" read-note

"Create a meeting summary in my iCloud notes"

"$SKILL_DIR/scripts/notes.sh" list-folders

Then:

echo '{"title":"Meeting summary — 2026-02-17","body":"Discussed roadmap.\n- Q1: launch MVP\n- Q2: iterate","account":"iCloud","folder":"Notes"}' | "$SKILL_DIR/scripts/notes.sh" create-note

Critical rules

  1. Always list folders first if the user hasn't specified an account/folder — folder names are reused across accounts
  2. Specify both account and folder when targeting a specific location — folder: "Notes" alone is ambiguous
  3. Password-protected notes are skipped — the script cannot read or modify them
  4. Pass JSON via stdin — never as a CLI argument (avoids leaking data in process list)
  5. All fields are validated by the script (type coercion, range checks) — invalid input is rejected with an error
  6. All actions are logged to logs/notes.log with timestamp, command, and note title
  7. Body uses plain text — newlines in body are converted to <br> automatically; use html for rich formatting
  8. Note title = first line — Notes.app treats the first line of the body as the note name

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.