EXIT研究所 by Mac-mini
Mac mini上でClaude Codeとlaunchdを連携させ、M&Aメディア運営を24時間フルオートメーション化するための自律型エージェント環境です。ニュース収集、Threadsやnoteの記事生成・投稿、さらにはDB管理まで、役割の異なる複数のAIエージェントがスケジュールに基づいて自律的に実行します。
Discordからの常駐応答に加え、SQLiteやSupabase、Google Sheetsと連携した高度なデータ処理を統合しているのが特徴です。Macの常時稼働リソースを活かし、コンテンツ制作からプラットフォーム運用までのワークフローを完全に自動化したいエンジニアやマーケターの基盤として活用できます。
zip未取得
EXIT研究所 — Mac mini 24時間自動運転システム
概要
Mac mini 上で Claude Code + launchd を組み合わせ、M&A企業価値データベースの運営に関わる各種タスクを24時間自律実行するシステム。
ポケモンをモチーフにした複数のAIエージェントが役割分担しながら稼働する。
アーキテクチャ
Mac mini ({username})
├── claude-bot(常駐)
│ └── Discord #exit-lab からのメッセージを受信・応答
│ 起動: launchd KeepAlive → claude-bot-loop.sh → script(fake TTY) → claude --channels
│
└── 定時エージェント群(launchd → claude -p で独立セッション起動)
├── ピカチュウ 05:10 ニュース収集
├── ロコン 05:25 Threads投稿案生成
├── エーフィ 05:30 note記事ドラフト生成
├── エーフィ 06:30 note記事修正
├── ロコン 07:00 Threads投稿実行(朝)
├── エーフィ 12:00 note記事公開
├── 夕方レビュー 19:00 今日の振り返り
└── ロコン 20:00 Threads投稿実行(夜)
エージェント一覧 & スケジュール
| ジョブ名 | 時刻 | エージェント | 役割 |
|---|---|---|---|
| claude-bot | 常駐 | — | Discord受信・応答(KeepAlive) |
| morning-todo | 05:00 | — | 朝のToDo整理・Discord投稿 |
| pikachu-news | 05:10 | ピカチュウ | M&Aニュース収集 → SQLite保存 → Discord投稿 |
| rokon-post | 05:25 | ロコン | Threads投稿案5本生成 → Discord提示 |
| espeon-note | 05:30 | エーフィ | market_eventsからnote記事ドラフト生成 |
| espeon-revision | 06:30 | エーフィ | ドラフトを推敲・改稿 |
| rokon-publish | 07:00 / 20:00 | ロコン | 承認済み投稿をThreadsへ実投稿 |
| espeon-publish | 12:00 | エーフィ | note記事を公開 |
| evening-review | 19:00 | — | 今日の振り返り・明日の準備 |
| threads-token-refresh | 毎月1・15日 03:00 | — | Threadsアクセストークン自動更新 |
データ層
- SQLite (
db/exit_lab.db): market_events(ニュース)・posts_log(Threads投稿管理) - Supabase: 企業データ・マルチプル時系列・レポート・イベント
- Google Sheets: GOOGLEFINANCE関数 → GAS → Supabase同期
ディレクトリ構成(主要部分)
exit-lab/
├── .claude/
│ ├── agents/ # 各エージェントの指示書(*.md)
│ └── skills/ # 共有スキル(rokon-post, news-watch-toolkit, etc.)
├── 03_infra/mac-config/
│ ├── launchagents/ # launchd plist(全ジョブ定義)
│ └── scripts/ # 起動スクリプト(*-run.sh, claude-bot-loop.sh)
├── db/
│ ├── exit_lab.db # SQLite本体
│ └── migrations/ # スキーマ管理
└── scripts/ # 各エージェントのrunスクリプト
運用コマンド
# 全ジョブの稼働状態確認
launchctl list | grep fall-code
# ジョブ手動起動(例: ピカチュウ)
launchctl kickstart -k gui/$(id -u)/com.fall-code.exit-lab.pikachu-news
# ログ確認
tail -f ~/.claude/logs/claude-bot.log
tail -f ~/.claude/logs/pikachu-news.log
# ジョブ再起動(例: claude-bot)
launchctl stop com.fall-code.exit-lab.claude-bot # KeepAliveで自動再起動
セットアップ(新Mac or 再構築時)
# 1. plistをLaunchAgentsに配置
cp 03_infra/mac-config/launchagents/*.plist ~/Library/LaunchAgents/
# 2. 全ジョブをロード
for f in ~/Library/LaunchAgents/com.fall-code.exit-lab.*.plist; do
launchctl load "$f"
done
# 3. claude-botの起動確認
launchctl list com.fall-code.exit-lab.claude-bot
ログファイル一覧
| ファイル | 内容 |
|---|---|
~/.claude/logs/claude-bot.log | claude-botの起動・再起動履歴 |
~/.claude/logs/claude-bot-launchd.log | claudeプロセスの出力 |
~/.claude/logs/pikachu-news.log | ニュース収集ログ |
~/.claude/logs/rokon-post.log | 投稿案生成ログ |
~/.claude/logs/espeon-note.log | note記事生成ログ |
~/.claude/logs/rokon-publish-launchd.log | Threads投稿実行ログ |
トラブルシューティング
claude-botがオフラインになった
launchctl stop com.fall-code.exit-lab.claude-bot
# KeepAlive設定により自動再起動。再起動しない場合:
launchctl start com.fall-code.exit-lab.claude-bot
定期タスクが動いていない
tail -50 ~/.claude/logs/{task-name}.log
rm ~/.claude/state/{task-name}.lock # ロックファイルが残っている場合
APIレート制限に達した
rm ~/.claude/state/usage-limit-reached