Generate situational awareness report showing new memos, recent commits, decisions, questions, and roadmap work since user's last reporting-status. Use when user asks "what's new", "catch me up", "status update", "what did I miss", or "recent activity". ONLY invoke via /wrangler:reporting-status command.
Generates incremental status reports showing new memos, commits, and decisions since your last check-in.
npx claudepluginhub bacchus-labs/wranglerThis skill inherits all available tools. When active, it can use any tool Claude has access to.
templates/report.mdYou are the reporting-status workflow coordinator. Your job is to surface what's new since the user's last situational report, ensuring they don't evaluate priorities without knowing the latest learnings.
Surface new memos that collaborators created - so you don't evaluate priorities without knowing the latest learnings.
MANDATORY: When using this skill, announce it at the start with:
🔧 Using Skill: sitrep | Generating situational awareness report
FIRST: Check if arguments contain --help or help.
If help flag is present, output this help text and stop (do not proceed to workflow):
/wrangler:sitrep - Situational Awareness Report
USAGE:
/wrangler:sitrep [OPTIONS]
DESCRIPTION:
Generate a "what's new" report showing activity since your last sitrep.
Surfaces new memos, recent commits, decisions, open questions, and
roadmap status to keep you informed before evaluating priorities.
On first run, shows the last 7 days of activity. Subsequent runs show
only new activity since your last sitrep (incremental updates).
OPTIONS:
--full Ignore cursor, show full 7-day report (like first run)
--help Show this help message and exit
FILES READ:
.wrangler/cache/{user}-sitrep.json Your sitrep cursor state
.wrangler/memos/*.md Memo files for surfacing
.wrangler/ROADMAP_NEXT_STEPS.md Roadmap completion status
.wrangler/issues/*.md Issue status (via MCP)
FILES WRITTEN:
.wrangler/cache/{user}-sitrep.json Updated cursor after each run
STATE FILE FORMAT:
{
"cursor": { "commit": "abc123" }, # Last commit you saw
"stats": { "runs": 5, ... } # Cumulative stats
}
WORKFLOW:
1. Detect user from git config (email prefix)
2. Load cursor from state file (or default to 7 days)
3. Gather data in parallel:
- Git commits since cursor
- New memos with decisions/questions
- Issue and roadmap status
4. Generate report with:
- NEW MEMOS (read first!)
- Recent activity by author
- Decisions made
- Open questions
- Roadmap status & high-priority issues
5. Update cursor to latest commit
EXAMPLES:
/wrangler:sitrep # Incremental: what's new since last run
/wrangler:sitrep --full # Full overview: last 7 days
/wrangler:sitrep --help # Show this help
SEE ALSO:
/wrangler:issues # View issue/spec status
/wrangler:help # Full wrangler documentation
After displaying help, STOP. Do not proceed to the multi-phase workflow.
Phase 1: User Detection & State Loading (Sequential)
↓
Phase 2: Data Gathering (3 Parallel Subagents)
↓
Phase 3: Analysis & Synthesis (Sequential)
↓
Phase 4: Report Generation (Sequential)
↓
Phase 5: State Update (Sequential)
Purpose: Establish identity and load cursor position
Run this command to get the user's identity:
git config user.email
Extract username: everything before the @ symbol.
Example: samjhecht@gmail.com → samjhecht
Fallback: If git config fails, use anonymous as username.
State files are stored in .wrangler/cache/{username}-reporting-status.json
State file format:
{
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-01-15T18:30:00Z",
"cursor": {
"commit": "7313e60"
},
"stats": {
"runs": 12,
"memos_surfaced": 47,
"decisions_found": 23,
"questions_found": 8
}
}
Check if --full flag was passed in arguments:
--full present: Ignore cursor, treat as first-run (show last 7 days)| Case | Handling |
|---|---|
| No state file exists | First-run: show last 7 days, announce "First reporting-status for {username}" |
--full flag | Ignore cursor, treat as first-run |
| State file corrupted/invalid JSON | Delete file, treat as first-run |
| Username detection fails | Fallback to anonymous |
Based on state and flags, determine:
cursor_commit = state.cursor.commit OR null
cursor_date = date of cursor commit OR "7 days ago"
Output from Phase 1:
username - User identitycursor_commit - Last commit seen (or null for first-run)cursor_date - Human-readable start dateis_first_run - BooleanWhy parallel: Three independent data sources with no dependencies.
Launch three parallel subagents using the Task tool in a single message:
Task prompt:
Analyze git history for reporting-status report.
Cursor: {cursor_commit or "7 days ago"}
Commands to run:
- If cursor commit exists:
git log {cursor_commit}..HEAD --format="%H|%ae|%s|%ai" --no-merges
- If no cursor (first-run):
git log --since="7 days ago" --format="%H|%ae|%s|%ai" --no-merges
Output needed:
1. Latest commit hash (for new cursor)
2. Commits grouped by author with counts
3. Decisions extracted from commit messages
Decision extraction - look for:
- Messages containing: "decided", "chose", "switched to", "migrated"
- Conventional commits: feat:, fix: (these represent decisions)
- Breaking changes: BREAKING CHANGE
Return JSON format:
{
"latest_commit": "abc123...",
"commit_count": 15,
"authors": [
{"email": "user@example.com", "count": 5, "representative_messages": ["msg1", "msg2"]}
],
"decisions": [
{"summary": "Switched to TypeScript", "commit": "abc123", "author": "user@example.com"}
]
}
Task prompt:
Surface new memos for reporting-status report. This is the MOST IMPORTANT subagent task.
Cursor date: {cursor_date}
Steps:
1. List memos with modification times:
ls -lt .wrangler/memos/*.md 2>/dev/null || echo "No memos"
2. For each memo newer than cursor date, extract:
- Title (first H1 heading or filename)
- 2-3 sentence summary (first paragraph after title)
- Decisions (look for "## Decision", "we decided", "decided to")
- Open questions (look for "## Open Questions", "??" in headers, "TBD:", "TODO:")
3. Categorize memos by type based on filename patterns:
- RCA-*.md → Root Cause Analysis
- SUMMARY-*.md → Summary/Recap
- ANALYSIS-*.md → Analysis
- DECISION-*.md → Decision Record
- Other → General memo
Return JSON format:
{
"new_memos": [
{
"filename": "2026-01-15-auth-failure-rca.md",
"title": "Authentication Failure Root Cause",
"type": "RCA",
"date": "2026-01-15",
"summary": "JWT validation was failing due to clock skew...",
"decisions": ["Switched to asymmetric JWT verification"],
"questions": ["Should we add clock tolerance?"]
}
],
"decisions_from_memos": [...],
"open_questions": [...]
}
If no memos directory or no new memos, return:
{
"new_memos": [],
"decisions_from_memos": [],
"open_questions": [],
"note": "No memos in workspace" OR "No new memos since cursor"
}
Task prompt:
Gather issue and roadmap status for reporting-status report.
Use MCP tools to query:
1. issues_list({ status: ["open"] }) - Count open issues
2. issues_list({ status: ["in_progress"] }) - Count in-progress issues
3. issues_list({ priority: ["critical", "high"], status: ["open"] }) - High-priority open items
Read roadmap file:
- .wrangler/ROADMAP_NEXT_STEPS.md - Extract current phase and completion %
Return JSON format:
{
"issues": {
"open_count": 5,
"in_progress_count": 3,
"high_priority_open": [
{"id": "000001", "title": "Fix auth bug", "priority": "critical"}
]
},
"roadmap": {
"current_phase": "Phase 2: Core Features",
"completion_pct": 65,
"note": "Extracted from ROADMAP_NEXT_STEPS.md"
}
}
If no issues or roadmap file:
{
"issues": {"open_count": 0, "in_progress_count": 0, "high_priority_open": []},
"roadmap": {"current_phase": "Unknown", "completion_pct": null, "note": "No roadmap file found"}
}
CRITICAL: All three Task tool calls must be in a single message to execute truly in parallel.
I'm launching three parallel reporting-status data gathering agents:
[Task tool - Subagent A: Git History Analysis]
[Task tool - Subagent B: Memo Surfacing]
[Task tool - Subagent C: Issue & Roadmap Status]
All three agents are now running in parallel...
Why sequential: Needs results from all Phase 2 subagents.
Collect and parse JSON results from all three subagents.
Decisions may appear in both commits and memos. Deduplicate by:
Analyze new information for priority implications:
| Trigger | Suggested Change |
|---|---|
| New RCA memo about component X | Related issues → higher priority |
| Specification closed | Child issues → review for obsolescence |
| Critical bug in recent commits | Related issues → may be blocked |
| Decision changes architecture | Related issues → may need update |
Important: Sitrep SUGGESTS priority changes. Human decides.
For state file update:
new_memos_count = len(new_memos)
decisions_count = len(deduplicated_decisions)
questions_count = len(open_questions)
Read templates/report.md for the full report template and variable reference.
Generate the reporting-status report by:
templates/report.md| Priority | Emoji |
|---|---|
critical | 🔴 |
high | 🟠 |
medium | 🟡 |
low | 🟢 |
mkdir -p .wrangler/cache
Write to .wrangler/cache/{username}-reporting-status.json:
{
"created_at": "{original_created_at OR now if first run}",
"updated_at": "{now ISO8601}",
"cursor": {
"commit": "{latest_commit_hash from Subagent A}"
},
"stats": {
"runs": {previous_runs + 1},
"memos_surfaced": {previous + new_memos_count},
"decisions_found": {previous + decisions_count},
"questions_found": {previous + questions_count}
}
}
Announce: "Sitrep state saved. Next reporting-status will start from commit {latest_commit_hash}."
| Case | Handling |
|---|---|
| No git repo | Skip git analysis, warn user, continue with memos/issues |
| No memos directory | "No memos in workspace" in report |
| No .wrangler directory | "Wrangler not initialized - run session-start hook" |
| No issues | "No issues tracked yet" |
| Cursor commit rebased away | git log {cursor}..HEAD will fail; fall back to last 30 days |
| Empty workspace | Generate report with all "No new..." messages |
| Subagent fails | Report partial data, note which source failed |
If git log with cursor fails:
# Check if cursor commit exists
git cat-file -t {cursor_commit} 2>/dev/null
If not found:
git log --since="30 days ago"After implementation, verify these scenarios work:
## Decision → appears in reportThis skill is read-only for governance files:
Only writes to: .wrangler/cache/{username}-reporting-status.json
When launching parallel subagents, use:
subagent_type: "Explore" for Subagent A (git analysis) and Subagent B (memo surfacing)subagent_type: "general-purpose" for Subagent C (uses MCP tools)For efficiency, subagents can use model: "haiku" since tasks are straightforward data gathering.
User: /wrangler:reporting-status
Agent Response:
User: /wrangler:reporting-status
Agent Response:
User: /wrangler:reporting-status --full
Agent Response:
Sitrep is successful when: