Insights
The Insights tab is brAIn acting as your home’s analyst. It reads your Home Assistant data and renders it as self-contained interactive cards: a headline, a handful of sharp numbers, and one chart built for your data rather than filled in from a template.

It learns before it reports
A fresh install has no cards, deliberately. A generic card about a house it has never looked at is noise on every run, and costs tokens producing it.
So the first thing that happens is a study, not a report:
- brAIn studies the home one topic at a time — naming and areas, occupancy rhythms, energy, climate, device reliability — and files what it finds in memory.
- It proposes cards grounded in what it actually found, each with a one-line reason citing the evidence. A proposal that could have been written for a different house isn’t a proposal.
- You pick. Nothing generates, and the scheduler stays idle, until you do.
The flow is resumable — close the panel mid-study and come back — and re-running it never re-studies a topic it already covered, because a study session is expensive.
If your home is too sparse
brAIn says what’s missing and stops. There is deliberately no canned fallback: generic cards about a house it can’t read would teach you to ignore the dashboard. Add more entities, let history accumulate, and run it again.
The ask bar has two verbs
Ask a question and it becomes a card. There’s no separate “new insight” dialog — asking is the way in.
Which rooms are coldest at night?Why did the hallway light come on at 3 am?What's actually driving my standby power?Which automations haven't triggered in 30 days?Is anything drawing more power than it did last month?+ Make recurring on the resulting card promotes it onto its own schedule, where it behaves exactly like any other card.
Start a line with “learn about…” or “study…” and brAIn goes reading instead. A study session digs through the registry, history and long-term statistics for that corner of the house and files what it finds in Memory and Findings — no card comes back. It runs for minutes, in the background.
learn about my boilerstudy my energy usefigure out how the upstairs heating actually behavesbrain ask "why is the garage cold" in the terminal is the same engine
against the same memory, printed as text instead of a card.
What a card is made of
For each card — and every asked question — brAIn:
- Fetches what the card needs rather than being handed the house. By default (⚙ Settings → How a card gets its data, set to Search) Claude gets a map of your home — how many entities of each kind exist, which areas they’re in, a few anchors like people and thermostats — plus the home memory document and read-only Home Assistant tools, and it looks up the rows the card actually needs: search by room or by name, read the few entities that matter, pull their history. A question about the hallway costs the hallway — measured on a real run, a 1,449-character prompt where the old path sent about 100,000. Snapshot is that old path, one slimmed snapshot of the whole slice and no tools — kept as a setting and as the automatic fallback when a search run fails or runs out of turns, so a card always appears (the fallback is logged). Either way, GPS coordinates never leave the house; only zone, state and areas are included.
- Renders it with a strict design system — a fixed categorical palette, one y-axis per chart, reserved status colours, light and dark mode, hover interactivity.
- Stores and renders the result — title, summary, highlight stats and a self-contained HTML visualisation, in a sandboxed iframe that cannot touch your HA session.
Neither mode can change anything. An insight run holds reading tools only, behind an explicit allow-list and an explicit deny-list of every acting tool — belt and braces, because a headless run can’t be prompted, and both lists are checked against the MCP server’s own tools in CI. The one path that changes your house is still the Findings tab’s Fix it button, which a person presses. Search is also the only mode that can afford history on a typed question — the one-shot path never had budget left after five hundred entities, so asked questions used to be answered from a single instant, with no trend behind them.
Energy cards anchor on Home Assistant’s long-term statistics: get_statistics reaches
back months in day/week/month buckets and survives recorder purges, so “compared to last
month” is a lookup rather than an extrapolation from a few days. brAIn keeps no statistics
store of its own on purpose — Home Assistant already has the sums.
Cards persist across restarts, refresh on their own schedules, and generation runs one at a time through a queue to stay friendly to subscription rate limits.
The card’s buttons
Two on the card, and the rest behind ⋯. Six glyphs in a row was most of the width of a card on a phone, and the title was what got squeezed out to make room for them.
| Control | What it does |
|---|---|
| ⤢ Expand | The only one on the card itself, because it’s the only one that acts on what’s on screen rather than on the card’s definition. |
| ⋯ → Regenerate | Run this card again now. |
| ⋯ → Edit | Name, icon, analysis focus and schedule. On an ad-hoc Ask card it’s Rename — name and icon only, because the question is the card. |
| ⋯ → Give feedback | Standing instructions for every future run. |
| ⋯ → Add to dashboard | YAML for a Webpage card on your own dashboard. |
| ⋯ → Delete | The card and its history. |
There is no “refresh everything” button. It used to sit in the top bar as a circular arrow that read like a page reload and in fact queued a Claude run for every card you had — minutes of work, and a real bite out of the usage the pill beside it was reporting.
Feedback sticks
⋯ → Give feedback is how you correct a card without editing its prompt:
- “Show costs in dollars, not kWh.”
- “Ignore the guest room sensor — it’s in a drawer.”
- “Stop telling me about the garage fridge, it’s meant to run all night.”
Each one is injected into every future run of that card until you remove it, and filed into memory at the same time. Send & regenerate applies it immediately.
Schedules, history and tags
- Per-card schedules — an interval, or fixed daily times (
07:00, 19:00, up to six) which take precedence over the interval and spend nothing in between.0means manual only. Fixed times cost far less than a short interval. - The next run, on the card — every scheduled card’s foot shows when it runs next (“next in 4 h”), so “why did my cards stop updating” has an answer on the card instead of a log line printed once. The countdown hides while a gate holds — paused, budget reached, or not signed in — rather than promising a run that won’t come.
- Run history — every run is kept per
history_keep_runs/history_keep_days, with a run selector, ‹ / › step buttons, andprev: …comparisons under each highlight. - Tags — the analyst tags each card by what it found, not by its category, so
#batteriessurfaces every card that hit a battery problem wherever it came from. The chip row scrolls sideways with ✦ All pinned at the left. Press ✎ on a card’s tag row to drop a bad tag or add your own; your edits survive regeneration, and new tags a later run discovers still appear.
Guesses
When a run believes something it can’t confirm, it says so as a claim you answer with one tap — “The garage fridge is meant to run 24/7 — right?” Open guesses sit at the top of the Findings tab, where everything waiting on your decision lives. ✓ Yes files it as a plain memory line; ✕ No records a dead end that is never revisited. Three open at a time, 14-day expiry, never re-proposed in any wording. The full model: Memory & Learning.
Deep presence
Presence analysis goes beyond home / not_home. brAIn walks the device registry and pulls
the sibling entities from each presence tracker’s physical device — the companion app’s
Wi-Fi SSID, geocoded address, detected activity, battery and charging state — and must
cite its evidence rather than parrot a state string:
Ben is at work — his phone has been on
OfficeNetnear 5th & Main, stationary since 09:12, and charging.
Dashboard cards
Any insight can be embedded on a dashboard with ready-to-paste YAML from ⋯ → Add to dashboard:
type: iframeurl: /local/brain/energy-<your-card-token>.htmltitle: Energyaspect_ratio: 90%Cards are served by Home Assistant itself at /local/… — same origin as every
dashboard, so they work on LAN, local SSL and Nabu Casa with no port mapping. The card
always shows the latest run and reloads every 15 minutes. Security model:
Reference.
Deleted cards don’t come back
There’s no restore list, and that’s the point: brAIn proposes the cards a given home should have, so the answer to “I want that card again” is to ask for it and let brAIn build it for the house it now knows.
Insight jobs are the other half
Cards are interactive deep dives in a panel. Insight jobs are the dashboard-native sibling: scheduled reports rendered to sensors, with markdown and ready-to-paste card YAML in their attributes, and an event that fires on completion — good for glanceable tiles and TTS briefings. Both read the same memory.
What it costs
Generating a card is the most expensive thing brAIn does — a bundle out, a whole rendered
visualisation back, typically 25k–45k tokens — so every run reports its own bill. One
figure, derived once server-side, readable in four places: the spinner while it runs
(“500 entities · ~33k tokens sent” — the ~ marks the only estimate), the card’s foot
(“41.2k tokens” beside the stopwatch, with the input/output split behind a hover), the
usage pill’s popover (an itemisation per card, biggest first), and one log line per run.
The itemisation is labelled as brAIn’s own runs, because when the pill shows your account’s
live figure it also covers the terminal, the chat and voice — and a breakdown read as
exhaustive is how you’d conclude a terminal session is free.
An asked question is the expensive kind. A category card sends its slice of the home; a question typed into the ask bar sends every entity plus device context, because it could be about anything. A handful of asked questions costs what a dozen scheduled refreshes do.
The panel’s ⚙ Settings dialog caps how much of each 5-hour session window brAIn may spend on scheduled work. Automatic runs pause at the budget; manual presses never do. The meter uses your real Anthropic account utilisation, so brAIn backs off when you are using Claude elsewhere. Press the usage pill in the top bar for both windows, their reset times and what the budget gates. Every control: Reference.