
2026/02/06 6:38
Show HN:エージェント用のSlack CLI
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要
主なメッセージ
agent‑slack は、TypeScript + Bun の CLI で、AI エージェントの Slack 統合を簡素化し、簡潔でトークン効率的な JSON 出力とゼロ設定認証を提供します。
主な機能と根拠
- インストール:ワンライナーシェルスクリプトまたは
。npx skills add stablyai/agent-slack - 認証:macOS では自動的に Slack デスクトップデータを読み込み、失敗した場合は Chrome の抽出へフォールバックし、手動インポート (
,auth import-desktop
) または環境変数 (auth import-chrome
,SLACK_TOKEN
) を使用。SLACK_COOKIE_D - コアコマンド:
– ログイン / 資格情報のインポート。auth
– 単一メッセージ取得、スレッドまたはチャンネル履歴のリスト化、メッセージ送信、メッセージへのリアクション;URL、チャンネル名 (message get/list/send/react
) または ID、およびオプションでスレッドタイムスタンプ / ワークスペース URL を受け付け。#general
– デフォルト最大200ユーザーをリスト化または ID/ハンドルで特定ユーザー取得;メールフィールドは適切なスコープがある場合のみ表示。user list/get
– チャンネル、ユーザー、日付範囲 (search all/messages/files
,--after
) 、コンテンツタイプでフィルタリング;ファイル検索は一致するファイルをダウンロード。--before
– URL またはワークスペース内の ID を通じて Slack キャンバスを Markdown として取得。canvas get
- 出力:すべてのコマンドは null/空フィールドを積極的に削除した JSON を返します。添付ファイル(スニペット、画像、アタッチメント)は自動で
にダウンロードされ、エージェントが利用できる絶対パスとして返却。~/.agent-slack/tmp/downloads/
開発と貢献
ガイドラインとオープンソースロードマップは
CONTRIBUTING.md に記載されています。
インパクト
最小限のボイラプレートで即座に使用可能な CLI を提供することで、開発者は Slack ワークフローを AI エージェントへ迅速に埋め込み、チーム全体で高速なボット開発とデータ抽出を実現できます。
本文
agent-slack
AI エージェント用 Slack 自動化 CLI(TypeScript + Bun)
指針:
- デフォルトでトークン効率の良い出力(コンパクトな JSON、重複最小化、空/NULL フィールドは除外)を行うので、LLM が安価に結果を消費できる。
- 設定不要認証 – Slack Desktop があれば認証は自動で完了し、失敗した場合は Chrome からのフォールバックも利用可能。Python の依存は無し。
概要
| カテゴリ | コマンド |
|---|---|
| Read | メッセージ取得、スレッド判定、全スレッド一覧 |
| Search | メッセージ + ファイル(フィルタ付き) |
| Artifacts | スニペット/画像/ファイルを自動ダウンロードしローカルパスで返す |
| Write | スレッド内返信、リアクション追加/削除 |
| Canvas | Slack Canvas を Markdown 形式で取得 |
インストール
curl -fsSL https://raw.githubusercontent.com/stablyai/agent-slack/master/install.sh | sh
エージェントスキル
リポジトリには
skills/agent‑slack/ に Claude Code、Codex、Cursor 等で使用できるエージェントスキルが同梱されています。推奨は
skills.sh からのインストールです:
npx skills add stablyai/agent-slack
手動の場合:
bash ./scripts/install-skill.sh
コマンド構成(概要)
agent-slack ├── auth │ ├── whoami │ ├── test │ ├── import-desktop │ ├── import-chrome │ └── parse-curl ├── message │ ├── get <target> # 1 件のメッセージ (+ スレッドメタ) │ ├── list <target> # フルスレッド取得 │ ├── send <target> <text> # 送信/返信(自動で適切に処理) │ └── react │ ├── add <target> <emoji> │ └── remove <target> <emoji> ├── user │ ├── list │ └── get <user> ├── search │ ├── all <query> # メッセージ+ファイル │ ├── messages <query> │ └── files <query> └── canvas └── get <canvas-url-or-id> # Canvas → Markdown
出力は常に JSON で、NULL/空フィールドを積極的に除外。
添付ファイルは自動ダウンロードされ、絶対パスとして返却されます。
認証(面倒なセットアップ不要)
macOS では認証が自動で行われます:
- デフォルト: Slack Desktop のローカルデータを読み込む(Slack を終了する必要なし)
- フォールバック: 失敗した場合は Chrome から抽出(Chrome に Slack が開いている場合)
手動インポートも可能です:
agent-slack auth whoami agent-slack auth import-desktop agent-slack auth import-chrome agent-slack auth test
また環境変数で設定できます:
export SLACK_TOKEN="xoxc-..." # ブラウザトークン export SLACK_COOKIE_D="xoxd-..." # cookie d agent-slack auth test
あるいは標準の Slack トークン(xoxb/xoxp)を使う場合:
export SLACK_TOKEN="xoxb-..." agent-slack auth test
ターゲット:URL かチャンネル
message get / message list は Slack メッセージ URL またはチャンネル参照のいずれでも受け付けます。
URL:
https://workspace.slack.com/archives/<channel>/p<digits>[?thread_ts=...]
チャンネル:
#general(または general)やチャンネル ID 例:C0123...
実際の使用例:
# チャンネル + ts で単一メッセージ取得 agent-slack message get "#general" --ts "1770165109.628379" # スレッドルート ts でフルスレッド取得 agent-slack message list "#general" --thread-ts "1770165109.000001"
複数ワークスペースを設定している場合、チャンネル名(
#channel / channel)を使うときは--workspace を渡すか SLACK_WORKSPACE_URL を設定します:
agent-slack message get "#general" --workspace "https://stablygroup.slack.com" --ts "1770165109.628379"
例
メッセージ / スレッドの読み取り
# 単一メッセージ (+ スレッド概要) agent-slack message get "https://workspace.slack.com/archives/C123/p1700000000000000" # メッセージに対するフルスレッド agent-slack message list "https://workspace.slack.com/archives/C123/p1700000000000000"
オプションでリアクションやリアクター情報を含めることも可能
agent-slack message get <url> --include-reactions
message get vs. list
-
は単一メッセージを取得します。スレッド内の場合は、スレッドのメタ(返信数・参加者)も返却しつつ、全文は含めません。message get{ "message": { "ts": "...", "text": "...", "user": "U123", ... }, "thread": { "replyCount": 5, "participants": ["U123","U456"] } } -
はスレッド内の全メッセージ(またはチャンネル履歴)を取得します。全文が必要な場合はこちら。message list{ "messages": [ { "ts":"...", "text":"...", "user":"U123", ... }, { "ts":"...", "text":"...", "user":"U456", ... } ] }
get は単一メッセージ確認やスレッド展開の可否をチェックする際に、list は完全な会話を読み取りたいときに使用します。
ファイル(スニペット/画像/添付)
message get/list は添付ファイルを自動でダウンロードし、エージェントが直接利用できる一時ディレクトリへ保存して絶対パスを返します。
- macOS デフォルト:
~/.agent-slack/tmp/downloads/
エージェントはそのパスから直接読み取れます(例:スニペットは
.txt、画像は .png)。
検索(メッセージ + ファイル)
# メッセージとファイルを同時に検索 agent-slack search all "smoke tests failed" --channel "#alerts" --after 2026-01-01 --before 2026-02-01 # メッセージのみ検索 agent-slack search messages "stably ai" --user "@stablyai" --channel general # ファイルのみ検索(ダウンロードしてローカルパスを返す) agent-slack search files "testing" --content-type snippet --limit 10
ヒント:
信頼できる結果を得るには
--channel ... を必ず指定します(チャンネル限定検索は履歴/ファイルをローカルでフィルタ)。複数ワークスペース間で #channel 名を使う場合は --workspace https://...slack.com を設定してください。
ユーザー情報
# ユーザー一覧(メールアドレス取得には適切な Slack スコープが必要;欠損フィールドは除外) agent-slack user list --workspace "https://workspace.slack.com" --limit 200 | jq . # ID またはハンドルでユーザーを取得 agent-slack user get U12345678 --workspace "https://workspace.slack.com" | jq . agent-slack user get "@alice" --workspace "https://workspace.slack.com" | jq .
Canvas を Markdown 形式で取得
agent-slack canvas get "https://workspace.slack.com/docs/T123/F456" agent-slack canvas get "F456" --workspace "https://workspace.slack.com"
開発 / コントリビュート
CONTRIBUTING.md をご覧ください。
Stably
Code. Ship. Test.
Documentation · Homepage