agentsclimarketplace

Ha addon scaffold

Skill selic/skills/skills/ha-addon-scaffold

Scaffold a production-ready Home Assistant add-on: config.yaml with UI options schema, multi-arch Dockerfile + build.yaml, s6-overlay services, Ingress web UI wiring, GHCR CI, DOCS/CHANGELOG, and an add-on repository.yaml. Use when creating a new Home Assistant add-on, adding an add-on to a repository, or setting up HA add-on CI/CD. Triggers on: home assistant add-on, hass.io addon, scaffold ha addon, ingress addon, addon repository.From its SKILL.md

Install
npx -y skills add selic/skills --skill ha-addon-scaffold

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

5.6 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it

Home Assistant add-on scaffold

You generate a complete, installable Home Assistant add-on that follows the Supervisor add-on spec and ships as a multi-arch GHCR image. Prefer editing an existing add-on repo over creating files from scratch when one is present.

Phase 0 — Gather intent

From $ARGUMENTS (or by asking, max 3 questions) establish:

  • slug — lowercase, [a-z0-9_]+, unique in the repo (e.g. parkingcam).
  • purpose — one sentence for description.
  • runtime — Python / Node / shell? Long-running service or one-shot?
  • needs — camera/entity access? MQTT discovery? Ingress web UI? Bundled model/asset?
  • arch — default aarch64 + amd64; add armv7/armhf/i386 only if asked.

Do not ask about anything you can infer. If it's an existing repo, read repository.yaml and a sibling add-on first to match conventions.

Phase 1 — Repository layout

An add-on repository (what users add by URL) looks like:

<repo>/
├── repository.yaml          # name, url, maintainer
├── README.md                # how to add the repo + what the add-ons do
├── LICENSE
├── .github/workflows/       # builder.yaml (GHCR), lint.yaml
└── <slug>/                  # one directory per add-on
    ├── config.yaml          # add-on manifest (the contract with Supervisor)
    ├── build.yaml           # base images per arch + OCI labels
    ├── Dockerfile
    ├── DOCS.md              # shown in the add-on's Documentation tab
    ├── CHANGELOG.md         # Keep a Changelog + SemVer
    ├── translations/en.yaml # config option labels/descriptions
    └── rootfs/              # overlaid onto the image (s6 services, app code)

repository.yaml:

name: <Nice Name> Add-ons
url: https://github.com/<owner>/<repo>
maintainer: <Name> <email>

Phase 2 — config.yaml (the manifest)

This is the highest-leverage file — it defines the whole UI. Key rules:

  • version is a string ("1.0.0") and must match CHANGELOG.md + the CI tag.
  • image: ghcr.io/<owner>/{arch}-<slug>{arch} is substituted by the builder.
  • Expose every tunable via options (defaults) + schema (validation). Use real validators: int(min,max), float(min,max), list(a|b|c), match(^regex$), trailing ? for optional, str/bool/password.
  • Request only the access you use: hassio_api, homeassistant_api, auth_api, map: ["config:rw", "share:rw"], ports: (map to null to keep optional).
  • Web UI → ingress: true + ingress_port: <n> + panel_icon/panel_title.
  • startup: application, boot: auto, init: false for a normal service add-on.

Mirror the option keys 1:1 in translations/en.yaml so the UI shows labels, not raw keys.

Phase 3 — Image: build.yaml + Dockerfile

  • build.yaml sets build_from per arch to the official ghcr.io/home-assistant/{arch}-base-debian:bookworm (or -base: for Alpine), and OCI labels (title, description, source, licenses).
  • Dockerfile starts ARG BUILD_FROM / FROM ${BUILD_FROM}, installs deps, COPY rootfs /, and ends with CMD [ "/init" ] (s6-overlay entrypoint).
  • Bundle large assets (models, weights) under rootfs/opt/<slug>/… and commit them explicitly; keep training/dev artifacts out via .gitignore.

Phase 4 — Process supervision (s6-overlay)

Under rootfs/etc/:

  • cont-init.d/00-bootstrap — one-shot setup (render config from options via bashio::config, migrate old paths). Executable, #!/usr/bin/with-contenv bashio.
  • services.d/<name>/run — one per long-running process (app + web UI get separate, independently supervised services). Executable.

Read options with bashio::config 'key'; log with bashio::log.info.

Phase 5 — CI (.github/workflows/)

  • builder.yaml — on push to main (path-filtered to the add-on) and on tag push, build multi-arch with home-assistant/builder and push to GHCR. ⚠️ The tag trigger must be on.push.tags: ["v*"] — there is no push_tags event; a top-level push_tags: key is silently ignored and tag releases won't build. Grant permissions: { contents: read, packages: write }.
  • lint.yaml — run home-assistant/actions hassfest/add-on lint on PRs.

Phase 6 — Docs + release checklist

  • DOCS.md — install steps, every config option, first-run setup, troubleshooting.
  • README.md (repo root) — how to add the repository URL to the Supervisor, and a one-paragraph pitch per add-on. Note that add-ons are not distributed via HACS (HACS is integrations/cards) — users add the repo URL directly.
  • Before calling it publishable, verify:
    • repo is public
    • GHCR package ghcr.io/<owner>/<arch>-<slug> is public (else installs fail)
    • version matches across config.yaml, CHANGELOG.md, and the release tag
    • LICENSE holder is correct (GitHub detects a clean SPDX license)

Output

Write real files (not a description of them). After scaffolding, print the exact install instructions and the remaining manual gates (make public, GHCR visibility).

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most project setup skills give in ~1.4k tokens

Counted across 1,553 of the 3,091 authors here whose files we hold, read 2026-09-06

  • Write the configuration filein 36 of 1553
  • Create the directory structurein 35 of 1553, across 33 files
  • Verify the setupin 31 of 1553, across 28 files
  • Run the setup scriptin 30 of 1553, across 29 files
  • Pre-determine the required sample sizein 29 of 1553, across 12 files
  • Check if the configuration already existsin 29 of 1553
  • Document every testin 26 of 1553, across 10 files
  • Start with a hypothesisin 26 of 1553, across 11 files
  • Ask one question at a timein 22 of 1553
  • Test a single variable per testin 21 of 1553, across 9 files
  • Read product marketing context before asking questionsin 19 of 1553, across 8 files
  • Do not peek and stop earlyin 18 of 1553, across 7 files

Said here and by no other author read

  • Prefer editing an existing add-on repo
  • Establish slug, purpose, runtime, needs, and arch
  • Read repository and sibling add-on first
  • Expose every tunable via options and schema
  • Request only the access you use
  • Set ingress to true for web UI

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.