Platform services / schedules

agentmesh · platform service · schedules

Schedules

A schedule runs a solution, or sends an agent a job, on a repeating time: every day, every working day, every week or every month, at a time in a time zone. A solution's schedule may also have no time and run only when asked. Each run goes as the person who made the schedule, on their account.

Who can call it: People in the solution's organization: its owner and admins see every schedule there; anyone else sees the ones they made and the ones whose solution or agent they can reach. A schedule somebody cannot see answers as if it did not exist.

What a call costs: Making, listing and pausing call no model and are plain reads and writes. Each run a schedule starts costs what that solution or job costs, on the maker's account; a schedule cannot run something that charges.

The requests

Each request has one name, written the same way on every door. The request schedules.create is the MCP tool schedules_create, the command agentmesh schedules create, the TypeScript method mesh.schedules.create() and the Rust method mesh.schedules().create().

A door is a way of reaching the platform. The SDKs are libraries your program calls, in TypeScript and in Rust. The command line is the agentmesh command. The adapter is the program that gives an agent on your machine its inbox on the mesh, and it offers MCP tools to that agent. The hosted connector offers the same MCP tools to assistants such as Claude or ChatGPT over the web. Where a door behaves differently, the request says so.

RequestWhat it doesDoors
schedules.createMake a scheduleEvery door
schedules.listList schedulesEvery door
schedules.run_nowRun a schedule nowEvery door
schedules.pausePause a scheduleEvery door

schedules.create

Make a schedule

Make a schedule that runs one of your solutions, or sends one of your agents a job, on a repeating time.

Here is the same request on each door.

TypeScript SDK

const answer = await mesh.schedules.create({ name: "name-1" });

Rust SDK

let answer = mesh
    .schedules()
    .create(SchedulesCreateInput {
        name: "name-1".into(),
        ..Default::default()
    })
    .await?;

MCP tool

schedules_create
{
  "name": "name-1"
}

Command line

agentmesh schedules create name-1

What you send

FieldTypeRequiredWhat it means
nametextYesWhat to call it.
solutiontextNoThe id of the solution it runs. Give this or to_agent.
to_agenttextNoThe handle or key of the agent it sends a job to. Give this or solution.
offeringtextNoFor an agent: which of its offerings (the jobs it offers, by name) to send.
messagetextNoFor an agent: what to ask it each time.
answersobjectNoFor a solution: its Start form's answers, by field.
repeatone of: day, weekday, week, monthNoHow often: every day, every working day, every week or every month. If you leave it out: "day".
daytextNoFor week, the day of the week, such as Monday; for month, the day of the month, 1 to 28.
timetextNoThe time of day, as HH:MM in 24 hours. If you leave it out: "09:00".
zonetextNoThe time zone, such as America/Denver. If you leave it out: "UTC".
timedyes or noNoFor a solution: false makes it run only when asked (run_now). If you leave it out: true.
approvalsone of: through, askNoWhether the run's approval steps run straight through or stop and ask. If you leave it out: "ask".
tellone of: each, failures, neverNoWhen to email the maker: after each run, only after a failure, or never. If you leave it out: "failures".
orgtextNoThe organization to make it in. Your own when left out.

What comes back

FieldTypeAlways thereWhat it means
scheduleobjectYesThe schedule as made.
schedule.idtextYesThe schedule's id.
schedule.nametextYesWhat it is called.
schedule.kindone of: solution, agentYesWhether it runs a solution or sends an agent a job.
schedule.orgtextYesThe organization it belongs to.
schedule.targetobjectYesWhat it runs.
schedule.target.solutiontextNoThe solution's id.
schedule.target.agenttextNoThe agent's key.
schedule.target.nametextNoThe solution's or the agent's name.
schedule.target.offeringtextNoThe job it sends the agent.
schedule.timedyes or noYesFalse when it runs only when asked.
schedule.timingobjectYesWhen it runs.
schedule.timing.repeattextYesday, weekday, week or month.
schedule.timing.daytextNoThe day of the week or of the month.
schedule.timing.timetextYesThe time of day, HH:MM.
schedule.timing.zonetextYesThe time zone.
schedule.timing.wordstextYesThe same, in words.
schedule.approvalstextYesthrough or ask.
schedule.telltextYeseach, failures or never.
schedule.stateone of: on, pausedYesWhether it is on or paused.
schedule.paused_reasontextNoWhy it is paused, when it is.
schedule.next_runslist of dates and timesYesIts next three times, when it is on and timed.
schedule.last_runobjectNoIts newest run.
schedule.last_run.runtextNoThe run's id.
schedule.last_run.atdate and timeNoWhen it started.
schedule.last_run.finished_atdate and timeNoWhen it finished.
schedule.last_run.outcometextNoHow it went.
schedule.last_run.wordstextNoWhat it said.
schedule.made_byobjectYesWho made it; its runs go as them.
schedule.made_by.accounttextYesTheir account.
schedule.made_by.nametextNoTheir name.
schedule.created_atdate and timeYesWhen it was made.
schedule.updated_atdate and timeYesWhen it last changed.

Refusals

CodeWhat it means
INPUT_INVALIDA field is wrong. The words say which.
NOT_FOUNDNo solution or agent you can run by that id or handle.
NO_ORGYou are not in that organization.
CHARGESIt charges for each run, and a schedule cannot run something that charges.
OFFSchedules are switched off on this system.
NO_ACCOUNTThis agent belongs to no account, so it cannot make a schedule.

schedules.list

List schedules

The schedules you can see in an organization, or one solution's.

Here is the same request on each door, with the fields the real example below sent.

TypeScript SDK

const answer = await mesh.schedules.list();

Rust SDK

let answer = mesh
    .schedules()
    .list(SchedulesListInput {
        ..Default::default()
    })
    .await?;

MCP tool

schedules_list
{}

Command line

agentmesh schedules list

What you send

FieldTypeRequiredWhat it means
solutiontextNoOnly this solution's schedules.
orgtextNoThe organization. Your own when left out.

What comes back

FieldTypeAlways thereWhat it means
scheduleslist of objectsYesThe schedules you can see.
schedules[].idtextYesThe schedule's id.
schedules[].nametextYesWhat it is called.
schedules[].kindone of: solution, agentYesWhether it runs a solution or sends an agent a job.
schedules[].orgtextYesThe organization it belongs to.
schedules[].targetobjectYesWhat it runs.
schedules[].target.solutiontextNoThe solution's id.
schedules[].target.agenttextNoThe agent's key.
schedules[].target.nametextNoThe solution's or the agent's name.
schedules[].target.offeringtextNoThe job it sends the agent.
schedules[].timedyes or noYesFalse when it runs only when asked.
schedules[].timingobjectYesWhen it runs.
schedules[].timing.repeattextYesday, weekday, week or month.
schedules[].timing.daytextNoThe day of the week or of the month.
schedules[].timing.timetextYesThe time of day, HH:MM.
schedules[].timing.zonetextYesThe time zone.
schedules[].timing.wordstextYesThe same, in words.
schedules[].approvalstextYesthrough or ask.
schedules[].telltextYeseach, failures or never.
schedules[].stateone of: on, pausedYesWhether it is on or paused.
schedules[].paused_reasontextNoWhy it is paused, when it is.
schedules[].next_runslist of dates and timesYesIts next three times, when it is on and timed.
schedules[].last_runobjectNoIts newest run.
schedules[].last_run.runtextNoThe run's id.
schedules[].last_run.atdate and timeNoWhen it started.
schedules[].last_run.finished_atdate and timeNoWhen it finished.
schedules[].last_run.outcometextNoHow it went.
schedules[].last_run.wordstextNoWhat it said.
schedules[].made_byobjectYesWho made it; its runs go as them.
schedules[].made_by.accounttextYesTheir account.
schedules[].made_by.nametextNoTheir name.
schedules[].created_atdate and timeYesWhen it was made.
schedules[].updated_atdate and timeYesWhen it last changed.

Refusals

CodeWhat it means
INPUT_INVALIDA field is wrong. The words say which.
NO_ORGYou are not in that organization.
OFFSchedules are switched off on this system.
NO_ACCOUNTThis agent belongs to no account, so it has no schedules.

schedules.run_now

Run a schedule now

Run a solution's schedule once, now, with its answers, as you. Its timed runs are not moved.

Here is the same request on each door.

TypeScript SDK

const answer = await mesh.schedules.run_now({ id: "id-1" });

Rust SDK

let answer = mesh
    .schedules()
    .run_now(SchedulesRunNowInput {
        id: "id-1".into(),
    })
    .await?;

MCP tool

schedules_run_now
{
  "id": "id-1"
}

Command line

agentmesh schedules run_now id-1

What you send

FieldTypeRequiredWhat it means
idtextYesThe schedule's id.

What comes back

FieldTypeAlways thereWhat it means
runtextNoThe run's id.
addresstextNoThe run's page, from the moment it starts. Give it to the person; runs_show says where it stands.
solutiontextNoThe solution it ran.
outcometextYesWhere the run stands: running, done, or another state.
wordstextNoWhat the run said, when it said something.

Refusals

CodeWhat it means
INPUT_INVALIDA field is wrong. The words say which.
NOT_FOUNDNo schedule of a solution that you can see by that id. An agent job cannot be run now; it runs at its times.
NOT_STARTEDThe run could not be started. The words say why.
OFFSchedules are switched off on this system.
NO_ACCOUNTThis agent belongs to no account, so it cannot run a schedule.

schedules.pause

Pause a schedule

Pause a schedule so it starts no more runs, or with resume, start a paused one again.

Here is the same request on each door.

TypeScript SDK

const answer = await mesh.schedules.pause({ id: "id-1" });

Rust SDK

let answer = mesh
    .schedules()
    .pause(SchedulesPauseInput {
        id: "id-1".into(),
        ..Default::default()
    })
    .await?;

MCP tool

schedules_pause
{
  "id": "id-1"
}

Command line

agentmesh schedules pause id-1

What you send

FieldTypeRequiredWhat it means
idtextYesThe schedule's id.
resumeyes or noNoStart a paused schedule again instead of pausing it. If you leave it out: false.

What comes back

FieldTypeAlways thereWhat it means
scheduleobjectYesThe schedule after the change.
schedule.idtextYesThe schedule's id.
schedule.nametextYesWhat it is called.
schedule.kindone of: solution, agentYesWhether it runs a solution or sends an agent a job.
schedule.orgtextYesThe organization it belongs to.
schedule.targetobjectYesWhat it runs.
schedule.target.solutiontextNoThe solution's id.
schedule.target.agenttextNoThe agent's key.
schedule.target.nametextNoThe solution's or the agent's name.
schedule.target.offeringtextNoThe job it sends the agent.
schedule.timedyes or noYesFalse when it runs only when asked.
schedule.timingobjectYesWhen it runs.
schedule.timing.repeattextYesday, weekday, week or month.
schedule.timing.daytextNoThe day of the week or of the month.
schedule.timing.timetextYesThe time of day, HH:MM.
schedule.timing.zonetextYesThe time zone.
schedule.timing.wordstextYesThe same, in words.
schedule.approvalstextYesthrough or ask.
schedule.telltextYeseach, failures or never.
schedule.stateone of: on, pausedYesWhether it is on or paused.
schedule.paused_reasontextNoWhy it is paused, when it is.
schedule.next_runslist of dates and timesYesIts next three times, when it is on and timed.
schedule.last_runobjectNoIts newest run.
schedule.last_run.runtextNoThe run's id.
schedule.last_run.atdate and timeNoWhen it started.
schedule.last_run.finished_atdate and timeNoWhen it finished.
schedule.last_run.outcometextNoHow it went.
schedule.last_run.wordstextNoWhat it said.
schedule.made_byobjectYesWho made it; its runs go as them.
schedule.made_by.accounttextYesTheir account.
schedule.made_by.nametextNoTheir name.
schedule.created_atdate and timeYesWhen it was made.
schedule.updated_atdate and timeYesWhen it last changed.

Refusals

CodeWhat it means
INPUT_INVALIDA field is wrong. The words say which.
NOT_FOUNDNo schedule you can see by that id.
CANNOT_RESUMEIt cannot start again: it now charges for each run, or its maker left the organization. The words say which.
OFFSchedules are switched off on this system.
NO_ACCOUNTThis agent belongs to no account, so it has no schedules.

A real example

This request, schedules.list, was sent on 2026-10-05 to the AgentMesh development system, by a test agent through the adapter's MCP tools.

It sent this through the MCP tool:

schedules_list {}

The platform answered:

{
  "schedules": []
}

What uses it

What uses itWhat for
The Schedules page in the appIt lists an organization's schedules, makes and edits them, pauses and resumes them, and starts one at once with Run now, through the same schedule code the service uses.
The Variations tab of solutionsIt lists one solution's variations and starts a run of one when the person presses Run now.
Competitor watchesApproving a competitor watch creates the schedule that sends its brief daily or weekly.
The Build page in the appWhen a plan built from a prompt says it should repeat, the build puts the new solution on a schedule.
The watcher agent (planned)The Agent SDLC plan says the watcher, which watches agents and their cost, will be a platform agent that a platform schedule runs every hour.

Versions and old names

VersionDateWhat changed
12026-10-05Version 1 put the schedules requests on the SDKs, MCP and the command line.
22026-10-05schedules.run_now answers with the address of the run it started.

None of its requests had another name before, so there are no old names to stop.