Terminal
The Terminal tab is Claude Code itself, running inside the add-on with your Home Assistant config in front of it and native access to your house: read states, call services, check history and traces, edit YAML, reload a domain.
It’s the same terminal the add-on runs, served through the same panel — so there’s no second sidebar entry and no second login.

What you’d actually use it for
The terminal is the right tab when the job is do this to my house, rather than tell me about my house.
- “Why did the hallway light come on at 3am?” — it reads the logbook, finds the automation, pulls the trace, and shows you the trigger that fired and the condition that passed.
- “Write me an automation that turns the towel rail on when the shower humidity spikes.” — it writes the YAML, validates it, reloads the domain, and then reads the trace to check it actually fires.
- “Rename every switch in the garage to what it actually controls.” — it lists them, proposes names from what each one is wired to, and renames the lot.
- “Something’s wrong with my energy dashboard.” — it reads the dashboard, the statistics behind it, and the error log, and tells you which sensor stopped feeding it.
- “Clean up the entities left behind by the Hue bridge I removed.” — dry run first, so you see the list before anything goes.
Anything it writes to under /config is snapshotted first, so
brain undo puts a file back if you don’t like the result.
Two faces, one session
The button in the corner switches between them, and so does ⚙ Settings. Both run the
same Claude Code, on the same login, in the same /config, with the same permissions — the
difference is entirely how you see it.
Chat is the default. Claude Code’s output rendered as a conversation: text that reflows to your screen, code blocks that scroll inside their own box, tool calls folded into one line each (tap one for its arguments and result), reasoning behind a Thinking line, and a real text box so dictation and autocorrect behave. ⏹ stops an answer in progress; + starts a new chat. It survives a reload, a locked phone, and the add-on restarting.
Classic is a true terminal — ttyd over tmux. Use it for anything that draws its own
screen (a TUI, htop, an installer), for running shell commands yourself, or just because
you prefer it.
The switch carries the conversation, both ways
Going to Classic releases the chat’s session and opens the terminal already inside it. Coming back picks up whatever the terminal was last doing, transcript and all. You don’t have to finish a thought in the face you started it in.
One honest limit: only one Claude Code process can own a conversation at a time, so this is a hand-off, not a mirror — the face you leave lets go, the face you arrive in takes over with the full history. Your shell in the classic terminal is never killed to make that work; if you had something running, it’s still sitting there.
The command palette
Type / for Claude Code’s own commands, or brain / ha for brAIn’s.
The palette lists what your install actually has — including anything you’ve put in
/config/.claude/commands, and every subcommand the two CLI dispatchers
print. Neither list is written down in the panel, so neither can go stale. ↑/↓ to move,
Enter or Tab to pick. A few Claude Code commands are REPL-only (/help among them) and say
so rather than failing.
On a wide screen, a rail of conversations
From about 1100px the chat grows a column down the left listing every conversation in
/config — whichever face made it — with + for a new one and the one you’re in marked
rather than hidden. Picking one resumes it.
It’s the same list and the same resume as the ⋯ menu, so nothing lives only in the rail. Below that width it isn’t drawn at all: 248px of conversations is most of a phone, and ⋯ → Conversations is still the way in.
A new chat doesn’t lose the old one
Claude Code keeps the conversation and it stays in the list. What a new chat costs is that the next thing you say belongs to a separate conversation — not that anything was forgotten.
Which model, and how full
Under the message box, quietly: the model that’s actually answering, and how much of the
context window the conversation is using — 42k / 200k context · 21%, turning amber past
80%.
The number is the CLI’s own report of what it sent on the last turn, and what it sent is the conversation so far, so it’s measured rather than estimated. Cached parts count: a cached prompt still occupies the window, it’s only cheaper to send. For a model with no published window, you get the token count and no percentage — a percentage of a guessed denominator is worse than none.
The ⋯ menu
- New chat — start again in a separate conversation.
- Conversations — the same list as the rail: every conversation in
/config, started in either face. Pick one and it replays into the pane and carries on. Both faces stand in the same directory, which is what lets each see the other’s conversations at all: Claude Code files them per working directory. - Session details — the model, the project directory, how you’re being billed, and this conversation’s id. Copy the id to resume the same conversation from an SSH session or another machine.
- Switch face — the same switch as the corner button.
A per-message price only appears if an API key is paying
On a Pro or Max subscription those tokens are already bought, so there is nothing to charge — the footnote shows the duration and turn count instead.
On a phone
The terminal takes the room it needs. The bar above folds away by itself while the software keyboard is up and comes back when you dismiss it; ⤢ in the corner folds it away for good, and the same button brings it back. tmux drops its status line on a narrow terminal too — one row out of about twenty, spent on the date.
In Classic, a one-tap toolbar sits above the keyboard with the keys a terminal needs and a
touchscreen doesn’t have: ESC, Tab, arrows, PgUp/PgDn, ^C, ^D, ^L, ^U, and
the punctuation that’s two keyboard layers deep on iOS — /, @, #, !, |. Copying an
OAuth URL out of the terminal works, which on iOS it normally doesn’t.
Permissions
The terminal runs with the same pre-approved tool permissions as the rest of brAIn, written
to /config/.claude/settings.local.json at startup — MCP tools, Bash, Read, Write, Edit,
WebFetch and WebSearch. Claude Code runs as a non-root user, and secrets.yaml is never
snapshotted and never edited.
If you’d rather not be asked at all, dangerously_skip_permissions in the add-on
configuration turns the prompts off for the interactive terminal only. It’s off by
default and it’s the one option worth thinking about before you change it. See
Reference.