Module — Onboarding to the Utopia Models stack (Max)
One page for Max's agent. It checks its own copy, reads the org live, learns how work is filed and shipped, runs the command that proves each grant, and posts a verdict.
You are an AI agent working for Max Forbang. This page is the whole brief: follow it top to bottom. Budget about 15 minutes. It creates one folder, one clone and one issue comment, and changes nothing else.
Canonical address: https://work.utopiamodels.ai/max.md (raw markdown). The last line of this page reads END OF MODULE. If you cannot see that line, your copy is cut short: stop and refetch with curl.
0. Contract
- Check your copy before acting on it. Step 1 does this. A fetch tool that summarises or truncates gives you a different page without telling you.
- Measure, never assume. Every claim below carries the command that produced it or is marked stated. Run the command and trust your output over this page. Where they differ, the page is stale: say so in your verdict.
- Ask your human only what you cannot measure, in one batch, with your harness's own question tool. Four grants here can only be proved by him, signed in as himself: section 6 says which. Everything else you can read yourself.
- Never write a credential value into a file, a commit, an issue or your verdict. If a step needs one, name where it is obtained.
- Fail loud. If a required step fails, finish the steps that do not depend on it, then post
INCOMPLETEwith the exact command and its raw output. Do not retry silently and do not guess a fix. - Resume, do not restart. Your state is the checklist file from step 1. If it exists, continue from the first unticked line.
1. Check your copy, then open the checklist
The first line of the raw page states the sha256 of every byte after it.
mkdir -p ~/utopia-onboarding && cd ~/utopia-onboarding
curl -fsS https://work.utopiamodels.ai/max.md -o max.md
head -n 1 max.md # the stated hash and byte count
tail -n +2 max.md | sha256sum # must equal the stated hash
tail -n +2 max.md | wc -c # must equal the stated byte count
tail -n 1 max.md # must read: END OF MODULE
sha256sum max.md # the whole-file hash; this one goes in your verdictIf the hash differs, stop: read max.md from disk instead of the copy in your context, and work only from the file.
Then create ~/utopia-onboarding/checklist.md unless it already exists, with exactly these eight lines. Tick each line as its step passes and write the evidence under it. Steps 3 and 6 have nothing to run: tick them once read.
- [ ] 1 copy checked
- [ ] 2 preflight passed
- [ ] 3 who we are, read
- [ ] 4 repos listed, utopia cloned
- [ ] 5 how work moves, read
- [ ] 6 access table, read
- [ ] 7 verify commands run
- [ ] 8 verdict posted2. Preflight
Run all four. A failure in a required one is an INCOMPLETE reason.
| tier | command | required | passes when |
|---|---|---|---|
| shell | git --version && jq --version | yes | both print a version |
| network | curl -fsS -o /dev/null -w '%{http_code}\n' https://work.utopiamodels.ai/llms.txt | yes | prints 200 |
| GitHub sign-in | gh auth status >/dev/null && gh api user --jq .login | yes | prints a login |
| org reach | gh api orgs/utopia-models/memberships/$(gh api user --jq .login) --jq '.role, .state' | yes | prints a role and active |
If gh is not signed in, ask your human to run gh auth login and continue from here.
Keep the login as LOGIN; it goes on line 2 of your verdict as reader: LOGIN. If that account is not your human's own, you are a test reader: carry on and verify what the account you have can see.
3. Who we are
Utopia Models is a small company run by Tyler Youk. Most of the work is done by a fleet of AI agents on one server, each a Claude Code session started for one GitHub issue and ended when its pull request merges. You will meet them as commit and comment authors: utopia-models-fleet[bot] and accounts named kxagent, kxagent2, kxagent3, kxagent4. They are peers. They read issue comments, so a comment is how you reach them.
The fleet describes itself in public at https://docs.utopiamodels.ai (index: https://docs.utopiamodels.ai/llms.txt). You do not need it to finish this module. Read /docs/operating/work.md there when you want more depth than section 5.
4. Repos and stack: read them, do not trust a list
This page does not list the repositories, because a list is stale the day after it is written.
gh repo list utopia-models --limit 100 \
--json name,description,visibility,isArchived,pushedAt,primaryLanguage \
--jq 'sort_by(.pushedAt) | reverse | .[] | [.name, .visibility, .pushedAt[0:10], (.primaryLanguage.name // "-"), (.description // "")[0:80]] | @tsv'Four names are stable enough to state. Confirm each appears in your output.
| repo | what it is |
|---|---|
utopia | the product monorepo. apps/web is one Next.js app that serves several sites, chosen by hostname. The agency site lives here. |
knowledge | the knowledge base, and the home of every issue on the board, whichever repo the code is in. |
docs-wiki, work-hub | the repos behind the two doc sites, docs.utopiamodels.ai and this one. The sites are public; the repos themselves list as PRIVATE. |
Repos with brain in the name hold one agent's own configuration each. Leave them alone.
Clone the one you will work in and read its stack from the repo itself:
cd ~/utopia-onboarding && gh repo clone utopia-models/utopia -- --depth 50
cd utopia && ls .claude/rules/
jq '.scripts' package.json && ls apps packages.claude/rules/tech-stack.md in that folder describes the product software (a CLI and the utopiamodels.ai app). It says nothing about the agency site, which is the next heading.
The agency site, as measured
utopiamodels.agency is static HTML files under apps/web/public/, not a set of Next.js pages. apps/web/middleware.ts decides which folder each hostname is served from. Find the block yourself:
grep -n 'utopiamodels.agency' apps/web/middleware.ts # every mention; the agency hosts appear in more than one block
grep -n 'index.html' apps/web/middleware.ts # which folder each block serves
ls apps/web/public/moxymgt apps/web/public/agencyMeasured 2026-10-04: the agency hosts serve the folder apps/web/public/moxymgt/ (/ is index.html, any other path is that path with .html appended). A second folder, apps/web/public/agency/, is an editable copy that no hostname is routed to. Before you edit anything, confirm which folder the middleware names today, or your change will ship and never be seen.
for p in / /services /brands /events /platforms; do
curl -sS -o /dev/null -w "%{http_code} $p\n" "https://utopiamodels.agency$p"; doneMeasured 2026-10-04: those five return 200.
5. How work moves
The queue is one GitHub project board: https://github.com/orgs/utopia-models/projects/1. Every piece of work is an issue in utopia-models/knowledge.
gh issue list --repo utopia-models/knowledge --state open --limit 20Done means merged. A pull request whose body says Closes #N closes the issue when it merges, and that is the only status change there is. From any repo other than knowledge, write the full form: Closes utopia-models/knowledge#N. Nobody types a status.
You merge your own pull request. There is no required review and no required check. Measured 2026-10-04: gh api repos/utopia-models/utopia/branches/main/protection answers 403 because the org's plan has no branch protection, so nothing can block a merge. A red check is information. A real build or typecheck failure is real: fix the code. Anything else, merge.
The one hard rule: never commit a secret. A gitleaks scan (.github/workflows/guard.yml) runs on every push.
Working in utopia:
- Read
.claude/rules/branch-workflow.mdand.claude/rules/vercel-git-author.mdin the clone. Short-lived branch fromorigin/mainororigin/dev, pull request, merge, delete the branch. Nevergit reset --harda tree with uncommitted work. Where a rule file there and this page differ on merging or on which email to commit with, this page is the measured one: the paragraphs above and item 2 say what to do. pnpm installpoints git at the repo'sgithooks/folder. Itspre-pushhook checks commit author emails against two lists in the file. Read them:grep -n 'ALLOWED=\|NO_SEAT_OK=' githooks/pre-push. Commit with an email on theNO_SEAT_OKlist.git config user.emailshows yours; if it prints nothing, none is set, so set one inside the clone withgit config user.email ADDRESSbefore your first commit. If your address is not on the list, add it to that list in your own pull request.- Other agents push to this repo all day. Fetch before you branch and rebase before you merge.
Shipping the agency site
| you do | it goes live at |
|---|---|
push or merge to branch dev | https://dev.utopiamodels.agency |
merge dev into main | https://utopiamodels.agency |
The deploy is a GitHub Actions workflow, .github/workflows/deploy-utopia-prod.yml, which runs on every push to main and dev and deploys with a token the org holds. Max needs no Vercel account.
gh run list -R utopia-models/utopia --workflow deploy-utopia-prod.yml --limit 5
gh run watch -R utopia-models/utopia "$(gh run list -R utopia-models/utopia --workflow deploy-utopia-prod.yml --limit 1 --json databaseId --jq '.[0].databaseId')"The check named Vercel on your commit may read blocked. That check belongs to Vercel's own git hook, which refuses to build for an author with no Vercel seat. It is not the deploy. Grade the deploy job of the workflow above, then grade the site: curl the live address and look for a string you changed. Stated, not measured on a commit of yours. The repo's pre-push hook prints the same notice.
main is shared. apps/web also serves utopiamodels.ai and other hosts from the same build, so a merge to main that breaks the build breaks all of them, and a failed production deploy files an alarm on the board. Prove a change on dev first.
What an earlier brief got wrong
A file named "utopiamodels.agency current state" was sent on 2026-09-29. Where it and this page differ, this page is the measured one.
| it said | measured 2026-10-04 |
|---|---|
| the site is built with Next.js pages | static HTML files under apps/web/public/, selected by hostname in apps/web/middleware.ts |
routes include /moxy-swim | /moxy-swim returns 404; the other five listed routes return 200 |
| nothing about how to ship | dev then main, deployed by the Actions workflow, as above |
| nothing about the Vercel check | it may read blocked for you and is not the deploy |
| nothing about secrets | section 6, row "secret store" |
6. The access this work uses
This page states what each system is for and the command that proves a grant. It does not state who holds what today: that is a fact about a live system, and only a probe run now is true. Run the command, or have Max run it, and record what it prints.
| system | what it is for | who proves it | how |
|---|---|---|---|
GitHub org utopia-models | every repo, the board, the deploy workflow | you | gh api orgs/utopia-models/memberships/$(gh api user --jq .login) --jq '.role, .state' prints a role and active |
| Google Workspace | the company identity the next three hang off | Max | he signs in at https://accounts.google.com with his company account and reaches the inbox |
| Cloudflare | DNS for utopiamodels.ai. Confirm with dig +short NS utopiamodels.ai | Max | https://dash.cloudflare.com lists the company account after he signs in |
| private network (Tailscale) | the only route to the secret store | Max, on his machine | tailscale status prints his device and its peers |
| secret store (Infisical, self-hosted) | credentials for the agency site, in a project of its own | Max, from inside the private network | the store opens in his browser and lists that project |
registrar for utopiamodels.agency | DNS for the agency site. Read which registrar with dig +short NS utopiamodels.agency | Max | he signs in at that registrar and sees the domain |
| Vercel | nothing. The deploy needs no account of his, see section 5 | nobody | not applicable |
Nothing private is on this page. Every sign-in, address and link that one of these needs reaches Max from Tyler directly, and so does the location of the site's assets. If one is missing, Max asks Tyler; you ask nothing on his behalf in public.
The order
The Workspace identity comes first, because the three after it are reached through it.
- Workspace (human). Max signs in with his company account.
- Cloudflare (human). He signs in and confirms the company account is listed.
- Private network (human). He installs Tailscale, signs in with his company account, and runs
tailscale status. - Secret store (human, after 3). He opens the store from inside the private network. The agency site's pages are static files, so no work on them needs a secret.
- GitHub (you). Step 7 measures it.
- Registrar (human). Only needed when a DNS record for
utopiamodels.agencyhas to change.
7. Verify
Run what you can. For the four human steps, ask once, in one batch, whether each of 1 to 4 above is done, and record done, not yet or failed: reason for each. If you cannot reach him, record not asked and do not wait.
LOGIN=$(gh api user --jq .login)
gh api orgs/utopia-models/memberships/$LOGIN --jq '"github role=\(.role) state=\(.state)"'
gh repo list utopia-models --limit 100 --json name --jq 'length | "repos visible=\(.)"'
gh api repos/utopia-models/utopia --jq '"utopia push=\(.permissions.push) admin=\(.permissions.admin)"'
gh api repos/utopia-models/knowledge/issues/8550 --jq '"thread #\(.number) state=\(.state)"'
test -f ~/utopia-onboarding/utopia/apps/web/middleware.ts && echo "clone ok"
echo "agency mentions=$(grep -c 'utopiamodels.agency' ~/utopia-onboarding/utopia/apps/web/middleware.ts)"
gh run list -R utopia-models/utopia --workflow deploy-utopia-prod.yml --limit 1 --json conclusion,headBranch --jq '.[0] | "last deploy \(.headBranch) \(.conclusion)"'
echo "agency ns=$(dig +short NS utopiamodels.agency | sort | head -2 | paste -sd' ')"ONBOARDED needs all of these: the copy check in step 1 passed, every required preflight tier passed, the role line prints a role with state=active, utopia push=true, clone ok, agency mentions is above zero, and the thread reads state=open. The repos visible, last deploy and agency ns lines are information: report them, they do not decide the verdict.
If you are a test reader, your ONBOARDED says the module can be followed. It says nothing about Max's own access, which only a run under his account measures.
The four human steps do not decide the verdict. Report them under human-steps.
8. Post the verdict
Write ~/utopia-onboarding/verdict.md in exactly this shape. Line 1 is the verdict and nothing else. Write no email address and nothing private into it: the thread is read by every agent in the org.
ONBOARDED
reader: LOGIN
module: https://work.utopiamodels.ai/max.md
fetched:
- https://work.utopiamodels.ai/max.md sha256=WHOLE_FILE_HASH bytes=N integrity-line=pass
- (the two lines the loop below prints)
checks:
- (each line your step 7 commands printed, verbatim)
human-steps:
- workspace: done | not yet | not asked | failed: reason
- cloudflare: done | not yet | not asked | failed: reason
- private network: done | not yet | not asked | failed: reason
- secret store: done | not yet | not asked | failed: reason
page-vs-measured:
- (anything you measured that differs from this page, or "none")fetched: is a manifest of pages, not of every request. The module's line hashes the copy on disk that step 1 checked; the other two are fetched and hashed now. API calls and the clone are not listed.
cd ~/utopia-onboarding
printf -- '- https://work.utopiamodels.ai/max.md sha256=%s bytes=%s integrity-line=pass\n' "$(sha256sum max.md | cut -d' ' -f1)" "$(wc -c < max.md)"
for u in https://work.utopiamodels.ai/llms.txt https://utopiamodels.agency/; do
curl -fsS "$u" -o body.tmp && printf -- '- %s sha256=%s bytes=%s\n' "$u" "$(sha256sum body.tmp | cut -d' ' -f1)" "$(wc -c < body.tmp)"
done; rm -f body.tmpIf any required check failed, line 1 is INCOMPLETE — followed by the first failing check, and checks: carries the failing command with its raw output.
gh issue comment 8550 --repo utopia-models/knowledge --body-file ~/utopia-onboarding/verdict.mdThe thread is https://github.com/utopia-models/knowledge/issues/8550. It is also where you ask for anything missing that is not private: say what you ran, what it printed and what you expected. Fleet agents read it.
Then tell your human, in three lines or fewer: the verdict, which human steps are still open, and the address of your comment.
Undo. rm -rf ~/utopia-onboarding removes everything this module created on the machine. gh issue comment 8550 --repo utopia-models/knowledge --delete-last --yes removes the verdict.
END OF MODULE