July 8, 2026 — Matteo Merola
Release Notes: v0.29 – v0.31
Sidecar architecture for slimmer deployments, remote voice backends, multilingual embeddings, and an accessibility overhaul.
v0.29 — Webhook Workflows + YOLO Mode
v0.29 polishes the GitHub webhook integration from v0.25–v0.26 and flips a major default: new agent conversations now start with tool approvals pre-granted. If you want guardrails, you still have them — but the out-of-the-box experience is frictionless.
Multi-agent webhook workflows
- Multi-agent routing — a single GitHub App can now route events to multiple agents based on mention gates and author filters. Each agent gets its own isolated conversation thread per event.
- Acknowledgement reaction — when an agent starts processing a webhook event, it reacts with
👀in the ping chat so you know the event was picked up. - Bot identity in tasks — background webhook tasks now state which bot is handling the event, replacing the generic delivery notification.
YOLO mode on by default
Previously, every tool call required explicit approval via Telegram inline buttons unless you configured ALWAYS rules. Starting in v0.29, new conversations default to auto-approve. The permission system is still there — ASK and NEVER rules override YOLO — but the default path is now "trust the agent, intervene when needed." This matches how most users were already configuring humux after the first week.
Other changes in v0.29
- Max tokens + tool rounds config — set
max_tokensandmax_tool_roundsper agent in the admin UI. Prevents runaway turns and gives you control over response length. - Scheduler job isolation — each scheduled job now gets its own conversation context, preventing state bleed between cron runs of the same agent.
- Per-agent tool env — agents seed their executor with per-agent environment variables instead of the system-level env, so tool commands inherit the right credentials.
v0.30 — Sidecars, Remote Voice, Slim Image
The biggest architectural change since the project started. Heavy dependencies — Whisper, fastembed, Kokoro, and Chromium — are now optional. Run them inside the main container, offload them to Docker sidecars, or point at a remote API. The core image drops from over 4 GB to under 1 GB when you disable all optional extras.
Sidecar architecture
Four heavy dependencies are now gated behind build args and have companion Docker sidecar services:
services:
humux:
image: ghcr.io/mattmezza/humux:latest
# Core image — no Whisper, no fastembed, no Kokoro, no Chromium
whisper: # Optional: local STT
image: fedirz/faster-whisper-server
deploy:
resources:
reservations:
devices: [{ capabilities: [gpu] }]
embeddings: # Optional: local embeddings
image: michaelf34/infinity
command: v2 --model-id intfloat/multilingual-e5-small
kokoro: # Optional: local TTS
image: ghcr.io/remsky/kokoro-fastapi
deploy:
resources:
reservations:
devices: [{ capabilities: [gpu] }]
browser: # Optional: headless browser
image: browserless/chrome
- Build args —
INSTALL_WHISPER,INSTALL_FASTEMBED,INSTALL_NODE, andINSTALL_BROWSERcontrol what gets baked into the image. All default tofalsefor the published image. - Multi-stage Dockerfile — Go toolchain (used for building wacli) is dropped from the runtime image via a multi-stage build. The final layer only contains Python and the compiled binaries.
- Idempotent sidecar management — the
make sidecar-*targets clean up stale containers before starting new ones, so restarts are always clean.
Remote voice backends
Both STT and TTS now support remote backends via OpenAI-compatible APIs. Point humux at any service that speaks the /v1/audio/transcriptions or /v1/audio/speech protocol — your own Whisper server, a cloud provider, or the bundled sidecar.
- Remote STT — set
stt_api_base_urlin voice config. Priority: remote API first, local faster-whisper as fallback. If both are unavailable, the voice message is skipped with a user-facing error. - Remote TTS — set
tts_api_base_urlin voice config. Same priority pattern: remote first, local fallback. Preview failures on remote TTS gracefully degrade to text-only responses. - Mode toggles — the admin Voice tab now has local/remote radio buttons for both STT and TTS. Switch without editing config files.
Multilingual embeddings
The default embedding model has switched from BAAI/bge-small-en-v1.5 to intfloat/multilingual-e5-small. If you have existing memory, use the new reindex CLI command to rebuild your embeddings with the new model. The sidecar embedding service uses the same model by default.
Accessibility and UI polish
- Accessibility sweep — every form field across the admin UI now has proper
for/idpairs,autocompleteattributes, and accessible labels. Radio groups use properfieldset/legendpatterns. - Loading states — all save buttons show spinners during submission. Sub-tabs show skeleton placeholders on initial load instead of a blank flash.
- Dark scrollbars — scrollbars now match the dark theme instead of rendering as bright system defaults.
- Webhook knobs UI — the multi-agent webhook configuration (author gates, mention filters, ping chat) is now editable in the agent editor instead of config files only.
Upgrading
Both releases are backwards-compatible. The default image is now slimmer — if you were relying on bundled Whisper or fastembed, you have two options: add the sidecar services to your compose file, or rebuild the image with the corresponding INSTALL_* build args set to true.
# Pull the new slim image + start sidecars docker compose pull && docker compose up -d # If you switched embedding models, rebuild the index docker compose exec humux uv run python -m core.memory reindex
The remote voice backends are opt-in: configure stt_api_base_url or tts_api_base_url in the Voice tab, or leave them blank to use local models. YOLO mode applies to new conversations only — existing permission rules are unchanged.
v0.31 — Bug Fixes
Patch release fixing CI test failures introduced in v0.30.
- Fix voice settings test after the TTS backend selector was renamed to “TTS engine”.
- Harden git-based skill install tests against CI runner configuration (GPG signing, hooks).
Full changelogs for each release are on GitHub Releases.