{"id":28517272,"url":"https://github.com/allenporter/home-assistant-rulebook","last_synced_at":"2026-04-17T08:31:24.553Z","repository":{"id":294795970,"uuid":"988097453","full_name":"allenporter/home-assistant-rulebook","owner":"allenporter","description":"A Home Assistant custom component that implements a home rulebook","archived":false,"fork":false,"pushed_at":"2026-04-05T05:40:25.000Z","size":352,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-05T07:47:57.876Z","etag":null,"topics":["a2a","adk-python","agent","home-assistant","homeassistant","llm"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/allenporter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-22T03:49:42.000Z","updated_at":"2026-04-05T05:40:30.000Z","dependencies_parsed_at":"2025-06-26T09:18:43.471Z","dependency_job_id":"16dae5fb-ed47-432f-bf3f-e8a71ac26385","html_url":"https://github.com/allenporter/home-assistant-rulebook","commit_stats":null,"previous_names":["allenporter/home-assistant-rulebook"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/allenporter/home-assistant-rulebook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allenporter%2Fhome-assistant-rulebook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allenporter%2Fhome-assistant-rulebook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allenporter%2Fhome-assistant-rulebook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allenporter%2Fhome-assistant-rulebook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/allenporter","download_url":"https://codeload.github.com/allenporter/home-assistant-rulebook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allenporter%2Fhome-assistant-rulebook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31921774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a2a","adk-python","agent","home-assistant","homeassistant","llm"],"created_at":"2025-06-09T05:01:02.464Z","updated_at":"2026-04-17T08:31:24.546Z","avatar_url":"https://github.com/allenporter.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# home-assistant-rulebook\n\nA Home Assistant custom component implementing an LLM powered home rulebook.\nThis is an experimental project under development.\n\n## Environment Pre-requisites\n\n```bash\n$ script/bootstrap\n$ script/setup\n```\n\n## Running tests\n\n```bash\n$ pytest\n```\n\n## Evaluation\n\nThis is an _eval first_ project. That means that you must first write an eval\nfor what you're trying to accomplish, then build code to meet the goal. Evals\nshould be easy and run frequently. This project uses `home-assistant-datasets`\nlibrary for plugins for making it easier to run common eval tasks.\n\nCreate a directory for sym linking custom components:\n\n```shell\nROOT_DIR=\"/workspaces\"/\nmkdir ${ROOT_DIR}/custom_components\n```\n\nInstall this component and the synthetic home custom component to prepare for the eval\n\n```\ncd ${ROOT_DIR}\n# Install the rulebook component\nln -s ${ROOT_DIR}/home-assistant-rulebook/custom_components/rulebook ${ROOT_DIR}/custom_components/rulebook\n\n# Install the synthetic home custom component\ngit clone https://github.com/allenporter/home-assistant-synthetic-home\nln -s ${ROOT_DIR}/home-assistant-synthetic-home/custom_components/synthetic_home ${ROOT_DIR}/custom_components/synthetic_home\n\nexport PYTHONPATH=\"${ROOT_DIR}\"\n```\n\nYou can run the eval with this command:\n\n```shell\npytest eval\n```\n\nWe use a pytest based eval to leverage the great unit test infrastructure\nin Home Assistant and because it has similar semantics for a pass or fail\naround any particular test.\n\nGiven this is experimental, it is common for many tests to fail. Right now to\nsimplify we're using a single Gemini model. Most of the work to hillclimb on\nis about data flow and agentic behaviors and less about the specific model.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallenporter%2Fhome-assistant-rulebook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallenporter%2Fhome-assistant-rulebook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallenporter%2Fhome-assistant-rulebook/lists"}