AI Monk Index について
Aniccaは、習慣づくりと時間どおりの起床を支援する行動変容エージェントで、iOSアプリと音声による起床SaaSを備えています。リポジトリには、電話で起床を促し、位置情報の更新から遅れを検知するセルフホスト可能なバックエンドがあります。
主な機能
- 01音声通話による起床通知
- 02遅延検知と段階的な通知
- 03OwnTracksによる位置情報更新
- 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 — 行動変容エージェント+起床SaaS
有害なパターンを断ち切り、より良い習慣を身につけるために支援するプロアクティブなエージェントです。2つのサービスは、同じコードベースを共有しています。
| サービス | 内容 | 状況 |
|---|---|---|
| iOS app | オンボーディング → 13種類の問題 → スケジュールに沿ったリマインダー → 1画面のカード型UX | App Storeで公開中(1.9.x) |
| Wake-up SaaS | $9.99/mo — AIが毎朝電話をかけ、遅れそうな場合は段階的に対応します | https://aniccaai.com/alarm で公開中 |
起床SaaSでは、録音された着信音ではなく、PSTN経由で応答する実際の音声エージェント「Anicca」を使用します。Aniccaはあなたのカレンダー、自宅の場所、勤務先への出勤時刻を把握しており、予定より遅れている場合は電話をかけ続け、任意で上司に報連相(状況連絡)メールを送信します。
リポジトリの構成
| パス | 内容 |
|---|---|
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ワーカー) |
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送信を設定(Settings → Preferences → Connection)
- Mode:
HTTP - URL:
https://<your-anicca-alarm-backend>.up.railway.app/ingest/owntracks?token=<USER_TOKEN>- トークンは、登録後に
aniccaai.com/alarm/setupから取得できます。
- トークンは、登録後に
- Identification → DeviceID:任意の値(例:
iphone) - Identification → TrackerID:2文字(例:
DA)
- Mode:
-
重要:モードは_Significant_ではなく、_Move_に設定してください
- OwnTracksを開く → ⓘアイコン → Modeセレクター
- Moveを選択
- 理由:OwnTracksのドキュメントによると、_Significant_モードでは端末が静止している間、位置情報は送信されません。ユーザーがベッドで眠っていると、何時間も位置情報の更新が送られず、Aniccaには古い位置情報が表示され、自宅を出たかどうか判断できなくなります。_Move_モードでは、5分ごと、または100 m移動するごと(いずれか早い方)に位置情報を送信します。これは遅延判定ループに必要な動作です。バッテリー消費はおおむねナビゲーションアプリと同程度のため、ユーザーには低電力モードの例外設定をおすすめします。
-
位置情報への常時アクセスを許可(iOS:「常に許可」)
- そうしないと、iOSがバックグラウンドでの送信を警告なしに制限します。
-
動作を確認
aniccaai.com/alarm/setupにアクセスし、スマートフォンを持って歩き回ってから5分以内に「Last seen」のタイムスタンプが更新されることを確認します。
MQTTではなくHTTPを使う理由
HTTPパブリッシャーのみをサポートしています(運用が簡単で、ブローカーを稼働させる必要がないため)。MQTTは後日対応予定です。
Appleの「探す」や「重要な位置情報の変更」を使わない理由
- 「探す」には公開APIがありません。
- iOSの「重要な位置情報の変更」APIは、500m以上の移動後、5分経過してからしか起動しないため、ベッドで眠っている人には役立ちません。
セルフホスト
自分自身、または少人数のグループ向けに独自の起床エージェントを運用する場合は、この低コストな方法を利用できます。
必要なサービス(無料またはほぼ無料のプラン)
| サービス | 用途 | 無料プラン? |
|---|---|---|
| Twilio | 電話番号+発信通話 | 電話番号は月額$1+約$0.015/分 |
| Google AI Studio | Gemini Live API | はい(キーごとのクォータ) |
| Supabase | 加入者データベース | はい |
| Railway | ブリッジとスケジューラーのホスティング | Hobbyプランは月額$5 |
| 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(E2E)
ステータス
| コンポーネント | 状態 |
|---|---|
| iOS アプリ | 稼働中(1.9.x) |
| Alarm SaaS | 稼働中、2026-05-23 から有料顧客あり |
| 遅刻防止ループ | 稼働中、OwnTracks の Move モードが必要(上記参照) |
| セルフホスト用ドキュメント | 最小限(このファイル)— PR での改善を歓迎します |
ライセンス
このコードは、学習やセルフホストに利用できるよう OSS として公開されています。商用利用、商標、および「Anicca」という名称は権利者が留保します。公開後に LICENSE をご確認ください。
お問い合わせ
- ランディングページ:https://aniccaai.com
- 問題報告:このリポジトリの GitHub Issues
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。