diff --git a/agents/runtime.go b/agents/runtime.go index 19ab667..9eacd54 100644 --- a/agents/runtime.go +++ b/agents/runtime.go @@ -24,6 +24,7 @@ import ( "github.com/enmanuel/agents/pkg/personality" "github.com/enmanuel/agents/pkg/sanitize" "github.com/enmanuel/agents/shell/bus" + shellcron "github.com/enmanuel/agents/shell/cron" "github.com/enmanuel/agents/shell/effects" shellknowledge "github.com/enmanuel/agents/shell/knowledge" shelllm "github.com/enmanuel/agents/shell/llm" @@ -93,6 +94,9 @@ type Agent struct { // Bus — set via SetBus() when running under the unified launcher agentBus *bus.Bus + + // Scheduler — nil when no schedules are configured + scheduler *shellcron.Scheduler } // ClearWindow resets the conversation window for a room and deletes persisted @@ -308,6 +312,12 @@ func New(cfg *config.AgentConfig, rules []decision.Rule, logger *slog.Logger) (* toolReg.Register(toolmemory.NewMemoryClearContext(a, roomCtx)) } + // Cron scheduler — only when schedules are configured + if len(cfg.Schedules) > 0 { + a.scheduler = shellcron.New(cfg.Schedules, matrixClient, llmFunc, cfg.LLM.Primary.Model, logger) + logger.Info("cron scheduler configured", "schedules", len(cfg.Schedules)) + } + // Matrix event listener a.listener = matrix.NewListener(matrixClient, cfg.Matrix, a.handleEvent, logger) @@ -420,6 +430,11 @@ func (a *Agent) Run(ctx context.Context) error { a.logger.Info("bus listener started") } + // Start cron scheduler in background goroutine (blocks until ctx cancelled) + if a.scheduler != nil { + go a.scheduler.Start(ctx) + } + return a.listener.Run(ctx) }