Telepath is the at-a-glance dashboard the shell shows on launch: a grid of cards that pull together your email, news, and other signals, each distilled by the LLM into a short summary. It’s powered by.

What it does

the dashboard service encapsulates three things:
  1. Parallel fetching: email and news (and other sources) are fetched concurrently via a ThreadPoolExecutor, so the dashboard assembles quickly.
  2. AI summarization: each source’s content is summarized by the LLM into a compact heading + body.
  3. Caching: summaries are cached by a content hash with a 30-minute TTL, so the same content isn’t re-summarized on every refresh.

Content-hash summary cache

Each piece of content is hashed (compute_content_hash); the summary cache is keyed on that hash:
  • Cache hit (within 30 min) → the stored {heading, body} is returned instantly.
  • Cache miss → a placeholder is shown and the summary is generated in the background (tracked in pending_summaries), then filled in. This ensures the UI never blocks waiting on the LLM.
Cached summaries are also exposed over HTTP:

Launching it

The dashboard is summoned by the demo or telepath query and auto-runs on shell startup. You choose which cards appear with --cards=:
The shell remembers your selection in SharedPreferences (telepath_cards_config) and replays it on the next launch. See Desktop Environment.

Why it’s separate

Telepath has its own service because its needs are different from a normal /chat: concurrency (many sources at once), caching (don’t re-summarize unchanged content), and background work (return the layout immediately, fill summaries in as they’re ready). Keeping it in isolates that logic from the main composition path.