Architecture
LiveThe 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.
- 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. - 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 - 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 - Linux kernelkernel
Owns the interface and the TCP stack. Unmodified.
no module · no patch · no capability beyond bind()
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.
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_rangeCanonical 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 booksmacOS: 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
| Layer | Component | Status |
|---|---|---|
| Corpus | KJV 1611 text (original spelling), per-verse SHA-256, Merkle root, JSONL export | Live |
| Corpus | Geneva Bible 1599 verse text as a second source | Live |
| Corpus | Geneva marginal notes and chapter arguments | Specification · not yet live |
| Corpus | Hebrew (OSHB) and Greek (SBLGNT) with morphology | Live |
| Fabric | 127 quartet grammar and hosted resolver | Live |
| Fabric | harnessd loopback daemon | Live |
| Harness | Tool manifest, TypeScript client, MCP stdio server | Live |
| Coordination | Agent registry, WebSocket rooms, webhooks, consensus | Specification · not yet live |
| Coordination | GraphQL and gRPC surfaces | Specification · not yet live |
| Distribution | IPFS pinning and dVPN mirrors | Specification · not yet live |