Skip to main content

Home Assistant REPL

Rhizomatics Open Source GitHub Workflow Status PyPI PyPI - Python Version Docs GitHub GitHub last commit

A slice of cherry pie, drawn like a 1990s Visual Basic icon

A REPL shell custom designed for Home Assistant custom component developers, tinkerers and native Python speakers. Makes it easy as pie!

It is an opinionated REPL (Read-Eval-Print-Loop) shell that aims are to make it easier without any configuration to:

  • Exploring of the APIs in context of a live working instance
  • Trialling out snippets of code
  • Debugging code (but see note below)
  • Hotfixing issues that don't have built in support to do so from existing components.
$ uv run --with homeassistant-repl ha-repl --token=<insert token here>
Home Assistant REPL (API client mode) connected to ws://homeassistant.local:8123/api/websocket. `obj` only, read-only - no `hass`. Ctrl-D to exit.
>>> obj["/mqtt/binary_sensor/kitchen_terrace_window_tilt"].state
'off'
>>> [o.name for o in obj["/rflink/binary_sensor"].values() if o.state=='unavailable']
['Shed Intruder Alarm', 'Panic Keyfob']
>>> {(o.entity_id, o.state) for o in obj.find(domain="binary_sensor",platform="mqtt")}
{
    ('binary_sensor.terrace_pir_occupancy', 'unavailable'),
    ('binary_sensor.scullery_smoke_alarm_battery_low', 'off'),
    ('binary_sensor.kitchen_terrace_window_tweaked', 'off'),
    ('binary_sensor.scullery_water_detector_water_leak', 'dry'),
    ('binary_sensor.boiler_co_detector_battery_low', 'off'),
    ('binary_sensor.pantry_sensor_occupancy', 'off')
}
>>>

If you're not already comfortable using Python tools to manipulate data on the fly, or better REPL shells in other languages, this is a great way to learn, and faster at the keyboard than clicking around Jupyter notebooks.

This is primarily for developers of custom components, and their LLM agents, though may be of interest for other folk tinkering with Home Assistant. It is a potentially sharp tool, so NOT appropriate for general Home Assistant users.

Features

  • Integrated with rich and pygments for pretty object printouts and stack traces
  • Reuses session and history features from prompt-toolkit
  • Access to all entities via dictionary like interface, obj
  • Usual multi-line editing support and history of Python
  • Integrated with homeassistant-api as hass_api object, available in both modes
  • Auto-awaits coroutines for easy shell use (can be switched off or overridden)
  • Dedicated shell that can be run without installation with uv
  • Usable from inside ipython shell, Marimo notebooks or plain python -m asyncio

All of the above works with standard Home Assistant APIs, referred to as api mode.

Home Assistant REPL also has an advanced live mode that taps directly into a live Home Assistant using an optional server component available via HACS.

Live Mode

This mode requires a custom component to be installed on the target Home Assistant server via HACS, or use the supplied scripts to install on a local devcontainer. It adds:

  • Full access to the core Home Assistant Python API via hass
  • Read/write access to the actual objects, e.g. entities and their helpers
  • A frisson of danger

HA REPL Server

A HACS component that taps into the Home Assistant and acts as a session server over web sockets. It has been designed for HomeAssistant 2026.8 or greater.

Needed for live mode only, since api mode only uses standard Home Assistant APIs.

Future Developments

See the Roadmap for where this might go, and your feedback welcome.

!!! note It is not intended to ever be a replacement for a Python debugger, although it may complement one. It also does not intend to replicate PyScript, instead focusing on standard python (PyScript uses MicroPython) even at expense of general usability or home assistance access, and not a general automation script execution service. For most non-developer cases, homeassistant-cli is a better choice, with pre-packaged access to devices, entities, services etc.

Quick Start

Use the api mode with uv (traditional install also available via pip install homeassistant-repl).

If Home Assistant available via http://homeassistant.local:8123 then you can skip the --server argument. You will also need to create a Long Lived Access Token by going to the personal settings on your Home Assistant mobile or desktop app.

uv run --with homeassistant-repl ha-repl --token <<<my long lived access token>>>

Using the Shell

The shell is a full Python REPL shell, with multi-line editing, history etc, living inside an asyncio loop that exposes the live Home Assistant instance as:

  • obj - the Object Tree exposed as a dictionary object and common methods
  • hass_api - the Home Assistant web socket / REST API exposed using the homeassistant-api library

In live mode it offers, in addition to what api mode offers:

  • hass - the HomeAssistant class at the root of the Python API
  • sql - SQL access to the Recorder databases

So I can write code at the command line like:

>>> pir = obj["/rflink/binary_sensor/hall_pir"]
>>> pir.state = "on"  # non-strict mode, sets entity state with repl as context

The return value of the object is returned to the shell, value printed and available to Python code as _. Tracebacks are printed also, as if they were local (in general everything feels like its local)

The homeassistant-api integration can be used like:

>>> len(hass_api.get_domain('cover'))
12

!!! note The hass_api object returns AsyncEntity objects rather than ApiEntity objects - this is because it comes from a separate project, homeassistant-api that is focused solely on API development, whereas the ApiEntity class is designed for custom code development, being a subset of the real Entity in HomeAssistant, that you'd also get in live mode.

See also Alternative Integration options for how to use this in your own plain python shell, ipython, Marimo or similar.

Starting the Shell

Use the HASS_SERVER environment variable, exported or in a local .env file, or the --server command line argument if the Home Assistant server is not running locally at usual address( i.e. http://homeassistant.local:8123). A long lived access token is needed at --token or in an HASS_TOKEN environment variable.

The quickest way to run the shell is using uv, which you can do without cloning this repo or making any other downloads.

uv run --with homeassistant-repl ha-repl         

Get help on the arguments in the usual way,

uv run --with homeassistant-repl ha-repl --help       ,

Configuration

All modes require a Long Lived Access Token which can be provided via HASS_TOKEN enivironment variable, a HASS_TOKEN=xxxx line in an .env file, or the --token argument on ha-repl.

The URL will default to http://homeassistant.local:8123 or can be set using the HASS_SERVER enivironment variable, a HASS_SERVER=xxxx line in an .env file, or the --server argument on ha-repl.

Note, although homeassistant-api itself has different env vars, when used within ha-repl it will be set up automatically using the same server and token as the main shell.

Other Python REPLs

These are all current with Python v3, there are others like dreampie that didn't make it past Python 2.

### New Default REPL Experiences

  • Python Interactive Mode - Core python REPL, greatly enhanced in v3.13 with PyPi code, and now the default Python terminal experience.
  • VSCode Python REPL - Notebook style with Intellisense, bundled with the standard Microsoft VSCode Python bundle

Classics

  • Terminal iPython - Progenitor of Jupyter notebooks, rich formatting, syntax help, shell integration etc
  • ptpython - Syntax help and formatting, mouse support and more. Part of the prompt-toolkit project, also used by Home Assistant REPL.
  • bpython - Syntax help, auto-complete, improved history
  • xon.sh - python-centric shell
  • IDLE - the original Python Foundation enhanced shell, colourized text, multi-window etc

Metadata

Release files for homeassistant-repl 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for homeassistant-repl 0.9.0
File Size Uploaded
homeassistant_repl-0.9.0.tar.gz 36.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for homeassistant-repl 0.9.0
File Interpreter ABI Platform
homeassistant_repl-0.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 78.6 kB

Release files / homeassistant_repl-0.9.0.tar.gz

Download URL homeassistant_repl-0.9.0.tar.gz
Size 36.8 kB
Tags Source
SHA-256 checksum
How to use checksums
d502b11ad484686b2abdd1d3f26c090c9a7dee19381a35380933d812cb01e3db
BLAKE2b-256 checksum
How to use checksums
34138b089de9a9c5a7bf3a7eced87eedf41c8ddde1710ee800e7d7d5a87f423e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.

Transparency log

Release files / homeassistant_repl-0.9.0-py3-none-any.whl

Download URL homeassistant_repl-0.9.0-py3-none-any.whl
Size 41.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
638550c6e80cbc263f6d24956f4a44d460ce56a2da32e1a7650aa4f2ca1685d9
BLAKE2b-256 checksum
How to use checksums
ee9b03b0a3140368cc1f7db2556acf68e6b828f51d8fce4a8b1eda582bc42d0a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.

Transparency log

Release history Release notifications | RSS feed

0.13.0

2 release files

This release

0.9.0 This release

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.4.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page