apple-notes について
apple-notesは、AppleScriptを使ってユーザーのNotes.appをローカルで管理するmacOS専用スキルです。Python標準ライブラリのみのスクリプトで、ノートの閲覧、検索、書き出し、編集に対応し、書き込みは事前確認を経て実行します。
主な機能
- 01フォルダーとノートの一覧表示
- 02ノートのタイトルと本文の検索
- 03ノートの表示と書き出し
- 04ノートの作成、追記、移動、削除
- 05確定前の書き込みプレビュー
活用シーン
- 01テキストやフォルダーからノートを検索
- 02ノートをMarkdown、HTML、テキストで書き出し
- 03プレビュー後にノートを作成または更新
- 04Notes内でノートやフォルダーを移動
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill apple-notesインストール後、Claude Code で/apple-notesを入力して読み込まれたか確認します。
同梱ファイルscripts/notes.py
詳細
apple-notes — AppleScript を使用して Apple Notes をローカルで管理
macOS 上の Notes.app を介して、ユーザーの実際の Apple Notes を操作します。Apple は Notes 用のクラウド API を提供していないため、OAuth 認証やトークンの注入は不要です。このスキルはユーザー自身の Mac 上で動作し、AppleScript(osascript)を使用して Notes.app と通信します。macOS 上でエージェントが動作する環境であれば、AceDataCloud desktop app(ユーザーの Mac 上でローカルツール/ローカル MCP を実行します)、macOS 上の Claude Code、またはユーザーの Mac 上の CodingBridge ノードで利用できます。
frontmatter の
surfaces: [mac]は、このスキルがmacOS デスクトップ専用であることを示します。Web/iOS/Android/Windows のサーフェスでは実行できません(そこにはローカルのNotes.appがありません)。スキル/コネクターのディレクトリ UI はこれを読み取り、カードに「macOS desktop」と表示して、macOS デスクトップアプリからインストールするよう案内します。surfacesが指定されていない場合、スキルはどこでも利用可能と見なされます。
このスキルには scripts/notes.py が含まれています。Python の標準ライブラリのみで完結しており、osascript を呼び出します。pip install も brew も不要です。動的な値は環境変数として渡され、AppleScript のソースに直接埋め込まれることはありません。そのため、ノートの内容によってスクリプトが壊れたり、コマンドが注入されたりすることはありません。
要件
- Notes アプリを搭載した macOS。
python3(システムの Python で問題ありません)。 - オートメーションの許可。 最初の呼び出し時に、macOS の確認ダイアログ 「Terminal が Notes の制御を求めています」 が表示されます。許可するか、システム設定 › プライバシーとセキュリティ › オートメーション ›(使用するターミナル/エージェント)› Notes で有効にしてください。認証エラーが発生すると、CLI はユーザーにこの手順を正確に案内します。再試行を繰り返さないでください。
- Notes を参照すると、アプリはバックグラウンドで起動します(ウィンドウが強制的に開かれることはありません)。
NOTES="${SKILL_DIR:-.}/scripts/notes.py" # run from this skill's directory
python3 "$NOTES" folders # smoke-test the connection
コマンド
| コマンド | 読み取り/書き込み | 目的 |
|---|---|---|
folders | 読み取り | フォルダーとノートの件数を一覧表示 |
list [--folder F] [--limit N] | 読み取り | ノートを新しい順に一覧表示:ID、タイトル、フォルダー、日付 |
search QUERY [--folder F] [--limit N] | 読み取り | タイトルと本文を対象に、大文字と小文字を区別しない部分一致検索 |
view NOTE_ID [--format json|text|html] | 読み取り | 1 件のノートを表示(メタデータ+本文) |
export NOTE_ID [--format md|html|text] [-o FILE] | 読み取り | 1 件のノートを Markdown/HTML/テキストにエクスポート |
create --title T [--body B | --body-file F] [--folder F] | 書き込み | ノートを作成 |
append NOTE_ID [--body B | --body-file F] | 書き込み | 既存のノートにテキストを追加 |
move NOTE_ID --folder F | 書き込み | ノートを別のフォルダーに移動 |
new-folder NAME | 書き込み | フォルダーを作成 |
delete NOTE_ID | 書き込み | ノートを最近削除した項目に移動(復元可能) |
ほとんどのコマンドは JSON を出力します(エラーも常に JSON:{"error": ...})。例外として、view --format text|html と -o を指定しない export は、ノートの内容をそのまま stdout に出力します。NOTE_ID は list/search が返す不透明な x-coredata://… ID です。必ず最初に最新の ID を取得してください。推測で指定しないでください。
読み取りの例
python3 "$NOTES" folders
python3 "$NOTES" list --limit 20
python3 "$NOTES" list --folder "Work" --limit 50
python3 "$NOTES" search "invoice" --limit 20
python3 "$NOTES" view "x-coredata://…/p42"
python3 "$NOTES" export "x-coredata://…/p42" --format md -o note.md
書き込みには確認が必要です(末尾に --confirm がなければドライラン)
create、append、move、new-folder、delete は、ユーザーの実際のノートを変更します。末尾に --confirm がない場合はドライランを実行し、実行予定の内容を出力します。--confirm が有効になるのは、最後の引数として指定された場合のみです。必ずドライランを表示し、明示的な「はい」を得てから、末尾に --confirm を追加して再実行してください。
# Create — dry-run, then confirm
python3 "$NOTES" create --title "Groceries" --body "milk\neggs" # preview
python3 "$NOTES" create --title "Groceries" --body "milk\neggs" --confirm # writes
# Create in a folder, body from a file
python3 "$NOTES" create --title "Spec" --body-file draft.md --folder "Work" --confirm
# Append to an existing note
python3 "$NOTES" append "x-coredata://…/p42" --body "one more line" --confirm
# Move / organize
python3 "$NOTES" new-folder "Archive" --confirm
python3 "$NOTES" move "x-coredata://…/p42" --folder "Archive" --confirm
# Delete → goes to Recently Deleted (recoverable ~30 days)
python3 "$NOTES" delete "x-coredata://…/p42" --confirm
内容はプレーンテキストとして扱われます(各行が段落になり、--title はノートの先頭行となり、Notes ではタイトルとして表示されます)。入力内の HTML はエスケープされるため、マークアップを注入することはできません。--body で改行するには \n を使うか、--body-file でファイルを指定してください。
注意事項
- これはユーザーの実際の Notes アカウントです。 書き込みを行う前に必ず確認してください。
listはライブラリ全体をスキャンします。大規模なアカウントでは数秒かかることがあります。--folderで対象を絞り、--limitで上限を設定してください(デフォルトは 50)。searchは Notes 内を検索するため、より高速です。- 添付ファイル/画像: 画像や添付ファイルを含むメモはテキストとして読み取り、エクスポートできますが、
appendでは埋め込み添付ファイルが保持されない場合があります。この方法で添付ファイル付きのメモを編集するのは避け、Notes で開いてください。 - エクスポート → Markdown では、Notes の一般的な書式(見出し、太字/斜体、リスト、リンク、改行)が変換されます。リッチオブジェクト(表、描画、スキャンした書類)はプレーンテキストに劣化します。
moveで移動できるのは同一アカウント内のみです(例:iCloud)。アカウントをまたぐ移動は失敗します。NOTE_IDを決めつけないでください。ID はストアごとに異なるため、必ず先にlist/searchで取得してください。- 認証エラーが継続する場合は、Automation の権限がありません。ユーザーに権限を付与するよう伝え(「Requirements」を参照)、処理を中止してください。ループして再試行しないでください。