monthly-review
This skill should be used when the user asks to "run monthly review", "create monthly note", "do the month-end review", "generate monthly summary", "run monthly-review", or wants to produce a structured monthly journal note comparing planned goals against actual outcomes.
What this skill does
# Monthly Review
Generate a monthly note at `journal/monthly/YYYY-MM.md` by reading the yearly plan, weekly notes for the month, and referenced project notes. Produces a goals-vs-actuals comparison, aggregated accomplishments, and a reflection narrative. Intended to run on the last day of the month or first 3 days of the next.
## Settings
Read `.claude/bulletjournal.local.md` (use Read tool). Parse YAML frontmatter:
| Variable | Key | Default |
|----------|-----|---------|
| `JOURNAL_PATH` | `journal_path` | `journal` |
| `PROJECTS_PATH` | `projects_path` | `10-Projects` |
| `QMD_BIN` | `qmd_bin` | `qmd` |
Run `/bulletjournal:init` to create this file. Use these variables for all path references below.
## Vault Layout
- Yearly note: `{JOURNAL_PATH}/YYYY.md` (goals per month)
- Weekly notes: `{JOURNAL_PATH}/weekly/YYYY-[W]WW.md`
- Monthly notes: `{JOURNAL_PATH}/monthly/YYYY-MM.md`
- Project notes: `{PROJECTS_PATH}/` with `#action` tag
## qmd MCP Tool Signatures
Before making any qmd calls, load schemas with:
```
ToolSearch select:mcp__qmd__get,mcp__qmd__query,mcp__qmd__search
```
Correct parameter signatures:
- `mcp__qmd__get` → `{ path: "relative/path.md" }`
- `mcp__qmd__query` → `{ query: "text", limit?: number }`
- `mcp__qmd__search` → `{ query: "text", limit?: number }`
## Step-by-Step Procedure
### 0. Refresh the qmd index
Run in Bash before any searches. The `|| true` ensures a failure does not abort the review:
```bash
${QMD_BIN} update && ${QMD_BIN} embed || true
```
### 1. Determine the target month
Check today's date:
- If day ≥ 4: target = current month
- If day ≤ 3: target = previous month (default, but ask the user if ambiguous)
### 2. Check for existing monthly note
Use `qmd get journal/monthly/YYYY-MM.md` or Glob.
- If it exists: **do not overwrite**. Warn: `Monthly note already exists: journal/monthly/2026-04.md — append '-v2' or abort?` Stop and wait for confirmation.
### 3. Read the yearly plan
Run `qmd get journal/YYYY.md` to retrieve the yearly note. Extract the goals listed under the target month's heading. Note: heading levels are inconsistent in the yearly note — look for the month name at any heading level (`##` or `###`, e.g. `### April` or `## April`).
- If the yearly note does not exist or has no goals for the target month: note "No planned goals found" and continue — the review can still document actuals.
### 4. Retrieve weekly notes for the month
Use Glob on `journal/weekly/YYYY-W*.md` to find all weekly notes, then filter to weeks whose date range overlaps the target month. Read each matching note.
- If no weekly notes found: fall back to Glob on `daily/YYYY-MM-*.md` and read daily notes directly.
- If neither weekly nor daily notes exist: report and create nothing. Message: `No notes found for 2026-04. Nothing to review.`
### 5. Aggregate content from weekly (or daily) notes
From weekly notes, collect:
| Data | Source field/section |
|------|---------------------|
| Wins | `## Wins` section |
| Open/stalled items | `## Still open` and `## Stalled / blocked` sections |
| Progress bullets | Lines tagged with `#progress` (inline tag, e.g. `- Fixed auth bug #progress`) |
| Project links | `[[...]]` wiki-links |
| Migration decisions | `## Migration decisions` tables |
If reading daily notes directly (fallback), collect the same data from individual daily note sections.
Deduplicate `#progress` bullets that appear in multiple notes — keep the most informative version.
### 6. Fetch project status for referenced projects
For each unique `[[Project Name]]` found, run:
```bash
qmd get "10-Projects/Project Name.md"
```
Extract `status` and `next-action`. Note any projects that changed status during the month.
### 7. Compare planned goals vs. actuals
For each goal from the yearly note, assess:
- **Achieved**: evidence in wins, progress bullets, or project status change to `archived`/completed
- **Partially met**: some progress but not complete
- **Missed / deferred**: no evidence of progress — note why if discernible
### 8. Generate the monthly note
Write the file at `journal/monthly/YYYY-MM.md`:
```markdown
---
type: monthly
month: 2026-04
created: 2026-04-30
---
# April 2026
## Goals (from yearly plan)
- (goals pulled from journal/2026.md ## April)
## Goals achieved
- (which goals were met, with evidence)
## Goals missed / deferred
- (which goals weren't met, with context)
## Active projects
- [[Project Name]] — status: active | next-action: Write spec
- ...
## Accomplishments
- (aggregated #progress bullets, deduplicated and grouped by theme)
## Stalled work
- (repeated blockers from weekly notes, with brief context)
## Reflection
(2–4 sentence narrative: what worked, what didn't, what to adjust next month)
```
Draft the **Reflection** as a candid, brief narrative. Draw on: goals achieved vs. missed ratio, recurring blockers, and overall momentum.
For **Active projects**: list only projects with activity this month (appeared in a weekly or daily note). Show current `status` and `next-action` from frontmatter.
### 9. Write the file
Write the note with Write.
### 10. Print confirmation
```
Monthly note created → journal/monthly/2026-04.md
```
## Edge Cases
- **Monthly note already exists**: warn and stop — never overwrite. Suggest `-v2` suffix.
- **No weekly notes, no daily notes**: report and create nothing.
- **Yearly note missing**: continue without planned goals; note "No yearly plan found."
- **No goals for the target month in yearly note**: note "No planned goals for this month" and continue.
- **Project note not found**: skip status fetch; mark "status unknown" in Active projects.
- **Day 1–3 ambiguity**: if today is day 1–3, default to previous month but confirm with user before proceeding.
## Additional Resources
- **`.claude/skills/README.md`** — Overview of all BuJo skills and how to use them
Related in Code Review
gstack
IncludedFast headless browser for QA testing and site dogfooding. Navigate pages, interact with elements, verify state, diff before/after, take annotated screenshots, test responsive layouts, forms, uploads, dialogs, and capture bug evidence. Use when asked to open or test a site, verify a deployment, dogfood a user flow, or file a bug with screenshots. (gstack)
startup-due-diligence
IncludedLegal due diligence review for seed-stage and Series A startups (US, Delaware C-Corp focus). Supports both investor and founder perspectives. Capabilities include: (1) Interactive document review and issue spotting; (2) Document request list generation; (3) Cap table and SAFE/convertible note analysis; (4) Red flag identification with severity ratings; (5) Diligence report generation. TRIGGERS: due diligence, DD, startup investment, cap table review, Series A, seed round, investor diligence, legal review startup, SAFE analysis, convertible note, 409A, founder vesting.
interview-master
IncludedThis skill should be used when the user asks to "generate interview questions", "prepare for interview", "optimize resume", "conduct mock interview", "analyze git commits for resume", "generate resume from code", "review my resume", or mentions interview preparation, career assistance, or extracting project experience from git history. Provides comprehensive interview and career development guidance for both job seekers and interviewers.
fix-issue
IncludedFixes GitHub issues using parallel analysis agents for root cause investigation, code exploration, and regression detection. Reads issue context from gh CLI, searches codebase and memory for related patterns, generates a fix with tests, and links the resolution back to the issue via PR. Includes prevention analysis to avoid recurrence. Use when debugging errors, resolving regressions, fixing bugs, or triaging issues.
sf-apex
IncludedGenerates and reviews Salesforce Apex code with 150-point scoring. TRIGGER when: user writes, reviews, or fixes Apex classes, triggers, test classes, batch/queueable/schedulable jobs, or touches .cls/.trigger files. DO NOT TRIGGER when: LWC JavaScript (use sf-lwc), Flow XML (use sf-flow), SOQL-only queries (use sf-soql), or non-Salesforce code.
swift-development
IncludedComprehensive Swift development for building, testing, and deploying iOS/macOS applications. Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line, (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl, (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM), (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable), (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence, or any other Swift/iOS/macOS development tasks.