Skip to main content
  █   ▄  ▄  ▄▄▄▄▄   ▄▄
  █   █  █  █ █ █  █▄▄█
  █▄  ▀▄▄▀  █ █ █  ▀▄▄▄

A small, beautiful terminal chat client for Claude, GPT and Gemini.

lume — rhymes with room. Not "loo-may", not "lum". It's the old word for light.

Python License Dependencies PyPI


Replies stream in as rendered Markdown — syntax-highlighted code, aligned tables, nested lists — under a calm animated status line. Conversations live on your own disk, in plain JSONL you can read, grep and delete. Five themes. One binary-free install.

Zero dependencies. Pure standard library: nothing to resolve, nothing to audit, nothing to break on upgrade day. Python 3.10 or newer.

  █   ▄  ▄  ▄▄▄▄▄   ▄▄
  █   █  █  █ █ █  █▄▄█
  █▄  ▀▄▄▀  █ █ █  ▀▄▄▄
  Opus 5

  /help for commands · Ctrl-C to stop a reply · Ctrl-D to leave
❯ explain a bloom filter in two sentences

lume
  A Bloom filter is a compact bit array plus k hash functions: to add an item you
  set the k bits it hashes to, and to test one you check those same bits.

  It answers "definitely not present" or "probably present" — false positives are
  possible, false negatives are not.

  ─ opus-5 · 1.4s · 412 in / 96 out · $0.004
❯

Install

pip install lume-ai          # provides the `lume` command

Or run it straight from a checkout — there is nothing to build:

git clone https://github.com/bobby-tablez/lume-ai && cd lume-ai
./lume-cli                   # or: python3 -m lume

Providers

lume speaks to three vendors through one interface. Set the key for whichever you want; anything you have a key for shows up in /models.

Provider Environment variable Aliases Models
Anthropic ANTHROPIC_API_KEY opus sonnet haiku fable Opus 5, Opus 4.x, Sonnet 5, Sonnet 4.6, Haiku 4.5, Fable 5
OpenAI OPENAI_API_KEY gpt mini nano GPT‑5.1, GPT‑5, GPT‑5 mini/nano, GPT‑4.1, GPT‑4o mini
Google GEMINI_API_KEY gemini flash lite Gemini 3.1 Pro, 3.7 Flash, 2.5 Pro/Flash/Flash‑Lite

/models shows the live table with context windows and per‑million prices, and greys out any provider you have not set a key for.

export ANTHROPIC_API_KEY=...
lume                         # starts a session on the default model
lume --model sonnet          # or pick one

Switch mid-conversation with /model gpt-5.1, and pin the vendor when an alias is claimed by two of them: /model google:mini. Aliases resolve in provider order — Anthropic, then OpenAI, then Google. Any OpenAI-compatible endpoint — Groq, xAI, DeepSeek, Together, OpenRouter, Ollama, LM Studio — works by pointing OPENAI_BASE_URL at it.

Keys are read from the environment, used, and never written anywhere: not to the config file, not to a log, not into an error message, and never into a URL.

Use

lume                              # interactive
lume "explain this regex: ^\d{3}-\d{4}$"   # one-shot, then exit
git diff | lume "review this"     # stdin is folded into the message
lume --resume last                # pick up where you left off
lume --model haiku --no-thinking  # cheap and fast
lume --list                       # what have I got saved?

Commands

Session

Command
/new [title] Start a fresh conversation, optionally with a title.
/resume, /r [ref] Reopen a session by id, list number, or "last".
/list, /ls [query] List saved sessions, newest first; filter with a query.
/rename [ref] <title> Give a session a better title.
/delete, /rm <ref> Delete a session and its transcript for good.
/export [format] [path] Write the transcript out as markdown, json, or text.

Conversation

Command
/system [text] Show, set, or clear the system prompt.
/retry [note] Send the last message again, optionally with a nudge.
/undo [n] Drop the last exchange, or the last n, from the chat.
/edit [n] Reopen an earlier message in $EDITOR and send it again.
/copy, /y [n] Copy the last reply, or message n, to the clipboard.
/clear, /cls [history] Clear the screen; add history to also forget the conversation.
/usage, /tokens, /cost Show the tokens this session has used and what they cost.

Model

Command
/model, /m [name] Show the current model, or switch to another.
/models List every model with its context window and price.
/think [on|off] Turn extended thinking on or off.
/effort [level] How hard to think: low, medium, high, xhigh, or max.

Interface

Command
/theme [name] Show the current colour theme, or switch to another.
/keys Show the key bindings and the multi-line input rules.
/help, /h, /? [topic] Show this help, or the detail for one command.
/quit, /exit, /q Leave lume.

Anything that is not a command is sent to the model. To send a line that really does start with a slash, double it: //not a command.

Typing

Enter Send the message.
\ at end of line Continue on the next line; the backslash is dropped.
""" Open a block. A line ending in """ closes it and sends.
Alt+Enter Add a newline without sending. (needs GNU readline — not Windows, not libedit builds; \ and """ work everywhere)
paste A multi-line paste arrives whole, as one message — never one per line.
Tab Complete a command or its argument.
Walk back and forth through history.
Ctrl-C Throw the line away — or stop a reply that is already running.
Ctrl-D Exit. (Ctrl-Z Enter on Windows)

Configuration

~/.config/lume/config.json, written by /model, /theme and friends, or edited by hand. Every field also has an environment override:

Variable
LUME_MODEL Default model.
LUME_THEME aurora, solar, ember, mono, plain, auto.
LUME_EFFORT low, medium, high, xhigh, max.
LUME_SYSTEM Default system prompt.
LUME_MAX_TOKENS Reply cap.
LUME_HOME Where sessions and history live.
LUME_NO_MOTION Turn animation off.
NO_COLOR Turn colour off (respected everywhere).

Privacy

Conversations never leave your machine except as a request to the model provider you chose. Sessions are append-only JSONL under $LUME_HOME (or ~/.local/share/lume), directories 0700, files 0600. The prompt's history file is capped, 0600, and refuses to record any line that looks like a credential — paste a key at the prompt by accident and it is not written to disk.

Development

python3 -m unittest discover -s tests -v      # 1,400+ tests, no network, no fixtures

Every module is independently testable and each provider client takes an injected transport, so the suite never opens a socket and never needs an API key. SPEC.md is the interface contract the modules were built against.

Adding a provider is three things: a ModelSpec per model, a client exposing stream() and close() that yields lume.api.StreamEvent, and a line in lume/providers/__init__.py.

The name

lume — one syllable, rhymes with room. From lumen: light. It's what a terminal does when it's doing this well.

License

MIT © 2026 bobby-tablez

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lume_ai-0.1.1.tar.gz (352.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lume_ai-0.1.1-py3-none-any.whl (185.6 kB view details)

Uploaded Python 3

File details

Details for the file lume_ai-0.1.1.tar.gz.

File metadata

  • Download URL: lume_ai-0.1.1.tar.gz
  • Upload date:
  • Size: 352.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for lume_ai-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3786a05b6947bf5aa6ac0c777299f91ece9dba20c8131becf0ecf377125b3f1c
MD5 ade4030a1cc716903dbf1b2af268fc01
BLAKE2b-256 c5263edc046a50f3862b078b94d271ecb3fa1f4a4ccc031c8f33f3c92e7b096d

See more details on using hashes here.

Provenance

The following attestation bundles were made for lume_ai-0.1.1.tar.gz:

Publisher: publish.yml on bobby-tablez/lume-ai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lume_ai-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: lume_ai-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 185.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for lume_ai-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f2567f7cea52aee80a67e9774e28f5b0b0e3ba6d4254e5ee668f14f8a70757f9
MD5 e84411b4af29c065258e3fde5c9d3a3d
BLAKE2b-256 2c2dfa0188bfa160432aac7e25eca63fbcb684463f54e0dba119b1f733deec72

See more details on using hashes here.

Provenance

The following attestation bundles were made for lume_ai-0.1.1-py3-none-any.whl:

Publisher: publish.yml on bobby-tablez/lume-ai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page