Repository files navigation

Kyber — AI-Powered Smart Home Assistant for Home Assistant

⚠️ Beta software — Kyber is production-ready for home use but still evolving rapidly. Your AI now has a key to the house. Literally.

Kyber lets an AI control your lights, thermostats, automations, scripts, and dashboards — in natural language, no confirmation required (in Autopilot Mode). It won't judge you for having 47 automations that do the same thing, but it might just clean them up if you ask. The AI can modify your Home Assistant configuration — automations, scripts, entities and dashboards. Always review proposals before executing them, keep backups, and remember we are not responsible for your living room turning into a disco at 3am.

hacs_badge

Kyber is a local AI chat panel for Home Assistant, powered by your Ollama instance. Chat with your smart home, manage entities, edit automations, and build dashboards — all without leaving HA.

Kyber chat agent

Install via HACS

  1. In HACS → Integrations → ⋮ → Custom repositories
  2. Add https://github.com/pgroene/kyber as an Integration
  3. Find Kyber in the HACS store and install
  4. Restart Home Assistant
  5. Go to Settings → Devices & Services → Add Integration → search for Kyber

Or use the quick-add button:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Features

  • 💬 AI Chat — ask questions and give commands in natural language; automatic language detection with locale-specific vocabulary hints (Dutch, German, French, Spanish, Italian, Portuguese)
  • 📋 Proposal Cards — review changes before they're applied, with one-click Undo
  • Autopilot Mode — auto-execute proposals for hands-free operation
  • ✏️ Automation & Script Editor — CodeMirror 6 YAML editor with AI assistance
  • 📊 Dashboard Editor — edit Lovelace dashboards as YAML, create new dashboards
  • 🔧 Slash Commands/dashboard, /automation, /script, /blueprint, /area, /memory, /update and more — see docs/slash-commands.md
  • 🏷️ Kyber Labels — tag entities with kyber:* labels (e.g. kyber:important, kyber:appliance) via /area label; Kyber uses these to prioritise context
  • 🤖 AI Entity Narrator — on startup, Kyber batches all entities and generates rich descriptions and natural-language search aliases (e.g. "koffiezetapparaat" → switch.onoff_keuken_espresso). Alias quality is filtered for plausibility. See docs/narrator.md
  • 📍 Proactive Area Suggestions — when you mention a room and nearby entities have no area assigned, Kyber shows a one-click assignment card. See docs/area-suggestions.md
  • 🔒 100% Local — all AI inference runs on your own Ollama instance; nothing leaves your network
  • ☁️ Cloud AI support — optionally route through Azure AI Foundry, OpenAI (or compatible: Groq, Mistral, OpenRouter), or Anthropic (Claude) instead of a local model
  • 🔌 MCP Server — expose Kyber as an MCP tool so ChatGPT, Claude Desktop, Cursor and other AI clients can control your home. See docs/mcp.md
  • 🔌 Integration Explorer — on startup Kyber automatically indexes every loaded HA integration: sensor names, entity IDs, and natural-language capability descriptions as searchable knowledge facts
  • 🔬 Deep Analyzer — on-demand AI extraction of durable home facts across 8 analytical lenses: daily routines, device inventory, occupancy patterns, time/location triggers, energy usage, safety rules, entity relationships & dependencies, and automation purpose & use case
  • 🧠 Hybrid memory retrieval — in-memory TF-IDF embedding with cosine similarity + keyword overlap blending; selected facts streamed to the live progress card
  • 🔁 Tool-calling loop — up to 5 rounds of tool calls per turn; duplicate call detection with targeted redirect hints; tool name alias resolution
  • 🗂️ Conversation sessions — named sessions with full rolling history and automatic compaction
  • 🔄 Self-update/update force installs the latest GitHub release directly, bypassing HACS. See docs/slash-commands.md
  • 🐞 Kyber Debug panel — a dedicated sidebar entry (/kyber-debug) with five tabs: Memory, Last Turn, Status, Logs, Tests. See docs/debug-panel.md
  • 📦 Debug bundle download — every turn produces a downloadable ZIP with the full system prompt, tool log, memory picks, and response

Quick Start

See docs/installation.md for full setup instructions.

Requirements: Home Assistant 2025.2+, Ollama with a model pulled, HA Ollama integration configured.

# Docker dev setup
docker compose -f docker-compose.dev.yml up
# then open http://localhost:8123

After install, Kyber registers two sidebar panels:

PanelURLPurpose
Kyber/kyberMain chat interface
Kyber Debug/kyber-debugMemory browser, last turn details, entity narrator progress, live logs

Choosing a Model

Kyber requires an Ollama model configured through the HA Ollama integration. Not all models perform equally — smaller models often fail to produce the structured plan blocks Kyber needs for action requests.

Based on the May 2026 eval report (5 runs × 3 real-home scenarios):

ModelScoreNotes
mistral-nemo:latest🥇 14/15 (93%)Recommended — reliable plan output, handles Dutch, 1-round answers from memory
qwen2.5:latest✅ checkNot yet in the formal eval; community reports suggest strong structured output — worth trying if mistral-nemo is too slow on your hardware
qwen3:4b-instruct🥈 10/15 (67%)Good for read-only queries; fails action plans in Dutch
llama3.2:latest🥉 4/15 (27%)Unpredictable token usage; often skips plan blocks entirely

Recommendation: use mistral-nemo:latest. It reliably emits structured plan blocks, bridges Dutch entity name gaps via tool calls, and answers location queries in a single round. 3B–4B class models work for questions but are not reliable for executing actions.

See docs/eval-report-2026-05.md for full methodology, timing data, and failure analysis.

Entity Narrator Model

The background entity narrator uses a separate model call that only needs to produce short structured aliases — not full plan blocks. A smaller, faster model is ideal here.

Based on the May 2026 narrator bench (19 models, batch sizes 1 and 10, warmup-corrected):

ModelQuality@10Batch 10 timeNotes
llama3.2:3b✅ 100%3.7s🏆 Recommended — 12× faster than mistral-nemo, 1.9 GB
phi3:mini✅ 95%9.1sStrong backup — slightly larger at 2.3 GB
llama3:latest✅ 100%11.0sReliable but slower
mistral-nemo:latest✅ 100%44.0sFormer recommendation — still works, just slow for narration
qwen3:*, deepseek-r1:7b❌ 0%Reasoning/thinking models — format not compatible

Recommendation: use llama3.2:3b for narration. See docs/narrator-bench-report-2026-05.md for the full breakdown.

DocContents
docs/installation.mdPrerequisites, manual install, Docker dev setup, version bumping, tests
docs/settings.mdAll settings — config flow, options sections, Debug Status tab; ASCII screen sketches
docs/chat-and-ai.mdChat basics, proposal cards, autopilot, conversation history, entity autocomplete
docs/slash-commands.mdAll slash commands: /dashboard, /automation, /script, /blueprint, /area
docs/editor.mdAutomation/script editor, dashboard editor, Lovelace card type reference
docs/pipeline.mdEnd-to-end request pipeline — context build, hybrid memory retrieval (TF-IDF embeddings), tool loop, response cleanup, per-turn snapshot, debug bundle, debug-mode flag
docs/architecture.mdFrontend, backend endpoints, context building, plan/action system
docs/eval-report-2026-05.md📊 May 2026 eval report — building the real-home prompt eval harness, what we fixed, and model comparison (mistral-nemo vs llama3.2 vs qwen3)
docs/narrator-bench-report-2026-05.md📊 May 2026 narrator bench — 19 small models tested for entity narration quality and speed; llama3.2:3b wins (12× faster than mistral-nemo, same quality)

Architecture at a Glance

LayerTechnology
AI providerHA Ollama integration via ai_task.async_generate_data() (HA 2025.2+)
BackendModular Python custom component — 14+ modules covering context building, tool execution, knowledge store, session management, debug diagnostics, integration explorer, and deep analysis
FrontendShadow DOM web component with CodeMirror 6 YAML editor

Backend modules

ModuleResponsibility
http_api.pyMain AI request handler — prompt assembly, tool-call loop, intent classification, mode rules
action_execution.pyPlan action executor — service calls, area/label assignments, undo tracking
knowledge.pyTF-IDF knowledge store — add, search, rate, purge facts
knowledge_integration.pyKnowledge HTTP views — CRUD, shallow & deep analyze, feedback, purge
integration_explorer.pyStartup integration indexer — sensors, entity IDs, capability facts for all platforms
deep_analyzer.pyAI-powered automation/script/blueprint fact extractor (8 analytical lenses)
session_and_storage.pyChat session management — multi-session store, history, summarization
debug_and_diagnostics.pyPer-turn debug snapshots, bundle ZIP builder, bug report, debug-mode flag
intent_and_context.pyIntent classification, quick-intents, home-state context builder
tool_execution.pyTool handler dispatch, alias resolution, domain priority ranking
language_hints.pyLanguage detection and locale-specific vocabulary hints (Dutch + extensible)
domain_docs.pyPer-domain documentation injected into tool context
response_processing.pyResponse cleanup — strip tool echoes, narration, rewrap action blocks
source.pyRaw YAML readers for automations, scripts, blueprints + content-hash memos

API endpoints

EndpointPurpose
POST /api/kyber/completePrompt + history + HA context → AI response + plan
POST /api/kyber/executeExecute plan actions (service calls, area/label/entity management)
POST /api/kyber/parse_yamlYAML string → JSON config (used before saving via HA API)
POST /api/kyber/summarizeCompact conversation history into a summary
GET /api/kyber/progressLive progress events (polled by the frontend during AI turns)
GET /api/kyber/historyRetrieve chat history for the active session
GET /api/kyber/sessionsList all named sessions
POST /api/kyber/sessions/nameRename a session
GET /api/kyber/knowledgeList knowledge store entries
POST /api/kyber/knowledgeAdd or update a knowledge entry
POST /api/kyber/knowledge/analyzeShallow automation analysis → knowledge facts
POST /api/kyber/knowledge/analyze_deepDeep AI-driven analysis across all 8 lenses
POST /api/kyber/knowledge/feedbackRate knowledge entries (👍/👎)
POST /api/kyber/knowledge/purgeDelete knowledge entries by filter
GET /api/kyber/debug/last_turnLast-turn debug snapshot (system prompt, tool log, knowledge used)
GET /api/kyber/debug/tool_historyRing buffer of recent tool calls
GET /api/kyber/debug/statusIntegration status + entity/area counts
GET /api/kyber/debug/bundleDownload per-turn debug ZIP by request_id
GET /api/kyber/debug/bug-reportDownload sanitised bug report ZIP
GET/POST /api/kyber/debug/modeRead or toggle debug-mode flag

License

MIT — see LICENSE

About

AI-powered Home Assistant custom integration

Topics

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Kyber — AI-Powered Smart Home Assistant for Home Assistant

⚠️ Beta software — Kyber is production-ready for home use but still evolving rapidly. Your AI now has a key to the house. Literally.

Kyber lets an AI control your lights, thermostats, automations, scripts, and dashboards — in natural language, no confirmation required (in Autopilot Mode). It won't judge you for having 47 automations that do the same thing, but it might just clean them up if you ask. The AI can modify your Home Assistant configuration — automations, scripts, entities and dashboards. Always review proposals before executing them, keep backups, and remember we are not responsible for your living room turning into a disco at 3am.

hacs_badge

Kyber is a local AI chat panel for Home Assistant, powered by your Ollama instance. Chat with your smart home, manage entities, edit automations, and build dashboards — all without leaving HA.

Kyber chat agent

Install via HACS

  1. In HACS → Integrations → ⋮ → Custom repositories
  2. Add https://github.com/pgroene/kyber as an Integration
  3. Find Kyber in the HACS store and install
  4. Restart Home Assistant
  5. Go to Settings → Devices & Services → Add Integration → search for Kyber

Or use the quick-add button:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Features

  • 💬 AI Chat — ask questions and give commands in natural language; automatic language detection with locale-specific vocabulary hints (Dutch, German, French, Spanish, Italian, Portuguese)
  • 📋 Proposal Cards — review changes before they're applied, with one-click Undo
  • Autopilot Mode — auto-execute proposals for hands-free operation
  • ✏️ Automation & Script Editor — CodeMirror 6 YAML editor with AI assistance
  • 📊 Dashboard Editor — edit Lovelace dashboards as YAML, create new dashboards
  • 🔧 Slash Commands/dashboard, /automation, /script, /blueprint, /area, /memory, /update and more — see docs/slash-commands.md
  • 🏷️ Kyber Labels — tag entities with kyber:* labels (e.g. kyber:important, kyber:appliance) via /area label; Kyber uses these to prioritise context
  • 🤖 AI Entity Narrator — on startup, Kyber batches all entities and generates rich descriptions and natural-language search aliases (e.g. "koffiezetapparaat" → switch.onoff_keuken_espresso). Alias quality is filtered for plausibility. See docs/narrator.md
  • 📍 Proactive Area Suggestions — when you mention a room and nearby entities have no area assigned, Kyber shows a one-click assignment card. See docs/area-suggestions.md
  • 🔒 100% Local — all AI inference runs on your own Ollama instance; nothing leaves your network
  • ☁️ Cloud AI support — optionally route through Azure AI Foundry, OpenAI (or compatible: Groq, Mistral, OpenRouter), or Anthropic (Claude) instead of a local model
  • 🔌 MCP Server — expose Kyber as an MCP tool so ChatGPT, Claude Desktop, Cursor and other AI clients can control your home. See docs/mcp.md
  • 🔌 Integration Explorer — on startup Kyber automatically indexes every loaded HA integration: sensor names, entity IDs, and natural-language capability descriptions as searchable knowledge facts
  • 🔬 Deep Analyzer — on-demand AI extraction of durable home facts across 8 analytical lenses: daily routines, device inventory, occupancy patterns, time/location triggers, energy usage, safety rules, entity relationships & dependencies, and automation purpose & use case
  • 🧠 Hybrid memory retrieval — in-memory TF-IDF embedding with cosine similarity + keyword overlap blending; selected facts streamed to the live progress card
  • 🔁 Tool-calling loop — up to 5 rounds of tool calls per turn; duplicate call detection with targeted redirect hints; tool name alias resolution
  • 🗂️ Conversation sessions — named sessions with full rolling history and automatic compaction
  • 🔄 Self-update/update force installs the latest GitHub release directly, bypassing HACS. See docs/slash-commands.md
  • 🐞 Kyber Debug panel — a dedicated sidebar entry (/kyber-debug) with five tabs: Memory, Last Turn, Status, Logs, Tests. See docs/debug-panel.md
  • 📦 Debug bundle download — every turn produces a downloadable ZIP with the full system prompt, tool log, memory picks, and response

Quick Start

See docs/installation.md for full setup instructions.

Requirements: Home Assistant 2025.2+, Ollama with a model pulled, HA Ollama integration configured.

# Docker dev setup
docker compose -f docker-compose.dev.yml up
# then open http://localhost:8123

After install, Kyber registers two sidebar panels:

PanelURLPurpose
Kyber/kyberMain chat interface
Kyber Debug/kyber-debugMemory browser, last turn details, entity narrator progress, live logs

Choosing a Model

Kyber requires an Ollama model configured through the HA Ollama integration. Not all models perform equally — smaller models often fail to produce the structured plan blocks Kyber needs for action requests.

Based on the May 2026 eval report (5 runs × 3 real-home scenarios):

ModelScoreNotes
mistral-nemo:latest🥇 14/15 (93%)Recommended — reliable plan output, handles Dutch, 1-round answers from memory
qwen2.5:latest✅ checkNot yet in the formal eval; community reports suggest strong structured output — worth trying if mistral-nemo is too slow on your hardware
qwen3:4b-instruct🥈 10/15 (67%)Good for read-only queries; fails action plans in Dutch
llama3.2:latest🥉 4/15 (27%)Unpredictable token usage; often skips plan blocks entirely

Recommendation: use mistral-nemo:latest. It reliably emits structured plan blocks, bridges Dutch entity name gaps via tool calls, and answers location queries in a single round. 3B–4B class models work for questions but are not reliable for executing actions.

See docs/eval-report-2026-05.md for full methodology, timing data, and failure analysis.

Entity Narrator Model

The background entity narrator uses a separate model call that only needs to produce short structured aliases — not full plan blocks. A smaller, faster model is ideal here.

Based on the May 2026 narrator bench (19 models, batch sizes 1 and 10, warmup-corrected):

ModelQuality@10Batch 10 timeNotes
llama3.2:3b✅ 100%3.7s🏆 Recommended — 12× faster than mistral-nemo, 1.9 GB
phi3:mini✅ 95%9.1sStrong backup — slightly larger at 2.3 GB
llama3:latest✅ 100%11.0sReliable but slower
mistral-nemo:latest✅ 100%44.0sFormer recommendation — still works, just slow for narration
qwen3:*, deepseek-r1:7b❌ 0%Reasoning/thinking models — format not compatible

Recommendation: use llama3.2:3b for narration. See docs/narrator-bench-report-2026-05.md for the full breakdown.

DocContents
docs/installation.mdPrerequisites, manual install, Docker dev setup, version bumping, tests
docs/settings.mdAll settings — config flow, options sections, Debug Status tab; ASCII screen sketches
docs/chat-and-ai.mdChat basics, proposal cards, autopilot, conversation history, entity autocomplete
docs/slash-commands.mdAll slash commands: /dashboard, /automation, /script, /blueprint, /area
docs/editor.mdAutomation/script editor, dashboard editor, Lovelace card type reference
docs/pipeline.mdEnd-to-end request pipeline — context build, hybrid memory retrieval (TF-IDF embeddings), tool loop, response cleanup, per-turn snapshot, debug bundle, debug-mode flag
docs/architecture.mdFrontend, backend endpoints, context building, plan/action system
docs/eval-report-2026-05.md📊 May 2026 eval report — building the real-home prompt eval harness, what we fixed, and model comparison (mistral-nemo vs llama3.2 vs qwen3)
docs/narrator-bench-report-2026-05.md📊 May 2026 narrator bench — 19 small models tested for entity narration quality and speed; llama3.2:3b wins (12× faster than mistral-nemo, same quality)

Architecture at a Glance

LayerTechnology
AI providerHA Ollama integration via ai_task.async_generate_data() (HA 2025.2+)
BackendModular Python custom component — 14+ modules covering context building, tool execution, knowledge store, session management, debug diagnostics, integration explorer, and deep analysis
FrontendShadow DOM web component with CodeMirror 6 YAML editor

Backend modules

ModuleResponsibility
http_api.pyMain AI request handler — prompt assembly, tool-call loop, intent classification, mode rules
action_execution.pyPlan action executor — service calls, area/label assignments, undo tracking
knowledge.pyTF-IDF knowledge store — add, search, rate, purge facts
knowledge_integration.pyKnowledge HTTP views — CRUD, shallow & deep analyze, feedback, purge
integration_explorer.pyStartup integration indexer — sensors, entity IDs, capability facts for all platforms
deep_analyzer.pyAI-powered automation/script/blueprint fact extractor (8 analytical lenses)
session_and_storage.pyChat session management — multi-session store, history, summarization
debug_and_diagnostics.pyPer-turn debug snapshots, bundle ZIP builder, bug report, debug-mode flag
intent_and_context.pyIntent classification, quick-intents, home-state context builder
tool_execution.pyTool handler dispatch, alias resolution, domain priority ranking
language_hints.pyLanguage detection and locale-specific vocabulary hints (Dutch + extensible)
domain_docs.pyPer-domain documentation injected into tool context
response_processing.pyResponse cleanup — strip tool echoes, narration, rewrap action blocks
source.pyRaw YAML readers for automations, scripts, blueprints + content-hash memos

API endpoints

EndpointPurpose
POST /api/kyber/completePrompt + history + HA context → AI response + plan
POST /api/kyber/executeExecute plan actions (service calls, area/label/entity management)
POST /api/kyber/parse_yamlYAML string → JSON config (used before saving via HA API)
POST /api/kyber/summarizeCompact conversation history into a summary
GET /api/kyber/progressLive progress events (polled by the frontend during AI turns)
GET /api/kyber/historyRetrieve chat history for the active session
GET /api/kyber/sessionsList all named sessions
POST /api/kyber/sessions/nameRename a session
GET /api/kyber/knowledgeList knowledge store entries
POST /api/kyber/knowledgeAdd or update a knowledge entry
POST /api/kyber/knowledge/analyzeShallow automation analysis → knowledge facts
POST /api/kyber/knowledge/analyze_deepDeep AI-driven analysis across all 8 lenses
POST /api/kyber/knowledge/feedbackRate knowledge entries (👍/👎)
POST /api/kyber/knowledge/purgeDelete knowledge entries by filter
GET /api/kyber/debug/last_turnLast-turn debug snapshot (system prompt, tool log, knowledge used)
GET /api/kyber/debug/tool_historyRing buffer of recent tool calls
GET /api/kyber/debug/statusIntegration status + entity/area counts
GET /api/kyber/debug/bundleDownload per-turn debug ZIP by request_id
GET /api/kyber/debug/bug-reportDownload sanitised bug report ZIP
GET/POST /api/kyber/debug/modeRead or toggle debug-mode flag

License

MIT — see LICENSE

About

AI-powered Home Assistant custom integration

Topics

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Kyber — AI-Powered Smart Home Assistant for Home Assistant

⚠️ Beta software — Kyber is production-ready for home use but still evolving rapidly. Your AI now has a key to the house. Literally.

Kyber lets an AI control your lights, thermostats, automations, scripts, and dashboards — in natural language, no confirmation required (in Autopilot Mode). It won't judge you for having 47 automations that do the same thing, but it might just clean them up if you ask. The AI can modify your Home Assistant configuration — automations, scripts, entities and dashboards. Always review proposals before executing them, keep backups, and remember we are not responsible for your living room turning into a disco at 3am.

hacs_badge

Kyber is a local AI chat panel for Home Assistant, powered by your Ollama instance. Chat with your smart home, manage entities, edit automations, and build dashboards — all without leaving HA.

Kyber chat agent

Install via HACS

  1. In HACS → Integrations → ⋮ → Custom repositories
  2. Add https://github.com/pgroene/kyber as an Integration
  3. Find Kyber in the HACS store and install
  4. Restart Home Assistant
  5. Go to Settings → Devices & Services → Add Integration → search for Kyber

Or use the quick-add button:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Features

  • 💬 AI Chat — ask questions and give commands in natural language; automatic language detection with locale-specific vocabulary hints (Dutch, German, French, Spanish, Italian, Portuguese)
  • 📋 Proposal Cards — review changes before they're applied, with one-click Undo
  • Autopilot Mode — auto-execute proposals for hands-free operation
  • ✏️ Automation & Script Editor — CodeMirror 6 YAML editor with AI assistance
  • 📊 Dashboard Editor — edit Lovelace dashboards as YAML, create new dashboards
  • 🔧 Slash Commands/dashboard, /automation, /script, /blueprint, /area, /memory, /update and more — see docs/slash-commands.md
  • 🏷️ Kyber Labels — tag entities with kyber:* labels (e.g. kyber:important, kyber:appliance) via /area label; Kyber uses these to prioritise context
  • 🤖 AI Entity Narrator — on startup, Kyber batches all entities and generates rich descriptions and natural-language search aliases (e.g. "koffiezetapparaat" → switch.onoff_keuken_espresso). Alias quality is filtered for plausibility. See docs/narrator.md
  • 📍 Proactive Area Suggestions — when you mention a room and nearby entities have no area assigned, Kyber shows a one-click assignment card. See docs/area-suggestions.md
  • 🔒 100% Local — all AI inference runs on your own Ollama instance; nothing leaves your network
  • ☁️ Cloud AI support — optionally route through Azure AI Foundry, OpenAI (or compatible: Groq, Mistral, OpenRouter), or Anthropic (Claude) instead of a local model
  • 🔌 MCP Server — expose Kyber as an MCP tool so ChatGPT, Claude Desktop, Cursor and other AI clients can control your home. See docs/mcp.md
  • 🔌 Integration Explorer — on startup Kyber automatically indexes every loaded HA integration: sensor names, entity IDs, and natural-language capability descriptions as searchable knowledge facts
  • 🔬 Deep Analyzer — on-demand AI extraction of durable home facts across 8 analytical lenses: daily routines, device inventory, occupancy patterns, time/location triggers, energy usage, safety rules, entity relationships & dependencies, and automation purpose & use case
  • 🧠 Hybrid memory retrieval — in-memory TF-IDF embedding with cosine similarity + keyword overlap blending; selected facts streamed to the live progress card
  • 🔁 Tool-calling loop — up to 5 rounds of tool calls per turn; duplicate call detection with targeted redirect hints; tool name alias resolution
  • 🗂️ Conversation sessions — named sessions with full rolling history and automatic compaction
  • 🔄 Self-update/update force installs the latest GitHub release directly, bypassing HACS. See docs/slash-commands.md
  • 🐞 Kyber Debug panel — a dedicated sidebar entry (/kyber-debug) with five tabs: Memory, Last Turn, Status, Logs, Tests. See docs/debug-panel.md
  • 📦 Debug bundle download — every turn produces a downloadable ZIP with the full system prompt, tool log, memory picks, and response

Quick Start

See docs/installation.md for full setup instructions.

Requirements: Home Assistant 2025.2+, Ollama with a model pulled, HA Ollama integration configured.

# Docker dev setup
docker compose -f docker-compose.dev.yml up
# then open http://localhost:8123

After install, Kyber registers two sidebar panels:

PanelURLPurpose
Kyber/kyberMain chat interface
Kyber Debug/kyber-debugMemory browser, last turn details, entity narrator progress, live logs

Choosing a Model

Kyber requires an Ollama model configured through the HA Ollama integration. Not all models perform equally — smaller models often fail to produce the structured plan blocks Kyber needs for action requests.

Based on the May 2026 eval report (5 runs × 3 real-home scenarios):

ModelScoreNotes
mistral-nemo:latest🥇 14/15 (93%)Recommended — reliable plan output, handles Dutch, 1-round answers from memory
qwen2.5:latest✅ checkNot yet in the formal eval; community reports suggest strong structured output — worth trying if mistral-nemo is too slow on your hardware
qwen3:4b-instruct🥈 10/15 (67%)Good for read-only queries; fails action plans in Dutch
llama3.2:latest🥉 4/15 (27%)Unpredictable token usage; often skips plan blocks entirely

Recommendation: use mistral-nemo:latest. It reliably emits structured plan blocks, bridges Dutch entity name gaps via tool calls, and answers location queries in a single round. 3B–4B class models work for questions but are not reliable for executing actions.

See docs/eval-report-2026-05.md for full methodology, timing data, and failure analysis.

Entity Narrator Model

The background entity narrator uses a separate model call that only needs to produce short structured aliases — not full plan blocks. A smaller, faster model is ideal here.

Based on the May 2026 narrator bench (19 models, batch sizes 1 and 10, warmup-corrected):

ModelQuality@10Batch 10 timeNotes
llama3.2:3b✅ 100%3.7s🏆 Recommended — 12× faster than mistral-nemo, 1.9 GB
phi3:mini✅ 95%9.1sStrong backup — slightly larger at 2.3 GB
llama3:latest✅ 100%11.0sReliable but slower
mistral-nemo:latest✅ 100%44.0sFormer recommendation — still works, just slow for narration
qwen3:*, deepseek-r1:7b❌ 0%Reasoning/thinking models — format not compatible

Recommendation: use llama3.2:3b for narration. See docs/narrator-bench-report-2026-05.md for the full breakdown.

DocContents
docs/installation.mdPrerequisites, manual install, Docker dev setup, version bumping, tests
docs/settings.mdAll settings — config flow, options sections, Debug Status tab; ASCII screen sketches
docs/chat-and-ai.mdChat basics, proposal cards, autopilot, conversation history, entity autocomplete
docs/slash-commands.mdAll slash commands: /dashboard, /automation, /script, /blueprint, /area
docs/editor.mdAutomation/script editor, dashboard editor, Lovelace card type reference
docs/pipeline.mdEnd-to-end request pipeline — context build, hybrid memory retrieval (TF-IDF embeddings), tool loop, response cleanup, per-turn snapshot, debug bundle, debug-mode flag
docs/architecture.mdFrontend, backend endpoints, context building, plan/action system
docs/eval-report-2026-05.md📊 May 2026 eval report — building the real-home prompt eval harness, what we fixed, and model comparison (mistral-nemo vs llama3.2 vs qwen3)
docs/narrator-bench-report-2026-05.md📊 May 2026 narrator bench — 19 small models tested for entity narration quality and speed; llama3.2:3b wins (12× faster than mistral-nemo, same quality)

Architecture at a Glance

LayerTechnology
AI providerHA Ollama integration via ai_task.async_generate_data() (HA 2025.2+)
BackendModular Python custom component — 14+ modules covering context building, tool execution, knowledge store, session management, debug diagnostics, integration explorer, and deep analysis
FrontendShadow DOM web component with CodeMirror 6 YAML editor

Backend modules

ModuleResponsibility
http_api.pyMain AI request handler — prompt assembly, tool-call loop, intent classification, mode rules
action_execution.pyPlan action executor — service calls, area/label assignments, undo tracking
knowledge.pyTF-IDF knowledge store — add, search, rate, purge facts
knowledge_integration.pyKnowledge HTTP views — CRUD, shallow & deep analyze, feedback, purge
integration_explorer.pyStartup integration indexer — sensors, entity IDs, capability facts for all platforms
deep_analyzer.pyAI-powered automation/script/blueprint fact extractor (8 analytical lenses)
session_and_storage.pyChat session management — multi-session store, history, summarization
debug_and_diagnostics.pyPer-turn debug snapshots, bundle ZIP builder, bug report, debug-mode flag
intent_and_context.pyIntent classification, quick-intents, home-state context builder
tool_execution.pyTool handler dispatch, alias resolution, domain priority ranking
language_hints.pyLanguage detection and locale-specific vocabulary hints (Dutch + extensible)
domain_docs.pyPer-domain documentation injected into tool context
response_processing.pyResponse cleanup — strip tool echoes, narration, rewrap action blocks
source.pyRaw YAML readers for automations, scripts, blueprints + content-hash memos

API endpoints

EndpointPurpose
POST /api/kyber/completePrompt + history + HA context → AI response + plan
POST /api/kyber/executeExecute plan actions (service calls, area/label/entity management)
POST /api/kyber/parse_yamlYAML string → JSON config (used before saving via HA API)
POST /api/kyber/summarizeCompact conversation history into a summary
GET /api/kyber/progressLive progress events (polled by the frontend during AI turns)
GET /api/kyber/historyRetrieve chat history for the active session
GET /api/kyber/sessionsList all named sessions
POST /api/kyber/sessions/nameRename a session
GET /api/kyber/knowledgeList knowledge store entries
POST /api/kyber/knowledgeAdd or update a knowledge entry
POST /api/kyber/knowledge/analyzeShallow automation analysis → knowledge facts
POST /api/kyber/knowledge/analyze_deepDeep AI-driven analysis across all 8 lenses
POST /api/kyber/knowledge/feedbackRate knowledge entries (👍/👎)
POST /api/kyber/knowledge/purgeDelete knowledge entries by filter
GET /api/kyber/debug/last_turnLast-turn debug snapshot (system prompt, tool log, knowledge used)
GET /api/kyber/debug/tool_historyRing buffer of recent tool calls
GET /api/kyber/debug/statusIntegration status + entity/area counts
GET /api/kyber/debug/bundleDownload per-turn debug ZIP by request_id
GET /api/kyber/debug/bug-reportDownload sanitised bug report ZIP
GET/POST /api/kyber/debug/modeRead or toggle debug-mode flag

License

MIT — see LICENSE

About

AI-powered Home Assistant custom integration

Topics

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Kyber — AI-Powered Smart Home Assistant for Home Assistant

⚠️ Beta software — Kyber is production-ready for home use but still evolving rapidly. Your AI now has a key to the house. Literally.

Kyber lets an AI control your lights, thermostats, automations, scripts, and dashboards — in natural language, no confirmation required (in Autopilot Mode). It won't judge you for having 47 automations that do the same thing, but it might just clean them up if you ask. The AI can modify your Home Assistant configuration — automations, scripts, entities and dashboards. Always review proposals before executing them, keep backups, and remember we are not responsible for your living room turning into a disco at 3am.

hacs_badge

Kyber is a local AI chat panel for Home Assistant, powered by your Ollama instance. Chat with your smart home, manage entities, edit automations, and build dashboards — all without leaving HA.

Kyber chat agent

Install via HACS

  1. In HACS → Integrations → ⋮ → Custom repositories
  2. Add https://github.com/pgroene/kyber as an Integration
  3. Find Kyber in the HACS store and install
  4. Restart Home Assistant
  5. Go to Settings → Devices & Services → Add Integration → search for Kyber

Or use the quick-add button:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Features

  • 💬 AI Chat — ask questions and give commands in natural language; automatic language detection with locale-specific vocabulary hints (Dutch, German, French, Spanish, Italian, Portuguese)
  • 📋 Proposal Cards — review changes before they're applied, with one-click Undo
  • Autopilot Mode — auto-execute proposals for hands-free operation
  • ✏️ Automation & Script Editor — CodeMirror 6 YAML editor with AI assistance
  • 📊 Dashboard Editor — edit Lovelace dashboards as YAML, create new dashboards
  • 🔧 Slash Commands/dashboard, /automation, /script, /blueprint, /area, /memory, /update and more — see docs/slash-commands.md
  • 🏷️ Kyber Labels — tag entities with kyber:* labels (e.g. kyber:important, kyber:appliance) via /area label; Kyber uses these to prioritise context
  • 🤖 AI Entity Narrator — on startup, Kyber batches all entities and generates rich descriptions and natural-language search aliases (e.g. "koffiezetapparaat" → switch.onoff_keuken_espresso). Alias quality is filtered for plausibility. See docs/narrator.md
  • 📍 Proactive Area Suggestions — when you mention a room and nearby entities have no area assigned, Kyber shows a one-click assignment card. See docs/area-suggestions.md
  • 🔒 100% Local — all AI inference runs on your own Ollama instance; nothing leaves your network
  • ☁️ Cloud AI support — optionally route through Azure AI Foundry, OpenAI (or compatible: Groq, Mistral, OpenRouter), or Anthropic (Claude) instead of a local model
  • 🔌 MCP Server — expose Kyber as an MCP tool so ChatGPT, Claude Desktop, Cursor and other AI clients can control your home. See docs/mcp.md
  • 🔌 Integration Explorer — on startup Kyber automatically indexes every loaded HA integration: sensor names, entity IDs, and natural-language capability descriptions as searchable knowledge facts
  • 🔬 Deep Analyzer — on-demand AI extraction of durable home facts across 8 analytical lenses: daily routines, device inventory, occupancy patterns, time/location triggers, energy usage, safety rules, entity relationships & dependencies, and automation purpose & use case
  • 🧠 Hybrid memory retrieval — in-memory TF-IDF embedding with cosine similarity + keyword overlap blending; selected facts streamed to the live progress card
  • 🔁 Tool-calling loop — up to 5 rounds of tool calls per turn; duplicate call detection with targeted redirect hints; tool name alias resolution
  • 🗂️ Conversation sessions — named sessions with full rolling history and automatic compaction
  • 🔄 Self-update/update force installs the latest GitHub release directly, bypassing HACS. See docs/slash-commands.md
  • 🐞 Kyber Debug panel — a dedicated sidebar entry (/kyber-debug) with five tabs: Memory, Last Turn, Status, Logs, Tests. See docs/debug-panel.md
  • 📦 Debug bundle download — every turn produces a downloadable ZIP with the full system prompt, tool log, memory picks, and response

Quick Start

See docs/installation.md for full setup instructions.

Requirements: Home Assistant 2025.2+, Ollama with a model pulled, HA Ollama integration configured.

# Docker dev setup
docker compose -f docker-compose.dev.yml up
# then open http://localhost:8123

After install, Kyber registers two sidebar panels:

PanelURLPurpose
Kyber/kyberMain chat interface
Kyber Debug/kyber-debugMemory browser, last turn details, entity narrator progress, live logs

Choosing a Model

Kyber requires an Ollama model configured through the HA Ollama integration. Not all models perform equally — smaller models often fail to produce the structured plan blocks Kyber needs for action requests.

Based on the May 2026 eval report (5 runs × 3 real-home scenarios):

ModelScoreNotes
mistral-nemo:latest🥇 14/15 (93%)Recommended — reliable plan output, handles Dutch, 1-round answers from memory
qwen2.5:latest✅ checkNot yet in the formal eval; community reports suggest strong structured output — worth trying if mistral-nemo is too slow on your hardware
qwen3:4b-instruct🥈 10/15 (67%)Good for read-only queries; fails action plans in Dutch
llama3.2:latest🥉 4/15 (27%)Unpredictable token usage; often skips plan blocks entirely

Recommendation: use mistral-nemo:latest. It reliably emits structured plan blocks, bridges Dutch entity name gaps via tool calls, and answers location queries in a single round. 3B–4B class models work for questions but are not reliable for executing actions.

See docs/eval-report-2026-05.md for full methodology, timing data, and failure analysis.

Entity Narrator Model

The background entity narrator uses a separate model call that only needs to produce short structured aliases — not full plan blocks. A smaller, faster model is ideal here.

Based on the May 2026 narrator bench (19 models, batch sizes 1 and 10, warmup-corrected):

ModelQuality@10Batch 10 timeNotes
llama3.2:3b✅ 100%3.7s🏆 Recommended — 12× faster than mistral-nemo, 1.9 GB
phi3:mini✅ 95%9.1sStrong backup — slightly larger at 2.3 GB
llama3:latest✅ 100%11.0sReliable but slower
mistral-nemo:latest✅ 100%44.0sFormer recommendation — still works, just slow for narration
qwen3:*, deepseek-r1:7b❌ 0%Reasoning/thinking models — format not compatible

Recommendation: use llama3.2:3b for narration. See docs/narrator-bench-report-2026-05.md for the full breakdown.

DocContents
docs/installation.mdPrerequisites, manual install, Docker dev setup, version bumping, tests
docs/settings.mdAll settings — config flow, options sections, Debug Status tab; ASCII screen sketches
docs/chat-and-ai.mdChat basics, proposal cards, autopilot, conversation history, entity autocomplete
docs/slash-commands.mdAll slash commands: /dashboard, /automation, /script, /blueprint, /area
docs/editor.mdAutomation/script editor, dashboard editor, Lovelace card type reference
docs/pipeline.mdEnd-to-end request pipeline — context build, hybrid memory retrieval (TF-IDF embeddings), tool loop, response cleanup, per-turn snapshot, debug bundle, debug-mode flag
docs/architecture.mdFrontend, backend endpoints, context building, plan/action system
docs/eval-report-2026-05.md📊 May 2026 eval report — building the real-home prompt eval harness, what we fixed, and model comparison (mistral-nemo vs llama3.2 vs qwen3)
docs/narrator-bench-report-2026-05.md📊 May 2026 narrator bench — 19 small models tested for entity narration quality and speed; llama3.2:3b wins (12× faster than mistral-nemo, same quality)

Architecture at a Glance

LayerTechnology
AI providerHA Ollama integration via ai_task.async_generate_data() (HA 2025.2+)
BackendModular Python custom component — 14+ modules covering context building, tool execution, knowledge store, session management, debug diagnostics, integration explorer, and deep analysis
FrontendShadow DOM web component with CodeMirror 6 YAML editor

Backend modules

ModuleResponsibility
http_api.pyMain AI request handler — prompt assembly, tool-call loop, intent classification, mode rules
action_execution.pyPlan action executor — service calls, area/label assignments, undo tracking
knowledge.pyTF-IDF knowledge store — add, search, rate, purge facts
knowledge_integration.pyKnowledge HTTP views — CRUD, shallow & deep analyze, feedback, purge
integration_explorer.pyStartup integration indexer — sensors, entity IDs, capability facts for all platforms
deep_analyzer.pyAI-powered automation/script/blueprint fact extractor (8 analytical lenses)
session_and_storage.pyChat session management — multi-session store, history, summarization
debug_and_diagnostics.pyPer-turn debug snapshots, bundle ZIP builder, bug report, debug-mode flag
intent_and_context.pyIntent classification, quick-intents, home-state context builder
tool_execution.pyTool handler dispatch, alias resolution, domain priority ranking
language_hints.pyLanguage detection and locale-specific vocabulary hints (Dutch + extensible)
domain_docs.pyPer-domain documentation injected into tool context
response_processing.pyResponse cleanup — strip tool echoes, narration, rewrap action blocks
source.pyRaw YAML readers for automations, scripts, blueprints + content-hash memos

API endpoints

EndpointPurpose
POST /api/kyber/completePrompt + history + HA context → AI response + plan
POST /api/kyber/executeExecute plan actions (service calls, area/label/entity management)
POST /api/kyber/parse_yamlYAML string → JSON config (used before saving via HA API)
POST /api/kyber/summarizeCompact conversation history into a summary
GET /api/kyber/progressLive progress events (polled by the frontend during AI turns)
GET /api/kyber/historyRetrieve chat history for the active session
GET /api/kyber/sessionsList all named sessions
POST /api/kyber/sessions/nameRename a session
GET /api/kyber/knowledgeList knowledge store entries
POST /api/kyber/knowledgeAdd or update a knowledge entry
POST /api/kyber/knowledge/analyzeShallow automation analysis → knowledge facts
POST /api/kyber/knowledge/analyze_deepDeep AI-driven analysis across all 8 lenses
POST /api/kyber/knowledge/feedbackRate knowledge entries (👍/👎)
POST /api/kyber/knowledge/purgeDelete knowledge entries by filter
GET /api/kyber/debug/last_turnLast-turn debug snapshot (system prompt, tool log, knowledge used)
GET /api/kyber/debug/tool_historyRing buffer of recent tool calls
GET /api/kyber/debug/statusIntegration status + entity/area counts
GET /api/kyber/debug/bundleDownload per-turn debug ZIP by request_id
GET /api/kyber/debug/bug-reportDownload sanitised bug report ZIP
GET/POST /api/kyber/debug/modeRead or toggle debug-mode flag

License

MIT — see LICENSE

About

AI-powered Home Assistant custom integration

Topics

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Kyber — AI-Powered Smart Home Assistant for Home Assistant

⚠️ Beta software — Kyber is production-ready for home use but still evolving rapidly. Your AI now has a key to the house. Literally.

Kyber lets an AI control your lights, thermostats, automations, scripts, and dashboards — in natural language, no confirmation required (in Autopilot Mode). It won't judge you for having 47 automations that do the same thing, but it might just clean them up if you ask. The AI can modify your Home Assistant configuration — automations, scripts, entities and dashboards. Always review proposals before executing them, keep backups, and remember we are not responsible for your living room turning into a disco at 3am.

hacs_badge

Kyber is a local AI chat panel for Home Assistant, powered by your Ollama instance. Chat with your smart home, manage entities, edit automations, and build dashboards — all without leaving HA.

Kyber chat agent

Install via HACS

  1. In HACS → Integrations → ⋮ → Custom repositories
  2. Add https://github.com/pgroene/kyber as an Integration
  3. Find Kyber in the HACS store and install
  4. Restart Home Assistant
  5. Go to Settings → Devices & Services → Add Integration → search for Kyber

Or use the quick-add button:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Features

  • 💬 AI Chat — ask questions and give commands in natural language; automatic language detection with locale-specific vocabulary hints (Dutch, German, French, Spanish, Italian, Portuguese)
  • 📋 Proposal Cards — review changes before they're applied, with one-click Undo
  • Autopilot Mode — auto-execute proposals for hands-free operation
  • ✏️ Automation & Script Editor — CodeMirror 6 YAML editor with AI assistance
  • 📊 Dashboard Editor — edit Lovelace dashboards as YAML, create new dashboards
  • 🔧 Slash Commands/dashboard, /automation, /script, /blueprint, /area, /memory, /update and more — see docs/slash-commands.md
  • 🏷️ Kyber Labels — tag entities with kyber:* labels (e.g. kyber:important, kyber:appliance) via /area label; Kyber uses these to prioritise context
  • 🤖 AI Entity Narrator — on startup, Kyber batches all entities and generates rich descriptions and natural-language search aliases (e.g. "koffiezetapparaat" → switch.onoff_keuken_espresso). Alias quality is filtered for plausibility. See docs/narrator.md
  • 📍 Proactive Area Suggestions — when you mention a room and nearby entities have no area assigned, Kyber shows a one-click assignment card. See docs/area-suggestions.md
  • 🔒 100% Local — all AI inference runs on your own Ollama instance; nothing leaves your network
  • ☁️ Cloud AI support — optionally route through Azure AI Foundry, OpenAI (or compatible: Groq, Mistral, OpenRouter), or Anthropic (Claude) instead of a local model
  • 🔌 MCP Server — expose Kyber as an MCP tool so ChatGPT, Claude Desktop, Cursor and other AI clients can control your home. See docs/mcp.md
  • 🔌 Integration Explorer — on startup Kyber automatically indexes every loaded HA integration: sensor names, entity IDs, and natural-language capability descriptions as searchable knowledge facts
  • 🔬 Deep Analyzer — on-demand AI extraction of durable home facts across 8 analytical lenses: daily routines, device inventory, occupancy patterns, time/location triggers, energy usage, safety rules, entity relationships & dependencies, and automation purpose & use case
  • 🧠 Hybrid memory retrieval — in-memory TF-IDF embedding with cosine similarity + keyword overlap blending; selected facts streamed to the live progress card
  • 🔁 Tool-calling loop — up to 5 rounds of tool calls per turn; duplicate call detection with targeted redirect hints; tool name alias resolution
  • 🗂️ Conversation sessions — named sessions with full rolling history and automatic compaction
  • 🔄 Self-update/update force installs the latest GitHub release directly, bypassing HACS. See docs/slash-commands.md
  • 🐞 Kyber Debug panel — a dedicated sidebar entry (/kyber-debug) with five tabs: Memory, Last Turn, Status, Logs, Tests. See docs/debug-panel.md
  • 📦 Debug bundle download — every turn produces a downloadable ZIP with the full system prompt, tool log, memory picks, and response

Quick Start

See docs/installation.md for full setup instructions.

Requirements: Home Assistant 2025.2+, Ollama with a model pulled, HA Ollama integration configured.

# Docker dev setup
docker compose -f docker-compose.dev.yml up
# then open http://localhost:8123

After install, Kyber registers two sidebar panels:

PanelURLPurpose
Kyber/kyberMain chat interface
Kyber Debug/kyber-debugMemory browser, last turn details, entity narrator progress, live logs

Choosing a Model

Kyber requires an Ollama model configured through the HA Ollama integration. Not all models perform equally — smaller models often fail to produce the structured plan blocks Kyber needs for action requests.

Based on the May 2026 eval report (5 runs × 3 real-home scenarios):

ModelScoreNotes
mistral-nemo:latest🥇 14/15 (93%)Recommended — reliable plan output, handles Dutch, 1-round answers from memory
qwen2.5:latest✅ checkNot yet in the formal eval; community reports suggest strong structured output — worth trying if mistral-nemo is too slow on your hardware
qwen3:4b-instruct🥈 10/15 (67%)Good for read-only queries; fails action plans in Dutch
llama3.2:latest🥉 4/15 (27%)Unpredictable token usage; often skips plan blocks entirely

Recommendation: use mistral-nemo:latest. It reliably emits structured plan blocks, bridges Dutch entity name gaps via tool calls, and answers location queries in a single round. 3B–4B class models work for questions but are not reliable for executing actions.

See docs/eval-report-2026-05.md for full methodology, timing data, and failure analysis.

Entity Narrator Model

The background entity narrator uses a separate model call that only needs to produce short structured aliases — not full plan blocks. A smaller, faster model is ideal here.

Based on the May 2026 narrator bench (19 models, batch sizes 1 and 10, warmup-corrected):

ModelQuality@10Batch 10 timeNotes
llama3.2:3b✅ 100%3.7s🏆 Recommended — 12× faster than mistral-nemo, 1.9 GB
phi3:mini✅ 95%9.1sStrong backup — slightly larger at 2.3 GB
llama3:latest✅ 100%11.0sReliable but slower
mistral-nemo:latest✅ 100%44.0sFormer recommendation — still works, just slow for narration
qwen3:*, deepseek-r1:7b❌ 0%Reasoning/thinking models — format not compatible

Recommendation: use llama3.2:3b for narration. See docs/narrator-bench-report-2026-05.md for the full breakdown.

DocContents
docs/installation.mdPrerequisites, manual install, Docker dev setup, version bumping, tests
docs/settings.mdAll settings — config flow, options sections, Debug Status tab; ASCII screen sketches
docs/chat-and-ai.mdChat basics, proposal cards, autopilot, conversation history, entity autocomplete
docs/slash-commands.mdAll slash commands: /dashboard, /automation, /script, /blueprint, /area
docs/editor.mdAutomation/script editor, dashboard editor, Lovelace card type reference
docs/pipeline.mdEnd-to-end request pipeline — context build, hybrid memory retrieval (TF-IDF embeddings), tool loop, response cleanup, per-turn snapshot, debug bundle, debug-mode flag
docs/architecture.mdFrontend, backend endpoints, context building, plan/action system
docs/eval-report-2026-05.md📊 May 2026 eval report — building the real-home prompt eval harness, what we fixed, and model comparison (mistral-nemo vs llama3.2 vs qwen3)
docs/narrator-bench-report-2026-05.md📊 May 2026 narrator bench — 19 small models tested for entity narration quality and speed; llama3.2:3b wins (12× faster than mistral-nemo, same quality)

Architecture at a Glance

LayerTechnology
AI providerHA Ollama integration via ai_task.async_generate_data() (HA 2025.2+)
BackendModular Python custom component — 14+ modules covering context building, tool execution, knowledge store, session management, debug diagnostics, integration explorer, and deep analysis
FrontendShadow DOM web component with CodeMirror 6 YAML editor

Backend modules

ModuleResponsibility
http_api.pyMain AI request handler — prompt assembly, tool-call loop, intent classification, mode rules
action_execution.pyPlan action executor — service calls, area/label assignments, undo tracking
knowledge.pyTF-IDF knowledge store — add, search, rate, purge facts
knowledge_integration.pyKnowledge HTTP views — CRUD, shallow & deep analyze, feedback, purge
integration_explorer.pyStartup integration indexer — sensors, entity IDs, capability facts for all platforms
deep_analyzer.pyAI-powered automation/script/blueprint fact extractor (8 analytical lenses)
session_and_storage.pyChat session management — multi-session store, history, summarization
debug_and_diagnostics.pyPer-turn debug snapshots, bundle ZIP builder, bug report, debug-mode flag
intent_and_context.pyIntent classification, quick-intents, home-state context builder
tool_execution.pyTool handler dispatch, alias resolution, domain priority ranking
language_hints.pyLanguage detection and locale-specific vocabulary hints (Dutch + extensible)
domain_docs.pyPer-domain documentation injected into tool context
response_processing.pyResponse cleanup — strip tool echoes, narration, rewrap action blocks
source.pyRaw YAML readers for automations, scripts, blueprints + content-hash memos

API endpoints

EndpointPurpose
POST /api/kyber/completePrompt + history + HA context → AI response + plan
POST /api/kyber/executeExecute plan actions (service calls, area/label/entity management)
POST /api/kyber/parse_yamlYAML string → JSON config (used before saving via HA API)
POST /api/kyber/summarizeCompact conversation history into a summary
GET /api/kyber/progressLive progress events (polled by the frontend during AI turns)
GET /api/kyber/historyRetrieve chat history for the active session
GET /api/kyber/sessionsList all named sessions
POST /api/kyber/sessions/nameRename a session
GET /api/kyber/knowledgeList knowledge store entries
POST /api/kyber/knowledgeAdd or update a knowledge entry
POST /api/kyber/knowledge/analyzeShallow automation analysis → knowledge facts
POST /api/kyber/knowledge/analyze_deepDeep AI-driven analysis across all 8 lenses
POST /api/kyber/knowledge/feedbackRate knowledge entries (👍/👎)
POST /api/kyber/knowledge/purgeDelete knowledge entries by filter
GET /api/kyber/debug/last_turnLast-turn debug snapshot (system prompt, tool log, knowledge used)
GET /api/kyber/debug/tool_historyRing buffer of recent tool calls
GET /api/kyber/debug/statusIntegration status + entity/area counts
GET /api/kyber/debug/bundleDownload per-turn debug ZIP by request_id
GET /api/kyber/debug/bug-reportDownload sanitised bug report ZIP
GET/POST /api/kyber/debug/modeRead or toggle debug-mode flag

License

MIT — see LICENSE

About

AI-powered Home Assistant custom integration

Topics

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Kyber — AI-Powered Smart Home Assistant for Home Assistant

⚠️ Beta software — Kyber is production-ready for home use but still evolving rapidly. Your AI now has a key to the house. Literally.

Kyber lets an AI control your lights, thermostats, automations, scripts, and dashboards — in natural language, no confirmation required (in Autopilot Mode). It won't judge you for having 47 automations that do the same thing, but it might just clean them up if you ask. The AI can modify your Home Assistant configuration — automations, scripts, entities and dashboards. Always review proposals before executing them, keep backups, and remember we are not responsible for your living room turning into a disco at 3am.

hacs_badge

Kyber is a local AI chat panel for Home Assistant, powered by your Ollama instance. Chat with your smart home, manage entities, edit automations, and build dashboards — all without leaving HA.

Kyber chat agent

Install via HACS

  1. In HACS → Integrations → ⋮ → Custom repositories
  2. Add https://github.com/pgroene/kyber as an Integration
  3. Find Kyber in the HACS store and install
  4. Restart Home Assistant
  5. Go to Settings → Devices & Services → Add Integration → search for Kyber

Or use the quick-add button:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Features

  • 💬 AI Chat — ask questions and give commands in natural language; automatic language detection with locale-specific vocabulary hints (Dutch, German, French, Spanish, Italian, Portuguese)
  • 📋 Proposal Cards — review changes before they're applied, with one-click Undo
  • Autopilot Mode — auto-execute proposals for hands-free operation
  • ✏️ Automation & Script Editor — CodeMirror 6 YAML editor with AI assistance
  • 📊 Dashboard Editor — edit Lovelace dashboards as YAML, create new dashboards
  • 🔧 Slash Commands/dashboard, /automation, /script, /blueprint, /area, /memory, /update and more — see docs/slash-commands.md
  • 🏷️ Kyber Labels — tag entities with kyber:* labels (e.g. kyber:important, kyber:appliance) via /area label; Kyber uses these to prioritise context
  • 🤖 AI Entity Narrator — on startup, Kyber batches all entities and generates rich descriptions and natural-language search aliases (e.g. "koffiezetapparaat" → switch.onoff_keuken_espresso). Alias quality is filtered for plausibility. See docs/narrator.md
  • 📍 Proactive Area Suggestions — when you mention a room and nearby entities have no area assigned, Kyber shows a one-click assignment card. See docs/area-suggestions.md
  • 🔒 100% Local — all AI inference runs on your own Ollama instance; nothing leaves your network
  • ☁️ Cloud AI support — optionally route through Azure AI Foundry, OpenAI (or compatible: Groq, Mistral, OpenRouter), or Anthropic (Claude) instead of a local model
  • 🔌 MCP Server — expose Kyber as an MCP tool so ChatGPT, Claude Desktop, Cursor and other AI clients can control your home. See docs/mcp.md
  • 🔌 Integration Explorer — on startup Kyber automatically indexes every loaded HA integration: sensor names, entity IDs, and natural-language capability descriptions as searchable knowledge facts
  • 🔬 Deep Analyzer — on-demand AI extraction of durable home facts across 8 analytical lenses: daily routines, device inventory, occupancy patterns, time/location triggers, energy usage, safety rules, entity relationships & dependencies, and automation purpose & use case
  • 🧠 Hybrid memory retrieval — in-memory TF-IDF embedding with cosine similarity + keyword overlap blending; selected facts streamed to the live progress card
  • 🔁 Tool-calling loop — up to 5 rounds of tool calls per turn; duplicate call detection with targeted redirect hints; tool name alias resolution
  • 🗂️ Conversation sessions — named sessions with full rolling history and automatic compaction
  • 🔄 Self-update/update force installs the latest GitHub release directly, bypassing HACS. See docs/slash-commands.md
  • 🐞 Kyber Debug panel — a dedicated sidebar entry (/kyber-debug) with five tabs: Memory, Last Turn, Status, Logs, Tests. See docs/debug-panel.md
  • 📦 Debug bundle download — every turn produces a downloadable ZIP with the full system prompt, tool log, memory picks, and response

Quick Start

See docs/installation.md for full setup instructions.

Requirements: Home Assistant 2025.2+, Ollama with a model pulled, HA Ollama integration configured.

# Docker dev setup
docker compose -f docker-compose.dev.yml up
# then open http://localhost:8123

After install, Kyber registers two sidebar panels:

PanelURLPurpose
Kyber/kyberMain chat interface
Kyber Debug/kyber-debugMemory browser, last turn details, entity narrator progress, live logs

Choosing a Model

Kyber requires an Ollama model configured through the HA Ollama integration. Not all models perform equally — smaller models often fail to produce the structured plan blocks Kyber needs for action requests.

Based on the May 2026 eval report (5 runs × 3 real-home scenarios):

ModelScoreNotes
mistral-nemo:latest🥇 14/15 (93%)Recommended — reliable plan output, handles Dutch, 1-round answers from memory
qwen2.5:latest✅ checkNot yet in the formal eval; community reports suggest strong structured output — worth trying if mistral-nemo is too slow on your hardware
qwen3:4b-instruct🥈 10/15 (67%)Good for read-only queries; fails action plans in Dutch
llama3.2:latest🥉 4/15 (27%)Unpredictable token usage; often skips plan blocks entirely

Recommendation: use mistral-nemo:latest. It reliably emits structured plan blocks, bridges Dutch entity name gaps via tool calls, and answers location queries in a single round. 3B–4B class models work for questions but are not reliable for executing actions.

See docs/eval-report-2026-05.md for full methodology, timing data, and failure analysis.

Entity Narrator Model

The background entity narrator uses a separate model call that only needs to produce short structured aliases — not full plan blocks. A smaller, faster model is ideal here.

Based on the May 2026 narrator bench (19 models, batch sizes 1 and 10, warmup-corrected):

ModelQuality@10Batch 10 timeNotes
llama3.2:3b✅ 100%3.7s🏆 Recommended — 12× faster than mistral-nemo, 1.9 GB
phi3:mini✅ 95%9.1sStrong backup — slightly larger at 2.3 GB
llama3:latest✅ 100%11.0sReliable but slower
mistral-nemo:latest✅ 100%44.0sFormer recommendation — still works, just slow for narration
qwen3:*, deepseek-r1:7b❌ 0%Reasoning/thinking models — format not compatible

Recommendation: use llama3.2:3b for narration. See docs/narrator-bench-report-2026-05.md for the full breakdown.

DocContents
docs/installation.mdPrerequisites, manual install, Docker dev setup, version bumping, tests
docs/settings.mdAll settings — config flow, options sections, Debug Status tab; ASCII screen sketches
docs/chat-and-ai.mdChat basics, proposal cards, autopilot, conversation history, entity autocomplete
docs/slash-commands.mdAll slash commands: /dashboard, /automation, /script, /blueprint, /area
docs/editor.mdAutomation/script editor, dashboard editor, Lovelace card type reference
docs/pipeline.mdEnd-to-end request pipeline — context build, hybrid memory retrieval (TF-IDF embeddings), tool loop, response cleanup, per-turn snapshot, debug bundle, debug-mode flag
docs/architecture.mdFrontend, backend endpoints, context building, plan/action system
docs/eval-report-2026-05.md📊 May 2026 eval report — building the real-home prompt eval harness, what we fixed, and model comparison (mistral-nemo vs llama3.2 vs qwen3)
docs/narrator-bench-report-2026-05.md📊 May 2026 narrator bench — 19 small models tested for entity narration quality and speed; llama3.2:3b wins (12× faster than mistral-nemo, same quality)

Architecture at a Glance

LayerTechnology
AI providerHA Ollama integration via ai_task.async_generate_data() (HA 2025.2+)
BackendModular Python custom component — 14+ modules covering context building, tool execution, knowledge store, session management, debug diagnostics, integration explorer, and deep analysis
FrontendShadow DOM web component with CodeMirror 6 YAML editor

Backend modules

ModuleResponsibility
http_api.pyMain AI request handler — prompt assembly, tool-call loop, intent classification, mode rules
action_execution.pyPlan action executor — service calls, area/label assignments, undo tracking
knowledge.pyTF-IDF knowledge store — add, search, rate, purge facts
knowledge_integration.pyKnowledge HTTP views — CRUD, shallow & deep analyze, feedback, purge
integration_explorer.pyStartup integration indexer — sensors, entity IDs, capability facts for all platforms
deep_analyzer.pyAI-powered automation/script/blueprint fact extractor (8 analytical lenses)
session_and_storage.pyChat session management — multi-session store, history, summarization
debug_and_diagnostics.pyPer-turn debug snapshots, bundle ZIP builder, bug report, debug-mode flag
intent_and_context.pyIntent classification, quick-intents, home-state context builder
tool_execution.pyTool handler dispatch, alias resolution, domain priority ranking
language_hints.pyLanguage detection and locale-specific vocabulary hints (Dutch + extensible)
domain_docs.pyPer-domain documentation injected into tool context
response_processing.pyResponse cleanup — strip tool echoes, narration, rewrap action blocks
source.pyRaw YAML readers for automations, scripts, blueprints + content-hash memos

API endpoints

EndpointPurpose
POST /api/kyber/completePrompt + history + HA context → AI response + plan
POST /api/kyber/executeExecute plan actions (service calls, area/label/entity management)
POST /api/kyber/parse_yamlYAML string → JSON config (used before saving via HA API)
POST /api/kyber/summarizeCompact conversation history into a summary
GET /api/kyber/progressLive progress events (polled by the frontend during AI turns)
GET /api/kyber/historyRetrieve chat history for the active session
GET /api/kyber/sessionsList all named sessions
POST /api/kyber/sessions/nameRename a session
GET /api/kyber/knowledgeList knowledge store entries
POST /api/kyber/knowledgeAdd or update a knowledge entry
POST /api/kyber/knowledge/analyzeShallow automation analysis → knowledge facts
POST /api/kyber/knowledge/analyze_deepDeep AI-driven analysis across all 8 lenses
POST /api/kyber/knowledge/feedbackRate knowledge entries (👍/👎)
POST /api/kyber/knowledge/purgeDelete knowledge entries by filter
GET /api/kyber/debug/last_turnLast-turn debug snapshot (system prompt, tool log, knowledge used)
GET /api/kyber/debug/tool_historyRing buffer of recent tool calls
GET /api/kyber/debug/statusIntegration status + entity/area counts
GET /api/kyber/debug/bundleDownload per-turn debug ZIP by request_id
GET /api/kyber/debug/bug-reportDownload sanitised bug report ZIP
GET/POST /api/kyber/debug/modeRead or toggle debug-mode flag

License

MIT — see LICENSE

About

AI-powered Home Assistant custom integration

Topics

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Kyber — AI-Powered Smart Home Assistant for Home Assistant

⚠️ Beta software — Kyber is production-ready for home use but still evolving rapidly. Your AI now has a key to the house. Literally.

Kyber lets an AI control your lights, thermostats, automations, scripts, and dashboards — in natural language, no confirmation required (in Autopilot Mode). It won't judge you for having 47 automations that do the same thing, but it might just clean them up if you ask. The AI can modify your Home Assistant configuration — automations, scripts, entities and dashboards. Always review proposals before executing them, keep backups, and remember we are not responsible for your living room turning into a disco at 3am.

hacs_badge

Kyber is a local AI chat panel for Home Assistant, powered by your Ollama instance. Chat with your smart home, manage entities, edit automations, and build dashboards — all without leaving HA.

Kyber chat agent

Install via HACS

  1. In HACS → Integrations → ⋮ → Custom repositories
  2. Add https://github.com/pgroene/kyber as an Integration
  3. Find Kyber in the HACS store and install
  4. Restart Home Assistant
  5. Go to Settings → Devices & Services → Add Integration → search for Kyber

Or use the quick-add button:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Features

  • 💬 AI Chat — ask questions and give commands in natural language; automatic language detection with locale-specific vocabulary hints (Dutch, German, French, Spanish, Italian, Portuguese)
  • 📋 Proposal Cards — review changes before they're applied, with one-click Undo
  • Autopilot Mode — auto-execute proposals for hands-free operation
  • ✏️ Automation & Script Editor — CodeMirror 6 YAML editor with AI assistance
  • 📊 Dashboard Editor — edit Lovelace dashboards as YAML, create new dashboards
  • 🔧 Slash Commands/dashboard, /automation, /script, /blueprint, /area, /memory, /update and more — see docs/slash-commands.md
  • 🏷️ Kyber Labels — tag entities with kyber:* labels (e.g. kyber:important, kyber:appliance) via /area label; Kyber uses these to prioritise context
  • 🤖 AI Entity Narrator — on startup, Kyber batches all entities and generates rich descriptions and natural-language search aliases (e.g. "koffiezetapparaat" → switch.onoff_keuken_espresso). Alias quality is filtered for plausibility. See docs/narrator.md
  • 📍 Proactive Area Suggestions — when you mention a room and nearby entities have no area assigned, Kyber shows a one-click assignment card. See docs/area-suggestions.md
  • 🔒 100% Local — all AI inference runs on your own Ollama instance; nothing leaves your network
  • ☁️ Cloud AI support — optionally route through Azure AI Foundry, OpenAI (or compatible: Groq, Mistral, OpenRouter), or Anthropic (Claude) instead of a local model
  • 🔌 MCP Server — expose Kyber as an MCP tool so ChatGPT, Claude Desktop, Cursor and other AI clients can control your home. See docs/mcp.md
  • 🔌 Integration Explorer — on startup Kyber automatically indexes every loaded HA integration: sensor names, entity IDs, and natural-language capability descriptions as searchable knowledge facts
  • 🔬 Deep Analyzer — on-demand AI extraction of durable home facts across 8 analytical lenses: daily routines, device inventory, occupancy patterns, time/location triggers, energy usage, safety rules, entity relationships & dependencies, and automation purpose & use case
  • 🧠 Hybrid memory retrieval — in-memory TF-IDF embedding with cosine similarity + keyword overlap blending; selected facts streamed to the live progress card
  • 🔁 Tool-calling loop — up to 5 rounds of tool calls per turn; duplicate call detection with targeted redirect hints; tool name alias resolution
  • 🗂️ Conversation sessions — named sessions with full rolling history and automatic compaction
  • 🔄 Self-update/update force installs the latest GitHub release directly, bypassing HACS. See docs/slash-commands.md
  • 🐞 Kyber Debug panel — a dedicated sidebar entry (/kyber-debug) with five tabs: Memory, Last Turn, Status, Logs, Tests. See docs/debug-panel.md
  • 📦 Debug bundle download — every turn produces a downloadable ZIP with the full system prompt, tool log, memory picks, and response

Quick Start

See docs/installation.md for full setup instructions.

Requirements: Home Assistant 2025.2+, Ollama with a model pulled, HA Ollama integration configured.

# Docker dev setup
docker compose -f docker-compose.dev.yml up
# then open http://localhost:8123

After install, Kyber registers two sidebar panels:

PanelURLPurpose
Kyber/kyberMain chat interface
Kyber Debug/kyber-debugMemory browser, last turn details, entity narrator progress, live logs

Choosing a Model

Kyber requires an Ollama model configured through the HA Ollama integration. Not all models perform equally — smaller models often fail to produce the structured plan blocks Kyber needs for action requests.

Based on the May 2026 eval report (5 runs × 3 real-home scenarios):

ModelScoreNotes
mistral-nemo:latest🥇 14/15 (93%)Recommended — reliable plan output, handles Dutch, 1-round answers from memory
qwen2.5:latest✅ checkNot yet in the formal eval; community reports suggest strong structured output — worth trying if mistral-nemo is too slow on your hardware
qwen3:4b-instruct🥈 10/15 (67%)Good for read-only queries; fails action plans in Dutch
llama3.2:latest🥉 4/15 (27%)Unpredictable token usage; often skips plan blocks entirely

Recommendation: use mistral-nemo:latest. It reliably emits structured plan blocks, bridges Dutch entity name gaps via tool calls, and answers location queries in a single round. 3B–4B class models work for questions but are not reliable for executing actions.

See docs/eval-report-2026-05.md for full methodology, timing data, and failure analysis.

Entity Narrator Model

The background entity narrator uses a separate model call that only needs to produce short structured aliases — not full plan blocks. A smaller, faster model is ideal here.

Based on the May 2026 narrator bench (19 models, batch sizes 1 and 10, warmup-corrected):

ModelQuality@10Batch 10 timeNotes
llama3.2:3b✅ 100%3.7s🏆 Recommended — 12× faster than mistral-nemo, 1.9 GB
phi3:mini✅ 95%9.1sStrong backup — slightly larger at 2.3 GB
llama3:latest✅ 100%11.0sReliable but slower
mistral-nemo:latest✅ 100%44.0sFormer recommendation — still works, just slow for narration
qwen3:*, deepseek-r1:7b❌ 0%Reasoning/thinking models — format not compatible

Recommendation: use llama3.2:3b for narration. See docs/narrator-bench-report-2026-05.md for the full breakdown.

DocContents
docs/installation.mdPrerequisites, manual install, Docker dev setup, version bumping, tests
docs/settings.mdAll settings — config flow, options sections, Debug Status tab; ASCII screen sketches
docs/chat-and-ai.mdChat basics, proposal cards, autopilot, conversation history, entity autocomplete
docs/slash-commands.mdAll slash commands: /dashboard, /automation, /script, /blueprint, /area
docs/editor.mdAutomation/script editor, dashboard editor, Lovelace card type reference
docs/pipeline.mdEnd-to-end request pipeline — context build, hybrid memory retrieval (TF-IDF embeddings), tool loop, response cleanup, per-turn snapshot, debug bundle, debug-mode flag
docs/architecture.mdFrontend, backend endpoints, context building, plan/action system
docs/eval-report-2026-05.md📊 May 2026 eval report — building the real-home prompt eval harness, what we fixed, and model comparison (mistral-nemo vs llama3.2 vs qwen3)
docs/narrator-bench-report-2026-05.md📊 May 2026 narrator bench — 19 small models tested for entity narration quality and speed; llama3.2:3b wins (12× faster than mistral-nemo, same quality)

Architecture at a Glance

LayerTechnology
AI providerHA Ollama integration via ai_task.async_generate_data() (HA 2025.2+)
BackendModular Python custom component — 14+ modules covering context building, tool execution, knowledge store, session management, debug diagnostics, integration explorer, and deep analysis
FrontendShadow DOM web component with CodeMirror 6 YAML editor

Backend modules

ModuleResponsibility
http_api.pyMain AI request handler — prompt assembly, tool-call loop, intent classification, mode rules
action_execution.pyPlan action executor — service calls, area/label assignments, undo tracking
knowledge.pyTF-IDF knowledge store — add, search, rate, purge facts
knowledge_integration.pyKnowledge HTTP views — CRUD, shallow & deep analyze, feedback, purge
integration_explorer.pyStartup integration indexer — sensors, entity IDs, capability facts for all platforms
deep_analyzer.pyAI-powered automation/script/blueprint fact extractor (8 analytical lenses)
session_and_storage.pyChat session management — multi-session store, history, summarization
debug_and_diagnostics.pyPer-turn debug snapshots, bundle ZIP builder, bug report, debug-mode flag
intent_and_context.pyIntent classification, quick-intents, home-state context builder
tool_execution.pyTool handler dispatch, alias resolution, domain priority ranking
language_hints.pyLanguage detection and locale-specific vocabulary hints (Dutch + extensible)
domain_docs.pyPer-domain documentation injected into tool context
response_processing.pyResponse cleanup — strip tool echoes, narration, rewrap action blocks
source.pyRaw YAML readers for automations, scripts, blueprints + content-hash memos

API endpoints

EndpointPurpose
POST /api/kyber/completePrompt + history + HA context → AI response + plan
POST /api/kyber/executeExecute plan actions (service calls, area/label/entity management)
POST /api/kyber/parse_yamlYAML string → JSON config (used before saving via HA API)
POST /api/kyber/summarizeCompact conversation history into a summary
GET /api/kyber/progressLive progress events (polled by the frontend during AI turns)
GET /api/kyber/historyRetrieve chat history for the active session
GET /api/kyber/sessionsList all named sessions
POST /api/kyber/sessions/nameRename a session
GET /api/kyber/knowledgeList knowledge store entries
POST /api/kyber/knowledgeAdd or update a knowledge entry
POST /api/kyber/knowledge/analyzeShallow automation analysis → knowledge facts
POST /api/kyber/knowledge/analyze_deepDeep AI-driven analysis across all 8 lenses
POST /api/kyber/knowledge/feedbackRate knowledge entries (👍/👎)
POST /api/kyber/knowledge/purgeDelete knowledge entries by filter
GET /api/kyber/debug/last_turnLast-turn debug snapshot (system prompt, tool log, knowledge used)
GET /api/kyber/debug/tool_historyRing buffer of recent tool calls
GET /api/kyber/debug/statusIntegration status + entity/area counts
GET /api/kyber/debug/bundleDownload per-turn debug ZIP by request_id
GET /api/kyber/debug/bug-reportDownload sanitised bug report ZIP
GET/POST /api/kyber/debug/modeRead or toggle debug-mode flag

License

MIT — see LICENSE

About

AI-powered Home Assistant custom integration

Topics

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Kyber — AI-Powered Smart Home Assistant for Home Assistant

⚠️ Beta software — Kyber is production-ready for home use but still evolving rapidly. Your AI now has a key to the house. Literally.

Kyber lets an AI control your lights, thermostats, automations, scripts, and dashboards — in natural language, no confirmation required (in Autopilot Mode). It won't judge you for having 47 automations that do the same thing, but it might just clean them up if you ask. The AI can modify your Home Assistant configuration — automations, scripts, entities and dashboards. Always review proposals before executing them, keep backups, and remember we are not responsible for your living room turning into a disco at 3am.

hacs_badge

Kyber is a local AI chat panel for Home Assistant, powered by your Ollama instance. Chat with your smart home, manage entities, edit automations, and build dashboards — all without leaving HA.

Kyber chat agent

Install via HACS

  1. In HACS → Integrations → ⋮ → Custom repositories
  2. Add https://github.com/pgroene/kyber as an Integration
  3. Find Kyber in the HACS store and install
  4. Restart Home Assistant
  5. Go to Settings → Devices & Services → Add Integration → search for Kyber

Or use the quick-add button:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Features

  • 💬 AI Chat — ask questions and give commands in natural language; automatic language detection with locale-specific vocabulary hints (Dutch, German, French, Spanish, Italian, Portuguese)
  • 📋 Proposal Cards — review changes before they're applied, with one-click Undo
  • Autopilot Mode — auto-execute proposals for hands-free operation
  • ✏️ Automation & Script Editor — CodeMirror 6 YAML editor with AI assistance
  • 📊 Dashboard Editor — edit Lovelace dashboards as YAML, create new dashboards
  • 🔧 Slash Commands/dashboard, /automation, /script, /blueprint, /area, /memory, /update and more — see docs/slash-commands.md
  • 🏷️ Kyber Labels — tag entities with kyber:* labels (e.g. kyber:important, kyber:appliance) via /area label; Kyber uses these to prioritise context
  • 🤖 AI Entity Narrator — on startup, Kyber batches all entities and generates rich descriptions and natural-language search aliases (e.g. "koffiezetapparaat" → switch.onoff_keuken_espresso). Alias quality is filtered for plausibility. See docs/narrator.md
  • 📍 Proactive Area Suggestions — when you mention a room and nearby entities have no area assigned, Kyber shows a one-click assignment card. See docs/area-suggestions.md
  • 🔒 100% Local — all AI inference runs on your own Ollama instance; nothing leaves your network
  • ☁️ Cloud AI support — optionally route through Azure AI Foundry, OpenAI (or compatible: Groq, Mistral, OpenRouter), or Anthropic (Claude) instead of a local model
  • 🔌 MCP Server — expose Kyber as an MCP tool so ChatGPT, Claude Desktop, Cursor and other AI clients can control your home. See docs/mcp.md
  • 🔌 Integration Explorer — on startup Kyber automatically indexes every loaded HA integration: sensor names, entity IDs, and natural-language capability descriptions as searchable knowledge facts
  • 🔬 Deep Analyzer — on-demand AI extraction of durable home facts across 8 analytical lenses: daily routines, device inventory, occupancy patterns, time/location triggers, energy usage, safety rules, entity relationships & dependencies, and automation purpose & use case
  • 🧠 Hybrid memory retrieval — in-memory TF-IDF embedding with cosine similarity + keyword overlap blending; selected facts streamed to the live progress card
  • 🔁 Tool-calling loop — up to 5 rounds of tool calls per turn; duplicate call detection with targeted redirect hints; tool name alias resolution
  • 🗂️ Conversation sessions — named sessions with full rolling history and automatic compaction
  • 🔄 Self-update/update force installs the latest GitHub release directly, bypassing HACS. See docs/slash-commands.md
  • 🐞 Kyber Debug panel — a dedicated sidebar entry (/kyber-debug) with five tabs: Memory, Last Turn, Status, Logs, Tests. See docs/debug-panel.md
  • 📦 Debug bundle download — every turn produces a downloadable ZIP with the full system prompt, tool log, memory picks, and response

Quick Start

See docs/installation.md for full setup instructions.

Requirements: Home Assistant 2025.2+, Ollama with a model pulled, HA Ollama integration configured.

# Docker dev setup
docker compose -f docker-compose.dev.yml up
# then open http://localhost:8123

After install, Kyber registers two sidebar panels:

PanelURLPurpose
Kyber/kyberMain chat interface
Kyber Debug/kyber-debugMemory browser, last turn details, entity narrator progress, live logs

Choosing a Model

Kyber requires an Ollama model configured through the HA Ollama integration. Not all models perform equally — smaller models often fail to produce the structured plan blocks Kyber needs for action requests.

Based on the May 2026 eval report (5 runs × 3 real-home scenarios):

ModelScoreNotes
mistral-nemo:latest🥇 14/15 (93%)Recommended — reliable plan output, handles Dutch, 1-round answers from memory
qwen2.5:latest✅ checkNot yet in the formal eval; community reports suggest strong structured output — worth trying if mistral-nemo is too slow on your hardware
qwen3:4b-instruct🥈 10/15 (67%)Good for read-only queries; fails action plans in Dutch
llama3.2:latest🥉 4/15 (27%)Unpredictable token usage; often skips plan blocks entirely

Recommendation: use mistral-nemo:latest. It reliably emits structured plan blocks, bridges Dutch entity name gaps via tool calls, and answers location queries in a single round. 3B–4B class models work for questions but are not reliable for executing actions.

See docs/eval-report-2026-05.md for full methodology, timing data, and failure analysis.

Entity Narrator Model

The background entity narrator uses a separate model call that only needs to produce short structured aliases — not full plan blocks. A smaller, faster model is ideal here.

Based on the May 2026 narrator bench (19 models, batch sizes 1 and 10, warmup-corrected):

ModelQuality@10Batch 10 timeNotes
llama3.2:3b✅ 100%3.7s🏆 Recommended — 12× faster than mistral-nemo, 1.9 GB
phi3:mini✅ 95%9.1sStrong backup — slightly larger at 2.3 GB
llama3:latest✅ 100%11.0sReliable but slower
mistral-nemo:latest✅ 100%44.0sFormer recommendation — still works, just slow for narration
qwen3:*, deepseek-r1:7b❌ 0%Reasoning/thinking models — format not compatible

Recommendation: use llama3.2:3b for narration. See docs/narrator-bench-report-2026-05.md for the full breakdown.

DocContents
docs/installation.mdPrerequisites, manual install, Docker dev setup, version bumping, tests
docs/settings.mdAll settings — config flow, options sections, Debug Status tab; ASCII screen sketches
docs/chat-and-ai.mdChat basics, proposal cards, autopilot, conversation history, entity autocomplete
docs/slash-commands.mdAll slash commands: /dashboard, /automation, /script, /blueprint, /area
docs/editor.mdAutomation/script editor, dashboard editor, Lovelace card type reference
docs/pipeline.mdEnd-to-end request pipeline — context build, hybrid memory retrieval (TF-IDF embeddings), tool loop, response cleanup, per-turn snapshot, debug bundle, debug-mode flag
docs/architecture.mdFrontend, backend endpoints, context building, plan/action system
docs/eval-report-2026-05.md📊 May 2026 eval report — building the real-home prompt eval harness, what we fixed, and model comparison (mistral-nemo vs llama3.2 vs qwen3)
docs/narrator-bench-report-2026-05.md📊 May 2026 narrator bench — 19 small models tested for entity narration quality and speed; llama3.2:3b wins (12× faster than mistral-nemo, same quality)

Architecture at a Glance

LayerTechnology
AI providerHA Ollama integration via ai_task.async_generate_data() (HA 2025.2+)
BackendModular Python custom component — 14+ modules covering context building, tool execution, knowledge store, session management, debug diagnostics, integration explorer, and deep analysis
FrontendShadow DOM web component with CodeMirror 6 YAML editor

Backend modules

ModuleResponsibility
http_api.pyMain AI request handler — prompt assembly, tool-call loop, intent classification, mode rules
action_execution.pyPlan action executor — service calls, area/label assignments, undo tracking
knowledge.pyTF-IDF knowledge store — add, search, rate, purge facts
knowledge_integration.pyKnowledge HTTP views — CRUD, shallow & deep analyze, feedback, purge
integration_explorer.pyStartup integration indexer — sensors, entity IDs, capability facts for all platforms
deep_analyzer.pyAI-powered automation/script/blueprint fact extractor (8 analytical lenses)
session_and_storage.pyChat session management — multi-session store, history, summarization
debug_and_diagnostics.pyPer-turn debug snapshots, bundle ZIP builder, bug report, debug-mode flag
intent_and_context.pyIntent classification, quick-intents, home-state context builder
tool_execution.pyTool handler dispatch, alias resolution, domain priority ranking
language_hints.pyLanguage detection and locale-specific vocabulary hints (Dutch + extensible)
domain_docs.pyPer-domain documentation injected into tool context
response_processing.pyResponse cleanup — strip tool echoes, narration, rewrap action blocks
source.pyRaw YAML readers for automations, scripts, blueprints + content-hash memos

API endpoints

EndpointPurpose
POST /api/kyber/completePrompt + history + HA context → AI response + plan
POST /api/kyber/executeExecute plan actions (service calls, area/label/entity management)
POST /api/kyber/parse_yamlYAML string → JSON config (used before saving via HA API)
POST /api/kyber/summarizeCompact conversation history into a summary
GET /api/kyber/progressLive progress events (polled by the frontend during AI turns)
GET /api/kyber/historyRetrieve chat history for the active session
GET /api/kyber/sessionsList all named sessions
POST /api/kyber/sessions/nameRename a session
GET /api/kyber/knowledgeList knowledge store entries
POST /api/kyber/knowledgeAdd or update a knowledge entry
POST /api/kyber/knowledge/analyzeShallow automation analysis → knowledge facts
POST /api/kyber/knowledge/analyze_deepDeep AI-driven analysis across all 8 lenses
POST /api/kyber/knowledge/feedbackRate knowledge entries (👍/👎)
POST /api/kyber/knowledge/purgeDelete knowledge entries by filter
GET /api/kyber/debug/last_turnLast-turn debug snapshot (system prompt, tool log, knowledge used)
GET /api/kyber/debug/tool_historyRing buffer of recent tool calls
GET /api/kyber/debug/statusIntegration status + entity/area counts
GET /api/kyber/debug/bundleDownload per-turn debug ZIP by request_id
GET /api/kyber/debug/bug-reportDownload sanitised bug report ZIP
GET/POST /api/kyber/debug/modeRead or toggle debug-mode flag

License

MIT — see LICENSE

About

AI-powered Home Assistant custom integration

Topics

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages