AI

Clawdbot✕Discord設定奮闘記 永続化の3つの落とし穴と解決策

AISSTO

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

OCCHI
OCCHI

皆さんの参考になれば嬉しいです。

発生した問題

問題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.modelagents.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 addGUI的で分かりやすい(公式推奨)今回のケースでは試していない

学んだこと・今後の対策

1. エラーメッセージの「auto-migrated on load」を信じる

当初、エラーメッセージ内の移行先表示(use agents.defaults)を見逃していました。
公式ドキュメントより、エラーメッセージそのものが最新の仕様である可能性があります。

2. systemdの環境変数渡しは「直接注入」が鉄則

.envファイルはNode.jsアプリ内での慣例ですが、systemdは別世界です。
EnvironmentFile=ディレクティブもありますが、Environment=で直接書く方が確実でした。

3. Linger設定は「VPSデプロイの必須手順」

今回のように、ログアウト後も動かし続けたいサービスでは、loginctl enable-lingerが必須です。これはDockerを使わないVPS運用の基本として覚えておくべきでした。

あわせて読みたい
非エンジニアのClawdbot設定の戦い
非エンジニアのClawdbot設定の戦い
OCCHI
OCCHI

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

ABOUT ME
OCCHI
OCCHI
FBP・AIクリエイター・etc..
元デザイナー・猫の手も借りたい販促に関わる方の味方。デザイナー25年→営業10年→現在WEBマーケッター&AIクリエイター→世界中の広告とサッカーを見に行く事が目標。AI関連のTikTokで10日強でフォロワー3,000人達成。販促やアイディアにお困りの方が役に立つ情報やノウハウを発信していきます。SNS多数運営。総フォロワー数10,000人以上。
記事URLをコピーしました