Documentation
For your Klaudius project
Start here: the project is the docs.
Most of what you'd ask of these docs is better asked of your agent directly — open it (Claude Code or Codex) in your project folder and just talk. This file exists for the few things the agent can't easily surface on its own (see below for how to operate Klaudius), and for the moments when the agent isn't running yet (first-time install, re-running the wizard, install troubleshooting).
The essentials
Getting the most out of Klaudius
The five things below are what almost every operator wishes they'd known on day one. Read them before you start churning out sites.
1. Talk to your agent inside the project — this is the #1 thing
Klaudius is designed to be as hackable and customisable as possible, and the way you do that is by opening your agent (Claude Code or Codex) in your project folder and just talking to it. Ask it to walk you through how the pipeline works, what any part of the project does, or what features are available. Want more casual outreach? Say so. Want to raise your pricing, stop pitching restaurants, drop a follow-up touch, source businesses from a different city? Ask. The agent handles the change for you. When something breaks, it can almost always fix it.
The project is the product, and the more you treat it as something you converse with, the more you'll get out of it. The rest of this file covers the things the agent can't easily surface on its own (model and reasoning-effort selection, the parallel-pipeline mode, account scaling) — everything else, just ask.
2. Balance output volume against quality
The biggest fork in how to run Klaudius is which agent and which plan tier you're on. The defaults that work best differ across both axes — pick the box below that matches your install:
Claude Code
On Claude Max or a Team Premium seat: use Opus and treat the thinking level as a quality dial. The higher you set it — “high”, then “xhigh”, then “max” — the better the websites come out. The trade-off is usage: each step up burns through your limits faster. These plans have the headroom, so lean toward the higher levels; drop back down only if you're pushing for volume and feeling the limits.
On Claude Pro or a Team Standard seat: the wizard has already set you up for volume — the QA pass is off (see note below) and Sonnet, Claude Code's default model on Pro, builds several sites per usage window with only the occasional rough edge. Leave the thinking level where it is: raising it burns the window faster without a matching gain at this tier. For quality instead, ask Claude to turn the QA pass back on, and run Opus: these limits stretch to roughly one site per 5-hour window on Opus, so the move is to build one, then build another the moment the limit resets (“token-maxxing”). Far lower throughput, but each site comes out markedly better. Pick based on whether you want more sites or better ones.
Codex
On ChatGPT Pro or a Business Premium seat: use Sol (currently gpt-5.6-sol) and treat the reasoning effort as a quality dial. The higher you set it — “high”, then “extra high” — the better the websites come out. The trade-off is usage: each step up burns through your limits faster. These plans have the headroom, so lean toward the higher levels.
On ChatGPT Plus or a Business Standard seat: the wizard has already set you up for volume — it selected Terra (currently gpt-5.6-terra) and turned the QA pass off (see note below). Terra is close to the flagship's quality at roughly half the usage burn, so you'll finish several pipelines per usage window with only a modest quality dip. Leave the reasoning effort at medium: high roughly doubles the burn per site, and with QA off it's the biggest remaining lever on how far your window goes. For quality instead, ask Codex to turn the QA pass back on, switch the model to Sol (currently gpt-5.6-sol) and accept roughly one site per usage window; build it, then build another when your limits reset (“token-maxxing”). Far lower throughput, but each site comes out markedly better. Pick based on whether you want more sites or better ones.
A note on the QA stage. After the agent has finished generating a site, a fresh agent is launched purely to review it. It doesn't just read the code — it takes screenshots of the site across desktop and mobile viewports and visually inspects each one the way a human would, catching broken layouts, missing images, copy that drifted from the brief, broken hrefs, or anything that just looks off. We use a fresh agent because the main building agent has been deep in that codebase for hundreds of tool calls and has tunnel vision: it's been generating components, wiring data, deploying. A fresh-context reviewer walks in cold and is markedly better at spotting the small stuff. It's the cheapest way to neutralise accumulated-context bias, and it's a big part of why Klaudius output reads as crafted rather than generated. That said, QA is often the slowest part of the pipeline and a real slice of your usage — especially when a site fails the first round and needs a fix pass — which is why the wizard turns it off for you on the entry-level plans (Claude Pro, ChatGPT Plus, and Standard seats on Claude Team or ChatGPT Business) and leaves it on everywhere else. Flipping it either way is one ask away — just tell ClaudeCodex:
> Turn the QA phase off so sites go straight from build to deployIt takes effect from the next pipeline run; ask for it back on the same way whenever you want the extra polish. (If you change plan, re-running npx klaudius@latest configure resets the default to match.)
3. Run your agent on autonomous mode
Klaudius is built around long-running, multi-step sessions — finding leads, building sites, sending outreach. Sitting at your keyboard pressing “yes” to every tool approval defeats the point. Switch your agent into autonomous mode and let it run.
Claude Code — auto mode
Cycle into it with Shift+Tab until the status line reads “auto mode.” Once you're in, Claude executes routine actions — file edits, script runs, API calls — without prompting, while still surfacing output for you to follow.
This isn't reckless. Anthropic ships guardrails inside auto mode that surface genuinely dangerous actions for approval — destructive shell commands, irreversible operations, anything that affects shared production systems. You retain veto power on the things that matter; you stop being asked about routine work. (Don't use --dangerously-skip-permissions — that bypasses the guardrails entirely.)
Codex — yolo mode
Run with codex --yolo to skip the approval prompts and let Codex work autonomously.
Drop back to interactive mode when you're doing something you genuinely want to review step-by-step — composing a reply to a warm lead, say, or registering a domain for a freshly-converted client.
4. Don't cram too many pipeline runs into one session
If you try to run many clients sequentially in a single session, you'll fill the context limit and the agent will auto-compact mid-pipeline, which can disrupt whatever it's working on at the time. The fix is to ask it to run the pipeline in parallel:
> Run pipeline x3On the cheaper plans (Claude Pro, ChatGPT Plus, or a Standard seat on Claude Team or ChatGPT Business), start with x2 instead — parallel sessions all draw from the same usage pool, and three concurrent builds will burn through the lower tiers' limits mid-run.
The agent becomes an orchestrator that dispatches three concurrent pipeline sessions, each running end-to-end on its own client, and refills the pool every time one completes. Each session handles one client and exits, so no instance ever gets bloated context, and your orchestrator session stays light. The mechanics underneath that single command differ by agent — both work for the operator, but the underlying machinery differs:
Claude Code
Each parallel session runs as a Claude Code background session managed by the supervisor process — a full Claude Code session, just without a terminal attached. Runs on your existing subscription, no extra billing.
Two-tab pattern. Tab 1 is the orchestrator (the session you ran “Run pipeline x3” in). Tab 2 is optional but useful — a live dashboard of every background session:
claude agentsSessions survive Ctrl+C and terminal closes. They don't survive reboots — run claude respawn --all after a reboot to restart them where they left off.
Codex
Each parallel session is a separate headless codex exec child that builds one client and exits. A small supervisor process (scripts/orchestrate.py) keeps the pool full — your Codex session starts it, and the supervisor keeps refilling slots on its own even if you close that session. Runs on your existing subscription, no extra billing. Works the same on macOS, Linux, WSL2, and native Windows.
Monitoring. Ask the session for pool status anytime (“how many are running?”, “how did run-7 go?”) — it reads the supervisor’s live state. For a live feed, tail orchestrator-logs/supervisor-events.log in a second terminal; each child’s full transcript is in orchestrator-logs/run-NNN.log, and any finished child can be reopened with codex resume <session id>. Scale up or down (“make it 5”, “drain to 2”) and stop by asking the session; scaling down and stopping let in-flight children finish. To resume after a reboot, just say “Run pipeline x3” again. Concurrency safety is handled by atomic claims in the database. A single failed run just costs that slot; the supervisor stops automatically after three consecutive runs that don't succeed — or after five runs in a row find no candidates, which usually means the region is worked out and needs a new target. A usage limit isn't a failure: the supervisor pauses the pool, waits for your window to reset, then resumes each interrupted child where it left off.
Pool size. Start with x2 or x3. Three is the sweet spot for most operators — enough throughput that you're not babysitting, not so many that you burn through usage limits. The orchestrator stops automatically after three consecutive failed runs (build errors, unusable photos, etc.) and sends you an alert. On Claude Code, an infrastructure-level failure — an API socket drop, auth expiry, a supervisor error — stops it on the first occurrence, since those usually need a human eye; on Codex a lone abnormal exit just costs that slot, and only three in a row stop the pool. A usage limit is neither: both wait for your window to reset and resume the interrupted sessions.
5. Scaling further as a power user
Once sales pick up and you want to really multiply output, running multiple agent subscriptions in parallel is the next move — when usage runs out on one account, you switch to the other and keep going. Pair this with the parallel pipeline mode above and you can keep throughput up around the clock.
Claude Code
Stack multiple Claude Max or Pro subscriptions across separate accounts. Switching is a re-auth in your terminal — log out of one and log into the other. Background sessions tied to the first account keep running on it; new dispatches go on whichever account you're currently authed to.
Codex
Stack multiple ChatGPT Pro or Plus subscriptions across separate accounts. Switching is a re-auth in your terminal.
Setup
First-time install
Klaudius runs on your own Claude or ChatGPT subscription. There are two ways to set it up, and both end with the same project.
Before the wizard, get your machine ready. Open Claude Code or Codex in your terminal and tell it this (it'll take it from there):
I've bought Klaudius (klaudius.dev). Download and read the setup script for my system first — https://klaudius.dev/setup.sh (macOS/Linux) or https://klaudius.dev/setup.ps1 (Windows) — then run it: curl -fsSL https://klaudius.dev/setup.sh | bash on macOS/Linux, or irm https://klaudius.dev/setup.ps1 | iex on Windows.
It installs the prerequisites Klaudius needs — Node.js (22.15+) and Python (3.10+) — into your user space, with no admin password and no clicks, then runs a preflight check and tells you when you're ready. It skips anything you already have at a good version, so it's harmless on an existing developer setup and safe to re-run. Because your agent reads the script before running it, it can also fix anything that goes wrong along the way.
Rather do it yourself? Run the command for your system straight in a terminal, without the agent. (The read it first half of the wording above is doing real work: handed a bare irm … | iex with no chance to review it, an agent will usually refuse — piping a script straight from the web into a shell is a pattern they're trained to stop. Once it has read the script, it runs it happily.)
Then, in a new terminal window, scaffold the project:
npx klaudius@latest init my-agencyThe init command scaffolds this project, then launches you into an interactive wizard that walks you through everything — your pricing and outreach preferences, the connection details for the infrastructure Klaudius runs on, and the installation of all dependencies (Node packages, Python packages, browser engines). The whole thing takes 15–20 minutes.
After it finishes, move into the new project directory and open your agent (see Run your agent on autonomous mode):
Claude Code
cd my-agency
claude
> Run the pipeline for New Jersey.Codex
cd my-agency
codex --yolo
> Run the pipeline for New Jersey.Download the app from klaudius.dev/download (Mac or Windows) and open it. Paste your licence key when it asks, and it walks you through the rest: your pricing and outreach preferences, the connection details for the infrastructure Klaudius runs on, installing anything your computer is missing (Node.js and Python, plus Claude Code if that's the agent you pick), and signing in to your Claude or ChatGPT account in your browser. The whole thing takes 15–20 minutes, and when it's done the app opens on your dashboard.
From then on you can run everything from the app, or open the project folder in your agent any time — most of this page applies either way.
Outreach channels: Klaudius supports a range of outreach channels. You opt into any combination during setup, in the app or the terminal wizard, and set a priority order — for each candidate, Klaudius tries your priority channels in order and uses the first one that's viable.
Troubleshooting
Diagnostics
Klaudius has a built-in install-time health check. The main moment to use it is right after the wizard finishes. Open your agent inside the project and ask:
Check my Klaudius install is healthy.
It runs a structured check across everything that needs to be in order for the pipeline to work — language versions, dependencies, project files, and the credentials you configured in the wizard — then reads the results back to you and walks you through fixing anything that came back red.
Beyond install, you generally won't need the health check at all. The exception is when something environmental has clearly changed — you've moved to a new machine, rotated a credential externally, or a system update has broken something. For everyday pipeline issues — anything mid-run, anything specific to a particular client, anything you'd describe in a sentence — just ask your agent directly. It reads the error, reasons about it, and usually fixes it on the spot.
If the health check comes back green and your agent still can't make sense of what's happening, email hello@klaudius.dev with what it told you and we'll dig in.
Checking your email lands: /deliverability
Ask your agent to run /deliverability and it will tell you whether your outreach email is set up correctly.
It works in two steps. First it sends a single test message from your own account to itself, reads it back, and reports how the receiving mail service actually treated it: the SPF, DKIM and DMARC verdicts it stamped on the message. That's the authoritative answer, because it's read off a real delivered message rather than inferred from your DNS records. Then it checks your sending domain's DNS and tells you what needs fixing, with the exact record to paste into your registrar wherever one applies.
Worth running once when you set up, and again any time replies dry up or you suspect something has changed.
The daily loop
Follow-ups every day, without remembering
Most replies come from the follow-ups, not the first message, and the first one is due three days after you pitch. /follow-up does the whole job: it checks every conversation for replies, works out who is due, and drafts each follow-up for you to read. Nothing is sent until you have seen the list and approved it. The only thing left to you is starting it each day, and you can hand that over too.
In the Klaudius app: switch on Daily follow-ups in Settings and pick a time. Each morning the app prepares the day's follow-ups, then the warm-leads report, and tells you when they are ready. If the app was closed or your computer asleep at that time, it catches up when you open it, up to 8pm. The follow-ups wait in the Inbox as an approval queue: read each drafted message, edit the wording if you like, then approve all of them, only some, or none. Whatever you leave stays in the queue for the rest of the day.
In the terminal: your agent can start itself on a schedule.
The Claude desktop app has local scheduled tasks: create one that runs on this computer, point it at your project folder, set it to daily, and give it the prompt /follow-up. Run it once by hand and allow the tools it asks for, so later runs don't stop to ask. It needs the Claude app open and the computer awake at the set time. Cloud-scheduled tasks are no use here: they run on someone else's machine, where your project folder, messages and mailbox are out of reach.
The Codex desktop app has scheduled tasks that run locally: create one on your project folder, set it to daily, and give it the prompt Run follow-ups. It needs the Codex app running and the computer on at the set time. Tasks that run in the cloud are no use here: your project folder, messages and mailbox are out of their reach.
A scheduled run stops at the proposal, exactly as it does when you start it yourself. It sends you a notification (Telegram, or whatever you chose at setup) such as "6 follow-ups ready for review, 2 warm replies waiting", and saves the proposal in your project. When you are back, open that conversation and answer in plain words (in a new conversation, ask to see today's follow-up proposal first): "send all", "send all except harbour-barbers", "send these: …", or "use this text for harbour-barbers: …". Before each send your agent re-reads that conversation, and it skips anyone who has replied in the meantime. A proposal is only good for the day it was made; the next day's run makes a new one.
Getting paid
Invoicing a client: /send-invoice
When a client says yes, ask your agent to invoice them — /send-invoice {business name}. It writes a professional PDF invoice for that client and leaves a ready-to-send email sitting in your own mailbox's drafts folder, with the invoice already attached and the client already in the To field. You read it and press send. It never sends anything itself — the last click on a money email is always yours.
You don't have to tell it much, because your project already knows the client: their business name, the owner, their email, the address, and the price you quoted them. Pass an amount if you're billing something different from the quoted price (a deposit, an add-on, a maintenance period) and it uses that instead.
The first time you ever run it, it asks a handful of questions about your own business — the name you invoice under, your address, whether you charge sales tax or VAT, and how clients pay you — then remembers all of it, so every invoice after that goes straight to confirming the numbers. Before anything is written, it shows you the whole invoice, tax arithmetic included, for you to confirm or correct. Invoice numbers run in sequence and are never reused — they come from a ledger in your database; if something needs correcting, you get a fresh number that references the one it replaces.
The PDF is filed alongside that client's site in your project, and the ledger keeps the record of every invoice and quote: what was billed, when it was due, and when it was paid. A card payment through the invoice's pay-by-card link (Stripe, below) is recorded on its own: the next /follow-up sees it and marks the invoice paid. A bank transfer you tell your agent about ("Acme paid") and it does the same. Either way that client becomes converted and their total stays right. Ask "who still owes me?" and it answers from the ledger. Quotes work the same way — /send-quote {business name} — in their own number series.
Card payments through your own Stripe account
Say "connect Stripe" and your agent asks for a restricted key from your own Stripe dashboard (it tells you exactly which permissions to tick), checks it, and stores it in your project. From then on every invoice carries a single-use pay-by-card link — on the PDF and in the email — and when the client pays, the next /follow-up records it without you doing anything. The money goes straight to your Stripe balance; nothing sits in between, and clients who prefer a bank transfer still have the details on the invoice. Invoices that go past their due date show up in /follow-up too, with a friendly reminder drafted for you to send.
Monthly fees: hosting, maintenance, care plans
Ask for it in plain English — "charge Acme £40 a month for hosting" — or run /recurring {business name} {amount}/month. It confirms what the fee covers, the amount and the period, then creates the arrangement in your Stripe account and drafts the client an email with a link. The client opens it once, enters a card, and from then on Stripe charges it every month (or year) on its own, retries a failed card itself, and can email them a receipt each time. If a client would rather not leave a card, pick the other mode and Stripe emails them an invoice at the start of each period instead. Either way every payment lands in your ledger, the client's renewal date is tracked, and /follow-up tells you when a payment arrives, fails, or the client cancels. "What's recurring right now?" lists every arrangement and its next charge date; "cancel Acme's monthly fee" ends one.
Stripe's own fees apply to what you collect through it; there is no fee from Klaudius on any of this.
Reconfiguration
Changing your settings
Most of the time you don't need a wizard at all — just tell your agent what you want changed and it edits the right file for you:
Change my pricing to $899.
That covers nearly everything: pricing, outreach tone, which channels you use, which host you deploy to, a credential you've rotated. If your agent needs a new key or token to finish the job, it'll just ask you for it.
If you'd rather go through every setting in one pass, there's a full wizard — and this is one of the few things you run yourself rather than ask your agent for, because it's interactive and needs a real terminal to type into. From inside your project folder:
npx klaudius@latest configureIt walks you through every wizard step again with your existing answers pre-filled, so you can change anything (pricing, sender identity, outreach channels, API keys, etc.) and skip past anything you want to leave alone. The new values are written back to .env.
Reference
Where your credentials live
Every credential the wizard collects — for your outreach providers, CRM, hosting, data sources, and any other service you wire in — is written to your project's local .env file and stays there. None of these credentials are ever sent to Klaudius's servers. The pipeline uses them directly against each provider from your machine.
If you ever rotate a credential externally (regenerate an app password, issue a new token, etc.), just tell your agent what changed and hand it the new value — it'll get it updated. Or run npx klaudius@latest configure yourself to walk through the wizard again.
The Klaudius app
The Klaudius app
Klaudius also comes as a desktop app — the same pipeline, with a visual home: a dashboard of your whole operation, an inbox of businesses waiting on a reply, your full client pipeline, a lead finder, and a voice mode you can just talk to. Everything the app does runs through the same files and sessions as the terminal, so you can mix and match freely — start a run in the app, pick the conversation up in your terminal, or the other way round.
Download it from klaudius.dev/download (Mac or Windows). If you set Klaudius up in the terminal, point the app at the project folder you already have — there's nothing to redo. It keeps itself up to date.
Maintenance
Updating to the latest version
Open your agent in the project and ask:
Update Klaudius.
It pulls the latest core skills, scripts, and template files, applies everything that can be applied safely, and then walks you through anything that needs a decision from you. Update is conservative by design:
- Files you haven't touched are updated cleanly in place. Update keeps a copy of every file it replaces or deletes under
.klaudius/backup/(as<name>.bak). - Files we've stopped shipping are removed just as cleanly — unless you'd edited your copy, in which case it's your call whether to keep it (untracked from then on) or drop it.
- Files you've edited become conflicts — Klaudius writes a report at
.klaudius/conflicts.mdand stages the canonical incoming versions under.klaudius/incoming/. The report includes a summary of exactly what we changed since your version, so when your edits don't overlap ours the merge is mechanical. Ask your agent to “resolve the conflicts” afterwards — it walks through each one and applies your choice (keep yours, take ours, or merge). Any choice that overwrites or deletes your version saves it first under.klaudius/backup/, so a mis-chosen resolution is recoverable. - Files you've deleted (say you removed a skill you don't use) are never silently reinstalled — update flags them as conflicts too, and you choose: restore the file, or keep it deleted. “Keep deleted” is remembered permanently, so later updates never ask again.
- Files you've created (your own skills, your own scripts, any work under
clients/) are invisible to update — they're not tracked, so they're never touched. - Local config (
.env, plus your agent's MCP config —.mcp.json+.claude/settings.jsonfor Claude Code installs,.codex/config.tomlfor Codex installs) is never overwritten — those belong to your install, not the template. Settings introduced by a new version are appended to your.envwith their defaults, so nothing you've set gets touched and nothing is left undefined. - Your
.gitignoreis merged rather than replaced — every line you've added survives, and any new patterns Klaudius needs are appended underneath.
Reference
Command reference
Two of these you run yourself. They open an interactive wizard, so they need a real terminal to type into — your agent can't drive them on your behalf:
npx klaudius@latest init my-agency # Scaffold a fresh project
npx klaudius@latest configure # Re-run the setup wizard on an existing oneThe rest you never need to type. Just ask your agent in plain English — it knows these and runs them for you, then reads the results back:
npx klaudius@latest update # "Update Klaudius"
npx klaudius@latest doctor # "Check my install is healthy"
npx klaudius@latest install # "Finish setting up" / "my install is broken"
npx klaudius@latest preflight # "Does this machine have what Klaudius needs?"Run any of them from inside your project directory (except init and preflight, which don't need one).
Looking for more depth? operator-guide.html ships inside every Klaudius project and covers the deeper operational topics — the near-zero-cost scaling playbook, the follow-up and warm-leads data model, and what to do when a client replies.