mcpField
C
claude-to-im

claude-to-im

github.com/op7418エージェントワークフロー2.9k7.1k 回インストール31 週間前に更新
リポジトリ

claude-to-im について

claude-to-im は、Claude とメッセージングチャネル間のブリッジを設定・運用するスキルです。セットアップの案内に加え、起動、停止、状態確認、診断を行えます。

主な機能

  1. 01チャネルの対話型セットアップ
  2. 02ブリッジの起動と停止
  3. 03状態とログの確認
  4. 04設定の変更
  5. 05診断チェック

活用シーン

  1. 01Claude を対応するメッセージングチャネルに接続
  2. 02ブリッジの稼働状況を確認
  3. 03問題発生後にログを調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/op7418/claude-to-im-skill --skill claude-to-im

インストール後、Claude Code で/claude-to-imを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
CLAUDE.md
config.env.example
SECURITY.md
LICENSE
README.md
README_CN.md
package-lock.json
package.json
evals/
evals.json
references/
setup-guides.md
troubleshooting.md
usage.md
token-validation.md
scripts/
build.js
daemon.ps1
daemon.sh
supervisor-macos.sh
doctor.sh
install-codex.sh
supervisor-linux.sh
supervisor-windows.ps1
src/__tests__/
llm-provider.test.ts
codex-provider.test.ts
config.test.ts
store.test.ts
permission.test.ts
weixin-adapter.test.ts
weixin-api.test.ts
logger.test.ts

詳細

Claude-to-IM ブリッジスキル

Claude-to-IM ブリッジを管理します。 ユーザーデータは ~/.claude-to-im/ に保存されます。

スキルディレクトリ(SKILL_DIR)は ~/.claude/skills/claude-to-im にあります。 Codex のインストール環境では、代わりに ~/.codex/skills/Claude-to-IM-skill の場合があります。 どちらのパスも存在しない場合は、パターン **/skills/**/claude-to-im/SKILL.md または **/skills/**/Claude-to-IM-skill/SKILL.md を使って Glob で検索し、結果からルートを導き出します。

コマンドの解析

$ARGUMENTS からユーザーの意図を解析し、次のいずれかのサブコマンドに分類します。

ユーザーの発言(例)サブコマンド
setup、configure、配置、我想在飞书上用 Claude、帮我连接 Telegram、帮我接微信setup
start、start bridge、启动、启动桥接start
stop、stop bridge、停止、停止桥接stop
status、bridge status、状态、运行状态、怎么看桥接的运行状态status
logs、logs 200、查看日志、查看日志 200logs
reconfigure、修改配置、帮我改一下 token、换个 botreconfigure
doctor、diagnose、诊断、挂了、没反应了、bot 没反应、出问题了doctor

判別:status と doctor — ブリッジが実行中かどうかを確認したいだけの場合(情報の確認)は status を使います。ユーザーが問題を報告したり、何かが壊れていると疑ったりしている場合(診断)は doctor を使います。判断に迷い、ユーザーが症状(例:「没反应了」、「挂了」)を説明している場合は、doctor を優先します。

logs のオプションの数値引数を抽出します(デフォルトは 50)。

ユーザーにプラットフォームの認証情報を尋ねる前に、内部で SKILL_DIR/references/setup-guides.md を読み、各認証情報の取得先を確認してください。ガイド全体を最初にユーザーへ提示してはいけません。必要な次の手順だけを伝えます(例:「https://open.feishu.cn → アプリ → Credentials に移動して App ID を確認してください」)。ユーザーが方法を知らないと言った場合は、ガイドの該当セクションを提示してください。

実行環境の検出

サブコマンドを実行する前に、実行環境を検出します。

  1. Claude Code — AskUserQuestion ツールが利用可能です。対話形式のセットアップウィザードで使用します。
  2. Codex / その他 — AskUserQuestion は利用できません。対話なしの手順案内に切り替え、SKILL_DIR/config.env.example を提示し、ユーザーに ~/.claude-to-im/config.env を手動で作成するよう依頼します。

利用可能なツールの一覧に AskUserQuestion が含まれているか確認して、これを判定できます。

設定の確認(start、stop、status、logs、reconfigure、doctor に適用)

setup 以外のサブコマンドを実行する前に、~/.claude-to-im/config.env が存在するか確認します。

  • 存在しない場合:
    • Claude Code の場合:ユーザーに「設定が見つかりません」と伝え、AskUserQuestion を使って setup ウィザードを自動的に開始します。
    • Codex の場合:ユーザーに「設定が見つかりません。次の例を参考に ~/.claude-to-im/config.env を作成してください:」と伝え、SKILL_DIR/config.env.example の内容を提示して終了します。デーモンを起動しようとしてはいけません。config.env がないと起動時にプロセスがクラッシュし、古い PID ファイルが残って次回以降の起動を妨げます。
  • 存在する場合: 要求されたサブコマンドを続行します。

サブコマンド

setup

対話形式のセットアップウィザードを実行します。このサブコマンドには AskUserQuestion が必要です。利用できない場合(Codex 環境)は、SKILL_DIR/config.env.example の内容を項目ごとの説明とともに提示し、ユーザーに設定ファイルを手動で作成するよう指示します。

AskUserQuestion が利用可能な場合は、入力を1 項目ずつ収集します。回答を受け取るたびに、次の質問へ進む前に値をユーザーに確認します(シークレットは末尾 4 文字のみ表示します)。

ステップ 1 — チャネルを選択 有効にするチャネルを尋ねます(telegram、discord、feishu、qq、weixin)。カンマ区切りの入力を受け付けます。それぞれを簡単に説明します:

  • telegram — 個人利用に最適です。ストリーミングプレビュー、インライン権限ボタン。
  • discord — チーム利用に適しています。サーバー/チャネル/ユーザーレベルのアクセス制御。
  • feishu(Lark) — Feishu/Lark チーム向けです。ストリーミングカード、ツールの進捗、インライン権限ボタン。
  • qq — QQ の C2C プライベートチャット専用です。インライン権限ボタンなし、ストリーミングプレビューなし。権限はテキストの /perm ... コマンドを使用します。
  • weixin — WeChat の QR ログイン。連携できるアカウントは 1 つのみで、新しくログインすると以前のアカウントが置き換わります。インライン権限ボタンなし、ストリーミングプレビューなし。権限はテキストの /perm ... コマンドまたは簡易的な 1/2/3 の返信を使用します。音声メッセージは WeChat 自身の音声テキスト変換によるテキストのみを使用し、生の音声データはブリッジでは文字起こしされません。

ステップ 2 — チャネルごとにトークンを収集する

有効にするチャネルごとに、認証情報を 1 つずつ収集します。それぞれの値がどこにあるかを 1 文でユーザーに伝えます。ユーザーが助けを求めたり、どこにあるかわからないと述べたりした場合にのみ、(SKILL_DIR/references/setup-guides.md から)ガイドのセクション全体を表示します:

  • Telegram:Bot Token → 確認(マスク表示)→ Chat ID(取得方法についてはガイドを参照)→ 確認 → Allowed User IDs(任意)。重要: Chat ID と Allowed User IDs の少なくとも一方を設定する必要があります。設定しない場合、ボットはすべてのメッセージを拒否します。
  • Discord:Bot Token → 確認(マスク表示)→ Allowed User IDs → Allowed Channel IDs(任意)→ Allowed Guild IDs(任意)。重要: Allowed User IDs と Allowed Channel IDs の少なくとも一方を設定する必要があります。設定しない場合、ボットはすべてのメッセージを拒否します(デフォルトで拒否)。
  • Feishu:App ID → 確認 → App Secret → 確認(マスク表示)→ Domain(任意)→ Allowed User IDs(任意)。認証情報を収集したら、ユーザーが完了する必要のある2段階のセットアップを説明します。
    • フェーズ1(ブリッジ起動前):(A)権限を一括追加、(B)ボット機能を有効化、(C)最初のバージョンを公開し、管理者の承認を受ける。これにより、権限とボットが有効になります。
    • フェーズ2(ブリッジの実行が必要):(D)/claude-to-im start を実行、(E)長時間接続モードでイベント(im.message.receive_v1)とコールバック(card.action.trigger)を設定、(F)2つ目のバージョンを公開し、管理者の承認を受ける。
    • 2段階に分ける理由: Feishuでは、イベントサブスクリプションの保存時にWebSocket接続を検証します。ブリッジが実行されていないと、保存に失敗します。ブリッジが接続するには、公開済みの権限が必要です。
    • 短いチェックリストにまとめ、完全なガイドは求められた場合のみ提示してください。
  • QQ:必須項目を2つ収集してから、任意項目を尋ねます。
    1. QQ App ID(必須)→ 確認
    2. QQ App Secret(必須)→ 確認(マスク表示)
    1. Allowed User OpenIDs(任意。Enterキーでスキップ)— 注意:これは user_openid であり、QQ番号ではありません。まだopenidを持っていない場合は、空欄のままにできます。
    2. Image Enabled(任意。デフォルトはtrue。Enterキーでスキップ)— 基盤となるプロバイダーが画像入力に対応していない場合は、falseに設定します。
    3. Max Image Size MB(任意。デフォルトは20。Enterキーでスキップ)
    • 注意事項を伝えます:QQの最初のバージョンでは、C2Cのプライベートチャットによるサンドボックスアクセスのみをサポートします。グループ/チャンネルには対応せず、インラインボタンやストリーミングプレビューもありません。
  • Weixin:静的トークンを尋ねないでください。代わりに、次の手順を実行します。
    1. このチャンネルでは、認証情報を手動入力するのではなく、QRコードでログインすることをユーザーに伝えます。
    2. cd SKILL_DIR && npm run weixin:login を実行します。
    3. ヘルパーは ~/.claude-to-im/runtime/weixin-login.html を作成し、ローカルブラウザーで自動的に開こうとします。
    4. 自動で開けない場合は、そのHTMLファイルを手動で開き、WeChatでQRコードをスキャンするようユーザーに伝えます。
    5. ヘルパーが成功を報告するまで待ち、連携したアカウントがローカルに保存されたことを確認します。
    • 簡潔に説明します:連携したWeixinアカウントは ~/.claude-to-im/data/weixin-accounts.json に保存されます。ヘルパーを再実行すると、以前に連携したアカウントは置き換えられます。
    • 簡潔に説明します:CTI_WEIXIN_MEDIA_ENABLED は、受信した画像/ファイル/動画のダウンロードのみを制御します。音声メッセージについて、ブリッジが受け付けるのはWeChatの組み込み音声テキスト変換で返されたテキストのみです。WeChatが文字起こし結果を提供しない場合、ブリッジは生の音声をダウンロード/文字起こしせず、エラーを返信します。

ステップ3 — 一般設定

ランタイム、デフォルトの作業ディレクトリ、モデル、モードを尋ねます。

  • ランタイム:claude(デフォルト)、codex、auto
    • claude — Claude Code CLI + Claude Agent SDKを使用します(claude CLIのインストールが必要です)。
    • codex — OpenAI Codex SDKを使用します(codex CLIが必要です。codex auth login または OPENAI_API_KEY で認証します)。
    • auto — 最初にClaudeを試し、Claude CLIが見つからない場合はCodexに切り替えます。
  • 作業ディレクトリ:デフォルトは $CWD
  • モデル(任意):空欄にすると、ランタイム固有のデフォルトモデルを継承します。上書きを希望する場合は、モデル名を入力するようユーザーに尋ねます。モデル名を固定値として指定したり、具体的な名前を提案したりしないでください。利用可能なモデルは随時変わります。
  • モード:code(デフォルト)、plan、ask

ステップ4 — 設定の書き込みと検証

  1. すべての設定を含む最終サマリーテーブルを表示する(シークレットは末尾 4 文字のみ表示)
  2. 書き込む前にユーザーに確認を求める
  3. Bash を使用してディレクトリ構造を作成する: mkdir -p ~/.claude-to-im/{data,logs,runtime,data/messages}
  4. Write を使用して ~/.claude-to-im/config.env をすべての設定を KEY=VALUE 形式で作成する
  5. Bash を使用してパーミッションを設定する: chmod 600 ~/.claude-to-im/config.env
  6. トークンを検証する — 各プラットフォームの正確なコマンドと期待されるレスポンスについては SKILL_DIR/references/token-validation.md を参照してください。これにより、ユーザーがデーモンを起動しようとする前に、タイプミスや誤った認証情報を検出できます。Weixin の場合、QR ログインが成功した時点で検証済みとみなされます。
  7. サマリーテーブルとともに結果を報告します。検証が失敗した場合は、何が問題である可能性があり、どのように修正するかを説明してください。
  8. 成功した場合は、ユーザーに伝えてください: 「セットアップ完了!/claude-to-im start を実行してブリッジを起動してください。」
start

事前チェック: ~/.claude-to-im/config.env が存在することを確認します(上記の「設定チェック」を参照)。存在しない場合、デーモンは即座にクラッシュし、古い PID ファイルが残ります。

実行: bash "SKILL_DIR/scripts/daemon.sh" start

出力をユーザーに表示します。失敗した場合は、ユーザーに伝えてください:

  • doctor を実行して診断する: /claude-to-im doctor
  • 最近のログを確認する: /claude-to-im logs
stop

実行: bash "SKILL_DIR/scripts/daemon.sh" stop

status

実行: bash "SKILL_DIR/scripts/daemon.sh" status

logs

引数から省略可能な行数 N を抽出します(デフォルトは 50)。 実行: bash "SKILL_DIR/scripts/daemon.sh" logs N

reconfigure
  1. ~/.claude-to-im/config.env から現在の設定を読み取る
  2. 現在の設定をわかりやすいテーブル形式で表示する(すべてのシークレットはマスクし、末尾 4 文字のみ表示)
  3. AskUserQuestion を使用して、ユーザーが何を変更したいかを尋ねる
  4. 新しい値を収集する際は、その値の場所をユーザーに伝えてください。ユーザーがヘルプを求めた場合にのみ、SKILL_DIR/references/setup-guides.md の完全なガイドを表示します
  5. 設定ファイルをアトミックに更新する(tmp に書き込み、リネーム)
  6. 変更されたトークンを再検証する
  7. ユーザーにリマインドする: 「/claude-to-im stop を実行してから /claude-to-im start を実行すると、変更が適用されます。」

ユーザーが reconfigure 中に Weixin アカウントを切り替えたい場合は、cd SKILL_DIR && npm run weixin:login を再度実行してください。スキャンが成功するたびに、以前にリンクされたローカルアカウントが置き換えられます。

doctor

実行: bash "SKILL_DIR/scripts/doctor.sh"

結果を表示し、失敗した項目に対する修正案を提示します。一般的な修正方法:

  • SDK cli.js が見つからない → cd SKILL_DIR && npm install
  • dist/daemon.mjs が古い → cd SKILL_DIR && npm run build
  • 設定が存在しない → setup を実行
  • Weixin アカウントが存在しない / 期限切れ → cd SKILL_DIR && npm run weixin:login
  • Weixin の音声メッセージで音声テキスト変換が見つからないと報告される → WeChat 自体の音声文字起こしを有効にして再送信してください。ブリッジは生の音声を自身で文字起こしすることはありません

より複雑な問題(メッセージが受信されない、パーミッションのタイムアウト、高いメモリ使用量、古い PID ファイル)については、詳細な診断手順が記載されている SKILL_DIR/references/troubleshooting.md を参照してください。

Feishu アップグレードに関する注意: ユーザーがこのスキルの古いバージョンからアップグレードし、Feishu がパーミッションエラーを返している場合(例: ストリーミングカードが動作しない、タイピングインジケーターが失敗する、パーミッションボタンが反応しない)、根本原因はほぼ確実に Feishu バックエンドのパーミッションまたはコールバックの不足です。ユーザーに SKILL_DIR/references/setup-guides.md の「以前のバージョンからのアップグレード」セクションを案内してください — 新しいスコープ(cardkit:card:write、cardkit:card:read、im:message:update、im:message.reactions:read、im:message.reactions:write_only)を追加し、card.action.trigger コールバックを追加して、アプリを再公開する必要があります。コールバックの追加にはアクティブな WebSocket 接続が必要なため(ブリッジが実行されている必要があります)、アップグレードには 2 回の公開サイクルが必要です。

注意事項

  • 出力では必ずシークレットをマスクしてください(末尾の4文字のみを表示)。ユーザーはバグ報告でターミナル出力を共有することが多いため、トークンが漏えいするとセキュリティインシデントにつながります。
  • デーモンを起動する前に、必ず config.env の有無を確認してください。存在しない場合、起動時にプロセスがクラッシュし、古い PID ファイルが残って以降の起動を妨げます(手動でのクリーンアップが必要になります)。
  • デーモンは、プラットフォームのスーパーバイザー(macOS では launchd、Linux では setsid、Windows では WinSW/NSSM)によって管理される、バックグラウンドの Node.js プロセスとして実行されます。
  • 設定は ~/.claude-to-im/config.env に保存され、セッションをまたいで保持されます。

コメント