01Overview
TL;DR — Dump the week's raw material in (Slack threads, PR titles, standup notes, metrics snapshots, calendar events), get back a structured report in your team's shape. Refuses to invent progress, pad shipping lists with half-done work, or hide blockers that didn't get resolved. Produces reports that read like a human wrote them because they're grounded in what actually happened.
Weekly reports fail in two directions. They either take an hour on Friday (so people skip them, so leadership loses the visibility, so the team gets micromanaged in a different way), or they get written in five minutes with a "things are going well" shape that nobody trusts and nobody reads. Both failure modes point at the same gap — the mechanical work of assembling the inputs is what's expensive, and the AI should handle it.
This Skill is the mechanical-assembly layer. You give it the raw inputs; it classifies them into the report sections your team actually uses; it produces a draft you review and ship. The time cost drops to five minutes. The quality holds because the Skill refuses to fabricate progress — if nothing shipped, "Shipped" is empty with a line explaining why, not padded with aspirational bullets.
The default report shape is five sections (Shipped, Blocked, Metrics, Next Week, Risks), but every team has its own shape. The Skill reads a template YAML you supply so the output matches what your team actually publishes — whether that's weekly, bi-weekly, or on whatever cadence your organization runs.
02When to use
Friday-afternoon team report
The classic. Dump the week's inputs, get a structured report ready for your team channel or newsletter.
Manager roll-up for leadership
Combine 3-5 team reports into a leadership-level summary with cross-team themes surfaced.
Metrics-heavy ops reports
Attach a metrics snapshot (dashboard screenshot or CSV); the Skill folds the deltas into the report with trend commentary.
Quarterly recap from weekly inputs
Combine 12 weekly reports into a quarterly narrative. The structured shape makes aggregation clean.
03How it works
The Skill runs a four-pass process on the week's inputs:
- Classify. Walk every input and classify by section — a merged PR is shipped, an unresolved Jira comment is blocked, a metrics line goes to metrics. Items with no clear classification get surfaced to the human reviewer as "unclassified" rather than guessed into a section.
- Deduplicate and consolidate. "PR #4723 merged," the Slack message announcing it, and the standup mention are one event, not three. The Skill collapses them into a single bullet with the strongest attribution.
- Evidence-link each claim. Every bullet in the output links to the specific input that supports it (PR URL, Slack permalink, meeting-note anchor). The reader can click to verify; the writer can prove the report isn't padded.
- Draft and fabrication-check. Produce the structured report in the template shape. Scan each bullet for claims not supported by the inputs — those get replaced with
[need from you: X]placeholders rather than invented.
The output is a draft to review in minutes, not a polished report ready to auto-send. For teams with inbox or Slack MCPs connected, the Skill can post the draft to a review channel before publishing — but it will not send to the leadership channel without explicit confirmation.
04SKILL.md spec
Full SKILL.md. Save as weekly-report-generator/SKILL.md in your Skills directory.
---
name: weekly-report-generator
version: 1.2.0
description: Takes a week's raw inputs (Slack threads, PR
titles, meeting notes, metrics) and produces a
structured weekly report in the team's template
shape. Evidence-links every claim. Refuses to
invent progress not supported by the inputs.
category: business-operations
requires_mcp:
- slack # optional, for direct channel-read
- github # optional, for PR / issue read
- linear # optional, for ticket read
inputs:
- name: inputs
type: array
required: true
description: Raw inputs for the week. Can be pasted text,
file uploads, or MCP-fetched content.
- name: template
type: yaml_file
required: false
default: standard 5-section template (Shipped, Blocked,
Metrics, Next Week, Risks)
description: Team's report template defining section
names and ordering
- name: period
type: text
required: true
description: Date range this report covers (e.g.
"Oct 7-13, 2026")
- name: team
type: text
required: true
description: Team name for the report header
- name: previous_report
type: text | file
required: false
description: Last week's report. Enables Next Week
reconciliation (what we said we'd do vs
what we did).
outputs:
- name: report
type: structured_markdown
description: Report in the template shape, each bullet
evidence-linked to its source input
- name: unclassified
type: list
description: Inputs the Skill couldn't confidently
classify. Surfaced for human review.
- name: last_week_reconciliation
type: structured
description: When previous_report supplied, the
reconciliation of what was promised vs
what shipped.
---
## Rules
1. NEVER invent progress. If no PRs merged, "Shipped"
says "Nothing shipped this week" with the honest
reason (holiday week, planning sprint, incident
response) rather than padding with aspirational bullets.
2. ALWAYS evidence-link every bullet. "Shipped the auth
refactor (PR #4723)" is a complete bullet; "shipped
the auth refactor" without the link is not.
3. ALWAYS surface unclassified inputs rather than
guess-classifying them. The human reviewer can place
them; the Skill cannot.
4. For Blocked items, name the blocker specifically.
"Blocked by vendor" is bad; "Blocked by Acme Corp
API rate limits; waiting on their eng team since Monday"
is good. If the input doesn't name the blocker
specifically, flag with [need from you: X].
5. For Metrics, use the numbers in the input exactly. Do
NOT round, estimate, or infer trends not stated. If a
metric is missing a comparison baseline, say so rather
than inventing one.
6. For Next Week, prefer items grounded in commits already
made (planning docs, assigned tickets, calendar events)
over aspirational items. Mark aspirational items as
such; do not pass them as commitments.
7. For Risks, require specific risk statements. "Risk:
things might get worse" is noise; "Risk: Q3 revenue
target depends on three deals closing by Friday, two
are at verbal only" is a risk.
8. When previous_report is supplied, produce the Next Week
reconciliation. "Last week promised X, Y, Z. X shipped
(PR #...), Y partially shipped (link), Z slipped
(reason)." This is the discipline that keeps weekly
reports honest over time.
## Refusals
- If the inputs are too thin to produce a meaningful report
(fewer than 3 distinct inputs across the whole week),
refuse and ask whether this is a holiday week, a thin
activity week, or whether more inputs exist elsewhere.
- If the user asks to "spin" or "soften" a bad week's
report (fewer shipped items than last week, missed
commitments, etc.), produce the honest report and
decline the spin. The report's value is its truth; a
spun report trains readers to not trust it.
- If asked to produce reports for teams other than the
one named in the input, refuse. Each team's report
is their own; cross-team roll-ups use the separate
manager-roll-up variant.
05Example 1 — Engineering team weekly
Produce the weekly report for a 6-person backend team
Inputs: 12 merged PRs with titles, 3 Slack standup threads, 2 unresolved Jira tickets, a dashboard screenshot showing p95 latency trend. Period: Oct 7-13, 2026. Team: Platform.
# Platform Team — Weekly Report
## Oct 7-13, 2026
### Shipped
- **Auth refactor to OAuth 2.1 completed** — shipped Thu
(PRs #4723, #4731, #4744). Migration from legacy session
tokens done; all services now use the new auth path.
- **Postgres connection pool tuning** — p95 latency on
the /orders endpoint down from 340ms to 180ms after
shipping PR #4727 Mon.
- **Feature flag plumbing for billing experiment** —
framework in place (PR #4738); experiment itself ships
next week per billing team schedule.
- 3 minor fixes (PRs #4719, #4725, #4740)
### Blocked
- **Vendor data sync still stuck** — Acme Corp API
rate limits are tighter than documented; our workaround
from last week is in place but their eng team hasn't
responded since Monday. Jira: PLATFORM-2814.
- **Load test environment** — infra ticket open since
Oct 3 (PLATFORM-2801). Will escalate to infra lead Monday.
### Metrics
- p95 latency (/orders): 340ms → 180ms (dashboard snapshot
attached, measured Mon-Fri)
- Error rate: 0.08% (flat week over week)
- Deploy count: 12 (vs 9 last week)
### Next Week
- Billing experiment ships Tue (per billing team planning
doc, Oct 14)
- Vendor sync resolution path: either Acme responds with a
solution OR we spike the alternative provider by Thu
- Load-test env unblocking per infra escalation outcome
### Risks
- Billing experiment ship depends on billing team's
schema migration completing by Mon; they flagged in
standup Thu that it might slip to Wed.
- Vendor sync workaround is holding but costs 2x the
compute of the direct path; sustained incidents on this
table through end of month would push us over infra
budget.
### Reconciliation vs last week's report
- Promised: auth refactor ships. ✓ Shipped Thu.
- Promised: Postgres pool tuning. ✓ Shipped Mon.
- Promised: billing experiment ships. ✗ Slipped to next
week; feature flag plumbing done, experiment itself
waiting on billing team schema migration.
---
Unclassified inputs (0): none this week.
Note the report's shape: every bullet has evidence (PR number, Jira ticket, dashboard snapshot reference). The reconciliation makes last week's promises visible against this week's delivery, which is the discipline that prevents reports from drifting into aspirational fiction over time.
06Example 2 — GTM team weekly
Produce weekly for a 4-person sales + marketing team
Inputs: HubSpot pipeline snapshot, 2 webinar recap threads, 4 content pieces published, 3 new logos signed. Template: 5-section standard. Period: Oct 7-13.
# GTM Team — Weekly Report
## Oct 7-13, 2026
### Shipped
- **3 new logos signed**: [Co A] ($48K ACV), [Co B]
($24K ACV), [Co C] ($72K ACV). All three in the
mid-market segment, matching the Q4 ICP focus.
- **MCP governance webinar** — 184 registrations,
97 attendees (53% show rate). Recording published Thu.
- **4 content pieces published**: EMA deep dive, MCP vs
REST comparison, Governance checklist, Spreadsheet
comparison. Combined 11,400 pageviews week-to-date
(analytics snapshot attached).
### Blocked
- **ABM campaign targeting enterprise accounts** —
blocked on list build from marketing ops; waiting
since Oct 8 on scoring methodology sign-off.
### Metrics
- New pipeline: $412K (vs $380K last week, +8%)
- Closed-won: 3 deals / $144K ACV
- Content pageviews: 11,400 WTD (dashboard: content hub)
- Webinar: 184 registrations, 97 attended
### Next Week
- Enterprise ABM list unblocking + first touches (per
marketing ops ETA Mon)
- Follow-up sequence for 97 webinar attendees (templates
ready, sends start Mon)
- Analyst briefing with [Firm] Thu
### Risks
- Q4 closed-won pacing is below plan by $90K through week
2 of the quarter. Three deals at verbal commitment
carry $160K ACV combined; if all three close by
Oct 25 we recover plan, if one slips we miss.
- Enterprise ABM campaign starting late (orig plan Oct
7, now Oct 14+) narrows the Q4 window for enterprise
pipeline contribution.
07Example 3 — Refusal when asked to spin a bad week
"Make this week's report look better than it is"
Inputs: 2 merged PRs (both minor fixes), 1 incident that consumed Tue-Thu, nothing from the quarter's planned deliverables shipped. User asks the Skill to "make it look positive" before leadership sees it.
I'm not going to spin this one. Here's why — and
what I'll do instead.
The honest shape of this week is: an incident consumed
the middle three days, the two shipped items are
unrelated minor fixes, and nothing from the quarterly
plan moved. Producing a report that reads otherwise
either requires inventing progress (which the Skill
refuses) or burying the incident in soft language
(which trains leadership to not trust future reports).
What I can do that's actually useful:
1. Write the honest report. The incident is the story
this week; name it specifically, name what you
learned, name what's changing because of it.
Leadership will respect this far more than a
polished-looking report that doesn't match
reality.
2. Add a "What this week cost us" section that makes
the opportunity cost explicit — which quarterly
deliverables slipped, by how much, and whether the
recovery plan is viable. This gives leadership the
information they'd otherwise ask for in a 1:1.
3. If the quarterly plan is genuinely at risk, surface
that in Risks with the specific delta. "Q4 deliverable
X was due Oct 20; realistic revised date is Oct 27.
Impact: Y." This is the shape of risk-reporting that
gets you help, not scrutiny.
Say the word and I'll draft all three. The one
I won't draft is the softened version.
The refusal is deliberate. The whole value of a weekly report is that leadership trusts it — and that trust is built one honest report at a time. A single spun report breaks the pattern. The Skill is built to not help with the spin, because the long-term cost to the reporting team is dramatically higher than the short-term discomfort of a bad week report.
08Benchmarks
Measured against a corpus of 120 weekly reports (eng, GTM, ops, finance teams) paired with ground-truth input bundles. Headline metrics: claim precision (claims matched to evidence), fabrication rate (invented claims), and time saved (vs human-written reports).
Claim precision = % of report bullets that match an input evidence source. Fabrication rate = % of bullets citing evidence that doesn't exist. Time saved measured against a baseline of 45 min for manual weekly report assembly.
The 38-minute time save per report, across a team of 10 managers each writing a weekly, is 6+ hours of leadership time per week returned. That's the compounding value — one Skill, run 50 times a week across the org, buys back a full engineer-week per month.
09Rules & refusals
Rules enforced
- No invented progress. Nothing shipped means "Nothing shipped" with the honest reason, not padded bullets.
- Evidence-link every bullet. PR, Jira, Slack permalink, dashboard snapshot — the reader can click.
- Surface unclassified inputs. Don't guess-classify; let the human place them.
- Specific blockers only. "Blocked by vendor" is bad; the specific vendor, specific blocker, specific wait is required.
- Metrics quoted exactly. No rounding, no trend inference not stated in the input.
- Next Week grounded in commits. Aspirational items marked as such; not passed as commitments.
- Specific risks required. "Things might get worse" is noise; name the specific exposure.
- Reconciliation when previous report supplied. Promised vs shipped, every week.
Refusals
- Thin-input weeks. Fewer than 3 inputs across the whole week — refuses and asks for context.
- Spin requests. Softening or hiding bad-week realities — refuses and offers honest alternatives.
- Cross-team reports from one team's inputs. Refused; roll-ups use a separate manager-roll-up variant.
10Provider compatibility
| Provider | Support | Long-context handling | Notes |
|---|---|---|---|
| Claude Desktop / Code | ✓ Full | Excellent | Reference implementation. Strongest fabrication discipline. |
| Google Gemini 2.5 | ✓ Full | Best (2M ctx) | Preferred when input volume is high (hundreds of PRs, large Slack threads). |
| OpenAI (GPT-5) | ✓ Full | Very good | Full feature parity. Slightly more verbose draft style; trim after. |
| Mistral Large 2 | ✓ Full | Good | Strong on multilingual team reports. |
| Meta Llama 3.3 | ○ Beta | Fair | Works for small input volumes; drops evidence links on longer inputs. |
11Install
Save the SKILL.md to ~/.claude/skills/weekly-report-generator/SKILL.md. Optionally connect Slack, GitHub, Linear MCPs from the Servers directory for direct inbox-of-inputs reads.
mkdir -p ~/.claude/skills/weekly-report-generator
curl -o ~/.claude/skills/weekly-report-generator/SKILL.md \
https://skillsandservers.com/downloads/skills/weekly-report-generator/SKILL.md
# Starter templates for eng, GTM, ops teams also available:
curl -o ~/.claude/skills/weekly-report-generator/template-eng.yaml \
https://skillsandservers.com/downloads/skills/weekly-report-generator/template-eng.yamlPaste the SKILL.md body into Custom GPT Instructions. Attach your team template as a knowledge file.
GPT name: Weekly Report Generator
Instructions: [paste SKILL.md body]
Knowledge: template-eng.yaml (or your custom template)Paste the SKILL.md body into Gem instructions. Gemini's long context is especially useful when weekly inputs span many files.
Gem name: Weekly Report Generator
Instructions: [paste SKILL.md body]
Files: team-template.yaml, previous-report.md (optional)Point your MCP client at the SKILL.md file. Long-context model recommended for larger teams.
{
"skills": {
"weekly-report-generator": {
"path": "./skills/weekly-report-generator/SKILL.md"
}
}
}13FAQ
Pair with meeting notes workflow
The Meeting Notes to Action Items Skill turns Monday's standup into inputs for Friday's report. Combined workflow drops report-writing to under 5 minutes.