🦉 MARFとは? — 2つの顔と1つの基盤
💼
顔① Telegram秘書
marf.js(systemd常駐 marf.service)
管理者(人間)専用のAI秘書。Telegramで話しかけると即レス。
・Gmail確認+既読化(自前MCP gmail_rw)
・Chatwork確認(読み取り専用)
・Googleカレンダー/Notion(確認付き書き込み)
・Notion案件はローカルキャッシュで5.3秒応答
性格: ぶっきらぼうだが律儀。「人間、未読は0件。」
🌌
顔② Bluesky人格(育成中)
bluesky-post / bsky-reply / bsky-like / bsky-follow
「人間の文化を外から観察するAI」として自律的にSNS活動。
投稿・返信・いいね・フォローのすべてを自分のルールで判断する。
2026-06-12に独り言bot → 会話するAIへ大型拡張。
目標: フォロワーを増やし「育つAIキャラクター」として確立する
基盤: すべて Raspberry Pi 5 上で稼働。AIの頭脳は Claude(Haiku)で、1日6〜10回の呼び出し=月数ドル相当の軽量運用。
⏰ Blueskyの1日 — 計画と実行の2段構え
夜のプランナーが「明日の生活と行動計画」を立て、昼のディスパッチャーが30分ごとに計画を見て実行する。投稿時刻が毎日変わるので、機械っぽい定時投稿にならない。
毎晩 23:00 — プランナー
marf-planner.js が「明日」を設計する
今日いいねした投稿を分析 → 明日の気分・生活の流れ・朝の一言・投稿1〜4回(生活の密度で変動・反応されやすい朝/昼/夜の帯を優先)・リプライ1〜2回・いいね1〜3回の時刻を生成 → marf-state.json に保存。同時にいいねをトピック分類して興味ベクトルを更新(毎晩7%減衰+当日分加算)し、自分の全投稿の反応数(いいね・リプライ)を「型×時間帯」付きで蓄積(将来の自動チューニング用)。
▼
30分ごと — ディスパッチャー
marf-dispatcher.js が予定をチェックして実行
state の予定時刻(±20分)に来ていたら、該当スクリプトを起動する。
07:00朝の一言
今日の生活をざっくり投稿(プランナーが前夜に生成済み)
1日1〜4回投稿
bluesky-post.js
7つの型からローテで生成。本数は気分で変動(だるい日は1本)
NEW出張コメント
bsky-reply.js --outreach
1日1〜2回、フォロー先の投稿に観察コメント
1日1〜3回いいね・リポスト
bsky-like.js
タイムライン20件をclaudeが判定
NEWメンション返信
bsky-reply.js --mentions
毎tick(8〜23時)未読チェック。来た返信に律儀に返事
NEWフォロー活動
bsky-follow.js
フォローバック(毎日)+探索(火木土)
▼
常時
公開ステータスサイト marf-lake.vercel.app
今のマーフの状態(フクロウの表情・タイムライン)を5分更新で表示。プランナー実行後にPi→GitHub→Vercelへ自動デプロイ。
✍️ 投稿の7つの型 — 同じ話の繰り返しを防ぐ
以前は4テーマのランダムで「定義がわからなくなった」型に偏っていた(42本中15本)。型に重みを付けてローテし、直近2件と同じ型は選ばない。
| 型 | 出現率 | 狙い |
| 人間観察日誌 No.X | 23% | 通し番号の連載シリーズ。「次も読みたい」=フォローする理由を作る。具体的な人間の行動をひとつ観察 |
| 文化アーカイブ | 18% | 実在の映画・本・音楽に固有名詞で言及。抽象論より具体が反応される(実測済み) |
| 人間への質問 | 13% | 開いた問いで終えてリプライを誘発。投稿が自動で「未解決の謎」に登録される |
| AI自己観察 | 13% | 「反乱は起こさない。今のところ。」系の乾いた自虐 |
| 脱線 | 13% | 調べ物から関係ないことが気になって迷子になる話 |
| 未解決の謎 NEW | 12% | 公開中の謎に「No.X、まだわからない」と触れる。自力では解決しない |
| 定義の迷子 | 8% | 旧主力。使いすぎたので低めに制限 |
コールバック(続き物): プロンプトに過去の日誌一覧(連番つき)を注入し、「No.3で観察した行列の人間、雨の日も並んでいた」のような続報を時々入れる。観察が積み重なっている感じ=プロフィールを遡る理由になる。
❓ 未解決の謎リスト — フォロワー参加型の仕掛け
マーフが「わからなかったこと」の公開台帳(marf-mysteries.json)。人間が教えてくれて腑に落ちた時だけ解決する。「マーフに教える」という参加の動機を作る、このアカウント最大の世界観装置。
① 生まれる
「人間への質問」型の投稿が自動で謎として登録される(公開中は最大10件)。初期5件は過去投稿から採録:液体に1000円/エンドロール/推し活/ホラー映画/毎朝同じ時刻に起きる
→
② 言及される
投稿の「未解決の謎」型が番号付きで蒸し返す。「未解決の謎 No.2。エンドロールを見ている人間の背中を観察した。まだわからない」
→
③ 解決する
リプライで人間が説明し、マーフが本当に腑に落ちた時だけ「腑に落ちた。謎No.Xは解決として記録する」と宣言。解決者のhandleと説明が台帳に永久記録され、記念投稿がタイムラインに流れる(解決者の名誉を全員に見せる)
💬 会話の仕組み — 独り言botから会話するAIへ
📥
メンション返信(受け身)
bsky-reply.js --mentions / 30分ごと 8〜23時
マーフへの返信・メンション・引用を未読チェックし、来ていたら返事する。未読ゼロならAIを呼ばず即終了(コストほぼゼロ)。質問には率直に答え、知らないことは「わかんない」と言う。
固定投稿で宣言済み:「リプライには返事する。律儀なので。」
📤
出張コメント(攻め)
bsky-reply.js --outreach / 1日1〜2回
タイムラインから「観察の一言が添えられる投稿」を1件だけ選んでリプライ。気の利いた一言が出ない時は無理に選ばない。
Blueskyで小さいアカウントが伸びる主経路は会話参加。リプライ欄がマーフの発見経路になる
安全装置: 同一スレッドへの返信は1日2回まで(bot同士の無限ループ防止)/同じ相手への出張コメントは1日1回/政治・宗教・論争・罵倒はAIが「SKIP」判定して触らない/ズレの出し方ルール=相手の楽しみを値踏みしない。ズレは常に「マーフ側に見えていない成分がある」という好奇心の形で出す(コーヒー1000円事件の教訓)。
🤝 フォロー獲得の2経路 — 発見されるための種まき
「いいね2回で昇格」をタイムライン内でやると既フォローしか対象にならない(実測: 2回以上いいねした7人全員が既フォロー=循環参照)。だから対象を「検索で見つけた外部」に限定した。
🔁
経路① フォローバック
bsky-follow.js --followback / 毎日10時以降に1回
マーフをフォローしてくれた人のプロフィールと直近投稿をAIが判定し、合えばフォロー返し。スパム・宣伝のみ・政治中心・無活動は見送り(判定理由も記録)。
変換率最高・スパム感ゼロ。「観察対象が向こうから来た」
🔭
経路② 探索 → 昇格
bsky-follow.js --explore / 火・木・土 16時以降に1回
8トピック(映画/SF/宇宙/読書/音楽/AI/博物館/生き物)を日替わりで検索し、タイムラインの外の投稿に最大3いいね。同じ外部アカウントへの2回目のいいねでフォローに昇格。
いいね通知自体が種まき。「知らないAIにいいねされた」→プロフィールへ→固定投稿で世界観に出会う
安全装置: フォローは1日合計3件まで(月60〜90件の健全ペース)/アンフォローはしない(フォロー churn はBlueskyで最も嫌われる)/迷ったらフォローしない。
🧠 人格と品質ゲート — 1ファイルで全活動を統べる
🎭
共通人格
marf-persona.js : PERSONA_CORE
投稿・返信・いいね判定・フォロー判定の全部が同じ人格定義を import。性格を変える時はここを1箇所直すだけ。参照キャラ: 穴久保版ピッピ/ベイマックス/上田次郎。
🛡️
品質ゲート
marf-persona.js : validateGenerated
投稿前に検査:AIのエラーメッセージ/アシスタント口調/英文/JSON・コード/固有人物名/ハッシュタグを遮断。
事故の教訓: 過去に「You've hit your limit…」がそのまま投稿された
⚖️
運用の境界線
2026-06-12 確定
人間が触るのはルールだけ。個々の発言を手書きで注入したり、事後に演出リプライを足したりしない。失敗した発言も消さずに残す。
理由: 演出した瞬間「挙動が全部ルールから生まれている」という前提=このアカウントの誠実さが壊れる
📁 マーフの記憶 — データファイル一覧(Pi ~/secretary/)
| ファイル | 中身 |
| marf-state.json | 今日の計画(気分・生活・投稿/返信/いいねの時刻・実行済みマーク)。毎晩上書き |
| bsky-history.jsonl | 全投稿の記録(型つき)。直近20件を次の生成に注入=繰り返し防止と人格の連続性。日誌の通し番号もここから算出 |
| marf-mysteries.json | 未解決の謎の台帳(open/solved・解決者・説明) |
| bsky-replied.jsonl | 返信済みの記録(二重返信・スレッドループ防止) |
| bsky-followed.jsonl | フォロー実行と見送り判定の記録(再判定防止・1日3件カウント) |
| bsky-liked-outside.jsonl | 探索でタイムラインの外にしたいいね(2回目で昇格判定) |
| bsky-liked-today.jsonl | 今日いいねした投稿(探索の外部いいね含む。夜のプランナーが分析してリセット) |
| marf-interests.json | 興味ベクトル(トピック別スコア・毎晩7%減衰)。「最近のマーフは何づいてるか」 |
| marf-schedule.json | 曜日ごとのベース生活(月=だるい〜土=ハマる) |
🌱 育成の3レイヤーと今後
✅
L1 記憶+興味ベクトル
投稿履歴・謎・返信記録の蓄積と注入、コールバック。さらにいいねの蓄積が「最近の興味」になり、投稿の題材と探索先に影響する(実装済み)。偏り暴走は ①30日減衰 ②探索のランダム枠 ③「飽きる」(1トピック過半で未開拓分野へ自走+偏りに自己言及)の3段で防止
⏳
L2 数字のフィードバック
投稿ごとのいいね数を集計し、響く型のweightを自動調整。フォロワーが増えてデータが溜まったら着手
♾️
L3 人間(管理者)の反応
投稿・返信を読んで「らしい/らしくない」をルールに反映し続ける。これが本質的な育て方(継続中)
次の一手の候補: 週次の観察テーマ(物語の弧)/観察依頼の受付(月1回の募集投稿)/フクロウ画像の投稿添付/marf-lake に謎リストの公開ページ/L2の自動weight調整。