Agent skill

Reporting

by ericrisco in ericrisco/rsc-harness

A skill your agent uses when a recurring report must ship itself on a cadence — weekly digest, monthly exec pack, board pack — via a fetch→narrate→render→deliver pipeline with a schedule and a…

MITAuto-check passedBusiness, Finance & HR

Install Reporting

skills CLI
$ npx skills add ericrisco/rsc-harness --skill reporting -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ericrisco/rsc-harness reporting --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/reporting .claude/skills/reporting && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
reporting
GitHub stars
156
Token cost
~2.7k tokens
SKILL.md length
1,252 words
Files
5 (incl. scripts, references)
Skills in repo
229
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when a recurring report must ship itself on a cadence — weekly digest, monthly exec pack, board pack — via a fetch→narrate→render→deliver pipeline with a schedule and a…

  • A recurring report must ship itself on a cadence — weekly digest
  • SKILL.md covers Step 0 — Write the report…, Decide: push report vs live…, Pick the artifact format and The four-layer pipeline: fetch…, plus 4 more sections
  • Runs Shell scripts from its folder
  • Monthly exec pack

What it does

Reporting is an agent skill from ericrisco/rsc-harness. Use when a recurring report must ship itself on a cadence — weekly digest, monthly exec pack, board pack — via a fetch→narrate→render→deliver pipeline with a schedule and a freshness gate. NOT a live view people slice (that is dashboard), NOT picking which KPIs to track (that is kpi-framework), NOT a one-off investigation (that is analytics).

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/pipeline.md`).

It sits in Business, Finance & HR, covering OKRs and executive reporting and Newsletters. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.

When your agent uses it

  • A recurring report must ship itself on a cadence — weekly digest
  • Monthly exec pack
  • Board pack — via a fetch→narrate→render→deliver pipeline with a schedule and a freshness gate

Example prompts

  • “/reporting”

Requirements

  • Python 3
  • A Bash shell

What it can do on your machine

Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Shell), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Reporting loads about 2.7k tokens when it runs, and up to ~4.8k if it reads all its reference files. Until then it costs about 90 tokens; SKILL.md has 1,252 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~90
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 1,252 words, ~2,688 tokens.

Download SKILL.mdSave it as .claude/skills/reporting/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
reporting
description
Use when a recurring report must ship itself on a cadence — weekly digest, monthly exec pack, board pack — via a fetch→narrate→render→deliver pipeline with a schedule and a freshness gate. NOT a live view people slice (that is `dashboard`), NOT picking which KPIs to track (that is `kpi-framework`), NOT a one-off investigation (that is `analytics`).
tags
reporting, automated-reports, recurring, stakeholder-reporting, scheduled-delivery, data-analytics
recommends
dashboard, kpi-framework, analytics, automation-flows, email-connector, spreadsheet-ops, google-workspace, notion-connector, github-actions
origin
risco

reporting — the standing artifact that ships itself

A report is a push artifact: a fixed snapshot that lands in someone's inbox or shared drive on a cadence, the same shape every period, with no human assembling it. That is the whole job. If a human opens a live view to slice numbers themselves, that is pull — a dashboard, not a report. Hold that line; almost every failed "reporting" project is a dashboard wearing a report's name, or a report nobody can trust because the numbers went stale and no one noticed.

Your deliverable is a runnable pipeline, not advice: a template, a generation script, a schedule, and a delivery step, with a freshness gate so it fails loud instead of shipping yesterday's numbers.

Step 0 — Write the report contract (no contract, no build)

Before any code, pin six fields. An undefined audience is a report no one reads; an undefined source is a number no one can defend.

FieldWhat it fixesExample
AudienceWho reads it → sets depth and tone"5-person leadership team"
CadenceWhen it ships → sets the scheduler"every Monday 08:00 Europe/Madrid"
SectionsThe fixed skeleton, same every periodExec summary · revenue · pipeline · risks
Metric sourceWhere numbers come from + who owns themmetrics.csv from the data team
ChannelThe artifact + transportPDF over email
OwnerWho gets paged when it breaksa named person, not "the team"

Rule: you consume an agreed metric set — you do not adjudicate which KPIs matter. If the ask is "which metrics should we even track?", that is kpi-framework, not this skill. The contract names the source and its owner so a wrong number has an address.

Decide: push report vs live dashboard (this branches — settle it first)

Audiences want a citable snapshot for the period more often than a live feed — that is why push wins for exec summaries, weekly reviews, and finance close packs.

Signal in the askRoute
"Same summary, every week/month/quarter"reporting (here)
"Consistent snapshot the board can cite in a meeting"reporting (here)
"It must arrive even if no one logs in"reporting (here)
"A screen people open to filter/drill live"dashboard
"Self-serve, slice by region/date on demand"dashboard

When both are wanted, build the report and let it link to the dashboard as a "go deeper" footer.

Pick the artifact format

FormatWins whenNotes
Email-body HTMLShort digest, ≤1 screen, read on a phoneInline the key numbers; no attachment to open
PDFExec / client / board, fixed layout that must look identical for everyoneThe default for anything formal; pinned render stack below
SpreadsheetAnalysts who will re-filter and pivot the data themselvesHand off the data, not a picture → spreadsheet-ops
Notion / living docInternal team, the doc evolves and gets commentedPage over file → notion-connector

A board pack is a PDF; an analyst hand-off is a spreadsheet. Picking PDF for analysts who wanted to pivot is the most common format miss.

The four-layer pipeline: fetch → narrate → render → deliver

Keep the four layers separate so each is testable and the template never knows where data came from.

Pinned stack (Python, the most-documented 2025 PDF path — verified on PyPI 2026-06-02): pandas (data) → Jinja2 (HTML template) → WeasyPrint 68.1 (HTML+CSS → PDF), Matplotlib for embedded charts. Pin WeasyPrint — major versions change CSS support, so an unpinned bump can silently reflow a board pack. Re-check PyPI before you freeze, then freeze what you resolve.

python
# render.py — minimal fetch → narrate → render. Delivery + charts live in references/pipeline.md.
import pandas as pd
from jinja2 import Environment, FileSystemLoader
from weasyprint import HTML  # WeasyPrint==68.1

def build_report(metrics_csv: str, params: dict) -> bytes:
    df = pd.read_csv(metrics_csv)                      # fetch
    df = df[df["region"] == params["region"]]          # per-recipient scope, NOT a new template
    cur, prev = df["revenue"].iloc[-1], df["revenue"].iloc[-2]
    ctx = {
        "title": f'{params["region"]} weekly revenue',
        "period": params["period"],
        "summary": narrate(cur, prev),                 # narrate (see below)
        "rows": df.tail(8).to_dict("records"),
    }
    env = Environment(loader=FileSystemLoader("templates"))
    html = env.get_template("report.html.j2").render(**ctx)   # render
    return HTML(string=html).write_pdf()

Rule: one template, per-recipient params — regional managers each get their region from the same report.html.j2, scoped by params, never a forked template per recipient. A template-per-recipient codebase rots the first time the layout changes. The full worked template, the Matplotlib base64 chart embed, the per-recipient loop, the GitHub Actions workflow, and the freshness gate are in references/pipeline.md.

The narrative layer (the part that gets read)

Executives read the executive summary and stop. Lead every report with: the report's purpose in one line, 3 key takeaways, and what changed versus last period. Then per section, one period-over-period delta sentence and one "so what". An annotated chart callout is retained; a bare chart is not.

python
def narrate(cur: float, prev: float) -> str:
    delta = (cur - prev) / prev * 100
    arrow = "up" if delta >= 0 else "down"
    flag = " — investigate" if abs(delta) >= 20 else ""    # anomaly callout
    return (f"Revenue {arrow} {abs(delta):.1f}% vs last week "
            f"(€{cur:,.0f} from €{prev:,.0f}){flag}.")

Bad → Good, the difference that decides whether the report is useful:

  • Bad: a table row Revenue | 248,300 | 201,400. The reader must do the math and guess if it matters.
  • Good: "Revenue up 23.3% WoW (€248,300 from €201,400) — investigate: driven by the enterprise renewal that won't recur next week."

The numbers are the evidence; the sentence is the report.

Show full SKILL.md (516 more words)Show less

Schedule + reliability gate (where reports actually die)

Reports die two ways: stale data ships silently, and a silent break means no one notices for weeks. Treat the schedule as managed infrastructure.

Where to run it:

SituationScheduler
You already run a server / cron hostcron (0 8 * * 1 = Mondays 08:00)
No server, want zero infraGitHub Actions on: schedule: - cron: — the recommended cloud option
Multi-app event wiring beyond a timerroute the plumbing to automation-flows

This skill owns the report-shaped concern (contract, narrative, artifact) and uses a scheduler — it does not teach scheduling in general. The actual transport (SMTP/Gmail send) belongs to email-connector; for a Drive/Workspace destination see google-workspace. The GH Actions schedule: YAML is in references/pipeline.md.

Reliability checklist — every recurring report:

  • Freshness gate before send — assert the source is newer than the last period; if stale, do NOT send, raise instead. A report that consumes dirty data is not this skill's job to clean — that is data-cleaning; this gate only refuses to ship known-stale numbers.
  • Fail loud — on any error, alert the owner (the report not arriving is itself a silent failure).
  • Idempotent run — re-running for the same period produces the same artifact, no duplicate send.
  • Dead-report cleanup — if no one opened the last N editions, kill the schedule. Unread reports are pure cost and noise.

Anti-patterns

Anti-patternWhy it bitesDo instead
Email a live dashboard link, call it "the report"Recipient must log in and slice; most won't, the snapshot is lostShip the fixed artifact; link the dashboard as a footer
No freshness gateStale numbers ship silently; trust dies on the first wrong figureAssert source newer than last period; refuse to send if stale
One mega-report for every audienceExecs drown in analyst detail; analysts can't refilter a PDFContract per audience; one template, per-recipient params
Raw metric dump, no narrativeReader does the math, misses what changed, stops opening itExec summary + 3 takeaways + a "so what" per section
Schedule with no failure alertA broken job is invisible for weeks; the report just stopsFail loud to the named owner on any error
A template forked per recipientLayout change must be made N times; they driftSingle template scoped by params
Redefining KPIs inside the reportThe report quietly becomes the metric authority, numbers divergeConsume an agreed set; defer definition to kpi-framework
Unpinned WeasyPrint / render libA minor bump reflows the board pack with no warningPin (WeasyPrint 68.1) and re-check PyPI before changing
Hand-assembling the digest weeklyIt breaks the week the owner is on leaveAutomate the pipeline end to end; a human only reads it

Verify

Run scripts/verify.sh (read-only; pass a path to a generated pipeline directory, or run in it). It confirms a Jinja2 template renders against a sample context without error, the generation script produces a non-empty PDF/HTML artifact, a schedule definition exists (a crontab line or a .github/workflows/*.yml with a schedule: block), and a delivery step is wired. It soft-warns if no freshness/failure gate is detected, and exits 0 on an empty/clean target — nothing to check is not a failure.

© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (scripts, references) in skills/reporting of ericrisco/rsc-harness.

  • SKILL.md
  • evals/README.md
  • evals/cases.yaml
  • references/pipeline.md
  • scripts/verify.sh

Open the folder on GitHubat commit 92fde8f

Compare with similar skills

Reporting next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Reporting compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Reporting this skillericrisco/rsc-harness156—~2.7kAutomated safety check: PassMIT
Analytics Strategyrampstackco/claude-skills9351 repos~2.4kAutomated safety check: PassMIT
Pine BacktesterTradersPost/pinescript-agents1671 repos~3.9kAutomated safety check: PassNone
Onboarding Plannerbpinheiroms/dotfiles108—~5.4kAutomated safety check: PassNone
Replit Decksanqiufong/slides-from-anything1321 repos~2.9kAutomated safety check: PassApache-2.0
Building Streamlit Dashboardsiusztinpaul/designing-real-world-ai-agents-workshop512—~1.1kAutomated safety check: PassApache-2.0

Similar skills

  • Analytics Strategy

    rampstackco/claude-skills

    Design measurement frameworks including event taxonomy, KPI hierarchy, dashboard architecture, attribution models, and analytics implementation strategy.

    935 GitHub starsUsed in 1 repo~2.4k tokens
    Business, Finance & HRAuto-check passed
  • Pine Backtester

    TradersPost/pinescript-agents

    Implements comprehensive backtesting and performance metrics.

    167 GitHub starsUsed in 1 repo~3.9k tokens
    Business, Finance & HRAuto-check passed
  • Onboarding Planner

    bpinheiroms/dotfiles

    Plan high-conversion mobile app onboarding flows from scratch.

    108 GitHub stars~5.4k tokensUpdated 4 mo ago
    Business, Finance & HRAuto-check passed
  • Replit Deck

    sanqiufong/slides-from-anything

    Single-file horizontal-swipe HTML deck in the style of Replit Slides's landing-page template gallery.

    132 GitHub starsUsed in 1 repo~2.9k tokens
    Business, Finance & HRAuto-check passed
  • Building Streamlit Dashboards

    iusztinpaul/designing-real-world-ai-agents-workshop

    Building dashboards in Streamlit. An agent skill from iusztinpaul/designing-real-world-ai-agents-workshop.

    512 GitHub stars~1.1k tokensUpdated 4 mo ago
    Business, Finance & HRAuto-check passed
  • Massing Bim

    ibuilder/massing

    Drive a Massing BIM/AEC project from an AI agent over MCP — read a project's status, records, CDE, KPI and model-quality checks; run standards-compliance, schedule-risk, embodied-carbon, permit-…

    121 GitHub stars~1.1k tokensUpdated 5 days ago
    Business, Finance & HRAuto-check passed

More from ericrisco/rsc-harness

All 229 skills in this repo
  • Ab Testing

    ericrisco/rsc-harness

    A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…

    156 GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed
  • Accessibility

    ericrisco/rsc-harness

    A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…

    156 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Ads

    ericrisco/rsc-harness

    A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…

    156 GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed
  • Agent Eval

    ericrisco/rsc-harness

    A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…

    156 GitHub stars~3.2k tokensUpdated yesterday
    Auto-check passed
  • AI Media

    ericrisco/rsc-harness

    A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…

    156 GitHub stars~3.3k tokensUpdated yesterday
    Auto-check passed
  • Analytics

    ericrisco/rsc-harness

    A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.

    156 GitHub stars~2.8k tokensUpdated yesterday
    Auto-check passed

Questions about Reporting

What does Reporting do?

A skill your agent uses when a recurring report must ship itself on a cadence — weekly digest, monthly exec pack, board pack — via a fetch→narrate→render→deliver pipeline with a schedule and a…. Reporting is an agent skill from ericrisco/rsc-harness. Use when a recurring report must ship itself on a cadence — weekly digest, monthly exec pack, board pack — via a fetch→narrate→render→deliver pipeline with a schedule and a freshness gate.

When should I use Reporting?

Reporting fits situations like: A recurring report must ship itself on a cadence — weekly digest; monthly exec pack; board pack — via a fetch→narrate→render→deliver pipeline with a schedule and a freshness gate.

How do I install Reporting in Claude Code?

Run `npx skills add ericrisco/rsc-harness --skill reporting -a claude-code`. Or copy the skill folder (skills/reporting in ericrisco/rsc-harness) into .claude/skills/reporting in your project. Claude Code loads it when a task matches its description.

How do I install Reporting in Codex?

Run `npx skills add ericrisco/rsc-harness --skill reporting -a codex`. Or copy the skill folder (skills/reporting in ericrisco/rsc-harness) into .agents/skills/reporting in your project. Codex loads it when a task matches its description.

Can I use Reporting in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill reporting -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/reporting, .gemini/skills/reporting, .github/skills/reporting and .opencode/skills/reporting in your project.

What does Reporting need to run?

Going by SKILL.md and its folder, Reporting needs a shell for the scripts in its folder. Our summary lists: Python 3; A Bash shell.

Does Reporting access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Reporting safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Reporting use?

Reporting is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Reporting use?

About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.1k tokens, read only when the agent opens those files.

What are the alternatives to Reporting?

Skills that share tags, products or a category with Reporting: Analytics Strategy (rampstackco/claude-skills, 935 stars), Pine Backtester (TradersPost/pinescript-agents, 167 stars), Onboarding Planner (bpinheiroms/dotfiles, 108 stars) and Replit Deck (sanqiufong/slides-from-anything, 132 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Reporting?

ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.

Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.