Ed — AI Bible Translation Reasoning
Ed (עֵד, witness) is an AI-assisted Bible translation reasoning platform. It uses the Textus Receptus (TSR) Greek text, the Masoretic Hebrew tradition, and the family stack (Mahalath, Tirzah, Milcah, Hoglah) to translate under configurable principles — reconstructing the principles behind the King James Version, not copying KJV wording.
The Bible is a self-defining, self-referencing whole: any term is interpreted in light of every other canonical occurrence.
See docs/vision.md and
docs/translation-principle-semantic-layers.md.
ed --help
ed policies
ed policies --format json --out policies.json
ed target-languages
ed target-languages --format json --out target-languages.json
ed manifest --out ed-manifest.json
ed build-bundle fixtures/john-1-1.json --policy evidence-based --out bundle.json
ed build-bundle fixtures/john-1-1.json --policy evidence-based --format markdown --out bundle.md
ed build-debate-prompt bundle.json --target-language en --out prompt.txt
ed build-bundle fixtures/genesis-1-1-cantillation.json --policy masoretic-traditional --out hebrew-bundle.json
ed decide bundle.json --target-language en --mock --out decision.json
ed decide bundle.json --target-language en --mock --prior-decision decision.json --out revised-decision.json
ed decide hebrew-bundle.json --target-language en --mock --out hebrew-decision.json
ed decide bundle.json --target-language es --mock --out decision-es.json
ed explain decision.json
ed explain decision.json --out decision.md
ed evaluate-decision decision.json fixtures/evaluations/john-1-1-en.json
ed evaluate-decision hebrew-decision.json fixtures/evaluations/genesis-1-1-en-cantillation.json
ed run-evaluation-suite fixtures/evaluation-suite.json --mock --out suite-report.json
ed explain-suite suite-report.json --out suite-report.md
ed run-evaluation-suite fixtures/evaluation-suite.json --mock --format markdown --out suite-report.md
ed run-evaluation-suite fixtures/evaluation-suite.json --mock --case-id genesis-1-1-en-cantillation --work-dir suite-artifacts
# optional trace output (overwrites by default; --trace-append to accumulate):
ed decide bundle.json --target-language en --mock --trace-out trace.jsonl
ed explain-trace trace.jsonl --out trace.md
# optional local Ollama adapter:
ollama create ed-dictalm-q8-final -f ops/ollama/ed-dictalm-q8-final.Modelfile
ed decide bundle.json --target-language en --ollama-model ed-dictalm-q8-final --prompt-out prompt.txt --out decision.json
# optional Milcah specialist pressure-test adapter:
ed build-milcah-request bundle.json --target-language en --out milcah-request.json
# ...or seed the request from an existing decision instead of a fresh mock:
ed build-milcah-request bundle.json --base-decision decision.json --out milcah-request.json
ed decide bundle.json --target-language en --milcah --out decision-milcah.json
# optional thinking review packet:
ed decide bundle.json --target-language en --ollama-model hf.co/dicta-il/DictaLM-3.0-24B-Thinking-GGUF:Q8_0 --ollama-think --capture-thinking --out decision.json
ed review-thinking decision.json --out thinking-review.md
Use --capture-thinking with an Ollama thinking model only when the raw
reasoning trace should be stored in the decision metadata for later
documentation/review. By default Ed records that thinking was present without
persisting the trace. Local Ollama decisions request JSON-mode output by
default; use --no-ollama-json-mode only for models that fail under constrained
formatting. If a thinking model returns private reasoning but no final
rendering, Ed fails the debate and records diagnostic stop/length metadata in
the trace without storing raw thinking text.
Live Ollama output is only credited with the witnesses the model actually cites
(validated against the bundle); if it cites none, Ed records a review note
rather than implying grounding. If it cites an id that is not in the bundle,
Ed names the invented ids in a review note rather than dropping them quietly —
a fabricated citation is evidence the rendering needs more scrutiny, not less.
Repeated citations of one witness are counted once. Structured debate JSON can be long, so
--ollama-num-predict defaults to 1024; a generation that stops at the length
limit is flagged with a review note (raise --ollama-num-predict and re-run).
Rule templates & web UI
The built-in policies are the seeded set; you can also author your own
translation-rule templates — a policy plus optional tone, custom_guidance,
and a term_glossary (fixed renderings for salient lexemes) — and translate
under them. Templates are stored as JSON under ~/.ed/templates and are usable
anywhere a policy id is, including --policy.
ed templates save my-rule.json # validate + store a rule template
ed templates list
ed build-bundle fixtures/john-1-1.json --policy my-rule --out bundle.json
ed build-bundle fixtures/john-1-1.json --policy ./my-rule.json --out bundle.json # or a file
An interactive UI is available with the web extra:
pip install 'ed[web]'
ed serve # http://127.0.0.1:8799
Author/edit a rule template (fork a built-in or start blank), paste or upload an evidence fixture (source unit + witnesses), pick a target language, and translate — the decision (rendering, reasoning, unresolved questions, cited witnesses) renders live. Save the template to reuse it from the CLI.
Family stack
| Sibling | Role in Ed |
|---|---|
| Mahalath | ontology, semantic precision |
| Tirzah | memory, retrieval, concordance |
| Milcah | multi-LLM debate, argument evaluation |
| Hoglah | LLM execution queue |
| Galeed | process trace |
| Keturah | capability manifest |
Sense layer (design)
Design work for a Hebrew/Greek sense layer — so that what a source word means
comes from codified, debated, corpus-derived evidence rather than a model's
memory — is recorded in ADR-006 – ADR-014 of
docs/architecture-decisions.md. Headlines:
Mahalath owns the source-language sense inventory and Ed owns rendering; one
sense per lexeme by default, with splits as justified exceptions; no English
lexicon — English is purely a rendering under policy; reference lexica are
witnesses Ed may visibly disagree with; and terms with no English equivalent get
a consistent multi-word rendering or a debated composite coinage plus a
reader-facing dictionary entry.
The working paper behind those decisions — options not taken, the licensing
research, and the build order — is
docs/lexicon-options.md. Nothing here is built
yet.
Review
A point-in-time functional + code review of 0.2.0 is in
docs/review-2026-08-11.md. All eight findings
were actioned in 0.2.1 — see the remediation section at the end of that
document.
Develop
pip install -e ".[dev]"
pytest
Install .[keturah] or the sibling Keturah checkout when validating the full
capability-manifest integration. Ed can run its standalone fixture workflow
without Keturah installed.
Install .[milcah] or the sibling Milcah checkout to run ed decide --milcah;
the default development/test install keeps that integration optional.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ed_witness-0.2.2.tar.gz.
File metadata
- Download URL: ed_witness-0.2.2.tar.gz
- Upload date:
- Size: 88.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a70b70f99c71d5ba7469323863de5c6f4f8551e745863dfd7c5934f17cffcc4
|
|
| MD5 |
6e3ceb3ceee0a3c014885b7315ca6632
|
|
| BLAKE2b-256 |
ad9c6ba53d7e9a56ab1b20f5c2411a88d1a02a9faf63c2f0e12346df4c2bac7e
|
File details
Details for the file ed_witness-0.2.2-py3-none-any.whl.
File metadata
- Download URL: ed_witness-0.2.2-py3-none-any.whl
- Upload date:
- Size: 75.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a2398966f7fff9c7810cee460bbad2e390d82c90004677f91a97168072455f1
|
|
| MD5 |
c8d2a32bada9efebdb2ed8f07b78fe23
|
|
| BLAKE2b-256 |
ac5ac2a989f93192e0d3d0bd61236d8bc31bc498e6c2f2be3a4332e0af52ce3f
|