WorkflowExecutionRetentionTtl (default 720h) was stored and read nowhere, so finished runs and every key they own stayed forever. runPurge, beside the cron sweeper, now runs every 5 s across every tenant. Each pass reads up to 512 of a namespace's run rows, workflow runs then standalone activities, from a cursor at purge/<ns>, and removes each terminal run whose close time plus the retention has passed: wf, wfh, wfact, wfopen and the idem and sctrig entries naming it, or act, ahist and the aidem entries naming it. Every delete goes through the replicated delete path, the row last, so a pass cut short leaves the row to find the rest by. The row is re-read under the run lock first; an open run is never touched. A retention that does not parse purges nothing and is reported. Each pass ends in Shard.Reclaim, and a default-mode shard is rebuilt at the end of a walk, when it is smallest, so the file shrinks. On a 1.71 GiB shard of 200k expired runs and 10 open ones, 392 passes removed them (p99 197 ms a pass), the file went to 132 KiB, and Embed took 5 ms and 16 MB peak RSS. Co-authored-by: Hanzo Dev <[email protected]>
Introduction
Hanzo Tasks is a durable execution engine that powers AI agent orchestration in the Hanzo ecosystem. It enables developers to build scalable, fault-tolerant workflows that automatically handle intermittent failures and retry failed operations.
Tasks provides the backbone for:
- Playground spaces -- each space maps to a Tasks namespace
- Agent execution -- each agent runs as a Tasks worker
- Durable cron and batch jobs -- reliable scheduled and bulk operations
MIT licensed. See LICENSE.
Getting Started
Build
make tasksd
Run
./tasksd start
Or with a config file:
./tasksd --config-file config/development-sqlite.yaml --allow-no-auth start
Build from source
go build ./cmd/tasksd/
./tasksd start
Module
github.com/hanzoai/tasks
Integration
Hanzo Tasks integrates with the broader Hanzo ecosystem:
- Playground connects to the Tasks server via the durable-execution SDK
- Base embeds Tasks for durable cron/batch execution
- Each playground space = a Tasks namespace
- Each agent = a Tasks worker
Repository
This repository contains the source code of the Hanzo Tasks server.
The wire is luxfi/zap (binary, native, on _tasks._tcp:9999).
There is no gRPC and no go.temporal.io anywhere in the build.
To drive Tasks from Go, depend on pkg/sdk — the native
ZAP client. To embed the server in a Go process (e.g. a Hanzo Base
app), depend on pkg/tasks and call tasks.Embed().
Browser clients hit the JSON shim at /v1/tasks/* and the realtime
stream at /v1/tasks/events (Server-Sent Events). AI agents hit the
MCP surface at /v1/tasks/mcp (JSON-RPC 2.0).
Contributing
See CONTRIBUTING.md for development setup and guidelines.