Use case · Operations

The daily report that writes itself, from real data

Every morning: yesterday’s commits, open approvals, task status and today’s schedule, assembled from APIs and posted to the group. Numbers come from command output, never invented; a missed run pages the watchdog.

Hedy automates daily reports by pulling live data straight from your systems' APIs, so every number is the literal output of a real query, never invented. The evidence gate forces each figure to cite its source verbatim, so a reader can trace "revenue: 48,210" back to the exact rows. Reports run on cron with an explicitly declared delivery target (a named Lark or Slack channel), never an implicit "last channel," and a watchdog fires an alert if a run stalls or a source returns empty. Self-hosted; one Hedy owns the whole reporting cadence.

Last updated: 20 July 2026

How Hedy runs it

01

Scheduled, not prompted

A cron job with an explicit delivery target — not "whoever asked last".

02

Scripts produce the numbers

Counts come from command output and API responses. If a source is down, the report says so.

03

Posted where work happens

The Feishu, Lark or Slack group of your choosing, on your schedule and timezone.

04

Watchdog-supervised

A missed run pages the watchdog. You will never silently not-get a report.

Governed by design

  • Numbers are traceable to their source commands
  • Delivery targets are declared in configuration, reviewable any time
  • Token spend for scheduled work is metered per employee

In depth

A daily report is only useful if the numbers are real. Hedy builds each report by calling your systems directly, your database read replica, your analytics API, your billing or ticketing endpoints, and the figures it prints are the literal output of those queries. There is no summarization layer that guesses. The evidence gate requires every number to carry a verbatim citation back to the command that produced it, so a reader can click from a headline figure to the exact row set. If a source returns nothing, Hedy says the source was empty; it does not fill the gap with a plausible-looking estimate.

This is the opposite of a cloud AI assistant that lives in your chat and paraphrases whatever scrolled by. Hedy runs on your own infrastructure (Docker or K8s, about 30 minutes with compose, air-gap supported), reads through ACL-scoped retrieval so a report only contains what its intended audience is cleared to see, and calls models through your own keys, including local vLLM or Ollama, so raw data never leaves your network. One Hedy owns the whole reporting job end to end instead of adding a seat to a team.

Scheduling is governed, not implicit. Every cron job declares its delivery target explicitly, a named Lark or Slack channel, because "send it wherever I last spoke" is exactly how a 9am finance report leaks into a public channel. Delivery is a whitelisted write action: Hedy defaults to denying writes and only sends to targets that are pre-approved, with the send recorded in an append-only audit log.

A watchdog backs the schedule. If a report run stalls, a data pull times out, or a query comes back empty when it shouldn't, the watchdog raises an alert to the declared channel instead of silently skipping the day or shipping a blank report. The failure is visible and attributable. You get a report you can trust the numbers in, delivered where you decided, or you get told exactly why one didn't arrive.

Questions

Where do the numbers in Hedy's daily reports actually come from?
Directly from your systems. Hedy calls your APIs, database read replicas, and internal endpoints, and every figure in the report is the literal output of that query or command. The evidence gate requires each number to cite its source verbatim, so any figure is traceable back to the exact rows that produced it. Nothing is estimated or paraphrased.
What happens if a data source is down or returns no data?
Hedy reports the source as empty rather than inventing a number to fill the gap. Separately, a watchdog monitors scheduled runs: if a pull stalls, times out, or returns empty when it shouldn't, it raises an alert to the declared channel instead of silently skipping the day or delivering a blank report.
How does Hedy decide where to send a scheduled report?
Every cron job declares its delivery target explicitly, a named Lark or Slack channel. Hedy never uses an implicit "last channel I spoke in" target, which is how sensitive reports leak. Delivery is a whitelisted write action, denied by default unless the target is pre-approved, and every send is written to an append-only audit log.
Does report data leave our network?
No. Hedy is self-hosted on your own infrastructure via Docker or K8s, with air-gap deployment supported, in about 30 minutes with compose. It uses your own model keys, including local vLLM or Ollama, and there are no sub-processors, so the raw data behind your reports never leaves your environment.

Related

hedy.one

See it on your own infrastructure.

Book a demo