AgentSkillsCN

Apple Notes Import

Apple Notes 导入

SKILL.md
--- frontmatter
allowed-tools:
  - Read
  - Write
  - Bash
  - Task
  - AskUserQuestion

Apple Notes Import

Import notes from the "Claude Inbox" folder in iCloud Notes and dispatch content to appropriate agents based on @tags.

Manifest Tracking

The skill tracks imported notes in a manifest file to avoid re-processing:

Manifest location: ~/.claude/data/apple-notes-manifest.json

Manifest structure:

json
{
  "imported": {
    "Note Title": {
      "importedAt": "2026-01-19T12:00:00Z",
      "modificationDate": "2026-01-19T11:30:00Z",
      "contentHash": "abc123..."
    }
  }
}

Status logic:

  • NEW: Note name not in manifest
  • MODIFIED: Note in manifest but modification date changed
  • IMPORTED: Note in manifest with same modification date (already processed)

Workflow

Step 1: Check Prerequisites

First, verify the Claude Inbox folder exists:

bash
osascript -e 'tell application "Notes" to tell account "iCloud" to exists folder "Claude Inbox"'

If this returns false, inform the user:

The "Claude Inbox" folder doesn't exist in your iCloud Notes.

To set up:

  1. Open the Notes app
  2. In the iCloud account section, create a new folder called "Claude Inbox"
  3. Add notes to this folder with @tags in the body (e.g., @thinking, @write)
  4. Run this skill again

If you get a permission error, inform the user:

Terminal needs permission to control Notes.

Go to System Preferences > Privacy & Security > Automation and enable "Notes" for Terminal.

Step 2: Load Manifest

Read the manifest file if it exists:

bash
cat ~/.claude/data/apple-notes-manifest.json 2>/dev/null || echo '{"imported":{}}'

Parse the JSON to get the list of previously imported notes.

Step 3: Count and Extract Notes

Count notes in the inbox:

bash
osascript -e 'tell application "Notes" to tell account "iCloud" to tell folder "Claude Inbox" to count of notes'

If count is 0, inform the user:

Your Claude Inbox is empty. Add notes with @tags to import them:

  • @thinking - Start a thinking session
  • @write - Get writing feedback

Extract all notes with their names, modification dates, and content:

bash
osascript -e '
tell application "Notes"
    tell account "iCloud"
        tell folder "Claude Inbox"
            set output to ""
            repeat with n in notes
                set noteName to name of n
                set noteBody to body of n
                set noteMod to modification date of n
                set output to output & "---NOTE_START---" & return & "NAME: " & noteName & return & "MODIFIED: " & noteMod & return & "BODY:" & return & noteBody & return & "---NOTE_END---" & return
            end repeat
            return output
        end tell
    end tell
end tell
'

Step 4: Compare Against Manifest

For each extracted note:

  1. Check if note name exists in manifest
  2. If exists, compare modification date
  3. Determine status: NEW, MODIFIED, or IMPORTED

Step 5: Parse Content and Present Notes

The note body comes as HTML. To extract plain text and @tags:

  1. Strip HTML tags: sed 's/<[^>]*>//g'
  2. Decode common HTML entities: sed 's/&nbsp;/ /g; s/&amp;/\&/g; s/&lt;/</g; s/&gt;/>/g; s/&quot;/"/g'
  3. Find @tags: grep -oE '@[a-zA-Z]+'

Present notes grouped by status:

code
Notes in Claude Inbox:

NEW:
1. [Note Title] - @thinking

MODIFIED (content changed since last import):
2. [Another Note] - @write

ALREADY IMPORTED:
3. [Old Note] - @thinking (imported 2026-01-18)

Which note would you like to process? (enter number, "new" for all new notes, or "all")

If there are no NEW or MODIFIED notes:

No new notes in your Claude Inbox. All notes have been imported previously.

You can still re-process an existing note if needed, or add new notes to the inbox.

Use AskUserQuestion to let the user select.

Step 6: Route to Agent

Based on detected @tags, route to the appropriate agent:

TagAction
@thinkingLaunch thinking-partner agent with note as context
@writeLaunch writing_critic agent with note content
@researchInform user: "Research routing not yet implemented - would you like to process this note differently?"
(no tag)Ask user which agent to use
(multiple tags)Ask user which tag/agent to use

Step 7: Update Manifest

After successfully processing a note, update the manifest:

  1. Ensure directory exists: mkdir -p ~/.claude/data
  2. Add/update the note entry with current timestamp and modification date
  3. Write updated manifest back to file

Use the Write tool to update ~/.claude/data/apple-notes-manifest.json.

Agent Dispatch

For @thinking

Present the note content, then transition to thinking-partner behavior:

Imported from Apple Notes: [Note Title]

[Note content here]


I'll help you think through this. Are we continuing an existing thread, or starting fresh?

Then use the Task tool with subagent_type: "thinking-partner" to begin the session, passing the note content as context.

For @write

Present the note content, then transition to writing_critic behavior:

Imported from Apple Notes: [Note Title]

[Note content here]


I'll help review this writing. What's the intended audience and purpose?

Then use the Task tool with subagent_type: "writing_critic" to begin the review, passing the note content as context.

Important Notes

  • Read-only on Notes: This skill never modifies or deletes notes from Apple Notes
  • Manifest tracking: Imported notes are tracked locally to avoid re-processing
  • macOS only: Uses AppleScript which is only available on macOS
  • iCloud account only: Only reads from the iCloud Notes account, not Gmail/Exchange
  • First run: The first time you run this, macOS will prompt to grant Terminal permission to control Notes - approve this to proceed

Example Session

code
User: /apple-notes-import

Claude: Checking Claude Inbox in iCloud Notes...

Found 3 notes:

NEW:
1. "Product Strategy Ideas" - @thinking

ALREADY IMPORTED:
2. "Draft Blog Post" - @write (imported 2026-01-18)
3. "Meeting Notes" - (no tags) (imported 2026-01-17)

Which note would you like to process?

User: 1

Claude: **Imported from Apple Notes:** Product Strategy Ideas

We should consider three main approaches for the Q2 launch:
1. Focus on enterprise features
2. Double down on developer experience
3. Hybrid approach with modular pricing

Each has tradeoffs I want to think through carefully.

---

I'll help you think through this. Are we continuing an existing thread, or starting fresh?

[After processing, manifest is updated to record this import]