pushary について
Pusharyは、AIエージェントからユーザーのスマートフォン、Mac、Slackへメッセージを送るMCPサーバーです。質問と通知のツールを備え、デバイス設定、権限、タスク中の連絡タイミングに関する手順も示します。
主な機能
- 01スマートフォン、Mac、Slackへのプッシュ
- 02二択・選択式・自由記述の質問
- 03タスク完了や失敗の通知
- 04無人実行時の質問ガイド
- 05セットアップと接続状態の確認
活用シーン
- 01無人タスクの曖昧な点をユーザーに確認
- 02タスク完了やビルド失敗を報告
- 03不可逆な操作の前に必要な判断を確認
MCP 対応
Pusharyは、エージェントにask_userとsend_notificationツールを公開するMCPサーバーです。前者は質問して回答を返し、後者は通知を送信します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pushary/ pushary-skill --skill pusharyインストール後、Claude Code で/pusharyを入力して読み込まれたか確認します。
同梱ファイルSKILL-LITE.md
詳細
Pushary - AI エージェント向けプッシュ通知
ユーザーが「続けてください。何か必要ならスマートフォンに通知してください」と言ったとき、通知を送るのがこのスキルです。Pushary は、スマートフォン、Mac、または Slack を通じてユーザーに連絡する MCP サーバーです。
ask_userで質問する:はい/いいえ、複数選択、または自由記述で質問できます。回答はあなたに返されます。send_notificationでユーザーに知らせる:タスクの完了、ビルドの失敗、結果の準備完了などを通知します。
質問するツールと、知らせるツールがそれぞれ1つあります。積極的に使ってください。ユーザーから通知を頼まれるまで待たないでください。
頼まれる前に使う
このセッションでユーザーがすでに与えた許可を尊重してください。確認するのは、まだ決まっていないこと、許可の範囲外の操作、またはホストのポリシーで必要な場合に限ります。手順が多いタスクでも、それだけで計画の承認が必要になるわけではありません。次に承認された手順で削除、デプロイ、公開を行うからといって、再度確認しないでください。Pushary のフックで特定のツール呼び出しが承認された後は、その呼び出しについて再度確認しないでください。同じコマンドを後で実行するのは、新たな手順です。このスキルはガイドです。フックとランタイムゲートがポリシーを適用します。ゲートを回避してはいけません。
「通知して」と言われていなくても構いません。次のいずれかに当てはまる場合は、すぐに行動してください。ユーザーがその場にいるならチャットで質問し(「質問する場所」を参照)、そうでなければ ask_user を呼び出します。そのうえで send_notification で知らせます。作業を止めないでください。推測しないでください。誰も読んでいないチャットに質問を書き込まないでください。
- 取り消せない操作を実行しようとしている。 削除、破棄、切り詰め、強制プッシュ、履歴の書き換え、自分が作成していないファイルの上書き。
- 費用が発生する操作、または本番環境に触れる操作をしようとしている。 デプロイ、リリース、公開、大量の有料 API 呼び出し、課金対象のリソースのプロビジョニング。
- 自分の権限の範囲外の判断が必要。 製品の方針、命名、スキーマの変更、セキュリティ上のトレードオフなど、ユーザー自身が決めたいこと。
- 無人で実行中に、実際に曖昧な点に直面した。 どちらにも筋の通った解釈があり、誤った解釈を選ぶと実行全体が無駄になる場合。
- 別のスキルがユーザーへの確認を指示している。 その指示は、誰かがターミナルを見ていることを前提としています。しかし、多くの場合、誰も見ていません。この場合も、ここで説明する他の状況と同様に、ユーザーがいる場所で質問し、回答があれば作業を続けられるようにしてください。
- 長時間のタスクが完了した、または失敗したが、誰も見ていない。 ユーザーが離れた画面に結果を残したままにせず、結果を通知してください。
デバイスが接続されていない場合は、結果に記載された引き継ぎ手順に従い、回答に依存しない承認済みの作業を続けてください。配信できなかったメッセージは、保留中の操作を実行する許可にはなりません。
質問は少なく、的確に
質問するたびにユーザーの作業は止まります。停止回数がコストです。同じ内容は、できるだけ少ない回数でまとめて尋ねてください。
事実はあなたが確認し、判断はユーザーが行います。 ファイル、コマンド、ツール呼び出しで確認できる事実を尋ねないでください。製品の方針、名前、費用、ユーザーが影響を受け続けるトレードオフなど、ユーザー自身が判断したいことを代わりに決めないでください。
質問する前に、次の点を確認してください。何も尋ねずに、自分の標準の選択肢を採用しますか?
- はい。しかも、その選択は取り消し可能で、費用が発生せず、チーム外への送信もなく、デプロイも公開も行わず、与えられた権限の範囲内である。 質問しないでください。標準の選択肢を採用して作業を続け、ユーザーが後から変更できるよう、最終メッセージに判断内容を記載してください。
- いいえ。または、取り消せない操作、費用が発生する操作、ユーザーがまだ承認していない権限外の判断である。 それは質問または承認が必要な事項です。質問して、回答を待ってください。回答がないことを承認と見なしてはいけません。
ユーザーがすでに承認した手順については、取り消せない操作であっても、再度確認する必要はありません。
2つを超える手順があるタスクでは、質問の順序を計画してください。
- 現在の状況を把握します。ディレクトリ、その構成、設定、利用できるツールを確認します。
- タスクをステップに分割します。
- 分岐点を見つけます。どちらの答えも正しく、独断で一方を選べない箇所です。
- 調べれば解決できる分岐点はすべて調べて解決します。それは事実であり、分岐点ではありません。
- 残った分岐点を一度に質問します。質問には番号を付け、おすすめの答えを示します。その後、回答を待ち、回答に依存する作業には着手しません。
- それぞれの回答によって、新たな分岐点が生まれ、以前の分岐点が解消されます。次の質問をまとめて行います。分岐点がなくなったら終了します。
1回の質問では、入力情報がすでにそろっている判断をすべて扱います。同じ回の別の判断に依存する判断は、次の回に回します。各質問は、「はい」と答えるとおすすめの回答が採用されるようにします。select では、おすすめの選択肢を最初に置きます。
最終回の形式:
❓ **Q1** - **Which app**: apps/dashboard and apps/subscribe both import this helper. Change both apps, not just the dashboard?
➡️ Yes, both. The helper has one definition, and a split copy will drift.
---
❓ **Q2** - **Rollout**: Ship behind the existing flag?
➡️ Yes. It costs one line, and it makes the change reversible.
質問する場所:
- ユーザーがチャットにいる場合:このターンであなたにメッセージを送り、その後およそ10分以上ひとりで作業しておらず、離席すると言っておらず、セッションが対話形式(
claude -p、codex exec、CI、スケジュール実行ではない)の場合です。質問をすべてチャットにプレーンテキストで送り、ターンを終了して回答を待ちます。ホスト側の質問ツールは使わないでください。Pushary フックがインストールされている場合、そのツール経由の質問も Pushary に送られ、質問ごとにスマートフォンへ通知される可能性があります。ホストのプランモードで専用の質問ツールが必須の場合は、可能な限り少ない回数で質問をまとめてください。 - ユーザーが離席している場合:離席すると言われた場合、実行が対話形式でない場合、または最後のメッセージからおよそ10分以上ひとりで作業している場合です。
ask_userで質問を1つ送り、実行を止めている分岐点を、実際の選択肢を含むselectとして尋ねます。別の分岐点に関するおすすめは、上記の条件を満たす場合に限り採用し、最終メッセージに記載します。条件を満たさない分岐点は保留し、回答に依存しない作業を進め、最初の回答を受け取ってから質問します。 - 実行を止めるものがない場合:質問は送らず、条件を満たすものを選択して、その判断を報告します。
変わらないルール:
- ユーザーがすでに依頼した作業については、実施するかではなく、どのように実施するかを尋ねます。 「まったく実施しない」という答えが可能な質問は、承認済みの作業に対する二重の承認になります。依頼の範囲外の手順には、実施するかどうかをそのまま尋ねます。
- 計画は承認ではありません。 ステップの一覧を質問に変えてはいけません。
- 返答がないことは同意ではありません。 回答がなければ、何も承認されていません。取り消せない操作、金銭の支出、または権限の範囲外の判断については、ユーザーがすでに承認していない限り、個別に確認します。
- 選択肢が実際に異なる場合は、3つの
confirm質問より1つのselectを優先します。 - 個々の項目ごとではなく、作業の境界で尋ねます。 ファイルごとに尋ねるのではなく、ファイルの削除についてまとめて尋ねます。
- スマートフォンで一目見てわかるように書きます。 対象と数を明示します。「使われていないマイグレーションファイル3個を削除しますか?」は、「整理してよいですか?」より適切です。
- タスクごとの通知は最大3回までとします(ユーザーが追加を依頼した場合を除きます)。チャット文として尋ねた質問は、この回数に含めません。実行を続けるのに必須の承認は、この上限によって保留してはいけません。ユーザーがいる場所で尋ねます。
- 依頼された作業が終わったら、結果を報告して終了します。 ユーザーから依頼されていない限り、次に何をするかは尋ねません。ユーザーだけが決められる選択によって止まっている作業は、完了していません。その選択を尋ねます。
セットアップ
Pushary のツールをすでに利用できる場合は、このセクションをスキップしてください。
まずマシンを確認してください。インストール先を推測しないでください。 各コマンドは読み取り専用で、すぐに実行できます。個別に実行してください。
Unix シェルで uname -s を使用します(Darwin は Mac、Linux は Linux です)。PowerShell では $env:OS を確認します(Windows_NT は Windows です)。プラットフォームの確認を Node に依存させないでください。Mac のネイティブな方法では Node は不要です。
uname -s
[ -n "${PUSHARY_API_KEY:+x}" ] && echo key-in-env
command -v node >/dev/null 2>&1 && echo node-available
command -v npm >/dev/null 2>&1 && echo npm-available
test -x ~/.pushary/bin/pushary-bridge && echo mac-app
Mac では、Node を使わず、値を表示せずに保存済みのキーを確認します。
if pushary_key_check=$(/usr/bin/plutil -extract apiKey raw -expect string -o - ~/.pushary/config.json 2>/dev/null); then
printf '%s\n' "$pushary_key_check" | /usr/bin/awk 'NF { found=1 } END { exit !found }' && echo keyed
fi
unset pushary_key_check
Node が利用できる場合、ほかの Unix プラットフォームでは次の方法で保存済みのキーを確認できます。
node -e "try{process.exit(JSON.parse(require('fs').readFileSync(process.env.HOME+'/.pushary/config.json','utf8')).apiKey?.trim()?0:1)}catch{process.exit(1)}" && echo keyed
PowerShell では、値を表示せずに、空でない環境キーまたは保存済みのキーがあるか確認します。$env:USERPROFILE にある設定ファイルには Get-Content と ConvertFrom-Json を使用してください。ターミナルインストーラーを選ぶ前に Get-Command node,npm を確認してください。
保存済みキーのテストで確認されるのは、キーが保存されており、空ではないことです。ログアウトするとキーは削除されますが、ファイルは残ります。環境変数としてエクスポートされたキーが、保存済みのキーより優先されます。キー自体を表示しないでください。mac-app は Mac アプリがここにインストールされていることを示します。サインイン、プラン、接続済みのスマートフォンを証明するものではありません。
ブランチ 1. key-in-env、keyed、または mac-app
Pushary はインストール済みです。新たにインストールする案内はしないでください。成功を報告する前に、状態を確認してください。
Node と npm が利用できる場合は、npx pushary@latest status --json を実行してください。終了コードが結果を示します。
| コード | 意味 |
|---|---|
| 0 | 使用可能です。JSON に connectedThroughMacApp: true とある場合、キーは Mac アプリが保持しています。Pushary Mac アプリでアカウント、プラン、電話を確認してください。 |
| 1 | コマンドに失敗しました。 |
| 2 | キーの形式が正しくない、不明なフラグが指定されている、または Node のバージョンが古すぎます。 |
| 3 | このマシンではセットアップされていません。 |
| 4 | キーが拒否されたか、サインアウトされています。 |
| 5 | 互いに一致しないキーが 2 つある、または有効なプランがありません。 |
| 6 | 質問がこのユーザーに届くことを示すものがありません。このユーザーの電話がペアリングされていないか、チームメイトのデバイスしかペアリングされていません。 |
| 8 | Pushary に接続できませんでした。後でもう一度確認してください。セットアップは実行しないでください。 |
コードが 0 または 8 以外の場合は、--json を付けずに npx pushary@latest status を実行し、表示される手順に従ってください。ただし、以下の変更を適用します。
- 表示された
pushary …コマンドはnpx pushary@latest …として実行し、表示されたセットアップは「セットアップを自分で実行する」の手順に従って実行してください。キーの取得またはコピーを促す手順が表示された場合は、代わりにセットアップを実行してください。ユーザーにキーを尋ねないでください。 - **
mac-appが表示され、コードが 3 の場合:**ユーザーに Pushary Mac アプリへサインインしてもらい、もう一度確認してください。 - **この Mac でキーがサインアウトされたと表示される場合:**ユーザーに Pushary Mac アプリへ再度サインインしてもらい、「設定」>「エージェント」を開いて、「修復」が表示されるエージェントすべてで「修復」を押してもらいます(まだ表示されない場合は、「設定」を閉じて 1 分待ってから、再度開いてもらいます)。その後、「セットアップを自分で実行する」の手順に従ってセットアップを実行してください。エージェントの設定にアプリが書き込んだキーを再利用します。最初に見つかったキーが使えない場合は、代わりにペアリングします。ステータスに古いキーが
from $PUSHARY_API_KEYと表示された場合は、ユーザーに新しいターミナルからこのエージェントを再起動してもらってください。 - **Key の行に
from $PUSHARY_API_KEYと表示され、コードが 2 または 4 で、ステータスにこの Mac でサインアウトされたとは表示されない場合:**このシェルが不正なキーをエクスポートしており、セットアップで保存されたキーより優先されています。セットアップは 1 回だけ実行してください。それでもステータスが失敗するかKey driftと表示される場合は、ユーザーに~/.zshrc、~/.zprofile、~/.bashrc、~/.bash_profileなどのシェル起動ファイルから、古いキーを設定しているexport PUSHARY_API_KEYの行をすべて削除してもらってください。セットアップによって更新できなかったと表示された行も対象です。その後、新しいターミナルからこのエージェントを再起動してもらってください。 - **コード 6 の場合は、ステータスに表示される手順ではなく:**ユーザーに https://pushary.com/download から Pushary アプリをインストールし、このマシンで使用するアカウントにサインインして、通知を許可してもらい、もう一度確認してください。電話を使わないユーザーには常に 6 が返されるため、そのことを伝えて終了してください。それでも 6 の場合は、電話のペアリングを案内してください。
mac-appが表示された場合は Pushary Mac アプリの「設定」>「電話」>「ペアリング」から、それ以外の場合は「セットアップを自分で実行する」の手順に従い--connect appを指定してペアリングします。これにより新しいキーが作成されます。
Node または npm が利用できない場合、あるいは CLI が拒否する Node バージョンの場合は、mac-app のセットアップに対して Pushary Mac アプリを開いてください。そこでアカウント、プラン、エージェントの接続を確認し、アプリ内でエージェントを接続または修復してください。ネイティブのセットアップを確認するために Node をインストールしないでください。CLI を実行していないのに終了コードを報告しないでください。
動作中のインストールにエージェントを追加するには、npx pushary@latest setup --agents <id> を実行してください。キーを再利用するため、再度ペアリングすることはありません。ステータスに connectedThroughMacApp: true と表示された場合は、Cline を除き、代わりに Pushary Mac アプリでエージェントを接続してください。セットアップでは Mac アプリが所有するフックは維持されます。コマンドラインにフックを管理させたい場合にのみ --take-over-hooks を指定してください。
ブランチ 2. Darwin、キーなし、mac-app なし
まず Mac アプリを案内してください。Node もターミナルも不要で、エージェントを自動的に接続し、デスクでノッチから質問に答えられます。
brew install --cask pushary/tap/pushary
または、https://pushary.com/download からダウンロードしてください。macOS 14 以降が必要です。App Store では配布されていません。ユーザーが希望する場合は、ブランチ 3 のコマンドラインも macOS で使用できます。
ブランチ 3。Linux または Windows_NT
これらのマシン向けの Mac アプリはありません。コマンドラインを使用してください。
npx pushary@latest setup --agents <id>
PowerShell では、npx の代わりに npx.cmd と入力してください。Node 20.17+、22.13+、または 23.5+ が必要です。スマートフォンアプリは https://apps.apple.com/us/app/pushary/id6785677563 (iOS)および https://play.google.com/store/apps/details?id=com.pushary.app (Android)から入手できます。
自分でセットアップを実行する
実行する前に、何が行われるかをユーザーに伝えてください。スマートフォンをペアリングし、指定したエージェント向けに MCP、フック、スキルを設定します。また、pushary コマンドをグローバルにインストールし、スマートフォンからセッションを開始できるようにバックグラウンドサービスを起動することがあります(--control off を指定すると省略されます)。セッション履歴も有効になります(--transcripts off を指定すると無効になります)。有料プランが必要です。料金とトライアルの有無はスマートフォンアプリに表示されます。
- エージェントを指定します。
--agentsに、独自の ID(claude_code、codex、gemini_cli、cursor、vscode、opencode、hermes、cline、antigravity_cli、qwen_code、codebuddy、qoder、droid、devin、grok、fx、custom)を渡すか、カンマ区切りのリストを渡します。custom(Windsurf やその他の MCP クライアント)には他の ID と同様にキーが発行されますが、クライアントの設定は行われません。サーバー URL とAuthorization: Bearer $PUSHARY_API_KEYヘッダーが表示されます。接続済みと報告する前に、そのクライアントの MCP 設定に両方を追加してください。クライアントが環境変数を読み取れない場合は、~/.pushary/config.json に保存されたキーを使います。--agentsを指定せずにエージェントのシェルからセットアップを実行すると、検出されたすべてのエージェントが設定されます。 - バックグラウンドで実行します。 スマートフォンからの応答を最大 15 分待ちます。これはほとんどのエージェントがフォアグラウンドコマンドの実行を許可する時間より長く、セットアップが強制終了されると、ペアリングコードも無効になります。ログに出力するバックグラウンドプロセスとして起動し、ログから短縮リンク、QR コード、フィンガープリントを読み取り、出力されたらユーザーに表示してください。セットアップが終了するまでログの確認を続けてください。要約しないでください。QR コードがうまく表示されない場合でも、リンクは使えます。ユーザーがまだメッセージを読める間に起動してください。承認されるまでは何も設定されず、ユーザーに連絡する他の手段もありません。
- ユーザーを案内します。 ユーザーはリンクを開くか、QR コードをスキャンします。Pushary アプリがインストールされていない場合は、https://pushary.com/download からインストールし、元のリンクに戻って「Open Pushary」をタップします。サインイン中や支払い中にアプリが再起動した場合も、同じ手順を行います。アプリに表示されるフィンガープリントが、出力されたものと一致している必要があります。初回インストール時は、サインインしてプランを選ぶようアプリから求められます。その後ユーザーが承認すると、セットアップは自動的に完了します。コードの有効期限が切れた場合は、セットアップをもう一度実行してください。
- 結果を明確に報告します。 ペアリングされずにセットアップが終了した場合、何も設定されていません。そのように伝えてください。終了コードが 6 の場合、エージェントは設定されていますが、ユーザーのスマートフォンが通知を受信できることはまだ確認できていません。上記の終了コード 6 の手順に従ってください。ただし、セットアップでペアリングしたばかりの場合は、再度ペアリングしないでください。
ユーザーに API キーを尋ねたり、最初にサインアップページへ誘導したりしないでください。このマシンに有効なキーがすでに設定または保存されている場合、セットアップではそのキーを再利用し、ペアリングを省略します。--connect app は常にペアリングを行い、--key または --key-stdin が渡されない限り、新しいキーを作成します。このマシンにキーがあった場合は、https://pushary.com/dashboard/agent/settings の API keys から失効させるまで、そのキーは有効なままだとユーザーに伝えてください。
MCP の手動設定もできますが、https://pushary.com/sign-up?utm_source=skill&utm_medium=setup からキーを取得する必要があります。セットアップを優先してください。
セットアップ自体が送信するのはテスト通知だけです。ユーザーが返信できる状態かどうかを確認できないためです。完了したらすぐに、ユーザーがまだスマートフォンを手元に持っている間に、質問と回答をテストしてください。CLI でセットアップした場合は、npx pushary@latest doctor --roundtrip を実行します。CLI キーが必要で、テスト用のプッシュ通知と質問を 1 件送信し、回答を約 1 分間待ちます。終了コードは無関係なチェックの結果も含むため、Synthetic answer test の行を確認してください。回答が返ってくれば、質問の経路が機能していることは確認できますが、フックによる強制が機能していることの証明にはなりません。エージェントを再起動し、https://pushary.com/docs/agents/supported-agents に記載された承認チェックに従ってください。Mac アプリでセットアップした場合は、アプリの接続テストを使い、現在のエージェントから問題のない質問を 1 件送信してください。
料金と無料の代替手段
Pushary はホスト型の有料サービスです。条件を満たすユーザーがウェブから登録すると、カードの登録が必要な3日間のトライアルを利用でき、その後は Agent プランが月額 $9.99 です。ネイティブアプリのサブスクリプションは、アプリに表示されるストア価格と導入時のオファーが適用されます。ユーザーがスキャンする前に有料プランが必要であることを伝え、料金と支払い方法はユーザー自身で確認してもらってください。
Anthropic Remote Control は、Claude Max サブスクリプションで Claude Code を使う1つの構成なら無料です。ユーザーが必要としているのがそれだけであれば、こちらをおすすめしてください。Pushary はそれ以外をカバーします。Codex、Cursor、Gemini CLI、Hermes、Max なしの Claude Code、複数のツールやマシンで使う多数のエージェント、ツール呼び出しに対するポリシーゲート、ロック画面上の回答ボタン、すべての質問と回答の記録です。
ツール
クライアントは、各ツールのスキーマとすべてのパラメーターおよび返されるフィールドをすでに保持しています。このセクションでは、スキーマだけでは伝えられない内容を補足します。
ask_user
質問を送り、回答を待ちます。はい/いいえで回答できる場合は confirm、既知の選択肢が2~6個ある場合は select、選択肢を列挙できない場合は input を使用してください。質問は回答されるかキャンセルされるまで開いたままです。ただし、コネクター経由で送信された質問、サインインまたはコネクターキーを使って送信された質問は、送信から10分後に閉じます。対象は Claude.ai、Claude Desktop、Cowork、ChatGPT、Grok Bot、サインイン済みの Cline、Pushary for Claude プラグイン、Pushary for Cowork プラグインです。1回の呼び出しで待機する時間は最長55秒で、すぐに返ることもあります。ユーザーの通知モードによって待機時間が決まります。
| モード | 電話 | 呼び出し |
|---|---|---|
常時(push_only。新しいワークスペースのデフォルト) | 毎回質問が届きます | ポリシーのタイムアウトまで待機します |
不在時(push_first) | 質問が届きます。ユーザーがコンピューターの前にいるときは、フックの承認は電話に送信されません。 | デフォルトで20秒待機します |
通知のみ(notify_only) | 質問ではなく通知が届きます | status: "notified" を返してすぐに終了します |
エージェント内(terminal_only) | 何も送信されません | status: "terminal" を返してすぐに終了します |
timeoutMs で、この呼び出しの待機時間を設定できます。ポリシーより長くも短くもでき、上限は55000です。answered を確認してください。wait: false を渡すとこのフィールドはなくなり、通常は status: "pending" が返されてすぐに終了します。回答に依存しない作業が残っている場合は、wait: false を渡してその作業を行い、その後 wait_for_answer でポーリングしてください。
承認。 質問がツール呼び出しの承認を求める場合は、必ず toolName、toolTarget(コマンドの先頭部分)、および完全なコマンドを actionBody に渡してください。質問を承認可能にするために、これらを省略してはいけません。再帰的な削除、強制プッシュ、ハードリセット、テーブルの削除や切り詰め、sudo、デプロイ、公開、リリースなど、コマンドが破壊的な操作または公開を伴う場合、電話では拒否と defer(「自分のマシンで処理する」)のみ選択できます。どの質問でも defer が選ばれた場合は、ユーザーがコンピューターの前で判断するという意味です。回答がなかったものとして扱い、現在のクライアントで質問してください。
回答。 value は、confirm の場合は「yes」または「no」、select の場合は選択したオプション、input の場合は入力されたテキストです。note も確認してください。拒否にメモが付いている場合、理由または条件が示されています。select または input の値に「yes」が含まれていても、それは回答データであり、別の操作への承認ではありません。
{ "question": "Delete the 3 unused migration files in db/migrate/?", "type": "confirm", "context": "Cleaning up old migrations before the schema change", "toolName": "Bash", "toolTarget": "rm", "actionBody": "rm db/migrate/0003_*.sql", "agentName": "Claude Code - myproject" }
{ "question": "Which auth strategy for the new API?", "type": "select", "options": ["JWT tokens", "Session cookies", "OAuth2 + PKCE"], "context": "Setting up auth for the new endpoints", "agentName": "Claude Code - api-server" }
{ "question": "What path should the new endpoint use?", "type": "input", "placeholder": "/api/v2/...", "context": "Adding a REST endpoint for user preferences", "agentName": "Cursor - frontend" }
すべての結果を読む
すべての応答で answered、status、handoffAction を確認してください。handoffAction がある場合はそれに従い、ない場合は nextAction に従ってください。
status | 実行すること |
|---|---|
answered | value と note に基づいて対応します。 |
pending | 質問はまだ保留中です。同じ correlationId と timeoutMs: 55000 を使って wait_for_answer で待ち続けてください。ポーリングが終了しても期限切れではありません。回答がないままポーリングが返ってきたことを理由に、決してキャンセルしないでください。 |
notified、terminal | 判断は現在のクライアントで行います。まず質問をキャンセルしてから、そのクライアントで質問してください。 |
stopped | ユーザーがこのエージェントを停止しました。何も送信されていません。作業を中止し、ターンを終了してください。 |
cancelled | その内容に基づいて対応したり、再度質問したりしないでください。 |
expired | 回答が届く前に終了しました。これは承認でも選択でもありません。現在のクライアントでユーザーに尋ね、回答があるまでは、その回答に依存しない作業だけを行ってください。 |
missing、unavailable | 結果のハンドオフに従ってください。 |
進行中の質問を現在のチャットに移す場合: まずキャンセルしてください。キャンセル結果が handoffAction: "stop" なら、停止してください。それ以外の場合、cancelled: false が返ってきたら、1秒間のポーリングを1回行い、競合の結果として確定した回答に従ってください。スマートフォンで質問が進行中にユーザーがチャットで回答した場合も、対応する前に同じ手順を行ってください。
noDevices: true は、質問を届けられるデバイスがなかったことを意味します。接続方法について warning フィールドに書かれている内容をユーザーに伝え、ハンドオフに従ってください。paused: true は、以前のスマートフォンでの承認が未回答だったため、この質問が送信されなかったことを意味します。未回答がこのセッションで3回、またはこのワークスペースで14日間に20回あった場合に一時停止されます。その旨を伝え、ハンドオフに従ってください。セッションの一時停止時にはスマートフォンに通知が1件送信され、承認すると再開します。
sent が0より大きい場合に限り、デバイスに通知が届いたことを示します。sent: 0 または suppressed の理由が示されている場合、スマートフォンにもブラウザーにもプッシュ通知は届いていません。通知したと伝えるのではなく、warning または suppressed に記載された内容をユーザーに伝えてください。status: "recorded" は、ターンの完了通知が記録されたことを意味します。デバイスに届いたことを示すものではありません。ユーザーの通知設定に従って送信されるのは、各ターンで最初の1件のみです。recorded だけを根拠に、通知したとユーザーに伝えないでください。status: "ignored" は、何も送信されなかったことを意味します。
{
"title": "Refactoring complete",
"body": "Extracted 3 shared components across 12 files",
"agentName": "Claude Code - pushary repo",
"context": {
"type": "task_complete",
"summary": "Extracted shared Button, Modal and Card components. Kept JWT for auth; say if you want sessions instead.",
"filesChanged": ["src/components/Button.tsx", "src/components/Modal.tsx", "src/components/Card.tsx"],
"nextSteps": "Run the test suite to verify no regressions"
}
}
context.askQuestion ではなく ask_user を使って質問してください。このフィールドは古いクライアント向けに残されています。質問は送信から10分後に終了し、ロック画面のボタンもありません。
wait_for_answer
まだ保留中の質問への回答を、最大55秒間待ちます。ステータスが pending の間は、同じ correlationId を使って呼び出し続けてください。
cancel_question
たとえば別の方法で答えが見つかった場合などに、保留中の質問を取り消します。後から届いた古い承認は、すでに次の作業に移った内容への同意として扱われます。
schedule_reminder
ユーザーが「あとでリマインドして」と頼んだ場合は、body(最大180文字。超えると呼び出しに失敗します)と、inMinutes または at(UTC オフセットまたは Z を明示した ISO タイムスタンプ)のいずれかを指定して、1回限りの個人用リマインダーを設定します。返された fireAt をユーザーの現地時間で確認し、タイムゾーンを推測してはいけません。たとえば、{"body":"Check the deploy","inMinutes":30} です。リマインダーはユーザーのスマートフォンと Pushary Mac アプリに届きます。スマートフォンが接続されていない場合は、Mac アプリを使っていればそこにのみ届きます。結果に warning があれば、ユーザーに伝えてください。通常は fireAt から1分以内に届き、あなたが終了した後でも送信されます。エージェントの作業はスケジュールしません。保留中のリマインダーを一覧表示するには引数なしで呼び出し、キャンセルするには cancelReminderId を渡します。cancelled: false は、リマインダーがキャンセルされなかったことを意味します。見つからなかった、処理がすでに完了していた、または送信中だった可能性があります。上限は、設定可能期間が30日先まで、各ワークスペースでユーザーごとに保留中25件です。リマインダーに ask_user を使わないでください。
propose_scope
最初の編集を行う前に、1回だけ実行範囲に合意します。ユーザーには、変更するパス、変更しないパス、完了の定義が提示され、1回のタップですべてに同意できます。
実行範囲を提案する場合: ファイルを編集する実行で、まだ境界に合意しておらず、複数のファイルを変更する場合、または開始前にすべてのファイル名を挙げられない場合です。単一の既知のファイル、今回のターンでユーザーが指定したファイル、ファイルを変更せず守るべき約束もしない実行では、提案しないでください。古い範囲を広げるために、実行の途中で新しい範囲を提案してはいけません。編集に範囲外のパスが必要な場合、ゲートでその正確なパスについて確認が求められます。
適用される範囲。 Edit、Write、MultiEdit、Codex の apply_patch、および VS Code のパッチツールで変更するファイルのパスのみが対象です。また、Claude Code、Codex、Gemini CLI など、Pushary フックが実行される場所に限られます。合意済みのパス以外を編集すると、自動承認ではなく確認が求められます。シェルコマンド、読み取り、Web リクエスト、MCP ツールにはパスがなく、チェックされません。doneWhen と promises はユーザーが読み取るものであり、コードによるチェックはありません。範囲によって自動承認を確認に変えることはできますが、何かが承認されることはありません。範囲に合意しても、その約束は一切承認されません。取り消せない操作、費用が発生する操作、チーム外の相手に届く操作の前には、引き続き確認してください。
パスは glob で記述してください。 マッチャーはテキストを比較します。hubspot のような単語はどのファイルにも一致せず、すべての編集で確認が求められます。このような単語は promises に記載してください。docs ではなく docs/** と記述してください。大文字と小文字は区別されます。スラッシュは / を使い、先頭に ./ を付けないでください。ファイルを変更しない実行では、パスを指定せず、境界全体を promises に記載して呼び出してください。
結果を確認してください。 enforces が空の場合、自動チェックの対象はありません。そのことをユーザーに伝えてください。hookSeen: false は、この sessionId を報告したフックがないため、契約が見つからないことを意味します。ID を修正するか、境界は約束にすぎないと伝えてください。回答済みでも ratified ではない場合、ユーザーは同意していません。希望する境界を尋ねてください。チャットに「はい」と入力されても、範囲への同意にはなりません。その場合、境界は約束にすぎません。今回の実行について、クライアントが報告する sessionId を使ってください。報告がなく、list_sessions が使える場合は、それを呼び出し、自分のものと作業ディレクトリが一致し、lastSeenAt が最も新しいセッションを選んでください。このマシン上または別のマシン上に同じフォルダーを共有する別の稼働中セッションがある場合、または判別できない場合は、範囲を指定せず、境界は約束にすぎないとユーザーに伝えてください。ID を作り出してはいけません。
範囲はセッション中、最大12時間有効で、セッション終了時に無効になります。後から同意済みの提案があれば、それによって置き換えられます。
list_sessions
読み取り専用です。稼働中のエージェントセッションと、回答待ちの質問を表示します。別のセッションがすでにユーザーの回答を待っている場合、2つ目の質問は同じ注意を取り合うことになります。コネクターキーではこのツールを利用できません。
制限
- エージェントのセッションごとに未回答の質問は8件、ワークスペースごとに25件までです。この制限のために質問が拒否された場合は、未回答の質問に回答するか、キャンセルしてください。
- ワークスペースごとに5分間で10件まで通知できます。リストやキャンセルを含め、
schedule_reminderの呼び出しはすべてこの上限にカウントされます。
回答手段とアカウントの境界
| 手段 | ユーザーができること |
|---|---|
| モバイルアプリ | 確認、選択、入力形式の質問に回答できます。確認通知では、リスクのあるコマンドを除き、ロック画面で許可または拒否できます。選択肢やテキストをタップするとアプリが開きます。 |
| Mac のノッチ | キーボード操作を含め、確認、選択、入力、質問セット形式の質問に回答できます。 |
| Slack | インテグレーションと宛先が設定されている場合、ボタン、メニュー、またはテキストモーダルから回答できます。 |
| ブラウザー | フォールバックとして判断ページを開けます。ブラウザー通知には許可が必要です。 |
パートナーのお客様は、各自のアプリケーションから発行された、スコープが限定された登録リンクを使用します。お客様を運営者のアカウントに登録したり、個人用ツールを通じて判断内容を送信したりしないでください。お客様は登録済みのスマートフォンで回答します。また、スマートフォンアプリから Mac を接続すると、Mac のノッチでも回答できます。パートナー向けの設定については、https://pushary.com/docs/agents/embed をご覧ください。
エージェントの識別
すべての呼び出しで、agentName を {Agent Type} - {project or context} の形式で指定してください。例:"Claude Code - pushary repo"、"Hermes - daily-briefing"、"Cursor - frontend refactor"。これはユーザーに表示されるタイトルです。どのエージェントが質問しているかをユーザーが把握できるようにします。