v0.18.1
ductor v0.18.1
A quality-of-life release. The headline: reply to any message in Telegram and the agent finally sees what you're pointing at — even when you answer with a voice note. Plus per-provider control over skill sync, quieter cron jobs, and a Windows polish pass.
TL;DR
- Quoted replies reach the agent — use Telegram's native reply gesture on any message (a cron brief, a bot answer, your own note) and the quoted text is carried into the prompt. Works for text and voice/photo/video replies. (#135)
- Skill sync is toggleable per provider — keep the shared skill workflow for some tools while leaving others (e.g.
~/.codex/skills) completely untouched. (#141) - Silent cron jobs —
silent_on_successmutes the Telegram push when a job succeeds; failures still come through. (#133) - Redirect cron jobs —
cron_editcan move an existing job to another chat/topic/transport without recreating it. (#134) - Windows polish — no more console-window flicker from background subprocess probes under
pythonw.exe. (#152)
Reply to anything — the agent reads the quote
Before, replying to a message in Telegram dropped the quote: the agent saw only your new message, not what it referred to. Now ductor reads the cited text and hands it to the agent with clear labels:
Reply to your 7am cron brief with "expand on point 3", and the agent receives:
The user is replying to this quoted message: > Point 3: Deploy on Friday The user's message: expand on point 3
It prefers the exact fragment you highlight (Telegram's partial-quote feature) over the whole message. And it works when your reply isn't text — answer with a voicemail, photo, or video and the agent gets the quote plus a note about what you sent:
The user is replying to this quoted message:
> Point 3: Deploy on Friday
Their reply is a voice message (the attached file below).
[INCOMING FILE]
...
So it transcribes the voice note already knowing what you're responding to. No more copy-pasting the original message.
Skill sync, your way
Cross-tool skill sync keeps skills shared across ~/.claude/, ~/.codex/, and ~/.gemini/. If you manage one tool's skills independently, you can now opt out — globally or per provider — in config.json:
{
"skills": {
"sync_enabled": true,
"sync": { "claude": true, "codex": false, "gemini": true }
}
}A disabled provider is left completely alone: nothing linked in, nothing recreated on the next sync tick. Read live, so it takes effect without a restart.
Cron quality of life
silent_on_success(#133) — set it on a job, or pass--silent-on-successtocron_add/cron_edit. Successful runs stop pushing to Telegram; errors are always delivered, so you still hear about failures. Perfect for nightly indexing/cleanup jobs.- Editable destination (#134) —
cron_edit --chat-id / --topic-id / --transport / --clear-topic-idredirects an existing job to a different chat or topic while keeping its run history.
Windows
- No more console flicker (#152) — non-interactive subprocess probes (auth/model checks, npm/node discovery,
tasklist/taskkill, the updater) now passCREATE_NO_WINDOW, so a background bot running aspythonw.exeno longer flashes a console window.
Verification
pytest— affected suites green (telegram, cron, skills); full suite green earlier in the cycle (3797 tests)ruff format --check .,ruff check .,mypy ductor_bot— cleanductor --version→ductor 0.18.1
Full changelog: v0.18.0...v0.18.1