Every room, light, blind, and thermostat value is serialized into the shared State.
Jev Smart Home
Give the simulated house a command and see which devices would change.
Waiting for a command
Choose a preset or write one supported atomic command.
Configure home · one to four rooms
Living Room
4 devicesKitchen
3 devicesBedroom
4 devicesCommand history
Up to five commands in this browser session. Nothing is stored.
No commands yet.
02 / WHAT JUST HAPPENED
Before → Jev → After
Intent, scope, device, action, and compound are answered together.
Only compatible, sufficiently probable atomic commands update the simulated house.
Advanced
06 / SPECULATIVE FAN-OUT
One request, many possible questions
Before the request, the application does not know whether the text is a command, which room it names, which device matters, or which action applies. It still asks all five questions at once. Jev returns typed answers in parallel, and code consumes only the path that matters.
A speculative answer can be valid and still be irrelevant. The signal viewer labels which answers application code consumed and which it ignored.
07 / JEV DECIDES, CODE ACTS
Semantic judgment and state mutation stay separate
Decides meaning
- Intent
- Room or whole-house scope
- Device class
- Action
- Whether the command is compound
Owns execution
- Checks probability thresholds
- Validates device/action compatibility
- Updates simulated devices
- Adds or subtracts exactly 1°C
- Maintains session history
Implementation
03 / USE JEV WITH HOME ASSISTANT
Take the pattern into a real Home Assistant home
This page controls only a simulated house. HA-Jev ↗ is an independent community integration for real Home Assistant installations. It is neither part of this Playground nor TypeSafe's official smart-home demo.
Install HA-Jev 1.14.0 from source
- Check the prerequisites.
Use Home Assistant 2026.9 or newer. The default TypeSafe endpoint needs your own TypeSafe API key. A compatible endpoint you run yourself may be configured without a key.
- Add the HACS custom repository.
In HACS, open the three-dot menu → Custom repositories. Add
https://github.com/AboveColin/HA-Jevas type Integration, then search HACS for Jev, Download, and restart Home Assistant. As checked on 23 September 2026, hacs/default#11052 ↗ is still open; HA-Jev is not yet in the default HACS list. - Set up the integration.
Go to Settings → Devices & services → Add integration → Jev (TypeSafe). Enter the key for the default endpoint, or open Advanced to configure a compatible custom endpoint and model. Defaults are
https://api.typesafe.aiandjev-latest. Setup validates the connection with a live request. - Choose your use.
Create persistent questions or use
jev.noul,jev.choice,jev.score, and batchedjev.askin automations. For spoken commands, select Jev as the Conversation agent in your Assist voice pipeline and review which entities you exposed to Assist.
Manual alternative: copy the release's custom_components/jev directory into Home Assistant's config/custom_components/, restart, then add the integration. A manual copy will not receive HACS update notices. A key sent to a custom http:// endpoint travels without HTTPS protection; prefer HTTPS or a trusted local network. See the maintainer's installation guide ↗. Details were checked against HA-Jev 1.14.0 source ↗, not tested against a personal Home Assistant instance.
04 / TWO DIFFERENT HOME ASSISTANT PATHS
Questions for automations; an agent for Assist
Typed answers become sensors or action results
Persistent Noul, Choice and Score questions create Home Assistant entities that automations can read. The four jev.* actions return answers inside an automation; jev.ask batches several questions into one request. Actions may target entities, devices, areas, floors or labels, up to 250 resolved entities. Those explicitly selected targets are sent whether or not they are exposed to Assist. HA-Jev also tracks calls, input tokens, estimated cost and an optional daily token-budget tripwire.
One sentence routes to a built-in intent
The separate conversation agent snapshots up to 150 supported entities already exposed to Assist. Its entity-choice options come from that snapshot, so Jev selects an existing entity_id. One request asks five to seven questions, then HA-Jev interprets the relevant answers and, when allowed, calls Home Assistant intents for on, off, toggle, light brightness or state questions. Unsupported speech goes to a configured fallback agent, or receives a not-understood reply if none is set.
The TypeSafe official demo ↗ illustrates speculative fan-out and can use an LLM to split compound text or answer general conversation. HA-Jev's Assist agent instead falls back on a compound or free-text request; it does not partly execute a sentence before fallback.
08 / ONE REQUEST VS SEQUENTIAL CALLS
Ask the decision tree up front
One fan-out request
Waiting between questions
This is an architecture comparison, not a performance benchmark. The live demo makes exactly one evaluation request per Run.
09 / IMPLEMENTATION
Evaluate once, then mutate ordinary state
This original TypeScript sketch shows the boundary. The Jev API guide covers the validated endpoint and provider setup.
const response = await fetch("/api/evaluate", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
state: serializeHomeAndCommand(currentHome, command),
questions: {
intent: choice(intentOptions),
scope: choice(scopeOptions),
device: choice(deviceOptions),
action: choice(actionOptions),
compound: boolean("Does this request contain two or more different device-action pairs? Applying one action to all matching devices is still atomic."),
},
}),
});
const { result } = await response.json();
const signals = validateSmartHomeAnswers(result.answers);
const policy = resolveSmartHomeCommand(signals, 70);
if (policy.status === "execute") {
// Ordinary application code changes the simulated state.
currentHome = applySmartHomeCommand(currentHome, policy).home;
}This simulator does not control a real home; your application must enforce permissions and device constraints.
Limits & privacy
05 / REAL DATA & EXECUTION BOUNDARIES
Know which home state is sent before it can act
Selected state leaves Home Assistant
For targeted automation actions, HA-Jev builds records with entity_id, current state, friendly name when present, device class, unit, area and relative changed time; a supplied state template or note may add more context. include_attributes: true adds other attributes and can expose sensitive values such as a device_tracker's coordinates. The Assist path instead sends the spoken command plus the exposed, supported entities' IDs, names, domains, areas and states, and available area/floor names. This is selected state, not an upload of the entire Home Assistant instance. It goes to the configured provider.
Fallback before any real action
HA-Jev gates Assist actions using Choice confidence, not the winning Choice probability. Its default confidence floor is 0.6, a community integration setting, not TypeSafe guidance or this simulator's 70% rule. Low-confidence, compound, free-text and unsupported commands fall back as a whole before any device action; an already-satisfied on/off request may instead get a no-op acknowledgement. Locks are excluded from the Assist snapshot and action choices. Whole-house commands are off by default except a domain-bounded turn-off; a daily token budget can stop evaluations when configured. Brightness numbers are parsed by ordinary code, then execution goes through Home Assistant intents rather than model-generated service calls.
This simulator keeps its own selected Choice probabilities and P(compound) at a local 70% execution gate for simulated state only. A Choice probability distribution and its provider confidence are different outputs. HA-Jev's real Assist routing uses confidence plus its own deterministic checks; none of those settings changes this page's Demo.
10 / LIMITATIONS
A bounded simulator, not an IoT integration
- Three simulated rooms
- Lights on or off
- Blinds open or closed
- Thermostat warmer or cooler by 1°C
- One atomic command at a time
- Control real devices
- Connect to Home Assistant, Alexa, Google Home, or Matter
- Support locks, cameras, alarms, scenes, schedules, or exact values
- Use a second model to split compound requests
- Generate conversational answers
A fuller system could send compound requests to a generative model for splitting and conversation to a generative response path. This page deliberately demonstrates only Jev plus deterministic smart-home execution.
Sources
11 / SOURCES & NEXT STEPS