Schedules
No CI setup, no GitHub Actions config. Pick a plugin, a repo, and a time. Tessl runs it for you.
What is a schedule?
A schedule runs a plugin on a cron. You pick a plugin, a repo, and a time, and Tessl runs the plugin against that repo on that schedule. Each time the schedule fires, Tessl starts a cloud run and reports the result back so you can see what happened.
Tessl skips a tick if the previous run from the same schedule is still active when the next one would start. There is no queue: a skipped tick does not run later.
Think of it as two parts working together. The plugin describes the task: it tells the agent what to do. The schedule describes the timing: it tells Tessl when to do it.
What you need first
A Tessl account with a workspace.
GitHub connected to your workspace. See Connect Tessl to GitHub.
A plugin that describes the task. See Create a plugin.
An environment. A scheduled run cannot mint its own GitHub token, so it needs a
GITHUB_TOKENfrom its environment to check out your repo and open PRs. The environment also holds any other secrets the plugin needs. See Environments.
How to create a schedule
You can create a schedule from the CLI or from the web app. Both produce the same result.
Use tessl schedule create. Pass the plugin as the first argument, then the repo, the cron, and the environment:
This runs the changelog-writer plugin against my-org/my-repo every Friday at 9:00 UTC.
Common flags:
--repo
The repository the plugin runs against. Required.
--cron
When the schedule fires, as a cron expression. Required.
--environment
The workspace environment the run executes in. It supplies the GitHub token and any other secrets or API keys the plugin needs. Required when you specify the plugin, repo, and environment directly.
--timezone
The timezone for the cron expression. Optional; defaults to UTC.
--agent
Which agent runs the plugin (for example claude-code, cursor, codex, tessl-agent). Optional.
--model
Which model the agent uses. Optional.
--instructions
Extra directions layered on top of the plugin for this schedule. Optional.
--base-branch
The branch to check out and open PRs against. Optional.
The cron expression has five fields: minute, hour, day of month, month, and day of week. 0 9 * * 5 means "at 9:00 UTC on every Friday". 0 8 * * * means "at 8:00 UTC every day".
Use --instructions to point a generic plugin at a specific job:
Open Automations > Schedules and choose Create schedule. The form asks for the schedule (cron), a name, a description, and an environment. These are the primary fields.
Below the environment and mode selection is an Advanced options control. Expand it to set the agent, model, inputs, instructions, and base branch. Leave it collapsed to accept the defaults.
How instructions work
The --instructions flag layers extra directions on top of whatever the plugin already says. The plugin is the base recipe; instructions are the per-schedule customization. The plugin still runs its normal task. The instructions steer it for this one schedule.
This lets you reuse one plugin for several jobs. The same docs-audit plugin, pointed two ways:
Same plugin, two schedules, two different jobs.
Monitoring your runs
Each schedule keeps a table of its past runs. Open a schedule in the web app to see its full run history, including output and duration. From the CLI, tessl schedule runs <id> lists runs with their ID, status, skill, repo, workspace, creator, and creation time.
In Progress
Still running
Wait
Completed
Agent finished and reported success
Nothing. Check the output.
Failed
The run hit an error before completing
Check the run's failure detail
Agent Failed
The run completed but the agent couldn't do the task
Check the output for why
Cancelled
Someone stopped the run
Nothing
Next steps
Last updated

