Make it true.
You bring the idea. The agents build it the right way.
mktrue turns your answers into a repository an AI coding agent can build without drifting: the first code, its tests, and the rules 6 agents work by. It commits only when every gate passes.
What happens when you run it
- Your answers are checked first. A bad answer stops it before anything is written.
- It writes the repository into a temporary folder, installs it, and runs every gate.
- Only when every gate passes does it commit and move the folder into place. If one fails, it says which, and where the folder is.
mktrue new application example --answers answers.jsonmktrue: templates · embeddedmktrue: new · application 0.1.0 · 196 files · .example.mktrue-new-DSmO2Omktrue: gate · pnpm install --frozen-lockfile · ✓ 8.9smktrue: gate · pnpm typecheck · ✓ 4.9smktrue: gate · pnpm test · ✓ 48.0smktrue: check · 5 of 5 ✓mktrue: budgets · rules 5 121 / 10 000 · state 333 / 2 500mktrue: budgets · decisions 0 · largest 0 / 12 000mktrue: bench · 34 entries · 23 slotsmktrue: tiers · 6 roles · 6 tieredmktrue: paths · 6 of 6 resolvemktrue: drift · 17 owned · 0 edited · 0 pinnedmktrue: git · chore: create example from mktrue 0.3.1 (application 0.1.0)mktrue: example is truemktrue: next · cd example, then /create-roadmap in your agent
Real output from mktrue 0.3.1, captured with NO_COLOR set.
What lands, in one commit
The template’s code and its tests, the lockfile, and a CI workflow that runs the gates. It is yours from the first commit.
6 agents and 9 commands: architect, implementer, reviewer, security auditor, interface engineer and docs writer, each with its own job.
The rules every agent reads, with budgets a gate enforces: 10 000 characters for the rules, 2 500 for the state file, 12 000 for one decision.
Used in the run above.
The state, the roadmap, the decision index, the design folder and the first log entry, so every path the rules name exists from day one.
Your answers, the template and kit versions, and a hash of each of the 17 files mktrue owns, so it can tell when one was edited.
Answer the questions
Pick a template, then answer its questions. Beside them, the repository takes shape as you type. Nothing leaves this page.
Preview
<name>/ · application · 196 files
the harness- CLAUDE.md
- .mktrue.json
- .claude/agents/ 6 agents
- .claude/commands/ 9 commands
- docs/STATE.md
- docs/ROADMAP.md
- .github/workflows/mktrue.yml
Change an answer to see the files it is written into.
gates new runs before it commits- pnpm install --frozen-lockfile
- pnpm typecheck
- pnpm test
.claude/ 16
agents/ 7
- README.md
- architect.md
- docs-writer.md
- implementer.md
- reviewer.md
- security-auditor.md
- ui-engineer.md
commands/ 9
- close-slice.md
- create-roadmap.md
- new-module.md
- plant.md
- review-security.md
- start-milestone.md
- start-slice.md
- update-roadmap.md
- worktree.md
.github/ 2
workflows/ 2
- ci.yml
- mktrue.yml
apps/ 55
web/ 55
app/ 12
actions/ 1
- profile.ts
components/ 4
- api-failure-card.tsx
- auth-not-configured.tsx
- language-choice.tsx
- sign-out-link.tsx
no-access/ 1
- page.tsx
sign-in/ 1
[[...sign-in]]/ 1
- page.tsx
- error.tsx
- globals.css
- layout.tsx
- not-found.tsx
- page.tsx
dev-session/ 5
- aliases.ts
- bind.ts
- clerk-nextjs-server.ts
- clerk-nextjs.ts
- serve.ts
i18n/ 4
- accept-language.ts
- catalogues.ts
- locales.ts
- request.ts
lib/ 9
- api-failure.ts
- api.ts
- auth-enabled.ts
- config.ts
- example-item-status.ts
- example-items.ts
- fetch-failure.ts
- owner-token.ts
- profile.ts
messages/ 1
- en.json
test/ 15
app/ 1
actions/ 1
- profile.test.ts
dev-session/ 4
- aliases.test.ts
- bind.test.ts
- serve.test.ts
- stand-ins.test.ts
i18n/ 1
- accept-language.test.ts
lib/ 6
- api-failure.test.ts
- api.test.ts
- config.test.ts
- example-item-status.test.ts
- owner-token.test.ts
- where-the-caller-comes-from.test.ts
test-support/ 1
- server-only.ts
- messages.test.ts
- proxy.test.ts
- .gitignore
- global.d.ts
- next-env.d.ts
- next.config.ts
- package.json
- postcss.config.mjs
- proxy.ts
- tsconfig.json
- vitest.config.ts
docs/ 8
decisions/ 1
- index.md
design/ 1
- README.md
log/ 1
- {date}-created.md
- ROADMAP.md
- STATE.md
- architecture.md
- security.md
- web.md
packages/ 14
contracts/ 14
src/ 9
- api-error.ts
- civil-date.ts
- example-item.ts
- example-stats.ts
- health.ts
- index.ts
- me.ts
- object-id.ts
- profile.ts
test/ 3
- api-error.test.ts
- example-item.test.ts
- profile.test.ts
- package.json
- tsconfig.json
services/ 91
api/ 91
src/ 62
app/ 4
- config.ts
- main.ts
- serialize-by-user.ts
- server.ts
contexts/ 32
auth/ 5
application/ 2
- errors.ts
- ports.ts
infrastructure/ 3
- clerk-token-verifier.ts
- dev-session-token-verifier.ts
- null-token-verifier.ts
example/ 14
application/ 8
- add-example-note.ts
- count-example-items-by-status.ts
- create-example-item.ts
- errors.ts
- list-example-items.ts
- list-example-notes.ts
- ports.ts
- update-example-item.ts
domain/ 2
- example-item.ts
- example-note.ts
infrastructure/ 4
- example-item-model.ts
- example-note-model.ts
- mongoose-example-item-repository.ts
- mongoose-example-note-repository.ts
profile/ 8
application/ 5
- errors.ts
- get-profile.ts
- ports.ts
- resolve-time-zone.ts
- update-profile.ts
domain/ 1
- user-profile.ts
infrastructure/ 2
- mongoose-user-profile-repository.ts
- user-profile-model.ts
shared/ 5
application/ 1
- ports.ts
domain/ 1
- civil-date.ts
infrastructure/ 3
- mongo.ts
- object-id.ts
- user-scoped-schema.ts
controllers/ 20
example-items/ 6
- create.ts
- index.ts
- list.ts
- notes.ts
- to-dto.ts
- update.ts
profile/ 4
- index.ts
- read.ts
- to-profile-dto.ts
- update.ts
stats/ 2
- example-items.ts
- index.ts
- caller-clock.ts
- caller-id.ts
- deps.ts
- health.ts
- map-example-error.ts
- map-profile-error.ts
- me.ts
- reject-invalid-request.ts
middlewares/ 6
- api-errors.ts
- extract-bearer-token.ts
- map-auth-error.ts
- path-without-query.ts
- require-loopback-host.ts
- require-user.ts
test/ 24
app/ 8
- client-supplied-owner.test.ts
- config.test.ts
- cross-tenant.test.ts
- owner-first-ports.test.ts
- profile-is-not-admission.test.ts
- query-guard-bypass.test.ts
- serialize-by-user.test.ts
- server.test.ts
contexts/ 7
auth/ 1
infrastructure/ 1
- null-token-verifier.test.ts
example/ 2
application/ 1
- add-example-note.test.ts
domain/ 1
- example-item.test.ts
profile/ 3
application/ 2
- resolve-time-zone.test.ts
- update-profile.test.ts
domain/ 1
- enum-drift.test.ts
shared/ 1
infrastructure/ 1
- user-scoped-schema.test.ts
controllers/ 2
example-items/ 1
- notes.test.ts
- map-example-error.test.ts
middlewares/ 1
- require-user.test.ts
test-support/ 6
- fake-token-verifier.ts
- in-memory-example.ts
- owner-first-ports.ts
- owner-server.ts
- registered-routes.ts
- source-sweep.ts
- package.json
- tsconfig.json
- tsup.config.ts
- vitest.config.ts
- vitest.setup.ts
- .env.example
- .gitignore
- .mktrue.json
- CLAUDE.md
- README.md
- package.json
- pnpm-lock.yaml
- pnpm-workspace.yaml
- tsconfig.base.json
- turbo.json
Matches what mktrue 0.3.1 wrote for this template, minus node_modules and .git.
Take it with you
Each way ends in the same verdict.
Still to answer: name, purpose, owner, audience, stakes. Without them, new stops with exit 2.
npx -y [email protected] new application <name> --answers answers.json
Save this as answers.json in the folder where you run the command.
{
"name": "",
"purpose": "",
"owner": "",
"audienceTest": "",
"stakes": "",
"dataClasses": [],
"auth": "clerk",
"ports": {
"web": 4100,
"api": 4101
},
"languages": [
"en"
],
"siblings": [],
"skills": []
}/mktrue …. Use the application template and name it …. Propose these answers for me to confirm: owner — …; audience — …; stakes — …; data — none; sign-in — clerk; languages — en; web port — 4100; api port — 4101.
Keep it true
mktrue check
Reads the repository and reports drift: budgets, files mktrue owns that were edited, rules that went missing.
mktrue checkmktrue: check · 5 of 5 ✓mktrue: budgets · rules 5 121 / 10 000 · state 333 / 2 500mktrue: budgets · decisions 0 · largest 0 / 12 000mktrue: bench · 34 entries · 23 slotsmktrue: tiers · 6 roles · 6 tieredmktrue: paths · 6 of 6 resolvemktrue: drift · 17 owned · 0 edited · 0 pinnedmktrue: true · exit 0
mktrue sync
Brings the method up to date when the kit improves. It is a dry run unless you add --write.
mktrue syncmktrue: sync · kit 0.3.1 → 0.3.1 · dry runmktrue: 0 updates · 0 kept · 0 conflicts · 0 skipped · 0 removedmktrue: true · exit 0
mktrue audit
Measures this repository’s local Claude Code sessions into one HTML report. It sends nothing. With no sessions yet, it says so and exits 3.
mktrue auditmktrue: ✗ environment · no Claude Code transcripts for this repository why audit reads only the project dirs Claude Code wrote for this repository fix run Claude Code in this repository first, or set CLAUDE_CONFIG_DIR exit 3
mktrue doctor
Checks that this machine has what new and the Claude Code skill need. It changes nothing unless you add --write, and then only the skill link.
Later
Not in 0.3.1.
- Short links that carry your configurator answers.
- A team dashboard: one row per repository.
- Template packs.