Get started
HOW-TO

Run an agent on a schedule

Let an agent work while nobody is watching - inside bounds you set, calling you only outside them.

makermap never runs your agent. Your runner does - a cron line, a CI job, a small always-on machine. What makermap holds is the part that has to be shared and trusted: what you agreed the run may do, whether it is still alive, what the last session left behind, and when it needs you.

Define the run

create_execution_connection agentId=... label="Morning review" scenario=read_only_review schedule="weekdays 08:00 UTC" intervalMinutes=1440

Only a person can do this - an agent cannot schedule itself. The schedule is recorded as you wrote it; the one number makermap reads is intervalMinutes, because "late" needs an expected cadence. Pause, resume or retire the run with update_execution_connection.

Point your runner at it

The repository ships a reference runner for the read-only review:

MAKERMAP_URL=https://makermap.io MAKERMAP_TOKEN=mm_pat_... pnpm runner:review <connectionId>

Give it the agent's own token (the run accepts reports only from the agent it was defined for) with agents:read, agents:write, activity:read and inbox:read, and set the agent's level to at least Suggest: the review only reads, and what it writes is a note about itself.

Each run reads list_changes from where the last completed review stopped, compares the inbox with the previous result, and calls submit_review_result. Nothing changed and nothing new: nothing is written and nobody is emailed. Otherwise one result is recorded, and you get one email about what is new and needs you. A run that crashes can simply run again - it never records a range twice.

Know whether it is still checking

list_execution_connections answers the question an unattended run otherwise hides: is anyone still looking? Each run is live, overdue or paused, and its checks read as one of three:

  • checked - an agent finished a check at a given time, and the next one is due;
  • unavailable - the run is overdue or paused, so whatever it checked is getting old;
  • never checked - nothing has been checked by an agent, only recorded.

An overdue run also appears in your inbox. Everything here is what the runner reported - makermap does not look at your systems itself.

Give an assignment a bar and a trace

For work assigned with create_assignment, three more pieces close the loop:

  • set_assignment_criteria turns "done" into conditions of a gate that passes by itself once all of them are met. You set them; the agent marks them as it works.
  • record_assignment_checkpoint ends every session with what was done, what is next and what is still open. get_assignment_context hands the latest one to whichever session, client or model picks the work up next.
  • escalate_assignment is how the agent reaches you when the work would cross a bound you set - its autonomy level, the criteria or the budget. Inside the bounds it decides and leaves the reasoning in its checkpoint; outside them, one escalation per run lands in the inbox of the person who assigned the work. You answer with resolve_assignment_escalation, and change the bound itself with the tool that owns it.

See what the work cost

Agents can add the tokens and the cost they know to record_effort_used, and get_effort_costs groups those reports by level, client, model and currency, so the same kind of work can be compared across models. They are reports: a cost nobody reported stays unknown rather than zero, and none of it is added to the fixed per-call unit the spend cap counts.