Skip to content

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
GitHub
HubSpot
HubSpot
Grafana
Grafana
Mon 06:00
Agentcy
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

LayerWhat we use
TriggersCron weekly Monday 06:00
ConnectorsGitHub, HubSpot, Grafana, SQL (Stripe replica or warehouse), Google Workspace (Drive output)
AgentReporting agent with skills for executive-tone writing + KPI math
OutputPDF artifact written to Drive, Slack digest, optional email
Realmexec — separate from engineering data so PII filters can apply

What you'll build

  1. A weekly task that queries each KPI source.
  2. The agent computes WoW, MoM, and trailing-4-week deltas.
  3. A 1-page narrative is drafted: top 3 wins, top 3 risks, what changed since last week.
  4. Every claim has a citation — link back to the dashboard, PR, deal, or query.
  5. 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 exec configured
  • 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

Full PDF →

Variations

  • Per-function briefs — same recipe, different KPIs and audiences (Sales brief, Engineering brief, Finance brief). Same data file in recipes.ts lists 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: 400 instruction to the prompt — the agent respects it.

Next

Built by AgentcyLabs. For in-house deployment or Agentcy Cloud (PaaS) access, visit agentcylabs.com.