mcp server
selah
A Bible for the terminal, built on OpenTUI like opencode, with an honest reading tracker: streaks, consistency heatmap, reading plans.
Set up
Runs on your computer. Pick your agent and operating system.
This project does not publish an install method we can turn into a config. Follow the README instead.
README
synced Oct 25, 2026Selah
A Bible for the terminal, built on the same TUI stack as opencode (OpenTUI and Solid on Bun), with a reading tracker that tells you honestly whether you are consistent.
selah.hallelx2.com: the site, with a recording of a real session (MP4).
What it does
- Reads well. A centred reading column, a verse cursor, KJV's supplied words in italics, four highlight colours, bookmarks, notes, and parallel translations side by side.
- Finds anything.
ctrl+popens a command palette that also understands references (jn 3:16,1 cor 13:4-7,song of songs 2)./searches every verse with ranked, highlighted results, phrases in quotes, and filters such asin:psalms,in:otandin:nt. - Tracks reading you actually did. A chapter counts once you reach its end and have spent
real time on it (30% of the time it takes to read at 250 words a minute, capped at 30 seconds),
or when you press
m. Time away from the keyboard for more than three minutes is not counted. - Shows whether you are consistent. Current and longest streak, a daily goal in chapters or minutes, consistency over 7, 30 and 365 days, a 53-week heatmap, a 30-day chart, which weekdays you read on, and progress through every book.
- Keeps you on a plan. Bible in a Year, in Two Years, New Testament in 90 Days, the Gospels in 30 Days, Psalms and Proverbs in a Month. Portions are balanced by word count, and Selah tells you how far ahead or behind you are and when you will finish at your current pace.
- Matches your rice. opencode's 33 themes with live preview, plus
system, which uses your terminal's own palette. Nerd Font icons when your font has them, simple symbols when it does not. - Moves like light, not like a slot machine. A beam crosses the logo, each chapter surfaces
onto the page, a hairline meter fills with real reading time and flashes when the chapter
counts, and streak milestones bloom in rings of light, once each. Nothing animates while idle,
and
motion: "reduced"turns it all off. - Reads like a book. Drop-cap chapter numbers, a prose layout with superscript verse numbers
(
w), and a focus mode (z) that dims everything but the verse you are on. - Works offline. Translations download once into a local SQLite database with full-text search.
Study desk
Press tab in the reader to open the study desk beside the text. Its tabs follow the verse
you are on:
- Notes: your note on the verse and a chapter journal, both autosaved.
- Commentary: Matthew Henry's Complete Commentary, opened at the verse
(
selah install commentary, about 14 MB once). - Words: the Hebrew or Greek behind the verse, word by word (
selah install concordance, about 108 MB once). See below. - Ask: questions answered by your own Claude Code or Codex. See below.
Words: Hebrew, Greek and a concordance
The Words tab lists each original word of the verse. For each one you get:
- its transliteration and an English gloss
- its Strong's number
- its grammar in plain English:
V-AAI-3Sreads "verb · aorist active indicative · 3rd person singular", and Hebrew is read morpheme by morpheme
Press enter on a word for a study. The study shows:
- its lexicon entry
- how often it occurs, and in which books
- every verse that uses it, in your translation
enter opens a verse in the reader and keeps the study open. f narrows the list to the book
you are reading, and esc goes back.
- Hebrew is drawn right to left. Each word is reversed for terminals that lay text out left
to right, which is nearly all of them; set
"hebrew": "logical"if yours applies bidi itself. Cantillation marks are dropped, and vowel points stay. - The Greek amalgamates the editions. Words that the text behind your translation does not have are dimmed. The KJV and YLT follow the Textus Receptus, and the others follow Nestle-Aland, so John 5:4 is in the KJV's text and not in the BSB's.
- Search with a Strong's number (
/, thenG26orH2617) to list a word's verses, and open its study. - Coverage: every verse of the KJV, numbered as the KJV numbers them. Psalm titles appear with verse 1.
Scenes: Doré's engravings
Gustave Doré's 100 Bible engravings (1866), each mapped to the passage it shows. When the
chapter you are reading has one, the header says so (✦), and i opens it full screen.
- Ink: the engraving surfaces like a print, row by row from the top, over 1.2s.
- Drift: it then moves in a slow Ken Burns zoom and pan, with its title, the passage and the gallery's caption below.
- Navigation:
←and→walk the gallery,enteropens the passage,glists all 100, andesccloses. The gallery is also in the command palette.
selah install scenes downloads the plates once, about 17 MB, from a copy on selah.hallelx2.com,
falling back to Project Gutenberg for any plate the copy cannot give. Each plate is checked
against its pinned SHA-256 whichever source it came from, and a download that fails for a moment
is retried. SELAH_SCENES_SOURCE points it at your own copy instead.
The image is drawn as the terminal allows: kitty graphics in kitty and ghostty, sixel in foot, and half-blocks everywhere else, including tmux. With reduced motion the engraving appears at once and holds still.
Ask
Ask questions about what you are reading and get answers grounded in the text, with every reference openable. Ask uses your own Claude Code or Codex, with your existing login. Selah installs nothing and holds no API keys.
- The agent reads passages, searches the Bible and Matthew Henry, reads the Hebrew and Greek
and traces a word through the concordance, and sees your notes, through Selah's tools. None of your coding setup is loaded: no Claude Code settings or CLAUDE.md,
and no Codex skills or other MCP servers.
- Claude: Bash, file reads and edits are disallowed. It may use Selah's tools and the web.
- Codex: runs in its read-only sandbox (it can write nothing) with its shell, browser, image and plugin tools turned off. That sandbox does not stop reads, so do not count on Codex being unable to see your files.
- It can suggest a note; nothing is saved unless you press
ctrl+k.ctrl+ssaves an answer as a note on the current verse, andctrl+ropens the references it cites. - Each chapter keeps its own conversation, and follow-ups continue the same session.
Set agent in config.json to claude or codex to choose; auto uses the first one found.
Selah's tools in your own agent
selah mcp serves the same tools over MCP, so Claude Code, Codex or any MCP client can read
passages, search, consult Henry, study the original words and see what you are studying:
claude mcp add selah -- selah mcp
codex mcp add selah -- selah mcp
Install
curl -fsSL https://selah.hallelx2.com/install | sh
On Windows, in PowerShell:
irm https://selah.hallelx2.com/install.ps1 | iex
The installer picks the build for your system and checks its SHA-256 against the release:
- Builds: Linux x64 or arm64 (glibc or musl), macOS Apple silicon or Intel, and Windows x64 or ARM64.
- Where it goes:
selahlands in~/.local/bin. On Windows,selah.exelands in%LOCALAPPDATA%\Programs\selah, which is added to your PATH. - Options: set
SELAH_INSTALL_DIRto install elsewhere, orSELAH_VERSION=v0.3.1to pin a release.
Binaries are also on the releases page. Windows Terminal shows Selah best.
The first launch downloads the King James Version and the Berean Standard Bible (about 8 MB each). After that, Selah needs no network.
From source
Requires Bun 1.4 or later.
git clone https://github.com/hallelx2/selah && cd selah
bun install
bun src/index.tsx # run it
bun run build # or compile dist/selah for this machine
Use
selah # open the app
selah john 3:16 # open at a passage
selah ps 23 -p # print a passage and exit
selah search "living water" # print search results
selah stats # streak, today, consistency
selah install ASV YLT NHEB # more translations
selah install commentary # Matthew Henry
selah install concordance # Hebrew and Greek, Strong's numbers, lexicons
selah install scenes # Doré's 100 engravings
Keys
| Reading | Study | Tracking | |||
|---|---|---|---|---|---|
j k | next / previous verse | h | highlight | m | mark chapter read |
n p | next / previous chapter | b B | bookmark / list | s | progress |
space | page down | a | note on verse | ctrl+o | today's reading |
16 enter | jump to verse 16 | v y | select / copy | ctrl+p | commands |
o | go to book | t T | translation / parallel | ? | all keys |
z | focus mode | w | prose / verse layout | ||
/ | search | ctrl+b | sidebar (j/k, enter, esc) | q | quit |
i | Doré's engraving |
Your streak in waybar
selah stats --json prints waybar's custom-module format (text, tooltip, class), where
class is met, pending or none:
"custom/selah": {
"exec": "selah stats --json",
"return-type": "json",
"interval": 300,
"on-click": "foot -e selah"
}
Translations
All are public domain, taken from scrollmapper/bible_databases (MIT) at a pinned commit.
| ID | Translation | Year |
|---|---|---|
| KJV | King James Version | 1769 |
| BSB | Berean Standard Bible | 2022 |
| ASV | American Standard Version | 1901 |
| YLT | Young's Literal Translation | 1898 |
| NHEB | New Heart English Bible | 2010 |
Files
On Windows, the texts, notes and study packs live in %LOCALAPPDATA%\selah\data, caches in
%LOCALAPPDATA%\selah\cache, and settings in %APPDATA%\selah\config.json. Elsewhere:
$XDG_DATA_HOME/selah/bible.db: the texts and their search index.$XDG_DATA_HOME/selah/study.db: study packs (Matthew Henry, the Hebrew and Greek words and lexicons). Rebuildable, never personal.$XDG_DATA_HOME/selah/scenes/: Doré's engravings, once installed.$XDG_DATA_HOME/selah/user.db: your reading sessions, reads, highlights, bookmarks and notes. It is separate from the texts, so adding or removing a translation never touches it.$XDG_CONFIG_HOME/selah/config.json: theme, mode, translation, daily goal,icons(nerd,unicodeornone),motion(fullorreduced),prose,agentandhebrew(visualorlogical). Safe to edit by hand.
SELAH_HOME puts all three under one directory. SELAH_NO_PALETTE=1 skips the terminal palette
query for terminals that mishandle it. SELAH_DEBUG_LOG=<file> writes errors to a file.
Development
bun test # data, tracker, stats, plans, themes and rendered UI frames
bun run typecheck
bun scripts/screenshots.tsx # regenerate docs/screenshots from real frames
bun scripts/gifs.tsx # record the GIFs frame by frame on a manual clock
bun scripts/dore-catalogue.ts --check # the Doré catalogue still matches the pinned gallery
bun scripts/build.ts --release cross-compiles every release target and writes SHA256SUMS;
it needs every platform's OpenTUI core installed first (bun install --os='*' --cpu='*').
The design rules every screen follows are in docs/DESIGN.md.
License
MIT. Themes in src/theme/assets are opencode's, used under its MIT license
(LICENSE.opencode). The Bible texts are in the public domain.
Matthew Henry's Commentary comes from lyteword/mhenry-complete (CC0). The Hebrew and Greek words, Strong's numbers and lexicons come from STEPBible-Data: TAHOT, TAGNT, TBESH and TBESG, by Tyndale House, Cambridge (STEPBible.org), under CC BY 4.0. Both are downloaded at a pinned commit and are not redistributed in this repository.
Doré's engravings (1866) and the gallery's captions come from
The Doré Bible Gallery, Project Gutenberg #8710, and are
in the public domain. scripts/dore-catalogue.ts builds the catalogue from the gallery; the
images are downloaded, not redistributed here.