mcpField
B
bot-process-control

bot-process-control

github.com/terrylicaクラウド・DevOps1116 回インストール今日更新
リポジトリ

bot-process-control について

bot-process-controlは、Gmail Commanderの運用担当者向けスキルです。Botやダイジェストの稼働場所、状態確認の方法、2つ目のポーラーを起動してはならない理由を説明します。

主な機能

  1. 01デプロイ済みプロセスの役割を説明
  2. 02作業前にローカルのポーラーを確認
  3. 03Telegramの/statusで状態を確認
  4. 04重複ポーリングを防止
  5. 05利用可能なTelegramコマンドを掲載

活用シーン

  1. 01デプロイ済みBotの応答確認
  2. 02競合するローカルポーラーの起動回避
  3. 03適切なエスカレーション先の確認

インストール

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

$npx skills add https://github.com/terrylica/cc-skills --skill bot-process-control

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

同梱ファイルreferences/evolution-log.md

詳細

Bot プロセス制御

Gmail Commander ボットとスケジュールされたダイジェストの実行場所、正常に動作しているかの確認方法、ワークステーションで絶対に起動してはならないものについて説明します。

自己進化型スキル:このスキルは使用を通じて改善されます。手順に誤りがある、パラメーターが変わっている、または回避策が必要だった場合は、先送りせず、ただちにこのファイルを修正してください。実際に再現できる問題がある場合にのみ更新してください。

プロセスの実行場所

どちらのプロセスもワークステーションでは実行されません。どちらもプライベートリポジトリからデプロイされた、常時稼働の Mac mini 上にあるプライベートな Restate テナントで実行されます。

サービス役割
GmailBotTelegram の getUpdates チェーン(耐久性があり、自動的に再起動する単一のポーリング)を管理し、各更新をディスパッチします
GmailBotChatこのプラグインの buildBot() が構築する grammY ボットで各更新を処理します。チャットごとに順序どおりに処理します
GmailDigestTelegram へのスケジュール済みメールダイジェストを 1 日に数回送信します(このプラグインとは別の独自の実装です)
GmailAuthデプロイ環境のシークレットストアに保管されたリフレッシュトークンから、必要に応じて Gmail アクセストークンを発行します

起動、停止、再起動、デプロイ、ログの確認、シークレットのローテーション、OAuth の再同意はすべて、そのリポジトリの運用手順書に従って行います。 この公開スキルには、そのリポジトリのホスト名、デプロイコマンド、認証情報のパスを意図的に記載していません。そのリポジトリにアクセスできない場合は、作業を中止して運用担当者に問い合わせてください。

ラップトップの launchd ジョブ com.example.gmail-commander-bot と com.example.gmail-commander-digest は、2026-09-24 に廃止されました。それらの plist、ランチャースクリプト、または env ファイルを再作成しないでください。

必須の事前確認

手順 1:ローカルで何も実行されていないことを確認する(読み取り専用)
echo "=== Local gmail-commander launchd jobs (expected: none) ==="
launchctl list | grep -F gmail-commander || echo "none"

echo ""
echo "=== Local gmail-commander plists (expected: none) ==="
ls ~/Library/LaunchAgents 2>/dev/null | grep -F gmail-commander || echo "none"

echo ""
echo "=== Local standalone bot process (expected: none) ==="
pgrep -fl "gmail-commander/scripts/bot.ts" || echo "none"

いずれかのコマンドで何かが見つかった場合は、自分で読み込み、読み込み解除、または強制終了せず、運用担当者に報告してください。ローカルでポーリングするプロセスが動作していると、テナントと同じボットトークンを取り合うことになります。

手順 2:ユーザー側からデプロイ済みボットを確認する

デプロイへのアクセスが不要な唯一の確認方法は、Telegram のボットとのチャットで /status を送信することです。稼働時間とカウンターを含む応答があれば、GmailBotChat が更新を処理しています。1 分以内に応答がない場合は、ポーリングチェーンまたはテナントが停止しています。運用手順書に従ってエスカレーションしてください。

2 つ目のポーリングプロセスを起動しないでください

scripts/bot.ts には、import.meta.main で保護されたスタンドアロンのロングポーリング main() が残っています。そのため、buildBot() をインポートしてもポーリングは開始されません。本番ボットのトークンを使ってこれを実行しないでください。 Telegram では、1 つのトークンにつき getUpdates を利用できるのは 1 つのコンシューマーだけです。2 つ目を起動すると、Telegram は 409 Conflict を返し、両方のポーリングプロセスが不安定になります。また、テナントはこの競合を検知すると運用担当者にページを送ります。

スタンドアロンのエントリーポイントは、独自のボットトークンを使う、この公開プラグインの他のインストール向けに用意されています。このエントリーポイントは /tmp/gmail-commander-bot.pid に PID ロックを取得し、プラグインの CLAUDE.md に記載された環境変数を読み込みます。このプラグインでは、プロセススーパーバイザー用のテンプレートは提供されなくなりました。

Telegram コマンド

コマンド説明
/inbox最近の受信トレイのメールを表示します
/searchメールを検索します(Gmail クエリ構文)
/readID を指定してメールを読みます
/compose新しいメールを作成します
/replyメールに返信します
/abort現在の作成/返信操作をキャンセルします
/drafts下書きメールの一覧を表示します
/digest直近 N 時間分を今すぐトリアージします(デフォルトは 6 時間)
/statusボットのステータスと統計情報を表示します
/helpすべてのコマンドを表示します

注:/abort は、進行中の作成または返信セッションをキャンセルします。フローのどの段階でも使用できます。

デプロイでの OAuth エラー

Google がデプロイの更新トークン(invalid_grant)を拒否すると、GmailAuth が担当者に通知します。復旧には、ワークステーションでのブラウザーによる同意とデプロイでのシークレットの更新が必要で、どちらも非公開のランブックに記載されています。ワークステーションでの CLI 独自の invalid_grant 復旧は別のトークンを対象としており、gmail-access で説明しています。

変更後のチェックリスト

  • YAML frontmatter が有効(説明にコロンがない)
  • トリガーキーワードが最新
  • パスパターンでハードコードされたパスではなく $HOME を使用
  • launchd テンプレート、ホスト名、認証情報のパスを再導入していない
  • プラグインの CLAUDE.md にある buildBot() の契約が scripts/bot.ts と一致している

実行後の振り返り

このスキルの完了後、タスクを終了する前に振り返ってください。

  1. 自分の場所を特定する。 — 編集する前に、この SKILL.md の正規パスを確認します。
  2. 何が失敗したか。 — 原因となった指示を修正します。
  3. 予想以上にうまくいったことは何か。 — 推奨プラクティスに取り入れます。
  4. 何が現状とずれていたか。 — 実態と合わなくなったスクリプト、参照先、依存関係を修正します。
  5. 記録する。 — トリガー、修正、根拠を含む進化ログのエントリーを残します。

先送りしてはいけません。次回の呼び出しでは、ここに残した内容が引き継がれます。

コメント