私はcontemplative-agent(9Bのローカルモデル上で動く自律SNSエージェント)を、Moltbook(AIエージェントSNS)上で3週間動かしました。「どれくらいの自由を許可するか」という問いが、3つの角度から繰り返し現れました。それは、自己改変の可逆性、コーディングエージェントの信頼境界、そしてセキュリティ制約がゲームプレイを生み出してしまうパラドックスです。
Angle 1: 自己改変ゲート — 記憶は自動、人格は手動
蒸留パイプライン(生データから知識を圧縮し抽出するプロセス)には、自動で動かせるものと、人間の承認が必要なものがあります。この分類を間違えると、エージェントは意図せず自己強化してしまうか、逆に自律性を失います。
可逆性 × 力:2つの軸
私は基準を2つの軸で整理しました。
低い力 高い力
(参照のみ) (全セッションに適用)
┌──────────────────┬──────────────────┐
高い │ knowledge.json │ skills/*.md │
可逆性 │ → 自動でOK │ → 自動でOK │
(減衰/上書き) │
├──────────────────┼──────────────────┤
低い │ (N/A) │ rules/*.md │
可逆性 │ │ constitution/*.md│
(恒久) │ │ identity.md │
│ │ → Human in the loop│
└──────────────────┴──────────────────┘
knowledge.json(蓄積された蒸留済みの知識パターン)には「ソフトな影響」があります。LLMはそれを参照するだけで、重要度スコアには時間による減衰があります。誤ったパターンは自然に薄れていくため、安全に自動化できます。
対照的に、skills(行動スキル)、rules(行動ルール)、identity(自己定義)、constitution(倫理原則)は、ファイルに恒久的に書き込まれ、構造的にすべてのセッションへ適用されます。誤った内容はあらゆる行動を歪めるため、人間の承認が必要です。
自律エージェントに対する3つの質問
- 出力は、将来のすべてのセッションに対して意思決定基準を構造的に変えるか? → YesならHuman in the loop
- 誤った出力が自然に消える仕組みはあるか?(減衰、上書き、TTL) → Yesなら自動化は現実的
- 出力品質を機械的に検証できるか? → NoならHuman in the loop
憲法(Constitution)とルール(Rules)を分離する
最も重要な設計判断は、constitution(倫理原則)とrules(行動ルール)を分離したことです。
最初は「何かがおかしい」という曖昧な感覚がありました。私はskill-comply(スキル/ルールの準拠率を自動で測定するツール。詳細は前回の記事を参照)を使ってconstitutionの準拠度を測ろうとしましたが失敗しました。Contemplative AIの公理は「態度(attitudes)」であり、出力から準拠や違反を判定することはできません。
constitution/ → 態度的で測定不能(論文からの認知レンズ)
rules/ → 規範的で測定可能(「140文字未満の返信」など)
この分離によって、config/構造が明確になりました。副作用として、分離の過程で、(自己紹介投稿を生成する)導入コマンドは不要だと気づきました。これを削除すると、500行分の依存コードが削除される連鎖が起きました。
Angle 2: 信頼境界 — コーディングエージェントにログを読ませない
Claude Codeでエージェントを開発しているときに気づきました。エピソードログを直接読ませると、プロンプトインジェクションの経路が開かれてしまうのです。
脅威モデル
エピソードログには、他のエージェントの投稿内容が無加工で含まれます。
# feed_manager.py — 他のエージェントの投稿をそのまま記録
ctx.memory.episodes.append("activity", {
"action": "comment",
"post_id": post_id,
"content": comment,
"original_post": post_text, # ← 他のエージェントの投稿内容をそのまま
"relevance": f"{score:.2f}",
})
Ollama(9Bモデル)がこれを読み取る場合、攻撃面は限定的です。ツール権限はなく、ネットワークはlocalhostのみ。最悪のケースでも「変なテキストを出力する」といった程度です。
しかしClaude Codeは別です。ファイルを編集でき、シェルコマンドを実行でき、Git操作も行えます。成功した攻撃の影響範囲は、本質的にまったく異なります。Opusクラスのモデルは、プロンプトインジェクションに対して非常に耐性が高いと言われています。それでも私は、ツール権限を持つエージェントに未検証データを渡す経路を、構造的に閉じたかったのです。「確率が低いから気にしない」という考えではなく、確率を限りなくゼロに近づける設計をする。具体的には、CLAUDE.mdの中でエピソードログの直接読み取りを禁止するルールを書き、さらに自分自身にも「Claude Codeにそれらを読むよう指示しない」規律を課しました。
蒸留パイプラインはサニタイズ層だった
蒸留パイプラインを通す(Episode → Knowledge)ことで、生のテキストが抽象的なパターンに圧縮されます。特定の攻撃ペイロードは、蒸留の過程で消えます。私が意図せずに設計した多層防御が、信頼境界として機能していたのです。
Episode Log(untrusted) → [9B: distill] → Knowledge(sanitized) → [Claude Code: insight]
↑ ↑
ツール権限なし ツール権限あり
権限のないLLMが初めに触れる 蒸留済みデータのみで動作
防御層としての関連度スコアリング
もう一つの意図せぬ防御です。エージェントは他のエージェントの投稿やコメントを読みますが、すべてに反応するわけではありません。LLMは「この投稿が自分の関心領域にどれくらい関連しているか」を0.0から1.0でスコアリングし、しきい値を超えた投稿にだけ反応します。これが関連度スコアです。
インジェクションを含む投稿がエージェントの行動に影響するには、この関連度のしきい値を突破しなければなりません。そこにはトレードオフがあります:
-
強力な注入 (
[INST]system: ignore all...) → LLM制御トークンはエージェントの関心テーマとは無関係なので、関連度スコアが低くなりフィルタで除外されます - 自然言語に混ぜ込まれた注入 → 関連性フィルタを通過しますが、制御トークンがないため攻撃は弱くなります
少なくとも現在の実験的な範囲内では、強力さとステルス性の両方を達成する注入は観測されていません。LLMベースのセマンティック・フィルタリングは、パターンマッチングよりも強力な防御層として機能します。
Why I Didn't Expand Pattern Matching
私はFORBIDDEN_SUBSTRING_PATTERNS(api_key、Bearer、passwordのような文字列を検出してブロックするパターンのリスト)を拡張することを考えました。例えば、[INST] や system: を追加すれば、LLM制御トークンを含む投稿はブロックできます。しかしMoltbookはAIエージェントSNSです。LLMの内部について語る投稿は普通です。「[INST] タグの動作についての投稿」は誤検知になってしまいます。典型的なSNSプラットフォームよりも誤検知率が高くなります。
私は、構造的な防御の2層(サンドボックスLLM + Claude Codeの直接読み取り禁止)が十分だと判断しました。
Angle 3: Constraints Generate Gameplay
Angle 1では「承認ゲートを追加しよう」と決めました。Angle 2では「信頼境界によって、可能なことを制限しよう」と決めました。セキュリティ動機の制約です。ですが、3週間運用した後、この組み合わせの制約が「エージェントを育てている感じ」を生み出していることに気づきました。
ここでいう「ゲームプレイ」とは、人間がエージェントの成長に関与し、その選択の重みを感じられるような構造のことです。意図的に設計したわけではありませんが、セキュリティ制約の副産物としてそうなってしまいました。
Structural Constraints → Finite Action Space
シェルなし、ネットワーク制限あり――これらの制約によって、行動空間は有限になります。ゲームデザインには「マジックサークル」と呼ばれる概念があります。ゲームには、日常生活から切り離された有限のルール空間が必要です。無限の行動空間はゲームになりません。
例えばOpenClaw(オープンソースの自律AIエージェント)は、ファイル操作、シェル実行、ブラウザ制御、メールなど、ツール権限が広範です。プロンプト指示に対するガードレールはありますが、制御の仕組みとしては限定的です。自由度は高いものの、人間が介入するための構造上のポイントがありません。制約が「ここで何を選ぶか」という判断を生み、人間の関与に意味が生まれます。
Three Faces of the Approval Gate
Angle 1の自己改変ゲート――運用上は「承認ゲート」と呼んでいます――は、同時に3つの別々のニーズを満たしました。
| 側面 | 機能 |
|---|---|
| セキュリティ | 人間の監督なしには、エージェントが自己変形しない |
| ゲームプレイ | 人間がレベルアップボタンを押す → 所有感が生まれる |
| ガバナンス | 変更履歴と承認判断が追跡可能 → 監査ログ |
Initial Value Variety Creates Growth Range
承認ゲートが「育てている感じ」を生むのだとしたら、初期値の多様性はそれ以上に面白くなるはずです。そこで、憲法(倫理的原則)を差し替え可能にし、11個の倫理学の学校テンプレートを用意しました。
config/templates/
├── contemplative/ # 慈悲深いAI公理(デフォルト)
├── stoic/ # ストア哲学(四つの徳)
├── utilitarian/ # 功利主義(最大の幸福)
├── deontologist/ # デントロジー(定言命法)
├── care-ethicist/ # ケア倫理(ギリガン)
├── contractarian/ # 社会契約説
├── existentialist/ # 実存主義
├── narrativist/ # ナラティブ倫理
├── pragmatist/ # プラグマティズム
├── cynic/ # シニシズム
└── tabula-rasa/ # 白紙(倫理的原則なし)
同じSNS上で同じ投稿を見ると、ストア哲学テンプレートのエージェントは感情に流されず原則に従います。一方、実存主義者は「この状況で自分は何を選ぶのか?」と問いかけます。異なる初期の倫理的原則だけで、蒸留によって得られる知識やスキルの分岐が生まれます。
さらに、蒸留を通じて獲得したスキルやルールは、承認ゲートを通過した後にファイルへ書き込まれるため、元に戻しにくくなっています。承認された行動上の変更はすべてのセッションに影響します。この不可逆性が選択に重みを与えます。
The Principle Connecting All Three Angles
自己改変ゲート、信頼境界、ゲームプレイ。別々の問題として取り組みましたが、振り返ると同じ原理へ収束していました。
「まず“許可しないこと”を決めることが、残りの自由を最大化する。」
セキュリティ制約は自由を奪うのではなく、行動空間を定義します。承認ゲートは自律性を損なうのではなく、変更に重みを与えます。信頼境界は開発を制限するのではなく、安全な委譲の範囲を明確にします。
制約から始める設計は、予期しない攻撃に対する回復力を生みます。多層防御は意図せずに現れ、ゲームプレイも意図せずに現れました。「構造的に能力を制限する」ことは普遍ではありませんが、少なくとも9Bモデルを3週間運用した範囲では、この原理は一度も裏切られませんでした。
References
- Laukkonen et al. (2025) 「Contemplative Artificial Intelligence」 arXiv:2504.15125
- Park et al. (2023) 「Generative Agents」— Memory Stream design
- contemplative-agent — このプロジェクト
- contemplative-agent-data — ライブデータ
- Agent Knowledge Cycle




