ha-conversation-agent-augment
Augments an existing Home Assistant Custom Integration with one or more Voice & AI surfaces — intent handlers, a conversation agent, and/or LLM API tools —…
Skill by nolte
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/nolte-ha-conversation-agent-augment
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend, ml, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ha-conversation-agent-augment
What's inside
- Skill name
ha-conversation-agent-augment- Description
- Augments an existing Home Assistant Custom Integration with one or more Voice & AI surfaces — intent handlers, a conversation agent, and/or LLM API tools — conforming to spec/ha/intents-conversation plus spec/ha/llm-api. Decides with the user which surfaces are in scope, then generates the registered intent handlers, the conversation platform entity, and/or the LLM tools and API registration, implementing domain-appropriate built-in intents, avoiding deprecated ones, and signalling tool errors as HomeAssistantError; the full class-and-signature contracts live in the skill body and specs. Activate on "add a conversation agent", "register intents", "expose tools to the assistant via the LLM API", or equivalent German requests. Do not activate for assist_satellite/stt/tts/wake_word entities (ha/entity-platforms-voice), registered services (ha-service-definition-add), greenfield scaffolding (ha-integration-scaffold), or deploying to a live HA instance.
- License
- MIT
- Instructions
- 89 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# HA Conversation Agent Augment Spec: `spec/claude/ha-conversation-agent-augment/en.md` (EN canonical) / `spec/claude/ha-conversation-agent-augment/de.md` (DE translation). ## Why this is a skill, not an agent - **Human-visible augmentation surface** — the user describes a Voice & AI capability and reads back the generated handlers/entity/tools and the conformance report; a skill keeps this on the visible command surface, like the sibling augment skills (`ha-config-flow-augment`, `ha-coordinator-add`, `ha-device-automation-add`). - **Scope decision up front** — which of the three surfaces (intents / conversation entity / LLM tools) and, for tools, expose-vs-consume, is a per-run dialogue the user approves before any generation; that belongs in the working context. - **Bounded, inline generation** — intent handlers, one `conversation.py`, and a small `llm.API` with its tools fit inline; no isolated agent context is needed. - Counter-dimension considered: the draft→validate loop could be an agent, but the surface-scope decision and the two-axis separation belong in the user's working context; skill wins. ## When this skill activates Use this skill to add **one or more** Voice & AI surfaces — intent handlers, a conversation agent, and/or LLM API tools — to an existing integration, so its devices respond to Assist sentences and/or it exposes tools to the assistant. ## When NOT to activate - Assist satellite / STT / TTS / wake-word **entities** → `ha/entity-platforms-voice` - a registered service with its own schema → `ha-service-definition-add` / `ha/services` - translation of intent sentences / response / prompt texts → `ha/translations` - greenfield integration scaffolding → `ha-integration-scaffold` - deploying/importing into a running HA instance → out of scope ## Hard rules 1. **Decide scope first.** Resolve with the user which surface(s) are in scope — intents, a conversation entity, and/or LLM tools — and, for tools, the role: **expose** an `llm.API` vs. **consume** an API. Keep the two axes (intents/conversation vs. tools) separated. 2. **Read `spec/ha/intents-conversation/en.md` and `spec/ha/llm-api/en.md` first** (at least the in-scope one). Do not generate from memory. 3. **Intent handler contract.** Every handler derives from `homeassistant.helpers.intent.IntentHandler`, sets `intent_type`, is registered via `intent.async_register(hass, handler)` in `async_setup`/`async_setup_entry` (never in platform modules), and `async_handle(self, intent_obj) -> IntentResponse` returns an `IntentResponse` — never `None` or a raw string. Read slots via `intent_obj.slots["<name>"]["value"]`; declare a `slot_schema` for expected slots. 4. **Built-in intents, no deprecated ones.** Implement domain-appropriate built-in intents (`HassTurnOn`/`HassTurnOff`/`HassGetState`), treating `HassTurnOn`/`HassTurnOff` slots as optional; **never** re-implement deprecated intents (`HassToggle`, `HassOpenCover`, …). 5. **Speech & response type.** Create the response via `intent_obj.create_response()` + `response.async_set_speech(...)`; speech is only `plain` or `ssml`; set the correct `response_type` (`action_done`/`query_answer`/`error`) and a valid `data.code` (`no_intent_match`/`no_valid_targets`/`failed_to_handle`/`unknown`) on error. 6. **Conversation entity.** A conversation agent lives in `conversation.py`, derives from `conversation.ConversationEntity`, declares `supported_languages` (`list[str]` or `"*"`), and implements `_async_handle_message(self, user_input, chat_log) -> ConversationResult` — **not** the deprecated `async_process`. Set `ConversationEntityFeature.CONTROL` only when the agent actually controls HA; perform no I/O in property getters. 7. **LLM tool contract.** Every tool derives from `llm.Tool`, carries a `name`, implements async `async_call(self, hass, tool_input, llm_context)`, returns a JSON-serializable `JsonObjectType`, and raises errors as `HomeAssistantError` — no in-band error codes. A custom API inherits from `API`, implements `async_get_api_instance(self, llm_context) -> APIInstance` (with the required `api_prompt`), is registered via `llm.async_register_api(hass, api)` with a unique `id`/`name`, and is unregistered via `entry.async_on_unload(unreg)`. 8. **Localization out of code.** Keep localized sentences/response/prompt texts out of handler/tool code — sentences in `intents/<lang>.yaml` (see `spec/ha/translations/en.md`). 9. **Name per `spec/ha/naming-conventions/en.md`** and **verify HA internals against the official docs** (see `spec/ha/upstream-docs-verification/en.md`). ## Inputs | Field | Required | Default | Notes | |---|---|---|---| | `target_dir` | yes | — | repo root; `custom_components/<domain>/manifest.json` must exist | | `capability` | yes | — | the Voice & AI capability, in prose | | `surfaces` | yes | resolved in pre-flight | which of intents / conversation entity / LLM tools | | `tool_role` | when tools in scope | asked | expose an `llm.API` vs. consume an API | | `intent_types` / slots | no | derived | `intent_type` names and expected slots | | `supported_languages` | no | asked when needed | `list[str]` or `"*"` for the conversation entity | | tool `name` / `description` / `parameters` | no | derived | per `llm.Tool` | If the user is silent on an optional field, use the default but state it explicitly. ## Pre-flight (in order — abort on first failure) 1. `target_dir/custom_components/<domain>/manifest.json` exists; read `domain`. 2. Make the scope decision: which surface(s) are in scope; for LLM tools fix the role (expose vs. consume). 3. Read `ha/intents-conversation` and/or `ha/llm-api` (at least the in-scope one). 4. The targeted `intent_type` / conversation entity / `llm.API` `id` is not already declared. If it is, abort. ## Workflow ### 1) Resolve and confirm State `domain`, the in-scope surface(s), for tools the role (expose/consume), and the concrete `intent_type`(s) / `supported_languages` / tool names in one paragraph. Wait for confirmation. ### 2) Generate | Surface | Artefacts | Key contract | |---|---|---| | intents | `IntentHandler` subclass(es) + `intent.async_register` in setup | `intent_type`, `slot_schema`, `async_handle -> IntentResponse`, built-in intents, no deprecated ones | | conversation entity | `conversation.py` with a `ConversationEntity` | `supported_languages`, `_async_handle_message -> ConversationResult`, no I/O in getters | | LLM tools | `llm.Tool` subclass(es) + an `API` subclass | `async_call -> JsonObjectType`, `HomeAssistantError`; `async_register_api` + `entry.async_on_unload(unreg)`; `api_prompt` | Keep localized sentences in `intents/<lang>.yaml`; never wire localized text into code. ### 3) Validate and report Validate offline per scope (handlers derive from `IntentHandler`, registered, `intent_type`, `IntentResponse` via `create_response()`/`async_set_speech()`; the entity derives from `ConversationEntity`, declares `supported_languages`, implements `_async_handle_message`; every tool carries `name`, implements `async_call`, raises `HomeAssistantError`, returns `JsonObjectType`; the `llm.API` is registered and unregistered on unload). Emit a CONFORMANT / NEEDS-WORK report keyed to the `ha/intents-conversation` and/or `ha/llm-api` acceptance criteria, plus the changed file paths and the chosen surface(s). ### 4) No deploy The skill never deploys to a live HA instance. Surface the report and stop. ## Boundaries - Assist satellite / STT / TTS / wake-word entities → `ha/entity-platforms-voice` - Registered services → `ha-service-definition-add` - Intent sentence / prompt translations → `ha/translations` - Greenfield scaffold → `ha-integration-scaffold` - Deploy to live HA → out of scope
From nolte/claude-home-assistant, MIT.
More from nolte/claude-home-assistant
- 0.497score
ha-backup-platform-add
nolte
Augments an existing Home Assistant Custom Integration with one backup-platform surface — pre/post backup hooks or a backup agent — conforming to…
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-automation-solution
nolte
Plans and orchestrates a complete Home Assistant YAML solution from a result-oriented requirement, so the user never has to pick which authoring skill to use.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-badge-add
nolte
Adds a custom Lovelace badge to an existing Home Assistant frontend module, conforming to spec/ha/lovelace-badges.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-blueprint-scaffold
nolte
Scaffolds a single Home Assistant blueprint (automation, script, or template domain) as a self-contained, spec-conformant YAML file — by gathering the intent…
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-bluetooth-augment
nolte
Augments an existing Home Assistant Custom Integration with Bluetooth support, conforming to spec/ha/bluetooth.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-card-editor-add
nolte
Adds an ha-form-based visual configuration editor to an existing custom Home Assistant Lovelace card, conforming to spec/ha/lovelace-card-editor.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-card-features-add
nolte
Augments an existing Home Assistant frontend module with one custom tile/card feature — the interactive control row rendered inside the tile card and other…
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-automation-author
nolte
Authors one Home Assistant automation-logic or command artifact as spec-conformant YAML (or a sandboxed .py) from a described intent — an automation, script…
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-card-sizing-determine
nolte
Determines the optimal size declaration for an existing custom Lovelace card or panel — getGridOptions() (sections) and getCardSize() (masonry/panel/stacks) —…
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-config-entry-migrate
nolte
Adds or extend async_migrate_entry in an existing Home Assistant Custom Integration to migrate stored config entries across a schema change — bump…
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-config-flow-augment
nolte
Augments an existing Home Assistant Custom Integration config flow with an additional pattern — multi-step tenant / account selection, zeroconf discovery…
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-coordinator-add
nolte
Appends a new DataUpdateCoordinator to an existing Home Assistant Custom Integration — separate role, separate update interval, full integration with…
SkillCFreshness: C★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 1
- Last commit (this folder)
- Jul 23, 2026 (3 months ago)
- Last release
- Jul 23, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/nolte/claude-home-assistant
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from nolte
- 0.497score
ha-automation-solution
nolte
Plans and orchestrates a complete Home Assistant YAML solution from a result-oriented requirement, so the user never has to pick which authoring skill to use.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-badge-add
nolte
Adds a custom Lovelace badge to an existing Home Assistant frontend module, conforming to spec/ha/lovelace-badges.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-blueprint-scaffold
nolte
Scaffolds a single Home Assistant blueprint (automation, script, or template domain) as a self-contained, spec-conformant YAML file — by gathering the intent…
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-bluetooth-augment
nolte
Augments an existing Home Assistant Custom Integration with Bluetooth support, conforming to spec/ha/bluetooth.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-card-editor-add
nolte
Adds an ha-form-based visual configuration editor to an existing custom Home Assistant Lovelace card, conforming to spec/ha/lovelace-card-editor.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
ha-automation-author
nolte
Authors one Home Assistant automation-logic or command artifact as spec-conformant YAML (or a sandboxed .py) from a described intent — an automation, script…
SkillCFreshness: C★ 1Claude Code +9
Cite this page
ha-conversation-agent-augment skill. Agent Mart. https://agentmart.dev/skills/nolte-ha-conversation-agent-augment (last updated 2026-10-24)