stratless
August 14, 2026 · View on GitHub
stratless turns your logs into skills your AI actually gains.
Your coding assistant has no idea who it's talking to. stratless reads the conversations you've already had, measures what you do repeatedly, what went wrong, and what you keep having to ask for — then proposes skills from that evidence, each with the count that earned it, and installs them on one typed yes.
npx stratless
That's the free read — what your AI already knows about you, computed on your machine, changing
nothing. When you want to keep it, npx stratless init archives your history and builds the
evidence after asking once; stratless tune is the sitting that turns it into skills.
No account. No API key. No cloud. The reading and the pattern-finding happen on your own disk; the
only borrowed thing is your own assistant (claude or codex), which names what the maths found.
Nothing leaves your machine.
You need four things, and you probably have all of them: Claude Code or Codex installed and
signed in (the claude or codex command), Node 18+, macOS or Linux, and a few sessions of
history on this machine. Native Windows is not supported yet; run stratless inside WSL. Use both
assistants and each pair gets its own evidence, built only from the history you made together —
nothing measured in one tool is ever presented to the other.
What it builds
The evidence lives at ~/.stratless/HUMAN.<assistant>.md — a plain-text brief on how you actually
work, internal to stratless: the sitting reads it, nothing loads it into your assistant. Your
shorthand decoded, what to offer you before you ask, what to catch for you, how to talk to you.
Every line is observed from your own history with the real count behind it:
Who you are working with (stratless · read from your own history)
## In the moment
- "yes plan" · "can we plan" → wants a plan before code
- a new or multi-step task begins → pause and offer
a concise plan before implementing anything
## What to offer me before I ask
- offer to enter a planning step before touching any
implementation — and when a new or multi-step task begins,
pause and offer a concise plan before implementing
anything. (265× · slip 28×)
## What to catch for me
- catch anything left unverified, uncommitted, or
unconfirmed as done and check or lock it in before
continuing:
- remote or deployed state unverified (192×)
- uncommitted work needs a commit first (155×)
- completion claim needs double-check (126×)
## How to talk to me
- treat a bare "yes, run X" as full authorization; don't ask
for restatement — and when the coding is finished and a run
or test is next, check the scope with me before
proceeding. (205×, fading · slip 16×)
Not a rules sheet you wrote. A brief on a person, derived from your real history and nothing you
declared, and it sharpens as that history grows. From it, stratless tune proposes the skills the
evidence supports — and every proposed line must cite this file's measurements or it dies.
It also thins. A when-clause and its slip count disappear once the gap they mark closes. And the decode key can carry two lines measured from how your own questions land: your comprehension signature — how explanations must arrive for you, with the honest counts behind it — and, for the zones of your work you never enter at all, a line marking your silence there as chosen outsourcing: do the work, skip the teaching. Neither line ever names a topic or grades what you know, and each thins away as the failures it marks stop happening.
The commands
One note first: npx runs stratless without installing it, so after npx stratless init the bare
stratless won't be on your PATH. Either install it properly, npm install -g stratless, or keep
prefixing every command below with npx . Both work.
stratless mirror a free read of you and your AI, changes nothing (--share for a card)
stratless init keep your history, and build your record's evidence
stratless tune the sitting: measure, hear the proposal with receipts, one yes installs
stratless update read what is new, keep the evidence current
stratless stop turn it off, and remove everything installed
stratless status its own state, and what it has cost (--check: newer version?)
mirror is the run-it-now, change-nothing door: it reads your live history and shows the free read,
with no setup and no archive, so bare npx stratless (no verb) runs it too. stratless --version
(or -v) prints the installed version.
The complete option list is deliberately small:
stratless mirror --share print the screenshot-safe card (no repo or session names)
stratless update --daily let automatic rebuilds run at most daily; update now too
stratless update --weekly let automatic rebuilds run at most weekly; update now too
stratless update --rebuild clear the built map on a typed yes, then rebuild everything
stratless status --check check whether a newer npm version exists
stratless help show command help (-h and --help work too)
stratless --version print the installed version (-v works too)
Unknown commands and flags are refused. Colour turns itself off when output is piped, or when
NO_COLOR is set.
init is the one thing you can't do later. Claude Code deletes your transcripts after 30 days,
per file, so your history rots from the back even in a project you use every day. init stops that
and copies everything somewhere safe. (Codex has no such timer; init still keeps its own copy, and
it will ask Codex to approve the after-session refresh rather than turn it on behind your back.) Everything else reads from there. Saying yes to the full build
also fetches the local pattern-finding machinery, once (~3MB runtime + ~34MB model, itemized before
you answer); after that, every build runs offline. That is the only download door: the npm
package itself has zero dependencies, and nothing heavier arrives until you say yes.
How it works, there's no trick
No model of ours. No server. No training. No separate bill.
-
Read. Every session your assistant has is already on your disk, in
~/.claude/projectsor~/.codex/sessions. stratless walks each one into moments: what you typed, and what the assistant was doing. -
Cluster. A small open-weights model on your machine turns each moment into a fingerprint, and the recurring kinds of thing you do fall out as groups — arithmetic, a few minutes, free, and it reaches nothing. Derived, not pre-matched: there is no category list to sort you into, because a list we wrote would be our model of a generic person, not a reading of you. Then your own assistant is borrowed for the only judgments left: naming what the maths found, and wording your profile — the two small calls that are all it ever spends.
-
Count. Every count is plain arithmetic: how often, over what span, rising, fading, or
met, which means the asking faded because the assistant already does the thing, read from both sides of the conversation. The model names, the code counts, so no number in your profile is a guess. -
The sitting.
stratless tuneholds one sitting per pair: it measures that record five ways — rituals, lessons, rules, wins, arrivals — asks that pair's own assistant to propose skills from the evidence, and disposes of every claim by code: no citation, no skill; no verbatim quote, no quote; every count stamped from the receipts. You see the whole report, and one typed yes installs the skillpack through that tool's own skill door —~/.claude/skills/or~/.codex/skills/, same format, and nowhere else; styles ship as always-on skills, and stratless never writes your instructions files. The after-session refresh keeps the evidence current;stratless stopremoves everything installed, from every door.Codex keys hook approval by position. If you add another
SessionEndhook after stratless and later runstratless stop, removing stratless shifts that hook; stop warns that Codex will ask you to approve the later hook again rather than leaving the surprise for your next session.Before signalling a running refresh,
stopverifies that the PID really belongs to that worker. If it cannot prove that, it still removes the hooks and the tune, but it leaves the process alone, names the PID, and exits non-zero rather than claiming everything is off.
It spends your own plan's tokens, never a separate bill (stratless status shows the running
total). It reads all of your history, deduped and cached, so the first build is the one real cost
and every update after only pays for what is new — plus, while a profile is still young, a few
cents-sized map rebuilds as your history grows into it: announced in status, covered by the one
consent, and self-stopping as the map matures. If the assistant can't answer honestly, it writes
nothing: a confidently-wrong profile is the one failure that would end this, so silence always beats
a guess. Model-authored wording may contain no numerals at all; every quantitative receipt is added
by code, and a response that crosses that boundary is refused, and the previous evidence stands.
Supported assistants
stratless supports Claude Code and Codex today. Claude Code history is read from
~/.claude/projects and its generated skills are installed under ~/.claude/skills. Codex history
is read from ~/.codex/sessions and its skills go under ~/.codex/skills. Each assistant gets a
separate record built only from the conversations you had with that assistant.
The after-session refresh is installed through each tool's own hook mechanism. Codex asks you to
approve that hook; stratless does not bypass the prompt. Claude Code's expiring live transcripts are
why init archives first. Codex does not currently need that rescue, but stratless still keeps an
owned, deduplicated archive for consistent updates.
Honest limits
- Only Claude Code and Codex are supported. Other assistants are ignored.
- stratless can only learn from transcript history still present on this machine. Deleted, excluded, or never-recorded conversations cannot be recovered.
- The evidence is derived from observed conversations, so it can be incomplete or wrong. Read the receipts before accepting a tune; declining changes nothing.
- Skills can improve fit and consistency. They do not make the underlying model more intelligent or guarantee a correct result.
- This is a reading of one human-and-assistant pair, not a comparison, score, benchmark, or population claim.
Writing a skill by hand
You do not need stratless to make a skill. Create one folder in your assistant's skills directory
and put a SKILL.md inside it:
---
name: verify-before-handoff
description: Use when a coding task is complete and the result needs to be handed back.
---
Run the relevant checks, inspect the final diff, and state what remains unverified.
The description is the trigger the assistant sees up front; the body is loaded when the trigger
matches. Keep the trigger specific and the body actionable. A stratless tune uses the same ordinary
format—it only earns the content from repeated evidence and installs it for you after approval.
Privacy
Everything runs on your machine. Your conversations, the moments stratless derives, and your
profile never leave it, not for telemetry, not for "aggregate insight," not ever. There is no
server, no account, nothing to sign up for. Three things touch the network and the direction matters:
the local engine comes in once at init (with your consent — the runtime from
registry.npmjs.org and the model weights from huggingface.co, both pinned and checksummed, then
permanently offline), the version check comes in, and the only thing that goes out is the
borrowed call to your own assistant, on your own plan, the same place your code was already going.
The evidence is a plain text file, and every installed skill carries its receipts in the file itself. All of it is yours: read it, edit your copy, or delete it.
MIT. Free forever.