A Torah study chavruta that lives in your terminal.
Not a chatbot with a Jewish theme. A study partner configured by one file of prose about you — which sources every claim by name, transliterates before it translates, and hands you the disagreement instead of smoothing it over.
Sefaria · Hebcal · any OpenAI-compatible model
Why it's different · Install · The profile · Commands · Siddur scans
╭─ kimi-k3 · neuralwatt ──────────────────────────────── 12 day streak ─╮
│ › what does the Rambam mean by love of God │
╰─ /help · /study · /page N ───────────────────────────── learning ─╯
Ask a general assistant a question about halacha and you get a confident paragraph with no name attached to it, smoothing four centuries of argument into one reasonable-sounding answer. That is the opposite of how the material works.
A Jew is also rarely inside exactly one tradition. Someone can be Sephardic by family and Chabad by community, Ashkenazi by birth and Modern Orthodox by choice, or raised in none of them and reading their way in. Those strands genuinely disagree, and a teacher standing inside a single community cannot comfortably hold that tension.
RabbAI is built to hold it. Where the traditions you named read a text differently, you get each reading and what is at stake in the disagreement — not a synthesis, and not a vote.
It will not recite liturgy from memory. Vowels and wording differ between nusachim, and a plausible reconstruction is the one mistake you cannot catch. It searches and quotes Sefaria instead.
It will not infer anything about you. Not your gender from your name, not your observance from your community. If you did not say, it asks, and until then it says "they".
It will not invent your questions. The file that drives learning mode ships empty. If you have not said what you are here for, it teaches the text on its own terms rather than reaching for a connection to a question nobody asked.
| Works a text properly | /study loads this week's parsha. Learning mode states what the verse says, explains the language, connects it to one of your anchor questions, gives each tradition's reading, and closes with one thing to think about. One verse done well is a session. |
| Reads real sources | Searches and quotes Sefaria rather than reciting from memory |
| Knows the siddur | /look shema → page 42 of Tehillat Hashem. With scans of your own copy, /page 42 shows it the page. |
| Keeps the day | /shabbat for candle lighting and havdalah where you live, /today for the daily cycles, /floor and /streak for the minimum that counts |
| Remembers | Every conversation stored locally, plus an observer that reads your own transcripts and keeps notes on where you actually are — which feed back into how you are taught |
There is also a web UI, rabbi --serve, on http://127.0.0.1:5555.
You need Python 3.11 or newer and an API key (below).
pip install git+https://github.com/macmenes/rabbai
rabbi setup
rabbiOr with uv, which keeps it out of your system Python:
uv tool install git+https://github.com/macmenes/rabbai
rabbi setupNo git on the machine? There is nothing to install for that either:
pip install https://github.com/macmenes/rabbai/archive/refs/heads/main.tar.gzThe command is
rabbi, notrabbai— you install the program and then talk to the teacher. (rabbaiworks too, if the pun is more trouble than it's worth at 5am.)
rabbi setup takes two minutes, asks nothing you cannot change later, and
every question can be skipped with Enter.
RabbAI talks to NeuralWatt by default, an
OpenAI-compatible API priced by the energy a request actually costs. Sign up,
make a key, and paste it into rabbi setup.
It uses three model tiers, all configurable in ~/.rabbai/.env:
| tier | default | for |
|---|---|---|
| deep | kimi-k3 |
theology, working through a text |
| ops | kimi-k3-fast |
quizzes, reminders, the observer |
| vision | kimi-k3-fast |
reading scanned siddur pages |
Any OpenAI-compatible endpoint works — point NEURALWATT_BASE_URL elsewhere
and name that provider's models. It needs a model with tool calling; vision is
optional.
Everything the teacher knows about you is five Markdown files in
~/.rabbai/profile, read fresh at the start of every question:
| file | what it holds |
|---|---|
student.md |
who you are, your pronouns, your traditions, your Hebrew |
questions.md |
the two-to-five questions you are actually in this for |
curriculum.md |
what is in rotation, and what your daily floor is |
siddur.md |
which prayer book is on your table |
observed.md |
written by the observer, from your own transcripts |
rabbi setup writes the first four from what you tell it. Then edit them by
hand — they are prose, not settings, and this is the single highest-leverage
thing you can do. Write the way you would brief a tutor who has never met you.
Two files carry most of the weight. student.md shapes every answer;
questions.md decides what a text gets tied to. Both are plain Markdown, and
neither will ever contain a word you did not put there.
/study |
load this week's parsha and start learning it |
/text Deuteronomy 11:26 |
print a passage with Rashi |
/ref <ref> |
set the text under study |
/mode learning|chat|recap|quiz|davening |
switch how it answers |
/look shema |
find a prayer and open its page |
/page 42 |
send siddur page 42 (needs scans — see below) |
/siddur <prayer> |
print a prayer's text |
/shabbat /today /quote |
candle lighting, the learning calendar, a line of Torah |
/floor /streak |
log the daily minimum, see the run |
/new /resume /history /stats |
conversations, and what they cost |
Editing keys in the input box are the ones you expect: arrows and word motion,
Home/End, ctrl-a/e/k/u/w/y, Up/Down for history, Alt-Enter for a second line,
and paste. Long questions wrap inside the box, which grows to hold them.
/page and /look can show the model a photograph of the page you are looking
at, which is how you get an answer about the words in front of you rather than
about a different edition. Held against a page, a vision model will give you the
printed nikkud, the English rubrics, and where to bow.
No scans ship with this program, and none ever will. The Siddur Tehillat Hashem is in copyright, and so is every other siddur worth photographing. If you photograph a copy you own, lay it out as one folder per printed page:
my-siddur/
page-0022/
he.png # the Hebrew page
en.png # the facing English page
and point at it:
echo 'RABBAI_SIDDUR_PAGES=/path/to/my-siddur' >> ~/.rabbai/.envWithout scans, /page 22 still works: it tells the teacher where in the siddur
you are, and it finds and quotes that text from Sefaria instead. The page index
built into /look covers Tehillat Hashem (Nusach Ari, Kehot 2002) and was
transcribed from that edition's own table of contents.
Everything the program writes is under ~/.rabbai, and nothing is written
next to the code:
~/.rabbai/
.env your key and settings (mode 600)
profile/ who you are
rabbai.db every conversation
training.jsonl the same, as JSONL, if you ever want to fine-tune on it
siddur/ the siddur corpus, fetched from Sefaria
cache/ Shabbat times and calendar
Move it with RABBAI_HOME. Nothing leaves your machine except the requests to
your model provider, Sefaria and Hebcal.
All optional; all live in ~/.rabbai/.env or the real environment, which wins.
NEURALWATT_API_KEY |
your key |
NEURALWATT_BASE_URL |
any OpenAI-compatible endpoint |
RABBAI_MODEL_DEEP / _OPS / RABBAI_VISION_MODEL |
the three tiers |
RABBAI_MAX_TOKENS_DEEP / _OPS / _VISION |
budgets; reasoning eats these before the first answer token, so do not set them low |
RABBAI_THINKING |
line (default), off, or full |
RABBAI_GEONAMEID / RABBAI_TZ |
where you are, for Shabbat times |
RABBAI_SIDDUR_PAGES |
your page scans |
RABBAI_VAULT |
an Obsidian vault to mirror study notes into |
RABBAI_HOME |
where all of the above lives |
RABBAI_BIDI |
force right-to-left reordering on/off; only needed if your terminal handles Hebrew badly |
NO_COLOR |
no colour |
rabbi --check verifies the key, the models, Sefaria and Hebcal, and prints
where everything is.
git clone https://github.com/macmenes/rabbai
cd rabbai
python3 -m venv .venv && .venv/bin/pip install -e '.[dev]'
.venv/bin/python -m pytestA .env in the checkout is read before the installed one, so working on the
code does not touch your own study. The suite is offline and does not need a
key.
The launch banner is a pixel grid in rabbai/art.py — edit the grid, not the
renderer, and docs/banner.png is drawn from those same cells so the two
cannot drift apart.
It is not a rabbi, and it will be wrong. It is a model, it can invent a citation that sounds exactly like a real one, and the more confident it sounds the more you should go and look. Every claim comes with a name attached precisely so that you can check it. For anything that matters — halacha, a decision, a life — ask a person.
MIT. See LICENSE.