Shitbox Triage
Clean Joel's personal Front inbox without becoming a reckless email cannon. This is the light-process counterpart to aih-triage: Brain first, metadata first, executive summary always, mutate only boring trash or explicitly approved actions.
Session status
Set the Pi session name to 📥 Front Shitbox Sweep for active sweeps. Keep it stable. Use status/progress rows when available instead of renaming for every phase.
Useful phases:
Brain Map — read/export inbox interest rules
Queue Scan — pull metadata snapshot
Digest Shape — group by signal/digest/trash/risk/conditional
Safe Archive — archive obvious trash only
Context Fetch — fetch bodies for risk/signal/ambiguous groups
Operator Report — executive summary with grouped links
Rule Capture — update Brain interest map when Joel corrects the sweep
Core taste
Joel wants:
- Executive summary: counts, what changed, what matters next.
- Context: profile/window/source, caveats, rate limits, token/path receipts.
- Reasoning: why each group was archived, kept, fetched, or escalated.
- Grouped items: related threads batched by type, not flat ticket dumps.
- Front links:
https://app.frontapp.com/open/<conversation-or-message-id> for every actionable item and archive group.
Do not just say "archived 20." That is receipt-only sludge. Give the shape above.
Brain map
Canonical interest map:
/Users/joel/.brain/areas/joel-inbox-interest-map.svx
Runtime export:
shitrat inbox rules export
# writes ~/.shitrat/inbox/context/interest-map.json
The Brain map defines:
signal — show now or fetch body
digest — summarize, don't show individually
temptation — interesting/desirable but bad for attention/spending
trash — archive or unsubscribe
conditional — depends on subject/body/seasonal context
risk — never archive from metadata only
unknown — ask or fetch
Use Brain as judgment context, not a dumb keyword broom. If Joel corrects a category, update the Brain map or add a note under /Users/joel/.brain/resources/inbox-triage-preferences.svx.
Default commands
secrets lease shitrat_front_private >/dev/null
shitrat inbox rules export
shitrat inbox snapshot --profile joel-combined --metadata-only --refresh --since-hours 24 --limit-per-lane 40 --max-pages-per-lane 3 --max-requests 100
shitrat inbox pull --profile joel-combined --metadata-only --refresh --format ndjson --headless --out /tmp/shitbox.ndjson
shitrat inbox janitor prompt --mode daily --events /tmp/shitbox.ndjson
If the secret is missing, add it to agent-secrets. Never print the token.
Sweep workflow
Read Brain first
/Users/joel/.brain/areas/joel-inbox-interest-map.svx
/Users/joel/.brain/resources/inbox-triage-preferences.svx when present
- active project notes if a thread maps to current work
Export rules
- Run
shitrat inbox rules export so the CLI annotates metadata with current Brain rules.
Pull metadata
- Use
shitrat inbox pull ... --metadata-only first.
- Do not fetch full bodies for everything.
- Keep request budgets and Front rate limits in the report.
Group before acting
- Group by bucket and context:
- money/account/security/legal/travel/family/work: keep/fetch
- human asks: keep/fetch
- active project/person: keep/fetch or digest with links
- digests/newsletters: summarize then archive when low-risk
- retail/temptation: archive and maybe summarize good sales
- deterministic trash: archive
Archive only boring safe stuff
- Safe: promos, duplicate notification copies, routine app digests, read-later newsletters, delivery noise, low-risk social metrics.
- Not safe from metadata only: money, security, account access, legal, calendar logistics, real humans, current-project asks, family/school/health.
Fetch bodies when needed
- Fetch only
signal, risk, and ambiguous conditional threads.
- Use body reads to extract dates, account, app, amount, due date, required action, or why it is safe to archive.
Report in Joel's preferred shape
- Executive summary
- Context
- Reasoning
- Grouped archive receipts
- Still-open links grouped by why they remain open
- Proposed rule/Brain updates
Capture learnings
- If Joel says "yes archive those," "keep those," "I like summaries like X," or corrects a bucket, update Brain first.
- Durable process changes belong in this skill.
Report template
## Executive summary
- Archived: <n>
- Kept/fetch-needed: <n>
- Top things that matter: <3 bullets>
## Context
- Profile/window: joel-combined, <hours>
- Source: Front via shitrat inbox
- Brain maps used: <paths>
- Rate limit/errors: <receipt>
## Reasoning
- <group>: why archived/kept/fetched
## Grouped archive receipts
### <group>
- <subject> — <why> — <Front URL>
## Still open / needs review
### Money/account/security
- <subject> — <why kept> — <Front URL>
### Human/work/calendar
- <subject> — <why kept> — <Front URL>
## Rule candidates
- Add/update `<rule-id>` because <evidence/correction>
Hard rules
- Front is queue truth.
- Brain is preference/context truth.
- Metadata first; body fetch only where it changes a decision.
- No sends, replies, assigns, tags, unsubscribes, or ambiguous archives without explicit approval.
- Do not archive money/security/account/legal/calendar/human-work threads from metadata only.
- Always include Front links in the operator report.
- Preserve secrets. Never echo
shitrat_front_private.
- If the CLI returns stale inbox IDs or 404s, fix the profile/config or use the current token path; don't handwave.
Installing / related
- CLI repo:
/Users/joel/Code/joelhooks/shitrat-cli
- Interest map exporter:
packages/cli/src/inbox/interest-map.ts
- Front snapshot/pull:
packages/cli/src/inbox/front-snapshot.ts
- Janitor prompt surface:
packages/cli/src/commands/inbox.ts
1---2name: shitbox-triage3description: Front inbox janitor for Joel's personal shitbox: Brain-mapped executive digests, contextual grouping, safe archive sweeps, and Front thread links. Use when asked to clean the shitbox, summarize inbox, run a digest, sweep personal Front, or tune inbox interest rules.4---56# Shitbox Triage78Clean Joel's personal Front inbox without becoming a reckless email cannon. This is the light-process counterpart to `aih-triage`: Brain first, metadata first, executive summary always, mutate only boring trash or explicitly approved actions.910## Session status1112Set the Pi session name to `📥 Front Shitbox Sweep` for active sweeps. Keep it stable. Use status/progress rows when available instead of renaming for every phase.1314Useful phases:1516- `Brain Map` — read/export inbox interest rules17- `Queue Scan` — pull metadata snapshot18- `Digest Shape` — group by signal/digest/trash/risk/conditional19- `Safe Archive` — archive obvious trash only20- `Context Fetch` — fetch bodies for risk/signal/ambiguous groups21- `Operator Report` — executive summary with grouped links22- `Rule Capture` — update Brain interest map when Joel corrects the sweep2324## Core taste2526Joel wants:27281. Executive summary: counts, what changed, what matters next.292. Context: profile/window/source, caveats, rate limits, token/path receipts.303. Reasoning: why each group was archived, kept, fetched, or escalated.314. Grouped items: related threads batched by type, not flat ticket dumps.325. Front links: `https://app.frontapp.com/open/<conversation-or-message-id>` for every actionable item and archive group.3334Do not just say "archived 20." That is receipt-only sludge. Give the shape above.3536## Brain map3738Canonical interest map:3940```bash41/Users/joel/.brain/areas/joel-inbox-interest-map.svx42```4344Runtime export:4546```bash47shitrat inbox rules export48# writes ~/.shitrat/inbox/context/interest-map.json49```5051The Brain map defines:5253- `signal` — show now or fetch body54- `digest` — summarize, don't show individually55- `temptation` — interesting/desirable but bad for attention/spending56- `trash` — archive or unsubscribe57- `conditional` — depends on subject/body/seasonal context58- `risk` — never archive from metadata only59- `unknown` — ask or fetch6061Use Brain as judgment context, not a dumb keyword broom. If Joel corrects a category, update the Brain map or add a note under `/Users/joel/.brain/resources/inbox-triage-preferences.svx`.6263## Default commands6465```bash66secrets lease shitrat_front_private >/dev/null67shitrat inbox rules export68shitrat inbox snapshot --profile joel-combined --metadata-only --refresh --since-hours 24 --limit-per-lane 40 --max-pages-per-lane 3 --max-requests 10069shitrat inbox pull --profile joel-combined --metadata-only --refresh --format ndjson --headless --out /tmp/shitbox.ndjson70shitrat inbox janitor prompt --mode daily --events /tmp/shitbox.ndjson71```7273If the secret is missing, add it to agent-secrets. Never print the token.7475## Sweep workflow76771. **Read Brain first**78 - `/Users/joel/.brain/areas/joel-inbox-interest-map.svx`79 - `/Users/joel/.brain/resources/inbox-triage-preferences.svx` when present80 - active project notes if a thread maps to current work81822. **Export rules**83 - Run `shitrat inbox rules export` so the CLI annotates metadata with current Brain rules.84853. **Pull metadata**86 - Use `shitrat inbox pull ... --metadata-only` first.87 - Do not fetch full bodies for everything.88 - Keep request budgets and Front rate limits in the report.89904. **Group before acting**91 - Group by bucket and context:92 - money/account/security/legal/travel/family/work: keep/fetch93 - human asks: keep/fetch94 - active project/person: keep/fetch or digest with links95 - digests/newsletters: summarize then archive when low-risk96 - retail/temptation: archive and maybe summarize good sales97 - deterministic trash: archive98995. **Archive only boring safe stuff**100 - Safe: promos, duplicate notification copies, routine app digests, read-later newsletters, delivery noise, low-risk social metrics.101 - Not safe from metadata only: money, security, account access, legal, calendar logistics, real humans, current-project asks, family/school/health.1021036. **Fetch bodies when needed**104 - Fetch only `signal`, `risk`, and ambiguous `conditional` threads.105 - Use body reads to extract dates, account, app, amount, due date, required action, or why it is safe to archive.1061077. **Report in Joel's preferred shape**108 - Executive summary109 - Context110 - Reasoning111 - Grouped archive receipts112 - Still-open links grouped by why they remain open113 - Proposed rule/Brain updates1141158. **Capture learnings**116 - If Joel says "yes archive those," "keep those," "I like summaries like X," or corrects a bucket, update Brain first.117 - Durable process changes belong in this skill.118119## Report template120121```text122## Executive summary123- Archived: <n>124- Kept/fetch-needed: <n>125- Top things that matter: <3 bullets>126127## Context128- Profile/window: joel-combined, <hours>129- Source: Front via shitrat inbox130- Brain maps used: <paths>131- Rate limit/errors: <receipt>132133## Reasoning134- <group>: why archived/kept/fetched135136## Grouped archive receipts137### <group>138- <subject> — <why> — <Front URL>139140## Still open / needs review141### Money/account/security142- <subject> — <why kept> — <Front URL>143144### Human/work/calendar145- <subject> — <why kept> — <Front URL>146147## Rule candidates148- Add/update `<rule-id>` because <evidence/correction>149```150151## Hard rules152153- Front is queue truth.154- Brain is preference/context truth.155- Metadata first; body fetch only where it changes a decision.156- No sends, replies, assigns, tags, unsubscribes, or ambiguous archives without explicit approval.157- Do not archive money/security/account/legal/calendar/human-work threads from metadata only.158- Always include Front links in the operator report.159- Preserve secrets. Never echo `shitrat_front_private`.160- If the CLI returns stale inbox IDs or 404s, fix the profile/config or use the current token path; don't handwave.161162## Installing / related163164- CLI repo: `/Users/joel/Code/joelhooks/shitrat-cli`165- Interest map exporter: `packages/cli/src/inbox/interest-map.ts`166- Front snapshot/pull: `packages/cli/src/inbox/front-snapshot.ts`167- Janitor prompt surface: `packages/cli/src/commands/inbox.ts`