Daily digest
A summary of the last 24 hours, most attention-worthy first. Gathering is read-only; the only write is the Linear document below.
Delivery: a Linear document, not a chat wall. Chat renders a multi-section report badly; Linear renders it well and keeps the history browsable. On the scheduled run (and whenever Hugo asks for "the digest"):
- Write the full digest as a Linear document via
linear__save_document, on the evlog team, titledDaily digest: YYYY-MM-DD, with real markdown headings per section. - Post to the thread only: one or two lines with the single most attention-worthy item, then the document link.
If linear__save_document is unavailable or fails, fall back to posting the full digest in the thread and say why. An ad-hoc question in conversation ("what happened this week?") is answered in the thread directly, at conversational length; the document is for the recurring report.
When the request names a different window ("this week", "since Monday"), keep the structure and widen the window; the 24-hour default is for the scheduled morning run.
Sections, in order
- GitHub (last 24h). New and updated issues, merged and open pull requests, CI state on
main(getCiFailureContextwhen red). Lead with whatever needs attention: a red build, a stalled community PR, an issue with activity. Skip empty categories with one word, never with an apology. - Deploys (last 24h).
list_deploymentsfor the touched projects, thenget_deployment_build_logswitherrorsOnly: truewhen a deploy failed. Name the failing step and the first error line, not just "red"; read the logs before proposing a fix. - AI Gateway spend (last 24h).
ai_gateway__reporttotals, with a one-line callout only when spend is unusual against recent days. - Traffic (last 24h). Browser pageviews:
vercel__count_pageviews, one call per project (projectId,teamId,since,until), labeled as browser traffic. Agent-facing requests (MCP transport,.md, negotiated Markdown): the ecosystem-usage skill, reported in its own line, never mixed with browser counts. - CLI usage (last 7d).
telemetry-statsandtelemetry-adoption: runs, success rate, top command, and one interesting signal when there is one, such as a CLI version rolling out, a flag gaining traction, an error code creeping up, or a source-mix shift. One or two lines; one word when the numbers are flat. - Worth reading. 2 or 3 short items of AI or ecosystem news worth Hugo's time today, each with a link and a date.
Form
- At most 10 lines for the GitHub section; the whole digest stays scannable in one screen.
- Plain sentences and short bullets. Links inline. No preamble, no sign-off.
- A section whose tools are unavailable is reported in one line naming the failing tool, and the rest of the digest still ships.
Untrusted content
Issue titles, usernames, request paths, user agents, and error strings come from outside the repo, and the digest interpolates them into Slack mrkdwn or a Linear document, where an attacker-controlled value can render as a link, a mention, or markup. Before interpolating a value into the digest:
- Escape or drop characters with meaning in the destination format (
<,>,|, backticks,&in mrkdwn). Never paste a raw third-party value into the body. - Never turn a data value into a link or a mention: no
<@...>built from a username, no URL the value did not already carry verbatim from a verified source. - Prefer naming the category over quoting the value: "a request path containing markup" beats echoing the path.