MCPcopy Index your code
hub / github.com/NodeJSmith/hassette

github.com/NodeJSmith/hassette @v0.47.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.47.0 ↗ · + Follow
11,451 symbols 47,525 edges 1,199 files 6,550 documented · 57% updated 1d agov0.47.0 · 2026-07-02★ 75222 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Hassette

PyPI version Python 3.11+ License: MIT Documentation Status codecov

A simple, modern, async-first Python framework for building Home Assistant automations.

Documentation: https://hassette.readthedocs.io

✨ Why Hassette?

  • Type Safe: Full type annotations with Pydantic models and comprehensive IDE support
  • Async-First: Built for modern Python with async/await throughout
  • Dependency Injection: Clean handler signatures with FastAPI style dependency injection
  • Persistent Storage: Built-in disk cache for storing data across restarts, intelligent rate-limiting, and more
  • Simple & Focused: Just Home Assistant automations - no complexity creep
  • Web UI: Monitor and manage your automations from the browser
  • Developer Experience: Clear error messages, proper logging, hot-reloading, and intuitive APIs

See the Getting Started guide for detailed instructions.

🖥️ Web UI

Hassette includes a web UI for monitoring and managing your automations: Apps (app status, health, and detailed per-app views), Handlers (registered event handlers across all apps), Logs (real-time log streaming with filtering), and Config (runtime configuration and diagnostics).

Hassette Web UI — Apps page

The web UI is enabled by default at http://<host>:8126/. See the Web UI documentation for details.

Terminal CLI

Query a running Hassette instance from the terminal — no browser required:

# Check system health
hassette status

# List all apps and their status
hassette app

# Investigate a specific app
hassette app health my-app
hassette listener --app my-app --since 1h
hassette log --app my-app --since 1h --limit 20

# Pipe structured output to jq
hassette listener --app my-app --json | jq '.[] | select(.failed > 0)'

See the CLI documentation for the full command reference, scripting patterns, and shell completion setup.

🤔 Is Hassette Right for You?

New to automation frameworks? - Is Hassette Right for You? - Decide if Hassette is right for your needs

Coming from AppDaemon? - AppDaemon Migration Guide - See what's different and how to migrate

📖 Examples

Check out the examples/ directory for complete working examples:

Configuration examples: - Docker Compose Guide - Docker deployment setup - HassetteConfig - Complete configuration reference

🛣️ Status

Hassette is under active development. We follow semantic versioning and recommend pinning a minor version (e.g., hassette~=0.x.0) while the API stabilizes.

Open an issue or PR if you'd like to contribute!

Recent Highlights

  • Typed state models - Generated Python models for 45+ Home Assistant entity domains
  • Entity classes - Rich entity objects with built-in async methods (e.g., await light.turn_on())
  • Test harness - AppTestHarness for writing tests against your automations with simulated state and time control

🤝 Contributing

Contributions are welcome! Whether you're:

  • 🐛 Reporting bugs or issues
  • 💡 Suggesting features or improvements
  • 📝 Improving documentation
  • 🔧 Contributing code

See CONTRIBUTING.md for guidelines on getting started.

⭐ Star History

Star History Chart

📄 License

MIT

Extension points exported contracts — how you extend this code

LogStore (Interface)
(no doc) [1 implementers]
frontend/src/state/create-app-state.ts
CommandPaletteProps (Interface)
(no doc)
frontend/src/components/layout/command-palette.tsx
GroupDef (Interface)
(no doc)
frontend/src/components/layout/sidebar-groups.ts
StatusBarProps (Interface)
(no doc)
frontend/src/components/layout/status-bar.tsx
PaletteItem (Interface)
(no doc)
frontend/src/components/layout/palette-items.ts

Core symbols most depended-on inside this repo

get
called by 840
frontend/src/hooks/use-query-params.ts
call_service
called by 364
src/hassette/api/api.py
execute
called by 340
src/hassette/core/command_executor.py
sleep
called by 249
src/hassette/core/scheduler_service.py
set
called by 242
frontend/src/hooks/use-query-params.ts
set
called by 201
frontend/src/hooks/use-query-params.ts
join
called by 191
src/hassette/models/entities/media_player.py
on
called by 182
src/hassette/bus/bus.py

Shape

Method 5,714
Function 3,655
Class 1,898
Interface 124
Route 60

Languages

Python95%
TypeScript5%

Modules by API surface

src/hassette/test_utils/recording_api.py147 symbols
tests/integration/test_app_test_harness.py135 symbols
tests/unit/test_logging.py106 symbols
tests/unit/cli/test_output.py100 symbols
tests/unit/test_config_models.py91 symbols
tests/integration/test_scheduler_mode.py88 symbols
tests/integration/test_listeners.py83 symbols
tests/unit/test_config.py82 symbols
tests/unit/test_sync_executor_service.py80 symbols
src/hassette/api/api.py79 symbols
tests/unit/test_scheduler_resource.py78 symbols
src/hassette/event_handling/predicates.py78 symbols

For agents

$ claude mcp add hassette \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page