Jev PlaygroundSmart Home

Jev Smart Home

Give the simulated house a command and see which devices would change.

MY HOMESimulated home · Real Jev decisions
Natural-language smart home command
COMMANDOne atomic action

Run this example command, then change a room name or action to see what changes.

Only this simulated home can change. Your command is sent to this site’s server when you run it.

RESULTApplication-owned policy
Waiting for a command.

Waiting for a command

Choose a preset or write one supported atomic command.

Configure home · one to four rooms

Living Room

4 devices
Ceiling lightON
Floor lampON
BlindsOPEN
Thermostat22°C

Kitchen

3 devices
Ceiling lightOFF
BlindsOPEN
Thermostat21°C

Bedroom

4 devices
Ceiling lightON
Bedside lampOFF
BlindsCLOSED
Thermostat20°C
SESSION

Command history

Up to five commands in this browser session. Nothing is stored.

No commands yet.

02 / WHAT JUST HAPPENED

Before → Jev → After

BEFORECurrent home state

Every room, light, blind, and thermostat value is serialized into the shared State.

JEVFive typed judgments

Intent, scope, device, action, and compound are answered together.

AFTERDeterministic mutation

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.

ONE STATEHome + command
IntentScopeDeviceActionCompound

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

JEV

Decides meaning

  • Intent
  • Room or whole-house scope
  • Device class
  • Action
  • Whether the command is compound
APPLICATION CODE

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.

Real Home Assistant→HA-Jev selects home state→Configured Jev provider→Typed answers→Automation or Home Assistant intent

Install HA-Jev 1.14.0 from source

  1. 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.

  2. Add the HACS custom repository.

    In HACS, open the three-dot menu → Custom repositories. Add https://github.com/AboveColin/HA-Jev as 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.

  3. 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.ai and jev-latest. Setup validates the connection with a live request.

  4. Choose your use.

    Create persistent questions or use jev.noul, jev.choice, jev.score, and batched jev.ask in 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

A / QUESTIONS & AUTOMATION

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.

B / ASSIST CONVERSATION

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

THIS DEMO

One fan-out request

State + five questions → answers → code
SEQUENTIAL ANTI-PATTERN

Waiting between questions

Intent call ↓ Scope call ↓ Device call ↓ Action call

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.

Smart-home fan-outTypeScript
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

PROVIDER DATA

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.

HA-JEV SAFETY POLICY

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

This demo supports
  • Three simulated rooms
  • Lights on or off
  • Blinds open or closed
  • Thermostat warmer or cooler by 1°C
  • One atomic command at a time
This demo does not
  • 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

Read the official pattern, then inspect the API