Kody weekly: Schedule code with one jobs system
Kent C. Dodds · · 3 min read
Here is what shipped in Kody from April 11 to April 17, 2026. This week your code can run on a schedule, keep its own storage, and live in repos, and saved apps get real backends.
Schedule code with one jobs system
What shipped
Kody now has jobs. The job_upsert, job_list, job_get, job_delete, and
job_run_now capabilities create and manage code that runs on a schedule. A
schedule is a cron expression, an interval such as 15m or 1d, or a
once run at an ISO timestamp, and cron schedules can use an IANA timezone.
Each job keeps its run counts, last error, last duration, and a short run
history, and you can disable a job or flip its kill switch without deleting it.
Jobs run through the same codemode runtime as execute and get a stable
storageId for durable data.
Why it matters
Recurring work like a morning digest or a weekly cleanup no longer depends on you remembering to ask. Your agent writes the code once, schedules it, and you can see whether it ran and why it failed. It is the first step from one-off answers to automations you own.
Example
Call job_upsert from execute with a name, code, and schedule:
{
"name": "weekday-digest",
"code": "async () => { /* gather and summarize */ return 'ok' }",
"schedule": { "type": "cron", "expression": "0 8 * * 1-5" },
"timezone": "America/Denver",
"params": { "topic": "open pull requests" }
}Use job_run_now with the returned id to test it right away, and job_get to
read its run history.
More updates
- Execute: Adds durable storage.
executeaccepts astorageIdandwritable, code can use the built-instorage.*helpers andstorage.sql(...), andstorage_queryandstorage_exportinspect a store read-only by default. (#171) - Apps: Gives each saved app an optional server backend. App code splits
into client and server parts, the server part runs as its own Durable Object
with an isolated SQLite database, and the client reaches it at
/app/:appId/*. (#162, #166) - Packages: Adds repo-backed sources. Apps, skills, and jobs can live in
repos, and
repo_*capabilities open sessions, read and search files, apply edits, run checks, and publish.repo_backfill_sourcesmoves existing inline apps, skills, and jobs into repos without overwriting published sources. (#181, #187) - Execute: Supports returning raw MCP content blocks, such as images, from
executethrough__mcpContentinstead of text only. (#149, #151) - Execute: Adds agent turn capabilities:
agent_chat_turnfor one bounded tool-using turn, andagent_turn_start,agent_turn_next, andagent_turn_cancelto stream one. (#180) - Memory: Supports optional source URIs on memories, and
searchuses your query as memory context when you leavememoryContextout. (docs, #168, #154) - Platform: Generalizes the home connector into remote connectors, with separate sessions, routing, and secrets per connector, plus connector status in search. (#155)
- Orgs: Adds a reset button on the authorize screen when a redirect URI mismatch leaves an MCP client stuck, so you can remove the stale client and sign in again. (#161, #169)
Fixes
- Apps: Fixes
ui_save_apppartial updates wiping fields you did not change. (#165) - Execute: Fixes read-only storage SQL rejecting queries with semicolons inside strings or comments. (#173)
- Automations: Fixes jobs reusing stale repo sessions. They now fail clearly instead. (#184, #191)
Try it
Ask your agent to schedule one small recurring task with job_upsert, then run
it once with job_run_now and check the result with job_get.
Questions or feedback? Join us on the Kody Discord.