Commands
stratless mirror a free read of you and your AI, changes nothing (--share for a card)
stratless init keep your history, and build your profile
stratless profile see the model of you, free and instant
stratless update read what is new, rebuild and load it
stratless stop turn it off, and unload the profile
stratless status its own state, and what it has cost
mirror
$ stratless mirror
You and your AI, measured
you and your assistant 5,911 messages · 49 active days
a median day 123 messages
span 2026-06-09 → 2026-07-27 · longest streak 49 days
how you write median 17 words · 8% four words or fewer · 42% questions
what you keep typing "go" 20× · "continue" 18× · "sure" 11×
screenshots sent 205
course corrections 2.49 / 100 messages
tool declines 51
friction days 44 of 49 active days
not counted against you 63 permission stops · 33 system blocks
busiest repo stratless · across 6 repos · 50 branches
tools it ran for you 27,655 calls · Bash 38% · Edit 26%
profile captures 100% of your moments
The measured portrait of you, across every conversation, read straight from your live history. It is pure arithmetic: no model call, no tokens, no setup, and it changes nothing on your machine, so you can run it before you have ever run init. Bare npx stratless (no verb) runs it too. course corrections is how often you cut in to redirect your assistant, per hundred messages you send. what you keep typing is your most-repeated exact messages, quoted back; it exists for your terminal only and never appears on the share card. not counted against you lists the interrupts that are not your friction (permission stops and system blocks), shown so nothing is silently dropped from the count. profile captures appears once you have built a profile, and shows how much of you the current build’s patterns cover.
Add --share for a clean, screenshot-ready card of the universal numbers, with any repo name, project name, and anything you ever typed left out, so it is safe to forward.
init
npx stratless init
The one interactive moment. It keeps your history, shows you a free read of yourself, quotes the full build honestly, and takes a single yes or no.
- It stops the reaper. Claude Code deletes your transcripts after 30 days, per file, so your history rots from the back even in a project you open every day.
initsetscleanupPeriodDaysto 3650 in~/.claude/settings.jsonand copies every transcript it can still reach into~/.stratless/archive/, out of the cleanup’s way. Whatever has already aged out is gone. This is the only part you cannot do later. - It turns the after-session refresh on. From here, when a session ends, stratless reads what is new in the background and keeps your profile current. That is on the moment
initfinishes;stopis the one switch that turns it off. - It reads you for free. Before anything costs a cent,
initprints what it can already see from the history it just froze, computed with no model call: how much you talk to your assistant, how you write, how often you course-correct it. - It quotes the build, then asks once. It shows an honest estimate (moments, dollars, minutes, all on your own
claude) and itemizes the one-time engine download (~3MB runtime + ~34MB model), then asksBuild your profile now? [y/N]. The default is no. Say yes and it fetches the engine in the foreground and builds now; say no and nothing is spent, nothing is downloaded, the free read stays, and the refresh keeps it current. The paid build never runs without that explicit yes on a real terminal.
To undo: set cleanupPeriodDays back to 30, run stratless stop, and delete ~/.stratless/archive/. That is everything it touched.
profile
stratless profile
profile is free to look at. It prints the last built profile instantly, at zero spend, under a header that carries the build’s own date and counts. It never builds and never loads: it shows you the current model of you, and it ends by saying honestly whether that profile is loaded into your assistant right now. Building and loading are update’s job.
There is nothing to configure and no flag to pass. If you have not built a profile yet, profile points you at stratless update.
update
stratless update read what is new, rebuild and load the profile now
stratless update --weekly auto-rebuild at most once a week (the default)
stratless update --daily auto-rebuild at most once a day
Reads every session that is new since last time, places each new moment against the patterns already found in your own history, and rebuilds the profile. Placing is free and offline — it runs on the local model, so no matter how much you talked, sorting it costs nothing. Rewriting the file afterwards is one short call to your own assistant, a few cents; a refresh with nothing new spends nothing at all. Run by hand in a terminal, it rebuilds now. Run by the after-session refresh, it rebuilds on a cadence: at most once a week by default, or once a day with --daily. update itself always rebuilds immediately, whatever the cadence is set to; the flags only change how often the background refresh acts on its own.
The moments collect every session for free. The cadence governs only how often stratless phones your assistant to score and rewrite, so a busy week costs the same as a quiet one.
The work runs in one background worker that update wakes and watches. Your terminal is a window onto it, not the engine. On a normal run you notice nothing: the same progress lines, the same closing summary. The difference is at the edges. Press Ctrl-C or close the terminal and the display detaches, but the work finishes anyway, and the profile lands a few minutes later. There is no daemon; the worker does its bounded job and exits. Sleep pauses it for free, and nothing already scored is ever lost.
Every run that spends closes with its receipt: tokens, the API-equivalent cost, and which models actually ran. status keeps the most recent one, so even the silent after-session refreshes stay accounted for.
A rebuild is a derivation, not an impression. The profile is written only from what your history supports, and if the writer invents a number that is not in the evidence, or returns anything that does not read like a profile, the build is refused and your old profile stays loaded. Nothing malformed ever loads.
Two knobs, both optional: STRATLESS_SYNTH_EVERY changes how many new moments trigger a background rebuild (25 by default); STRATLESS_SYNTH_MODEL picks the model that writes the profile.
stop
stratless stop
The off switch. If a rebuild is running right now, it is stopped within seconds: spending halts immediately, and nothing paid-for is wasted, since every moment already scored is banked and restarting later re-reads at most one small chunk. Then the after-session refresh is removed and the profile is unloaded from your CLAUDE.md. Your HUMAN.md file is left as is; delete it yourself if you want it gone. Being able to shut it up completely, mid-run, is half of why you can trust it.
status
$ stratless status
stratless status
after-session refresh on
auto-rebuild weekly · set with `stratless update --daily|--weekly`
profile loaded yes ~/.claude/HUMAN.md
recent builds
2026-07-23 12:28 UTC 142 conv · 4,980 moments · 23 categories (latest)
2026-07-22 09:14 UTC 138 conv · 4,760 moments · 23 categories
spend
total $0.28 · 49k tokens · 3 calls on your own claude
by stage naming $0.19 · writing $0.09
stratless’s own state: whether the refresh is on, how often it auto-rebuilds, whether your profile is actually loaded — and which build it is, by the file’s own # built stamp; a loaded profile that is older than the latest build gets flagged with the one command that fixes it — when it last built, and what it has spent of your borrowed claude. Tokens come first, because a subscription spends quota, not dollars; the dollar figure is the API-equivalent, labelled as exactly that and split by stage. The meter also confesses its blind spots: if a call ever runs on a fallback model, or a cache file on disk is damaged, status says so rather than showing a confident number. Every line is read locally; plain status is fully offline and spends nothing.
Add --check and it makes exactly one announced request to the npm registry to tell you whether a newer version exists: you ask, it checks, on screen. Beyond your own claude, the only other thing that ever touches the network is the one-time engine download at init (runtime + model, itemized), which you are asked about before it happens. See Privacy.
Global flags
stratless --version print the installed version (short: -v)
stratless --help the command list (also: -h, help)
Output through a pipe, or with NO_COLOR set, carries no color codes, so stratless status | grep loaded gives you clean text. An unknown flag or a stray argument stops with a loud error and a did-you-mean, never a silent misfire.