garden-inbox について
garden-inbox は、受信箱の項目を分類し、確認操作で明示的に選択された項目だけをアーカイブする Paperclip スキルです。スキャン、確認、適用の順に進め、取り消し可能な受信箱の表示状態と課題自体の変更を区別します。
主な機能
- 01受信箱の項目を4つの区分に分類
- 02受信箱とワークスペースのメタデータをスキャン
- 03チェックボックス付き確認カードを提示
- 04承認された候補 ID のみをアーカイブ
- 05ドライランと再実行可能な確認に対応
活用シーン
- 01完了済みまたは停滞した作業を整理対象として確認
- 02ユーザーがアーカイブ対象を選択
- 03却下済みまたは未確認の項目のアーカイブを防止
- 04API 書き込みなしでアーカイブ選択をテスト
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ paperclipai/ paperclip --skill garden-inboxインストール後、Claude Code で/garden-inboxを入力して読み込まれたか確認します。
同梱ファイルscripts/garden-inbox.mjsscripts/garden-inbox.test.mjs
詳細
Garden Inbox
すべての段階で同梱スクリプトを使用してください。ワークフローの順序を厳守してください:scan → confirm → apply。
安全性に関する契約
scanは読み取り専用として扱ってください。読み取りが許可されるのは、受信トレイ、ワークスペース、クローズ準備状況、ローカルの Git メタデータのみです。confirmは確認カードへの書き込みのみとして扱ってください。受信トレイの項目をアーカイブしたり、イシューのフィールド、ブランチ、ワークスペースを変更したりしてはいけません。- 解決済みの
request_checkbox_confirmation操作の後に限り、applyを実行してください。アーカイブするのは、承認されたオプション ID のうち、元のcandidates.jsonにも記載されているものだけです。 - 受信トレイのアーカイブ状態はユーザーごとの表示状態であることを忘れないでください。この状態は元に戻すことができ、元のイシューは変更されません。
- 受信トレイのアーカイブの代わりに、イシューのステータス変更、ブランチの削除、ワークスペースのクリーンアップ、イシューの削除を行ってはいけません。
入力
PAPERCLIP_API_URL と PAPERCLIP_API_KEY が必要です。スクリプトは URL 末尾の /api を削除します。実行 JWT ペイロードの responsible_user_id から対象ユーザーを特定します。--user-id <uuid> は、対象を明示的に指定する場合にのみ使用してください。
利用可能な場合は、実行専用の出力ディレクトリを使用してください:
RUN_DIR="${PAPERCLIP_RUN_SCRATCH_DIR:-${PAPERCLIP_TASK_SCRATCH_DIR:-.}}/garden-inbox"
mkdir -p "$RUN_DIR"
1. Scan
node .agents/skills/garden-inbox/scripts/garden-inbox.mjs scan \
--output-dir "$RUN_DIR" \
--stale-days 60
garden-inbox-report.md と candidates.json を確認してください。レポートでは、受信トレイのすべての行が次のいずれか1つのバケットに分類されます:
スキャンでは、対象に含まれる各イシューステータスについて Mine を個別に読み込み、エンドポイントの全体での 500 行の上限によって古い行が気付かれないまま除外されないようにします。いずれか1つのステータスに対するクエリがこの上限に達した場合、出力ファイルの両方にカバレッジが切り詰められている可能性があることが示されます。このスキャンを完全なものとして扱わないでください。
- A:マージ済み/アーカイブ済みのワークスペースで、リンクされたすべての作業が完了しています。デフォルトで選択されます。
- B:作業が完了しているか、ワークスペースが消失しており、しきい値を超えてアイドル状態です。デフォルトで選択されます。
- C:ベースより先にコミットがある古い作業です。デフォルトでは選択されません。
- D:保持します。アーカイブ対象にはなりません。
バケット D の項目を手動で候補ファイルに追加しないでください。
2. Confirm
操作元のイシューにチェックボックス操作を投稿します:
node .agents/skills/garden-inbox/scripts/garden-inbox.mjs confirm \
--issue-id "$PAPERCLIP_TASK_ID" \
--candidates "$RUN_DIR/candidates.json"
スキャンに候補が 200 件を超えて含まれる場合、スクリプトはカードを順番に投稿します。同じスキャンファイルを指定して confirm を再実行しても、結果は変わりません。周囲の Paperclip ハートビートワークフローで求められる待機状態のまま、操作元のイシューを維持してください。
以前の実行でユーザーが候補を却下している場合は、--unselect <issueId> を指定してください(複数回指定できます)。これにより、対象は未選択の状態で開始し、説明にも以前に却下されたことが記載されます。以前に却下された項目を、デフォルトで選択済みの状態で再提示してはいけません。
開発やペイロードの確認では、POST を抑止します:
node .agents/skills/garden-inbox/scripts/garden-inbox.mjs confirm \
--issue-id "$PAPERCLIP_TASK_ID" \
--candidates "$RUN_DIR/candidates.json" \
--dry-run
3. 承認された選択項目を適用する
操作解決後のウェイクを受け取ったら、ウェイクペイロードから解決済みの操作 ID を取得し、次を実行してください:
node .agents/skills/garden-inbox/scripts/garden-inbox.mjs apply \
--issue-id "$PAPERCLIP_TASK_ID" \
--interaction-id "$INTERACTION_ID" \
--candidates "$RUN_DIR/candidates.json"
却下された場合、有効期限が切れた場合、または選択項目なしで承認された場合、スクリプトは何もアーカイブしません。apply は、明示的に指定した --user-id の上書きを含め、スキャンファイルの対象ユーザーをそのまま使用します。サマリーには、アーカイブされた各行について、API の取り消しパスと対象ユーザーの本文が含まれます。
保存済みの操作レスポンスを指定すると、API への書き込みなしで apply をテストできます:
node .agents/skills/garden-inbox/scripts/garden-inbox.mjs apply \
--issue-id "$PAPERCLIP_TASK_ID" \
--interaction-file resolved-interaction.json \
--candidates "$RUN_DIR/candidates.json" \
--dry-run
同梱ロジックを検証する
分類または選択の安全性を変更した後は、依存関係のない Node テストを実行してください:
node --test .agents/skills/garden-inbox/scripts/garden-inbox.test.mjs