Add-on version 1.2.65. This is the Home Assistant add-on's own version, not Anthropic's Claude Code CLI version. The CLI is installed at build time by resolving the newest release that actually runs on your hardware — currently
2.1.205on a CPU with AVX, or2.1.112on one without. No CLI version is pinned.
Security
- The Supervisor token is no longer written to
settings.json.update_mcp_token()in.bashrcwrote$SUPERVISOR_TOKENinto/homeassistant/.claudecode/settings.jsonon everyc/cc, persisting a live credential into the HA config directory — which is included in every backup. The key was also dead:hass-mcpreadsHA_TOKENfrom the environment, which the add-on already exports, and never readsHASS_TOKEN. The function is removed and any previously persisted token is scrubbed once on startup - The token was also interpolated unescaped into a
jqfilter string - AppArmor now grants write access only to
/usr/local/bin/**and/usr/local/lib/node_modules/**instead of all of/usr/local/**
Fixed
-
Add-on failed to start on CPUs without AVX (#24). Claude Code 2.1.113 replaced its JavaScript entrypoint with a Bun-compiled native binary, and Bun's JavaScriptCore requires AVX. On a VM exposing the generic
kvm64CPU model everyclaudeinvocation hangs — includingclaude --version— which blocked startup beforettydbound port 7681, leaving the add-on unhealthy with a near-empty log.Fix this at the hypervisor: set the VM CPU type to
host(Proxmox) or enable host CPU passthrough, then fully stop and start the VM. Verify withgrep -o -m1 avx2 /proc/cpuinfo. Until then the build falls back to 2.1.112, the last release that ran as JavaScript under Node. See anthropics/claude-code#19981 and oven-sh/bun#26353. -
auto_update_claudenever worked (#22, #13). AppArmor granted/usr/local/** ixr, so npm could not write its own global prefix and failed withEACCESon rename even as root.2>/dev/nullhid the error on every boot. -
Build failed with
unknown instruction: set(#19). Heredocs inRUNneed BuildKit plus a# syntax=docker/dockerfile:1.4directive; the shell configs are now plainCOPYfromrootfs/. -
Build aborted on a transient DNS failure (#23).
haandttyddownloads now retry, and the Home Assistant CLI is pinned to 5.2.0. -
Build failed on armv7/armhf/i386 with a 404 — upstream publishes the
haCLI only for amd64 and aarch64; those arches now skip it with a warning. -
settings.jsonis bootstrapped with{}when missing, so the pre-authorized tool list is actually applied on fresh installs. -
enable_mcpandsession_persistencecould not be turned off. Both were read withjq -r '.option // true', and jq's//falls back onfalseas well asnull, so a disabled option resolved back totrue. Settingsession_persistence: falsenow really does drop tmux, restoring native browser scrolling and copy/paste (#14, #20, #25).
Added
install-claude.shresolves the newest Claude Code release that passes aclaude --versionsmoke test. It takeslatestwhenlatestworks, binary-searches for the newest working release when it does not, and fails the build if none do. No version is hardcoded.- Startup health gate: if the CLI does not respond within 30s, MCP setup is skipped and the terminal starts anyway, so a broken CLI no longer presents as "add-on won't start".
- Automatic rollback to the build-verified version when
auto_update_claudeinstalls a release that cannot run. - Startup warns when the CPU lacks AVX and explains the hypervisor fix.
- Persistent tmux overrides (#25):
/homeassistant/.claudecode/tmux.confis sourced last and survives restarts, rebuilds and reinstalls. For exampleecho 'set -g mouse off' > /homeassistant/.claudecode/tmux.conf.
Changed
- The unpinned
npm install -g @anthropic-ai/claude-codeis replaced by the resolver above, so a rebuild can no longer silently swap in a release that does not run. claude mcpcalls are wrapped intimeout; a hang can no longer block startup.- Startup no longer discards npm's stderr.
Also in this release cycle: Playwright Browser 0.1.12 fixes the apt-get: not found build failure (#35, #28). Supervisor's build_from regex rejected mcr.microsoft.com/playwright (single path segment), silently fell back to the Alpine HA base, and apt-get did not exist there. Credit to @sergiorademacher (#31).
Fixes #24, #22, #19, #23, #13, #26. Credit to @adebree for independently identifying the Proxmox cpu: host fix in #24, and to @apbb2 for flagging the persisted Supervisor token.