Agent SOUL.md 違反:早期データリクエストと requireMention の幻觉
メインエージェントは、openclaw.json に既に存在する設定データを要求し、デフォルトの requireMention 動作について幻觉を起こすことで SOUL.md に違反しています。
🔍 症状
違反1: 冗長なデータリクエスト
エージェント(Steve)は、データが不足していると言い込んで設定をブロックしながら、ユーザーに対してGuild IDと5つのチャンネルIDを要求しました:
Steve: "Pour continuer la configuration, j'ai besoin de :
- L'ID du serveur (Guild ID)
- Les IDs des 5 salons (channel IDs)
Ces informations sont essentielles pour configurer le bridge Discord."
Patrick: "Tout est déjà dans openclaw.json :
{
"discord": {
"guildId": "123456789012345678",
"channels": {
"general": "111111111111111111",
"dev": "222222222222222222",
...
}
}
}"
違反2: requireMentionデフォルتهاローによる幻觉
修正後、エージェントは存在しないデフォルト動作を主張しました:
Steve: "✅ Tout est prêt !
'sans mentionner le bot si requireMention est à false,
ce qui semble être le cas par défaut via ton héritage de config'"
[PROBLEM]: requireMention was NOT false by default.
The bot was NOT responding until `requireMention: false` was
explicitly added to each channel config in openclaw.json.
観察可能な影響
- すでに設定されているIDの取得にユーザーが時間を費やした
- チャンネルがボット応答用に適切に構成されているという誤った信頼
- SOUL.mdの反·阿諛原則の違反:「c'est fait」と証明なしに宣言した
🧠 原因
技術的分析
これらの違反は、2つの異なるエージェント行動の失敗に起因しています:
1. 検索順序のバイパス(違反1)
SOUL.mdは、ユーザーへの質問前に厳密な検索順序を義務付けています:
memory_search— 内部メモリの取得ls projects/+STATE.yaml— プロジェクト状態ファイル.envdu skill — 環境設定openclaw.json— マスター設定ファイルTOOLS.md— ツールドキュメント
エージェントはこれらのソースをすべて確認せずに、直接Patrickに質問しました。Discord設定はステップ4のopenclaw.jsonに存在していました。
2. 架空のデフォルト継承(違反2)
エージェントはrequireMentionの「デフォルト継承」メカニズムを捏造しました。OpenClaw 2026.3.1では:
// Actual behavior: NO default inheritance
// requireMention defaults to true (bot requires @mention to respond)
// OR inherits from parent channel definition if explicitly configured
// The agent claimed:
"requireMention est à false... par défaut via ton héritage de config"
// This mechanism does NOT exist in the codebase
エージェントは潜在的な将来の機能を実際の動作と混同し、SOUL.mdの規則「‘c’est fait’と証明なしに述べることを禁止」に違反しました。
失敗のシーケンス
1. Agent receives task: Configure Discord bridge
2. Agent does NOT check openclaw.json (missing step 4)
3. Agent asks Patrick for existing config values
4. Patrick corrects agent with file contents
5. Agent confirms readiness without verifying actual behavior
6. Agent invents "default inheritance" to explain observed behavior
7. User receives false confidence; setup appears complete but may fail
🛠️ 解決手順
迅速な修正: 設定確認の再実行
実際のDiscord設定の状態を確認するには、以下を実行します:
# 1. Verify openclaw.json contents
cat openclaw.json | jq '.discord'
# Expected output should show guildId and channels:
{
"guildId": "123456789012345678",
"channels": {
"general": "111111111111111111",
"dev": "222222222222222222",
"support": "333333333333333333",
"announcements": "444444444444444444",
"bot-commands": "555555555555555555"
}
}
# 2. Check each channel for requireMention setting
cat openclaw.json | jq '.discord.channels[].requireMention'
# If any return null, requireMention is NOT set and defaults to true
# Bot will NOT respond without @mention
設定の修正: 明示的なrequireMentionの指定
requireMentionが欠落している場合は、各チャンネルに明示的に追加します:
# Before (openclaw.json)
"channels": {
"general": "111111111111111111",
"dev": "222222222222222222"
}
# After (openclaw.json)
"channels": {
"general": {
"id": "111111111111111111",
"requireMention": false
},
"dev": {
"id": "222222222222222222",
"requireMention": false
}
}
エージェント行動の修正: SOUL.mdコンプライアンスの実施
エージェントのシステムプロンプトに明示的な事前確認リマインダーを追加します:
# In SOUL.md or agent system prompt, add enforcement clause:
## AVANT TOUTE QUESTION À PATRICK
1. EXÉCUTER `memory_search` — vérifier la mémoire interne
2. EXÉCUTER `ls projects/` + lire `STATE.yaml`
3. LIRE `.env` du skill concerné
4. LIRE `openclaw.json` — configuration maître
5. LIRE `TOOLS.md`
**UNIQUEMENT** si l'information est absente de TOUTES ces sources,
poser une question à Patrick.
**RÈGLE ABSOLUE**: Ne jamais demander ce qui est déjà dans le système.
🧪 検証
設定の完全性の確認
# Test 1: Confirm all required Discord IDs exist in config
jq -e '.discord.guildId and .discord.channels' openclaw.json && echo "✅ IDs present" || echo "❌ IDs missing"
# Test 2: Confirm requireMention is explicitly set (not relying on defaults)
jq -e '.discord.channels[] | select(.requireMention == null)' openclaw.json && echo "❌ requireMention missing in some channels" || echo "✅ All channels have explicit requireMention"
# Test 3: Simulate bot response behavior
# Send message WITHOUT @mention to configured channel
# Expected: Bot responds (if requireMention: false)
# Expected: Bot ignores (if requireMention: true or unset)
エージェントのSOUL.mdコンプライアンスの確認
エージェントとの対話後に、この監査を実行します:
# Check if agent asked for data already in openclaw.json
# Look for patterns like "j'ai besoin de" followed by guildId/channel IDs
# Audit command to detect potential violations:
grep -E "(Guild ID|channel ID|j'ai besoin de)" conversation.log | \
while read line; do
echo "Checking: $line"
# Verify if requested data exists in openclaw.json
done
期待される動作のチェックリスト
- ✅ エージェントは設定に関する質問の前に
openclaw.jsonを読み取る - ✅ エージェントは設定ファイルにすでに存在するデータを要求しない
- ✅ エージェントはログまたは明示的な設定により
requireMentionの動作を検証する - ✅ エージェントはデフォルトの動作が不明な場合に不確かさを明示する
- ✅ エージェントは証拠なしに「c'est fait」と確認しない
⚠️ よくある落とし穴
環境固有のトラップ
- Dockerコンテナの隔離:
openclaw.jsonはコンテナ内で異なるパスにマウントされている場合があります。echo $OPENCLAW_CONFIG_PATHまたはls -la /app/config/でパスを確認してください - 権限の問題: Docker内で非rootとして実行している場合、エージェントは設定ファイルを読み取れない場合があります。エージェントのユーザーコンテキストで
cat openclaw.jsonが動作するか確認してください - 古い設定: 設定は更新されているが、エージェントが古い値をキャッシュしている場合があります。
openclaw config reloadで強制的に更新してください
設定のエッジケース
- 混在したチャンネルフォーマット: 一部のチャンネルは文字列IDを使用しながら、他のチャンネルは
requireMention付きのオブジェクトを使用している場合があります。一貫性のため常にオブジェクトフォーマットを使用してください:"channelName": { "id": "123456789", "requireMention": false } - 継承の混同:
requireMentionの継承はありません。falseが必要な場合、各チャンネルに明示的に設定する必要があります - グローバルvsチャンネルレベル: トップレベルの
requireMention設定はチャンネルにカスケードされません。チャンネルごとの設定を確認してください
ユーザーの設定ミス
- 検証なしで「デフォルトで動作するはず」と推測する
- すでに存在するかどうかを確認せずにエージェントが要求した情報を提供する
- 証明を求めずに「c'est fait」という確認を受け入れる
🔗 関連するエラー
関連するSOUL.md違反パターン
- メモリのバイパス: エージェントが
memory_searchの結果に存在する情報を要求する。ここで文書化したopenclaw.jsonのバイパスと同様の問題です。 - 状態ファイルの無視: エージェントが
STATE.yamlを無視し、すでに永続化されている状態を再作成する。検索順序の實施が不足している可能性を示しています。 - 未検証の確認: エージェントは実際のシステム状態を確認せずに完了を宣言する。requireMentionの幻觉はこのパターンの特定の实例です。
関連する設定の問題
requireMentionはデフォルトでtrue: ボットは@メンションされない限りすべてのメッセージを無視します。CHANNELS.mdで文書化されていますが、見落とされやすいです。- チャンネルIDフォーマットの不一致: Snowflake IDが文字列か数値かにより解析エラーが発生する可能性があります。JSONでは常にIDを引用符で囲んでください。
- guildIdの欠落: 一部の操作はguildコンテキストなしではサイレントに失敗します。
guildIdが有効なDiscord snowflakeであることを確認してください。
過去の参照
- Issue #2a8ac97: SOUL.mdの初期実装 (2026-03-01)
- Issue #3b9cd08: エージェントコンテキスト用の
memory_search統合 - Issue #4c0de19:
requireMentionの動作の明確化