Daily report
Hidden Daily Report agent: dashboard card controls, schedule, toolboxes, editable instructions, memory directives, Expand in Chat, and edit-builder quirks.
What it is
HumanBehavior ships a Daily Report — a hidden, undeletable system agent that writes a 7-day product analytics briefing (compared with the prior 7 days). It reuses the normal agent stack (run loop, toolboxes, agent_runs conversations, chat UI) instead of a parallel report pipeline.
Identity flag: agentConfig.system.builtInDailyReport === true
Display name: Daily Report
It is excluded from the Manage Agents list API so it does not clutter /agents.
Where you interact with it
Dashboard card
On Dashboard, the Daily Report card (when the SDK is connected):
| Control | Behavior |
|---|---|
| Title | Daily Report |
| Summary teaser | Short prose rewrite of the latest completed report (~3-line clamp in UI) |
| Generated timestamp | Relative / preferred date formatting |
| Failed indicator | Red-dot tooltip Failed |
| Refresh summary | POST /api/projects/:id/reports with { force: true } — kicks a new run; spinner while pending/streaming |
| Report settings | Navigates to /agents/edit/:agentId?builtin=report |
| Expand in Chat | Reveals the hidden conversation (POST …/conversations/:id/reveal) and opens /home?c=:conversationId |
The card stays collapsed/hidden until the first summary exists (except failed status, which can surface without teaser text). First report is bootstrapped on SDK connect via POST /reports if none exists; afterward a global hourly cron fans out to each project at the project owner’s local midnight.
Soft timeout for a run: 15 minutes (spinner failsafe).
Builder (Report settings)
Same create/edit builder with report-specific chrome:
- Back label: Back to dashboard
- Name locked (helper: built-in name can’t be changed)
- Automations / preview / delete suppressed — schedule is external
- Instructions remain editable (re-provisioning does not overwrite a user’s edited prompt)
What the report covers (default instructions)
Default seeded instructions ask for a full weekly briefing with evidence from analytics, Issues, and session replays:
- Headline — most important change and likely driver
- Traffic & engagement — users, sessions, pageviews, WoW, charts
- Pages & paths — top / rising / falling routes
- Conversion / funnels — drop-offs and shifts
- Revenue & monetization — only if Stripe is connected; otherwise omit
- Issues & errors — spikes, routes, impact
- Session replay evidence — watch real sessions; attach inline replays
- What to watch next — prioritized follow-ups
Per-run trigger message is simply: write today’s report following saved instructions. Runtime time/timezone come from the shared runner.
Toolboxes on the agent
Fixed set (kept on re-provision):
product_analyticswatch_replaysissuesconversation_memory
Model id: claude-sonnet-5 (registry id used for scheduled runs).
Memory directives (seeded once)
On first creation, binding agent-scoped memory directives are seeded (user-editable/deletable afterward; not re-seeded every run), including:
- Ground claims in queried data; never fabricate
- Prefer charts/tables; never chart a single scalar
- Never use emojis
- Never name tools/tables/internal systems in user-visible text
- Follow-ups: investigate with read-only tools and cite evidence
Visible under the agent’s Memory tab in the builder/run UI.
Card teaser vs full report
- Full report: Sonnet run with charts/tables/replay embeds in the conversation
- Card teaser: Haiku rewrite to plain prose (~650 char soft target); UI ellipsizes overflow
- Expand in Chat is where the full briefing and follow-up Q&A live
Thread titles look like Daily Report · <Mon D> in the owner’s timezone.
Status values you may see
From GET /api/projects/:id/reports: pending · streaming · complete · failed (plus passthrough strings). While regenerating, the API can keep showing the last good summary as content with the newest run’s in-flight status.
Beginner gotchas
- You will not find Daily Report under Manage Agents — use the Dashboard card.
- Until Expand in Chat, report threads stay out of the sidebar Chats list.
- Editing instructions in Report settings changes future runs; the system will not reset them on cron.
- No Stripe → no revenue section (by design).
- Refresh enqueues work; expect tens of seconds to minutes, not an instant rewrite.