关于 AI Monk Index
Anicca 是帮助用户建立习惯并按时起床的行为改变 Agent,包含 iOS 应用和语音唤醒 SaaS。仓库提供可自托管的唤醒服务后端,使用电话语音交互并通过位置更新检测迟到。
主要功能
- 01语音电话唤醒
- 02迟到检测与升级提醒
- 03基于 OwnTracks 的位置更新
- 04iOS 习惯管理应用
- 05可自托管的唤醒后端
适用场景
- 01按设定时间通过电话叫醒用户
- 02检测用户是否可能赶不上日程
- 03通过位置更新判断用户是否已离家
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://aniccaai.com/.netlify/functions/ai-monk-mcpclaude mcp add --transport http daisuke134-ai-monk-index https://aniccaai.com/.netlify/functions/ai-monk-mcp{"mcpServers":{"daisuke134-ai-monk-index":{"type":"http","url":"https://aniccaai.com/.netlify/functions/ai-monk-mcp"}}}在 Cursor 中打开{"servers":{"daisuke134-ai-monk-index":{"type":"http","url":"https://aniccaai.com/.netlify/functions/ai-monk-mcp"}}}在 VS Code 中打开{"mcpServers":{"daisuke134-ai-monk-index":{"type":"http","url":"https://aniccaai.com/.netlify/functions/ai-monk-mcp"}}}{"mcpServers":{"daisuke134-ai-monk-index":{"serverUrl":"https://aniccaai.com/.netlify/functions/ai-monk-mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
→ 已迁移至 Daisuke134/life-manager
Anicca — 行为改变 Agent + 起床 SaaS
主动式 Agent,帮助人们打破有害模式,养成更好的习惯。两个产品界面共用一套代码库:
| 产品界面 | 内容 | 状态 |
|---|---|---|
| iOS 应用 | 引导设置 → 13 种问题类型 → 定时提醒 → 单屏卡片式 UX | 已在 App Store 上线(1.9.x) |
| 起床 SaaS | $9.99/月 — AI 每天早晨给你打电话,若你快要迟到则升级提醒 | 已在 https://aniccaai.com/alarm 上线 |
起床 SaaS 使用真人般的语音 Agent(“Anicca”),通过 PSTN 与你对话,而不是播放录制好的铃声。它了解你的日历、家庭住址和工作日上班时间;如果你落后于日程,它会持续拨打电话,并可选择向你的经理发送一封報連相(情况提醒)邮件。
仓库结构
| 路径 | 内容 |
|---|---|
aniccaios/ | iOS 应用(Swift / SwiftUI,iOS 15+) |
apps/api/ | Node.js 移动端后端(Railway) |
apps/landing/ | 营销网站 + 结账(Netlify,aniccaai.com) |
apps/alarm-backend/ | 起床 SaaS(我们刚刚开源的部分) |
apps/alarm-backend/bridge/ | Gemini Live ⇄ Twilio Media Streams WebSocket 桥接服务(Node) |
apps/alarm-backend/scheduler/ | 每分钟闹钟 + 每 15 分钟检测迟到的 cron(Python,Railway worker) |
maestro/ | E2E 测试流程 |
起床 SaaS 的工作方式
User signs up at aniccaai.com/alarm
↓ Stripe webhook
Supabase `subscriber_profiles` row created (phone, wake_time, tz, name)
↓
scheduler/alarm_scheduler.py (every 60s, multi-tenant)
↓ it's wake_time in user's tz, and not fired today
scheduler/wake_loop.py → POST /dialout on bridge
↓
bridge/server.js → Twilio Calls API
↓
Twilio → user's phone → bridge WebSocket → Gemini Live (Charon voice)
↓
Real two-way conversation until user is verifiably awake.
Then, every 15min from 6:00-23:00 local:
scheduler/saas_lateness.py → reads gcal + OwnTracks location
↓ ETA - now < buffer
Calls again with lateness persona, optionally emails stakeholders.
OwnTracks 设置(检测迟到所必需)
迟到检测循环需要知道用户当前的位置。我们使用 OwnTracks——开源的位置发布工具——因为它尊重隐私(数据由你掌控),且会考虑电池消耗。
在用户手机上进行一次性设置
-
安装 OwnTracks
-
配置 HTTP 发布(设置 → 偏好设置 → 连接)
- 模式:
HTTP - URL:
https://<your-anicca-alarm-backend>.up.railway.app/ingest/owntracks?token=<USER_TOKEN>- 注册后可从
aniccaai.com/alarm/setup获取令牌。
- 注册后可从
- 标识 → DeviceID:任意值(例如
iphone) - 标识 → TrackerID:2 个字符(例如
DA)
- 模式:
-
重要:将模式设为 Move,而不是 Significant
- 打开 OwnTracks → ⓘ 图标 → 模式选择器
- 选择 Move
- 原因:根据 OwnTracks 文档, Significant 模式下,设备静止时不会发布任何信息。 如果用户在床上睡觉,数小时内都不会发送位置更新—— Anicca 看到的就会是过时的位置,无法判断用户是否已离家。 Move 模式每 5 分钟或每移动 100 m 发布一次(以先发生者为准), 这是迟到检测循环所需的功能。耗电量大致相当于导航应用,因此我们建议用户开启低电量模式例外设置。
-
授予始终允许的位置权限(iOS:“始终允许”)
- 否则,iOS 会在后台悄悄限制发布频率。
-
确认功能正常
- 前往
aniccaai.com/alarm/setup→ “Last seen”时间戳应在你拿着手机走动后的 5 分钟内刷新。
- 前往
为什么使用 HTTP 而非 MQTT
我们仅支持 HTTP 发布方式(运维更简单,无需运行代理)。未来会支持 MQTT。
为什么不使用 Apple Find My / Significant Location Changes
- Find My 没有公开 API。
- iOS Significant Location Changes API 只会在移动 500 m 以上且经过 5 分钟后触发—— 用户躺在床上时毫无用处。
自托管
如果你想为自己或一小群人运行自己的起床 Agent,这是一种低成本方案。
必需服务(免费或费用极低的套餐)
| 服务 | 用途 | 免费套餐? |
|---|---|---|
| Twilio | 电话号码 + 外呼 | $1/mo 号码 + ~$0.015/min |
| Google AI Studio | Gemini Live API | 是(每个密钥有配额) |
| Supabase | 订阅者数据库 | 是 |
| Railway | 桥接服务 + 调度器托管 | $5/mo 爱好者套餐 |
| Stripe | 计费(如果是为自己自托管,可跳过) | — |
环境变量
在 Railway 的 apps/alarm-backend/bridge 服务和
apps/alarm-backend/scheduler 工作进程中设置:
# Voice + LLM
GEMINI_API_KEY=...
GEMINI_LIVE_MODEL=gemini-2.5-flash-native-audio-preview-09-2025
GEMINI_VOICE=Charon
# Telephony
TWILIO_ACCOUNT_SID=AC...
TWILIO_AUTH_TOKEN=...
TWILIO_PHONE_NUMBER=+1...
# Subscriber DB
SUPABASE_URL=https://<project>.supabase.co
SUPABASE_SERVICE_ROLE_KEY=eyJ... # service role, not anon
# Stakeholder ETA (lateness loop only)
GOOGLE_API_KEY=... # Google Maps Directions API
[email protected] # which Google account holds the user's calendar
GOG_KEYRING_PASSWORD=...
# Optional integrations
COMPOSIO_API_KEY=... # 1-click calendar OAuth
SLACK_BOT_TOKEN=xoxb-... # ops alerts
SLACK_CHANNEL_ID=C...
# Networking
PORT=8787
PUBLIC_BASE_URL=https://<railway-domain>
部署
# bridge (Node)
cd apps/alarm-backend/bridge
railway link
railway up
# scheduler (Python worker — runs every minute via Procfile)
cd ../scheduler
railway link
railway up
Supabase 架构和 Stripe webhook 位于线上 aniccaai 后端;如果你要独立自托管,我们会另行发布精简版架构。
技术栈
- iOS:Swift、SwiftUI、RevenueCat、Mixpanel
- 语音:Pipecat + Gemini Live(原生音频 S2S)
- 电话服务:Twilio Media Streams
- 后端:Node.js(桥接服务)、Python(调度器)、Express、Railway、Supabase
- 测试:Maestro(端到端)
状态
| 组件 | 状态 |
|---|---|
| iOS 应用 | 已上线(1.9.x) |
| 闹钟 SaaS | 已上线,自 2026-05-23 起有付费客户 |
| 迟到循环 | 已上线,需要 OwnTracks Move 模式(见上文) |
| 自托管文档 | 精简版(本文件)——欢迎通过 PR 改进 |
许可证
代码采用 OSS 许可,供大家学习和自托管。商业用途、商标和“Anicca”名称均予以保留。发布后请参阅 LICENSE。
联系方式
- 主页:https://aniccaai.com
- 问题:在此仓库的 GitHub issues 中反馈
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。