'Create, read, and list Apple Notes using JXA and AppleScript.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add jeremylongshore/tons-of-skills-marketplace --skill apple-notes-hello-world --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Apple Notes Hello World?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jeremylongshore-apple-notes-hello-world-tons-of-skills-marketplace)More formats (shields.io, HTML) on the badges page.
---
name: apple-notes-hello-world
description: 'Create, read, and list Apple Notes using JXA and AppleScript.
Use when learning Notes automation, creating your first automated note,
or testing read/write access to Apple Notes from scripts.
Trigger: "apple notes hello world", "create apple note", "read apple notes",
"apple notes example", "osascript notes".
'
allowed-tools: Read, Write, Edit, Bash(osascript:*)
version: 1.6.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- macos
- apple-notes
- automation
- jxa
compatibility: Designed for Claude Code
---
# Apple Notes Hello World
## Overview
Create, read, search, and delete Apple Notes using JXA (JavaScript for Automation) via `osascript`. All examples work from the command line on macOS.
## Prerequisites
- Completed `apple-notes-install-auth` (permissions granted)
- macOS with Notes.app
## Instructions
### Step 1: Create a Note
```bash
# JXA: Create a note in the default folder
osascript -l JavaScript -e '
const Notes = Application("Notes");
const defaultFolder = Notes.defaultAccount.folders[0];
const newNote = Notes.Note({
name: "Hello from Automation",
body: "<h1>Hello World</h1><p>This note was created via JXA at " + new Date().toISOString() + "</p>"
});
defaultFolder.notes.push(newNote);
newNote.id();
'
# AppleScript equivalent:
osascript -e '
tell application "Notes"
tell account "iCloud"
make new note at folder "Notes" with properties {name:"Hello AppleScript", body:"<p>Created via AppleScript</p>"}
end tell
end tell
'
```
### Step 2: List All Notes
```bash
# List notes with title and creation date
osascript -l JavaScript -e '
const Notes = Application("Notes");
const notes = Notes.defaultAccount.notes();
notes.slice(0, 10).map(n =>
`${n.name()} | Created: ${n.creationDate().toISOString().split("T")[0]}`
).join("\n");
'
```
### Step 3: Read a Note's Content
```bash
# Read note body (returns HTML)
osascript -l JavaScript -e '
const Notes = Application("Notes");
const notes = Notes.defaultAccount.notes();
const target = notes.find(n => n.name() === "Hello from Automation");
if (target) {
`Title: ${target.name()}\nBody: ${target.body()}\nModified: ${target.modificationDate()}`;
} else {
"Note not found";
}
'
```
### Step 4: Search Notes
```bash
# Search by keyword in note name
osascript -l JavaScript -e '
const Notes = Application("Notes");
const query = "Hello";
const results = Notes.defaultAccount.notes().filter(n =>
n.name().toLowerCase().includes(query.toLowerCase())
);
results.map(n => n.name()).join("\n") || "No results";
'
```
### Step 5: Create Note in Specific Folder
```bash
# Create a folder and add a note to it
osascript -l JavaScript -e '
const Notes = Application("Notes");
const account = Notes.defaultAccount;
// Create folder if it does not exist
let folder = account.folders().find(f => f.name() === "Automation");
if (!folder) {
folder = Notes.Folder({ name: "Automation" });
account.folders.push(folder);
}
// Add note to folder
const note = Notes.Note({
name: "Organized Note",
body: "<p>This note lives in the Automation folder.</p>"
});
folder.notes.push(note);
`Created in folder: ${folder.name()}`;
'
```
### Step 6: Delete a Note
```bash
# Delete by name (moves to Recently Deleted)
osascript -l JavaScript -e '
const Notes = Application("Notes");
const notes = Notes.defaultAccount.notes();
const target = notes.find(n => n.name() === "Hello from Automation");
if (target) {
Notes.delete(target);
"Note deleted";
} else {
"Note not found";
}
'
```
## Note Properties
| Property | Type | Writable | Description |
|----------|------|----------|-------------|
| `name` | string | Yes | Note title (first line) |
| `body` | string (HTML) | Yes | Full note content as HTML |
| `id` | string | No | Unique identifier |
| `creationDate` | Date | No | When note was created |
| `modificationDate` | Date | No | Last modification |
| `container` | Folder | No | Parent folder |
## Output
- Created a note via JXA and AppleScript
- Listed, searched, and read note content
- Organized note into a folder
- Deleted a note
## Examples
Create one synthetic note in a pre-created, test-only local folder, read only that note back by its returned identifier, and remove it after verifying the exercise. Do not list all notes, search a live account, or create folders implicitly as part of a permission smoke test.
## Error Handling
| Error | Cause | Solution |
|-------|-------|----------|
| `Notes got an error` | Notes.app not running | Add `Notes.activate()` first |
| Empty body | Note has no text content | Check note is not just an image |
| `Can't make folder` | Folder already exists | Check before creating |
| Slow response | iCloud sync in progress | Wait for sync; use local account |
## Resources
- [AppleScript Notes Dictionary](https://www.macosxautomation.com/applescript/notes/)
- JXA Examples
- [osascript Manual](https://ss64.com/mac/osascript.html)
## Next Steps
Proceed to `apple-notes-local-dev-loop` for development workflow setup.
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!