Set up, understand, and change a Tessl factory on a repository: pick automations that fit how you work, such as shipping tickets as pull requests, answering reviews and fixing checks on those pull requests, code review, and scheduled jobs; prepare the repository for agents; write issues for the factory to build; then see what the factory has done, find out why a run failed or never started, and change or extend it.
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Offer the starters that fit how the user works. Describe each one by the job it takes off their plate, not by its parts.
| Starter | Fits | Built from |
|---|---|---|
| Ship tickets | Any repo with GitHub issues or Linear | tessl/factory skills |
| Answer reviews and fix checks | Users who ship tickets | tessl/factory skills |
| Review pull requests | Repos that use pull requests | Tessl Code Review |
| Review what lands on the default branch | Users who push straight to it | Own skill |
| Learn from past work | Repos with merged pull requests | tessl/learn-from-past-work skills |
| Scheduled job | Anyone, for example a weekly release plan | Own skill |
"When you add the tessl label to an issue, or delegate a Linear issue to
Tessl, an agent reads it, makes the change on its own branch, runs the tests,
and opens one pull request for you to review."
tessl schedule pause <loop id> or on the Loops page. That prevents new
runs; it does not cancel one already in progress. When it is in
tessl.json instead, remove its action and trigger, and the
follow-ticket-changes action and triggers, and get that change onto the
default branch.tessl label. For Linear, remove
Tessl delegation or move the issue to a state whose type is backlog,
triage, completed or canceled; the agent checks the state type, not its
name. A started state, such as Paused, does not stop it. A run already in
progress may continue until it checks the ticket again."On pull requests that Tessl opened, an agent answers review comments, fixes failing checks, and tells you when the pull request is ready to merge."
tessl schedule pause <loop id> or on the Loops page. When it is in
tessl.json instead, remove the shepherd action and its triggers (five, or six
with Code Review) and
get that change onto the default branch. That stops new runs, not one
already in progress. Removing the tessl label from a pull request does not
stop the two triggers that start when a check finishes."Tessl reviews every pull request and leaves findings as review comments."
webUrl from
tessl integrations show github-app-code-review --json to install the app or
grant it the repository, and wait until they say it is done.tessl code repo update <owner/repo> --review-enabled --review-trigger every-push,
after any setup pull request has merged, so it is not reviewed, and confirm
with tessl code repo view <owner/repo> --json. Leave publicationMode as
it is. It needs an organization admin. If it refuses, say why and ask the
user to turn review on under Code reviews in the web app.tessl.json entries, and nothing to install in the repository."When work lands on your default branch, an agent reviews what changed since the last run and files an issue for each real problem. Nothing waits on it, so you keep shipping, and you check its issues before you tag a release."
tessl doctor --automations
accepts it. If not, run it on a schedule instead, for example each night."Each week, agents read the review feedback on recently merged pull requests, the transcripts of recent agent runs, and how Code Review's lenses did, and record each mistake that keeps recurring as a finding on your Tessl project, with the cheapest fix. They never change the repository; you choose which findings to act on."
tessl/learn-from-past-work: Learn from review
feedback reads pull request reviews; Learn from agent runs reads the runs
that opened pull requests, so offer it once "ship tickets" is on; Tune Review Lenses
reads how Code Review's lenses did and proposes lens changes, so offer it
once Code Review is on; Turn findings into tickets files tickets for the
factory from the findings worth doing, each starting an implementation
run, so offer it once "ship tickets" is on and findings have been recorded.tessl finding list --project <linked project id>.tessl schedule trigger <loop id>;
a run started another way cannot record findings.tessl schedule pause <loop id> or
on the Loops page. When they are in tessl.json instead, remove its entries
from schedules and get that change onto the default branch. That stops
new runs, not one in progress."At a time you pick, an agent does one job, for example writes a release plan from open issues, or checks for flaky tests."
schedules entry with an action that holds the skill and
environment, beside the entry's cron and description.Use this for any starter whose "Built from" is "Own skill", and for any job the user asks for that no starter covers.
tessl-factory/skills/<name>/SKILL.md with the
write-factory-skill skill, and show it to the user.tessl-factory/.tessl-plugin/plugin.json as in
Editing a factory skill."skill": "file:tessl-factory#<name>" and the
environment. Add a trigger with the event and a when filter, following
the shape in the triggers reference and choosing from the
events and conditions in What an automation can use,
including a
concurrency key so one ticket or one commit starts one run. For a
schedule, add a schedules entry that names the action with
"action": "<name>".tessl doctor --automations. If it rejects the event, tell the user
and offer a schedule instead.