What fak Is Not — the Honest Boundary
TL;DR:
fakis not a serving engine. It does not compete with vLLM / SGLang / llama.cpp on raw tokens per second — it fronts them to make the agent loop cheaper and longer-running, governing the tool call — the agent boundary — on the same seam. None of its primitives is novel (a 0/29 prior-art audit says so); the contribution is the assembly. This page volunteers the limits first, because the limits are the honest part of the pitch.
Concept served: one static Go binary that is a boundary, not an engine (one of the popularization epic concepts).
Most projects sell you the ceiling. This page starts with the floor plan of what
fak deliberately does not do — because a tool that names its own limits is
easier to trust than one that doesn’t, and it pre-empts the “they’re overclaiming”
takedown before anyone has to write it.
1. It is not a faster serving engine — it is the gate in front of one
fak does not decode tokens faster than the engine underneath it. Run as a
gateway fronting SGLang, it trails raw SGLang 0.75× at peak — 1085.6 vs
1451.6 tok/s (Qwen3.6-27B, 64-concurrent) — the price of putting an adjudication
decision on the call path. That gateway/adjudication tax converges toward ~3% at
saturation. [WITNESSED]
That is not a bug to hide; it is the shape of the product. fak’s field is the
economics of the agent loop — a session that runs cheaper and longer because
fak owns the KV cache and fronts the engine — not raw throughput. It sits in
front of vLLM, SGLang, or llama.cpp and, on the same seam, adjudicates every tool
call — deny by structure, repair a malformed call, quarantine a poisoned result —
while the engine behind it does what engines are good at: emit tokens. If you need
raw tokens/sec, the engine is the answer. If you need the agent loop to run cheaper
and longer — with the tool call passing through a boundary the model cannot talk
past on the same checkpoint — that is the part fak adds.
The in-kernel model path exists, but it is a bit-exact correctness reference,
not a tuned server: no continuous batching, no paged attention, no multi-tenant
scheduler. For real serving, you run fak serve in front of vLLM / SGLang /
llama.cpp — not instead of them.
What fak does collapse is the operational surface of governing that
boundary. The usual governed-serving stack is four cooperating processes — a
reverse proxy, a policy layer, a result-quarantine service, an audit sidecar —
each its own deploy, port, and config. fak carries the same four
responsibilities as in-process stages of one static Go binary: you add flags, not
components.
That is the honest boundary of the drop-in claim: fak does not make your tokens
faster, but it does replace a multi-process governance stack with one process that
does the same job.
2. None of its primitives is novel — and that is the point
A 29-claim prior-art audit scored 0/29 novel
(CLAIMS.md, catalogued in the
innovations index). Default-deny capability gates,
KV-cache reuse, prefix caching, audit journals — every part is old and has a
literature.
The contribution is the assembly: one fused, fail-closed, witness-gated kernel where the tool call is promoted to an in-process syscall, co-resident with the KV cache. The parts are borrowed; the wiring — and the honesty ledger that keeps it honest — is the thing a competitor structurally cannot copy by copying a primitive. Framing the assembly (not a claimed invention) is the honest posture, and it is the more durable one.
3. The detector is not the guarantee — the floor is
fak ships a result-quarantine detector that flags suspicious tool output. It is
best-effort and ~100% evadable by design — it is explicitly not the
load-bearing defense. Any framing that sells the detector as the guarantee
overstates the product.
The load-bearing defense is the default-deny capability floor: an action that was never allow-listed cannot run, no matter what the model was talked into. The detector is a bonus on top of a floor that holds without it. Detectors are evadable; the floor is the cap lock. (Longer treatment: Why default-deny beats a classifier.)
4. It is not a Debezium-style database-replication CDC
fak’s change feeds are change-data-capture for the agent loop — the coherence bus, the hash-chained journal, and the drive-state stream are bounded, cursor-ordered changelogs a data engineer can consume with familiar tooling (the full dictionary is change data capture for agents). That framing is a lens, not a claim to be Debezium.
fak does not replicate a database. There is no relational schema, no
primary-key row image, no before/after tuple — a mutation carries its
invalidation Tags (which entities to evict), not a full row snapshot. It will
not stream your Postgres WAL into Kafka; it streams what an agent changed,
refuted, or committed so other agents can re-plan. The events map cleanly onto a
Debezium envelope (so an export is a thin mapper, not a rewrite), but the source
is agent-loop state, and the honest before is null. If you need database
replication, Debezium is the answer; fak captures a different changelog.
The numbers, fenced
When fak does quote a win, it quotes the witnessed one against the real
alternative, never the strawman:
- ~4.1× vs a tuned warm-cache baseline on a 50-turn × 5-agent run
(Qwen2.5-1.5B, Apple M3 Pro, commit
2bbda6f) is the headline that survives procurement. The 60.3× figure is only vs a naive re-send-everything loop nobody runs in production — it is never the standalone competitive number. [WITNESSED on one machine + a deterministic model.] - The cache-reuse win applies only to a self-hosted model whose KV cache
fakowns. Front a frontier API and you get the safety floor but none of the reuse savings — the provider owns prefix caching upstream. - The WebVoyager 8.8×–9.7× figure is a modeled prefill-work floor over the real 643-task set, not wall-clock. Labeled simulated where it appears. [SIMULATED]
The one line to keep
fak fronts an engine to make the agent loop cheaper and longer-running — and, on
the same seam, governs the tool call. It does not make your tokens faster; it makes
the loop cheaper and the tool call governed. The parts are old, the
detector is evadable, and the throughput tax is real — and saying so is the feature.
See also
- The tool call is a syscall — the keystone mental model.
- Why default-deny beats a classifier — why the floor, not the detector, is the guarantee.
- The addressable KV cache in 5 minutes — the reuse lever, fenced.
- Innovations index — the 0/29 prior-art audit in full.
- FAQ — including “is the in-kernel model engine ready to serve production traffic?”