Integrate with the macOS Notes app (Apple Notes). Supports creating, listing, reading, updating, deleting, and searching notes via a simple Node.js CLI that bridges to AppleScript.
Scanned 9/7/2026
Install to Claude Code
npx -y skills add modbender/skill-library-mcp --skill mac-notes-agent --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Mac Notes Agent?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/modbender-mac-notes-agent)More formats (shields.io, HTML) on the badges page.
---
name: mac-notes-agent
description: |
Integrate with the macOS Notes app (Apple Notes).
Supports creating, listing, reading, updating, deleting, and searching notes
via a simple Node.js CLI that bridges to AppleScript.
version: 1.1.0
author: swancho
license: CC-BY-NC-4.0
repository: https://github.com/swancho/mac-memo-agent
metadata:
openclaw:
emoji: "📝"
---
# Mac Notes Agent
## Overview
This skill lets the agent talk to **Apple Notes** on macOS using AppleScript
(via `osascript`). It is implemented as a small Node.js CLI:
```bash
node skills/mac-notes-agent/cli.js <command> [options]
```
> Requires macOS with the built-in **Notes** app and `osascript` available.
All operations target the **default Notes account**. Optionally you can specify
which folder to use.
---
## Commands
### 1) Add a new note
```bash
node skills/mac-notes-agent/cli.js add \
--title "Meeting notes" \
--body "First line\nSecond line\nThird line" \
[--folder "Jarvis"]
```
- `--title` (required): Note title
- `--body` (required): Note body text. Use `\n` for line breaks.
- `--folder` (optional): Folder name. If omitted, uses system default folder. If folder doesn't exist, it will be created.
> Line breaks (`\n`) are converted to `<br>` tags internally for proper rendering in Notes.
**Result (JSON):**
```json
{
"status": "ok",
"id": "Jarvis::2026-02-09T08:40:00::Meeting notes",
"title": "Meeting notes",
"folder": "Jarvis"
}
```
---
### 2) List notes
```bash
node skills/mac-notes-agent/cli.js list [--folder "Jarvis"] [--limit 50]
```
- Lists notes in the given folder (or all folders if omitted).
- Output is JSON array with `title`, `folder`, `creationDate`, and synthetic `id`.
---
### 3) Read a note (get)
```bash
# By folder + title
node skills/mac-notes-agent/cli.js get \
--folder "Jarvis" \
--title "Meeting notes"
# By synthetic id
node skills/mac-notes-agent/cli.js get --id "Jarvis::2026-02-09T08:40:00::Meeting notes"
```
---
### 4) Update a note (replace body)
```bash
node skills/mac-notes-agent/cli.js update \
--folder "Jarvis" \
--title "Meeting notes" \
--body "New content\nReplaces everything"
```
- Replaces the entire body of the matching note.
- Can also use `--id` for identification.
---
### 5) Append to a note
```bash
node skills/mac-notes-agent/cli.js append \
--folder "Jarvis" \
--title "Meeting notes" \
--body "\n---\nAdditional notes here"
```
- Appends new content to the end of the existing note.
---
### 6) Delete a note
```bash
node skills/mac-notes-agent/cli.js delete \
--folder "Jarvis" \
--title "Meeting notes"
```
---
### 7) Search notes
```bash
node skills/mac-notes-agent/cli.js search \
--query "keyword" \
[--folder "Jarvis"] \
[--limit 20]
```
- Searches note titles and bodies for the keyword.
---
## Identification Model
Apple Notes doesn't expose stable IDs. This CLI uses:
- Primary key: `(folderName, title)`
- Synthetic ID: `folderName::creationDate::title`
When multiple notes share the same title, the CLI operates on the most recently created one.
---
## Environment
- **macOS only**: Uses AppleScript via `osascript`
- **No npm dependencies**: Uses only Node.js built-ins (`child_process`)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!