From apple-notes-pack
Migrates notes between Apple Notes, Obsidian, Notion via Bash/osascript scripts on macOS, with HTML-to-Markdown conversion and API imports.
How this skill is triggered — by the user, by Claude, or both
Slash command
/apple-notes-pack:apple-notes-migration-deep-diveThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
| From | To | Method |
| From | To | Method |
|---|---|---|
| Apple Notes | Obsidian | Export HTML → convert to Markdown → copy to vault |
| Apple Notes | Notion | Export JSON → Notion API import |
| Obsidian | Apple Notes | Read .md → convert to HTML → JXA create |
| Evernote | Apple Notes | File > Import from Evernote (built-in) |
#!/bin/bash
# Export all Apple Notes to Obsidian vault
VAULT_DIR="$HOME/obsidian-vault/Apple Notes Import"
mkdir -p "$VAULT_DIR"
osascript -l JavaScript -e "
const Notes = Application(\"Notes\");
Notes.defaultAccount.notes().map(n => JSON.stringify({
title: n.name(),
body: n.body(),
folder: n.container().name(),
created: n.creationDate().toISOString(),
})).join(\"\\n---SEP---\\n\");
" | while IFS= read -r line; do
[ "$line" = "---SEP---" ] && continue
title=$(echo "$line" | jq -r ".title" 2>/dev/null || continue)
body=$(echo "$line" | jq -r ".body" 2>/dev/null)
folder=$(echo "$line" | jq -r ".folder" 2>/dev/null)
created=$(echo "$line" | jq -r ".created" 2>/dev/null)
# Convert HTML to Markdown (basic)
md=$(echo "$body" | sed "s/<h1>/# /g; s/<\/h1>//g; s/<h2>/## /g; s/<\/h2>//g; s/<br>/\\n/g; s/<[^>]*>//g")
safe_title=$(echo "$title" | tr "/:*?\"<>|" "-" | head -c 100)
mkdir -p "$VAULT_DIR/$folder"
echo -e "---\ncreated: $created\nsource: apple-notes\n---\n\n# $title\n\n$md" > "$VAULT_DIR/$folder/$safe_title.md"
done
echo "Migration complete: $VAULT_DIR"
#!/bin/bash
for md_file in "$VAULT_DIR"/*.md; do
title=$(head -1 "$md_file" | sed "s/^#\s*//")
body=$(cat "$md_file" | sed "s/^# /<h1>/;s/$/<\/h1>/" | sed "s/\n/<br>/g")
osascript -l JavaScript -e "
const Notes = Application(\"Notes\");
const note = Notes.Note({name: \"$title\", body: \"$body\"});
Notes.defaultAccount.folders[0].notes.push(note);
"
sleep 1
done
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin apple-notes-packMigrates notes from Notion, Evernote, Roam, Bear, Apple Notes to Obsidian. Converts links to wikilinks, relocates attachments, migrates tags, generates frontmatter using Node.js scripts.
Exports Apple Notes to Markdown, JSON, HTML files, and SQLite databases using macOS osascript and bash. Converts internal HTML to Markdown for backups, app exports, or searchable archives.
Manages Apple Notes on macOS: create, search, read, update, delete and organize notes and folders via natural language commands.