Clawdbotって何?
Clawdbotは、自分専用のAIエージェントをローカルで動かせるオープンソースのツールだ。
Slack, Discord, Telegramなど普段使っているメッセージングアプリにAIアシスタントを住まわせることができる。
データは全て自分のマシンに保存され、クラウドに依存しない。
AI Assistantといえばクラウドベースのサービスを思い浮かべる人が多いと思うが、ローカルで全部完結するので「外部のサービスに情報渡したくないよーーーー!」という人にはとてもいい設計になっている。
しかもGithubを使えばDBなしで運用できちゃう。最高か?
公式サイト: https://clawd.bot/
GitHub: https://github.com/clawdbot/clawdbot
なぜSlackに導入しようと思ったか
弊社ではSlackでコミュニケーションを取っている。ChatGPTやClaudeを使うときに毎回ブラウザを開くのが面倒だったし、チーム全員が同じAIアシスタントと会話できたら便利だと思った。
Xに上がっているスクリーンショットだとDiscordの方が多かったのでSlackは面倒なのでは?という懸念もあったが、キャッチアップも踏まえてSlackを採用した。
インストール
前提条件
- Node.js 22以上
- npm, pnpm, bun
curlでもいける。
基本インストール
curl -fsSL https://clawd.bot/install.sh | bash
これでグローバルにclawdbotがインストールされる。
初期設定(オンボーディング)
clawdbot onboard
対話形式でセットアップが始まる。
コードエディタでも設定できるが、今回は対話形式で設定することにした。
利用したいモデルについては、すでにChatGPTのCodexやClaudeCodeを使用している人はAPIを発行せずに各種AIサービスでアクセストークンを発行すればOK。
Slack連携の設定
ここからが本題。
Slack連携には2つのトークンが必要になる。
- Bot Token(xoxb-...)
- App Token(xapp-...)
onboardでセットアップすると順番に聞かれるので、両方ともメモを取ることを忘れずに。
Step 1: Slack Appの作成
- https://api.slack.com/apps にアクセス
- 「Create New App」→「From scratch」を選択
- App名とワークスペースを選んで作成
Step 2: Socket Modeを有効化
- 左メニューから「Socket Mode」を選択
- トグルをONにする
Step 3: App Token(xapp-...)の取得
- 「Basic Information」→「App-Level Tokens」セクションへ
- 「Generate Token and Scopes」をクリック
- Token名を入力(例: CLawdbot_Token)
- Scopeに
connections:writeを追加 - 「Generate」をクリック
- 表示された
xapp-...トークンをコピー
Step 4: Bot Token Scopesの設定
- 「OAuth & Permissions」を選択
- 「Bot Token Scopes」に以下を追加:
chat:write
channels:history
channels:read
groups:history
groups:read
im:history
im:read
im:write
mpim:history
mpim:read
users:read
app_mentions:read
Step 5: ワークスペースへインストール
- 「OAuth & Permissions」ページ上部の「Install to Workspace」をクリック
- 権限を確認して「許可する」
- 表示された「Bot User OAuth Token」(xoxb-...)をコピー
ここまでやればappTokenとbotTokenがわかるようになる。
それぞれコピーしてターミナルに貼り付けよう。
Step 5-1: groupPolicyの設定
特定のチャンネルでしか使わない!という方は、groupPolicyをallowlistにして、使用予定のSlackチャンネルをコピー→ペーストしておこう。
特に決めていなかったり、どこでも使えた方がいいという方はallに設定すればOK。
Step 6: Event Subscriptionsの設定
- 「Event Subscriptions」を選択
- トグルをONにする
- 「Subscribe to bot events」で以下を追加:
message.channels
message.groups
message.im
message.mpim
app_mention
Step 7: App Homeの設定
もしチャンネルだけでなく、アプリにDMを送信したいならこの項目も設定しておこう。
- 「App Home」を選択
- 「Messages Tab」をONにする
- 「Allow users to send Slash commands and messages from the messages tab」にチェック
これを忘れると「このアプリへのメッセージ送信はオフにされています」と表示されるので要注意。
DMは使わないよーという場合はスルーしてOK。
Step 8: Clawdbotに設定
オンボーディング中に聞かれたら入力するか、設定ファイルを直接編集して反映。
"channels": {
"slack": {
"mode": "socket",
"webhookPath": "/slack/events",
"enabled": true,
"botToken": "xoxb-......",
"appToken": "xapp-......",
"userTokenReadOnly": true,
"groupPolicy": "allowlist",
"channels": {
"clawdbot": {
"allow": true
}
}
}
},
Step 9: 起動
clawdbot daemon start
clawdbot status
Slackが「OK」と表示されれば成功。
Channels
┌──────────┬─────────┬────────┬─────────────────────────────────┐
│ Channel │ Enabled │ State │ Detail │
├──────────┼─────────┼────────┼─────────────────────────────────┤
│ Slack │ ON │ OK │ tokens ok (bot config, app ... │
└──────────┴─────────┴────────┴─────────────────────────────────┘
あとはSlackの使いたいチャンネルにアプリを追加すれば準備は完了だ。
onboardだとgatewayやらおすすめのSkillsやらをターミナル上で設定することができる。
必要になったら入れるでもいいので、ここでは割愛する。
ここまでやればとりあえずSlackにclawdbotを導入できると思う。
ハマったポイント:セッションのキャッシュ問題
そしてここからがタイトルにもある通り、本当に伝えたいこと。
症状
Slackでメンションを飛ばしても、全く返信が返ってこないという問題に直面した。
clawdbot statusではSlackは「OK」
clawdbot logs --followを見ると、メッセージは受信している
でもSlackには何も投稿されない
ログを詳しく見ると、エージェントの処理は完了しているのにdelivered replyのログがない。
07:27:46 debug agent/embedded embedded run start...
07:27:48 debug agent/embedded embedded run done... aborted=false
処理は成功しているのに、送信されていない。
原因を探る
Web UIでセッションの中身を確認してみた。
すると、エージェントは「NO_REPLY」を返していた。
System: [2026-01-26 16:27:45 GMT+9] Slack message in #clawdbot
from User Name: <@U0JAOOA1GA6> テストです。いけてますか?
You 16:27
A NO_REPLY
なぜ「NO_REPLY」なのか。
実は今回、最初に別のSlackアプリ(ClawdBot_forSlack)を作成して動作確認をしていた。
その後、この記事の内容が間違っていないか、確認の意味も込めて新しいアプリを作り直してチャンネルへ招待する。という過程を踏んでいた。
セッションの履歴を見ると、以前のClawdBot_forSlackとの会話が残っていたのだ。
[Slack #clawdbot] User Name: <@U0JAOOA1GA6> まずうちの会社の説明をするよ...
古いボットのユーザーID: U0JAOOA1GA6
新しいボットのユーザーID: U0BOUUA0FA1
セッションには「U0JAOOA1GA6へのメンションには応答する」というパターンが学習されていて、U0BOUUA0FA1へのメンションは「自分宛てではない」と判断されていた。
なので実際にはU0BOUUA0FA1に対してのメンションでも、キャッシュの影響でClawdbotはユーザーからのメッセージの対象を誤認してしまっていたのだ。
解決方法
セッションを全削除してリセット:
rm -rf ~/.clawdbot/agents/main/sessions/*
clawdbot daemon restart
これで新しいセッションが作成され、正常に応答するようになった。
もちろんセッションを削除したことで色々な不都合は起こり得るだろうが、自己紹介程度しかしていない今回はそう大きな問題にはならなかった。
実際に使ってみた感想
導入さえできてしまえば、かなり便利。
Slackでメンションするだけで自分がサブスクしてるAIのエージェントが使えるし、
社内メンバーのメンション情報を覚えてくれる。
SlackとGitHubを連携していればghコマンド経由でリポジトリ操作ができる。
さらには「5分後に俳句を詠んで」みたいな定期実行も依頼できる。
ただ、セットアップのハードルは正直高い。
Slackの権限設定だけでもかなり時間がかかる。
非エンジニアには厳しいと思う。
まとめ
- Clawdbotは自分専用のAIエージェントをローカルで動かせるツール
- Slack連携にはBot Token(xoxb-)とApp Token(xapp-)の両方が必要
- Socket ModeとApp Homeの設定を忘れずに
- ボットを作り直して同じチャンネルで使うなら、必ずセッションをリセットすること
-
rm -rf ~/.clawdbot/agents/main/sessions/*で解決
感想
AIエージェントが本当に必要かどうかはまだわからない。
そもそも僕はエンジニアだから、Claude Codeでも正直問題ない。
何よりこれはローカルで動くものだから、僕がターミナルを落とせば誰も使えなくなってしまう。
だからこそMac miniのような安くて優秀なマシンを一台買って動かしておく動きが流行っているわけだ。
ただ僕がAIエージェントを使える環境を用意することで、ClaudeCodeを触らない非エンジニアのチームメンバーや経営者にもAIエージェントを使ってもらうことができるというのは、かなり大きなメリットではないだろうか。
「あれってどうなってたっけ?」「今のプロジェクトの進捗は?」
みたいな誰かの時間を取るほどでもない質問を気軽に投げられるのはとても魅力的だ。
この記事が誰かの役に立ってくれることをこころから願っている。
もし記事に誤りやわかりづらい点があれば、ぜひ温かいコメントをお待ちしている。
参考リンク
- Clawdbot公式サイト
https://clawd.bot/ - Clawdbot GitHub
https://github.com/clawdbot/clawdbot - Clawdbot Docs
https://docs.clawd.bot/ - Slack API Apps
https://api.slack.com/apps - Clawdbot Slack設定ドキュメント
https://docs.clawd.bot/channels/slack




