Get Started
Your agent can start subagents and schedule messages to itself. Ask for a briefing at six, a check every hour, or three searches at once, and Link Harness has it on already.
You need the agents plugins, which lnk up agents installs and which
bring Link Scheduler, and a harness that reads who a message is from.
Link Harness does. There's nothing to set up, because each start gives
the agent its scheduler.
What your agent can do
Your agent can start a subagent, schedule a message to itself, and list
or cancel either. It sees them as four tools, scheduler__task,
scheduler__schedule, scheduler__list and scheduler__cancel.
taskstarts a subagent, a new conversation of its own that begins now with the task it's given. The subagent has the same tools, or fewer iftaskis given a list of names, and it sees nothing else of the conversation it came from. Its answer comes back to that conversation, so your agent can start three, say so, and answer when they're in.schedulesends your agent a message later in this conversation,ata time such as18:00,ina while such as10mor2h, or every so often bycron, as0 6 * * 1-5for six on weekdays. Times are in the agent's time zone, this machine's unless its spec names one. The answer comes to you on this chat, or withanswer = "nowhere"stays in the conversation.listshows what's scheduled in this conversation and the subagents it started that haven't answered, andcancelcancels one by itsid. A conversation never sees or cancels another's.
Your agent does these without asking you. Set [tool.scheduler] ask = true in its spec and each waits for you to allow it, as any tool's call
you haven't allowed does (lnk sandbox asks). A message from a schedule
or a subagent is never taken for yours, and your agent is told who's
speaking.
Turn it off
Turn the scheduler off in your agent's
spec, which you give with
lnk agent start --spec <file>.
[tool.scheduler]
enabled = falseHow it runs
Your agent's bridge fires each job when it's due. The jobs are kept in
the agent's folder (~/Link/Agents/<agent>/Scheduler), and the bridge is
the background service that carries its channels and starts again with
your computer.
A job is kept until its firing ends, and a restart loses nothing. A
message cut off by a restart may come twice. A firing that fails, say
because the bridge isn't up yet or the model provider is unreachable, is
tried again a minute later, then two, four, eight and sixteen minutes
later. After that it's given up, and the bridge's log says so. A firing
that takes longer than the agent's firing limit, 30 minutes by default,
is given up too, and never sent again.
A computer that was asleep through a firing fires it once on waking, or
skips it, as [tool.scheduler] late says. A recurring job never fires
once for every time it missed.
The answer goes where the job says: to the chat, to the conversation a subagent came from, or nowhere. On Telegram, Slack and Discord the chat is only the one you talk to your agent in. On WhatsApp and Signal, and in a group, an answer nobody waits for stays in the conversation.
Its limits and settings
Link's limits are 100 messages a day, 5 subagents at work at once, and
chains 8 deep, as when a subagent starts a subagent. They are keys of
your agent's spec under [tool.scheduler], and
Agent Spec lists them all.
The day is the one in the agent's time zone. Past the day's cap the tool says so and nothing fires: a job due once waits for the next day, and a recurring one for its next time. The cap is what bounds how many messages agents send each other.
Developing it: dev.md.
