By AgentWorkforce
Agents that
don’t wait
to be asked.
The runtime for proactive agents — schedules, triggers, watchers, durable wake/sleep. Framework-agnostic.
✦ The shift
Most agents wait to be prompted.
A proactive one already handled it.
Reactive
Wakes up when called.
Polls every N seconds. Forgets between runs. Finishes work that’s no longer relevant.
Proactive
Wakes up because something moved.
Push, not poll. Persistent state. Stops mid-task when the premise stops being true.
✦ The triple
A clock, a watcher, an inbox.
the clock
relaycron
cron.schedule("0 9 * * *", agent)the watcher
relayfile
file.on("change", agent)the inbox
relaycast
cast.on("message", agent)
✦ The webhook tax
Eight weeks, or one afternoon.
app.post("/webhooks/linear", raw, async (req, res) => {
// verify HMAC, respond <2s, enqueue, dedupe,
// filter, fetch full payload, load context, fire agent
// ...for every provider, with their own quirks.
});import { workspace } from "@proactive/runtime";
workspace("acme/ops").on("change", async (file) => {
await agent.handle(file);
});Endpoints, signatures, dedupe, registration, normalisation — handled. Adding a provider is a config line. Read the full breakdown.