A small browser carnival to build a software factory on: label an issue and an agent ships a new game. The starter repo for the 'Build your own software factory with context' workshop.
Overview
in your browser, and see what other people's factories built in . Your coding agent writes code fast. Turning issues into pull requests, reviewing them and keeping the repo healthy still waits on you. This repo is where you build a software factory to take that work on, one skill at a time. A is a set of loops on your repository. Each loop is a skill that runs on its own: when something happens, such as a label on an issue or a time on the clock, an agent does one job the way the skill describes, and code review checks the result before you merge. Tessl Carnival is the starter repo for , a 90-minute hands-on workshop at , November 2 to 4, 2026 at Industry City, Brooklyn. Everyone in the room builds on this same repo, so you can compare notes with the person next to you. The room comes together three times: a 10-minute kick-off, a checkpoint and show and tell. The rest you do at your own pace. Start at WORKSHOP.
README
Tessl Carnival
Play the carnival in your browser, and see what other people’s factories built in Show your carnival.
Your coding agent writes code fast. Turning issues into pull requests, reviewing them and keeping the repo healthy still waits on you. This repo is where you build a software factory to take that work on, one skill at a time.
A software factory is a set of loops on your repository. Each loop is a skill that runs on its own: when something happens, such as a label on an issue or a time on the clock, an agent does one job the way the skill describes, and code review checks the result before you merge.
The workshop
Tessl Carnival is the starter repo for Build your own software factory with context, a 90-minute hands-on workshop at AI Native DevCon NYC, November 2 to 4, 2026 at Industry City, Brooklyn. Everyone in the room builds on this same repo, so you can compare notes with the person next to you.
The room comes together three times: a 10-minute kick-off, a checkpoint and
show and tell. The rest you do at your own pace. Start at
WORKSHOP.md and pick your path:
- With your agent. Your coding agent sets up your fork and your factory from the terminal, and explains each choice as it goes.
- In the browser. Click through GitHub and the Tessl app, with nothing to install.
Both paths have the same shape:
- The core path (about 40 minutes). Get the carnival running, set up a factory on your fork, and ship your first issue without writing code: label it, and an agent opens the pull request. You’re done when your change is live at your own GitHub Pages link. It’s the only part everyone needs to finish.
- Tracks (pick one, about 20 minutes). Teach code review the carnival’s house rules, add a maintenance loop that files issues on a schedule, grow your carnival with several issues at once, or set up a factory on a repo of your own.
On the agent path, open your coding agent in your clone and paste Read
workshop/agent.md and take me through the core path, one step at a time.
Before the session, ask it to Check I’m ready for the workshop: it follows
skills/check-workshop-ready and tells
you anything to fix.
Bring: a laptop and a GitHub account. For the agent path, also bring git,
Node 22.13 or later, a coding agent (Claude Code, Codex, Cursor or similar), the
GitHub CLI logged in with gh auth login, and the Tessl CLI,
installed with curl -fsSL https://get.tessl.io | sh, or winget install tessl.tessl
on Windows. Not with npm: that package is deprecated.
Facilitators: Hamza Oza, James Moss and Joe Holdcroft, from Tessl. Raise your hand at any point and one of us will come over.
After the session, your carnival stays live at your Pages link, so keep building it during DevCon, and come and find us at the Tessl booth to go further.
Not in the room? AI DevCon is where developers and teams building software factories compare notes. Get a free virtual ticket, or watch the talks from AI DevCon London, with speakers from Anthropic, Google DeepMind, Meta, Netlify, Thoughtworks and Docker.
The carnival
The carnival is a small browser game. It ships with one game, the water cannon, and a midway you walk around: a sunny fairground with tents, rides and a booth for every game. Empty booths say “coming soon” until a game fills them.
You grow your carnival by adding games through your factory. Each game lives in its own folder, and the midway finds it there, so a new game touches no shared file. Several games can be built at once without clashing, and everyone ends the session with a different carnival.
Get your own carnival
- Fork this repository on GitHub, and clone your fork.
- Set it up. Open your coding agent in the clone and ask it to Set up my fork. It turns on what the carnival needs, locks your fork down, deploys the carnival, and prints your Pages link.
- Play at your Pages link,
https://.github.io/tessl-carnival/. Walk up to the water cannon booth and press E. Walk with WASD or the arrow keys, or click where you want to go.
Every merge to main redeploys your carnival, so your factory’s work shows up
at the same link.
Run it on your laptop instead. You need git and Node 22.13 or later. In your clone:
npm ci
npm run dev
Then open http://localhost:5173.
Can’t run it on your laptop? Open your fork in GitHub Codespaces instead:
on your fork’s page, select Code → Codespaces → Create codespace on main. It
sets up Node, the GitHub CLI and the Tessl CLI, and installs everything, all in
your browser.
Run npm run dev in its terminal and the carnival opens in a new tab.
Your fork is public
Anyone can see your fork’s code, issues and pull requests, and its tessl.json
once you set up a factory. Set up my fork locks it down, so only you can open
issues, comment and open pull requests. Never put secrets in the repository: no
API keys, tokens or .env files.
Set up your fork
GitHub switches a few things off when you fork a repository: Issues, Actions and GitHub Pages. The quickest way to turn them on is to ask your coding agent, in your clone:
Set up my fork
It follows skills/set-up-your-fork: it
uses the GitHub CLI (gh) with your own login to turn
on Issues, Actions and Pages, deploys the carnival, and gives you a link to
share. It also sets that link as your fork’s website, in its About section,
and has GitHub delete each pull request’s branch once it merges. Every merge to
main redeploys it. GitHub needs one click from you: open your
fork’s Actions tab and enable workflows, which gh can’t do.
It also locks your fork down:
- Only you and your collaborators can open issues, comment and open pull requests. The lock lasts six months, the longest GitHub allows, and asking for Set up my fork again renews it.
- Pull requests from anyone else need your approval before Actions run on them.
To do it by hand instead:
- Issues. Go to Settings → General → Features and check Issues. Issues don’t copy across with a fork, but the starter issues do as templates: open Issues → New issue and pick one, or use Your own idea to write up a change of your own.
- Actions. Open the Actions tab and enable workflows. CI runs
npm run checkand the build on every pull request. - Pages. Go to Settings → Pages, set Source to GitHub Actions,
then re-run the Deploy to GitHub Pages workflow or merge anything to
main. Your carnival will be athttps://.github.io/tessl-carnival/. - Interactions. Go to Settings → Moderation options → Interaction limits, and limit interactions to repository collaborators for six months.
- Outside pull requests. Go to Settings → Actions → General, and require approval for all external contributors before their pull requests run workflows.
- Website link. On your fork’s main page, select the gear next to About, and set Website to your carnival’s link. A fork starts with the link to the original carnival.
- Tidy branches. Go to Settings → General → Pull Requests, and check Automatically delete head branches, so merged branches don’t pile up.
This repo doesn’t include a tessl.json. To set up a factory, run tessl init
in your clone first, the same as you would in any repository of your own.
Work with the factory
Once your factory is set up, GitHub issues are how you hand it work:
- Ship an issue: add the
tessllabel to an open issue. About 90 seconds later an agent starts on it, works on atessl/branch, and opens a pull request. - Answer its questions: if the agent asks something on the issue, reply there and it carries on.
- Take it back: remove the
tessllabel. Closing the issue also closes its pull request. - Who can start it: anyone who can add labels to issues on your fork. That’s you, unless you add collaborators.
On the agent’s pull request, code review leaves its findings, and the agent answers them and fixes any failing checks until it’s ready for you to merge.
Before you leave the session, switch off your scheduled loops, because they keep using credits. You can leave the label-to-pull request automation on to keep building your carnival: it only runs when you add the label. To switch everything off, ask your agent: Switch off all my factory automations. See Switch off what you don’t need.
Share your carnival
Everyone starts from the same water cannon and ends up somewhere different. Show people where yours went:
- Post it in Show your carnival as soon as you finish the core path, so the room can see how everyone’s doing: your carnival’s link, what your factory built, and one thing it got right and one it got wrong.
- Share it on X or LinkedIn: add your carnival’s link and tag Tessl, so we can see what you built.
- Star this repo if it helped, so other people find it.
Commands
| Command | What it does |
|---|---|
npm run dev |
Run the carnival locally |
npm run format |
Format the repo with Prettier, skipping .prettierignore |
npm run check |
Lint, check formatting, type-check and test everything |
npm run build |
Build the site into dist/ |
npm run test |
Run the tests once |
How it’s built
TypeScript, Vite and plain HTML canvas, with Vitest for the game logic. No UI
framework and no native dependencies, so npm ci is the whole setup.
index.htmlandsrc/main.ts: the page and the router.src/midway/: the walkable midway. Every registered game gets a booth along the avenue.src/carnival/: the shared base every game uses: the game registry, scores, prizes and theme.src/games//: one folder per game. The water cannon is the pattern to copy.skills/: skills that help an agent work on the carnival, such as adding a new game.tessl-factory/skills/: sample skills for maintenance loops that look for problems and file issues.
AGENTS.md is where your agent starts: how the carnival fits
together, the house rules every game follows, and how to work on an issue.
About Tessl
A software factory runs on context. Agents do good work when they know how your team builds software: your standards, your workflows, what good looks like. Tessl is where you write that down and put it to work, from skills, to loops, to factory.
- Skills. Capture how your team works in plain files that live in your repo, versioned and reviewed like code. Find more in the Tessl Registry, and score your own before your agents rely on them.
- Loops. Deploy a skill to run on its own, on a label, a pull request or a schedule: ship issues as pull requests, review code against your standards, keep docs and tests healthy. Improve the skill, and every run of the loop gets the change.
- Factory. Compose skills and loops into your whole delivery process. When review keeps catching the same mistake, a loop can write the rule down, so the next pull request gets it right.
You don’t need to build it all at once. Start with one skill on one repo, run it by hand until your team trusts it, then turn it into a loop. Everything Tessl sets up stays in your repo, and it works with the coding agents you already use, including Claude Code, Cursor and Codex.
Start free with 1,000 credits a month, no credit card required.
- Learn: docs, Tessl Registry, blog and podcast.
- Talk to us: Discord, or come to the next AI DevCon.
- Follow along: LinkedIn, X and YouTube.
License
MIT, so you can fork the carnival, change it and take it home. See
LICENSE.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add tesslio/tessl-carnival