원클릭으로
hpm-root-registration
End-users discover drivers via root packageManifest.json and README, not per-driver folder manifests
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
End-users discover drivers via root packageManifest.json and README, not per-driver folder manifests
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Pattern for keeping a rolling temperature-trend sample buffer in Hubitat state, computing slope over a configurable window, and classifying rising/falling/steady/unknown.
Implement Tuya Local v3.3 Groovy drivers on Hubitat using rawSocket, AES-128-ECB, queued retries, and defensive frame parsing.
Use Hubitat async HTTP plus a request queue to authenticate with Cognito, cache tokens in state, refresh proactively, and replay a single 401-failed request.
When two agents produce overlapping skills in one session, consolidate by merging unique content into the highest-confidence existing skill.
Never let cached-state dedup bypass session validity in cloud-backed Hubitat drivers.
Standard guard pattern for async HTTP response callbacks in Hubitat drivers
| name | HPM Root Registration |
| description | End-users discover drivers via root packageManifest.json and README, not per-driver folder manifests |
| domain | release-workflow, hpm, documentation |
| confidence | high |
| source | validated in Link's HPM registration session (commits 33a2ec7, d7ab4e4, 273f065, 6d2ed6a) |
Hubitat Package Manager (HPM) discovers drivers from the root packageManifest.json file only, not from individual driver folder manifests.
A common mistake is to put a driver's packageManifest.json in the driver's own folder (e.g., drivers/my-driver/packageManifest.json) and expect HPM to find it. End-users won't see it. HPM looks only at the repo root.
The root manifest must list all drivers in a drivers array with name, namespace, download URL, and version:
{
"packageName": "My Hubitat Drivers",
"author": "Your Name",
"version": "1.1.0",
"minimumHEVersion": "2.3.0",
"dateReleased": "2026-05-19",
"drivers": [
{
"id": "unique-uuid-1",
"name": "My First Driver",
"namespace": "myname",
"location": "https://raw.githubusercontent.com/owner/repo/main/drivers/my-first/my-first.groovy",
"required": false,
"version": "1.0.0"
},
{
"id": "unique-uuid-2",
"name": "My Second Driver",
"namespace": "myname",
"location": "https://raw.githubusercontent.com/owner/repo/main/drivers/my-second/my-second.groovy",
"required": false,
"version": "2.5.0"
}
]
}
Include a human-readable table of all drivers so users can discover them before HPM:
## Available Drivers
| Driver | Type | Status | HPM |
|--------|------|--------|-----|
| My First Driver | Local LAN | ✅ Stable | [HPM Link](hpm://import?url=https://...) |
| My Second Driver | Cloud API | ✅ Stable | [HPM Link](hpm://import?url=https://...) |
This inventory is also the source of truth for which drivers are active in the bundle.
Each driver's .groovy header must have a Changelog: section with single-line entries:
/**
* My Driver
* ...
* Changelog:
* 1.0.0 — 2026-05-19 — Initial release with feature X and Y
* 0.9.0 — 2026-05-18 — Beta release for testing
*/
Important: The release.yml workflow uses a regex to parse this:
r'^(\d+\.\d+\.\d+)\s+[—-]\s+(\d{4}-\d{2}-\d{2})\s+[—-]\s+(.*)$'
This regex requires:
Applied in hubitat-drivers repo (commit 6d2ed6a):
See:
packageManifest.json (root)README.md (root, lines 20–60)drivers/purpleair-aqi/purpleair-aqi.groovy (header, Changelog section)Before tagging a new driver release:
packageManifest.json with UUID, namespace, GitHub raw URL, versionpackageManifest.json version bumped (increment patch or minor)README.md inventory table.groovy header uses single-line format (version — date — description)gh workflow run release.yml --ref main succeeds❌ Driver-folder manifest:
drivers/my-driver/
├── my-driver.groovy
└── packageManifest.json ← Won't be discovered by HPM
❌ Multi-line changelog (breaks release.yml regex):
* 1.0.0 — 2026-05-19 — Initial release
* with lots of features
* described across multiple lines ← Breaks regex
❌ Missing root README inventory: Users can't find drivers without the inventory table.
Every driver release must update root packageManifest.json and README.md as a prerequisite. This is mandatory, not optional.