# Garden Inbox

Archives stale inbox issues only after the user confirms each selection.

- Repository: https://github.com/paperclipai/paperclip (109885 stars)
- Category: Business
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add paperclipai/paperclip --skill garden-inbox -g -a claude-code -y`
Codex: `npx skills add paperclipai/paperclip --skill garden-inbox -g -a codex -y`
Cursor: `npx skills add paperclipai/paperclip --skill garden-inbox -g -a cursor -y`
Gemini CLI: `npx skills add paperclipai/paperclip --skill garden-inbox -g -a gemini-cli -y`

## Description

Scan a Paperclip user's Mine inbox, classify reversible archive candidates, request checkbox confirmation, and archive only accepted selections. Use when asked to garden, clean up, prune, or tidy a Paperclip inbox without changing issues, branches, or workspaces.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Garden Inbox

Use the bundled script for every stage. Keep the workflow strictly ordered: `scan` → `confirm` → `apply`.

## Safety contract

- Treat `scan` as read-only. It may read inbox, workspace, close-readiness, and local Git metadata only.
- Treat `confirm` as a confirmation-card write only. It must not archive inbox entries or mutate issue fields, branches, or workspaces.
- Run `apply` only after a resolved `request_checkbox_confirmation` interaction. It archives only accepted option IDs that also occur in the originating `candidates.json`.
- Remember that inbox archive state is per-user presentation state. It is reversible and does not change the underlying issue.
- Never substitute issue status changes, branch deletion, workspace cleanup, or issue deletion for inbox archiving.

## Inputs

Require `PAPERCLIP_API_URL` and `PAPERCLIP_API_KEY`. The script strips a trailing `/api` from the URL. It resolves the target user from the run JWT payload's `responsible_user_id`; use `--user-id <uuid>` only for an explicit target override.

Use a run-owned output directory when available:

```bash
RUN_DIR="${PAPERCLIP_RUN_SCRATCH_DIR:-${PAPERCLIP_TASK_SCRATCH_DIR:-.}}/garden-inbox"
mkdir -p "$RUN_DIR"
```

## 1. Scan

```bash
node .agents/skills/garden-inbox/scripts/garden-inbox.mjs scan \
  --output-dir "$RUN_DIR" \
  --stale-days 60
```

Inspect `garden-inbox-report.md` and `candidates.json`. The report groups every inbox row into exactly one bucket:

The scan reads Mine separately for each included issue status so the endpoint's global 500-row cap does not silently omit older rows. If any single-status query reaches that cap, both outputs mark coverage as possibly truncated; do not treat that scan as complete.

The rest: https://github.com/paperclipai/paperclip/blob/HEAD/.agents/skills/garden-inbox/SKILL.md
