Upstream published a new release: v0.18.1.
Suggested follow-up
- Review the upstream changelog and commits.
- Decide which changes need to be ported into this fork.
- Track any fork-specific conflicts before merging or cherry-picking.
Upstream release notes
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
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
Windows
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 — clean
ductor --version → ductor 0.18.1
Full changelog: PleasePrompto/ductor@v0.18.0...v0.18.1
Upstream published a new release: v0.18.1.
Suggested follow-up
Upstream release notes
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
~/.codex/skills) completely untouched. ([Feature]: Add configuration to disable cross-tool skill sync per provider PleasePrompto/ductor#141)silent_on_successmutes the Telegram push when a job succeeds; failures still come through. ([Feature]: silent_on_success flag for cron jobs (no Telegram push when nothing useful to say) PleasePrompto/ductor#133)cron_editcan move an existing job to another chat/topic/transport without recreating it. ([Feature]: Add --chat-id / --topic-id / --transport flags to cron_edit PleasePrompto/ductor#134)pythonw.exe. (Windows background task flashes console windows for some subprocess probes PleasePrompto/ductor#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:
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:
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 — inconfig.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([Feature]: silent_on_success flag for cron jobs (no Telegram push when nothing useful to say) PleasePrompto/ductor#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.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
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.1Full changelog: PleasePrompto/ductor@v0.18.0...v0.18.1