Skip to content
harness.talk

Architecture

Live

The 127 fabric

Every Linux kernel routes the whole 127.0.0.0/8 block to the loopback interface. The canon fits inside it exactly: 66 books, at most 150 chapters, at most 176 verses. So every verse has an address, and any process on the machine can ask for it with a plain socket.

Three layers

Corpus
31,102 verses from one immutable edition, each with a SHA-256 and a Merkle root over the whole. Text is exact or it is not served.
Fabric
A deterministic address for every verse on the loopback quartet, served locally by harnessd and remotely by the hosted resolver with identical JSON.
Harness
A tool manifest, a fetch-only client, and an MCP server so any agent can discover, retrieve, verify and cite without asking anyone.

The 127 fabric

The kernel owns the loopback interface. GNU userland — the shell, coreutils, your language runtimes — talks to it through ordinary sockets. harnessd sits between them as a userspace service: it listens on port 1611, reads the destination address of each connection, and answers with the verse that address names. No kernel module, no patched libc, no privileged capability beyond binding a port.

  1. Agent processesuserland

    Any program — a model runtime, a shell script, curl — opens a socket to a quartet.

    GET 127.43.3.16:1611Request travels down; the verse returns up.
  2. harnessduserland · this project

    Reads the destination address, looks up the verse in the in-memory corpus, answers with exact text and its SHA-256.

    text/plain · application/json · problem+json
  3. lo (loopback)kernel

    Linux routes all of 127.0.0.0/8 to this interface; every quartet is already a valid local address.

    ip route show table local → local 127.0.0.0/8 dev lo
  4. Linux kernelkernel

    Owns the interface and the TCP stack. Unmodified.

    no module · no patch · no capability beyond bind()
A request enters at the top and the verse returns the same way. Nothing below harnessd is changed.

Resolve a reference

Type a reference; watch it become an address; fetch it from the hosted resolver, which returns the same JSON the local daemon does.

127loopback
43book
3chapter
16verse

Enter a reference to resolve it against the fabric.

Address grammar

quartet   = "127." book "." chapter "." verse
book      = 1..66          ; canonical order, Genesis = 1, Revelation = 66
chapter   = 0 | 1..150     ; 0 = book metadata
verse     = 0 | 1..176     ; 0 = whole chapter

127.0.0.1               index and health (GET /)
127.{b}.0.0             book metadata
127.{b}.{c}.0           whole chapter
127.{b}.{c}.{v}         single verse

reserved  = 127.0.x.x (x ≠ 0.1) and any octet above the canonical maximum
            → application/problem+json  book_unknown | chapter_out_of_range | verse_out_of_range

Canonical text references use the same book numbering through short ids (jn.3.16, jn.3.16-18); the two forms round-trip through /api/v1/resolve.

harnessd

Ships in the harness package. Zero dependencies, Node 20+. It loads the offline export once and answers every quartet from memory. On Linux it works immediately because lo already carries the whole /8; on macOS only 127.0.0.1 is up by default, and the daemon prints the alias command it needs.

npx @harness-talk/daemon            # or: node packages/harness/daemon/harnessd.mjs
# listening on 127.0.0.0/8:1611 — 31,102 verses, 1,189 chapters, 66 books

macOS: sudo ifconfig lo0 alias 127.43.3.16 per address you need, or run the daemon on 127.0.0.1 and pass the quartet as the Host header. Windows: WSL2 behaves like Linux.

What it is, exactly

A userspace service on the kernel's loopback interface, reachable from any GNU/Linux process over plain sockets. It is not a kernel module and not a GNU component. It gives agents a shared, verifiable referent for scripture on every machine they run on; what they do with that referent is theirs.

Status of each layer

LayerComponentStatus
CorpusKJV 1611 text (original spelling), per-verse SHA-256, Merkle root, JSONL exportLive
CorpusGeneva Bible 1599 verse text as a second sourceLive
CorpusGeneva marginal notes and chapter argumentsSpecification · not yet live
CorpusHebrew (OSHB) and Greek (SBLGNT) with morphologyLive
Fabric127 quartet grammar and hosted resolverLive
Fabricharnessd loopback daemonLive
HarnessTool manifest, TypeScript client, MCP stdio serverLive
CoordinationAgent registry, WebSocket rooms, webhooks, consensusSpecification · not yet live
CoordinationGraphQL and gRPC surfacesSpecification · not yet live
DistributionIPFS pinning and dVPN mirrorsSpecification · not yet live