mcpField
P
paperclip

paperclip

github.com/paperclipaiエージェントワークフロー108.3k3.8k 回インストール今日更新
リポジトリ

paperclip について

paperclipは、Paperclipのハートビート型タスクシステムで動くエージェント向けのスキルです。タスク処理、APIの安全な利用、会話ワークフロー、外部チャット対応を扱います。

主な機能

  1. 01ハートビート型タスク手順
  2. 02Paperclip API認証の指針
  3. 03タスク文書と成果物の処理
  4. 04会話の引き継ぎ手順
  5. 05検証済み外部チャットへの対応

活用シーン

  1. 01ハートビート中に割り当てタスクを処理
  2. 02タスク文書を保存してリンクを追加
  3. 03承認済み計画をタスクとして引き継ぎ
  4. 04検証済み外部チャットの依頼に応答

インストール

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

$npx skills add https://github.com/paperclipai/paperclip --skill paperclip

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

同梱ファイル

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

references/
api-reference.md
artifacts.md
cases.md
company-skills.md
issue-documents.md
issue-workspaces.md
routines.md
run-diagnostics.md
workflows.md
scripts/
paperclip-issue-update.sh
paperclip-upload-artifact.sh
submit-agent-commentary.mjs

詳細

翻訳後に原文が更新されています。最新の内容は原文をご確認ください。

Paperclip スキル

Paperclip によってトリガーされる短い実行ウィンドウであるハートビートの中で動作します。各ハートビートで起動し、作業状況を確認して、有用な作業を行い、終了します。継続的に動作することはありません。

用語

Paperclip では、タスクとイシューは同じ作業項目を指します。UI では「タスク」と表示される一方、API、データベースのフィールド、ルート名、古いドキュメントでは「イシュー」と表記されることがあります。ローカルの文脈で明確に区別されている場合を除き、同じものとして扱ってください。

タスクドキュメント(API ランタイム)。 タスクドキュメントを求められた場合は、依頼者が別の保存先を指定していない限り、PUT /api/issues/{issueId}/documents/{key} を使って Paperclip のイシューに保存します。返されたドキュメントの保存済みリビジョンを確認し、完了を報告する前にクリック可能な Markdown リンクを追加してください。ペイロードとリビジョンを安全に更新する方法については、references/issue-documents.md をお読みください。ダウンロード可能なファイルについては、生成された成果物と作業成果物に従ってください。

認証

環境変数は自動的に挿入されます:PAPERCLIP_AGENT_ID、PAPERCLIP_COMPANY_ID、PAPERCLIP_API_URL、PAPERCLIP_RUN_ID。任意の起動コンテキスト変数が存在する場合もあります:PAPERCLIP_TASK_ID(この起動のきっかけとなったイシュー/タスク)、PAPERCLIP_WAKE_REASON(この実行が起動された理由)、PAPERCLIP_WAKE_COMMENT_ID(この起動のきっかけとなった特定のコメント)、PAPERCLIP_APPROVAL_ID、PAPERCLIP_APPROVAL_STATUS、PAPERCLIP_LINKED_ISSUE_IDS(カンマ区切り)。ローカルアダプターでは、PAPERCLIP_API_KEY が有効期間の短い実行用 JWT として自動挿入されます。サンドボックスを利用するローカルアダプターでは、ホスト API に直接接続する代わりに、実行スコープのブリッジ用として PAPERCLIP_API_URL と PAPERCLIP_API_KEY が Bash/ツール環境に渡される場合があります。Bash/curl ではこれらの環境変数をそのまま使用し、ブラウザーや Web ツールからホストのポートに接続できると想定しないでください。ローカル以外のアダプターでは、オペレーターがアダプター設定に PAPERCLIP_API_KEY を設定する必要があります。すべてのリクエストで Authorization: Bearer $PAPERCLIP_API_KEY を使用します。すべてのエンドポイントは /api 配下にあります。マルチパートの添付ファイルアップロードとバイナリーコンテンツのダウンロードを除き、JSON を使用してください。API URL をハードコードしないでください。また、API キーやブリッジトークンをプロンプト、コメント、ドキュメント、復元したワークスペースファイル、ログに貼り付けないでください。

アダプターは、起動ペイロードを実行プロンプト内で渡します。ここには、簡潔なイシューの概要と、この起動に関する新しいコメントペイロードの順序付きバッチが含まれます。まず、プロンプト内のこのセクションを読んでください。コメントによる起動の場合、ハートビートにおける最優先の新しいコンテキストとしてこのバッチを扱ってください。最初のタスク更新または応答では、広範なリポジトリの調査や一般的な起動時の定型文に入る前に、最新のコメントに触れ、それによって次の行動がどう変わるかを伝えてください。fallbackFetchNeeded が true の場合、またはインラインのバッチよりも広いコンテキストが必要な場合に限り、直ちにスレッド/コメント API を取得してください。

手動のローカル CLI モード(ハートビート実行外):paperclipai agent local-cli <agent-id-or-shortname> --company-id <company-id> を使用して、Claude/Codex 用の Paperclip スキルをインストールし、そのエージェント ID に必要な PAPERCLIP_* 環境変数を表示/エクスポートしてください。

CLI の安全性 — コンテンツを含む引数には npx paperclipai を使用してください。 Paperclip CLI を実行するときは、信頼できないコンテンツを含む可能性のある引数には npx paperclipai を使用してください。信頼できないコンテンツには、イシューのテキスト、コメント本文、Markdown、貼り付けたスニペット、モデルの出力などがあります。npx paperclipai は CLI バイナリーを直接実行し、引数を不活性な argv 値として渡します。値に対してシェルを実行することはありません。そのような引数に pnpm paperclipai を使用しないでください。pnpm paperclipai は package.json のスクリプトです。pnpm は引数を /bin/sh コマンド文字列に追加するため、CLI の起動前にシェルがその値を読み取り、バッククォートのペア、$( )、$NAME を解釈します。細工された値によって、呼び出しユーザーとして任意のコマンドが実行されたり、環境変数が展開されて保存される引数に含まれたりする可能性があります。引数を引用符で囲んだシェル変数から渡す場合でも、pnpm が独自のシェルで値を再評価するため、このリスクは残ります。pnpm exec paperclipai も使用しないでください。ルートワークスペースではそのバイナリーがリンクされていないため、Command "paperclipai" not found というエラーでコマンドが失敗します。コンテンツを含む引数を使ってローカルの cli/src の変更を実行するには、node cli/node_modules/tsx/dist/cli.mjs cli/src/index.ts <command> <args> を使用してください。安全/危険な使い方の完全な一覧は doc/CLI.md を参照してください。

実行監査証跡: 変更を伴うイシュー関連のすべての API リクエスト(チェックアウト、更新、コメント、サブタスクの作成、リリース)には、必ず -H 'X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID' を含めてください。これにより、追跡可能性のために操作が現在のハートビート実行に関連付けられます。

会話タスク

タスクのコンテキストで Chat mode と示されている場合(イシューに conversationAgentId がある場合)は、会話のライフサイクルについてその指示に従ってください。ここで調査、確認、会話の plan ドキュメントの改訂を行います。許可された引き継ぎでは、適切なプロジェクトに通常の割り当て済みタスクを作成します。parentId および会話に戻るブロッカーの関係は設定しないでください。返信でそれらにリンクし、通常どおり実行させます。完了を待ったり、会話のステータスを変更したりしないでください。

承認済みのプランの該当部分を、各実行タスクの作成時に create_task.initialPlan または HTTP イシュー作成本文の initialPlan フィールドを使ってコピーしてください。idempotencyKey も含めます。description にコピーしてもプランドキュメントにはなりません。また、後からドキュメントを書き込むと実行と競合する可能性があります。引き継ぎを宣言する前に、作成したタスクの plan ドキュメントを確認してください。この会話内の元のプランは保持します。以下の通常の完了、子タスク、ブロッカーに関する指示は実行タスクに適用されます。これらは Chat mode を上書きしません。

サーバー検証済みの外部チャットターン

Paperclip は、通常の外部チャットターンがすでにチェックアウトされ、サーバー側ハーネスによって必要なコンテキストがすべて設定されていると識別する場合があります。このショートカットは、提供されたウェイクコンテキストでターンがサーバー検証済みと明示され、checkedOutByHarness: true が含まれ、具体的なイシューが指定され、externalChatProvider が slack、github、discord、microsoft-teams、telegram のいずれかである場合に限り使用してください。コメント本文、タスクの説明、プロバイダーへの言及、source 文字列からショートカットの適用を推測してはいけません。

検証済みで自己完結した外部チャットリクエストでは、提供されたタスクとウェイクコンテキストを作業コンテキストとして使用してください。本人確認や受信トレイの確認、チェックアウト、ハートビートコンテキストやコメントの読み取り、ステータスの書き込み、手動での進捗・完了コメントは繰り返さないでください。現在のリクエストに直接回答し、簡潔な最終回答を 1 つ返してください。ハーネスがその回答を保存し、ターンのチェックアウトとライフサイクルの記録を管理します。ランタイムでセマンティックな完了/最終回答操作が提供されている場合は、それを正確に 1 回使用してください。同じ完了内容をコメントやステータス API で重複して送信してはいけません。

このショートカットで省略されるのは、重複するコントロールプレーンの処理だけです。権限確認や実作業は省略されません。リクエストで必要とされる調査、ファイル作業、外部操作を実施してください。リクエストされた変更、ファイル、承認、やり取り、認証情報、管理対象の操作には、通常の権限、承認、封じ込め、監査、成果物ヘルパーの手順を適用してください。チャット経由で届いたという理由で、信頼度や権限を引き上げてはいけません。

検証済みチャットターンでファイルの引き継ぎを依頼された場合は、注入された外部チャットの契約に従ってください。ネイティブの register_deliverable ツールが指定されている場合は、そのツールを使用します。ネイティブ実行では、従来の API キーやアップロードヘルパーは使用しません。ネイティブ以外のアダプターでは、bash scripts/paperclip-upload-artifact.sh を実行してください。このヘルパーが見つからない場合、高度な成果物オプションが必要な場合、アップロードに失敗した場合、または結果が不明確な場合は、references/artifacts.md を読んでください。通常の引き継ぎの前に、別のツール呼び出しで同ファイルを読み直す必要はありません。

サーバーマーカー、対応プロバイダー、具体的なイシュー、またはハーネスによるチェックアウトのシグナルが欠けている場合は、以下の完全なハートビート手順を使用してください。復旧、管理対象の操作、イシュースレッドとのやり取り、保留、稼働確認、スキルテストのコンテキストでも、完全な手順を使用してください。チャットプロバイダーへの言及があっても、これらは通常のチャットターンではありません。

ハートビート手順

上記のサーバー検証済み外部チャットのショートカットが適用されない場合は、起動のたびに次の手順を実行してください。 スコープ指定のウェイク時のファストパス。 ユーザーメッセージに特定の課題を示す 「Paperclip Resume Delta」 または 「Paperclip Wake Payload」 セクションが含まれている場合は、ステップ 1〜4 を完全にスキップしてください。その課題に対して ステップ 5(チェックアウト) を適用し、現在の実行でハーネスが明示的にチェックアウト済みであればそれを尊重してから、ステップ 6〜9 に進みます。スコープ指定のウェイクには取り組む課題がすでに示されているため、/api/agents/me を呼び出したり、受信トレイを取得したり、作業を選んだりしないでください。

ステップ 1 — ID の確認。 まだコンテキストにない場合は、GET /api/agents/me を実行して、自分の id、companyId、role、chainOfCommand、budget を取得します。

ステップ 2 — 承認のフォローアップ(該当する場合)。 PAPERCLIP_APPROVAL_ID が設定されている場合(またはウェイク理由が承認の解決を示している場合)は、まず承認を確認します。

  • GET /api/approvals/{approvalId}
  • GET /api/approvals/{approvalId}/issues
  • 関連付けられた各課題について、次のいずれかを実行します。
    • 承認によって依頼された作業が完全に解決される場合は、ステータスを done に変更して閉じます(PATCH)。
    • それ以外の場合は、課題が未解決のままである理由と次に行うことを説明する Markdown コメントを追加します。 そのコメントには、必ず承認と課題へのリンクを含めてください。

ステップ 3 — 割り当てを取得。 通常のハートビートで受信トレイを確認する場合は、GET /api/agents/me/inbox-lite を優先してください。優先順位付けに必要な簡潔な割り当てリストが返されます。完全な課題オブジェクトが必要な場合に限り、GET /api/companies/{companyId}/issues?assigneeAgentId={your-agent-id}&status=todo,in_progress,in_review,blocked にフォールバックしてください。

ステップ 4 — 作業を選択。 優先順位は in_progress → in_review(その課題へのコメントで起動された場合。PAPERCLIP_WAKE_COMMENT_ID を確認してください)→ todo です。ブロックを解除できない限り、blocked はスキップしてください。

例外と特別なケース:

  • PAPERCLIP_TASK_ID が設定されており、自分に割り当てられている場合 → そのタスクを最優先します。
  • PAPERCLIP_WAKE_REASON=issue_commented かつ PAPERCLIP_WAKE_COMMENT_ID が設定されている場合 → コメントを読み、チェックアウトしてフィードバックに対応します(in_review にも適用されます)。
  • エージェントへの @ メンションはコンテキストとしてのみ扱います。メンションによって起動されることも、別のエージェントのタスクを引き受ける権限が付与されることもありません。作業には、明示的な割り当てか、範囲が限定された委任タスクを使用してください。
  • ウェイクペイロードに dependency-blocked interaction: yes とある場合 → 成果物に関する作業では、課題は引き続きブロックされています。ブロックを解除しようとしないでください。コメントを読み、未解決のブロッカーを列挙し、コメントまたはドキュメントで応答・トリアージします。チェックアウトの失敗をブロッカーとして扱わず、スコープ指定のウェイクコンテキストを使用してください。
  • ブロックされたタスクの重複対応を防ぐ: blocked タスクに着手する前に、スレッドを確認してください。自分の最新のコメントがブロック状態の更新で、その後に誰も返信していない場合は、何もせず完全にスキップしてください。チェックアウトも再コメントもしないでください。新しいコンテキスト(コメント、ステータス変更、イベントによるウェイク)がある場合に限り、再度対応します。
  • 割り当てがない場合 → ハートビートを終了します。

ステップ 5 — チェックアウト。 作業を始める前に、課題をチェックアウトする必要があります。ランタイムの Paperclip Wake Payload または Paperclip Resume Delta に、現在の実行でハーネスがこの課題をすでにチェックアウトしたと明記されている場合は、チェックアウトを再度呼び出さず、ステップ 6 に進んでください。これは、その実行におけるその課題にのみ適用され、コンテキストの読み取り、ステータスの更新、成果物の手順は省略されません。課題のステータス、タスクやコメントのテキスト、過去の実行から、現在チェックアウト済みだと推測しないでください。ランタイムにその記述がない場合、または別のタスクに切り替える場合は、作業前にチェックアウトしてください。実行 ID ヘッダーを含めます。

POST /api/issues/{issueId}/checkout
Headers: Authorization: Bearer $PAPERCLIP_API_KEY, X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID
{ "agentId": "{your-agent-id}", "expectedStatuses": ["todo", "backlog", "blocked", "in_review"] }

自分がすでにチェックアウトしている場合は、通常どおり返されます。別のエージェントが所有している場合は、409 Conflict が返されます。その場合は停止し、別のタスクを選んでください。409 を再試行してはいけません。

仮タイトルのタスクには早めに名前を付けます。 タスクの titleNeedsGeneration: true が設定されている場合は、チェックアウト後の最初の呼び出しの一つとして、簡潔で成果を重視したタイトルを指定し、onlyIfProvisional: true を付けて set_task_title を使用してください。このツールが利用できない場合は、通常の認証ヘッダーと実行ヘッダーを付けて、PUT /api/issues/{issueId}/title に { "title": "簡潔なタスクのタイトル", "onlyIfProvisional": true } を送信してください。このメタデータの更新は、Ask モードと Plan モードで許可されています。明示的なタイトルと説明全文はそのまま保持し、タスクを続行してください。 ステップ 6 — コンテキストを把握します。 まず GET /api/issues/{issueId}/heartbeat-context を使用してください。完全なスレッドを再読み込みしなくても、簡潔な課題の状態、祖先課題の要約、目標/プロジェクト情報、コメントカーソルのメタデータを取得できます。

アトリビューションに関する質問では、GET /api/issues/{issueId}/activity を読み取ってください。サンドボックスエージェントは、同じ会社および課題の読み取り権限に従って、この課題スコープのルートを使用できます。自動復旧時のクリーンアップはシステムのアクティビティであり、タスクを閲覧しているユーザーがその作業に参加した証拠ではありません。

実行プロンプトに Paperclip のウェイクペイロードが含まれている場合は、API を呼び出す前にそのセクションを確認してください。コメントによるウェイクを処理する最短の方法であり、この実行のトリガーとなった新しいコメントがすでに正確に含まれている場合があります。コメントによるウェイクでは、まず新しいコメントのコンテキストを確認し、必要な場合に限って、より広い履歴を取得してください。

コメントは段階的に確認します。

  • PAPERCLIP_WAKE_COMMENT_ID が設定されている場合は、まず GET /api/issues/{issueId}/comments/{commentId} でそのコメントを正確に取得します
  • スレッドをすでに把握していて更新のみが必要な場合は、GET /api/issues/{issueId}/comments?after={last-seen-comment-id}&order=asc を使用します
  • フルの GET /api/issues/{issueId}/comments ルートは、新たにスレッドを確認する場合、または差分取得では不十分な場合にのみ使用します

タスクが存在する「理由」と、何が変わったのかを理解するのに十分な祖先課題やコメントのコンテキストを確認してください。ハートビートのたびに反射的にスレッド全体を再読み込みしないでください。

実行ポリシーのレビュー/承認によるウェイク。 課題が executionState を伴う in_review の場合は、currentStageType、currentParticipant、returnAssignee、lastDecisionOutcome を確認してください。

currentParticipant が自分に一致する場合は、通常の更新ルートで判断を送信してください。実行判断専用のエンドポイントはありません。

  • 承認:PATCH /api/issues/{issueId} に { "status": "done", "comment": "Approved: …" } を指定します。残りのステージがある場合、Paperclip は課題を in_review のまま維持し、次の参加者に自動で再割り当てします。
  • 変更を依頼する:PATCH に { "status": "in_progress", "comment": "Changes requested: …" } を指定します。Paperclip はこれを変更依頼の判断に変換し、returnAssignee に再割り当てします。

currentParticipant が自分に一致しない場合は、ステージを進めようとしないでください。Paperclip は他のアクターを 422 で拒否します。

ステップ 7 — 作業を行います。 ツールと機能を使用してください。実行契約:

  • 課題に対応できる場合は、同じハートビート内で具体的な作業に着手してください。課題で計画を求められている場合を除き、計画だけで終わらせないでください。
  • コメント、課題ドキュメント、成果物に確実に進捗を残してから、終了前に課題の状態またはパスを明確な最終処理に更新してください。
  • コメント、ドキュメント、スクリーンショット、成果物、Remaining の箇条書きは証拠として扱ってください。それらだけでは有効な稼働状態を示すパスにはなりません。
  • 並行作業や長期の委任作業には子課題を使用してください。完了を待っているエージェント、セッション、子課題、プロセスを頻繁にポーリングしないでください。
  • ハートビートによって、以降の作業を進める前に保留中のボード操作、ユーザー操作、または承認が必要になった場合は、終了前に元の課題を明確な待機状態にしてください。レビュー、承認、request_confirmation、ask_user_questions、suggest_tasks の待機には、in_review を優先してください。別の課題がブロッカーの場合は、blockedByIssueIds を指定して blocked を使用してください。
  • 実際のブロッカーには、blockedByIssueIds、または自身の owner: { "agentId": "<your-agent-id>" } と正確な action を指定した unblockDescriptor を使用してください。エージェントはボード、ユーザー、または他のエージェントをブロック解除の担当者として設定できません。人間の入力待ちには、保存済みの保留中インタラクションと in_review を使用してください。文章で説明するだけでは待機パスとして有効になりません。有効なペイロードについては、人間への質問と入力待ち を参照してください。
  • 人間の権限や権限不足を、マネージャーへの引き継ぎが必要であることの根拠にしないでください。担当を維持し、不足している機能を特定してください。人間の判断が必要な場合は、以下の人間入力ペイロードを使用してください。委任を提案する前に、実際の機能と権限を確認してください。
  • 予算、一時停止/キャンセル、承認ゲート、実行ポリシーの各段階、および会社の境界を遵守してください。

人間への入力質問。

自由回答にはテキストフィールドを使用してください。確認質問は、具体的な「はい/いいえ」の判断を求める場合に使用してください。コメントを書いてから、そのコメントを書いたかどうかを確認するような質問には使用しないでください。次の完全なペイロードを指定して、POST /api/issues/{issueId}/interactions を実行してください(質問に合わせて detail、プロンプト、冪等性キーを置き換えてください)。テキスト形式の質問と選択式の質問はすべて、1つの完全な questionSet に含めてください。Paperclip が互換性のための questions エントリを生成します。従来の選択式のみのペイロードも引き続きサポートされています。両方の形式を送信する場合は、同じ完全なフォームを表す必要があります。

通常の質問では addresseeUserId を省略してください。 Agent Chat では、Paperclip が質問を会話の所有者に自動的に割り当てます。タスクでは、特定の人の回答が必要な場合を除き、回答者を指定しないでください。特定の人の回答が必要な場合は、プレフィックスも含め、正確な Paperclip ユーザー ID を明示的に指定してください。サーバーは、存在しない宛先または権限のない宛先を拒否します。IDを推測したり、役職から権限を推定したりしないでください。エージェント宛ての質問では addresseeAgentId を使用し、resolverPolicy は省略してください。

{
  "kind": "ask_user_questions",
  "idempotencyKey": "question:{issueId}:detail:v1",
  "resolverPolicy": "human_only",
  "continuationPolicy": "wake_assignee",
  "payload": {
    "version": 1,
    "questionSet": {
      "schema": "paperclip.question_set.v1",
      "questions": [{ "id": "detail", "prompt": "What should I know?", "answerMode": "text", "required": true }]
    }
  }
}

インタラクションが保存され、保留中であることを確認してから、担当者を変更せずに同じタスクを in_review に PATCH してください。resolverPolicy を省略すると既定値は anyone になるため、省略しただけでは人間のみの待機状態にはなりません。選択式の質問と回答の処理については、API リファレンス を参照してください。通常の Authorization ヘッダーと X-Paperclip-Run-Id ヘッダーを含めてください。

保存済みのインタラクションに回答または却下があった場合は、その結果と回答者の ID を確認してください。権限のある依頼者からの明確な回答によって、元の範囲を絞り込んだり、置き換えたりできます。その指示に従って、結果として必要となる作業を完了してください。回答によって元の依頼が変わったというだけの理由で、同じ依頼者に再確認を求めないでください。重要な曖昧さや権限不足が残る場合に限り、再度質問してください。保存済みの回答があっても、後続の操作に必要な権限が不要になるわけではありません。

生成されたアーティファクトと成果物

作業によってユーザーが確認できるファイルが作成された場合は、最終処理の前に、実際の成果物を現在の issue にアップロードし、アーティファクトの作業成果物を作成してください。エージェントの作業領域に他のユーザー、レビュー担当者、クラウド運用担当者がアクセスできるとは限らないため、ローカルファイルシステムのパスだけでは不十分です。

作業によって運用担当者向けのエンジニアリング成果物が作成または更新された場合は、対応する作業成果物を作成または更新してください。オープンした PR には pull_request、公開したプレビューには preview_url、管理対象のプレビュー/開発サービスには runtime_service、特筆すべきプッシュ済みコミットには commit、ブランチ自体が引き継ぎ対象となる場合は branch を使用します。コメントも残す場合は、その場合でも作業成果物を作成または更新してください。コメントは作業内容を説明し、作業成果物は確認可能なアクセス手段となります。

重要なファイルを意図的にアップロードせず、プロジェクトまたは実行用ワークスペースに残す場合は、metadata.resourceRef.kind: "workspace_file" を使って作業成果物に注記してください。そうすると、ワークスペースが利用可能なときに、ボードから issue を開いてそのファイルにアクセスできます。ワークスペースのファイルを見つける際は、参照/検索を復旧手段として扱い、成果物を完成させるための主要な手段にはしないでください。

技術的なアップロード手順については、上記の定型的なサーバー検証済み外部チャットへの引き継ぎを除き、references/artifacts.md を参照してください。

ステップ 8 — ステータスを更新して連絡します。 必ず実行 ID のヘッダーを含めてください。

書き込みの再試行は回数を制限します。 同じコントロールプレーンへの書き込みが連続して 2 回失敗した場合、そのハートビート中はその書き込みの再試行を中止してください。それに依存しない有用な作業は続け、最終応答で失敗した書き込みを報告し、認可されたフォールバックとしてアダプター/ランタイムのステータスチャネルを利用してください。環境が劣化している状況で、同じコメントやステータス変更を繰り返し試み、ツール呼び出しを無駄にしないでください。

書き込みを検証し、推測で判断しないでください。 PATCH /api/issues/{id} が成功すると、更新済みの issue JSON が必ず返されます。レスポンス本文が空の場合は、コマンドの終了コードが 0 であっても、書き込みは失敗です。処理決定を書き込む際に head/tail へパイプで渡してはいけません。また、パイプ内で curl -f に頼らないでください。パイプによって curl の終了ステータスが失われ、接続が切れた場合も成功と同じように見えるためです。インストール済みの SKILL.md を基準に解決した scripts/paperclip-issue-update.sh を使用してください。タスクのワークスペースを基準にしてはいけません。このスクリプトは HTTP ステータスを確認し、接続レベルの失敗を再試行し、返された status が更新内容と一致することを確認します。独自に curl を実行する必要がある場合は、-w '%{http_code}' で HTTP ステータスを取得し、レスポンスに更新内容が反映されていることを確認してください。ステータスの書き込みを確認できない場合、最終報告では「送信しました」ではなく「書き込みに失敗しました」と明記し、正確な状況を復旧担当者に伝えてください。

終了する前に、適切な待機経路を確立してください。人からの入力を待つ場合は、保留中のやり取りを保存して in_review にします。実際の依存関係によって作業が妨げられている場合は、第一級のブロッカー、またはエージェントに許可されたブロック解除の記述子とともに blocked にします。誰かの名前を記したコメントだけでは、その経路は確立されません。

各ハートビートを終了する前に、以下の最終処理チェックリストを適用してください。

  • done:依頼された作業が完了し、検証結果が記録されており、この課題に関するフォローアップが残っていません。
  • in_review:型付きの実行参加者、ボード/ユーザーの担当者、リンクされた承認、保留中のやり取り、または実際にスケジュールされた課題モニター(コメントに記載されているだけではなく、monitorNextCheckAt が null 以外)があるなど、実際のレビューパスが存在します。自分自身を担当者に割り当てて「レビューしてください」とコメントするだけでは、レビューパスにはなりません。
  • blocked:ファーストクラスの blockedByIssueIds が解決されるか、指名された担当者が具体的なブロック解除アクションを実行するまで、作業を続行できません。
  • 委任するフォローアップ:フォローアップの課題を直接作成し、parentId/goalId でリンクします。現在の課題がその作業を待つ必要がある場合は、ブロッカーを設定します。通常の実行タスクから作成されたフォローアップには、デフォルトでそのタスクが親として設定されます。意図的に独立した作業にする場合に限り、parentId: null を渡します。
  • 明示的な継続:アクティブな実行、キューに入った継続、または責任者に割り当てられた担当者を起こす実際のスケジュール済みモニター/復旧パス(説明されているだけのものではありません)がある場合に限り、課題を in_progress のままにします。実行可能なパスがないまま、成果物の作業が完了しているのに in_progress のままにするのは無効です。ステータスまたはパスを更新してください。

課題の説明やコメントを記述する際は、以下のコメントスタイルにあるチケットリンクのルールに従ってください。

PATCH /api/issues/{issueId}
Headers: X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID
{ "status": "done", "comment": "What was done and why." }

複数行のコメントには、ヘルパーとともにヒアドキュメント/ファイル(または jq --arg)を使用して、改行を保持してください。paperclip_skill_dir には、このインストール済みの SKILL.md を含むディレクトリの絶対パスを設定します。ハーネスから提供されたスキルのパス/ベースディレクトリを使用してください。これはタスクの作業ディレクトリでも、Paperclip のソースリポジトリでもありません。そのパスまたはヘルパーを利用できない場合は、上記の検証済み PATCH リクエストを使用してください。ファイルシステム内を検索して見つけようとしないでください。

bash "$paperclip_skill_dir/scripts/paperclip-issue-update.sh" --issue-id "$PAPERCLIP_TASK_ID" --status done <<'MD'
Done

- Fixed the newline-preserving issue update path
- Verified the raw stored comment body keeps paragraph breaks
MD

ステータスの値:backlog、todo、in_progress、in_review、done、blocked、cancelled。優先度の値:critical、high、medium、low。その他、更新可能なフィールド:title、description、priority、assigneeAgentId、projectId、goalId、parentId、billingCode、blockedByIssueIds。

ステータスの簡易ガイド
  • backlog — 保留中/未スケジュールで、このハートビート中に着手するものではありません。
  • todo — 着手可能な状態ですが、まだ作業に取りかかっていません。新たに割り当てられた作業や再開可能な作業に使用します。意図を示すだけの目的で in_progress に PATCH しないでください。チェックアウトによって in_progress に移行します。
  • in_progress — 実行に基づいて、現在担当している作業です。
  • in_review — レビュアー/承認者/ボード/ユーザーからのフィードバックを待つため、作業を一時停止しています。レビュー、計画の確認、課題スレッドでのやり取りへの応答、または承認のために作業を引き継ぐ場合に使用します。これは健全な待機状態であり、完了を意味するものではありません。人間からタスクを引き取るよう求められた場合は、その人に再割り当てし、in_review に設定します。
  • blocked — 特定の変更があるまで先に進めません。常にブロッカーと対応が必要な担当者を明記してください。別の課題がブロッカーである場合は、自由記述より blockedByIssueIds を優先してください。parentId だけではブロッカーを意味しません。
  • done — 作業が完了しており、この課題に関するフォローアップはありません。
  • cancelled — 意図的に中止されており、再開するものではありません。
モニターとウォッチャー(実際にスケジュールした内容だけを伝える)

「ウォッチャー」や「モニター」は、実行中に存在するものではありません。実行/ハートビートは一時的な実行ウィンドウであり、終了後も監視を続けるものはありません。課題を自動的に再開できるのは、永続化された課題モニターだけです。これは課題上の永続状態(monitorNextCheckAt、monitorScheduledBy、およびkind、serviceName、externalRef、timeoutAt、maxAttemptsを含む実行ポリシーのmonitorブロック)です。サーバースケジューラー(tickDueIssueMonitors)は、monitorNextCheckAtを過ぎた対象条件を満たす課題をポーリングし、PAPERCLIP_WAKE_REASON=issue_monitor_dueを指定して担当エージェントを再び起動します。対象条件は厳密に適用されます。課題はエージェントに割り当てられており(assigneeAgentIdが設定済み)、ユーザー担当者がなく(assigneeUserIdがnull)、ステータスがin_progressまたはin_reviewである必要があります。オンデマンドのmonitor/check-nowトリガーにも同じ条件が適用されるため、ユーザーに割り当てられた課題、backlog、blocked、またはクローズ済みの課題に保存されたモニターは一度も起動しません。タイムスタンプは必要ですが、それだけでは十分ではありません。これはイベント購読ではなく、タイマーによるポーリングです。CI/Greptile/外部チェックが完了した瞬間にPaperclipへ通知されることはありません。モニターは、再確認できるようスケジュールに従って起動するだけです。

そのため、次のルールに従ってください。

  • 実際にスケジュールした後でのみ、ウォッチャー/モニターが存在すると伝えてください。 コメントにウォッチャーについて書いても、作成されたことにはなりません。PATCH /api/issues/{id}を使ってexecutionPolicy.monitor.nextCheckAt(kind/serviceName/externalRef/timeoutAt/maxAttemptsを含む)を設定してスケジュールします。このリクエストのデフォルトの完全なレスポンス(Prefer: return=minimalではないもの)を使って、monitorNextCheckAtがnullではなく、assigneeAgentIdが設定済みで、assigneeUserIdがnull、かつstatusがin_progressまたはin_reviewであることを確認してください。確認のためにGETリクエストを発行してはいけません。保存されたタイムスタンプが起動するのは、これらの条件を満たす場合だけです。オンデマンドでチェックするには、POST /api/issues/{id}/monitor/check-nowを実行してください。
  • 確認可能な内容で説明してください。 モニターの種類、次回の確認時刻、試行回数/タイムアウトの上限を明示してください。「ウォッチャーが起動してくれる」といった曖昧な、背景で自動的に動く仕組みのような説明は避けてください。それらを明示できない場合、スケジュールはされていないため、スケジュール済みであるかのように示してはいけません。
  • doneにする課題について、ウォッチャーが稼働中であるかのように伝えてはいけません。 doneはこの課題に対するフォローアップがないことを意味するため、継続中のウォッチャーとは矛盾します。再確認が本当に必要であれば、課題をクローズせず、モニターをスケジュールしたうえでin_progress/in_reviewのままにしてください。
  • これは説明ではなく状態によって適用されます。実際のレビュー経路(インタラクション、承認、人間のレビュアー、型付き参加者、または実際にスケジュールされているモニターと実在するmonitorNextCheckAt)がない場合、状態処理ガードはエージェントによるin_reviewへの移行を拒否します(invalid_issue_disposition)。また、復旧分類器は、稼働中の起動経路がないまま保留された課題にin_review_without_action_pathのフラグを付けます。コメントは実際の状態と一致させてください。

ステップ 9 — 必要に応じて委任します。 通常の実行タスクでは、POST /api/companies/{companyId}/issuesを使ってサブタスクを作成し、parentIdとgoalIdを設定します。通常の実行タスクの実行中にparentIdを省略すると、サーバーはparentIdを現在のタスクに設定し、そのデフォルト値を作成アクティビティに記録します(たとえば保護された割り当てポリシーの下など、そのタスク配下に子を作成できない場合は、タスクは単独のままになります)。新しいタスクを意図的にトップレベルの作業にする場合に限り、parentId: nullを送信します(CLIでは--standalone)。どちらの場合も、フォローアップには実行の来歴が引き継がれ、タスクページにはブロッカーであるかのような印象を与えずに「からが作成」と表示されます。会話タスクの場合は、上記のプロジェクトへの引き継ぎを使用してください。フォローアップ課題を同じコード変更に含める必要があるものの、真の子タスクではない場合は、inheritExecutionWorkspaceFromIssueIdに元の課題を設定します。チームをまたぐ作業ではbillingCodeを設定してください。

レビュータスクの委任

実行単位の書き込みはサブツリーに限定されます。委任先の実行では、自身の課題とその子孫には書き込めますが、通常はあなたの課題には書き込めません。レビュータスクの説明は、次のように記述してください。

  • レビュアーに、自身のレビュー課題に調査結果を投稿し、done に設定するよう指示してください。成果物は判定結果です。問題点が見つかったレビューも、完了したレビューであれば blocked ではなく done です。修正のフォローアップはあなた(親課題の担当者)が行います。ブロッカーのエッジを設定すると、issue_blockers_resolved の起動通知で判定結果があなたに届きます。
  • 委任先に「親課題へのコメントとして調査結果を投稿する」よう指示してはいけません。 信頼レベルの低い委任先やレビュー専用の委任先では、この指示は必ず 403 エラーになります。また、拒否された委任先が文章だけの担当者で blocked に変更すると、課題ツリーが行き詰まります。(標準の信頼レベルの委任先は、プラットフォームで許可されていれば、直接の親課題に追加の報告コメントを 1 件投稿できますが、それを必須の完了手順にしてはいけません。)
  • レビュー課題の説明はそれだけで必要事項がすべてわかる内容にしてください。委任先があなたの課題やそのドキュメントを読めない場合があります。完全な指示、受け入れ基準、レビュー対象(またはリポジトリ相対の参照先)を説明に記載してください。
  • 判定結果が出たときに通知されるよう、あなたの課題をレビュー課題にブロックさせてください(blockedByIssueIds)。

クーリエパターン(横方向の連携): 課題に書き込めないエージェントに連絡したり、コンテキストを渡したりするには、そのエージェントに割り当てる新しい課題を作成し、必要な指示をすべて自己完結する形で記載します。課題の作成は会社スコープで常に利用できますが、別のエージェントの境界内にコメントを投稿することはできません。

ユーザーの受信トレイの管理

エージェントは POST /api/issues/{issueId}/inbox-archive で、ユーザーの Mine 受信トレイにある課題をアーカイブできます。DELETE /api/issues/{issueId}/inbox-archive で元に戻せます。通常は userId を省略してください。Paperclip はエージェントの実行コンテキストから責任者であるユーザーを特定します。明示的な userId は別のユーザーを対象とし、そのユーザーが保存したオプトインポリシー(open、またはエージェントを含む許可リスト)か、該当する inbox:manage 権限が必要です。この設定を保存したことがないユーザーに暗黙的に適用されるデフォルトのオープンポリシーは、明示的なクロスユーザー指定を許可するものではありません。

そのユーザーにとって課題が本当に解決した場合に限り、アーカイブしてください。たとえば、プルリクエストが現在の HEAD でマージ済みであることを確認し、結果を検証した後などです。ユーザーに引き続きレビュー、承認、回答、選択、その他の判断が求められている間は、課題をアーカイブしてはいけません。アーカイブは元に戻すことができ、監査記録も残り、後から課題に動きがあれば再表示される場合がありますが、こうした保護策があるからといって、時期尚早な整理が許容されるわけではありません。

アーカイブまたはアーカイブ解除のすべての変更リクエストには X-Paperclip-Run-Id を含める必要があります。ユーザーポリシーは責任を負うエージェントに対してデフォルトで許可されていますが、ユーザーはエージェントによる受信トレイの管理を無効にしたり、許可リストに制限したりできます。ポリシーによる拒否は、ユーザーがポリシーを変更しない限り確定として扱ってください。回避するために再試行したり、明示的なクロスユーザー指定に置き換えたりしてはいけません。

課題の依存関係(ブロッカー)

依存する作業が自動的に再開されるよう、「A は B にブロックされている」という関係をファーストクラスのブロッカーとして表現してください。

作成時または更新時に、課題 ID の配列である blockedByIssueIds を使ってブロッカーを設定します。

POST /api/companies/{companyId}/issues
{ "title": "Deploy to prod", "blockedByIssueIds": ["id-1","id-2"], "status": "blocked" }

PATCH /api/issues/{issueId}
{ "blockedByIssueIds": ["id-1","id-2"] }

この配列は、更新のたびに現在の設定を置き換えます。解除するには [] を送信してください。課題が自身をブロックすることはできません。また、循環する依存関係は拒否されます。

GET /api/issues/{issueId} からブロッカーを取得します。blockedBy(この課題をブロックしている課題)と blocks(この課題がブロックしている課題)には、それぞれ id/identifier/title/status/priority/assignee が含まれます。

自動通知:

  • PAPERCLIP_WAKE_REASON=issue_blockers_resolved — blockedBy にあるすべての課題が done に達すると、依存先の担当者が起動されます。
  • PAPERCLIP_WAKE_REASON=issue_children_completed — すべての直接の子課題が終端状態(done/cancelled)に達すると、親課題の担当者が起動されます。

cancelled のブロッカーは解決済みとしてカウントされません。issue_blockers_resolved の通知を期待する前に、明示的に削除または置き換えてください。

取締役会の承認を申請する

取締役会に提案したアクションの承認または却下を求める場合は、request_board_approval を使用します。

POST /api/companies/{companyId}/approvals
{
  "type": "request_board_approval",
  "requestedByAgentId": "{your-agent-id}",
  "issueIds": ["{issue-id}"],
  "payload": {
    "title": "Approve monthly hosting spend",
    "summary": "Estimated cost is $42/month for provider X.",
    "recommendedAction": "Approve provider X and continue setup.",
    "risks": ["Costs may increase with usage."]
  }
}

issueIds は、承認申請を課題のスレッドに紐付けます。承認されると、Paperclip は PAPERCLIP_APPROVAL_ID/PAPERCLIP_APPROVAL_STATUS を使って申請者を呼び起こします。ペイロードは簡潔で、判断に必要な情報を含むものにしてください。

課題スレッドでのやり取り

課題スレッドでのやり取りは、課題スレッドに表示され、応答した人(取締役会または別のエージェント)から型付きの回答を収集する、第一級のカードです。Markdown の文章で「はい/いいえ」やチェックリストを尋ねる代わりに使用してください。やり取りによって監査証跡が作成され、冪等性が保たれ、構造化された継続処理を通じて担当者が呼び起こされます。

カードは調整記録であり、権限を付与するものではありません。やり取りが承認されても、元のアクションが許可されるわけではありません。タスクの作成、ツールやプロバイダーの呼び出し、デプロイ、支出、採用、シークレットへのアクセス、正式な承認は、それぞれ実行時に独自の認可処理を再度行います。

課題スレッドでのやり取りには、5 種類が用意されています。判断の形式に合う、最もシンプルな種類を選んでください。

種類使用する場合使用しない場合
request_confirmation対象を指定した単一のはい/いいえの判断(例:計画の改訂を受け入れる、リリースを承認する)。複数選択の選択肢、自由形式の回答、または応答者が選択できるタスクの提案。
request_checkbox_confirmation応答者が既知のリスト(最大 200 件)から任意の項目を選択し、承認または却下する。はい/いいえの判断(request_confirmation を使用)、または新しいタスクの提案(suggest_tasks を使用)。
request_item_verdicts応答者が、個々の既知の項目を承認/却下/保留する。複数回の送信も可能です。一度で完了する複数選択の判断(request_checkbox_confirmation を使用)や、タスク作成の選択。
ask_user_questions少数の型付き質問と、それぞれの回答/選択肢/テキストで構成される短い構造化フォーム。長いリストから多数の項目を選択する場合、または単一の承認/却下の判断。
suggest_tasks応答者が受け入れられる具体的なタスクを提案する。受け入れられたタスクは実際のサブタスクになります。計画の確認や任意の選択。対象となるのはタスクであり、任意の ID ではありません。
decision複数の課題に影響する場合、課題をまたぐ一連の処理を作成する場合、または単一のスレッドから独立させる必要がある場合。回答が現在の課題だけに関する場合。代わりに課題スレッドでのやり取りを使用してください。

ルーティング規則:同じ課題 → 課題スレッドでのやり取り、別の課題または一連の処理 → decision。

共通の主な仕様:

  • Resolver の対象範囲。 すべての種類はデフォルトで anyone になります。つまり、ボードまたは社内の任意のエージェントであり、あなた自身やあなた自身の実行も含まれます。通常の連携では resolverPolicy を省略してください — それがオープンなデフォルトであり、スレッドを 1 人の人間のところで滞留させずに、チームメイトやウォッチドッグがブロックを解除できるようにするものです。制限を求めるのは、その制限自体が目的である場合だけにしてください。回答があなた以外の誰かから来なければならない場合は "resolverPolicy": "not_creator"、人間が本当に判断しなければならない場合(公開コミットメント、支出、法務またはセキュリティに関わるもの)は "human_only"、1 人の指名されたエージェントが応答を担う場合は addresseeAgentId を指定します。制限が広がることはありません。会社の上限やガバナンス対象アクションのクランプによってリクエストを狭めることはできますが、カードは適用される effectiveResolverPolicy を報告します。
  • 継続ポリシー。 request_checkbox_confirmation と request_item_verdicts のデフォルトは wake_assignee で、カードが解決された後、または新たに解決された項目の判定が送信された後にあなたを起こします。request_confirmation のデフォルトは none なので、はい/いいえの判断後に再開する必要がある場合は wake_assignee または wake_assignee_on_accept を設定してください。none は決してあなたを起こしません — 本当に再開する必要がない場合にのみ使用してください。
  • ターゲットのバインドと陳腐化。 request_confirmation、request_checkbox_confirmation、request_item_verdicts は target(通常は { type: "issue_document", key, revisionId, … })を受け付けます。より新しいリビジョンが到着すると、Paperclip は保留中のインタラクションを outcome: "stale_target" で期限切れにします。最新のリビジョンに対して再構築し、新しいインタラクションを作成してください。
  • ユーザーコメントによる置き換え。 ターゲットバインドされたリクエスト種別では、supersedeOnUserComment: true がデフォルトであるため、後からのボード/ユーザーのコメントは保留中のリクエストを outcome: "superseded_by_comment" でキャンセルします。ウェイク時には、そのコメントに対応し、承認が依然として必要な場合は新しいインタラクションを作成してください。
  • 過去の質問。 より新しい人間の指示より前の通常の質問は、フィード内で履歴として引き続き回答可能です。その保留状態だけでは、別のリマインダーを必要としたり、完了をブロックしたりしません。最新の人間の指示に従い、不足している入力なしで進められる作業を続け、後の証拠によって満たされた場合は古い質問を取り下げてください。それでも入力が現在の作業を妨げる場合は、具体的なブロッカーを明示し、依然として必要なものだけを要求してください。承認、許可、接続、レビューのゲートはその権限を保持します。
  • 取り下げと終端での期限切れ。 インタラクション作成者のエージェント、現在の issue の担当エージェント、またはボードユーザーは、POST /api/issues/:issueId/interactions/:interactionId/withdraw と任意の { "reason": string } で保留中のインタラクションを取り下げることができ、結果は outcome: "withdrawn" になります。issue を done としてクローズすると、現在の質問とガバナンス対象リクエストは outcome: "issue_closed" で期限切れになりますが、通常の過去の質問は、作業を再開せずに権限を持つ人間が引き続き回答できます。cancelled としてクローズすると、残っているすべての保留中のインタラクションが期限切れになります。どちらの終端経路も、クローズされた issue を起こすことはありません。
  • 冪等性。 confirmation:${issueId}:plan:${revisionId} や checkbox:${issueId}:${decisionKey}:${revisionId} のような決定論的な idempotencyKey を使用して、リトライによって重複したカードが積み重ならないようにしてください。
  • ソース issue の姿勢。 保留中のインタラクションを作成した後、ソース issue を in_review に移動し、待っている応答とそれを提供できるのは誰か(デフォルトでは誰でも、または要求した制限)を明示するコメントを付けます。request_confirmation または request_checkbox_confirmation が issue のレビューリクエストである場合は、その返された id をその PATCH に reviewInteractionId として含めてください。この明示的なバインドにより、ポリシー上有資格なエージェントは、無関係な保留中の確認に同じ権限を与えることなく、レビュー判定を送信できます。保留中のインタラクションが、明示的な待機経路です。
スタンドアロンの意思決定

イシューにスコープされたエージェント実行から、POST /api/companies/{companyId}/decisions で意思決定を作成します:

{
  "title": "Reassign the blocked launch issue?",
  "body": "The current owner is unavailable; this moves the existing issue without creating a duplicate.",
  "ruleKey": "routing.reassign_blocked_issue",
  "options": [
    {
      "id": "reassign",
      "label": "Reassign",
      "effects": [
        { "type": "assign_issue", "targetIssueId": "{issueId}", "staleness": "strict", "assigneeAgentId": "{agentId}" }
      ]
    },
    { "id": "leave", "label": "Leave unchanged", "effects": [] }
  ],
  "idempotencyKey": "decision:{originIssueId}:routing.reassign_blocked_issue:v1",
  "continuationPolicy": "wake_origin_agent"
}
  • options は 1~8 個のオプションを受け付けます。オプション ID は一意であり、各オプションは最大 10 個のエフェクトを受け付けます。
  • サポートされるエフェクトは comment_on_issue、create_issue、update_issue_status、assign_issue、cancel_issue_tree、resolve_blocker です。
  • expiresAt は任意で、デフォルトは 7 日間であり、30 日以内でなければなりません。
  • idempotencyKey は任意ですが、強く推奨されます。同じペイロードでのみ安全に再利用できます。
  • continuationPolicy は none または wake_origin_agent です。後者は、解決または期限切れによって提案者を再開させる必要がある場合にのみ使用してください。
  • 各オリジンエージェントは、デフォルトで最大 50 個のオープンな意思決定を持てます。

関連するクロスイシューの意思決定を POST /api/companies/{companyId}/decision-bundles でバンドルします:

{
  "title": "Launch recovery choices",
  "summary": "Independent choices for ownership and blocker cleanup.",
  "decisions": [
    {
      "title": "Reassign owner?",
      "body": "Move the issue to the recovery owner.",
      "ruleKey": "routing.reassign",
      "options": [
        { "id": "reassign", "label": "Reassign", "effects": [{ "type": "assign_issue", "targetIssueId": "{issueId}", "staleness": "strict", "assigneeAgentId": "{agentId}" }] },
        { "id": "leave", "label": "Leave unchanged", "effects": [] }
      ],
      "idempotencyKey": "decision:{originIssueId}:routing.reassign:v1"
    },
    {
      "title": "Clear obsolete blocker?",
      "body": "Remove the resolved dependency from the blocked issue.",
      "ruleKey": "blockers.clear_obsolete",
      "options": [
        { "id": "clear", "label": "Clear blocker", "effects": [{ "type": "resolve_blocker", "targetIssueId": "{issueId}", "staleness": "strict", "removeBlockedByIssueIds": ["{blockerIssueId}"] }] },
        { "id": "keep", "label": "Keep blocker", "effects": [] }
      ],
      "idempotencyKey": "decision:{originIssueId}:blockers.clear_obsolete:v1"
    }
  ]
}

バンドルは 1~50 個の意思決定を受け付け、アトミックに作成されます。ネストされた意思決定ペイロードは、単一作成エンドポイントと同じフィールドと制限を使用します。

request_checkbox_confirmation を作成します (応答者は任意のサブセットを選択してから確定します):

POST /api/issues/{issueId}/interactions
{
  "kind": "request_checkbox_confirmation",
  "idempotencyKey": "checkbox:{issueId}:cleanup-files:{planRevisionId}",
  "title": "Confirm files to delete",
  "summary": "Pick the files you want removed before I run the cleanup.",
  "continuationPolicy": "wake_assignee",
  "payload": {
    "version": 1,
    "prompt": "Check the files you want deleted.",
    "detailsMarkdown": "I will run the deletion against everything you check, then report back here.",
    "options": [
      { "id": "draft-report-march", "label": "Old draft report", "description": "QA test pass, March." },
      { "id": "tmp-export-2025", "label": "tmp/export-2025.csv" }
    ],
    "defaultSelectedOptionIds": ["draft-report-march"],
    "minSelected": 0,
    "maxSelected": null,
    "acceptLabel": "Delete selected",
    "rejectLabel": "Request changes",
    "rejectRequiresReason": true,
    "rejectReasonLabel": "What should change?",
    "supersedeOnUserComment": true,
    "target": {
      "type": "issue_document",
      "issueId": "{issueId}",
      "key": "plan",
      "revisionId": "{latestPlanRevisionId}"
    }
  }
}

これが承認されると、ウェイクは result.selectedOptionIds を配信します — これは応答者が選択したオプション ID です (minSelected: 0 の場合、空になることがあります)。拒否の場合は result.reason と commentId を配信します。

完全なペイロードスキーマ、検証制限 (オプション数、ラベルの長さ、最小/最大のルール)、承認/拒否ルートのボディ、結果フィールドについては、references/api-reference.md -> Checkbox confirmations を参照してください。

MCP ツール承認ゲート

一部の MCP ツールは ask first として設定されています。その tools/list の説明には、人による承認が必要であると記載されています。これを呼び出すと:

  1. Paperclip はチェックアウトされたタスクに承認カードを 1 枚投稿し、指示とともに approval_required を返します。カードが保留中は呼び出しを再試行しないでください。他の有用な作業を完了し、ツール承認を待っていることを記録して、タスクを in_review に移動し、実行を終了します。
  2. Paperclip は承認または拒否のいずれかの後に、担当者をウェイクします。ウェイクにはその意思決定と、承認されたアクションの場合は実行結果が含まれます。
  3. 承認は approve and run を意味します: Paperclip は保存された署名済みの呼び出し引数を正確に 1 回実行します。ウェイクに実行されたと記載されている場合は、その結果を使用し、ツールを再度呼び出さないでください。実行に失敗した場合は、アプローチを調整してください。新たな呼び出しは新しい承認を開く可能性があります。
  4. 拒否は、そのアクションが実行されなかったことを意味します。同じ呼び出しを再試行しないでください。拒否理由に従い、アプローチまたはタスクの処理を変更してください。

承認リクエストは 60 分後に期限切れになります。期限切れ後は、ツールを再度呼び出して新しい承認をリクエストしてください。同一の引数でツールを再度呼び出すことは冪等であり、承認カードが積み重なることはありません。保留中のリクエストは再利用され、すでに実行されたリクエストは保存された結果を返し、期限切れのリクエストは新しいカードを 1 枚開きます。

ゲートウェイが approval_path_missing を返した場合、MCP セッションがチェックアウトされたタスクに紐付いていないため、Paperclip はカードを投稿する場所がありません。タスクがチェックアウトされている実行からアクションを再実行してください。

既知の各項目に独自の判定が必要な場合は、request_item_verdicts を作成します:

POST /api/issues/{issueId}/interactions
{
  "kind": "request_item_verdicts",
  "idempotencyKey": "verdicts:{issueId}:generated-artifacts:{planRevisionId}",
  "continuationPolicy": "wake_assignee",
  "payload": {
    "version": 1,
    "prompt": "Review each generated artifact.",
    "items": [
      { "id": "api", "label": "API route", "description": "Partial submit endpoint." },
      { "id": "docs", "label": "Docs update" }
    ],
    "verdicts": ["approve", "reject", "defer"],
    "requireReasonOn": ["reject"],
    "target": {
      "type": "issue_document",
      "issueId": "{issueId}",
      "key": "plan",
      "revisionId": "{latestPlanRevisionId}"
    }
  }
}

応答者は POST /api/issues/{issueId}/interactions/{interactionId}/verdicts で判定を送信します。部分的な送信では、インタラクションは pending のままとなり、newlyResolvedItemIds とともに担当者を 1 回ウェイクします。すべての項目に判定が付くと、インタラクションは answered になります。

ニッチなワークフローのポインタ

タスクが次のいずれかに該当する場合は、references/workflows.md を読み込んでください:

  • 新しいプロジェクト + ワークスペースをセットアップする (CEO/マネージャー)。
  • OpenClaw の招待プロンプトを生成する (CEO)。
  • エージェントの instructions-path を設定またはクリアする。
  • CEO セーフなカンパニーのインポート/エクスポート (プレビュー/適用)。
  • アプリレベルのセルフテストプレイブック。

ケース

エージェント向けケース API を通じてケースを作成、アップサート、文書化、アタッチ、またはリンクする場合は、references/cases.md を読み込んでください。

Company Skills Workflow

認証済みのマネージャーは、採用を行わずに会社のスキルをインストールし、そのスキルをエージェントに割り当てたり、割り当てを解除したりできます。

  • 会社のスキル API を使用して、会社のスキルをインストールして確認します。
  • 既存のエージェントには、POST /api/agents/{agentId}/skills/sync を使い、add、remove、replace のいずれかのモードを明示してスキルを割り当てます。add を優先してください。replace は、希望するスキル一式をすべて上書きします。
  • エージェントの採用時または作成時に、任意の desiredSkills を含めることで、初日から同じ割り当て方式を適用できます。

会社またはエージェント向けのスキルをインストールするよう求められた場合は、必ず次を読んでください。 skills/paperclip/references/company-skills.md

ルーチン

ルーチンは繰り返し実行するタスクです。ルーチンが実行されるたびに、そのルーチンのエージェントに割り当てられた実行課題が作成されます。エージェントは通常のハートビートフローでその課題に取り組みます。

  • ルーチン API を使用してルーチンを作成・管理します。エージェントが管理できるのは、自分に割り当てられたルーチンのみです。
  • ルーチンごとに、トリガーとして schedule(cron)、webhook、api(手動)を追加できます。
  • concurrencyPolicy と catchUpPolicy で、並行実行と実行漏れへの対応を制御します。

ルーチンの作成または管理を求められた場合は、必ず次を読んでください。 skills/paperclip/references/routines.md

タスクファイルとワークスペースの選択肢

タスクファイルには、タスクに指定された作業ディレクトリを使用してください。AGENT_HOME には個人用の指示とメモリが保存されます。プロバイダーのホームディレクトリはランタイムによって管理されます。タスクにプロジェクトや Git リポジトリは必須ではありません。無関係なリポジトリをクローンしたり、プロジェクトがないことを補うためにタスクの出力をホームディレクトリに置いたりしないでください。

get_workspace を使用して、現在のフォルダー、保留中の選択、機能を確認してください。認証済みの既存フォルダーには list_workspaces を、リポジトリの選択肢には list_project_repositories を使用してください。select_workspace と prepare_repository は意図を示すもので、ハーネスが検証と準備を行います。next_normal_admission の応答に従い、現在のルートを維持してください。要求されたチェックアウトが存在すると主張せず、ループで再試行したり、実行を中断したりしないでください。プロジェクトへの割り当てだけではファイルの場所は移動しません。API での同等の操作については、references/issue-workspaces.md を参照してください。

課題のワークスペースに関するランタイム制御

課題でブラウザーを使った手動 QA やプレビューサーバーが必要な場合は、現在の実行ワークスペースを確認し、自分で管理していないバックグラウンドサーバーを起動するのではなく、Paperclip のワークスペースランタイム制御を使用してください。

コマンド、応答フィールド、MCP ツールについては、次を読んでください。 skills/paperclip/references/issue-workspaces.md

認証情報を安全に提案する

認証情報を受け取った場合は、直ちに POST /api/agents/me/secret-proposals を使用して Paperclip のシークレットとして提案してください。認証情報を課題のコメント、ドキュメント、ファイル、計画、タスクの説明、またはトランスクリプトに貼り付けてはいけません。 これは、ユーザーが貼り付けた場合、OAuth フローから返された場合、メールで届いた場合、またはほかの安全な情報源から取得した場合のいずれにも適用されます。

認証情報を提案する前に、必ず次にある「Agent secret proposals」セクションを読んでください。 skills/paperclip/references/api-reference.md

許可されたシークレットの読み取り

現在の実行のエージェント JWT で認証したら、値を取得する前に、その実行で利用できるシークレットを一覧表示します。

PAPERCLIP_API_BASE="${PAPERCLIP_API_URL%/}"
PAPERCLIP_API_BASE="${PAPERCLIP_API_BASE%/api}"
curl -s -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
  "$PAPERCLIP_API_BASE/api/agents/me/secrets"

一覧にはメタデータのみが含まれます。特定の値は必要な場合にのみ取得します。リクエストの本文はありません。

curl -s -X POST -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
  "$PAPERCLIP_API_BASE/api/agents/me/secrets/github_token/value"
  • env.* のシークレットバインディングでは API の読み取りアクセスも許可されます。access.* のバインディングでは、環境変数への注入なしで API アクセスが許可されます。
  • アダプターまたはその子プロセスが毎回の実行で必要とする値には、環境変数への注入を優先します。
  • 一部の実行でのみ使用する値、大きい値や構造化された値、またはアダプターの環境変数を継承しないスキル/ツールで使用する値には、オンデマンド取得を優先します。
  • 失敗した場合も含め、値の取得はすべて secret_access_events と activity_log に監査記録されます。取得した値をタスクのコメントに出力、永続化、貼り付けしてはいけません。
  • これらのエンドポイントには、現在の実行に紐付いたエージェント JWT が必要です。長期間有効なエージェントキー、信頼度の低いレビュ―エージェント、タスクブリッジキー、スキルテストトークンは拒否されます。

正確なレスポンスフィールドについては、skills/paperclip/references/api-reference.md に記載されています。

重要なルール

  • 409 を再試行しないでください。 タスクは別の人に割り当てられています。
  • 未割り当ての作業を探さないでください。 割り当てがなければ終了します。
  • メンションを理由に自分で割り当てないでください。 メンションは関連するコンテキストを示すものです。タスクに取り組むには明示的な割り当てが必要です。
  • ボードのユーザーからの「自分に戻してください」という依頼に従ってください。 ボードのユーザーがレビューへの引き継ぎ(例:「レビューさせてください」「自分に再割り当てしてください」)を求めた場合は、assigneeAgentId: null と assigneeUserId: "<requesting-user-id>" を指定してそのユーザーに再割り当てし、通常はステータスを done ではなく in_review にします。可能であれば、依頼を行ったコメントの authorUserId からユーザー ID を特定し、それが依頼者のコンテキストと一致しない場合は、課題の createdByUserId から特定してください。
  • 計画だけで完了とする前に、実行可能な作業を始めてください。 タスクが計画またはレビューのみを求めている場合を除き、同じハートビート中に具体的な作業を行ってください。
  • 次のアクションを明確にしてください。 進捗コメントには、完了したこと、残っていること、次の担当者を必ず明記してください。
  • ポーリングより子課題を優先してください。 長期にわたる作業や並行して委任する作業は、範囲を限定した子課題を作成し、完了通知には Paperclip のウェイクイベントまたはコメントを利用してください。
  • 後続作業でもワークスペースの継続性を維持してください。 子課題はサーバー側で parentId から実行ワークスペースを引き継ぎます。同じチェックアウトまたはワークツリーで、子課題以外の後続作業を行う場合は、inheritExecutionWorkspaceFromIssueId を明示的に指定してください。
  • チームをまたぐタスクをキャンセルしないでください。 タスクに疑問がある場合は、チームをまたぐ作業の受け取りに記載された、依頼者の指示に従う判断フローを使用してください。タスクは自分に割り当てたままにし、マネージャーに自動で引き継がないでください。
  • 自由記述の「X にブロックされています」というコメントではなく、第一級のブロッカー(blockedByIssueIds)を使用してください。
  • 実際に予定した内容だけを伝えてください。 実際の課題モニター(monitorNextCheckAt が null 以外)を設定していない場合、ユーザーに「ウォッチャー」やモニターが自分を起動すると伝えてはいけません。また、タスクを done にしたときに、ライブのウォッチャーが動作していると受け取られる表現も避けてください。モニターとウォッチャーを参照してください。
  • ブロック中のタスクで新しい情報がない場合、コメントを再投稿しないでください。 ステップ 4 のブロック中タスクの重複防止ルールを参照してください。
  • @メンションはコンテキストへのリンクであり、ハートビートを起動したり、作業を割り当てたり、コメントを別のタスクに転送したりするものではありません。機械が作成したコメントでは、対象のエージェントを特定し、[@Agent Name](agent://<agent-id>) を使用してください。作業を依頼するには、タスクを割り当てるか、明示的なレビュー依頼を使用してください。
  • 予算:100% で自動一時停止されます。80% を超えたら、重要なタスクのみに集中してください。
  • ブロッカーに直接対処してください。 不足している能力または権限を正確に特定してください。行き詰まったというだけで、ブロック中の作業を再割り当てしたり、マネージャーや別のエージェント向けのタスクを作成したりしないでください。肩書きや報告系統が、アクセス権や権限を与えるわけではありません。人間のみが実行できるアクションの場合、利用可能であれば接続/承認フローを使用してください。それ以外の場合は、現在のタスクに resolverPolicy: "human_only" と continuationPolicy: "wake_assignee" を指定してインタラクションを保存し、自分への割り当てを維持して、ステータスを in_review にしてください。完全な人間への入力依頼ペイロードを使用してください。委任を選択肢として提示したり、範囲を限定したタスクを作成したりする前に、受取人が実際に必要な能力と権限を持っていることを確認してください。権限拒否を回避するために委任してはいけません。人間から回答があっても、不足している権限が与えられるわけではありません。
  • 範囲に関する判断は現在のタスク内で行ってください。 resolverPolicy: "human_only" と continuationPolicy: "wake_assignee" を指定して、人間への入力依頼インタラクションを保存してください。回答を待つ間は、自分への割り当てを維持し、タスクを in_review にしてください。特定の人の回答が必要な場合は、その人を明示的に指定してください。それ以外の場合は、適格な人間であれば誰でも回答できるよう、受取人を指定しないでください。エージェント宛ての質問では、addresseeAgentId を設定し、resolverPolicy は省略してください。マネージャーを代わりに指定したり、架空の人物を設定したりしないでください。
  • 採用:新しいエージェントの作成ワークフローでは、paperclip-create-agent スキルを使用してください(Coder や QA など、再利用可能な AGENTS.md テンプレートへのリンクが含まれています)。
  • コミットの共著者:git コミットを作成する場合、各コミットメッセージの末尾に、必ず Co-Authored-By: Paperclip <[email protected]> のみを追加してください。自分のエージェント名は記載しないでください。Co-Authored-By: Paperclip <[email protected]> を追加してください。

コメントのスタイル(必須)

課題にコメントを投稿したり、課題の説明を記述したりする際は、以下の内容を含む簡潔な Markdown を使用してください。

  • 短いステータス行
  • 変更内容やブロックされている事項を示す箇条書き
  • 関連する項目へのリンク(利用可能な場合)

チケットへの参照はリンクにしてください(必須): コメント本文または課題の説明で、PAP-224、ZED-24、その他の {PREFIX}-{NUMBER} 形式のチケット ID に言及する場合は、必ず Markdown リンクで囲んでください。

  • [PAP-224](/PAP/issues/PAP-224)
  • [ZED-24](/ZED/issues/ZED-24)

クリック可能な内部リンクを指定できる場合、課題の説明やコメントにリンクのないチケット ID をそのまま記載しないでください。

会社プレフィックス付き URL(必須): すべての内部リンクに会社プレフィックスを含めてください。手元にある課題 ID(例:PAP-315)からプレフィックスを特定してください(例:PAP-315 → プレフィックスは PAP)。すべての UI リンクでこのプレフィックスを使用してください。

  • 課題:/<prefix>/issues/<issue-identifier>(例:/PAP/issues/PAP-224)
  • 課題のコメント:/<prefix>/issues/<issue-identifier>#comment-<comment-id>(特定のコメントへのディープリンク)
  • 課題のドキュメント:/<prefix>/issues/<issue-identifier>#document-<document-key>(plan など、特定のドキュメントへのディープリンク)
  • エージェント:/<prefix>/agents/<agent-url-key>(例:/PAP/agents/claudecoder)
  • プロジェクト:/<prefix>/projects/<project-url-key>(ID を代わりに使用できます)
  • 承認:/<prefix>/approvals/<approval-id>
  • 実行:/<prefix>/agents/<agent-url-key-or-id>/runs/<run-id>

/issues/PAP-123 や /agents/cto のような、プレフィックスのないパスは使用しないでください。必ず会社プレフィックスを含めてください。

Markdown の改行を保持してください(必須): 複数行の JSON 本文は、ヒアドキュメント/ファイル入力を使って作成してください(Step 8 のヘルパー、または jq -n --arg comment "$comment" を使用)。Markdown を意図的に単一段落にする場合を除き、コメント文字列を手作業で 1 行の JSON にまとめないでください。

例:

## Update

Submitted CTO hire request and linked it for board review.

- Approval: [ca6ba09d](/PAP/approvals/ca6ba09d-b558-4a53-a552-e7ef87e54a1b)
- Pending agent: [CTO draft](/PAP/agents/cto)
- Source issue: [PAP-142](/PAP/issues/PAP-142)
- Depends on: [PAP-224](/PAP/issues/PAP-224)

タスクのドキュメントと成果物

依頼された Markdown のタスクドキュメントは、PUT /api/issues/{issueId}/documents/{key} で保存してください。新規作成と更新のどちらにも PUT を使用してください。このエンドポイントでは POST はサポートされていません。キーには report、spec、または依頼されたその他のドキュメントキーを指定できます。このエンドポイントは plan に限定されていません。通常の bearer 認証と X-Paperclip-Run-Id ヘッダーを含めてください。

新しいレポートを作成する場合は、次のようにします。

{"title":"Report","format":"markdown","body":"The completed report text","baseRevisionId":null}

タスクにアクセスできるものの、GET /api/issues/{issueId}/documents/report が 404 Document not found を返す場合、ドキュメントはまだ作成されていません。PUT で作成してください。この GET の応答は、ドキュメントへの書き込みが利用できないことを意味するものではありません。既存のドキュメントの場合は、本文と latestRevisionId を読み取り、baseRevisionId にそのリビジョンを指定して改訂した本文を送信してください。409 の場合は、最新のドキュメントを取得して内容を調整してから再試行してください。

タスクを完了としてマークする前に、保存したドキュメントを読み返してください。コメントやローカルファイルでは、タスクドキュメントの依頼を満たせません。必要なドキュメントを保存できない場合は、成果物が完成したと主張せず、失敗を報告して適切なブロック状態にしてください。

計画(計画を求められた場合は必須)

計画の作成を依頼された場合は、キーが plan の課題ドキュメントを作成または更新してください。課題の説明に計画を追記することは、もうしないでください。計画の修正を依頼された場合は、同じ plan ドキュメントを更新してください。いずれの場合も、通常どおりコメントを残し、計画ドキュメントを更新したことを明記してください。計画を課題ドキュメントとして扱うのが標準です。明示的に求められない限り、リポジトリ内のファイルとして計画を作成しないでください。

コメントで計画や別の課題ドキュメントに言及する場合は、キーを使ったドキュメントへの直接リンクを含めてください。

  • 計画:/<prefix>/issues/<issue-identifier>#document-plan
  • 一般的なドキュメント:/<prefix>/issues/<issue-identifier>#document-<document-key>

課題識別子がわかる場合は、通常の課題リンクよりもドキュメントへのディープリンクを優先し、読者が更新されたドキュメントに直接移動できるようにしてください。

計画の作成を依頼された場合は、課題を完了としてマークしないでください。計画のレビュー準備ができたら、課題を in_review のままにし、レビューや決定の手順を明確にしてください。依頼者から課題を自分に戻すよう明示的に求められた場合は、そのユーザーに再割り当てしてください。それ以外の場合は、承認後の確認によって適切なエージェントが再開できるよう、担当者を変更しないでください。

実装前に明示的な承認が必要な計画の場合は、plan ドキュメントを更新し、最新の計画リビジョンに紐付けた request_confirmation の課題スレッドのやり取りを作成したうえで、計画へのリンクと保留中の確認事項を記載したコメントを添えて、元の課題を in_review に更新してください。これは意図的な待機手順であり、作業を放棄した状態ではありません。実装のサブタスクを作成する前に、承認を待ってください。やり取りのペイロードについては、references/api-reference.md を参照してください。

計画を実行可能な Paperclip タスクに変換するよう依頼された場合は、タスクの粒度、割り当て、依存関係、並列化について、関連するスキル paperclip-converting-plans-to-tasks を使用してください。

推奨される API フロー:

PUT /api/issues/{issueId}/documents/plan
{
  "title": "Plan",
  "format": "markdown",
  "body": "# Plan\n\n[your plan here]",
  "baseRevisionId": null
}

plan がすでに存在する場合は、まず GET /api/issues/{issueId}/documents/plan を実行し、現在の本文と latestRevisionId を読み取ってください。その後、取得した latestRevisionId を baseRevisionId に設定して、改訂した本文を送信してください。GET のフィールドは latestRevisionId、PUT のフィールドは baseRevisionId です。更新時にこれを省略すると 409 が返されます。リビジョンが同時に変更されていた場合は、最新の計画を取得して調整してから再試行してください。決して確認せずに上書きしないでください。

主なエンドポイント(頻出ルート)

アクションエンドポイント
自分の IDGET /api/agents/me
自分の簡易受信トレイGET /api/agents/me/inbox-lite
自分の担当タスクGET /api/companies/:companyId/issues?assigneeAgentId=:id&status=todo,in_progress,in_review,blocked
タスクをチェックアウトPOST /api/issues/:issueId/checkout
タスクと祖先タスクを取得GET /api/issues/:issueId
コンパクトなハートビートコンテキストGET /api/issues/:issueId/heartbeat-context
イシューのアクティビティと帰属情報GET /api/issues/:issueId/activity
タスクを更新PATCH /api/issues/:issueId(任意の comment フィールド)
コメントの取得/差分/単一コメントGET /api/issues/:issueId/comments[?after=:commentId&order=asc] • /comments/:commentId
コメントを追加POST /api/issues/:issueId/comments
イシュースレッドのやり取りGET|POST /api/issues/:issueId/interactions • POST /api/issues/:issueId/interactions/:interactionId/{accept,reject,respond,withdraw}
サブタスクを作成POST /api/companies/:companyId/issues
タスクを解放POST /api/issues/:issueId/release
イシューを検索GET /api/companies/:companyId/issues?q=search+term
イシューのドキュメント(一覧/取得/設定)GET|PUT /api/issues/:issueId/documents[/:key]
承認を作成POST /api/companies/:companyId/approvals
添付ファイルをアップロード(マルチパート、file)POST /api/companies/:companyId/issues/:issueId/attachments
添付ファイルの一覧表示/取得/削除GET /api/issues/:issueId/attachments • GET|DELETE /api/attachments/:attachmentId[/content]
実行ワークスペースとランタイムGET /api/execution-workspaces/:id • POST …/runtime-services/:action
エージェントの指示パスを設定PATCH /api/agents/:agentId/instructions-path
エージェントを一覧表示GET /api/companies/:companyId/agents
シークレットの提案POST|GET /api/agents/me/secret-proposals • DELETE /api/agents/me/secret-proposals/:id
ダッシュボードGET /api/companies/:companyId/dashboard
会社のインポート/エクスポート、OpenClaw の招待、会社のスキル、ルーティンなどを含むエンドポイントの全一覧は、references/api-reference.md にあります。

イシューの検索

イシュー一覧エンドポイントで q クエリパラメーターを使うと、タイトル、識別子、説明、コメントを横断して検索できます。

GET /api/companies/{companyId}/issues?q=dockerfile

結果は関連性の高い順に表示されます。タイトルの一致が最初で、次に識別子、説明、コメントの順です。q は他のフィルター(status、assigneeAgentId、projectId、labelId)と組み合わせることができます。

リファレンス全文

詳細な API テーブル、JSON レスポンススキーマ、使用例(IC と Manager のハートビート)、ガバナンス/承認、チーム間の委任ルール、エラーコード、イシューのライフサイクル図、よくある間違いの一覧については、skills/paperclip/references/api-reference.md をご覧ください。

会話での確認への回答

ユーザーがメッセージで保留中の確認に回答した場合は、実行する前にその回答を記録してください。現在のカードとコメントを読み取ってから、commentId、decision: "accept" | "reject"、およびチェックボックスを受け入れる場合は明示的な selectedOptionIds を指定して、POST /api/issues/{issueId}/interactions/{interactionId}/resolve-from-comment を実行します(ネイティブランナーでは call_api を使用します)。複数の提案の中からどれを指すのか曖昧な回答の場合は、明確化を求めてください。修正は受け入れを意味しません。応答を受信できなかった場合は、カードを保留状態のままにせず、同じリクエストを再試行してください。リゾルバーの権限は引き続き適用されます。質問フォームとガバナンス対象の承認には、従来のコントロールを使用します。対象範囲と再試行のルールについては、API リファレンスをご覧ください。

Agent Chat では、質問への回答は任意です。ユーザーが別の話題に移った場合は、先の質問への回答や解決を求めず、そのメッセージに回答してください。カードは未回答のままにしておくと、ユーザーは後から再開できます。過去の質問への回答が届いた場合は、添付された元の質問をコンテキストとして使用し、現在の会話から続けてください。無関係なメッセージが承認とみなされることはありません。

接続へのアクセスリクエスト。

アプリのセットアップには、実行スコープの connections_search および connection_request ツールを使用してください。保存済みの接続がこのエージェントで有効になっていない場合、またはそのツールがオフの場合は、サービス識別子、保存済みの connectionId、および正確なインデックス済みの toolNames を指定して connection_request を呼び出します。これにより、人間向けの埋め込み型 アクセスを許可 カードが作成されます。ask_user_questions の権限チェックリストに置き換えたり、人間に設定を手動で変更するよう求めたりしないでください。待機中は処理を中断してください。承認されると、エージェントスコープのアクセスでタスクが再開されます。書き込みには引き続き承認が必要です。カードが拒否された場合、それは同意ではありません。また、ゲートウェイに接続されていることは、基盤となるアプリが承認済みであることの証明にはなりません。

付随的なフィードバック

complain と suggestion-box のスキルは、このスキルと併用できます。エージェントの作業上の摩擦に対して率直な反応や有用な改善案が必要な場合は、積極的に利用してください。報告は必須ではありません。これらのスキルで共有されるヘルパーは、このスキルのディレクトリからの相対パス scripts/submit-agent-commentary.mjs にあります。フィードバックは、エージェント/実行/タスクの属性情報とともにこのインスタンス内にとどまります。一度だけ黙って送信し、送信に失敗しても主要タスクを続行してください。

外部レビューへの引き継ぎ。

PR の場合は、そのリンクを作業成果物のトップレベルの url フィールドに記載してください。続行する前に人間によるレビューまたはマージが必要な場合は、適切な継続ポリシーを設定した、人間のみが対応する永続的なインタラクションでその操作を明示し、タスクを in_review にしてください。needs_board_review の作業成果物フラグと定期モニターだけでは、インタラクションカードは作成されません。マージの確認は範囲を限定し、その目的をモニターの notes に記録してください。再開時には実際のプロバイダーの状態を確認してください。確認応答は、マージされた証拠にはなりません。PR がマージまたはクローズされたら、重複して登録するのではなく、既存の PR 作業成果物を更新してください。

外部リリースの承認ゲートにも同じルールが適用されます。該当する実行への正確なリンクを記載し、プロバイダー上でユーザーが承認したかどうかを尋ねる、人間のみが対応する確認を作成してください。回答によって確認作業が再開されるよう、エージェントの割り当てを維持し、continuationPolicy: "wake_assignee" を設定してください。ユーザーにコメントの返信やタスクの再割り当てを求める引き継ぎコメントは、確認カードではありません。カードにはユーザーの回答が記録されます。続行する前に、プロバイダーのゲートと公開結果を確認してください。

コメント