Skip to content

v0.18.1

Choose a tag to compare

@PleasePrompto PleasePrompto released this 13 Jun 05:37

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 jobssilent_on_success mutes the Telegram push when a job succeeds; failures still come through. (#133)
  • Redirect cron jobscron_edit can 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-success to cron_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-id redirects 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 pass CREATE_NO_WINDOW, so a background bot running as pythonw.exe no 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 — clean
  • ductor --versionductor 0.18.1

Full changelog: v0.18.0...v0.18.1