From de1342f7fedaf31a91c62262d9190f8a28e9ff82 Mon Sep 17 00:00:00 2001 From: Eric Jacksch Date: Fri, 20 Mar 2026 02:58:26 -0400 Subject: [PATCH] fix(cron): set peer on inbound message so channel bindings route correctly Cron jobs fired via ProcessDirectWithChannel had no Peer set on the InboundMessage, so the route resolver never matched peer-based bindings and always fell through to the default agent. Setting Peer{Kind: "channel", ID: chatID} when a real chatID is present means a cron job targeted at a specific Slack channel ID will now be routed to whichever agent has a matching peer binding for that channel, consistent with how live inbound messages are routed. Co-Authored-By: Claude Sonnet 4.6 --- pkg/agent/loop.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/agent/loop.go b/pkg/agent/loop.go index c4479434f..b05f02c6e 100644 --- a/pkg/agent/loop.go +++ b/pkg/agent/loop.go @@ -679,6 +679,12 @@ func (al *AgentLoop) ProcessDirectWithChannel( Content: content, SessionKey: sessionKey, } + // Set peer so channel-based bindings (e.g. a specific Slack channel mapped + // to a named agent) are matched by the route resolver, exactly as they are + // for live inbound messages. + if chatID != "" && chatID != "direct" { + msg.Peer = bus.Peer{Kind: "channel", ID: chatID} + } return al.processMessage(ctx, msg) }