archived/skills/process-bundle/SKILL.md
Process annotated briefing bundle — execute decisions, stage email drafts, create tasks from annotations. Never auto-sends email.
npx skillsauth add nicsuzor/academicops process-bundleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Process a briefing bundle that Nic has annotated. Scan for <!-- @nic: --> annotations, execute the corresponding action for each, and append a processing receipt.
This skill executes decisions. It does NOT generate bundles.
needs_clarification and skip/process-bundle # Process today's bundle
/process-bundle DATE # Process a specific date's bundle (YYYYMMDD)
# Today's bundle by default
bundle_path = f"$ACA_DATA/daily/{date}-bundle.md"
If the bundle doesn't exist, HALT: "No bundle found for {date}. Run /bundle first."
Find all <!-- @nic: --> annotations that do NOT have a matching <!-- @claude --> response immediately after them.
Grep(pattern="<!--\\s*@nic:", path=bundle_path, output_mode="content", -C=2)
Filter out annotations that already have a <!-- @claude YYYY-MM-DD: --> response on the next line.
For each unprocessed annotation, determine the action type and execute:
| Annotation | Action |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| <!-- @nic: approved --> | Execute the recommended action from the coversheet. Update task status in PKB. |
| <!-- @nic: send --> | Stage the draft email in Outlook using messages_reply or messages_create_draft. Use the In-Reply-To entry_id for threading. |
| <!-- @nic: send as edited --> | Read the (edited) draft text from the bundle. Stage in Outlook with the edited content. |
| <!-- @nic: decline --> | Execute the alternative/opposite action. Update task in PKB. |
| <!-- @nic: defer to YYYY-MM-DD --> | Update task due date in PKB. No email action. |
| <!-- @nic: noted --> | No action needed. Mark as processed. |
| <!-- @nic: task: [title] --> | Create a new PKB task with the given title. Infer project from the FYI section context. |
| <!-- @nic: cancel --> | For carryover items: update task status to cancelled in PKB. |
| <!-- @nic: act --> | For carryover items: move to today's active work. Update task status to in_progress. |
| <!-- @nic: [freeform] --> | Interpret the annotation. If clear enough to act, execute. If ambiguous, log as needs_clarification. |
<!-- @claude YYYY-MM-DD: [action taken] --> response immediately after the @nic annotation.messages_reply or messages_create_draft fails, log the error and continue. Never retry silently.get_task. If not found, log as task_not_found and skip.After all annotations are processed, append a receipt table to the bundle:
---
## Processing Receipt
Processed: YYYY-MM-DD HH:MM
| # | Section | Item | Annotation | Action Taken | Status |
| - | --------- | ---------------- | ------------------- | ----------------------------- | --------------------- |
| 1 | Decisions | [title] | approved | Task [id] updated to done | ✅ |
| 2 | Emails | Reply: [subject] | send | Draft staged (entry_id: [id]) | ✅ |
| 3 | FYI | [headline] | task: Review X | Task [id] created | ✅ |
| 4 | Decisions | [title] | defer to 2026-03-15 | Task [id] due date updated | ✅ |
| 5 | Carryover | [item] | [freeform] | -- | ⚠️ needs_clarification |
Status indicators:
Print to terminal:
Bundle processed: daily/YYYYMMDD-bundle.md
N annotations processed: N✅ N⚠️ N❌
Emails staged: N drafts
Tasks updated: N
Tasks created: N
Items needing clarification:
- #5: [freeform annotation text] -- couldn't determine action
| Failure | Behaviour |
| ----------------------------- | ------------------------------------------------- |
| Bundle not found | HALT: "No bundle found for {date}" |
| No unprocessed annotations | Print "No pending annotations" and exit |
| Outlook unavailable | Skip email actions, log all as ⚠️, note in summary |
| PKB unavailable | Skip task actions, log all as ⚠️, note in summary |
| Task ID not found | Log as ⚠️ task_not_found, continue |
| Ambiguous freeform annotation | Log as ⚠️ needs_clarification, continue |
| Email staging fails | Log as ❌ with error, continue |
Processing is idempotent. Re-running /process-bundle on the same bundle will:
<!-- @claude --> responsesThis means it's safe to run multiple times if processing was interrupted.
tools
Program / portfolio supervision — the autonomous top loop above /supervisor. "Ready the release" → discover and decompose the constituent epics → run /supervisor on each → surface only escalations + merge-ready PRs. Stateless tick driven by /loop; all cross-tick state lives in the program task body.
development
Mirror PKB tasks onto the Cowork native task list at claim time and sync completion back to PKB. Cowork-only; ships only in the cowork build of aops-core.
testing
Instruction quality gate — reviews agent instructions (task bodies, workflow steps, skill procedures, self-test protocols) for shallow-execution vulnerabilities before deployment. Two modes: author (pre-hoc review) and audit (trace a failure back to the instruction gap). The bar is excellence, not compliance.
content-media
Design-stage fitness rubric — persona immersion, scenario design, dimensions that define what excellence looks like for the people a feature serves. Two modes — author (produce a rubric for a new spec) and critique (red-team an existing spec). Output lives on the spec, not in the verification brief. Owned by pauli.