v0.18.0
thevoiceguy/siphon-aiv0.18.0Jun 26, 2026by github-actions[bot]
Upgrading?
AI Summary
The release enhances security by enabling HTTPS for the admin listener and introduces new variable expansion capabilities allowing secrets to be resolved from files or systemd credentials.
Key Highlights
- Admin listener TLS/HTTPS support
- Secret resolution from files (`${file:...}`)
- Secret resolution from systemd credentials (`${cred:...}`)
- Hot-reloadable TLS certificates on SIGHUP
New Features
- Admin TLS configuration
- File-based secret loading
- Systemd credential loading
Full Release Notes
### Added
- **Admin listener TLS — `[admin.tls]`** (P1 "Security & abuse hardening";
second chunk of v0.18.0). The authenticated `[admin]` listener can now serve
**HTTPS** directly, so the bearer token is encrypted on the wire on a
routable bind without a TLS-terminating proxy. Set `[admin.tls].cert` +
`.key` (both required when the table is present; missing/empty → fatal at
load). The cert is loaded at startup (fail-loud) and **hot-reloaded on
`SIGHUP`** alongside `[sip.tls]` — the next connection picks up the new cert,
in-flight ones keep theirs, and a broken PEM keeps the previous cert
(nginx-style). New metric `siphon_ai_admin_tls_reload_attempts_total`
`{outcome=ok|failed}`. Without `[admin.tls]` a non-loopback bind still works
but logs a sharpened startup warning (the token travels in the clear). See
`docs/CONFIG.md` → `[admin.tls]`.
- **Secret resolution from files & systemd credentials** (P1 "Security &
abuse hardening"; first chunk of v0.18.0). Config `${...}` references can now
pull a secret from outside the process environment, so plaintext secrets
needn't sit in env vars (visible in `/proc/<pid>/environ`, dumps, unit
files). Two new source prefixes, usable anywhere `${VAR}` works:
`${file:/path/to/secret}` (trimmed file contents — Docker/Kubernetes
secrets, Vault-Agent templated files) and `${cred:NAME}`
(`$CREDENTIALS_DIRECTORY/NAME` — systemd `LoadCredential=`). Same fail-loud
pass as `${VAR}`: a missing file, unset `$CREDENTIALS_DIRECTORY`, or path
traversal in a credential name fails the load. `${VAR}`/`${VAR:-default}`
behaviour is unchanged (the `:-` default operator still wins, so
`${file:-x}` stays an env reference). See `docs/CONFIG.md` → *Secrets &
variable expansion*.
---
**Artifacts**
- Static musl binaries for `x86_64` and `aarch64` (`.tar.gz`).
- Debian packages (`.deb`) for `amd64` and `arm64` — `apt install ./siphon-ai_*_amd64.deb`.
- `SHA256SUMS` — verify with `sha256sum -c SHA256SUMS`.
- `*-sbom.cdx.json` — CycloneDX SBOM.
- `SHA256SUMS.cosign.bundle` — cosign keyless signature over the checksums.
- Container: `ghcr.io/thevoiceguy/siphon-ai:v0.18.0` (multi-arch, cosign-signed).
Verify the checksums signature:
```
cosign verify-blob --bundle SHA256SUMS.cosign.bundle \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity-regexp 'release.yml@' SHA256SUMS
```
Related Repositories
A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.
Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one