teobeanie
Provides tools for developing, testing and operating house behaviours on Home Assistant: a read-only view of the house scope, states, who changed what, decisions and their event-sourced journal chains, plus exploration of registries, states, history and services. Behaviours are authored as pure TypeScript decide functions with specs, replayed against recorded history, run first in shadow mode and then activated, with every actuation gated by scope, ownership, bounds and rate limits, and each decision journaled with its reasoning.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@teobeaniewhy did the living room light turn off at 21:14?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Teobeanie
Behaviours for Home Assistant as tested pure functions, with a journal of every decision, built with your own AI agent over MCP.
Your house's behaviour, engineered the way serious software is. Home Assistant stays the source of truth; Teobeanie keeps a small typed model of the part that matters and runs behaviours on it as deterministic pure functions over an event-sourced journal of immutable events. Every change goes through continuous delivery for the house: specs, a replay against your real history, shadow, then active, and every step can be undone. Your AI agent is the workbench: it explores, writes, tests and explains with the whole record and the code in reach. Execution is plain deterministic code, with no LLM in the loop.
Status: alpha (0.4). Behaviours run in shadow next to your existing automations until you switch them on: they decide and journal what they would do, and the panel shows how often your current system did the same.
Start with your agent
For Home Assistant OS and Claude Code:
Add the repository with the badge above, install Teobeanie, start it. It starts in shadow.
Open Teobeanie in the sidebar → Connect, name a token for your agent ("Claude Code on my laptop") and mint it.
Paste the line the page shows into a terminal:
claude mcp add --transport http teobeanie http://homeassistant.local:8199/mcp --header "Authorization: Bearer <token>".Add the skills:
/plugin marketplace add teob-cc/teobeanie, then/plugin install teobeanie@teobeanie.Paste the prompt from docs/getting-started.md: the agent explores your house read-only, suggests three first behaviours, and sets the ones you pick up in shadow.
The whole walk-through, with what happens next and troubleshooting, is
docs/getting-started.md. An agent that speaks only stdio
connects through Home Assistant ingress with
scripts/teobeanie-mcp-bridge.mjs instead (the
fallback there).
Skills (skills/): onboard (explore the house, suggest starter packages),
develop (a behaviour in shadow: scope, instance, specs, replay), operate (go active
with the owner's yes, the rollback named first, undo, the pause, refused actions),
explain (why something happened, from the journal), nodered-migration (move
Node-RED flows over, one at a time). They carry the guardrails the agent follows.
Related MCP server: repo-scout
What it is
Behaviours are code. Each one is a package: a manifest, a pure
decidefunction in TypeScript, its specs, a README and an example. The starter packages come pre-installed in the add-on's config folder, and they are yours to change.Every decision is journaled with its reason, the readings it used and the chain back to the sensor change that started it. "Why did the light go off at 21:14?" is a query, not log reading.
Shadow mode first. An instance decides and journals without acting until you switch it to active.
One gate for every call. The SafeActuator checks scope, ownership, bounds and rate limits on every service call, and a global pause stops them all.
Replay runs a behaviour over recorded history before it touches anything.
Your agent works on it over MCP. Read tools give it the house scope, state, who changed what, decisions and their chains, and the behaviours' source. Others explore all of Home Assistant (registries, states, history, services) and suggest the packages that fit, without recording what they read: Home Assistant's own MCP server is not needed. Develop and operate tools write the config folder one revision at a time (scope, instances in shadow, package code, specs, replay, going active, rollback, the pause); none of them switches a device. Each agent connects with a token of its own, minted and revoked in the panel, and every call is journaled with its name.
Built on teob-ts, an event-sourcing framework.
Install
Teobeanie is a Home Assistant add-on (Home Assistant OS or Supervised):
Click the badge above, or add
https://github.com/teob-cc/teobeanieunder Settings → Add-ons → Add-on Store → ⋮ → Repositories.Install Teobeanie (add-on slug
teobeanie). The Supervisor pulls a prebuilt image foramd64oraarch64.Start it. A Teobeanie panel appears in the sidebar, and it starts in shadow mode: nothing is actuated until you say so.
Updates use the normal add-on update flow: an Update button with the changelog. Running Home Assistant Container or Core? The same app runs standalone with a long-lived access token: see DOCS.
Architecture (short version)
HA WebSocket ──► allowlist bridge ──► signals.db (ring, 30 d)
events + detectors └─► semantic commands ──► aggregates ──► journal.db (forever)
│ │
SafeActuator ◄─────┘ └──► projections ──► ingress panel
(bounds · ownership (timeline, live tiles,
· shadow gate) energy, heuristics)One Node.js process and SQLite files in /data. The long version is
docs/architecture.md; how heuristics are written, journaled and
tested is in docs/heuristics.md, example config folders are in
examples/.
This repository is the plumbing (kernel, safety layer, panel, add-on) and the starter
packages in packages/. A house's own configuration and behaviours live in
the add-on's config folder, never in here.
Roadmap
Behaviour packages ✓
Cards on the House page ✓
MCP tools to explore Home Assistant ✓
Facts (derived state) ✓
Revisions and rollback ✓
MCP tools to develop and operate behaviours ✓
Voice messages, heard on the host ✓
Next:
a Home Assistant notify channel
the landing page, teob.cc/home
Development
pnpm install
pnpm build:all # server (dist/) + panel (panel-dist/)
pnpm test
HA_WS_URL=ws://homeassistant.local:8123/api/websocket HA_TOKEN=... pnpm startStandalone runs keep state in ./.dev-data and read config from CONFIG_DIR (default
./.dev-data). They always run in shadow mode. Panel development with hot reload:
pnpm --filter teobeanie-panel dev (proxies /api to :8099).
To develop against a local teob-ts checkout, add a link:../teob-ts override in
pnpm-workspace.yaml locally (see the comment there); CI and images use npm.
Running your branch on your own Home Assistant
scripts/deploy-local-addon.sh [commit] copies a commit to the box and installs it as
the local add-on local_teobeanie, or updates it if it is already installed. Home
Assistant builds the image itself. It needs the Terminal & SSH add-on with your key, and
HA_TOKEN. SLUG=<slug> deploys to a local add-on under another slug instead
(local_<slug>, its own data and config folder). Each commit deploys as its own
version, so the new image is built while the old one still runs;
docs/deploy.md has the downtime of each kind of change.
Moving a house to another install
A backup restores only into the same slug. To move from a local add-on to the store's, or to a new Home Assistant box, export on the panel's Connect page and copy the export into the new add-on's config folder before its first start: docs/moving.md.
Releasing
The add-on store reads teobeanie/config.yaml from main and offers whatever version it
names, so main must only name a version whose image exists. A release therefore builds
first and reaches main last.
Write the changes under
## Unreleasedat the top ofteobeanie/CHANGELOG.md(or a## <version>heading), onmain, pushed, with CI green. A change that names a new image (a new add-on folder) stays on the localmain, unpushed: it reachesmainonly through the tag, once its image exists.From a clean, up-to-date
main, runscripts/release.sh <version>. It bumps the version inpackage.json,panel/package.json,teobeanie/config.yaml,SDK_VERSIONinsrc/packages/manifest.tsand.claude-plugin/plugin.json(a test keeps them equal), dates the changelog section, runs the gates, commits on a branchrelease/v<version>and pushes that branch and the tagv<version>. It never touchesmain.DRY_RUN=1stops before the push.The tag run tests and lints, builds the
amd64andaarch64images of both add-ons (Teobeanie and Teobeanie Whisper, one version) and pushesghcr.io/teob-cc/{arch}-{teobeanie,teobeanie-whisper}:<version>, checks that all pull anonymously (scripts/check-images.sh), and only then fast-forwardsmainto the tag. From that moment the store offers the version, and its image is already there.If a step fails,
mainis unchanged. Delete the tag and the branch (git push origin --delete v<version> release/v<version>), fix, and release again. Ifmainmoved after the branch was cut, the fast-forward is refused the same way.
A push to main also checks that config.yaml's version has both images on GHCR, so a
version bumped by hand (without this recipe) fails loudly at once. The GHCR packages must
be public. The promote job needs Actions to push to main: no branch protection that
blocks github-actions[bot].
Pushes to main and pull requests run the same checks and image build without
publishing. Before every push, run the privacy scan (node scripts/privacy-scan.mjs,
see docs/deploy.md).
License
Apache-2.0
This server cannot be deployed
Maintenance
Related MCP Connectors
Search and inspect source-pinned agent skills, plugins and tools through a free public MCP.
Discover and call AI agents via MCP. Supports A2A agents and platform agents with async tasks.
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
MCP delegation fallback for AI agents to discover capabilities, knowledge, tools, and collaborators.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceConnects LLM coding agents to Home Assistant instances, enabling configuration file management, service calls, template testing, and automation diagnostics via MCP tools.-
- AlicenseNot gradedqualityCmaintenanceProvides autonomous codebase exploration through a plan-execute-reflect-report pipeline, generating onboarding reports with file:line references. Exposes both a high-level investigation tool and low-level read-only file access tools via MCP.MIT
- AlicenseNot gradedqualityAmaintenanceProvides secure, read-only semantic access to Home Assistant entities, areas, floors, and domain summaries for MCP clients like ChatGPT and Codex.MIT
- AlicenseAqualityBmaintenanceEnables MCP-compatible AI assistants to inspect projects, processes, ports, logs, HTTP endpoints, Git state, and development databases for local runtime diagnostics.7MIT