In CliGate, that also made the scheduling model much easier to trust: each fire can be a clean round, while things like a running diary can still opt into shared context.
The tricky part was not starting the run. It was pausing honestly.
Background runs do not always finish cleanly.
Sometimes the assistant needs the user.
Maybe a credential is missing. Maybe a choice matters. Maybe a risky action needs confirmation.
If that happens inside a hidden scheduled-task scope, the run cannot just hang there forever.
So the assistant needed a bridge back to the user-facing conversation.
The model that finally felt right was:
- scheduled run happens in a hidden scope conversation
- visible conversations only get notifications
- if the run pauses on the user, remember which scheduled task is waiting
- when the user replies in the visible conversation, route that reply back to the paused background run
That was the difference between "background automation" and "a silent dead end."
The UI had to explain the tradeoff clearly
One thing I like about this setup is that the user-facing choice is simple.
A scheduled task can either:
-
notify user with a static message, or
-
invoke assistant with a real instruction
And when invoking the assistant, two more controls matter a lot:
- optional working directory
- whether runs share context or start fresh
That is enough surface area to be useful without turning scheduling into a mini workflow engine.
Most people do not want cron trivia. They want to say:
- every morning, summarize this project
- tonight, publish the draft
- every weekday, check this thing and message me if it failed
That is the level an assistant should operate at.
The result was a more believable assistant
The biggest win was not technical elegance.
It was behavioral honesty.
The assistant no longer had to pretend every task was a live chat exchange.
Now it can:
- wake up later
- run unattended
- keep background work out of the main conversation
- push a result back when it is done
- ask for help only when it actually needs help
- continue from the user's reply instead of losing the thread
That made CliGate feel a lot less like "chat with extra steps" and a lot more like an actual local operator.
If you are building AI assistants, this is the line I would not blur: a scheduled reminder is not the same thing as a scheduled assistant run, and users feel the difference immediately.