Agent skill

Apple Notes Migration Deep Dive

by jeremylongshore in jeremylongshore/tons-of-skills-marketplace

Migrate notes between Apple Notes, Obsidian, Notion, and other platforms.

MITAuto-check passed

Install Apple Notes Migration Deep Dive

skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill apple-notes-migration-deep-dive -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jeremylongshore/tons-of-skills-marketplace apple-notes-migration-deep-dive --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.curated/apple-notes-migration-deep-dive .claude/skills/apple-notes-migration-deep-dive && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
apple-notes-migration-deep-dive
GitHub stars
2.8k
Token cost
~1.7k tokens
SKILL.md length
479 words
Files
1
Skills in repo
3,342
Repo updated
First seen
Licence
MIT

At a glance

Migrate notes between Apple Notes, Obsidian, Notion, and other platforms.

  • Works in 3 steps: Pre-Migration Backup → Apple Notes to Obsidian → Obsidian to Apple Notes
  • SKILL.md covers Overview, Prerequisites, Instructions and Migration Paths, plus 8 more sections
  • Calls jq and osascript

What it does

Apple Notes Migration Deep Dive is an agent skill from jeremylongshore/tons-of-skills-marketplace. Migrate notes between Apple Notes, Obsidian, Notion, and other platforms. Trigger: "apple notes migration".

Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Designed for Claude Code

It works with Obsidian and Notion. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.

Example prompts

  • “apple notes migration”
  • “/apple-notes-migration-deep-dive”

Requirements

  • Compatibility (from SKILL.md): Designed for Claude Code
  • Pre-approved tools (allowed-tools): Read, Write, Edit, Bash(osascript:*), Grep

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Pre-Migration Backup
  2. Apple Notes to Obsidian
  3. Obsidian to Apple Notes

What it can do on your machine

Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Bash(osascript:*)
    • Grep

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • jq
    • osascript

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • developer.apple.com
    • help.obsidian.md
    • developers.notion.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Designed for Claude Code

    From compatibility in the SKILL.md frontmatter.

Context cost

Apple Notes Migration Deep Dive loads about 1.7k tokens when it runs. Until then it costs about 35 tokens; SKILL.md has 479 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~35
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 479 words, ~1,744 tokens.

Download SKILL.mdSave it as .claude/skills/apple-notes-migration-deep-dive/SKILL.md (or your agent's skills folder).
name
apple-notes-migration-deep-dive
description
Migrate notes between Apple Notes, Obsidian, Notion, and other platforms. Trigger: "apple notes migration".
allowed-tools
Read, Write, Edit, Bash(osascript:*), Grep
compatibility
Designed for Claude Code
version
1.6.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
saas, macos, apple-notes, automation

Apple Notes Migration Deep Dive

Overview

Migrating to or from Apple Notes requires understanding that Notes stores content as proprietary HTML with no REST API for bulk operations. All automation goes through JXA/osascript on a local Mac. This guide covers the four most common migration paths with production-tested scripts. Key challenges include: HTML-to-Markdown conversion fidelity, attachment extraction limitations (JXA cannot export binary attachment data directly), and iCloud sync delays that affect timing of bulk imports.

Prerequisites

  • Written scope, migration owner, encrypted backup, rollback decision, and retention policy for both source and destination.
  • A synthetic pilot corpus that includes formatting and attachment edge cases but contains no production data.
  • A durable manifest keyed by source identifier and a target environment/folder that has been explicitly approved.

Instructions

  1. Run export, conversion, and import as separate, inspectable phases; do not stream unreviewed note bodies into a destination.
  2. Sanitize HTML/Markdown and filenames, encrypt intermediate artifacts, and keep content out of shell arguments and logs.
  3. Pilot a small batch, reconcile source and destination manifests, then obtain owner approval before each larger batch.
  4. Make imports idempotent and stop on a timeout, conflict, or attachment-fidelity gap; do not retry blindly.

Migration Paths

FromToMethodAttachments
Apple NotesObsidianJXA export HTML → convert to Markdown → vaultManual via Shortcuts
Apple NotesNotionJXA export JSON → Notion API importRe-upload required
ObsidianApple NotesRead .md → convert to HTML → JXA createNot supported via JXA
EvernoteApple NotesFile > Import from Evernote (built-in)Preserved automatically
OneNoteApple NotesExport to .enex → Import from EvernotePartial preservation

Step 1: Pre-Migration Backup

bash
#!/bin/bash
# Always back up before migration
BACKUP_DIR="$HOME/notes-backup-$(date +%Y%m%d-%H%M)"
mkdir -p "$BACKUP_DIR"
osascript -l JavaScript -e '
  const Notes = Application("Notes");
  const data = Notes.defaultAccount.notes().map(n => ({
    id: n.id(), title: n.name(), body: n.body(),
    folder: n.container().name(),
    created: n.creationDate().toISOString(),
    modified: n.modificationDate().toISOString(),
    attachments: n.attachments().length
  }));
  JSON.stringify(data, null, 2);
' > "$BACKUP_DIR/full-export.json"
echo "Backed up $(jq length "$BACKUP_DIR/full-export.json") notes to $BACKUP_DIR"

Step 2: Apple Notes to Obsidian

bash
#!/bin/bash
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===NOTESEP===\n");
' | while IFS= read -r line; do
  [ "$line" = "===NOTESEP===" ] && 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 Apple Notes HTML to Markdown
  md=$(echo "$body" | sed 's/<h1>/# /g; s/<\/h1>//g; s/<h2>/## /g; s/<\/h2>//g' \
    | sed 's/<li class="done">/- [x] /g; s/<li>/- /g; s/<\/li>//g' \
    | sed 's/<br[^>]*>/\n/g; s/<[^>]*>//g' | sed '/^$/N;/^\n$/d')

  safe_title=$(echo "$title" | tr '/:*?"<>|' '-' | head -c 80)
  mkdir -p "$VAULT_DIR/$folder"
  printf "---\ncreated: %s\nsource: apple-notes\n---\n\n%s\n" "$created" "$md" \
    > "$VAULT_DIR/$folder/$safe_title.md"
done
echo "Migration complete: $(find "$VAULT_DIR" -name '*.md' | wc -l) files in $VAULT_DIR"

Step 3: Obsidian to Apple Notes

bash
#!/bin/bash
# Import Markdown files into Apple Notes
VAULT_DIR="${1:-$HOME/obsidian-vault}"
COUNT=0
find "$VAULT_DIR" -name '*.md' -type f | while read -r md_file; do
  title=$(head -20 "$md_file" | grep -m1 '^# ' | sed 's/^# //')
  [ -z "$title" ] && title=$(basename "$md_file" .md)
  # Convert Markdown to Apple Notes HTML
  body=$(cat "$md_file" | sed 's/^# \(.*\)/<h1>\1<\/h1>/; s/^## \(.*\)/<h2>\1<\/h2>/' \
    | sed 's/\*\*\([^*]*\)\*\*/<b>\1<\/b>/g; s/\*\([^*]*\)\*/<i>\1<\/i>/g' \
    | sed 's/$/<br>/g' | tr -d '\n')
  osascript -l JavaScript -e "
    const Notes = Application('Notes');
    const note = Notes.Note({name: '$title', body: '$body'});
    Notes.defaultAccount.folders[0].notes.push(note);
  "
  COUNT=$((COUNT + 1))
  sleep 1  # Throttle for iCloud sync
done
echo "Imported $COUNT notes"
Show full SKILL.md (202 more words)Show less

Error Handling

IssueCauseSolution
Notes missing after importiCloud sync delayWait 5-10 minutes; check on another device
HTML formatting garbledUnsupported HTML tags in sourcePre-clean HTML; strip to Apple Notes subset only
Special characters in titleShell escaping issues with JXAUse JSON encoding; pipe through jq
Attachments not migratedJXA cannot write binary attachmentsUse Shortcuts "Add Attachment to Note" action
Duplicate notes after re-runNo dedup in import scriptTrack imported note IDs in a local manifest file

Output

A migration produces a protected source receipt, conversion exception report, destination manifest, reconciliation result, and rollback decision. The routine receipt uses opaque identifiers and counts; note titles, bodies, and attachment names remain in controlled artifacts only.

Examples

Migrate a five-note synthetic pilot into a dedicated test folder, compare every manifest key and expected formatting exception, then delete the pilot destination under the test policy. For a production migration, move in bounded approved batches and pause immediately if the reconciliation count or attachment handling differs from the signed plan.

Resources

Next Steps

For data format details and HTML conversion, see apple-notes-data-handling. For macOS version compatibility during migration, see apple-notes-upgrade-migration.

© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/.curated/apple-notes-migration-deep-dive of jeremylongshore/tons-of-skills-marketplace.

Open the folder on GitHubat commit cfae287

Compare with similar skills

Apple Notes Migration Deep Dive next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Apple Notes Migration Deep Dive compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Apple Notes Migration Deep Dive this skilljeremylongshore/tons-of-skills-marketplace2.8k—~1.7kAutomated safety check: PassMIT
Vexa MeetingsVexa-ai/vexa2.9k—~631Automated safety check: PassApache-2.0
Video To NotesKIRVO-REPORTING/video-to-notes105—~1.5kAutomated safety check: PassMIT
LLM Wikinashsu/llm_wiki_skill149—~3.2kAutomated safety check: PassNone
Baalda Guidenaveedharri/baalda155—~1.8kAutomated safety check: PassApache-2.0
Lzheng Fitness Workbench BuilderLZheng0411/Lzheng-fitness119—~2.2kAutomated safety check: PassMIT

Similar skills

  • Vexa Meetings

    Vexa-ai/vexa

    Sends a Vexa bot into a meeting, follows the live transcript and writes meeting notes with speakers, decisions and action items into Obsidian, Notion or Markdown.

    2.9k GitHub stars~631 tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Video To Notes

    KIRVO-REPORTING/video-to-notes

    Use immediately for any bare YouTube or YouTube Shorts URL, youtu.be link, Bilibili or b23.tv link, or other video URL; do not ask what the user wants.

    105 GitHub stars~1.5k tokensUpdated 1 mo ago
    Media & CreativeAuto-check passed
  • LLM Wiki

    nashsu/llm_wiki_skill

    Query the user's LLM Wiki knowledge base (the LLM Wiki desktop app at 127.0.0.1:19828 — NOT Obsidian, Notion, Apple Notes, Logseq, or any other PKM tool).

    149 GitHub stars~3.2k tokensUpdated 4 mo ago
    Knowledge ManagementAuto-check passed
  • Baalda Guide

    naveedharri/baalda

    Answer any question about Baalda (the team second-brain app at baalda.com) in plain, non-technical language — what it is, what it can and cannot do, which file formats it supports (Markdown, images…

    155 GitHub stars~1.8k tokensUpdated yesterday
    Documents & OfficeAuto-check passed
  • Lzheng Fitness Workbench Builder

    LZheng0411/Lzheng-fitness

    将训练计划 JSON、执行基准、训练复盘、可选 Notion 导出和内置界面素材组装为可离线打开的个人健身工作台,并完成数据刷新、壁纸替换、内置文档阅读、可选 Obsidian 编辑、响应式页面、发布副本与自动校验。用于用户要求从零构建、迁移、重建、替换背景、打包、同步、修复或发布健身工作台,或希望在新电脑上复刻同款个人训练系统时;不用于制定个性化训练处方、单次训练复盘或医疗建议。

    119 GitHub stars~2.2k tokensUpdated 11 days ago
    Auto-check passed
  • Turn a folder of Markdown notes (Obsidian vault, Notion export, plain repo docs) into a navigable static HTML knowledge base bundled as a single .zip file.

    210 GitHub stars~1.4k tokensUpdated 17 days ago
    Knowledge ManagementAuto-check passed

More from jeremylongshore/tons-of-skills-marketplace

All 3,342 skills in this repo
  • Performing Security Code Review

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.

    2.8k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check: notes
  • Adapting Transfer Learning Models

    jeremylongshore/tons-of-skills-marketplace

    Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Agent Context Loader

    jeremylongshore/tons-of-skills-marketplace

    Execute proactive auto-loading: automatically detects and loads agents.md files.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Aggregating Performance Metrics

    jeremylongshore/tons-of-skills-marketplace

    Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.

    2.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Analyzing Capacity Planning

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.

    2.8k GitHub stars~947 tokensUpdated today
    Auto-check passed
  • Analyzing Database Indexes

    jeremylongshore/tons-of-skills-marketplace

    Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.

    2.8k GitHub stars~2k tokensUpdated today
    Auto-check passed

Works with

Questions about Apple Notes Migration Deep Dive

What does Apple Notes Migration Deep Dive do?

Migrate notes between Apple Notes, Obsidian, Notion, and other platforms. Apple Notes Migration Deep Dive is an agent skill from jeremylongshore/tons-of-skills-marketplace. Migrate notes between Apple Notes, Obsidian, Notion, and other platforms.

How do I install Apple Notes Migration Deep Dive in Claude Code?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill apple-notes-migration-deep-dive -a claude-code`. Or copy the skill folder (skills/.curated/apple-notes-migration-deep-dive in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/apple-notes-migration-deep-dive in your project. Claude Code loads it when a task matches its description.

How do I install Apple Notes Migration Deep Dive in Codex?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill apple-notes-migration-deep-dive -a codex`. Or copy the skill folder (skills/.curated/apple-notes-migration-deep-dive in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/apple-notes-migration-deep-dive in your project. Codex loads it when a task matches its description.

Can I use Apple Notes Migration Deep Dive in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill apple-notes-migration-deep-dive -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/apple-notes-migration-deep-dive, .gemini/skills/apple-notes-migration-deep-dive, .github/skills/apple-notes-migration-deep-dive and .opencode/skills/apple-notes-migration-deep-dive in your project.

What does Apple Notes Migration Deep Dive need to run?

Going by SKILL.md and its folder, Apple Notes Migration Deep Dive needs the command-line tools its instructions call (jq and osascript). Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(osascript:*), Grep. Compatibility (from SKILL.md): Designed for Claude Code.

Does Apple Notes Migration Deep Dive access the network?

SKILL.md names 3 domains. As links in the text: developer.apple.com, help.obsidian.md and developers.notion.com. This is read from the text; nothing was executed.

Is Apple Notes Migration Deep Dive safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Apple Notes Migration Deep Dive use?

Apple Notes Migration Deep Dive is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Apple Notes Migration Deep Dive use?

About 1.7k tokens (SKILL.md is roughly 7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Apple Notes Migration Deep Dive?

Skills that share tags, products or a category with Apple Notes Migration Deep Dive: Vexa Meetings (Vexa-ai/vexa, 2.9k stars), Video To Notes (KIRVO-REPORTING/video-to-notes, 105 stars), LLM Wiki (nashsu/llm_wiki_skill, 149 stars) and Baalda Guide (naveedharri/baalda, 155 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Apple Notes Migration Deep Dive?

jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.

Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.