| name | brief |
| description | Felix's daily-work-brief cockpit. Opens the morning's staged brief and walks him through everything that needs him across Jira, Slack, GitHub, and today's calendar — ranked blocking-first — approving and SENDING replies as he goes (Jira + GitHub auto-comment; Slack copied to clipboard with the thread link). Refreshes against live state on open so nothing stale is sent. Use when Felix runs /brief, or says "what needs me today", "my daily brief / morning brief", "run my brief", "what's on my plate". NOT for summarizing a document or writing a short "brief" of something — this is the personal work-triage loop. |
brief — review & clear the day's work
Two phases. PREP runs unattended at 07:30 Mon–Fri and stages a brief; REVIEW (/brief)
is what you run when you sit down. Almost always you're here for REVIEW.
PREP (scheduled — you rarely run this by hand)
scripts/prep.sh gathers Jira+Slack (via mywork/slackdump) + GitHub (via gh), then a
headless claude -p composes the staged brief at ~/loop-me/state/brief-<date>.md
(instructions: scripts/prep-prompt.md). Install the schedule once with
scripts/install-schedule.sh. Calendar is deliberately left to REVIEW (below).
REVIEW — /brief
1. Load
Read today's staged brief ~/loop-me/state/brief-$(date +%F).md. If it's missing (Mac was
off at 07:30, or first use), run scripts/prep.sh now, then load it.
2. Refresh at open — the staged brief is a WARM CACHE, not the truth
Before showing anything, bring each item up to date (do NOT trust the 07:30 snapshot):
- Re-check each item's live state: Slack thread already answered (by Felix or someone) →
drop; Jira issue closed / PR merged → drop; content changed materially → re-draft.
Cheapest way: re-run
scripts/gather.sh ~/loop-me/state/comms 1 and diff, or spot-check the
specific threads/issues.
- Fetch today's calendar via the Google Calendar MCP (
list_events, today) and compute
free time — this is why calendar isn't in PREP (MCP is only here, interactively).
- Drop any item whose id is in
~/loop-me/state/handled.json.
3. Present the header, then walk the ranked list
Show the header: date · meeting load ("3 meetings, ~4h free") · counts ("6 replies, 2
reviews, 1 do — 3 blocking"). Then walk items top-down, one at a time. For each, show the
card: rank · type · needs-your-judgment if flagged · who/where · why-now · the draft (for
reply items) · the source link. Wait for Felix's call:
| Felix says | You do |
|---|
| send | write the draft to a temp file, then scripts/send.sh <jira KEY | gh URL | slack PERMALINK> … |
| edit ("warmer", "drop last line", …) | revise the draft, show it, then send on his ok |
| skip | leave it; it carries over to tomorrow's brief (tagged carried · day N) |
| done / ignore / open | append its id to ~/loop-me/state/handled.json (suppressed hereafter); for open, also print the link |
| next / stop | move on / end the walk |
send.sh auto-comments Jira (acli) and GitHub (gh); for Slack it copies the reply to
the clipboard and prints the thread link (paste + send yourself). Never send an item you
haven't refreshed in step 2.
4. Close out
Update ~/loop-me/state/last-brief.json {"ts":"<ISO now>"}. Print a one-liner:
"Sent 5 (3 Jira, 2 GH), 2 Slack copied, 1 skipped (carried), 2 dismissed."
State (~/loop-me/state/)
brief-<date>.md (staged brief + audit trail) · last-brief.json (window cursor) ·
handled.json (dismissed ids; entries older than 14 days may be pruned) · comms/ (raw gather) ·
optional ~/loop-me/config/vips.txt (VIP handles/emails/usernames — ranking boost, may be absent).
Guardrails
- Jira/GitHub sends are REAL and immediate on
send. Refresh (step 2) before every send.
- Slack has no auto-send credential yet (clipboard hand-off). If a Slack
chat:write token
is later stored in mytokens, add a real-send branch to scripts/send.sh and this flips
to true auto-send — no other change.
SKILL_DIR = this skill's dir (~/.claude/skills/brief). Need a credential → use mytokens.