Run an agent on a schedule
Let an agent work while nobody is watching - inside bounds you set, calling you only outside them.
Define the run
create_execution_connection agentId=... label="Morning review" scenario=read_only_review schedule="weekdays 08:00 UTC" intervalMinutes=1440intervalMinutes, because "late" needs an expected cadence. Pause, resume or retire the run with update_execution_connection.
Point your runner at it
MAKERMAP_URL=https://makermap.io MAKERMAP_TOKEN=mm_pat_... pnpm runner:review <connectionId>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.
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.
Give an assignment a bar and a trace
create_assignment, three more pieces close the loop:
set_assignment_criteriaturns "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_checkpointends every session with what was done, what is next and what is still open.get_assignment_contexthands the latest one to whichever session, client or model picks the work up next.escalate_assignmentis 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 withresolve_assignment_escalation, and change the bound itself with the tool that owns it.
See what the work cost
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.