mktrue
mktrue 0.3.1

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

  1. Your answers are checked first. A bad answer stops it before anything is written.
  2. It writes the repository into a temporary folder, installs it, and runs every gate.
  3. 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.
exit 0
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 product

The template’s code and its tests, the lockfile, and a CI workflow that runs the gates. It is yours from the first commit.

.claude/ · the bench

6 agents and 9 commands: architect, implementer, reviewer, security auditor, interface engineer and docs writer, each with its own job.

CLAUDE.md · the rules

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.

rules · 5 121 / 10 000
state · 333 / 2 500
largest decision · 0 / 12 000

Used in the run above.

docs/ · the seed documents

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.

.mktrue.json

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.

Template
name

Lowercase letters, digits and hyphens. It becomes the folder and the name in every file.

9 questions for application

Where a question has a default, it is filled in. Change anything.

purpose

no default · your words

It heads the rules and the architect’s brief, so every agent starts from the same line.

owner

no default · your words

The docs writer writes for this person, months from now.

audience

no default · your words

The interface engineer judges every screen by that moment.

stakes

no default · your words

The security auditor weighs every change against it.

data

blank means none

Each kind is named in the rules and kept out of logs, errors and URLs.

sign-in

default · clerk

It is written into the rules, so no agent invents a second way in.

languages

default · en

Every string a person reads must exist in each one. Adding es adds its own files.

web port

default · 4100

Pick one nothing else on your machine uses.

api port

default · 4101

Pick one nothing else on your machine uses.

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
the repository
  • .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.

the command
npx -y [email protected] new application <name> --answers answers.json

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": []
}

a sentence for Claude Code

/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.

exit 0
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.

exit 0
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.

exit 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.