Visor
The Visor (at /client/visor) is Foreshock's long-form instrument. Where the Manual Spectrometer scores one specimen that fits in a single context window, the Visor takes a whole document — a report, a transcript, a manuscript — splits it, scores every piece, and folds the results back into one reading on the same 0–100 scale.
What it's for
The embedder collapses a specimen into one vector and refuses anything past its context window. That is the right shape for a chat message or a draft reply, and the wrong shape for anything book-length. The Visor is the long-form answer: the document is chunked, each chunk is scored on its own, and the per-sensor results are aggregated into a single headline reading — plus a trend line showing where in the text the signal actually lives.
Use it for the readings a single score can't give you:
- Reviewing a long document before it ships — a policy draft, an incident report, a chapter — where the question is not "what is the tone" but "where does the tone turn".
- Reading a transcript — a long meeting, an interview, a moderation thread — to find the passage that matters without reading all of it.
- Tracking a build across length — tension creeping up over chapters, an argument souring three-quarters of the way through.
A document that fits in one chunk is not an error; it comes back with mode: oneshot and is identical to what the Manual Spectrometer would have returned. One-shot is just the one-chunk case of the same contract.
Loading a document
Open the document dock (the Document button), then paste or upload. Uploads accept .txt, .md, and .pdf:
- Text and markdown are read in the browser, up to 6 MB.
- PDFs (up to 25 MB) are sent to Foreshock's extractor and come back as clean markdown, dropped into the textarea. Review it before analyzing — extraction from a PDF is never perfect, and headers, footers, and column artifacts are worth a glance first. The text you see is exactly the text that gets scored.
Press Analyze document (or ⌘/Ctrl+Enter). One setting changes the reading:
Trend memory sets the integrator's half-life — how many tokens of text it takes for the running level to forget half of what came before.
- Reactive (512 tokens) — tracks recent chunks hard; good for finding turns.
- Balanced (4,096 tokens, the default) — follows a trend without being yanked by any single chunk.
- Smooth (16,384 tokens) — the document's overall disposition, largely indifferent to local spikes.
Peaks are not affected by this setting. Only the level is.
What a chunk costs
Each chunk spends one request from your allotment, not each document. That is the truthful embed cost — a 40-chunk report really is 40 embeds. The whole batch is charged up front so a rate-limited job never half-spends, and if the scorer fails mid-run the entire charge is refunded ("nothing was spent").
Chunks are split on paragraph and then sentence boundaries, packed to roughly 6,500 characters (≈1,600 tokens), with a one-sentence overlap so a signal straddling a cut survives whole in at least one chunk. A sentence too long to fit on its own is hard-split on word boundaries. If the scorer rejects a chunk as oversized anyway — the character estimate is a heuristic, and the scorer has the final say — that chunk is re-split smaller and retried rather than dropped.
Long documents are genuinely slow. After ten seconds the status line turns into a countdown of how much longer the browser will wait, with a [stop] link. Stopping keeps nothing.
Reading the result
Aggregated Spectrum gives each sensor two numbers, deliberately:
- Level (the bar) — the integrator: a length-weighted leaky average across the chunk sequence, in document order. This is the headline.
- Peak (the tick) — the strongest single chunk, with a link that jumps to where it sits. A level alone would average away one alarming passage in an otherwise calm document; the peak is there so it can't.
Signal Over Document Position plots each chunk's score against its character offset — the trend line. The chips above it toggle which sensors are drawn; it opens with the six strongest and offers the significant sensors plus any shunt peaks.
The dashboard panels below are the same charts the Manual Spectrometer draws, built from each sensor's peak-chunk row. That is a deliberate choice: every point is a real, coherent (similarity, distance, dot product) triple from an actual chunk, so the scatter stays geometrically honest instead of plotting averaged coordinates that no chunk ever occupied.
See How Aldous scores language for what the sensors measure and what the Kneedle does — here it runs over the aggregated levels to mark which sensors are signal.
Shunts in long-form
Shunt behaviour differs from every other scoring surface, and this is the part worth knowing:
- Only
long-form-fireshunts appear here. Give a discourage shunt thelong-form-fireaction in the Shunt Studio and it fires only in the Visor — excluded from the Manual Spectrometer, from collectors, and from the GitHub head. Yourminimize,receipt,log_only, andhighlightshunts do not show up in a Visor reading. - Intrinsic shunts are dropped entirely. They are tuned against single-specimen sample bounds, which don't hold once scores are aggregated across a document; in long-form they read as noise, so the panel is removed rather than shown misleadingly.
The split exists because a shunt tuned for a 40-chunk document and one tuned for a single chat line want different sensitivities. long-form-fire is a scope, not a disposition — see Shunts & Latent Concept Erasure.
Receipts
Every analysis gets a UUID permalink at /client/visor/<uuid> that anyone holding the link can open — the same idea as a payment receipt link. The receipt never shows the document: only its SHA-256 fingerprint, its length, its chunk count, and the resulting numbers.
Receipts store the aggregated floats only — no trajectory and no per-chunk geometry — so a permalink opens on the Aggregated Spectrum and does not carry the trend line or the dashboard panels. Those exist only in the browser session that ran the analysis. Export or screenshot before you close the tab if you need them.
The document itself is scored and discarded. No chunk text is ever stored.
Live Experience
The second tab is streaming analysis: the same sensors and shunts, integrated in real time as text arrives rather than after a document is complete. Targeted for on or before August 15, 2026. The Visor is built as a sibling of the Spectrum Analyzer rather than a mode of it precisely so this has somewhere to land.
Next
The Visor is browser-only today — there is no long-form endpoint in the API reference, which covers the single-shot POST /api/v1/score path. For shunts that fire here, start in the Shunt Studio.