Change or extend a Tessl factory that is already set up on this repository, and suggest what to add next. Use when someone wants to let a teammate start runs, change the model an automation uses, change what an automation does, change how Code Review behaves, stop or remove an automation, update the setup hook, change what the cloud environment can access, add another automation, set up Improve development so the factory learns from its mistakes, act on its findings, or asks what they should add to their factory.
94%
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
The canonical home for this skill is tessl-labs/factory-setup
Make the change the person asks for to the factory on this repository, or
suggest what to add, and leave the factory working afterwards. Every change to
tessl.json goes through a branch and a pull request, and reaches the
automations only once it is on the default branch.
tessl.json or the hook is on the default branch, or in an
open pull request they can merge, and you gave them its link. A setting
change shows its new value in the matching view command.tessl.json: you checked the
Loops, as below.tessl.json,
every other trigger, and every stored environment key as it is.tessl doctor --automations reports the configuration valid before you
push. When the setup hook changed, the cloud check, which runs on the
pushed branch, has passed before the change is merged.The factory-setup skill's references hold the starters, trigger entries, setup-hook guidance, cloud check, Loops check, and skill edits this skill uses: starters, triggers, setup hook, cloud check, confirm the Loops, and editing a factory skill. A factory set up with an older version keeps the trigger filters it was written with: when one of its triggers lacks a filter that the triggers reference now has, such as the repository ID or an open-state check, say so and offer to add it.
Do what understand-factory step 1 does: the linked project
(tessl project repair --json), the automations in tessl.json, and their
Loops (tessl schedule list --project-id <project id> --all --json). The
project's organization is environment.attributes.orgId in
tessl environment view <environment> --json, for any environment an action
names; pass it as --org to every tessl code repo command. Run
tessl launch models --json from the repository root, so it reads this
repository's workspace.
A change to tessl.json or the setup hook goes on a branch. Check
git status first. When the uncommitted changes are the person's own work,
ask them to commit or set them aside. When they are factory configuration the
person wants kept, such as a plugin they just installed, ask whether to
include them in this change. Find the default branch with
gh repo view --json defaultBranchRef --jq .defaultBranchRef.name, fetch it,
and start a new branch from it named for the change, such as
tessl-allow-teammate. A change to a setting (Code Review, the cloud
environment) needs no branch.
Say what will change and what the person gains or loses, and ask. Then:
gh api users/<login> --jq .id) to event.sender.id in every GitHub
trigger that has one, as { "in": [<id>, <id>] }, so every trigger lists
the same people. shepherd-pr-review also lists the Tessl Review bot
(gh api 'users/tessl-reviewer[bot]' --jq .id): keep it there, and never
add it anywhere else. The shepherd-checks-* triggers have no sender list,
because checks start them. Then check the person's access:
gh api repos/<owner>/<repo>/collaborators/<login>/permission --jq .role_name.
Adding a label needs triage or above, so with read they can comment on
Tessl's pull requests but cannot start an issue; tell the person. Runs from
Linear are started by anyone who can delegate to Tessl; nothing to change
there.tessl launch models --json lists; it spells claude as claude-code.
Change agent and model on the named action. Removing model runs the
listed default pair, which can be a different agent and a much smaller
model: say which before you offer it.tessl.json:
tessl code repo update <owner/repo> --org <org> with --review-trigger every-push|open-and-command (every push re-reviews the agent's fixes and
uses credits each time), --review-publication enforcing|advisory
(whether a review can approve or request changes), --review-auto-approve
(approve once its findings are resolved), or --no-review-enabled to turn
it off. Confirm with tessl code repo view <owner/repo> --org <org> --json.
Changing these needs an organization admin.tessl.json. That stops new runs once it is
on the default branch; it does not cancel a run in progress. Do not use
tessl schedule pause for these: a Loop defined in tessl.json is changed
through the file. Before you ask, say what stops working, from that
automation's section in triggers.md or starters.md. For "follow ticket
changes": taking an issue back no longer cancels its run at once, closing an
issue no longer closes its pull request, and a reply to Tessl's question no
longer wakes the issue, so the person has to remove the label and add it
again..tessl/cloud-launch-setup.sh as setup-hook.md says, then run the
cloud check from cloud-check.md on the branch before the merge.tessl environment view <environment> --json to see its access and key
names. GitHub or Linear access:
tessl environment update <environment> --github-access <level> or
--linear-access <level>, which keeps every stored key. To add a key, send
the person to the environment's page in the web app, which adds it to the
others; never use --env-file, which replaces every stored key with the
file's. Then check the key name appears in environment view.customize.md: a small
change is an instructions string on the action, which keeps the published
skill and its fixes; a larger one is a copy of the skill in the repository,
which the person then owns. Say which, and that a copy stops getting fixes,
before you start. Ask whether the change also applies to other actions
that do the same kind of work, such as the shepherd, which pushes fixes
too.starters.md and its
entries in triggers.md: create its environment when it needs its own, add
its entries to tessl.json, create its label if it uses one. To show it
working, wait until its Loop has appeared after the merge, then follow
testing the factory. Run a
scheduled one only with tessl schedule trigger <loop id>: a run started
with tessl launch skill belongs to no Loop, so Tessl refuses its findings
and the run's work is lost. When you are done with this change, give the
"Suggest what to add" list below a look for the person's next step.For a setting, the command's own output and the view command after it are
the check: skip to item 5. For a change on a branch:
tessl doctor --automations. Act on the Automation Configuration
section only, and fix what it reports.confirm-loops.md says: every
action in the new tessl.json has its Loop with every trigger. For a
removed action, check that its Loop is no longer listed; if it still is
after 10 minutes, tell the person, with the Loops link, and do not say it
is stopped.When the person asks what to add, or after you finish a change, show them
what else Tessl can do for this repository. Read the factory first, then the
last 7 days of runs from one tessl launch list pass, as understand-factory
step 2 does: enough to see patterns, without a lookup per run. Check each
feature in features, and offer only the ones that
are off and that something in this repository points to, each in one or two
sentences: what it does, what this repository would get from it, and what it
costs. Leave out a feature with nothing behind it; offering none is fine.
gh pr checks shows a canceled check as fail; read the conclusion from
gh api repos/<owner>/<repo>/commits/<head sha>/check-runs.CHANGELOG.md updated by hand, tests that keep
failing in CI. Offer it as a question, not a recommendation.advisory mode and
the default branch requires an approving review: in enforcing mode
Tessl can approve its own pull requests once their findings are
resolved. Check with
gh api repos/<owner>/<repo>/branches/<default branch>/protection (a
404 means the branch is not protected) and
gh api repos/<owner>/<repo>/rules/branches/<default branch>.Give the docs link from the features page where there is one. Ask which, if any, they want, and make it as in step 2.
stephaniedominy/tessl-carnival
0e37a76
Canonical home
since Oct 22, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.