# Altoindex

> Use when the user asks about their personal data, Apple Notes, Reminders, Calendar, Contacts, Messages, Safari bookmarks or history, Voice Memos, or Granola meetings. Also use when the user references alto.index or alto-index data.

- Skill: `systemoperators/altoindex` (Agent Skill)
- Install (CLI): `npx skillmds@latest add systemoperators/altoindex`
- Raw SKILL.md: https://api.skillmd.com/api/skills/systemoperators/altoindex/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: systemoperators (https://skillmd.com/u/systemoperators)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/systemoperators/altoindex

---


# alto.index Data

alto.index is a macOS app that syncs data from Apple apps to `~/Documents/alto-index/` as markdown files. This skill teaches you how to work with the synced data.

## Base Path

All data lives in `~/Documents/alto-index/`. Each data source has its own subfolder with a `CLAUDE.md` containing source-specific details. Always read the relevant `CLAUDE.md` first when working with a source you haven't seen yet.

## Native App Links

Most exported files contain deep links back to the original item in the native macOS app. When referencing any item, always include the native link so the user can click through to the source app. The link is typically in the frontmatter `link` or `source` field, or at the bottom of the file body. Supported link schemes: `notes://`, `x-apple-reminder://`, `addressbook://`, `calshow:`.

## Data Sources

### notes/

Apple Notes exported as markdown files.

- path: `notes/{folder}/{title}.md`
- folders match Apple Notes folder names, nested folders supported
- frontmatter: title, id, created, modified, folder, attachments, links, source
- deep link: `notes://showNote?identifier={uuid}` (in `source` field)
- body contains the note content in markdown, with a link back to the original note at the bottom

### reminders/

Apple Reminders (active/non-completed only).

- path: `reminders/{list}/{title}.md`
- lists match Apple Reminders list names
- frontmatter: title, reminder_id, list, priority (none/low/medium/high), flagged, url, images, created_date, modified_date, link
- deep link: `x-apple-reminder://{reminder_id}` (in `link` field)
- body may contain URLs and images sections

### calendar/

Apple Calendar events.

- path: `calendar/{calendar-name}/{YYYY-MM-DD}/{event}.md`
- organized by calendar name, then by date
- frontmatter: title, event_id, calendar, start_date, end_date, all_day, location, url, organizer, attendees (list with name/status/role), status, availability, alarms, recurrence, created_date, modified_date, link
- deep link: `calshow:{timeIntervalSinceReferenceDate}` (in `link` field)
- body includes time/location info, notes, and attendee list

### messages/

iMessage conversations.

- path: `messages/{contact-or-group-name}.md`
- one file per conversation (individual or group chat)
- frontmatter: title, chat_id, participants (array), is_group, message_count, first_message, last_message
- messages are in chronological order within each file
- contact names resolved from Contacts when available (shows "Name (phone/email)")
- attachments noted inline where media was sent

### contacts/

Apple Contacts.

- path: `contacts/{name}.md`
- flat folder, no subfolders
- frontmatter: title, contact_id, link, last_modified
- deep link: `addressbook://{contact_id}` (in `link` field)
- body contains structured sections: phone numbers, email addresses, physical addresses, birthdays, notes, social profiles
- use contacts to resolve names in messages and calendar events

### safari-bookmarks/

Safari bookmarks as markdown lists.

- path: `safari-bookmarks/{folder}.md`
- each Safari bookmark folder exported as a separate markdown file
- no frontmatter - content is markdown lists with clickable links
- nested folders represented as subsections with ## headings

### safari-history/

Safari browsing history grouped by day and hour.

- path: `safari-history/{YYYY-MM-DD}.md`
- one file per day
- no frontmatter - starts with `# Safari History - {date}` and total visit count
- grouped by hour (## HH:00 - HH:59 headings), latest first
- each entry: time, linked title, visit count if > 1

### voice-memos/

Voice Memos recordings.

- path: `voice-memos/index.md` (table of all recordings) + `.m4a` audio files
- index.md contains a markdown table with columns: Recording, Date, Duration, Size, Link
- audio files are in `.m4a` format alongside the index
- no frontmatter on individual files - the index is the main entry point

### granola/

Granola meeting notes.

- path: `granola/{YYYY-MM-DD}-{title}.md`
- flat folder with date-prefixed files
- no frontmatter - content starts with `# title` heading
- contains: meeting title, date, participants, overview, AI summary, your notes, full transcript
- `granola/index.md` lists all meetings

### Not yet available

- `mail/` - Apple Mail (coming soon, placeholder only)
- `screenshots/` - Screenshots (coming soon, placeholder only)

## Working with the Data

### Reading data
- use Glob to find files: `~/Documents/alto-index/notes/**/*.md`
- use Grep to search across sources: search in `~/Documents/alto-index/`
- read individual files with Read tool
- always check for a CLAUDE.md in the subfolder for source-specific guidance

### Cross-referencing
- contact names in reminders/calendar/messages can be resolved via contacts/
- dates can be cross-referenced across calendar, reminders, notes (by modified date), safari history, and granola meetings
- reminder URLs may link to relevant websites or resources
- safari history can provide context for what you were researching on a given day

### Deep links
- notes: `notes://showNote?identifier={uuid}`
- reminders: `x-apple-reminder://{reminder_id}`
- contacts: `addressbook://{contact_id}`
- calendar: `calshow:{timeIntervalSinceReferenceDate}`
- always include deep links when referencing items so the user can jump to the native app

### Privacy
- this is personal data - handle with care
- don't expose contact details or private notes unnecessarily
- summarize rather than dump raw content when possible

