Skip to content

Interactive review (Copilot or Claude Code)

In the Copilot app, keep this folder configured as a Local, folder-backed project. It has no Git checkout requirement. Claude Code needs no project setup: run claude in this folder and the same skills load from .claude/skills/. The prompts below work unchanged in both. Model selection in the app controls interactive assistance; it does not override classifier.json for the external runner.

Two skills ship with the project, as identical copies in .github/skills/ (Copilot) and .claude/skills/ (Claude Code); a test keeps them in sync:

Skill Use it for
mail-setup First-run, read-only discovery of recurring senders and approved rule updates (guide)
mail-triage Interactive review of pending mail, manual classification and task correction

Open the project and ask:

Use the mail-triage skill. Review the pending messages and summary. Work in dry run mode and ask before applying mailbox changes. Do not run another classifier unless the pending cases need it.

The skill supports manual classification and task/deadline correction. A manually written decisions file must copy the current pending.json batch ID:

{
  "batch_id": "<current pending batch_id>",
  "decisions": {
    "<message id>": "FYI",
    "<another message id>": {
      "tag": "Action",
      "task": {"title": "Approve the proposal", "due": "2026-10-08"}
    }
  }
}
python3 triage.py decide              # validates and previews manual decisions
python3 triage.py apply-plan          # previews the combined dry-run operation plan (make review)
python3 triage.py apply-plan --apply  # replay exactly the approved plan

A fresh run/pending creates a new batch ID. Decisions older than 24 hours, foreign IDs, changed rules, unknown tags, invalid dates, prohibited tasks or action overrides are rejected. Plain pre-migration decisions files must be regenerated, not replayed. A subset is allowed for cases you can resolve.

apply-plan remains a separate human-approved replay path: it does not call a model or repeat searches; it rejects plans older than 24h by default. Use it promptly because mailbox state may have changed since the preview. --exclude rows.csv excludes listed message IDs as in the original workflow.

Running triage from the app on a timer

Prefer the external schedule. If you must use an app Automation, see the app-only alternative and its cost caveat.