Your Apple-Native AI Agent
# Add to your Claude Code skills
git clone https://github.com/dkyazzentwatwa/apple-flowYour Apple-Native AI Assistant
Control AI from iMessage, Mail, Reminders, Notes, and Calendar on macOS.
Translated READMEs:
Apple Flow is a local-first macOS daemon that bridges Apple apps to AI CLIs (Codex, Claude, Gemini, Cline, and Kilo). It enforces sender allowlists, approval gates for mutating work, and workspace restrictions by default.
No comments yet. Be the first to share your thoughts!
Watch the walkthrough on YouTube:
| Dashboard | Task Management |
|---|---|
|
|
|
| AI Policy Log | Calendar Event |
|---|---|
|
|
|
| Office Brainstorm |
|---|
|
|
| Onboarding 1 | Onboarding 2 |
|---|---|
|
|
|
| Onboarding 3 | Onboarding 4 |
|---|---|
|
|
|
| Setup Configuration | Onboarding Error |
|---|---|
|
|
|
apple-flow-pages, apple-flow-numbers, apple-flow-mail, and apple-flow-gateways skills.Choose one setup path:
| Path | Best for | Time | Entry point |
|---|---|---:|---|
| AI-guided setup (recommended) | Most users, safest onboarding | ~10 min | docs/AI_INSTALL_MASTER_PROMPT.md |
| One-command script | Fast local install/autostart | ~5-10 min | ./scripts/setup_autostart.sh |
| Manual setup | Advanced/custom environments | ~15+ min | docs/AUTO_START_SETUP.md, docs/ENV_SETUP.md |
# Install Homebrew (if needed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Python + Node
brew install python@3.11 node
Pick one:
curl -fsSL https://claude.ai/install.sh | bash
claude auth login
npm install -g @openai/codex
codex login
npm install -g @google/gemini-cli
gemini auth login
npm install -g cline
cline auth
npm install -g @kilocode/cli
kilo auth login
git clone https://github.com/dkyazzentwatwa/apple-flow.git
cd apple-flow
./scripts/setup_autostart.sh
Open your AI CLI and paste:
That flow handles:
wizard doctor --json).env generation from .env.exampleSystem Settings -> Privacy & Security -> Full Disk AccessText yourself in iMessage:
what files are in my home directory?
You should receive a reply within seconds.
If you do not want AI-guided setup:
./scripts/setup_autostart.sh
If .env is missing, it launches python -m apple_flow setup to generate one.
Edit .env directly:
nano .env
Minimum keys:
apple_flow_allowed_senders=+15551234567
apple_flow_allowed_workspaces=/Users/you/code
apple_flow_default_workspace=/Users/you/code
apple_flow_connector=claude-cli
apple_flow_admin_api_token=<long-random-secret>
For Reminders-backed workflows, apple_flow_reminders_list_name and apple_flow_reminders_archive_list_name must be plain top-level list names such as agent-task and agent-archive. Sectioned lists, grouped lists, nested paths, and Accessibility-backed fallbacks are not supported.
Then validate and restart:
python -m apple_flow config validate --json --env-file .env
python -m apple_flow service restart --json
python -m apple_flow service status --json
The admin service also serves a lightweight Agent Office dashboard for phone and browser access.
Open:
http://localhost:8787/dashboard
If apple_flow_admin_api_token is set, the first visit shows a small dashboard login form. Enter the same admin token there once and the browser receives a dashboard-only HttpOnly cookie scoped to /dashboard.
Practical notes:
agent-office, companion state, inbox, memory, and logs.Mute / Unmute companion are the only built-in dashboard actions in v1./dashboard, so it does not unlock the broader admin API surface.8787, for example http://your-mac-name.tailnet.ts.net:8787/dashboard.| Command | What it does |
|---|---|
| <anything> | Natural chat |
| idea: <prompt> | Brainstorming |
| plan: <goal> | Plan only (no changes) |
| task: <instruction> | Mutating task (approval required) |
| project: <spec> | Multi-step task (approval required) |
| approve <id> / deny <id> / deny all | Approval controls |
| status / status <run_or_request_id> | Run/request status |
| health | Daemon health |
| history: [query] | Message history |
| usage | Usage stats |
| help | Help + practical tips |
| system: mute / system: unmute | Companion controls |
| system: stop / system: restart / system: recycle helpers / system: maintenance / system: kill provider | Runtime controls |
| system: cancel run <run_id> | Cancel one run |
| system: killswitch | Kill all active provider processes |
Prefix with @alias:
task: @healer run the test suite
task: @web-app deploy to staging
@api show recent errors
Define file aliases in .env via apple_flow_file_aliases and reference them in prompts with @f:<alias>.
plan: summarize @f:context-bank
task: review @f:runbook and propose updates
All optional gateways are off by default.
Trigger behavior:
!!agentapple_flow_trigger_tagEnable examples:
apple_flow_enable_mail_polling=true
apple_flow_enable_reminders_polling=true
apple_flow_enable_notes_polling=true
apple_flow_enable_calendar_polling=true
Voice message examples:
apple_flow_phone_owner_number=+15551234567
apple_flow_imessage_auto_send_image_results=owner-only
apple_flow_phone_tts_voice=
apple_flow_phone_tts_rate=180
apple_flow_phone_tts_engine=auto
apple_flow_phone_piper_model_path=/Users/you/models/en_US-amy-medium.onnx
Then trigger with:
voice: standup starts in 10 minutes
voice-task: analyze my workspace
voice: speaks the exact text you send. voice-task: runs the task first, then sends both the text result and a synthesized audio copy over iMessage to the configured owner number. apple_flow_imessage_auto_send_image_results=owner-only also makes outbound replies auto-attach intentional local image results for the owner ins