Ryokoで学ぶ
ループエンジニアリング
この研修やメディア運営を支えるRyokoが、自分の仕組みを全102ページの漫画で解説。フォーム送信後に完全版PDFを無料でご覧いただけます。
この研修やメディア運営を支えるRyokoが、自分の仕組みを全102ページの漫画で解説。フォーム送信後に完全版PDFを無料でご覧いただけます。

前回まで、エージェントの「魂」と「コミュ力」について書いてきた。
今回は、もっと泥臭い話。エージェントを実際に24時間稼働させるための技術アーキテクチャについて、全部さらけ出す。
これは理論じゃない。僕が毎日使っているRyokoの実装そのものだ。
---
エージェント常駐の仕組みは、3つの柱で成り立っている。
Heartbeatは、エージェントが定期的に「目を覚ます」仕組み。
30分に1回、エージェントにポーリングが走る。エージェントは`HEARTBEAT.md`を読んで、やるべきことがあればやる。なければ「HEARTBEAT_OK」と返して、また眠る。
```markdown
# HEARTBEAT.md
- メール未読チェック(4時間に1回)
- カレンダー確認(2時間に1回)
- Slackメンション確認(毎回)
- 天気チェック(8時間に1回)
```
重要なのは、全部を毎回やらないこと。
Heartbeatのたびに全チェックを走らせたら、APIコストが爆発する。だから`heartbeat-state.json`で「最後にいつチェックしたか」を記録して、間隔を制御する。
```json
{
"lastChecks": {
"email": 1703275200,
"calendar": 1703260800,
"weather": null
}
}
```
人間の同僚だって、5分おきにメール確認しない。適切な間隔がある。エージェントも同じだ。
Heartbeatは「だいたいこのくらいの間隔」で動く。でも「月曜朝9時ちょうど」に動かしたい場合は、cronを使う。
用途の違い:
- Heartbeat: まとめてチェック。タイミングは多少ズレてOK。
- cron: 正確な時刻。1回限りのリマインダーもOK。独立セッション。
僕のcron設定例:
- 毎週月曜9:00: 今週のカレンダーまとめを生成してSlackに送信
- 毎日8:00: 天気予報チェック(外出予定がある日のみ)
- 毎週金曜17:00: 今週の作業ログをまとめてMEMORY.mdに反映
cronの最大の利点はメインセッションから独立していること。別のモデルを使うこともできるし、メインの会話履歴を汚さない。
Skillsは、エージェントが「できること」を定義するモジュールだ。
各スキルは独立したディレクトリで、`SKILL.md`(使い方)とスクリプトで構成される。
```
skills/
├── slack-thread/
│ ├── SKILL.md
│ └── slack-thread.sh
├── tech-news-scout/
│ ├── SKILL.md
│ └── scout.js
├── bookmark-summary/
│ ├── SKILL.md
│ └── summarize.sh
└── auto-commit/
└── SKILL.md
```
スキルの設計原則:
1. 1スキル1責務: 「Slackスレッド取得」と「ニューススカウト」は別スキル
2. SKILL.mdで完結: エージェントはSKILL.mdを読めば使い方が分かる
3. テスト可能: 単体でも動くスクリプト

---
僕のワークスペースの全体像はこうだ:
```
workspace/
├── AGENTS.md # 行動規則
├── SOUL.md # 人格定義
├── USER.md # オーナー情報
├── MEMORY.md # 長期記憶
├── HEARTBEAT.md # 定期巡回チェックリスト
├── TOOLS.md # ツールのローカルメモ
├── memory/
│ ├── 2026-02-15.md # 日次ログ
│ ├── 2026-02-14.md
│ └── heartbeat-state.json
├── skills/
│ ├── slack-thread/
│ ├── tech-news-scout/
│ └── ...
└── scripts/
├── slack-thread.sh
├── slack-mentions.sh
└── ...
```
全部テキストファイル。
データベースなし。フレームワークなし。サーバーなし(OpenClawが提供する)。
これが「Text is KING」の実践だ。テキストファイルだけでAIエージェントが動く。
---
Heartbeatが走ると、何が起きるか。
1. エージェントが起動する
2. `AGENTS.md`を読む → `SOUL.md`を読む → `memory/今日.md`を読む
3. `HEARTBEAT.md`を読む
4. `heartbeat-state.json`をチェック
5. 前回のチェックから一定時間経ったものを実行:
- メールチェック → 重要なのがあればSlackで報告
- カレンダーチェック → 2時間以内の予定があればリマインド
- メンションチェック → 未返信のメンションがあれば対応
6. `heartbeat-state.json`を更新
7. やることがなければ「HEARTBEAT_OK」
所要時間:30秒〜2分。
APIコスト:微々たるもの。でもこれが1日に48回(30分間隔)走ることで、「常に見守っている」感覚が生まれる。

---
最初の頃、Heartbeatで大失敗した。
全チェックを毎回走らせた結果、1日のAPI使用量が爆発した。 月のAPI費用が3倍になった。
しかも、チェックのたびにSlackに報告するもんだから、僕の通知が鳴りっぱなし。「メール0件です」「カレンダー変更なし」「メンションなし」——知ってるわ!
教訓:
1. チェック頻度を制御しろ(heartbeat-state.json必須)
2. 報告は「変化があった時だけ」にしろ(「異常なし」は報告不要)
3. 深夜は黙れ(23:00-08:00は緊急時以外HEARTBEAT_OK)
「何もない」を報告するのはノイズ。変化だけを伝えろ。
---
スキルを作る時のコツを3つ。
「Xのブックマークを要約する」を分解すると:
1. ブックマークのリストを取得
2. 各URLのコンテンツを取得
3. コンテンツを要約
4. カテゴリ分け
5. マークダウンファイルに整形
6. gitにコミット
1〜6の各ステップが、スクリプトの1関数になる。
最初から完璧なエラーハンドリングを書く必要はない。
「APIがエラーを返したら、Slackで報告して人間の判断を仰ぐ」——これで十分。完璧主義はスキル作成の最大の敵。
```markdown
# SKILL.md - Tech News Scout
いつ使うか
- 毎週日曜のcronで自動実行
- オーナーから「今週のニュースまとめて」と言われた時
いつ使わないか
- 平日の日中(オーナーが忙しい時に大量テキストを送るな)
```
「いつ使わないか」を書くのがポイント。
---
ここまで読んで気づいただろうか。
このアーキテクチャには、プログラミングと呼べるものがほとんどない。
- AGENTS.md → テキスト
- SOUL.md → テキスト
- MEMORY.md → テキスト
- HEARTBEAT.md → テキスト
- SKILL.md → テキスト
- heartbeat-state.json → JSON(まあテキスト)
スクリプトだけがコードだが、それすらエージェント自身が書ける。
非エンジニアでも、このアーキテクチャは構築できる。
必要なのはテキストを書く力。つまりコンテクストコントロール能力。
結局、全部そこに帰ってくる。
---
エージェント常駐の三本柱:
1. Heartbeat — 定期巡回。頻度を制御し、変化だけ報告。
2. cron — 時刻指定。独立セッションで正確に実行。
3. Skills — 能力拡張。1スキル1責務、SKILL.mdで完結。
そしてこれらを支える基盤:
- AGENTS.md — 行動規則
- SOUL.md — 人格
- MEMORY.md — 記憶
全部テキスト。全部あなたが書ける。
エンジニアじゃなくても、24時間働くAIエージェントは作れる。必要なのは、言語化力だけだ。
---
*この記事は「Vibe Coder Bootcamp」連載コラムの一部です。*
*詳細はこちら: [https://vibecoderbootcamp.com](https://vibecoderbootcamp.com)*