say the big thing first, then the one next action, then say less
Two axes on one switch, for any AI agent.
A drop, a splash, then one point — the answer arrives already landed.
Substance, security and exact errors: byte-for-byte untouched.
On Point is a skill/plugin for Claude Code, Codex,
Gemini CLI, Cursor, Windsurf, Cline, Copilot, Kiro, Qoder, OpenCode, OpenClaw, Devin,
and anything that reads AGENTS.md. Install once. The agent opens with the point
instead of the mechanism, puts the one thing you can do next directly under it, and
drops every word in between — while code, commands and error strings stay
byte-for-byte exact.
Everything can be abstract. Einstein could state relativity in one sentence; a person who truly knows a thing explains it simply.
The name is the mark. A drop lands, a splash throws it in every direction, and it all resolves to a single point — which is the only frame you wanted.
Token counts are real, measured with o200k_base.
A real exchange, translated from the Chinese — "I think I have heatstroke, what do I do?" All three personas at work in one answer: name the thing in one line, lead with the action, cut everything else.
| Normal agent — 408 tokens | On Point — 155 tokens |
|---|---|
|
Heatstroke — first work out how severe it is. Start by checking for danger signs: 🚨 Call an ambulance immediately if:
This is heat stroke. Mortality is high. While waiting, pour cold water over them and fan them. If it is only dizziness, weakness, nausea, heavy sweating, muscle cramps (heat exhaustion / mild) do these in order, immediately:
Watch for
How are you feeling now? Any of the danger signs above, or are you somewhere cool already? |
Cool them down before giving fluids — the danger is core temperature, not thirst. Do now:
Call an ambulance immediately, do not tough these out:
Take their temperature first. If you can, measure it now. |
−62%, and the shape is the point rather than the saving. The left column buries the one thing that decides everything — cool first, fluids second — under a triage decision the reader has to make before they can act. The right column states it, then hands over four numbered actions, then the danger signs, then one thing to do now.
Every danger sign survives verbatim: that list is a security measure by the doctrine's never-compress rule, so it is not eligible for cutting. What is deferred is the follow-up — the 30-minute recovery window, the two-day rule, the dark-urine/rhabdomyolysis warning. That is drill-down the reader pulls when the emergency is over, and calling it free would be dishonest: it is a deliberate deferral, chosen because a reader in the first minute of this needs four steps they will actually finish over ten they will abandon.
Claude Code
/plugin marketplace add HuskyDanny/OnPoint
/plugin install on-point@on-point
That is it. There is also an optional output style if you want the same behaviour
stated as a role rather than a rulebook — /config → Output style → On Point.
It replaces whichever style you have selected, so installing never picks it for you.
Every other agent — clone and let the installer detect what your project uses:
git clone https://github.com/HuskyDanny/OnPoint
cd your-project && /path/to/on-point/install.shIt looks for .cursor/, .windsurf/, .clinerules/, .kiro/, .qoder/,
.opencode/, .openclaw/, .codex/, .claude/, .github/, AGENTS.md,
CLAUDE.md, GEMINI.md and installs only for what's there. --all for everything,
--dry-run to look first, --uninstall to undo. If the Claude Code plugin is already
installed it skips the Claude surfaces rather than shipping you the same rules twice.
Your own instruction files are never overwritten. AGENTS.md, CLAUDE.md,
GEMINI.md and .github/copilot-instructions.md usually already hold your rules, so
the block is spliced between markers — re-running replaces only our block, and
--uninstall restores the file byte-for-byte.
Or drop in one file by hand
| agent | file |
|---|---|
| Codex, Amp, Jules, anything AGENTS.md | AGENTS.md |
| Claude Code | CLAUDE.md, or skills/on-point/SKILL.md |
| Gemini CLI | GEMINI.md + gemini-extension.json |
| Cursor | .cursor/rules/on-point.mdc |
| Windsurf | .windsurf/rules/on-point.md |
| Cline | .clinerules/on-point.md |
| GitHub Copilot | .github/copilot-instructions.md |
| Kiro | .kiro/steering/on-point.md |
| Qoder | .qoder/rules/on-point.md |
| OpenCode | .opencode/command/on-point.md |
| OpenClaw | .openclaw/skills/on-point/SKILL.md |
| Devin | .devin-plugin/plugin.json |
Every one of those is generated from personas/*.md by ./build.sh. Edit the
personas, never the generated file; ./test.sh fails if any copy is stale.
| governs | behave like | body |
|---|---|---|
| the shape of any answer — its first line, then its next line | abstract first, then i-have-adhd | personas/01-essence-first.md |
| everything you say | caveman | personas/02-say-less.md |
Order is load-bearing: you cannot compress an idea you have not named, and you cannot name the right next action for a problem you have not stated simply. Altitude, then the move, then the words.
Three source personas, two bodies. The first body merges two of them because they answer the same question from opposite ends — abstract first names the idea, i-have-adhd names the move the idea implies — and each is weak exactly where the other is strong. Abstract first updates your mental model and then leaves you at the top of a hill with no path down; adhd hands you step 1 of 5 without ever telling you what you are climbing. Merged, the altitude line owns the opening and the action owns the line directly beneath it. Caveman then runs over both: it works word by word and never restructures an answer, which is why it composes rather than competes — it may shorten a numbered step, never delete it.
The upstream inversion is deliberate and worth naming: i-have-adhd puts the action on the first line. Here it moves to the second, because an action whose purpose you cannot state is how you end up efficiently doing the wrong thing.
personas/00-doctrine.md holds the never-compress list — substance, exact errors,
code, trust-boundary validation, data-loss handling, security, accessibility, anything
asked for in full. Compression that drops information isn't on point, it's wrong.
Install it, and the two axes are simply on — in every session, on every prompt, and again after a context compaction. There is nothing to switch, no level to pick, no state kept anywhere.
The rules themselves are three markdown files:
personas/00-doctrine.md what is never compressed
personas/01-essence-first.md the shape of an answer
personas/02-say-less.md the words inside it
File order is axis order. Rename to reorder, delete a file to turn that axis off.
That is the entire configuration surface, and ./build.sh pushes any edit back out to
all fifteen agent surfaces.
./build.sh # regenerate every agent surface from personas/
./test.sh # 44 invariants, all RED-verified
Axes emit, an absent personas/ degrades that axis instead of breaking a session, the
output style stays a role statement, every generated agent surface is byte-identical to
a fresh build, manifests and diagrams parse. Each
invariant was verified to actually fail when broken — a test that can't go red proves
nothing.
Intensity levels, slash-command level switching, a statusline, a mode-tracker state
file, an ON_POINT env var, an SDK injector. All exist upstream; all are knobs
nobody turns twice. Deleting a personas/*.md file is already the off switch.
say less from caveman by Julius Brussee
(MIT). The action half of essence first from
i-have-adhd by Ayoub Ghriss (MIT). The
abstract-first half is original. Reducing each plugin to its single injectable body is a
pattern borrowed from a private agent-runtime codebase, which did the same reduction to
inject both into a Claude Agent SDK worker. See
NOTICE for what changed and
LICENSES-THIRD-PARTY.md for the upstream license texts.