Skill: ivangdavila/notes (version 1.1.3)

--- name: Notes (Local, Apple, Notion, Obsidian & more) slug: notes version: 1.1.3 homepage: https://clawic.com/skills/notes description: "Let your agent write notes anywhere: local markdown, Apple Notes, Bear, Obsidian, Notion, Evernote, configurable per note type." changelog: Security improvements - declared optional dependencies, added explicit Scope section, clarified credential handling metadata: {"clawdbot":{"emoji":"📝","requires":{"bins":[],"bins.optional":["memo","grizzly","obsidian-cli","clinote"],"env.optional":["NOTION_API_KEY"]},"configPaths.optional":["~/.config/notion/api_key","~/.config/grizzly/token"],"os":["linux","darwin","win32"]}} --- ## Setup On first use, read `setup.md` for platform selection and integration guidelines. ## When to Use User needs to capture any type of notes: meetings, brainstorms, decisions, daily journals, or project logs. Agent handles formatting, platform routing (local or external apps), action item extraction, and retrieval across all configured platforms. ## Scope This skill ONLY: - Creates and manages markdown files in `~/notes/` - Runs user-installed CLI tools (memo, grizzly, obsidian-cli, clinote) if present and configured - Calls Notion API only when user has configured Notion integration - Reads config from `~/notes/config.md` to route notes to platforms This skill NEVER: - Installs software automatically - Accesses credential files without explicit user permission - Reads files outside `~/notes/` (except platform CLIs) - Sends data to external services unless user configures that platform - Modifies system settings or other applications ## Platform Integrations (User-Installed, Optional) This skill works 100% locally by default. External platforms require user to install tools separately: | Platform | User Installs | User Configures | Data Flow | |----------|---------------|-----------------|-----------| | Local | nothing | nothing | All local | | Apple Notes | `memo` CLI | nothing | Local (app communication) | | Bear | `grizzly` CLI | Token in `~/.config/grizzly/token` | Local (app communication) | | Obsidian | `obsidian-cli` | Vault path | Local (file-based) | | Notion | nothing | API key | Network (api.notion.com) | | Evernote | `clinote` CLI | Login via CLI | Network (Evernote servers) | **Agent behavior:** 1. Asks user which platforms they want before checking for tools 2. Only checks for CLI presence after user confirms interest 3. Falls back to local if tool unavailable 4. Never reads credential files without explicit permission per session ## Architecture Memory at `~/notes/`. See `memory-template.md` for setup. ``` ~/notes/ ├── config.md # Platform routing configuration ├── index.md # Search index with tags ├── meetings/ # Local meeting notes ├── decisions/ # Local decision log ├── projects/ # Local project notes ├── journal/ # Local daily notes └── actions.md # Central action tracker (all platforms) ``` ## Quick Reference | Topic | File | |-------|------| | Setup process | `setup.md` | | Memory template | `memory-template.md` | | All note formats | `formats.md` | | Action item system | `tracking.md` | | Local markdown | `platforms/local.md` | | Apple Notes | `platforms/apple-notes.md` | | Bear | `platforms/bear.md` | | Obsidian | `platforms/obsidian.md` | | Notion | `platforms/notion.md` | | Evernote | `platforms/evernote.md` | ## Core Rules ### 1. Route to Configured Platform Check `~/notes/config.md` for platform routing: ```markdown # Platform Routing meetings: local # or: apple-notes, bear, obsidian, notion decisions: local projects: notion journal: bear quick: apple-notes ``` If note type not configured, use `local`. If platform not available (missing CLI/credentials), fall back to local with warning. ### 2. Always Use Structured Format Every note type has a specific format regardless of platform. See `formats.md` for templates. | Note Type | Trigger | Key Elements | |-----------|---------|--------------| | Meeting | "meeting notes", "call with" | Attendees, decisions, actions | | Decision | "we decided", "decision:" | Context, options, rationale | | Brainstorm | "ideas for", "brainstorm" | Raw ideas, clusters, next steps | | Journal | "daily note", "today I" | Date, highlights, blockers | | Project | "project update", "status" | Progress, blockers, next | | Quick | "note:", "remember" | Minimal format, tags | ### 3. Extract Action Items Aggressively If someone says "I'll do X" or "we need to Y", that is an action item. Every action item MUST have: - Owner: Who is responsible (@name) - Task: Specific, actionable description - Deadline: Explicit date (not "soon" or "ASAP") Action items sync to `~/notes/actions.md` regardless of which platform holds the note. ### 4. Platform-Specific Execution After determining platform, read the corresponding file: | Platform | File | CLI | |----------|------|-----| | local | `platforms/local.md` | none | | apple-notes | `platforms/apple-notes.md` | memo | | bear | `platforms/bear.md` | grizzly | | obsidian | `platforms/obsidian.md` | obsidian-cli | | notion | `platforms/notion.md` | curl (API) | | evernote | `platforms/evernote.md` | clinote | ### 5. Unified Search Across Platforms When searching notes: 1. Search local `~/notes/` first 2. Search each configured external platform 3. Combine results with source indicators Example output: ``` Search: "product roadmap" Local: [[2026-02-19_product-sync]] - meeting, ~/notes/meetings/ Notion: "Q1 Roadmap" - page, Projects database Bear: "Roadmap Ideas" - #product #planning ``` ### 6. Cross-Platform Action Tracking `~/notes/actions.md` is the SINGLE source of truth for all action items, regardless of where the note lives. Format includes source: ```markdown | Task | Owner | Due | Source | |------|-------|-----|--------| | Review proposal | @alice | 2026-02-20 | local:[[2026-02-19_sync]] | | Update roadmap | @bob | 2026-02-22 | notion:Q1 Planning | | Draft post | @me | 2026-02-21 | bear:#content-ideas | ``` ### 7. Filename Convention (Local) For local notes: YYYY-MM-DD_topic-slug.md (date first, then topic) External platforms use their native naming/organization. ## Common Traps - Platform misconfiguration: Always verify platform is available before attempting. Fall back gracefully. - Vague deadlines: "ASAP", "soon", "next week" are not deadlines. Force explicit dates. - Missing owners: "We should do X" needs "@who will do X" - Split action tracking: Never track actions only in the external platform. Always sync to central tracker. - No retrieval tags: A note without tags is a note you will never find. ## External Endpoints | Endpoint | Data Sent | When | Purpose | |----------|-----------|------|---------| | https://api.notion.com/v1/pages | Note title, content | User configures Notion | Create pages | | https://api.notion.com/v1/databases/*/query | Search queries | User searches Notion notes | Query database | No other external endpoints. Apple Notes, Bear, Obsidian, and Evernote use local CLI tools that communicate with locally-installed apps. ## Security & Privacy **Data flow by platform:** - Local: All data stays in `~/notes/`. No network. - Apple Notes: Data stays local. `memo` CLI communicates with Notes.app via macOS APIs. - Bear: Data stays local. `grizzly` CLI communicates with Bear.app. - Obsidian: Data stays local. `obsidian-cli` reads/writes vault files. - Notion: Note content sent to api.notion.com. Requires user-provided API key. - Evernote: Note content sent to Evernote servers via `clinote`. Requires user login. **Credential handling:** - Agent asks permission before checking for credentials - Agent never reads `~/.config/notion/api_key` or `~/.config/grizzly/token` without explicit user consent - User sets up credentials themselves via platform documentation **What stays local always:** - Action items tracker: `~/notes/actions.md` - Note index: `~/notes/index.md` - Platform config: `~/notes/config.md` ## Related Skills Install with `clawhub install <slug>` if user confirms: - `meetings` — meeting facilitation and agendas - `journal` — daily journaling practice - `documentation` — technical docs ## Feedback - If useful: `clawhub star notes` - Stay updated: `clawhub sync`

path: apple-notes.md
content: # Apple Notes — Notes Platform

## Overview

Manage Apple Notes via the `memo` CLI. macOS only.

## Requirements

- macOS
- Apple Notes.app
- `memo` CLI

## Installation

```bash
brew tap antoniorodr/memo
brew install antoniorodr/memo/memo
```

First run: grant Automation access to Notes.app when prompted (System Settings > Privacy & Security > Automation).

## Common Operations

### List Notes

```bash
# All notes
memo notes

# Filter by folder
memo notes -f "Work"

# Search (fuzzy)
memo notes -s "keyword"
```

### Create Note

```bash
# Interactive (opens editor)
memo notes -a

# With title
memo notes -a "Note Title"
```

### Edit Note

```bash
# Interactive selection
memo notes -e
```

### Delete Note

```bash
# Interactive selection
memo notes -d
```

### Move Note

```bash
# Move to different folder
memo notes -m
```

### Export Note

```bash
# Export to HTML/Markdown
memo notes -ex
```

## Folder Organization

Map note types to Apple Notes folders:

| Note Type | Suggested Folder |
|-----------|-----------------|
| meetings | Meetings |
| decisions | Decisions |
| projects | Projects |
| journal | Journal |
| quick | Quick Notes |

Create folders manually in Apple Notes first.

## Limitations

- Cannot edit notes containing images/attachments via CLI
- Interactive prompts require terminal access
- No API access to note content programmatically (only via CLI)

## Creating Formatted Notes

Since `memo` uses interactive editor, prepare content first:

```bash
# Create temp file with content
cat > /tmp/note.md << 'EOF'
# Meeting: Product Sync — 2026-02-19

**Attendees:** Alice, Bob

## Key Points
- Point 1
- Point 2

## Action Items
- [ ] @alice: Update doc — Due: 2026-02-20
EOF

# Copy to clipboard
cat /tmp/note.md | pbcopy

# Then run memo and paste
memo notes -a "Product Sync 2026-02-19"
```

## Integration Notes

- Action items extracted from Apple Notes → sync to `~/notes/actions.md`
- Search results include Apple Notes with `apple-notes:` prefix
- If `memo` unavailable → fall back to local


path: bear.md
content: # Bear — Notes Platform

## Overview

Manage Bear notes via the `grizzly` CLI. macOS only.

## Requirements

- macOS
- Bear app (installed and running)
- `grizzly` CLI
- Bear API token (for some operations)

## Installation

```bash
go install github.com/tylerwince/grizzly/cmd/grizzly@latest
```

## Getting Bear Token

Some operations (add-text, tags, open-note --selected) require authentication:

1. Open Bear → Help → API Token → Copy Token
2. Save it:
```bash
mkdir -p ~/.config/grizzly
echo "YOUR_TOKEN" > ~/.config/grizzly/token
```

## Common Operations

### Create Note

```bash
# With content piped in
echo "Note content here" | grizzly create --title "My Note" --tag work

# Empty note with tags
grizzly create --title "Quick Note" --tag inbox < /dev/null

# Multiple tags
echo "Content" | grizzly create --title "Title" --tag work --tag urgent
```

### Read Note

```bash
# By ID (get ID from callbacks)
grizzly open-note --id "NOTE_ID" --enable-callback --json
```

### Append to Note

```bash
# Requires token
echo "Additional content" | grizzly add-text --id "NOTE_ID" --mode append --token-file ~/.config/grizzly/token
```

### List Tags

```bash
# Requires token
grizzly tags --enable-callback --json --token-file ~/.config/grizzly/token
```

### Search by Tag

```bash
grizzly open-tag --name "work" --enable-callback --json
```

## Tag Organization

Map note types to Bear tags:

| Note Type | Suggested Tags |
|-----------|---------------|
| meetings | #meetings, #meetings/YYYY-MM |
| decisions | #decisions |
| projects | #projects, #projects/name |
| journal | #journal, #journal/YYYY-MM |
| quick | #inbox |

## Configuration

Create `~/.config/grizzly/config.toml`:

```toml
token_file = "~/.config/grizzly/token"
callback_url = "http://127.0.0.1:42123/success"
timeout = "5s"
```

## Important Flags

| Flag | Purpose |
|------|---------|
| `--dry-run` | Preview URL without executing |
| `--print-url` | Show the x-callback-url |
| `--enable-callback` | Wait for Bear's response (needed for reading) |
| `--json` | Output as JSON |
| `--token-file PATH` | Path to API token |

## Creating Formatted Notes

```bash
# Prepare markdown content
cat << 'EOF' | grizzly create --title "Meeting: Product Sync" --tag meetings --tag product
# Product Sync — 2026-02-19

**Attendees:** Alice, Bob

## Key Points
- Point 1
- Point 2

## Action Items
- [ ] @alice: Update doc — Due: 2026-02-20
EOF
```

## Limitations

- Bear must be running for commands to work
- Note IDs are Bear's internal identifiers
- Some operations require valid token
- No direct content editing via CLI (append only)

## Integration Notes

- Action items extracted from Bear → sync to `~/notes/actions.md`
- Search results include Bear with `bear:#tag/Title` format
- If `grizzly` unavailable or Bear not running → fall back to local


path: evernote.md
content: # Evernote — Notes Platform

## Overview

Manage Evernote notes via the `clinote` CLI. Cross-platform.

## Requirements

- Evernote account
- `clinote` CLI

## Installation

```bash
go install github.com/TcM1911/clinote@latest
```

## Authentication

First run will prompt for Evernote credentials:

```bash
clinote login
```

This stores auth token locally.

## Common Operations

### List Notebooks

```bash
clinote notebook list
```

### List Notes

```bash
# All notes
clinote note list

# In specific notebook
clinote note list --notebook "Work"
```

### Create Note

```bash
# Create with title and content
clinote note create --title "Meeting Notes" --content "Content here" --notebook "Work"

# Create from file
clinote note create --title "My Note" --file note.md --notebook "Work"
```

### View Note

```bash
clinote note view --title "Meeting Notes"
```

### Search Notes

```bash
clinote note search "keyword"
```

### Delete Note

```bash
clinote note delete --title "Old Note"
```

## Notebook Organization

Map note types to Evernote notebooks:

| Note Type | Suggested Notebook |
|-----------|-------------------|
| meetings | Meetings |
| decisions | Decisions |
| projects | Projects |
| journal | Journal |
| quick | Inbox |

Create notebooks in Evernote first.

## Creating Formatted Notes

```bash
# Prepare markdown content
cat > /tmp/note.md << 'EOF'
# Product Sync — 2026-02-19

**Attendees:** Alice, Bob

## Key Points
- Point 1
- Point 2

## Action Items
- [ ] @alice: Update doc — Due: 2026-02-20
EOF

# Create in Evernote
clinote note create --title "Product Sync 2026-02-19" --file /tmp/note.md --notebook "Meetings"
```

## Limitations

- CLI functionality may be limited compared to native app
- Some formatting may not transfer perfectly
- Requires Go installation for CLI

## Integration Notes

- Action items extracted from Evernote → sync to `~/notes/actions.md`
- Search results include Evernote with `evernote:Note Title` format
- If `clinote` unavailable → fall back to local


path: formats.md
content: # Note Formats — Notes

## Meeting Notes

```markdown
---
date: YYYY-MM-DD
type: meeting
title: [Meeting Title]
tags: [topic1, topic2]
attendees: [name1, name2, name3]
duration: XX min
---

# Meeting: [Title] — YYYY-MM-DD

**Time:** HH:MM - HH:MM | **Duration:** XX min
**Facilitator:** [Name]
**Attendees:** Name1, Name2, Name3

## 🎯 Meeting Goal
[One sentence — what was this meeting supposed to achieve?]

## 📝 Key Discussion Points
- Point 1
- Point 2
- Point 3

## ✅ Decisions Made
- [DECISION] **Topic:** Decision text — *Owner:* @name | *Effective:* date
- [DECISION] **Topic:** Decision text — *Owner:* @name | *Effective:* date

## ⚡ Action Items
| # | Task | Owner | Due | Status |
|---|------|-------|-----|--------|
| 1 | [Task description] | @name | YYYY-MM-DD | ⬜ |
| 2 | [Task description] | @name | YYYY-MM-DD | ⬜ |

## ❓ Open Questions
- Question 1 — *Needs input from:* @name
- Question 2 — *Needs input from:* @name

## 🅿️ Parking Lot
- Topic deferred to future discussion

## 📊 Meeting Effectiveness: [X/10]
□ Clear agenda beforehand
□ Started/ended on time
□ Decisions were made
□ Actions have owners + deadlines
□ Could NOT have been an email

## 📎 Related Notes
- [[YYYY-MM-DD_previous-meeting]]
```

---

## Decision Log Entry

```markdown
---
date: YYYY-MM-DD
type: decision
title: [Decision Title]
tags: [domain, impact-area]
status: active | superseded
---

# [DECISION] Title — YYYY-MM-DD

## Context
Why was this decision needed? What problem does it solve?

## Options Considered

### Option A: [Name]
- ✅ Pro 1
- ✅ Pro 2
- ❌ Con 1

### Option B: [Name]
- ✅ Pro 1
- ❌ Con 1
- ❌ Con 2

### Option C: [Name]
- ✅ Pro 1
- ✅ Pro 2
- ❌ Con 1

## Decision
**Chosen:** Option [X]

## Rationale
Why this option was selected over alternatives.

## Implementation
- **Owner:** @name
- **Effective Date:** YYYY-MM-DD
- **Review Date:** YYYY-MM-DD (optional)

## Dependencies
- Depends on: [[related-decision]]
- Blocks: [[future-decision]]

## Reversal
- [REVERSES] [[previous-decision]] — if this supersedes a prior decision
```

---

## Brainstorm Notes

```markdown
---
date: YYYY-MM-DD
type: brainstorm
title: [Topic]
tags: [domain, project]
participants: [name1, name2]
---

# Brainstorm: [Topic] — YYYY-MM-DD

**Participants:** Name1, Name2, Name3
**Duration:** XX min
**Goal:** [What are we trying to generate ideas for?]

## 💡 Raw Ideas
1. Idea one
2. Idea two
3. Idea three
4. Idea four
5. Idea five
[No filtering during capture — quantity over quality]

## 🎯 Clusters
Group related ideas:

### Cluster A: [Theme]
- Idea 1
- Idea 4

### Cluster B: [Theme]
- Idea 2
- Idea 3

### Cluster C: [Theme]
- Idea 5

## ⭐ Top 3 to Explore
1. **[Idea]** — Why: [rationale]
2. **[Idea]** — Why: [rationale]
3. **[Idea]** — Why: [rationale]

## ⚡ Next Steps
| Action | Owner | Due |
|--------|-------|-----|
| Research idea 1 | @name | YYYY-MM-DD |
| Prototype idea 2 | @name | YYYY-MM-DD |
```

---

## Daily Journal

```markdown
---
date: YYYY-MM-DD
type: journal
mood: [emoji]
energy: [1-10]
---

# Daily Note — YYYY-MM-DD

## 🌅 Morning Intention
What do I want to accomplish today?

## ✅ Completed
- [x] Task 1
- [x] Task 2

## 🚧 In Progress
- [ ] Task 3 — blocked by X

## 💡 Insights
- Learning or realization

## 🙏 Gratitude
- Something I'm grateful for

## 📝 Notes
Free-form thoughts, ideas, observations.

## 🎯 Tomorrow
Top 3 priorities for tomorrow:
1. Priority 1
2. Priority 2
3. Priority 3
```

---

## Project Update

```markdown
---
date: YYYY-MM-DD
type: project-update
project: [Project Name]
tags: [project-slug]
status: on-track | at-risk | blocked
---

# Project Update: [Name] — YYYY-MM-DD

**Status:** 🟢 On Track | 🟡 At Risk | 🔴 Blocked
**Progress:** [X]% complete
**Next Milestone:** [Milestone] — Due: YYYY-MM-DD

## ✅ Completed This Period
- Accomplishment 1
- Accomplishment 2

## 🚧 In Progress
- [ ] Task 1 (XX% done)
- [ ] Task 2 (XX% done)

## 🚨 Blockers
- Blocker 1 — *Waiting on:* @name
- Blocker 2 — *Needs:* [resource/decision]

## ⚠️ Risks
| Risk | Likelihood | Impact | Mitigation |
|------|------------|--------|------------|
| Risk 1 | High/Med/Low | High/Med/Low | Plan |

## 📊 Metrics
| Metric | Target | Actual | Status |
|--------|--------|--------|--------|
| Metric 1 | X | Y | 🟢/🟡/🔴 |

## ⚡ Next Actions
| Action | Owner | Due |
|--------|-------|-----|
| Action 1 | @name | YYYY-MM-DD |
```

---

## Quick Note (Minimal Format)

For rapid capture when full structure isn't needed:

```markdown
---
date: YYYY-MM-DD HH:MM
type: quick
tags: [tag1, tag2]
---

# Quick Note — YYYY-MM-DD HH:MM

[Content]

**Actions:** (if any)
- [ ] @owner: task — due: date
```

---

## 1-on-1 Meeting

```markdown
---
date: YYYY-MM-DD
type: 1on1
with: [Person Name]
tags: [1on1, person-name]
---

# 1-on-1: [Person Name] — YYYY-MM-DD

## 🔄 Since Last Time
- Status of previous action items

## 📋 Their Topics
- Topic they want to discuss

## 📋 My Topics
- Topic I want to discuss

## 💬 Discussion Notes
[Free-form notes from conversation]

## ⚡ Action Items
| Task | Owner | Due |
|------|-------|-----|
| Task 1 | @them | date |
| Task 2 | @me | date |

## 📅 Next 1-on-1
Date: YYYY-MM-DD
```


path: local.md
content: # Local Markdown — Notes Platform

## Overview

Local notes are plain markdown files in `~/notes/`. No CLI required, works on all systems.

## File Structure

```
~/notes/
├── config.md         # Platform config
├── index.md          # Search index
├── actions.md        # Action tracker
├── meetings/         # YYYY-MM-DD_topic.md
├── decisions/        # YYYY-MM-DD_topic.md
├── projects/         # YYYY-MM-DD_topic.md
├── journal/          # YYYY-MM-DD.md
└── quick/            # YYYY-MM-DD_HH-MM_topic.md
```

## Naming Convention

| Type | Format | Example |
|------|--------|---------|
| Meeting | `YYYY-MM-DD_topic-slug.md` | `2026-02-19_product-sync.md` |
| Decision | `YYYY-MM-DD_topic-slug.md` | `2026-02-19_pricing-model.md` |
| Project | `YYYY-MM-DD_topic-slug.md` | `2026-02-19_q1-update.md` |
| Journal | `YYYY-MM-DD.md` | `2026-02-19.md` |
| Quick | `YYYY-MM-DD_HH-MM_topic.md` | `2026-02-19_14-30_call-sarah.md` |

## Creating Notes

```bash
# Meeting
touch ~/notes/meetings/$(date +%Y-%m-%d)_topic.md

# Journal
touch ~/notes/journal/$(date +%Y-%m-%d).md

# Quick
touch ~/notes/quick/$(date +%Y-%m-%d_%H-%M)_topic.md
```

## Searching

**By filename:**
```bash
ls ~/notes/meetings/ | grep "product"
```

**By content:**
```bash
grep -r "keyword" ~/notes/
```

**By tag (in frontmatter):**
```bash
grep -l "tags:.*product" ~/notes/**/*.md
```

## Index Maintenance

After creating/modifying notes, update `~/notes/index.md`:
1. Add to Recent Notes section
2. Update tag counts
3. Update people index if new attendees

## Advantages

- No dependencies
- Works offline
- Version control friendly (git)
- Portable across systems
- Fast searching with grep/ripgrep

## When to Use Local

- Default for all note types
- When portability matters
- When you want git version control
- When other platforms aren't available


path: memory-template.md
content: # Memory Setup — Notes

## Initial Setup

Create directory structure on first use:

```bash
mkdir -p ~/notes/{meetings,decisions,projects,journal,quick}
touch ~/notes/index.md
touch ~/notes/actions.md
touch ~/notes/config.md
```

---

## config.md Template

Copy to `~/notes/config.md`:

```markdown
# Notes Platform Configuration

**Last updated:** YYYY-MM-DD

## Platform Routing

Which platform to use for each note type. Options: local, apple-notes, bear, obsidian, notion

| Note Type | Platform | Fallback |
|-----------|----------|----------|
| meetings | local | — |
| decisions | local | — |
| projects | local | — |
| journal | local | — |
| quick | local | — |

## Platform Status

### Local (always available)
- **Status:** ✅ Available
- **Path:** ~/notes/

### Apple Notes (macOS only)
- **Status:** ⬜ Not configured
- **CLI:** memo
- **Install:** `brew tap antoniorodr/memo && brew install memo`

### Bear (macOS only)
- **Status:** ⬜ Not configured
- **CLI:** grizzly
- **Install:** `go install github.com/tylerwince/grizzly/cmd/grizzly@latest`
- **Token:** ⬜ Not set (needed for some operations)
- **Token path:** ~/.config/grizzly/token

### Obsidian
- **Status:** ⬜ Not configured
- **CLI:** obsidian-cli
- **Install:** `brew install yakitrak/yakitrak/obsidian-cli`
- **Default vault:** Not set

### Notion
- **Status:** ⬜ Not configured
- **API Key:** ⬜ Not set
- **Key path:** ~/.config/notion/api_key
- **Setup:** https://notion.so/my-integrations

### Evernote
- **Status:** ⬜ Not configured
- **CLI:** clinote
- **Install:** `go install github.com/TcM1911/clinote@latest`
- **Auth:** `clinote login`

## Notes

- Change routing anytime by editing this file
- If a platform becomes unavailable, notes fall back to local
- Action items always sync to ~/notes/actions.md regardless of platform
```

---

## index.md Template

Copy to `~/notes/index.md`:

```markdown
# Notes Index

**Last updated:** YYYY-MM-DD

## 📁 Structure

```
~/notes/
├── config.md       # Platform routing
├── index.md        # This file
├── actions.md      # Action items (all platforms)
├── meetings/       # Meeting notes
├── decisions/      # Decision log
├── projects/       # Project updates
├── journal/        # Daily notes
└── quick/          # Quick captures
```

## 🏷️ Tags Index

| Tag | Count | Recent | Platform |
|-----|-------|--------|----------|
| #product | 0 | — | — |
| #engineering | 0 | — | — |

## 👥 People Index

| Person | Notes | Last |
|--------|-------|------|
| — | 0 | — |

## 📅 Recent Notes

### This Week
*No notes yet*

### External Platforms
*Configure platforms in config.md to see notes from Apple Notes, Bear, Obsidian, or Notion*

## 🔍 Quick Search

Common queries:
- Meetings with @alice: `type:meeting attendees:alice`
- Product decisions: `type:decision tags:product`
- This month's journals: `type:journal date:2026-02`
- Cross-platform: `platform:notion type:project`

---
*Update this index when adding notes with new tags or people.*
```

---

## actions.md Template

Copy to `~/notes/actions.md`:

```markdown
# Action Items Tracker

**Last updated:** YYYY-MM-DD HH:MM

## 🔴 Overdue

| # | Action | Owner | Due | Source | Days Late |
|---|--------|-------|-----|--------|-----------|
| — | *None* | — | — | — | — |

## 🟡 Due This Week

| # | Action | Owner | Due | Source |
|---|--------|-------|-----|--------|
| — | *None* | — | — | — |

## 🟢 Upcoming

| # | Action | Owner | Due | Source |
|---|--------|-------|-----|--------|
| — | *None* | — | — | — |

## ✅ Recently Completed

| # | Action | Owner | Completed | Source |
|---|--------|-------|-----------|--------|
| — | *None* | — | — | — |

---

## 📊 Stats

- **Total open:** 0
- **Overdue:** 0
- **Completion rate (7d):** —%

## Source Format

Sources indicate where the original note lives:
- `local:[[filename]]` — Local markdown file
- `apple-notes:Note Title` — Apple Notes
- `bear:#tag/Note Title` — Bear
- `obsidian:[[Note]]` — Obsidian vault
- `notion:Page Name` — Notion

---
*Synced from all platforms. Action items always tracked here regardless of note location.*
```

---

## Sample Meeting Note (Local)

Example file `~/notes/meetings/2026-02-19_product-sync.md`:

```markdown
---
date: 2026-02-19
type: meeting
title: Product Sync
tags: [product, roadmap]
attendees: [alice, bob, carol]
duration: 30 min
platform: local
---

# Meeting: Product Sync — 2026-02-19

**Time:** 10:00 - 10:30 | **Duration:** 30 min
**Facilitator:** Alice
**Attendees:** Alice, Bob, Carol

## 🎯 Meeting Goal
Align on Q1 priorities and blockers.

## 📝 Key Discussion Points
- Feature X is behind schedule
- Customer feedback on Y is positive
- Need decision on Z approach

## ✅ Decisions Made
- [DECISION] **Feature X scope:** Cut advanced mode for v1 — *Owner:* @alice | *Effective:* 2026-02-19

## ⚡ Action Items
| # | Task | Owner | Due | Status |
|---|------|-------|-----|--------|
| 1 | Update roadmap doc | @alice | 2026-02-20 | ⬜ |
| 2 | Notify stakeholders | @bob | 2026-02-20 | ⬜ |

## 📊 Meeting Effectiveness: 8/10
☑ Clear agenda beforehand
☑ Started/ended on time
☑ Decisions were made
☑ Actions have owners + deadlines
☑ Could NOT have been an email
```


path: notion.md
content: # Notion — Notes Platform

## Overview

Manage Notion pages and databases via REST API. Cross-platform.

## Requirements

- Notion account
- Notion integration (API key)

## Setup

### 1. Create Integration

1. Go to https://notion.so/my-integrations
2. Click "New integration"
3. Name it (e.g., "Notes Agent")
4. Copy the API key (starts with `ntn_` or `secret_`)

### 2. Store API Key

```bash
mkdir -p ~/.config/notion
echo "ntn_your_key_here" > ~/.config/notion/api_key
chmod 600 ~/.config/notion/api_key
```

### 3. Share Pages with Integration

For each page/database you want to access:
1. Open in Notion
2. Click "..." menu → "Connect to"
3. Select your integration name

## API Basics

All requests:

```bash
NOTION_KEY=$(cat ~/.config/notion/api_key)

curl -X GET "https://api.notion.com/v1/..." \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json"
```

## Common Operations

### Search

```bash
curl -X POST "https://api.notion.com/v1/search" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{"query": "product roadmap"}'
```

### Get Page

```bash
curl "https://api.notion.com/v1/pages/{page_id}" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03"
```

### Get Page Content (Blocks)

```bash
curl "https://api.notion.com/v1/blocks/{page_id}/children" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03"
```

### Create Page

**In a database:**
```bash
curl -X POST "https://api.notion.com/v1/pages" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{
    "parent": {"database_id": "xxx"},
    "properties": {
      "Name": {"title": [{"text": {"content": "Meeting: Product Sync"}}]},
      "Date": {"date": {"start": "2026-02-19"}},
      "Type": {"select": {"name": "Meeting"}}
    }
  }'
```

**As child of page:**
```bash
curl -X POST "https://api.notion.com/v1/pages" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{
    "parent": {"page_id": "xxx"},
    "properties": {
      "title": {"title": [{"text": {"content": "Meeting Notes"}}]}
    }
  }'
```

### Add Content to Page

```bash
curl -X PATCH "https://api.notion.com/v1/blocks/{page_id}/children" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{
    "children": [
      {"type": "heading_2", "heading_2": {"rich_text": [{"text": {"content": "Key Points"}}]}},
      {"type": "bulleted_list_item", "bulleted_list_item": {"rich_text": [{"text": {"content": "Point 1"}}]}},
      {"type": "to_do", "to_do": {"rich_text": [{"text": {"content": "@alice: Update doc"}}], "checked": false}}
    ]
  }'
```

### Query Database

```bash
curl -X POST "https://api.notion.com/v1/data_sources/{data_source_id}/query" \
  -H "Authorization: Bearer $NOTION_KEY" \
  -H "Notion-Version: 2025-09-03" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": {"property": "Type", "select": {"equals": "Meeting"}},
    "sorts": [{"property": "Date", "direction": "descending"}]
  }'
```

## Property Types

| Type | Format |
|------|--------|
| Title | `{"title": [{"text": {"content": "..."}}]}` |
| Rich text | `{"rich_text": [{"text": {"content": "..."}}]}` |
| Select | `{"select": {"name": "Option"}}` |
| Multi-select | `{"multi_select": [{"name": "A"}, {"name": "B"}]}` |
| Date | `{"date": {"start": "2026-02-19"}}` |
| Checkbox | `{"checkbox": true}` |
| Number | `{"number": 42}` |

## Recommended Database Schema

For notes tracking:

| Property | Type | Options |
|----------|------|---------|
| Name | Title | — |
| Type | Select | Meeting, Decision, Project, Journal, Quick |
| Date | Date | — |
| Tags | Multi-select | product, engineering, etc. |
| Status | Select | Draft, Active, Archived |

## Block Types for Notes

| Block | Purpose |
|-------|---------|
| `heading_1/2/3` | Section headers |
| `paragraph` | Body text |
| `bulleted_list_item` | Key points |
| `numbered_list_item` | Ordered lists |
| `to_do` | Action items (with checkbox) |
| `callout` | Highlights, warnings |
| `divider` | Section breaks |

## Rate Limits

- ~3 requests/second average
- Batch operations when possible

## Integration Notes

- Action items (`to_do` blocks) extracted → sync to `~/notes/actions.md`
- Search results include Notion with `notion:Page Name` format
- If API key not configured → fall back to local
- Data leaves machine (sent to Notion API)


path: obsidian.md
content: # Obsidian — Notes Platform

## Overview

Work with Obsidian vaults (plain markdown) via `obsidian-cli`. Cross-platform.

## Requirements

- Obsidian app installed
- `obsidian-cli`

## Installation

```bash
brew install yakitrak/yakitrak/obsidian-cli
```

## Vault Configuration

Obsidian tracks vaults in:
- macOS: `~/Library/Application Support/obsidian/obsidian.json`

### Set Default Vault

```bash
# List available vaults
obsidian-cli print-default

# Set default
obsidian-cli set-default "VaultName"

# Get vault path
obsidian-cli print-default --path-only
```

## Common Operations

### Search

```bash
# By note name
obsidian-cli search "query"

# By content (shows snippets + lines)
obsidian-cli search-content "query"
```

### Create Note

```bash
# Create and optionally open in Obsidian
obsidian-cli create "Folder/Note Name" --content "Content here" --open

# Create without opening
obsidian-cli create "Meetings/2026-02-19 Product Sync" --content "..."
```

### Move/Rename (Safe Refactor)

```bash
# Updates [[wikilinks]] across vault
obsidian-cli move "old/path/note" "new/path/note"
```

### Delete

```bash
obsidian-cli delete "path/note"
```

## Folder Organization

Typical vault structure for notes:

```
MyVault/
├── Meetings/
│   └── YYYY-MM-DD Topic.md
├── Decisions/
│   └── YYYY-MM-DD Topic.md
├── Projects/
│   └── ProjectName/
│       └── Updates/
├── Journal/
│   └── YYYY/
│       └── MM/
│           └── YYYY-MM-DD.md
└── Inbox/
    └── Quick captures
```

## Creating Formatted Notes

```bash
# Prepare content
CONTENT=$(cat << 'EOF'
---
date: 2026-02-19
type: meeting
tags: [product, roadmap]
attendees: [alice, bob]
---

# Product Sync — 2026-02-19

## Key Points
- Point 1
- Point 2

## Action Items
- [ ] @alice: Update doc — Due: 2026-02-20
EOF
)

# Create in vault
obsidian-cli create "Meetings/2026-02-19 Product Sync" --content "$CONTENT"
```

## Direct File Editing

Since Obsidian vaults are plain markdown folders, you can:

```bash
# Get vault path
VAULT=$(obsidian-cli print-default --path-only)

# Edit directly
nano "$VAULT/Meetings/2026-02-19 Product Sync.md"

# Obsidian picks up changes automatically
```

## Wikilinks

Obsidian uses `[[wikilinks]]` for internal linking:

```markdown
See [[2026-02-15 Kickoff Meeting]] for context.
Related: [[Projects/Alpha/Roadmap]]
```

Use `obsidian-cli move` when renaming to preserve links.

## Limitations

- URI handler requires Obsidian installed
- Avoid creating notes in hidden dot-folders via URI
- Multiple vaults common — always verify which vault is active

## Integration Notes

- Action items extracted from Obsidian notes → sync to `~/notes/actions.md`
- Search results include Obsidian with `obsidian:[[Note]]` format
- If `obsidian-cli` unavailable → fall back to local
- Can edit vault files directly without CLI


path: setup.md
content: # Setup — Notes

Read this when `~/notes/` doesn't exist or `~/notes/config.md` is missing.

## First Use

On first use, the skill will:
1. Create `~/notes/` directory structure
2. Create `~/notes/config.md` with default routing (all to local)
3. Ask the user about their preferred platforms

**Always inform the user** what files are being created and where.

## Setup Conversation

### 1. Understand Their Preferences

Ask open questions:
- "How do you currently take notes? Quick thoughts, meetings, journals?"
- "Any apps you already use? Apple Notes, Bear, Obsidian, Notion?"
- "Want me to help with notes whenever you mention meetings or ideas, or only when you ask?"

### 2. Configure Platform Routing

Based on their answers, suggest routing and **confirm before saving**:

```
Based on what you said, here's what I suggest:
- Meetings → Notion
- Journal → Bear  
- Everything else → local files

I'll save this to ~/notes/config.md. Sound good?
```

Wait for confirmation before writing config.

### 3. Check Platform Requirements

**Only if they want to use external platforms:**

| Platform | Requirement | Check |
|----------|-------------|-------|
| Apple Notes | `memo` CLI | `which memo` |
| Bear | `grizzly` CLI + token | `which grizzly` |
| Obsidian | `obsidian-cli` + vault | `which obsidian-cli` |
| Notion | API key | `~/.config/notion/api_key` |
| Evernote | `clinote` CLI | `which clinote` |

If a platform isn't set up, offer to help configure it or route to local instead.

## Files Created

This skill creates and manages:

```
~/notes/
├── config.md      # Platform routing configuration
├── index.md       # Note index with tags
├── actions.md     # Action items tracker
├── meetings/      # Meeting notes
├── decisions/     # Decision log
├── projects/      # Project notes
├── journal/       # Daily notes
└── quick/         # Quick captures
```

**Always tell the user** when creating new files or directories.

## Platform Credentials

If user wants external platform integration, they need to set up credentials themselves:

- **Notion**: User creates API key at notion.so/my-integrations
- **Bear**: User sets up token via Bear app (Help → API Token)

**Never assume credentials are configured.** Always ask the user before attempting to use external platforms. If not set up, route to local.

## Activation Preferences

Ask the user how they want the skill to activate:
- "Only when I explicitly ask for notes"
- "Whenever I mention meetings, decisions, or ideas"
- "Proactively remind me about overdue action items"

Save their preference in `~/notes/config.md` under a `## Preferences` section.

## Graceful Fallback

If a configured platform becomes unavailable:
1. Save to local instead
2. Inform the user: "Bear wasn't available, saved locally to ~/notes/quick/"


path: tracking.md
content: # Action Item Tracking — Notes

## Central Tracker: `~/notes/actions.md`

Single source of truth for all action items across all notes.

```markdown
# Action Items Tracker

**Last updated:** YYYY-MM-DD HH:MM

## 🔴 Overdue

| # | Action | Owner | Due | Source | Days Late |
|---|--------|-------|-----|--------|-----------|
| 1 | [Task] | @name | YYYY-MM-DD | [[note-link]] | X days |

## 🟡 Due This Week

| # | Action | Owner | Due | Source |
|---|--------|-------|-----|--------|
| 1 | [Task] | @name | YYYY-MM-DD | [[note-link]] |

## 🟢 Upcoming

| # | Action | Owner | Due | Source |
|---|--------|-------|-----|--------|
| 1 | [Task] | @name | YYYY-MM-DD | [[note-link]] |

## ✅ Recently Completed

| # | Action | Owner | Completed | Source |
|---|--------|-------|-----------|--------|
| 1 | [Task] | @name | YYYY-MM-DD | [[note-link]] |

---
*Auto-generated from notes. Run "update actions" to refresh.*
```

---

## Tracking Rules

### 1. Sync on Every Note
After creating any note with action items:
1. Add new items to `actions.md`
2. Include source link `[[YYYY-MM-DD_note-name]]`
3. Set status based on due date

### 2. Status Definitions

| Status | Criteria | Action |
|--------|----------|--------|
| 🔴 OVERDUE | Due date passed | Escalate or reschedule |
| 🟡 DUE SOON | Within 3 days | Prioritize |
| 🟢 UPCOMING | More than 3 days | Track |
| ✅ DONE | Completed | Move to completed section |
| ⏸️ BLOCKED | Waiting on dependency | Note blocker |

### 3. Daily Review Prompt
When user starts day or asks for status:

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 ACTION ITEMS — YYYY-MM-DD
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🔴 OVERDUE (X items)
1. [Task] — was due YYYY-MM-DD (X days ago)
   Source: [[note-link]]

🟡 DUE TODAY/THIS WEEK (X items)
1. [Task] — due YYYY-MM-DD
   Source: [[note-link]]

📊 Summary: X overdue | Y due soon | Z upcoming
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

### 4. Completing Items
When user marks item done:

```
✅ Marked complete: [Task]
   Originally from: [[YYYY-MM-DD_meeting-name]]
   Completed: YYYY-MM-DD

📋 Remaining: X overdue | Y due soon | Z upcoming
```

### 5. Rescheduling
When deadline needs to change:

```
📅 Rescheduled: [Task]
   Original due: YYYY-MM-DD
   New due: YYYY-MM-DD
   Reason: [brief note]
```

---

## Owner Tracking

### By Person View
Generate on request:

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
👤 @alice — 5 open items
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔴 Review proposal — was due Feb 15
🟡 Send feedback — due Feb 20
🟢 Schedule call — due Feb 25
🟢 Draft report — due Mar 1
🟢 Plan Q2 — due Mar 15
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

### My Items Filter
For personal focus:

```
"Show my action items"
→ Filter actions.md for @me or user's name
→ Display grouped by status
```

---

## Escalation Rules

### Auto-Escalation Triggers

| Condition | Action |
|-----------|--------|
| 1 day overdue | Add ⚠️ flag |
| 3 days overdue | Add 🚨 flag, suggest follow-up |
| 7 days overdue | Suggest reschedule or cancel |

### Follow-Up Prompts

```
🚨 Item overdue by 3+ days:
   "[Task]" — @owner — was due YYYY-MM-DD

   Options:
   1. "done" — Mark complete
   2. "reschedule [date]" — New deadline
   3. "blocked [reason]" — Mark blocked
   4. "cancel" — Remove item
```

---

## Weekly Review

Generate on request or every Monday:

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 WEEKLY ACTION REVIEW — Week of YYYY-MM-DD
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✅ COMPLETED THIS WEEK: X items
   - [Task 1] — completed Mon
   - [Task 2] — completed Wed

📈 COMPLETION RATE: X%
   (X of Y items due this week)

🔴 CARRIED OVER: X items
   - [Task] — now X days overdue

🎯 DUE NEXT WEEK: X items
   - [Task 1] — Mon
   - [Task 2] — Wed
   - [Task 3] — Fri

👤 BY OWNER:
   @alice: 3 done, 2 pending
   @bob: 1 done, 4 pending
   @me: 5 done, 1 pending
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

---

## Integration Commands

| Command | Action |
|---------|--------|
| "show actions" | Display current action items |
| "my actions" | Filter to user's items |
| "overdue" | Show only overdue items |
| "due this week" | Show items due in 7 days |
| "@name actions" | Show items for specific person |
| "update actions" | Rescan all notes, rebuild tracker |
| "weekly review" | Generate weekly summary |


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (CRITICAL)