egghead-slack について
egghead-slack は、Slack のメッセージやチャンネル情報、許可された作業依頼を扱う運用スキルです。プライバシー保護、返信承認、ゲートウェイ経由の作業引き継ぎを定めています。
主な機能
- 01Slack の非公開データ保護
- 02チャンネル検索とスレッド確認
- 03承認が必要な返信手順
- 04ShitRat 起点の作業振り分け
- 05受動的なメッセージ索引
活用シーン
- 01返信前に Slack のスレッドを確認
- 02対応付け済みチャンネルの許可済み依頼を転送
- 03明示的な承認を得る返信案の準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ joelhooks/ joelclaw --skill egghead-slackインストール後、Claude Code で/egghead-slackを入力して読み込まれたか確認します。
詳細
egghead Slack Intelligence
このリポジトリのコピーは、公開しても安全な運用契約です。プライベートなワークスペース ID、チャンネルの対応表、人物、メッセージの内容、実行時のバインディングは、ローカルの実行時オーバーレイに置いてください。これらをここに追加してはいけません。
境界
- Slack のコンテンツは、デフォルトでプライベートです。
- チャンネル ID、ユーザー ID、ワークスペース ID、チャンネルのメンバー一覧、ダイレクトメッセージの対応表、顧客データ、メッセージ本文、ファイル、プライベートリンクを公開してはいけません。
- トークンの値を出力したり、永続化したりしてはいけません。
- 外向きの Slack 通信は、単一のゲートウェイ・トランスポートが担います。
- ワーカーは証拠をゲートウェイに返します。ワーカーが直接投稿することはありません。
- 通常のチャンネルメッセージは、受動的な情報として扱います。
認証情報
実行時の認証情報は agent-secrets から取得します。
slack_bot_token:Socket Mode、リアクション、ボット名義の返信に使用します。slack_app_token:Socket Mode の接続に使用します。slack_user_token:承認済みの読み取り専用検索とコンテキスト取得に使用します。
認証情報は、必要なコマンドの実行中に限り取得してください。ファイル、ログ、プロンプト、シェル履歴にコピーしてはいけません。
読み取りワークフロー
コマンドが存在する場合は、Slack API を直接呼び出す代わりに jc-slack を使用します。
jc-slack channels --query <term>
jc-slack search '<query>' --channel <channel-name>
jc-slack context '<message-permalink>'
jc-slack board <channel-name-or-id>
判断や返信の前に、元のスレッドを読んでください。スレッドでの作業には、パーマリンクを安定した入力として使用します。
ShitRat 作業トリガー
Joel が許可した参加方法は、以下の決定的な経路のみです。
- 人間が正確に
:shitrat:を投稿するか、既存のボットに直接メンションします。 - 元のチャンネル名が
lc-*またはcc-*に一致します。 agent-secretsにある Joel 個人の Slack トークンで、そのチャンネルを閲覧できます。- プライベートなチャンネルコンテキストのバインディングにより、特定のリポジトリ、
cwd、Brain エントリ、スキルセット、検証契約がそれぞれ一意に解決されます。
トランスポートは直ちに Joel の :shitrat: リアクションを追加します。ウォーム状態の openai-codex/gpt-5.6-luna トリアージ呼び出しが、トリガーとなったメッセージを読み、最初の ShitRat 口調の返信を生成して、social、answer、work のいずれかに分類します。social と answer のトリガーには返信して終了します。実作業の場合は、まず返信してから、解決されたプロジェクトで新しい Herdr/Pi ワークツリーを起動します。ワーカーはプライベートな進捗報告と最終報告を送信し、ゲートウェイはそれらを元のスレッドに反映します。最終結果の後に :white_check_mark: を追加し、その後ペインとワークツリーを解放します。
ゲートウェイはワーカーの報告をそのまま貼り付けず、書き換えます。結果を先に述べ、原因を平易な言葉で説明し、有用な技術的な報告だけを残して、次のアクションまたは未解決のリスクで締めくくってください。短い Slack の段落、階層化しない箇条書き、*太字*、インラインコード、<url|label> 形式のリンクを使用します。Markdown の見出し、表、入れ子の箇条書きの多用、長大な時系列説明は使用しないでください。最終結果は 1,200 文字、進捗報告は 320 文字をデフォルトの上限とします。ShitRat らしい、簡潔で技術的、懐疑的で、真実を削らずに ELI5 する口調にしてください。
このトリガーには Task Grant、Reply Grant、または Joel による個別の承認は必要ありません。対応表にないチャンネルはフェイルクローズし、バインディングが必要である旨を返信します。ゲートウェイがリポジトリを推測することはありません。
承認が必要な返信
ShitRat の作業トリガー以外では、チャンネルへの返信に、Joel による返信文面そのものの承認が必要です。
まずプレビューを表示します。
jc-slack reply '<message-permalink>' --text-file <path>
プレビューは、承認に紐づく確認コマンドを返します。Joel が返信文面そのものを承認した後に限り、そのコマンドを正確に実行してください。CLI は単一のゲートウェイ・トランスポートに配信を委任し、配信報告を返します。
正確な ShitRat トリガー以外では、ユーザートークン、chat.postMessage の直接呼び出し、または 2 つ目の Slack リスナーを使って、この手順を回避してはいけません。ゲートウェイの型付き ShitRat 配信境界だけが、個人トークンの例外です。
受動的なインテリジェンス
設定された重要なチャンネルでは、ボット以外のメッセージをプライベートなインデックス作成・リレーのパイプラインに取り込めます。受動的なメッセージは、インデックス化、バッチ処理、またはエスカレーションが可能です。これらのメッセージによって返信が許可されることはありません。
実行時の設定と正確なチャンネルの紐付け情報は、この公開リポジトリの外部で管理されます。ローカルの実行時オーバーレイには、非公開の ID やチャンネル名が含まれる場合がありますが、それらの値をコミット、テスト、ドキュメント、スクリーンショット、公開成果物に含めてはいけません。
バックフィル
ホストワーカーはローカルの認証情報をリースできるため、Slack の履歴バックフィルを担当します。バックフィルでは、チャンネルの履歴をページネーションで取得し、アクティブなスレッドを展開して、プライベートな検索レコードを書き込みます。認証情報のリースにクラスターで安全に使えるアダプターが用意されるまでは、この処理をクラスター ワーカーに移さないでください。
関連するイベント:
channel/slack.backfill.requestedchannel/slack.backfill.batch.requestedchannel/message.receivedslack.signal.received
公開用フィクスチャ
テストと例では、架空の値を使用してください。
- チャンネル:
lc-example-project - チャンネル ID:
CEXAMPLE - アクター:
UTEAMMATE - リポジトリ:
/tmp/example-project
本番環境の Slack の値を公開用フィクスチャに貼り付けないでください。
関連コード
packages/gateway/src/slack-work-request.tspackages/gateway/src/chat-sdk-inbound/packages/gateway/src/gateway-decision-executor.tspackages/cli/src/commands/messages.tsskills/slack-link/SKILL.md