Clawdbot✕Discord設定奮闘記 永続化の3つの落とし穴と解決策
VPS上でDiscordにClawdbot「Claude 3.5 Sonnet」を搭載しようとしたところ、複数の技術的障壁に遭遇しました。
本記事では、agent.model設定の仕様変更、API Key読み込み問題、systemdサービスのログアウト停止という3つの問題とその解決策を詳細に記録します。

皆さんの参考になれば嬉しいです。
発生した問題
問題1: Config設定キーの移行エラー
pnpm start config set agent.model "anthropic/claude-3-5-sonnet-latest"
を実行したところ、以下のエラーが発生。
Error: Config validation failed: <root>: Unrecognized key: "secrets"
Command failed with exit code 1.
Error: Config validation failed: agent: agent.* was moved; use agents.defaults (and tools.* for tool/exec settings) instead (auto-migrated on load).
発生条件:
- Clawdbot v2026.1.25
- 初回AI Provider設定時
影響範囲:
- モデル設定が保存されず、既存のGemini設定のまま動作
問題2: API Key認証エラー(401 Invalid Key)
Anthropic APIキーを .envファイルに追加後、Discordで以下のエラーが発生。
HTTP 401: authentication_error: invalid x-api-key
発生条件:
- 手動起動(
pnpm start gateway)では「No API key found」 - systemdサービス起動では「401 Invalid Key」
影響範囲:
- キーが読み込まれていない(手動)またはキーの形式問題(systemd)
問題3: ターミナル閉鎖時のサービス停止
systemdで active (running)状態を確認したにもかかわらず、SSH接続を切断するとBotが応答停止。
発生条件:
systemctl --user restart clawdbot-gatewayで起動後- SSH切断(
exitまたはターミナル×ボタン)
影響範囲:
- 24時間稼働が不可能(ログアウト時に全プロセス終了)
原因の特定
なぜconfig keyが変わったか?
Clawdbotは2026年初旬のバージョンアップで設定構造を変更していました。
公式ドキュメントには反映されていないものの、エラーメッセージ内で明示的に移行先を示しています。
agent.* → agents.defaults.*
tools.* → (新しいスキーマ)
この設計変更により、マルチエージェント対応が可能になったようですが、後方互換性のない破壊的変更でした。
なぜAPI Keyが読み込まれなかったか?
systemdのuser serviceは、デフォルトで作業ディレクトリの .envファイルを自動読み込みしません。
手動起動時も、pnpm v9以降は明示的な --env-fileオプションが必要です。
さらに、systemd overrideファイル(~/.config/systemd/user/clawdbot-gateway.service.d/override.conf)で環境変数を渡す必要がありました。
なぜログアウトでサービスが止まったか?
LinuxのPAM(Pluggable Authentication Modules)は、ユーザーログアウト時にそのユーザーのプロセスを全て終了する設計です。
systemd user serviceも例外ではなく、lingering(居残り)設定がない限り、セッション終了で停止します。
解決策

解決策1: 正しいConfig Keyで設定
cd clawdbot
pnpm start config set agents.defaults.model "anthropic/claude-3-5-sonnet-latest"
ポイント:
agent.model→agents.defaults.modelに変更- 必ず
clawdbotディレクトリ内で実行(package.jsonが必要)
解決策2: systemd環境変数の直接注入
.envファイルに頼らず、systemd override設定で直接キーを渡します。
mkdir -p ~/.config/systemd/user/clawdbot-gateway.service.d
printf "[Service]\nEnvironment=\"ANTHROPIC_API_KEY=sk-ant-xxxxxxxx\"\n" > ~/.config/systemd/user/clawdbot-gateway.service.d/override.conf
systemctl --user daemon-reload
systemctl --user restart clawdbot-gateway
検証手順:
手動起動で事前にキーの有効性を確認してから、systemdに適用するのが確実です。
export ANTHROPIC_API_KEY="sk-ant-xxxxxxxx"
pnpm start gateway
# Discordで動作確認後 Ctrl+C
解決策3: Linger有効化で永続稼働
loginctl enable-linger $USER
これにより、SSH切断後もユーザーのsystemdサービスが継続動作します。
確認コマンド:
systemctl --user status clawdbot-gateway
以下の表示が出れば成功です。
● clawdbot-gateway.service - Clawdbot Gateway (v2026.1.25)
Active: active (running)
検証結果
修正後の動作
- Discordで「こんにちは」に対してClaudeが日本語で応答
- 特徴的な性格表現(「目は覚めたばかりなんです」等)を確認
- SSH切断後も継続応答を確認(1分間隔で3回テスト)
ログ確認
journalctl --user -u clawdbot-gateway -f
正常動作時のログ例:
[gateway] listening on 127.0.0.1:18789
[discord] logged in as MyClawdbot#1234
[browser/s] ブラウザ設定 (headless + noSandbox)
代替アプローチ
| 方法 | メリット | デメリット |
|---|---|---|
.env + direnv | プロジェクト単位で管理しやすい | systemdから読み込めない |
| systemd override | 確実に読み込まれる | 複数サーバーで管理が煩雑 |
clawdbot agents add | GUI的で分かりやすい(公式推奨) | 今回のケースでは試していない |
学んだこと・今後の対策
1. エラーメッセージの「auto-migrated on load」を信じる
当初、エラーメッセージ内の移行先表示(use agents.defaults)を見逃していました。
公式ドキュメントより、エラーメッセージそのものが最新の仕様である可能性があります。
2. systemdの環境変数渡しは「直接注入」が鉄則
.envファイルはNode.jsアプリ内での慣例ですが、systemdは別世界です。EnvironmentFile=ディレクティブもありますが、Environment=で直接書く方が確実でした。
3. Linger設定は「VPSデプロイの必須手順」
今回のように、ログアウト後も動かし続けたいサービスでは、loginctl enable-lingerが必須です。これはDockerを使わないVPS運用の基本として覚えておくべきでした。


今後も奮闘記あげていきます!
