Appearance
Executive reporting
A reliable Monday-morning narrative from a dozen tools without anyone manually copy-pasting numbers. The agent pulls KPIs, computes deltas, drafts a 1-page brief grounded in cited data, and emails it before the standup.
11ReportingExecutive reporting
Context Graph tribal knowledge
KPI definitions · trailing snapshots · exec tone style
Sources
GitHub
HubSpot
Grafana
Mon 06:00
Agentcy
Agentcy
Reporting agent
1-page brief
Output
PDF
+ email
At a glance
- Inputs: GitHub (velocity, PR throughput), HubSpot (pipeline value, conversion), Stripe (revenue, churn), Grafana (uptime, latency), plus any custom KPIs via SQL.
- Trigger: cron Monday 06:00 (output ready for 09:00 standup).
- Output: Markdown report → PDF, email to leadership, summary in Slack
#exec-brief. - Gates: read-only — every claim must cite its source row/dashboard/PR.
Stack
| Layer | What we use |
|---|---|
| Triggers | Cron weekly Monday 06:00 |
| Connectors | GitHub, HubSpot, Grafana, SQL (Stripe replica or warehouse), Google Workspace (Drive output) |
| Agent | Reporting agent with skills for executive-tone writing + KPI math |
| Output | PDF artifact written to Drive, Slack digest, optional email |
| Realm | exec — separate from engineering data so PII filters can apply |
What you'll build
- A weekly task that queries each KPI source.
- The agent computes WoW, MoM, and trailing-4-week deltas.
- A 1-page narrative is drafted: top 3 wins, top 3 risks, what changed since last week.
- Every claim has a citation — link back to the dashboard, PR, deal, or query.
- The PDF is rendered, dropped in Drive, and announced in Slack.
Prerequisites
- Each KPI source connector enabled
- A Google Drive folder for archived reports
- Realm
execconfigured - Optional: a "tone" skill describing your CEO's preferred style (terse, data-first, no fluff)
Worked example
rego
# policies/reporting.rego
package agentcy
# Strict read-only — never write to source systems.
default allow := false
allow if {
input.tool in {
"github.list_pulls",
"github.list_releases",
"hubspot.search_deals",
"hubspot.get_pipeline",
"sql.run_query",
"grafana.query",
"grafana.render_panel",
}
}
# Allow writing only to the designated Drive folder.
allow if {
input.tool == "google_drive.upload"
input.args.parent_folder == "exec-briefs"
}Task:
yaml
name: weekly-exec-brief
schedule: "0 6 * * MON"
realm: exec
agent: reporting-agent
enabled_skills: [executive-tone, kpi-math]
prompt: |
Draft this week's executive brief. Cover:
1. Engineering velocity (PRs merged, releases, p95 latency from Grafana).
2. Pipeline (HubSpot deals by stage, value, conversion vs last week).
3. Revenue (Stripe MRR, ARR, churn, top 5 new customers).
4. Risks (any KPI outside ±2σ of trailing 4 weeks).
Every claim must cite a source. Keep it 1 page.
Write the markdown to Drive folder "exec-briefs", render PDF, post a 5-line summary to #exec-brief.What good looks like
Monday 06:00 — Exec brief — Week 17
📈 Wins
- Revenue +8.2% WoW ($1.42M → $1.54M) — driven by 2 enterprise expansions ([HubSpot →])
- p99 checkout latency 280ms → 190ms after the index rollout ([Grafana →])
- 47 PRs merged, 12 above team baseline ([GitHub →])
🔻 Risks
- Pipeline coverage 2.1× → 1.7× (below 2× target) ([HubSpot →])
- One enterprise deal slipping ($340k, was committed Q2) ([HubSpot deal →])
🔮 Watch
- PR cycle time +18% WoW — investigate if review SLA needs attention
Variations
- Per-function briefs — same recipe, different KPIs and audiences (Sales brief, Engineering brief, Finance brief). Same data file in
recipes.tslists them as separate entries. - Daily sentinel — strip down to 5 KPIs, fire daily, only Slack-post on threshold breach.
- Open-mic pre-meeting — 30 minutes before all-hands, post the brief into the meeting Slack channel as a kickoff document.
Troubleshooting
- Numbers don't match BI tool. The brief queries the source of truth (Stripe API, HubSpot API), not your warehouse. Either reconcile, or point the recipe at the warehouse via SQL.
- Citations are stale. Make sure connector caches are sync'd Sunday night before the Monday cron.
- Report is too long. Add a
max_words: 400instruction to the prompt — the agent respects it.
Next
- Concept: Skills — for the tone/style skill
- Connector: Grafana — embedded panel rendering
- Connector: HubSpot