zeekay 86301446c5 the engine hands a composer a zip app, not a handler
A composer had one way to mount the engine: take HTTPHandler and adapt it,
which puts sixty-odd operations behind one opaque wildcard the composing
router cannot see into. Surface registers them as real routes, so
app.Use(engine.Surface()) puts every address in the composed router and in
every projection that reads it.

Both renderings reach the same functions -- a call in, an answer out --
so the two transports cannot describe one operation differently, and
HTTPHandler is unchanged for callers that have it.

The wire is held by a test rather than by intent.
TestSurfaceAnswersWhatTheMuxAnswers drives the same requests through both
and compares status, body, Content-Type and Location. It replaced a probe
that printed the two answers and asserted nothing, and the first thing it
found was real: http.ServeMux tidies a path with an empty or dot segment
and redirects to the tidied form before matching, so /namespaces//workflows
was a redirect through the mux and a 404 here. The wildcard answers that
redirect now, with the body http.Redirect writes and only for the methods
it writes one for.
2026-08-25 13:19:08 -07:00
2026-08-02 09:45:33 -07:00
2026-08-02 09:45:33 -07:00
2026-06-28 20:09:59 -07:00

tasks

Hanzo Tasks

Durable workflow execution engine for AI agent orchestration.

GitHub License

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.

License

MIT License

S
Description
No description provided
Readme MIT
139 MiB
Languages
Go 85.4%
TypeScript 12.3%
ZAP 1%
Shell 0.6%
Dockerfile 0.4%
Other 0.2%