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
First identify the repository's apps: the independently deployable or
maintained units. In a monorepo these are the directories under apps/,
packages/, services/, and similar (each with its own manifest / build /
deploy). A single-service repository has exactly one app: the repo itself.
Then score every criterion in all eight categories per app, not once for the whole repo. For each criterion, count:
applicableApps: how many apps the criterion could apply to (exclude apps
where it genuinely does not, e.g. a database criterion for an app with no
database). 0 means the criterion applies to no app, so it is skipped.passingApps: of those, how many actually satisfy it.A capability enforced centrally (root CI, shared config that all apps inherit) counts as satisfied for every app it covers. A capability present in only some apps counts only for those; do not round up to the whole repo.
Judge strictly. An app satisfies a criterion only if the capability is present and actually in effect. A config file that nothing runs does not count (the linter must run in CI or a hook, the coverage threshold must fail the build, the documented test command must work). When in doubt for an app, it does not pass. Most real monorepos have significant per-app gaps and should land in the middle, not the top.
AGENTS.md / CLAUDE.md documents conventions and commands for agents..env.example (or equivalent) lists required configuration..gitignore excludes secrets, build output, and local files.CODEOWNERS file assigns review ownership..cursor/rules, .claude/, or similar agent rules exist.agent-readiness.jsonWrite your judgements to agent-readiness.json in the repository root. Record
the discovered apps and, per criterion, only applicableApps / passingApps
counts plus a rationale, and no totals, pass rates, scores, statuses, or levels.
Those are computed by scripts/build-report.mjs, which reads this file, derives
every aggregate, and renders agent-readiness-report.md.
Shape:
{
"repo": "<repository name>",
"apps": ["apps/backend", "apps/frontend", "apps/cli"],
"categories": [
{
"name": "Testing",
"criteria": [
{
"name": "Unit Tests Exist",
"applicableApps": 3,
"passingApps": 3,
"rationale": "All three apps have *.test.ts files and a test runner configured."
},
{
"name": "Coverage Thresholds",
"applicableApps": 3,
"passingApps": 1,
"rationale": "Only apps/backend enforces a coverage gate; frontend and cli do not.",
"action": "Add a coverage threshold to the frontend and cli vitest configs and fail CI below it."
}
]
}
],
"recommendations": [
{
"title": "Enforce a coverage gate in every app",
"detail": "Set a coverage threshold in each app's test config and fail the CI job when it drops below it."
}
]
}apps (at least one). For a single-service repo,
that is one entry.name above, and in
each one every criterion listed under it, once, by its exact name. The
builder rejects a missing, renamed, extra, or repeated criterion.applicableApps (0 if it applies to no app → skipped)
and passingApps (0 ≤ passingApps ≤ applicableApps). The builder derives the
status: all applicable apps pass → passed; some/none → failed; zero
applicable → skipped.rationale to one or two sentences; where adoption is partial, say
which apps pass and which do not.failed (i.e. passingApps < applicableApps) MUST include an action: one concrete, specific engineering
step that closes the gap across the apps that lack it. Fully-passing and
skipped criteria omit action.dependabot.yml with a weekly npm update
schedule", "Add a /healthz route and wire it to the k8s readiness probe").
Not vague advice ("improve observability").recommendations is the 2 to 3 highest-impact actions to start with. Each has a
title and a one-sentence detail. Order by impact.The builder scores each criterion as passingApps / applicableApps, derives
each category's pass rate and the app-weighted overallScore
(total passing apps / total applicable apps across all criteria), and the
maturity level: <40% → 1 (Functional), 40-59% → 2 (Documented), 60-79% →
3 (Standardized), 80-91% → 4 (Optimized), ≥92% → 5 (Autonomous). It renders the
coverage fractions, recommendations, and the gaps → actions table.