Understand, change, and extend a Tessl factory once it is set up: what it has done, why a run failed or never started, letting teammates start runs, changing models and Code Review, stopping automations, and adding more, such as Improve development.
75
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
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, and when the setup hook changed, the cloud check has passed.The factory-setup plugin that set this factory up holds the starters, trigger
entries, setup-hook guidance, cloud check, and Loops check this skill uses.
Read them from where it is installed, under
.tessl/plugins/tessl-labs/factory-setup/skills/factory-setup/references/:
starters.md, triggers.md, setup-hook.md, cloud-check.md,
confirm-loops.md, and customize.md. If that folder is missing, run tessl install; if it is
still missing, ask before you run tessl install tessl-labs/factory-setup.
They are the version tessl.json installs. When tessl plugin info tessl-labs/factory-setup shows a newer one, say so: newer versions can add
filters to the triggers, and an older factory keeps the older ones until
someone changes them.
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. 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 cancelled 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.