4.3Agents · Review
Turn raw counts into a decision packet.
Review is where a human enters the loop. Show what is ready for approval, what needs a closer look, what is blocked, and the safety line. This is the Review calmly move: read-only and dry-run surfaces only, turned into a decision packet before anything mutates.
Daily review workflow
- Start with health and registry-level context:
status --all --agent, then read raw pressure points fromreview --all --agentandtrash list --all --json. - For stale registered ledgers, run
ledgers prune --dry-run --registry <registry-path>to review removing missing registrations; duplicate paths remain manualregistry-problemblockers. - For missing-path records inside valid ledgers, run
validate --all --jsonand thenreconcile --dry-run --all --json --registry <registry-path>to produce reviewed-safe plans. - For one inspected record that needs a keep, snooze, trash-resolve, or resolve-only decision, run
dispose --dry-runto produce one reviewed plan. - Run explicit-ledger purge dry-runs only when old trash needs review.
- Classify each candidate:
trash-safe,needs-human-review,resolve-candidate, orregistry-problem. - Present an exact approval target only after review packet verification: exact ledger path and reviewed plan id or ids.
Prefer the built-in --agent packet when an acting agent
needs the compact decision surface. Use full --json
output when you need every ledger field for audit, debugging, or a
custom renderer.
Inspect a single record
When a review flags one record — most often a stale
cleanup=review backup that ledgers prune and
review --all surface — drill into it with
get <id> --inspect instead of running get,
ls, and du by hand. It is read-only: it never
moves files or mutates the ledger.
# review one record as a decision card
artshelf get <id> --inspect --ledger <ledger-path>
# compact, deterministic packet for an acting agent
artshelf get <id> --inspect --agent --ledger <ledger-path>
Each card reports existence, size, age, retention/due state, cleanup
mode, and reason, then ends with a recommendation bucket and the exact
next-safe action. It does not read or preview arbitrary file contents:
keep, snooze, trash-safe,
resolve-only, or blocked. These map onto the
daily-review classifications — a missing-path record reads as
resolve-only and points at a reviewed
dispose plan, while a due disposable record reads as
trash-safe and points at a reviewed dispose
plan.
✓ <id> [backup] — keep
path: <backup-path>
status: active · cleanup: review · owner: agent · labels: registry-prune
existence: present (directory, 49 B) · age: 14d · retention: manual-review · due: manual-review
reason: rollback backup before registry prune
next: Held for manual review — run `artshelf dispose --id <id> --action keep --dry-run --reason '<why>' --ledger <ledger-path>` to keep it quiet through a reviewed decision, or choose resolve-only/snooze deliberately.
ledger: <ledger-path>
Review plan report schema
For richer host cards, attachments, or audit packets, construct an ArtshelfReviewReport JSON packet first, then render a compact decision card.
Use schemas/artshelf-review-report.schema.json
and examples/artshelf-review-report.json.
The portable skill also ships scripts/render-review-report.mjs;
keep decisionSummary in the audit packet while
decisionGroups drive its visible counts and sections.
Emojis are encouraged only in host-specific wrappers, not the renderer.
Artshelf daily review
Status: <ok|attention needed>; registry <ok|attention>
Ready for approval: <n>
Needs review first: <n>
Blocked: <n>
Recommended action
<one short sentence>.
Ready for approval
1. <label>
Why: <reason>
Action: <next step>
approve artshelf cleanup ledger <ledger-path> plan <plan-id>
Needs review first
1. <label>
Why: <reason>
Suggested next step: <next step>
Blocked
<none, or blocker and repair step>
Safety
Dry-run only. No execute, resolve, or delete ran.
Approval wording
Keep the full JSON as the audit packet. Do not paste the whole packet into chat unless the user asks for it. Always include the exact approval target in the message body as a fallback.
approve artshelf cleanup ledger <ledger-path> plan <plan-id>
approve artshelf dispose ledger <ledger-path> plan <dispose-plan-id>
approve artshelf trash purge ledger <ledger-path> plan <purge-plan-id>
approve artshelf resolve missing ledger <ledger-path> ids <id...>
approve artshelf reconcile ledger <ledger-path> plan <plan-id>
approve artshelf ledgers prune registry <registry-path> plan <plan-id>
Never execute from a read-only preview id. Never generate a fresh plan and
execute it in the same step. After registry-prune approval, verify with
artshelf ledgers list --json; after any approved ledger action, verify quiet with
artshelf review --all --json.