diff --git a/claude_desktop/CHANGELOG.md b/claude_desktop/CHANGELOG.md index 9dfed9c476..3a36c5e444 100644 --- a/claude_desktop/CHANGELOG.md +++ b/claude_desktop/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.5 (07-07-2026) + +- Change the default Claude Desktop data location to `/data/data`. +- Add Home Assistant smart context, Home Assistant MCP, and dangerous permission skip options. + ## 1.4 (07-07-2026) - Persist Claude Desktop sign-in: bundle gnome-keyring/libsecret/dbus-x11 and start an unlocked Secret Service in the desktop session, and launch with --password-store=gnome-libsecret. Fixes "Your sign-in won't be saved on this device. Install and unlock a system keyring". The keyring DB lives on persistent storage (/config/data), so the session survives restarts. diff --git a/claude_desktop/Dockerfile b/claude_desktop/Dockerfile index ce94689de0..22f4da2ea1 100644 --- a/claude_desktop/Dockerfile +++ b/claude_desktop/Dockerfile @@ -31,12 +31,12 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"] # Allow UID and GID setting # hadolint ignore=SC2015,DL4006,SC2013,SC2086 RUN \ - usermod --home /config/data abc && \ + usermod --home /data/data abc && \ if [[ -d /etc/services.d ]] && ls /etc/services.d/*/run 1> /dev/null 2>&1; then sed -i "1a set +e" /etc/services.d/*/run; fi # Global LSIO modifications COPY ha_lsio.sh /ha_lsio.sh -ARG CONFIGLOCATION="/config/data" +ARG CONFIGLOCATION="/data/data" RUN chmod 744 /ha_lsio.sh && if grep -qr "lsio" /etc; then /ha_lsio.sh "$CONFIGLOCATION"; fi && rm /ha_lsio.sh ################## diff --git a/claude_desktop/README.md b/claude_desktop/README.md index 97338dc242..5cb6e4421d 100644 --- a/claude_desktop/README.md +++ b/claude_desktop/README.md @@ -19,7 +19,7 @@ Claude Desktop sign-in requires a claude.ai plan that supports the Desktop app. - Claude Desktop in single-app Selkies mode. - Home Assistant ingress support. -- Persistent `$HOME` under `/config/data`, preserving Claude Desktop and Claude Code sign-in state across restarts. +- Persistent `$HOME` under `/data/data`, preserving Claude Desktop and Claude Code sign-in state across restarts. - Optional runtime Claude Desktop updates from Anthropic's apt repository. - Optional extra apt and pip package installation. - Baked-in `git` and GitHub CLI (`gh`) with optional startup credential configuration. @@ -45,9 +45,12 @@ Claude Desktop sign-in requires a claude.ai plan that supports the Desktop app. | `github_token` | | Optional GitHub personal access token used to authenticate `gh` and configure Git credentials for GitHub. | | `github_username` | | Optional global Git author name. | | `github_email` | | Optional global Git author email. | +| `ha_smart_context` | `true` | Enable Home Assistant smart context support for Claude tooling. | +| `enable_ha_mcp` | `true` | Enable Home Assistant MCP support for Claude tooling. | +| `dangerously_skip_permissions` | `false` | Expose Claude Code's dangerous permission skip mode option. Only enable if you understand the risk. | | `additional_apps` | | Comma-separated Debian apt packages to install at startup, for example `htop,git`. | | `additional_pip` | | Comma-separated pip packages to install at startup. Installs use `--break-system-packages`. | -| `data_location` | `/config/data` | Persistent home directory location. Keep this persistent so Claude sign-in survives restarts. | +| `data_location` | `/data/data` | Persistent home directory location. Keep this persistent so Claude sign-in survives restarts. | | `networkdisks`, `cifsusername`, `cifspassword`, `cifsdomain` | | Standard SMB mount options. | | `localdisks` | | Standard local disk mount option. | | `env_vars` | `[]` | Extra environment variables to export into the container. This can override `SELKIES_*` defaults. | diff --git a/claude_desktop/SIGN_IN.md b/claude_desktop/SIGN_IN.md index 87b89e0f19..8bd12589e7 100644 --- a/claude_desktop/SIGN_IN.md +++ b/claude_desktop/SIGN_IN.md @@ -1,11 +1,11 @@ -# Claude Desktop sign-in — fix plan (not implemented) +# Claude Desktop sign-in — shipped fixes and planned work Two related sign-in problems when Claude Desktop runs inside the LinuxServer Selkies streamed desktop. **Status:** -- **Problem B (keyring persistence) — IMPLEMENTED** in v1.4 (Dockerfile + `rootfs/defaults/autostart`). -- **Problem A (in-desktop browser for OAuth) — PLAN ONLY, intentionally not implemented.** +- **Shipped:** Problem B (keyring persistence) is implemented in v1.4 (Dockerfile + `rootfs/defaults/autostart`). +- **Planned only:** Problem A (in-desktop browser for OAuth) is intentionally not implemented. The image ships no browser; complete the login with the user-side workaround below. --- diff --git a/claude_desktop/config.yaml b/claude_desktop/config.yaml index 6ec8cf444f..8be3ea09f0 100644 --- a/claude_desktop/config.yaml +++ b/claude_desktop/config.yaml @@ -11,8 +11,8 @@ devices: - /dev/fuse environment: AUTO_GPU: "1" - FM_HOME: /config/data - HOME: /config/data + FM_HOME: /data/data + HOME: /data/data PGID: "0" PUID: "0" SELKIES_FRAMERATE: "30" @@ -21,6 +21,10 @@ environment: image: ghcr.io/alexbelgium/claude_desktop-{arch} ingress: true init: false +hassio_api: true +hassio_role: manager +homeassistant_api: true +auth_api: true map: - addon_config:rw - share:rw @@ -30,12 +34,16 @@ name: Claude Desktop options: env_vars: [] DNS_server: 8.8.8.8 + data_location: /data/data PGID: 0 PUID: 0 additional_apps: "" additional_pip: "" auto_update: true github_email: "" + ha_smart_context: true + enable_ha_mcp: true + dangerously_skip_permissions: false github_token: "" github_username: "" install_caveman: true @@ -58,6 +66,7 @@ schema: - name: match(^[A-Za-z0-9_]+$) value: str? DNS_server: str? + data_location: str? DRINODE: list(/dev/dri/card0|/dev/dri/card1|/dev/dri/card2|/dev/dri/renderD128|/dev/dri/renderD129|)? KEYBOARD: list(da-dk-qwerty|de-de-qwertz|en-gb-qwerty|en-us-qwerty|es-es-qwerty|fr-ch-qwertz|fr-fr-azerty|it-it-qwerty|ja-jp-qwerty|pt-br-qwerty|sv-se-qwerty|tr-tr-qwerty)? PASSWORD: str? @@ -68,6 +77,9 @@ schema: additional_pip: str? auto_update: bool? github_email: str? + ha_smart_context: bool? + enable_ha_mcp: bool? + dangerously_skip_permissions: bool? github_token: password? github_username: str? install_caveman: bool @@ -78,5 +90,5 @@ slug: claude_desktop tmpfs: true udev: true url: https://github.com/alexbelgium/hassio-addons -version: "1.4" +version: "1.5" video: true diff --git a/claude_desktop/rootfs/defaults/autostart b/claude_desktop/rootfs/defaults/autostart index bc6b9e0dcf..d07c6735ec 100644 --- a/claude_desktop/rootfs/defaults/autostart +++ b/claude_desktop/rootfs/defaults/autostart @@ -4,7 +4,7 @@ # Secret Service API (org.freedesktop.secrets). Provide it with gnome-keyring on the openbox # session bus (startwm.sh runs `dbus-launch --exit-with-session`), unlocked with an empty # password so it comes back automatically after a restart. The keyring DB lives under -# $HOME/.local/share/keyrings, and HOME=/config/data is persistent add-on storage, so the +# $HOME/.local/share/keyrings, and HOME=/data/data is persistent add-on storage, so the # saved sign-in survives add-on restarts. eval "$(gnome-keyring-daemon --start --components=secrets 2>/dev/null)" || true printf '' | gnome-keyring-daemon --unlock 2>/dev/null || true diff --git a/claude_desktop/rootfs/etc/cont-init.d/20-folders.sh b/claude_desktop/rootfs/etc/cont-init.d/20-folders.sh index 917a4952bd..cbcae8160e 100755 --- a/claude_desktop/rootfs/etc/cont-init.d/20-folders.sh +++ b/claude_desktop/rootfs/etc/cont-init.d/20-folders.sh @@ -8,10 +8,10 @@ PUID=$(bashio::config "PUID") PGID=$(bashio::config "PGID") # Check data location -LOCATION="" +LOCATION="$(bashio::config 'data_location')" if [[ "$LOCATION" = "null" || -z "$LOCATION" ]]; then - LOCATION="/config/data" + LOCATION="/data/data" else LOCATIONOK="" for location in "/share" "/config" "/data" "/mnt"; do @@ -21,7 +21,7 @@ else done if [ -z "$LOCATIONOK" ]; then - LOCATION="/config/data" + LOCATION="/data/data" bashio::log.fatal "Your data_location value can only be set in /share, /config, /data or /mnt. It will be reset to the default location : $LOCATION" fi fi @@ -49,7 +49,7 @@ done for folders in /defaults /etc/cont-init.d /etc/services.d /etc/s6-overlay/s6-rc.d; do if [ -d "$folders" ]; then - find "$folders" -type f -exec sed -i "s|/config/data|$LOCATION|g" {} + &> /dev/null || true + find "$folders" -type f -exec sed -i "s|/data/data|$LOCATION|g" {} + &> /dev/null || true fi done @@ -88,7 +88,8 @@ chmod -R 700 "$LOCATION" # on persistent storage and conflicts with the tmpfs runtime dir set above. Re-assert the # tmpfs value at the end of that oneshot so the app and desktop agree on one valid dir. SELKIES_CONFIG_RUN="/etc/s6-overlay/s6-rc.d/init-selkies-config/run" -if [ -f "$SELKIES_CONFIG_RUN" ] && ! grep -q 'XDG_RUNTIME_DIR override reconciled' "$SELKIES_CONFIG_RUN"; then +if [ -f "$SELKIES_CONFIG_RUN" ]; then + sed -i '/^# XDG_RUNTIME_DIR override reconciled$/,+1d' "$SELKIES_CONFIG_RUN" printf '\n# XDG_RUNTIME_DIR override reconciled\nprintf "%%s" "%s" > /run/s6/container_environment/XDG_RUNTIME_DIR\n' "$XDG_RUNTIME_DIR" >> "$SELKIES_CONFIG_RUN" fi