Skip to content

April updates: CLI rewrite, Slack multi-bot routing, and scheduler fixes

The CLI reference is finally complete. PR #170 filled in the missing commands and options, and the website now rewrites the talonctl reference from the live CLI rather than partial hand-written notes. That matters because the old page still described removed A2A commands, older schedule syntax, and a few flags that no longer existed.

The biggest content change is the talonctl page itself. It now documents every command currently exposed by the binary, including provider management, schedule management, WhatsApp authentication, run-subagent, and the current A2A subcommands. The docs now match --help, which is the only version that counts.

PR #146 introduced the core multi-connector work: multiple connectors of the same type in one daemon, sibling bot filtering for Telegram, and clean routing by channel name. PR #171 closes the Slack side of that story.

When multiple Slack bots share a channel, Talon now only processes top-level channel messages that mention the specific bot. DMs still work without mentions. Thread replies still work without re-mentioning the bot on every message. That stops the “four bots answer at once” problem without breaking the virtual-team pattern the feature was built for.

The Slack connector also supports an optional botUserId config field. If you set it, Talon validates the bot token against Slack’s auth.test response during startup. Wrong token paired with the wrong bot config now fails fast instead of producing weird routing behavior later.

PR #163 is small but important: schedule_manage is the durable scheduler interface. Schedules are stored in SQLite and survive restarts. Model-native cron helpers are session-bound and should not be used for anything you expect to persist.

PR #155 changes how time is injected into prompts. Instead of a second-by-second timestamp that blows provider-side caches on every run, Talon now injects a stable 10-minute window. PR #157 adds the obvious follow-up: if an agent needs the exact time, the prompt tells it to use the shell instead of pretending.

Runtime behavior that changed under the hood

Section titled “Runtime behavior that changed under the hood”

PR #166 moves context rotation after reply delivery and message persistence. Users now get the answer immediately even when the turn crosses a rotation threshold, and the transcript ordering stays correct for the next inbound message.

PR #154 fixes a provider mismatch in background agents. If a persona had model: gpt-5.4 but no explicit provider, background tasks could fall back to the background default provider while still receiving the persona’s model flag. That cross-provider model forwarding is gone. If you want a specific provider/model pairing in background work, configure both.

PR #169 doubles the memory-groomer timeout from 90 seconds to 180 seconds. Nothing glamorous there, but it removes a real failure mode on larger memory stores.

The docs updates that ship with this batch cover the CLI rewrite, Slack shared-channel behavior, durable scheduling, provider/model pairing rules for background agents, the 10-minute time window, and the longer memory-groomer timeout.