v2026.09.21

onyx-dot-app/onyxv2026.09.21Sep 20, 2026by knu

Upgrading?

AI Summary

Enhances background job management with a new watchdog and optional master process, introduces opt-in proxy routing for Agents, and updates the Ruby and Docker runtimes.

Key Highlights

  • Adds optional `delayed_job_master` process for single-threaded worker management
  • Introduces a watchdog for master-managed workers to handle timeouts and recover abandoned jobs
  • Adds opt-in proxy routing for individual Agents
  • Upgrades Ruby to 4.0.7 and Docker base to Ubuntu Noble

New Features

  • Optional delayed_job_master process
  • Master-managed worker watchdog
  • Opt-in proxy routing for Agents
  • Configurable execution and network timeouts

Full Release Notes

# v2026.09.21

This release improves recovery from stalled background jobs, adds opt-in proxy routing for individual Agents, and updates the Ruby and Docker runtimes.

## Background jobs

- Add an optional `delayed_job_master` process that forks single-threaded workers on demand.  Set `DELAYED_JOB_WORKERS` to control concurrency and `DELAYED_JOB_MAX_MEMORY` to recycle workers after jobs that exceed the memory limit.  The existing threaded runner remains the default; see the separate-process example in [Procfile](https://github.com/huginn/huginn/blob/v2026.09.21/Procfile).
- Add a watchdog for master-managed workers.  It monitors the full reservation, execution and cleanup cycle independently of the database.  When `DELAYED_JOB_MAX_RUNTIME` is exceeded, it requests cancellation and allows `DELAYED_JOB_SHUTDOWN_GRACE` seconds (default: 10) for cleanup before forcibly terminating the worker.  Abandoned jobs are recovered through the normal failure and retry policy.  This watchdog applies to master-managed workers, not the threaded runner or directly executed scheduler work. [#3755](https://github.com/huginn/huginn/pull/3755)
- Limit Agent execution-lock acquisition to 30 seconds by default, configurable with `AGENT_EXECUTION_LOCK_TIMEOUT`.  Background jobs that cannot acquire the lock fail and can be retried. [#3745](https://github.com/huginn/huginn/pull/3745)
- Apply configurable outbound connection and I/O timeouts through `OUTBOUND_NETWORK_OPEN_TIMEOUT` and `OUTBOUND_NETWORK_TIMEOUT`, capped below the background job runtime limit. [#3745](https://github.com/huginn/huginn/pull/3745)
- Fix "Run now" for failed jobs by clearing exhausted attempts and stale reservation state before requeuing. [#3755](https://github.com/huginn/huginn/pull/3755)

## Proxy routing

Trusted-user instances can set `AGENT_PROXY` and enable `use_agent_proxy` on selected Agents, including JavaScriptAgent's `Agent.fetch` and `Agent.fetchAll`.  The Docker images support `START_SMOKESCREEN=true` to start the bundled filtering proxy without forcing all requests through it.  Existing `ENABLE_SMOKESCREEN` and `OUTBOUND_PROXY` enforcement takes precedence and is unchanged.  See [outbound request configuration](https://github.com/huginn/huginn/blob/v2026.09.21/doc/manual/outbound-requests.md).

## Runtime and Docker fixes

- Upgrade Ruby to 4.0.7 and the Docker base to Ubuntu Noble, fixing a `mini_racer` load error during asset precompilation. [#3753](https://github.com/huginn/huginn/pull/3753)
- Make single-process Docker workers wait for pending migrations before starting. [#3746](https://github.com/huginn/huginn/issues/3746)
- Fix FtpsiteAgent initialization on Ruby 4 when FTP timeout options were mistaken for the host.
- Refresh dependencies and keep `json` below 3.0 pending dependency compatibility.

Docker images are available for amd64 and arm64 on GHCR and Docker Hub, tagged `v2026.09.21`.

**Full Changelog**: https://github.com/huginn/huginn/compare/v2026.09.09...v2026.09.21

Related Repositories