Skip to content

ductor v0.11.0

Choose a tag to compare

@PleasePrompto PleasePrompto released this 02 Mar 16:02
· 252 commits to main since this release

ductor v0.11.0

Background tasks, timeout resilience, startup recovery, and a bunch of fixes. The biggest release since launch — 88 files changed, ~6800 lines added.

Background Tasks

Every chat — main or sub-agent — can now delegate long-running work to background tasks. You keep chatting while the task runs autonomously.

The agent decides on its own when to delegate (anything likely taking >30 seconds), but you can also tell it explicitly. When a task finishes, its full result flows back into your chat context — as if the agent had done the work itself.

You:  "Research the top 5 competitors and write a summary"
  → Agent delegates this to a background task automatically
  → You keep chatting: "While that's running, explain our pricing model"
  → Task finishes → result delivered into your conversation

You:  "Delegate this: generate PDF reports for all Q4 metrics"
  → Explicitly delegated — task starts, you keep chatting
  → Task has a question? It asks the agent, agent asks you, you answer, task continues
/tasks                      → view/manage all background tasks

Each task gets its own memory file (TASKMEMORY.md) in the workspace and can be resumed with follow-up prompts. Tasks are isolated per agent — a sub-agent's tasks live in its own workspace with its own provider.

Timeout Controller

Long-running CLI streams no longer die silently at the timeout boundary.

  • Staged warnings at T-60s and T-10s so you know what's coming
  • Activity-based extension — if the CLI is still producing output, the timeout extends automatically (configurable max)
  • User-facing messages in Telegram for all timeout events

Startup Recovery

When the bot restarts (service restart, reboot, crash), interrupted work is automatically recovered.

  • Boot ID tracking — detects restart vs. reboot
  • Inflight turn persistence — tracks what was running when the bot stopped
  • Recovery planner — resumes interrupted foreground turns and named sessions
  • Lifecycle notifications — Telegram shows "Service restarted" / "Reboot detected"

Fixes

  • Internal API startup failure propagation — if the inter-agent API can't bind its port, startup fails immediately instead of continuing in a broken state (#21, thanks @clawinbox24!)
  • Gemini 3.1 models visible — removed isActiveModel filter that hid preview models like gemini-3.1-pro-preview (#22)
  • Gemini model cache refresh on startup — models are now always rediscovered on bot restart (matching existing Codex behavior)
  • Task rules for Geminiask_parent.py instructions are now more prominent so Gemini CLI agents actually use the tool instead of writing questions as text
  • Session recovery status — stores correct "idle" status instead of "running"
  • Chat-ID resolution — happens before parallel-limit check in TaskHub
  • Per-agent CLI binding — sub-agent tasks use the correct provider
  • Agent isolation — task list/cancel/resume API endpoints respect agent boundaries

Documentation

  • README rewrite — sessions, background tasks, and sub-agents each get their own section with examples and a comparison table
  • Updated docs across all modules for new features

Community

This release includes work inspired by two community pull requests:

  • #20 by @jhste102lab — timeout resilience, restart visibility, and auto-resume recovery (changes adapted and integrated)
  • #21 by @clawinbox24 — propagate internal API startup failures (merged directly)

Thank you both!

Stats

  • 88 files changed, ~6850 insertions
  • 2727+ tests passing
  • mypy clean, ruff clean

Upgrade

ductor upgrade
# or
pip install --upgrade ductor