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
How to change the repository's agent context files for the candidates routed to context, without overwriting what the team already wrote. Context holds knowledge an agent needs before it opens other files: the build, test, and lint commands, a short map of the modules, hazards, and the picked rules that are knowledge rather than a check.
Each section belongs to one step of the skill:
Before you propose a change, read every context file step 1 listed, and the files they include. Note for each one:
AGENTS.md, CLAUDE.md, and any per-area copies;CLAUDE.md whose
only line is @AGENTS.md, or one that has its own instructions and also
includes @AGENTS.md;tessl install marks <!-- tessl-managed -->;Makefile, or CI.Read the dev container and setup scripts too, and note each command they run that no longer works.
Pick one canonical file, the file new items go into:
CLAUDE.md holds the team's instructions and includes @AGENTS.md, and
AGENTS.md holds only a tool-managed section. This is the layout
tessl install leaves when CLAUDE.md already existed. AGENTS.md is
canonical: add new items there, outside the managed section. Propose moving
the instructions already in CLAUDE.md as a
layout item, as for a CLAUDE.md with no AGENTS.md.AGENTS.md and replace the other file with its
forwarder. When merging would lose instructions that only
one agent should see, keep both instead, and add each item to both files,
under the heading it fits in each.Each confirmed context item becomes one of these, and nothing else:
src/routes/users.ts".Keep a line only if deleting it would cause an agent to make a mistake. Do not add general advice, language or framework conventions, history, or plans.
Change the canonical file in place:
Keep the file within a budget of 150 lines. When an addition would take it over, put the detail in a doc under the area's documentation and add a one-line link to it. When the file is already over the budget, add only one-line links and tell the user how long it is.
When the repository has neither AGENTS.md nor CLAUDE.md, create
AGENTS.md with only the sections the picked items fill, in this order:
Do not copy placeholders or template comments into the file.
Use plain Markdown links, [text](path), for docs an agent opens when it
needs them. Claude Code loads any @path outside a code span into every
session, whether it sits on its own line or inside a sentence, so count inline
@path mentions as includes when you read a file. Use @path only for
includes the team already has and for @AGENTS.md in a forwarder.
Make both harnesses read the same file:
AGENTS.md but no CLAUDE.md: create CLAUDE.md with the single line
@AGENTS.md.CLAUDE.md but no AGENTS.md: AGENTS.md has no include line, so a
forwarder there is only a link an agent may not follow. Propose, as a
layout item, moving the instructions from CLAUDE.md into a new
AGENTS.md and making CLAUDE.md the @AGENTS.md forwarder. If the user
drops that item, create AGENTS.md with the single line
Before you start, read [CLAUDE.md](CLAUDE.md); it holds this repository's agent instructions.
instead.AGENTS.md as above, and the CLAUDE.md forwarder.A forwarder has that one line and nothing else. Move the team's instructions from one file to the other only through a layout item the user kept.
Creating a forwarder, merging two files, and moving instructions from one file
to another are each their own numbered item in the agent context group of the
step 5 list. The item says which files it creates or replaces, for example
"creates CLAUDE.md with @AGENTS.md" or "moves 40 lines from CLAUDE.md
into a new AGENTS.md and replaces CLAUDE.md with @AGENTS.md". Like any
item, it is applied unless the user drops it, whether or not they drop other
context items.
When the repository holds several projects or packages:
<area>/AGENTS.md.<area>/AGENTS.md with its CLAUDE.md forwarder only when the area has
neither file.Preferences about how the team works, such as its agents, CI and secrets,
issue tracker, and goals, belong in project memory under .tessl/memory/, not
in context files. Decide how to handle them when you route, before step 5:
Propose each memory item as a one-line edit to the matching file, and show
that line in the step 5 item: goals go in .tessl/memory/goals.md, and other
preferences in the matching file under .tessl/memory/preferences/. Write the
line directly; do not hand it to setup-memory, which is in the private
tessl/harness-engineering plugin and cannot be installed. When the file does
not exist yet, the item creates it with only that line, and also adds a link
to it under ## Active Memory Files in .tessl/memory/index.md, creating the
index with that heading if needed, so agents that read the index find the
file. The step 5 item shows both edits.
Check the files you changed: