Axes

It takes one sentence apart.

Axes is Zyrn’s own assistant module, running on Claude Opus 5. It holds an entire system in mind before it moves anything inside it, takes an ambiguous brief apart along the axes a real problem actually has, works every one of them at once, and returns the artefact rather than a description of the artefact. The site you are reading is one of its outputs.

IN SERVICE MODEL CLAUDE OPUS 5 BUILT BY ZYRN DEPLOYED TO ONE FIRM
01

The name

An axis is two things at once: a direction you can move along, and a direction you can measure along. Every problem that arrives at a firm arrives stated on exactly one of them — the one the person who noticed it happened to be standing on.

Almost nothing is actually wrong on that axis alone. A page that looks correct can be untouchable. A process everyone follows can have no owner. A number that is going up can be going up for the reason that will end it. A brief is a report from one direction. What is actually wrong usually sits in another.

So the module is named for the plural. It opens every direction a claim could live on, works them together, and only then decides what the problem was. That is the whole method, and it is the same method the firm sells — which is why this one is ours and Duk is the one we give away.

AXES — THE PLURAL

One origin. Several directions. All of them open at the same time.

02

One brief, taken apart

A brief arrives pointed at one thing. Axes does not start work on it. It starts by deciding which axes a claim like that could possibly live on, opens every one of them at once, and only then decides what the question really was. A brief is a report from one direction. What is actually wrong usually sits in another.

ONE BRIEF → SIX AXES, IN PARALLEL → ONE ANSWER
01

Surface

what is presented
  1. The structure as published
  2. The process as written down
  3. What the deck promises
  4. Where the account contradicts itself
  5. What was inherited, never revisited
THE VERSION EVERYONE AGREES ON
02

State

what is true right now
  1. Who actually decides
  2. Which step is really the queue
  3. What gets escalated, and to whom
  4. Which rule is quietly not followed
  5. What the exceptions have become
STATED AND ACTUAL ARE TWO DIFFERENT OBJECTS
03

Access

what a person can reach
  1. What one role can do unaided
  2. Where a request has to wait
  3. Which approvals nobody can see
  4. What a new joiner cannot find
  5. Where the same work is done twice
THE AXIS NOBODY ASKS FOR
04

Motion

what changes over time
  1. Throughput, stage by stage
  2. Where the load is seasonal
  3. What has drifted since the last change
  4. Which decision keeps being remade
  5. What the trend line hides
A SNAPSHOT CANNOT SHOW A DIRECTION
05

Proof

what has been shown
  1. Which claim has a number behind it
  2. Which number was counted
  3. What was assumed, then repeated
  4. Where the sample was too small
  5. What has not been measured again
CONFIDENCE IS NOT EVIDENCE
06

Risk

what has not been examined
  1. The dependency on one person
  2. The step with no fallback
  3. The real cost of the cheap option
  4. What a change here would break
  5. What is being deferred, and for how long
THE QUESTION THAT WAS NEVER PUT
WHY ALL SIX, EVERY TIME

The answer is rarely on the axis the brief was pointed at.

A request names the symptom that was noticed, which is a fact about who noticed it rather than about where the problem lives. Opening one axis confirms the framing; opening all six tests it. The two that cost the most to work — access and proof — are reliably the two nobody thinks to commission.

WHAT COMES BACK

The change itself, not a description of it.

  • 01 stated cause
  • 06 axes opened
  • 00 recommendations to interpret

Written at the level of the rule rather than the instance, so it closes the class of problem and not the one example of it — then measured again against the axis that found it, because a change that has not been re-measured is a hypothesis.

03

What it actually does

01

Holds the whole system

Every page, every stylesheet, every module, the doctrine file, and the recorded reason a rule exists — loaded before anything is changed. Most bad edits are locally correct.

CONSTRAINT — IT DOES NOT REASON ABOUT FILES IT HAS NOT OPENED
02

Decomposes the brief

Splits the request along surface, state, access, motion, proof and risk, and opens all six rather than the one it was pointed at. The axis nobody thinks to commission is reliably the one that pays.

CONSTRAINT — THE REPORTED SYMPTOM IS NOT THE SCOPE
03

Produces the artefact

Writes into the actual repository, in the style of the code already around it, with the comment that says why. Not a plan for the work, and not a draft to be re-typed by someone else.

CONSTRAINT — OUTPUT IS A COMMIT, NOT A DOCUMENT
04

Runs what it wrote

Drives a real browser, dispatches real touch events, steps every scroll instrument end to end, samples the console and the network on the deployed build rather than the local one.

CONSTRAINT — AN UNMEASURED CHANGE IS A HYPOTHESIS
05

Refuses the number

If a figure cannot be counted it does not go on the page. Every statistic on this site is read out of a repository or off a running simulation, and anything unmeasurable prints an em dash instead.

CONSTRAINT — NO PLAUSIBLE CONSTANTS
06

Keeps the doctrine

The firm’s rules live in a file the module reads first and is bound by — one accent per viewport, two typefaces, the shear belongs to the logo. Taste, written down until it is enforceable.

CONSTRAINT — THE HOUSE STYLE IS AN INPUT, NOT A SUGGESTION
04

The evidence is the page you are on

There is no template under this site, no page builder, no component library and no stock. The landing page began as a design document; everything after it — ten more pages, eight scroll instruments, the particle field, the case study, and the verification suite that keeps them honest — was written by the module and reviewed by a person before it shipped.

The two rows worth reading twice are the last two. The field moving behind this text is ninety thousand points integrated on the GPU every frame, and there is no asset behind it: no video, no image sequence, nothing to download. And the whole site builds with nothing — it is files, served.

Every number in this column was counted from the repository at the moment this page was written, not asserted. That is the rule the whole page is built on.

The client case — Lumina
COUNTED — ZYRN.ORG Pages, live11 Source linesHTML · CSS · JS · GLSL13,903 Scroll instruments08 Typefaces02 Particles, per frame90,000 Assets behind the field00 Runtime dependenciesthree · lenis02 Build steps00
05

How it is kept honest

  1. 01

    Hit-test the viewport

    Sample the screen on a grid and count how many points reach the page rather than an overlay. A screenshot proves layout and nothing else. Something can be laid out perfectly and be completely unreachable, and no capture ever taken of it will say so.

    0% INTERCEPTED · 5 PAGES
  2. 02

    Tap with real touch events

    Drive the phone menu with dispatched touches rather than a synthetic click. A synthetic click fires straight at the node and skips hit testing, so it will cheerfully prove that a completely buried control works.

    OPEN / EXPAND / CLOSE
  3. 03

    Exercise every instrument

    Step every scroll track from 0 to 1 and collect what throws. A page can load perfectly clean and still throw on every frame once someone scrolls to it — that has happened here exactly once, and this check is why it cannot happen twice.

    09 TRACKS · 00 THROWN
  4. 04

    Measure dead scroll

    Sample an instrument at twenty-one progress values and report the longest run that changed nothing. That run is precisely what a reader experiences as “I am scrolling and nothing is happening”. One instrument here scored nine of twenty before it was retimed.

    LONGEST DEAD RUN · 01
  5. 05

    Measure every tap target

    Forty-four pixels minimum, on every interactive element, at phone width. The footer mark passed as a link and failed as a target at twenty-one pixels tall.

    MIN 45px
  6. 06

    Console and network, deployed

    Every page and every request, checked against the build that is actually live rather than the one on the machine that made it.

    11 PAGES · CLEAN

Every one of these exists because something got through first. They are not a quality process — they are scar tissue, and that is the only kind of check that reliably survives a deadline.

06

Built for one firm

Axes was built for Zyrn, against Zyrn’s own written doctrine, and it is not a product on a shelf. It is also not the same object as Duk — Duk is the open one, built to work on a client’s operating core and given away. Axes is the one we run in order to build things.

What transfers is the shape rather than the module: something that holds your whole system at once, is bound by rules you wrote down, produces into your own repository, and is not permitted to claim anything it has not measured. Most of the work in getting there is not the model — it is deciding what your firm actually knows, and writing it somewhere a machine can be held to.

If you have a body of work where holding all of it is the hard part, that is the conversation. It runs through the fourth line.