Install
$ agentstack add skill-gregthegreek-claude-obsidian-apple-notes-import ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
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:
{
"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:
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:
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:
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:
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:
- Check if note name exists in manifest
- If exists, compare modification date
- 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:
- Strip HTML tags:
sed 's/]*>//g' - Decode common HTML entities:
sed 's/ / /g; s/&/\&/g; s/<//g; s/"/"/g' - Find @tags:
grep -oE '@[a-zA-Z]+'
Present notes grouped by status:
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:
| Tag | Action | |-----|--------| | @thinking | Launch thinking-partner agent with note as context | | @write | Launch writing_critic agent with note content | | @research | Inform 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:
- Ensure directory exists:
mkdir -p ~/.claude/data - Add/update the note entry with current timestamp and modification date
- 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
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]
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: GregTheGreek
- Source: GregTheGreek/claude-obsidian
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.