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
Metadata
Release files for ed-witness 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ed_witness-0.2.2.tar.gz | 88.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ed_witness-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 163.8 kB
Release files / ed_witness-0.2.2.tar.gz
| Download URL | ed_witness-0.2.2.tar.gz |
|---|---|
| Size | 88.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6a70b70f99c71d5ba7469323863de5c6f4f8551e745863dfd7c5934f17cffcc4
|
|
BLAKE2b-256 checksum How to use checksums |
ad9c6ba53d7e9a56ab1b20f5c2411a88d1a02a9faf63c2f0e12346df4c2bac7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / ed_witness-0.2.2-py3-none-any.whl
| Download URL | ed_witness-0.2.2-py3-none-any.whl |
|---|---|
| Size | 75.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4a2398966f7fff9c7810cee460bbad2e390d82c90004677f91a97168072455f1
|
|
BLAKE2b-256 checksum How to use checksums |
ac5ac2a989f93192e0d3d0bd61236d8bc31bc498e6c2f2be3a4332e0af52ce3f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|