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.
92%
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
This skill looks at how a repository is built, reviewed, and fixed, and proposes changes that help agents get work right the first time. Each proposal is a rule the team already follows, placed where it is enforced best: a lint rule or test, a verifier, a Code Review lens, or agent context.
It works on its own, or as a next step after factory-setup once the first
automation is live.
Rules for the whole session:
Every decision-point message has this shape and nothing else:
Do not describe the user's repository or the evidence back to them; they know it. Evidence appears only as a short "Seen on" note on the proposal it supports.
Work from the repository root. Stop at the first of these that fails:
tessl --version reports an obsolete CLI, follow
Check the Tessl CLI. When
tessl whoami fails, ask the user to run tessl login and wait.gh repo view --json nameWithOwner,defaultBranchRef gives the repository
and its default branch. Otherwise say this needs a GitHub repository.git status shows any, ask the user to
commit them or put them aside.A repository without tessl.json can go on: step 6 creates it when the user
keeps a check, as Register the group
says.
Then fetch the default branch and compare HEAD with
origin/<default branch>. Steps 1 to 5 read the checked-out files, and step 6
branches from origin/<default branch>. When they differ, tell the user and
ask them to switch to an up-to-date default branch before you go on.
Read before you ask:
AGENTS.md, CLAUDE.md, rules, skills, and
anything tessl.json installs.tessl code repo view <owner/repo> --json. Note
whether repository.review.enabled is true. If the command fails, for
example because the user is in several organizations without TESSL_ORG
set, Code Review is not available for the organization, or the repository
is not selected for the GitHub App, treat Code Review as off and continue
without the lens tier.Then check the skills this needs: tessl-verify, and
create-code-review-lens only when item 4 found Code Review on. In Claude
Code and Cursor they install as tessl__<name>, so match either name.
Send decision point 1, the plan:
tessl/tessl-verify for
tessl-verify, which writes the checks, and tessl/code-review for
create-code-review-lens, which writes review rules, with
tessl install -g <plugin>.tessl-verify is needed, one item saying you will judge the checks
with openai/gpt-6-luna, or jev if they want cheaper and faster but
still in testing. tessl-verify asks its user to choose; answer it from
this reply and never pass the question on.For example:
Preparing your repository: step 1 of 6, baseline. Readiness: Level 3/5, 61%.
Before I gather evidence, I'll:
1. Install tessl-verify for your account, to write the checks. The repo is unchanged.
2. Judge checks with openai/gpt-6-luna. Say "jev" for cheaper and faster, still in testing.
Code Review is off, so I'll skip review rules.
Reply go, or tell me what to change.After the reply, install what the user agreed to and confirm each skill is visible; if an install fails or a skill is still not visible, say so in one line. A skill that is still missing, because the user declined, the install failed, or it is not visible after the install, makes its tier's items "needs " items, shown but not applied, as the proposal list says.
Collect where agents and reviewers keep tripping, from the sources in evidence. Each source is optional; skip one that is missing and say so in the closing message. Do not message the user here; go on to step 3.
Turn the evidence into candidate rules, each one a thing the team already expects and can name. Follow routing. Resolve each contradiction and each context layout choice yourself, as routing and context say.
Give each candidate one tier, following routing:
Send decision point 2, the proposals, one group per message, following the proposal list. Send the next group only after the user replies to the one before. Each message says these are the changes you will make; every numbered item is made unless the user leaves it out, and the user can add anything the history did not show. Change nothing until the last group is confirmed; then apply every kept item in step 6, in one pass. When nothing is left to apply, stop.
Make the confirmed changes on one new branch, following apply. Write each tier's files from its step 6 sections:
Try each new verifier on a sample of 3 files and on the change it came
from, as it was before the fix, in one batch, following
verifiers section 3: tune
once a verifier that flags code that is fine or misses its own change, delete
one whose findings are not real, and set its level from the result, error
when the sample finds no real violation and warn when it does. Report
whether each caught the change it came from. That batch is the paid run in
the session, 4 judge calls per verifier, 1 for a verifier that judges whole
changes and so has no sample, and the same again for one that is tuned; the
last proposal message in step 5 said it would happen.
Lenses are not run in this session; the pull request says each one is
untested until reviews run, as lenses
says. Then check the configuration and commit, one commit per category, as
apply says.
Follow the step 8 sections of apply:
Decision-point messages carry the one-line status from the message shape. Show the full timeline only in the closing message, or when you stop before the end, using the marks and format from the factory-setup timeline, under the heading "Preparing your repository", with these stages: