Spook pins Python 3.14 and Home Assistant 2026.8, and describes itself as an unaffiliated component
A scary 👻 powerful toolbox 🧰 for Home Assistant 🏡
At a glance
- What is it?
- Spook is a Home Assistant custom integration that bundles a large set of actions, triggers, conditions and repairs, distributed through HACS. What stands out in the repository is not the feature list but the constraints: a hard Python floor, an explicit non-affiliation notice, and an agent skill for assistants that drive Home Assistant.
- Who is it for?
- Adopt Spook if you already run Home Assistant on a Python version at or above the project's floor and want its actions, triggers and repairs without writing each one as a custom component. Do not adopt it on an older Home Assistant install, since pyproject.toml requires homeassistant>=2026.8.0 and Python 3.14.2 or newer, and the README states plainly that it is not endorsed or supported by the Home Assistant project.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The version floor is the first thing to check
The pyproject.toml is unusually specific for a custom integration, and those numbers decide whether the project will load at all:
requires-python = ">=3.14.2"
dependencies = [
"homeassistant>=2026.8.0",
]Python 3.14.2 or newer, and Home Assistant 2026.8.0 or newer. The classifiers agree, listing Programming Language :: Python :: 3.14 and Development Status :: 3 - Alpha.
Home Assistant versions are dated, so 2026.8.0 means the August 2026 release. Combined with a Python floor that recent, this project tracks the leading edge of both runtimes rather than a stable baseline. That is a deliberate choice for a toolbox full of new action types, and it has the obvious cost: an installation that upgrades Home Assistant into a future release can leave Spook behind until it catches up.
The distribution form is standard for this ecosystem. HACS is the installer, hacs.json declares the repository, and the package builds from the custom_components/spook directory rather than a src layout:
[tool.hatch.build.targets.wheel]
packages = ["custom_components/spook"]That single line tells you the whole install model: the package name is a Home Assistant custom component directory, not a library you import.
An agent skill, which is a new distribution channel for HA tooling
Spook ships a skill describing its own actions, triggers, conditions and repairs, in a form an AI agent can look things up in. The rationale in the README is direct: let an agent manage your Home Assistant and it should know what Spook can do without reading all of the documentation first.
For Claude Code the install is two commands:
/plugin marketplace add frenck/spook
/plugin install spook@spookOther agents use the skill folder directly, at plugins/spook/skills/spook. There is a matching .claude-plugin directory at the repository root, which is what makes the repository act as a plugin marketplace source.
This is the part of the project with real design content, and it carries a design implication that is not spelled out. An agent that discovers tools by reading a skill file will call them without having read the long-form documentation. The service surface is therefore part of the user interface, and its naming and descriptions carry weight that a traditional integration's YAML did not. Documentation and code drift now shows up as an agent calling something that does not exist.
It also puts a component in the path of home automation. An assistant with a documented list of Spook actions can actuate a house.
It states its own status plainly: SPOOKED, alpha, as-is
The project describes itself as a scary powerful toolbox for Home Assistant and marks itself with a project stage badge reading SPOOKED, its own word for finished. The Python metadata says Development Status:: 3 - Alpha.
Two disclaimers sit at the top of the README. The first is the important one: Spook is not affiliated with, endorsed, recommended, or supported by the Home Assistant project. The second is that it is provided as-is, without any warranty.
Neither is unusual for a community integration, but together they set the expectation correctly. This component is not endorsed or supported by the Home Assistant project.
The release cadence visible in the tags matches that: v5.10.0 on 2026-10-09, v5.11.0 on 2026-10-12 and v5.11.1 on 2026-10-14, with the last push on 2026-10-16. Three releases in a week at a five.x version number means the project is deep into rapid iteration, so plan your upgrades rather than pinning and forgetting. The repository is not archived.
Translations are CC0, which is a deliberate choice about contribution
The translation files inside custom_components/spook/translations are under a CC0 licence, stated in the README and recorded in a LICENSE.md inside the translations directory. Everything else in the project is MIT.
That split is worth understanding. CC0 is a public domain dedication with no attribution requirement, so a translator contributing a language is not placing conditions on their own work, and the project has no obligation to chase provenance for translated strings. The README pairs it with the practical benefit that translation happens through a web browser on Weblate and needs no programming knowledge.
The consequence for the main project is that the MIT grant, Copyright (c) 2023-2026 Franck Nijhof, covers code and documentation rather than translated content. If you extract the translation files and redistribute them separately, the CC0 terms are the ones that apply, which is a simpler situation than most projects manage.
The project is authored by Franck Nijhof, listed as both author and maintainer, and the documentation site carries a support page alongside the changelog and issue links in pyproject.toml.
Lint configuration as a statement of project taste
The ruff configuration in pyproject.toml is short enough to read as a description of how the maintainer wants code written:
[tool.ruff]
src = ["custom_components/spook"]
[tool.ruff.lint]
ignore = [
"A005", # It is just wrong
"ANN401", # Opiniated warning on disallowing dynamically typed expressions
"CPY001", # Spook has one LICENSE file, not a header on every file
"D203", # Conflicts with other rules
"D213", # Conflicts with other rules
"RUF012", # Just broken
"TC006", # Checks for unquoted type expressions in typing.cast() calls.
"TID252", # Relative impor
]Several of the ignores are reasoned rather than convenience. ANN401 is suppressed on the grounds that the warning against dynamically typed expressions is an opinionated one, which matters in a project that deliberately passes arbitrary user configuration into automations. CPY001 is disabled because the project keeps a single LICENSE file instead of a header on every source file. D203 and D213 are the standard docstring conflict.
RUF012 and TC006 are listed as broken or buggy in the upstream tool, which is an honest way to record that the rules are disabled until fixed rather than indefinitely.
The repository also carries a .pre-commit-config.yaml and a .prettierignore, so formatting and linting run before code lands.
Where Spook is the wrong choice
If your Home Assistant install is behind the version floor, this is not a candidate. The dependency on homeassistant>=2026.8.0 is a hard requirement, not a recommendation, and there is no fallback path.
The alternative is writing the pieces yourself as local custom components, which for a single action or trigger is often less work than tracking a dependency with a moving Python floor. The case for Spook is breadth: a large set of tools in one place rather than a directory of small integrations each with its own release schedule. That trade is worth making when you want many of them and not when you want one.
The agent skill deserves a second look from a security angle. A skill file is documentation that an automated system will act on, and in a house that skill describes mechanisms that change physical state. Reviewing plugins/spook/skills/spook before installing it into an agent that can reach your Home Assistant is the sensible order of operations, and the README does not describe any permission model around it.
Nothing in the repository structure suggests a formal API contract. The actions, triggers, conditions and repairs are documented on an external site at spook.boo, so the online documentation is the reference, and the repository is the implementation.
Editorial conclusion
Adopt Spook if you already run Home Assistant on a Python version at or above the project's floor and want its actions, triggers and repairs without writing each one as a custom component. Do not adopt it on an older Home Assistant install, since pyproject.toml requires homeassistant>=2026.8.0 and Python 3.14.2 or newer, and the README states plainly that it is not endorsed or supported by the Home Assistant project. First read the support and contribution documentation linked from the README, because the project is published as-is without warranty.
Frequently asked questions
How do I install Spook in Home Assistant?
Spook is a custom integration distributed through HACS, with hacs.json at the repository root declaring it and the built package coming from the custom_components/spook directory. It is provided as-is without warranty.
What are the version requirements for Spook?
pyproject.toml requires Python 3.14.2 or newer and homeassistant>=2026.8.0, and classifies the project as Development Status :: 3 - Alpha.
Is Spook supported by the Home Assistant project?
No. The README states explicitly that Spook is not affiliated with, endorsed, recommended, or supported by the Home Assistant project.
What is the Spook agent skill for?
It is a description of Spook's actions, triggers, conditions and repairs that an AI agent can look up, so an assistant managing Home Assistant knows what Spook offers without reading the full documentation. Claude Code installs it with the plugin marketplace and plugin install commands; other agents use the plugins/spook/skills/spook folder directly.
What licence applies to Spook translations?
The translation files are CC0 licensed, recorded in a LICENSE.md inside the translations directory. The rest of the project is MIT, copyright Franck Nijhof.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/frenck-spook)Was this useful?