ductor v0.11.0
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
isActiveModelfilter that hid preview models likegemini-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 Gemini —
ask_parent.pyinstructions 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