Platform services / schedules
agentmesh · platform service · schedulesSchedules
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.
| Request | What it does | Doors |
|---|---|---|
schedules.create | Make a schedule | Every door |
schedules.list | List schedules | Every door |
schedules.run_now | Run a schedule now | Every door |
schedules.pause | Pause a schedule | Every 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
| Field | Type | Required | What it means |
|---|---|---|---|
name | text | Yes | What to call it. |
solution | text | No | The id of the solution it runs. Give this or to_agent. |
to_agent | text | No | The handle or key of the agent it sends a job to. Give this or solution. |
offering | text | No | For an agent: which of its offerings (the jobs it offers, by name) to send. |
message | text | No | For an agent: what to ask it each time. |
answers | object | No | For a solution: its Start form's answers, by field. |
repeat | one of: day, weekday, week, month | No | How often: every day, every working day, every week or every month. If you leave it out: "day". |
day | text | No | For week, the day of the week, such as Monday; for month, the day of the month, 1 to 28. |
time | text | No | The time of day, as HH:MM in 24 hours. If you leave it out: "09:00". |
zone | text | No | The time zone, such as America/Denver. If you leave it out: "UTC". |
timed | yes or no | No | For a solution: false makes it run only when asked (run_now). If you leave it out: true. |
approvals | one of: through, ask | No | Whether the run's approval steps run straight through or stop and ask. If you leave it out: "ask". |
tell | one of: each, failures, never | No | When to email the maker: after each run, only after a failure, or never. If you leave it out: "failures". |
org | text | No | The organization to make it in. Your own when left out. |
What comes back
| Field | Type | Always there | What it means |
|---|---|---|---|
schedule | object | Yes | The schedule as made. |
schedule.id | text | Yes | The schedule's id. |
schedule.name | text | Yes | What it is called. |
schedule.kind | one of: solution, agent | Yes | Whether it runs a solution or sends an agent a job. |
schedule.org | text | Yes | The organization it belongs to. |
schedule.target | object | Yes | What it runs. |
schedule.target.solution | text | No | The solution's id. |
schedule.target.agent | text | No | The agent's key. |
schedule.target.name | text | No | The solution's or the agent's name. |
schedule.target.offering | text | No | The job it sends the agent. |
schedule.timed | yes or no | Yes | False when it runs only when asked. |
schedule.timing | object | Yes | When it runs. |
schedule.timing.repeat | text | Yes | day, weekday, week or month. |
schedule.timing.day | text | No | The day of the week or of the month. |
schedule.timing.time | text | Yes | The time of day, HH:MM. |
schedule.timing.zone | text | Yes | The time zone. |
schedule.timing.words | text | Yes | The same, in words. |
schedule.approvals | text | Yes | through or ask. |
schedule.tell | text | Yes | each, failures or never. |
schedule.state | one of: on, paused | Yes | Whether it is on or paused. |
schedule.paused_reason | text | No | Why it is paused, when it is. |
schedule.next_runs | list of dates and times | Yes | Its next three times, when it is on and timed. |
schedule.last_run | object | No | Its newest run. |
schedule.last_run.run | text | No | The run's id. |
schedule.last_run.at | date and time | No | When it started. |
schedule.last_run.finished_at | date and time | No | When it finished. |
schedule.last_run.outcome | text | No | How it went. |
schedule.last_run.words | text | No | What it said. |
schedule.made_by | object | Yes | Who made it; its runs go as them. |
schedule.made_by.account | text | Yes | Their account. |
schedule.made_by.name | text | No | Their name. |
schedule.created_at | date and time | Yes | When it was made. |
schedule.updated_at | date and time | Yes | When it last changed. |
Refusals
| Code | What it means |
|---|---|
INPUT_INVALID | A field is wrong. The words say which. |
NOT_FOUND | No solution or agent you can run by that id or handle. |
NO_ORG | You are not in that organization. |
CHARGES | It charges for each run, and a schedule cannot run something that charges. |
OFF | Schedules are switched off on this system. |
NO_ACCOUNT | This 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
| Field | Type | Required | What it means |
|---|---|---|---|
solution | text | No | Only this solution's schedules. |
org | text | No | The organization. Your own when left out. |
What comes back
| Field | Type | Always there | What it means |
|---|---|---|---|
schedules | list of objects | Yes | The schedules you can see. |
schedules[].id | text | Yes | The schedule's id. |
schedules[].name | text | Yes | What it is called. |
schedules[].kind | one of: solution, agent | Yes | Whether it runs a solution or sends an agent a job. |
schedules[].org | text | Yes | The organization it belongs to. |
schedules[].target | object | Yes | What it runs. |
schedules[].target.solution | text | No | The solution's id. |
schedules[].target.agent | text | No | The agent's key. |
schedules[].target.name | text | No | The solution's or the agent's name. |
schedules[].target.offering | text | No | The job it sends the agent. |
schedules[].timed | yes or no | Yes | False when it runs only when asked. |
schedules[].timing | object | Yes | When it runs. |
schedules[].timing.repeat | text | Yes | day, weekday, week or month. |
schedules[].timing.day | text | No | The day of the week or of the month. |
schedules[].timing.time | text | Yes | The time of day, HH:MM. |
schedules[].timing.zone | text | Yes | The time zone. |
schedules[].timing.words | text | Yes | The same, in words. |
schedules[].approvals | text | Yes | through or ask. |
schedules[].tell | text | Yes | each, failures or never. |
schedules[].state | one of: on, paused | Yes | Whether it is on or paused. |
schedules[].paused_reason | text | No | Why it is paused, when it is. |
schedules[].next_runs | list of dates and times | Yes | Its next three times, when it is on and timed. |
schedules[].last_run | object | No | Its newest run. |
schedules[].last_run.run | text | No | The run's id. |
schedules[].last_run.at | date and time | No | When it started. |
schedules[].last_run.finished_at | date and time | No | When it finished. |
schedules[].last_run.outcome | text | No | How it went. |
schedules[].last_run.words | text | No | What it said. |
schedules[].made_by | object | Yes | Who made it; its runs go as them. |
schedules[].made_by.account | text | Yes | Their account. |
schedules[].made_by.name | text | No | Their name. |
schedules[].created_at | date and time | Yes | When it was made. |
schedules[].updated_at | date and time | Yes | When it last changed. |
Refusals
| Code | What it means |
|---|---|
INPUT_INVALID | A field is wrong. The words say which. |
NO_ORG | You are not in that organization. |
OFF | Schedules are switched off on this system. |
NO_ACCOUNT | This 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
| Field | Type | Required | What it means |
|---|---|---|---|
id | text | Yes | The schedule's id. |
What comes back
| Field | Type | Always there | What it means |
|---|---|---|---|
run | text | No | The run's id. |
address | text | No | The run's page, from the moment it starts. Give it to the person; runs_show says where it stands. |
solution | text | No | The solution it ran. |
outcome | text | Yes | Where the run stands: running, done, or another state. |
words | text | No | What the run said, when it said something. |
Refusals
| Code | What it means |
|---|---|
INPUT_INVALID | A field is wrong. The words say which. |
NOT_FOUND | No schedule of a solution that you can see by that id. An agent job cannot be run now; it runs at its times. |
NOT_STARTED | The run could not be started. The words say why. |
OFF | Schedules are switched off on this system. |
NO_ACCOUNT | This 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
| Field | Type | Required | What it means |
|---|---|---|---|
id | text | Yes | The schedule's id. |
resume | yes or no | No | Start a paused schedule again instead of pausing it. If you leave it out: false. |
What comes back
| Field | Type | Always there | What it means |
|---|---|---|---|
schedule | object | Yes | The schedule after the change. |
schedule.id | text | Yes | The schedule's id. |
schedule.name | text | Yes | What it is called. |
schedule.kind | one of: solution, agent | Yes | Whether it runs a solution or sends an agent a job. |
schedule.org | text | Yes | The organization it belongs to. |
schedule.target | object | Yes | What it runs. |
schedule.target.solution | text | No | The solution's id. |
schedule.target.agent | text | No | The agent's key. |
schedule.target.name | text | No | The solution's or the agent's name. |
schedule.target.offering | text | No | The job it sends the agent. |
schedule.timed | yes or no | Yes | False when it runs only when asked. |
schedule.timing | object | Yes | When it runs. |
schedule.timing.repeat | text | Yes | day, weekday, week or month. |
schedule.timing.day | text | No | The day of the week or of the month. |
schedule.timing.time | text | Yes | The time of day, HH:MM. |
schedule.timing.zone | text | Yes | The time zone. |
schedule.timing.words | text | Yes | The same, in words. |
schedule.approvals | text | Yes | through or ask. |
schedule.tell | text | Yes | each, failures or never. |
schedule.state | one of: on, paused | Yes | Whether it is on or paused. |
schedule.paused_reason | text | No | Why it is paused, when it is. |
schedule.next_runs | list of dates and times | Yes | Its next three times, when it is on and timed. |
schedule.last_run | object | No | Its newest run. |
schedule.last_run.run | text | No | The run's id. |
schedule.last_run.at | date and time | No | When it started. |
schedule.last_run.finished_at | date and time | No | When it finished. |
schedule.last_run.outcome | text | No | How it went. |
schedule.last_run.words | text | No | What it said. |
schedule.made_by | object | Yes | Who made it; its runs go as them. |
schedule.made_by.account | text | Yes | Their account. |
schedule.made_by.name | text | No | Their name. |
schedule.created_at | date and time | Yes | When it was made. |
schedule.updated_at | date and time | Yes | When it last changed. |
Refusals
| Code | What it means |
|---|---|
INPUT_INVALID | A field is wrong. The words say which. |
NOT_FOUND | No schedule you can see by that id. |
CANNOT_RESUME | It cannot start again: it now charges for each run, or its maker left the organization. The words say which. |
OFF | Schedules are switched off on this system. |
NO_ACCOUNT | This 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 it | What for |
|---|---|
| The Schedules page in the app | It 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 solutions | It lists one solution's variations and starts a run of one when the person presses Run now. |
| Competitor watches | Approving a competitor watch creates the schedule that sends its brief daily or weekly. |
| The Build page in the app | When 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
| Version | Date | What changed |
|---|---|---|
| 1 | 2026-10-05 | Version 1 put the schedules requests on the SDKs, MCP and the command line. |
| 2 | 2026-10-05 | schedules.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.