Skip to main content

Nestor

Nestor is an open-source framework for intelligent home assistants — the household's butler.

It is built around a fast central agent that understands the home and the people living in it, remembers each of them, drives Home Assistant, delegates long tasks, speaks up on its own when something matters, and can be reached by voice as well as through messaging apps.

Status: design phase. The architecture is settled and a measured proof of concept exists; the framework itself is not usable yet.

Principles

  • Fast conversation. About one second from the end of your sentence to the assistant's voice. Interruptible, it ignores your "mm-hm", and it says so out loud when a provider fails.
  • Native Home Assistant. Rooms, devices, presence and to-do lists as first-class context; Nestor can also act as a Home Assistant Assist conversation agent.
  • Memory you control. Per-person profiles; every memory is dated, sourced, viewable and editable.
  • Delegation. Long tasks go to execution agents (Hermes, Codex…) while the conversation goes on; results are announced when they arrive.
  • Initiative. It can speak first — an important email, a finished task — when someone is home and it is the right moment.
  • One assistant, every channel. Voice, Telegram, WhatsApp, Discord, web: same agent, same memory.
  • Plug anything. Third-party integrations through MCP; providers and models are swappable adapters.
  • Minimum hardware: a CPU, a microphone and a speaker. Robots, cameras and screens are optional capabilities, with a shared behavior engine and one adapter per body.
  • Auditable. An append-only event log is the source of truth for the dashboard, audit and replay. Local-first storage on SQLite.

Its reference distribution is Richie, a Reachy Mini Wireless home robot.

Documentation: nestorhome.dev/docs: installing the server, pairing satellites, the satellite protocol, its schemas and the SDKs.

Running

nestor init                   # writes nestor.yaml, its .env (secrets) and the owner account
nestor -c nestor.yaml check   # fill the API keys in .env first
nestor -c nestor.yaml run

Every command reads the .env next to the configuration: no need to source it. A variable already set in the environment (the shell, a service manager, Docker's env_file) wins over the file.

Development

uv sync
uv run pre-commit install
uv run ruff check && uv run ty check && uv run pytest

Admin (web/)

The admin is a React single-page app (Vite, TanStack Router and Query, Tailwind, shadcn/ui on Base UI, Project Fluent), built into src/nestor/admin/static/app/ and served by Nestor itself. It needs Node 22 and pnpm.

cd web
pnpm install
pnpm dev                                   # on the mock API (MSW), typed against web/openapi.json
NESTOR_API=http://localhost:8080 pnpm dev  # against a running Nestor instead of the mocks
pnpm lint && pnpm typecheck && pnpm test && pnpm build
pnpm api:generate                          # regenerate the client after the API changed
pnpm e2e                                   # Playwright on the mocks, light and dark
NESTOR_URL=http://localhost:8080 E2E_LOGIN=… E2E_PASSWORD=… pnpm e2e:live  # on a throwaway instance

On the mocks, sign in as mathis (owner) or lea (admin) with the password nestor; satellites pair with the code 424242. The visual identity lives in web/src/styles/tokens.css, the logo slot in web/src/components/wordmark.tsx, the admin's texts in web/src/locales/{en,fr}/*.ftl (the server's own messages come from GET /api/v1/i18n/{locale}). pnpm lint also runs the project's Biome plugins (web/lint/*.grit): no native form controls or hand-written ARIA widgets in features, no Base UI or cmdk imports outside components/ui, no presence variants on cmdk attributes, no boolean data-* attributes that render "false".

Copy: a text earns its place only if it tells the person something they need (a consequence, a rule, the next step, how to fix an error). No description that restates its title, no "here you can…" intro, and almost no em dashes (a period, a colon, parentheses or a middle dot instead): web/src/i18n/catalog.test.ts fails on all three. The agent speaks in the first person only where it speaks (its line on the home page, empty states, toasts after what it does); system texts stay neutral. Its figure is Nestor's character, the @nestor-home/character package, shown through web/src/components/agent-figure.tsx.

Docker

compose.yaml runs the published image with everything it keeps in ./data (install). The container starts as root only to give /data to its nestor user (uid 1000) when the folder is not already its own, as Docker creates a missing bind mount owned by root, then runs as that user; started with --user, it runs as given.

Checking a satellite

nestor satellites conformance checks a satellite written in any language against the nestor.satellite/1 standard: see Conformance.

License

MIT

Metadata

Release files for nestor-home 0.3.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 nestor-home 0.3.0
File Size Uploaded Provenance Actions
nestor_home-0.3.0.tar.gz 1.2 MB Without provenance Details for nestor_home-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for nestor-home 0.3.0
File Interpreter ABI Platform Actions
nestor_home-0.3.0-py3-none-any.whl Python 3 none any Details for nestor_home-0.3.0-py3-none-any.whl

Total release size: 2.7 MB

Release files / nestor_home-0.3.0.tar.gz

Download URL nestor_home-0.3.0.tar.gz
Size 1.2 MB
Tags Source
SHA-256 checksum
How to use checksums
99e10c7129522a16de490b035f6b3bfab59b89d9f7b3c9562a5138c89a3b7715
BLAKE2b-256 checksum
How to use checksums
c2f006335a270590ffaf671b0730627b5da00c9a0057fc1155a64e91859a0561
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / nestor_home-0.3.0-py3-none-any.whl

Download URL nestor_home-0.3.0-py3-none-any.whl
Size 1.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
8a8cc26f0ce110b8dce7cf8607888b8f9662acb5a60828a42e4e218a6ded7bb9
BLAKE2b-256 checksum
How to use checksums
d4f475688d25fca9f0a30916b7d1b4b776a08c5119cc2708a8dac114aa68642c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for nestor-home 0.3.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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