Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Set up macOS automation access for Apple Notes via AppleScript, JXA, and Shortcuts. Use when configuring accessibility permissions, setting up osascript access, or initializing Apple Notes automation on macOS. Trigger: "setup apple notes", "apple notes automation", "apple notes permissions".
.claude/skills/jeremylongshore-apple-notes-install-auth/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -2% | 0% |
Apple Notes has no REST API. Automation uses macOS scripting technologies: AppleScript, JavaScript for Automation (JXA), Shortcuts, and the osascript command-line tool. No SDK to install — but you need macOS accessibility permissions.
bash# macOS requires explicit permission for scripts to control Notes.app # The first time you run an osascript command targeting Notes, macOS will prompt. # You can also pre-grant in: System Preferences > Privacy & Security > Automation # Test basic Notes access (will trigger permission prompt) osascript -e 'tell application "Notes" to get name of every note in default account'
bash# JXA is the modern alternative to AppleScript # Run JavaScript via osascript with -l JavaScript flag osascript -l JavaScript -e ' const Notes = Application("Notes"); Notes.includeStandardAdditions = true; const noteCount = Notes.defaultAccount.notes.length; `Apple Notes accessible: ${noteCount} notes found`; '
bash#!/bin/bash # scripts/notes-cli.sh — Wrapper for common Apple Notes operations case "$1" in count) osascript -l JavaScript -e ' const Notes = Application("Notes"); Notes.defaultAccount.notes.length; ' ;; list) osascript -l JavaScript -e ' const Notes = Application("Notes"); const notes = Notes.defaultAccount.notes(); notes.slice(0, 20).map(n => `${n.id()} | ${n.name()}`).join("\n"); ' ;; folders) osascript -l JavaScript -e ' const Notes = Application("Notes"); Notes.defaultAccount.folders().map(f => f.name()).join("\n"); ' ;; *) echo "Usage: notes-cli.sh {count|list|folders}" ;; esac
bash# Apple Shortcuts can also interact with Notes # Check available shortcuts shortcuts list | grep -i note # Run a shortcut that creates a note shortcuts run "Create Note" --input-path /dev/stdin <<< "Test content"
| Technology | Language | Best For | Docs | |-----------|----------|----------|------| | AppleScript | AppleScript | Simple operations | Apple Scripting Guide | | JXA | JavaScript | Complex logic, JSON handling | Apple JXA Reference | | osascript | CLI wrapper | Scripts, CI/CD | man osascript | | Shortcuts | Visual | Non-developer workflows | Shortcuts app | | PyXA | Python | Python automation | pyxa.dev |
| Error | Cause | Solution | |-------|-------|----------| | Not authorized to send Apple events | Missing automation permission | Grant in System Preferences > Privacy > Automation | | Notes got an error: AppleEvent timed out | Notes.app not running | Launch Notes first or add activate | | -1743 errAEAppNotAllowed | Denied by TCC | Reset TCC: tccutil reset AppleEvents | | execution error: Notes is not running | Notes.app closed | Add tell app "Notes" to activate |
Proceed to apple-notes-hello-world for your first note creation.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 11,768 | 7,968 | -32% | 1 | 1 | 0% | 2,265 | 2,465 | +9% | 0 | 0 | — |
case-02 | fail→pass | 17,529 | 11,080 | -37% | 1 | 1 | 0% | 3,424 | 3,263 | -5% | 0 | 0 | — |
case-03 | fail→fail | 18,194 | 12,887 | -29% | 1 | 1 | 0% | 3,289 | 3,522 | +7% | 0 | 0 | — |
case-04 | fail→fail | 6,388 | 4,197 | -34% | 1 | 1 | 0% | 1,097 | 1,746 | +59% | 0 | 0 | — |
case-05 | pass→pass | 3,430 | 2,703 | -21% | 1 | 1 | 0% | 564 | 1,352 | +140% | 0 | 0 | — |
case-06 | pass→pass | 7,192 | 5,497 | -24% | 1 | 1 | 0% | 1,330 | 1,978 | +49% | 0 | 0 | — |
case-07 | fail→pass | 6,836 | 5,267 | -23% | 1 | 1 | 0% | 1,224 | 1,896 | +55% | 0 | 0 | — |
case-08 | pass→pass | 9,368 | 1,735 | -81% | 1 | 1 | 0% | 1,556 | 1,278 | -18% | 0 | 0 | — |
case-14 | pass→pass | 13,219 | 11,330 | -14% | 1 | 1 | 0% | 2,054 | 2,902 | +41% | 0 | 0 | — |
case-09 | fail→pass | 7,897 | 3,980 | -50% | 1 | 1 | 0% | 1,442 | 1,779 | +23% | 0 | 0 | — |
case-10 | pass→pass | 13,475 | 9,226 | -32% | 1 | 1 | 0% | 2,202 | 2,572 | +17% | 0 | 0 | — |
case-11 | fail→fail | 23,168 | 8,189 | -65% | 1 | 1 | 0% | 4,034 | 2,627 | -35% | 0 | 0 | — |
case-12 | fail→pass | 12,467 | 6,857 | -45% | 1 | 1 | 0% | 2,082 | 2,034 | -2% | 0 | 0 | — |
case-13 | pass→pass | 2,784 | 2,146 | -23% | 1 | 1 | 0% | 412 | 1,254 | +204% | 0 | 0 | — |
case-15 | fail→fail | 10,025 | 5,395 | -46% | 1 | 1 | 0% | 1,618 | 1,955 | +21% | 0 | 0 | — |
case-16 | pass→pass | 6,281 | 3,455 | -45% | 1 | 1 | 0% | 1,195 | 1,525 | +28% | 0 | 0 | — |
case-17 | pass→pass | 8,245 | 1,645 | -80% | 1 | 1 | 0% | 1,371 | 1,200 | -12% | 0 | 0 | — |
case-18 | pass→pass | 6,775 | 5,286 | -22% | 1 | 1 | 0% | 1,244 | 1,960 | +58% | 0 | 0 | — |
case-19 | fail→fail | 16,942 | 16,877 | -0% | 1 | 1 | 0% | 3,046 | 4,229 | +39% | 0 | 0 | — |
case-20 | fail→fail | 14,393 | 15,496 | +8% | 1 | 1 | 0% | 2,384 | 3,749 | +57% | 0 | 0 | — |
case-21 | pass→pass | 23,774 | 10,418 | -56% | 1 | 1 | 0% | 2,107 | 2,617 | +24% | 0 | 0 | — |
case-22 | fail→fail | 11,770 | 13,904 | +18% | 1 | 1 | 0% | 2,422 | 3,698 | +53% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.