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.

Anatomy of an address

Turn any dial. Each is one octet of an IPv4 address: the first is fixed at 127 so the kernel routes it to loopback; the other three are the book, chapter and verse in canonical order, bounded by the text itself. The same four bytes are a socket destination for the local daemon and a path on the hosted resolver, and they commit to one hash.

127

loopback

1

Genesis

1

chapter

1

verse

127.1.1.1

Turn a dial, or — one of 31,102, none of them ours to pick.

resolving…

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: npx harness-talk alias jn 3 switches on a whole chapter (or jn 3:16, or just jn), 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