with one click
briefing
// Generate a project briefing: worktree status, open checkboxes, recent commits. Modes: summary (default), report, verify, current, worktrees. Period: 1h, 6h, 24h, 2d, 7d.
// Generate a project briefing: worktree status, open checkboxes, recent commits. Modes: summary (default), report, verify, current, worktrees. Period: 1h, 6h, 24h, 2d, 7d.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | briefing |
| argument-hint | [report [period]] | verify | current | worktrees | [summary] | stop | next |
| description | Generate a project briefing: worktree status, open checkboxes, recent commits. Modes: summary (default), report, verify, current, worktrees. Period: 1h, 6h, 24h, 2d, 7d. |
| metadata | {"version":"2026.05.06+73abe0"} |
Gather project state and present a structured briefing.
Before executing any mode, determine which runtime is available for the briefing helper script:
Try node "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.cjs" first (preferred).
If node is not found, try python3 "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.py" (fallback).
If neither node nor python3 is available, output a clear error and stop:
/briefing requires Node.js or Python 3. Install one and ensure it's on PATH.
- Node.js: https://nodejs.org/
- Python: https://python.org/
Use the detected runtime for all node "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.cjs" commands below.
If using the Python fallback, substitute python3 "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.py" wherever
the instructions say node "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.cjs".
Parse $ARGUMENTS to determine mode, options, and optional schedule:
$ARGUMENTS = "" ā mode: summary
$ARGUMENTS = "summary" ā mode: summary
$ARGUMENTS = "report" ā mode: report, period: 24h
$ARGUMENTS = "report 7d" ā mode: report, period: 7d
$ARGUMENTS = "verify" ā mode: verify
$ARGUMENTS = "current" ā mode: current
$ARGUMENTS = "worktrees" ā mode: worktrees
$ARGUMENTS = "stop" ā meta: cancel scheduled briefings
$ARGUMENTS = "next" ā meta: show next scheduled briefing
$ARGUMENTS = "report 24h every day at 9am" ā mode: report, schedule
Period shorthand: 1h, 6h, 24h (default), 1d, 2d, 7d
Schedule detection: If $ARGUMENTS contains every <SCHEDULE>, strip the schedule
portion and handle scheduling separately (see Scheduling section below).
CRITICAL: "Present verbatim" means OUTPUT EVERY LINE. Do not summarize, collapse, truncate, or rephrase script output. The script's formatting IS the presentation ā it was designed to be read directly. If the output is 50 lines, show 50 lines. The user wants to SEE the data, not hear about it. Past failure: agent received 45 lines of worktree status and collapsed it to a 4-line summary, hiding actionable details like which logs need extraction and which commits are unlanded.
summary (default ā empty or unrecognized arguments)Quick terminal-only triage view. The helper outputs pre-formatted text.
node "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.cjs" summary --since=<period>
Present the output verbatim ā it is already formatted with three buckets:
reportGenerate a detailed markdown report and write it to reports/.
node "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.cjs" report --since=<period>
The helper writes the file directly and prints its path. Report includes:
Checkbox state from earlier same-day reports is preserved automatically.
Present: "Report written to: <path>" with a brief summary of key findings.
verifyPurpose: show the user everything they need to verify, with links to open the reports directly. This is a sign-off dashboard ā the user reads this, clicks through, checks items off, done.
This mode is NOT about worktrees. Do not mention worktrees, do not
suggest the user verify worktrees before landing, do not include worktree
counts or status. Worktrees are for /briefing worktrees. Verify is
exclusively about report checkboxes ā [ ] items in verification reports,
fix reports, and plan reports that need human sign-off.
node "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.cjs" verify
The script output includes both report sign-off data and worktree data. Use both ā report checkboxes are the primary output, worktrees needing verification are secondary (see "Worktree verification items" below).
The script gives file paths and counts. That's not enough ā the user needs
to see the actual checkbox text. For each report file with unchecked items,
READ the file and extract every [ ] line with its surrounding context
(the heading it's under, any verification instructions).
For each report file, include the file path so the user can open it.
Present the output in this format:
Pending sign-offs: N items across M reports
FIX_REPORT.md ā 33 items
FIX_REPORT.md
UI / UX Fixes:
[ ] Feature X verification ā exercise primary flow, confirm expected output
[ ] Edge case Y handling ā trigger boundary input, verify graceful fallback
Simulation Fixes:
[ ] Solver tolerance ā run sample case, verify output within 1e-6
reports/plan-feature-expansion.md ā 9 items
reports/plan-feature-expansion.md
Phase 1:
[ ] Feature X verification
[ ] Component Y wiring works
VERIFICATION_REPORT.md ā 2 items
VERIFICATION_REPORT.md
[ ] Edge case Z sign-off
[ ] Migration sanity check
Key formatting rules:
If the script's output includes worktrees needing verification before
landing, include them ā they ARE verification items. But flag them as
unusual: a worktree needing user verification at /briefing verify time
means /run-plan or /fix-issues didn't complete its verification phase.
ā Worktree needing verification (suggests incomplete skill run):
agent-a5217dbd (SLX Export Phase 1) ā 6 commits, not yet verified/landed
This surfaces the problem rather than hiding it.
Empty state: ALL CLEAR ā no pending sign-off items.
currentShow what's actively in flight right now.
node "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.cjs" current
Present the output verbatim. Sections:
worktreesDetailed worktree analysis with cleanup readiness. Read-only ā shows what's safe to remove but does not remove anything.
node "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.cjs" worktrees-status
Present the output verbatim. Sections:
git worktree remove commands..claude/logs/ has modified files. Shows which logs need extraction and how.git worktree list.Important: Always extract logs before removing any worktree. Logs document how work was done ā they are part of the project, not disposable artifacts.
The agent runs node "$CLAUDE_PROJECT_DIR/.claude/skills/briefing/scripts/briefing.cjs" <subcommand> and captures stdout.
| Subcommand | Output | Description |
|---|---|---|
worktrees | JSON | All worktrees with classification |
checkboxes | JSON | Unchecked [ ] items from report files |
commits | JSON | Categorized commits on main |
summary | Text | Pre-formatted three-bucket triage view |
report | File | Writes markdown report, prints path |
verify | Text | Pre-formatted verification checklist |
current | Text | Pre-formatted in-flight status |
worktrees-status | Text | Cleanup readiness report |
Each worktree is classified into exactly one category:
landed-full ā .landed file with status: full (fix-issues cherry-pick, all commits on main) or status: landed (run-plan cherry-pick or merged PR)landed-partial ā .landed file with status: partial (some commits skipped, needs review)landed-pr-ready ā .landed file with status: pr-ready (PR is open; worktree is safe to remove, remote branch must NOT be deleted ā it supports the open PR)landed-pr-needs-attention ā .landed file with status: pr-ci-failing, status: pr-failed, or status: conflict (PR-mode errors that need manual action)done-needs-review ā No .landed, has commits, inactive > 2 hourspossibly-active ā No .landed, modified within last 2 hoursempty ā No .landed, zero commits ahead of mainnamed ā Not an agent-* worktree (e.g., physics module)orphaned ā Directory exists on disk but not in git worktree listThe /briefing skill supports recurring execution via cron.
If $ARGUMENTS contains every <SCHEDULE>:
install_command: /briefing <base-mode-args>schedule: parsed from <SCHEDULE> (e.g., "day at 9am" ā 0 9 * * *)Scheduled: /briefing <mode> runs every <schedule>
WARNING: This schedule is tied to this session. If the session ends, the schedule is lost.
stop ā Cancel Scheduled Briefings/briefing)next ā Show Next Fire Times| Input | Cron | Description |
|---|---|---|
every hour | 0 * * * * | Top of every hour |
every 2h | 0 */2 * * * | Every 2 hours |
every day at 9am | 0 9 * * * | Daily at 9 AM |
every weekday at 9am | 0 9 * * 1-5 | Weekdays at 9 AM |
The report subcommand writes this markdown structure:
# Briefing Report ā YYYY-MM-DD HH:MM ET
Period: <since> -> now
## Summary
- N commits landed on main
- N worktrees: X need review, Y in flight, Z landed
- N unchecked sign-off items across M reports
## Needs Attention
### [ ] Review: <worktree-name> (N commits)
Commits:
- `hash` subject
Last modified: <relative time>
### [ ] Sign-off: <report-file> (N unchecked items)
- [ ] item text (line NN)
## Landed on Main
| Type | Hash | Subject | Date |
|------|------|---------|------|
## Worktree Status
| Worktree | Category | Commits | Last Modified | Notes |
|----------|----------|---------|---------------|-------|
## In Progress
| Worktree | Commits | Last Modified | Summary |
|----------|---------|---------------|---------|
Checkboxes marked [x] in earlier same-day reports are preserved in new reports.
The summary subcommand appends warnings when:
done-needs-review worktree is older than 7 days (stale)If a Z Skills repo clone exists (zskills/ in project root, or
/tmp/zskills), the summary and report modes should compare the
installed version (resolved from .claude/zskills-config.json via the
canonical config-resolution helper) against the source repo's latest
release tag:
. "$CLAUDE_PROJECT_DIR/.claude/skills/update-zskills/scripts/zskills-resolve-config.sh"
# ZSKILLS_VERSION is the installed version (from .claude/zskills-config.json).
source_ver=""
if [ -d "$ZSKILLS_PATH/.git" ]; then
source_ver=$(bash "$CLAUDE_PROJECT_DIR/.claude/skills/update-zskills/scripts/resolve-repo-version.sh" "$ZSKILLS_PATH")
fi
if [ -n "$source_ver" ] && [ "$source_ver" != "$ZSKILLS_VERSION" ]; then
echo " zskills: $ZSKILLS_VERSION ā $source_ver (run /update-zskills)"
else
echo " zskills: ${ZSKILLS_VERSION:-(unknown)} (current)"
fi
$ZSKILLS_PATH is the source-clone discovery path (briefing's existing
search probes zskills/ in the project root then /tmp/zskills). When
no source clone is found, source_ver stays empty and the line falls
through to the "current" branch. When the installed version is missing
(no zskills_version field in config), the rendered text is
zskills: (unknown) (current).
.claude/worktrees/ or worktrees/ not
registered with git worktree list. Shown with orphaned category.reports/ directory ā created automatically when writing a report.