llmterm
A minimal terminal client for OpenAI-compatible LLM servers.
llmterm is a small Python command-line application for interacting with
local or self-hosted LLM servers that expose an OpenAI-compatible API.
Features
- Interactive endpoint selection
- Automatic model discovery
- Interactive model selection
- Asynchronous streaming responses
- Conversation history
- Optional custom system prompt
- Optional Markdown conversation logging
.envsupport for API keys- Small, modular implementation
Project structure
llmterm/
├── pyproject.toml
├── README.md
├── .gitignore
└── src/
└── llmterm/
├── __init__.py
├── endpoint.py
├── main.py
└── utils.py
src/ contains only package source code. Runtime-generated files are not
stored inside the Python package.
Markdown output location
When Markdown saving is enabled, responses are stored in:
~/.llmterm/
└── markdown-outputs/
├── model-name-08-15-2026.md
└── another-model-08-15-2026.md
This location is independent of the directory from which llmterm is run.
Keeping generated data outside the package is important for a distributable Python package because installed package directories should not be assumed to be writable.
Installation
Using uv
Install llmterm-prasannaba as a standalone CLI tool:
uv tool install llmterm-prasannaba
Run:
llmterm
Using pip
You can also install llmterm-prasannaba using pip:
python -m pip install llmterm-prasannaba
Run:
llmterm
Development
Clone the repository and enter the project directory:
git clone https://github.com/prasannaba/llmterm.git
cd llmterm
Install the development environment and dependencies:
uv sync
Run the application:
uv run llmterm
Optional API key
Create a .env file in the project directory when Unsloth Studio requires
an API key:
UNSLOTH_STUDIO_API_KEY=your-key
Configured endpoints
| Endpoint | Base URL |
|---|---|
| Llama.cpp | http://localhost:8080/v1 |
| Google-Litert-LM | http://localhost:9379/v1 |
| UnSloth-Studio | http://127.0.0.1:8888/v1 |
| LM-Studio | http://127.0.0.1:1234/v1 |
| Ollama | http://localhost:11434/v1 |
The corresponding server must be running and expose an OpenAI-compatible API.
Architecture
Terminal
│
▼
llmterm
│
▼
OpenAI Python client
│
▼
OpenAI-compatible /v1 endpoint
│
▼
Local/self-hosted LLM
endpoint.py
Owns the asynchronous OpenAI-compatible client, model discovery, chat completion calls, and client cleanup.
main.py
Handles endpoint selection, model selection, conversation history, streaming, and API errors.
utils.py
Handles configuration, system prompts, response cleanup, and Markdown persistence.
The project intentionally avoids a large agent framework or abstraction layer.
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 llmterm_prasannaba-0.1.2.tar.gz.
File metadata
- Download URL: llmterm_prasannaba-0.1.2.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fa95a46e82b1b7bd885f81ed381834acede559ec8742ad76021be35aa28928d
|
|
| MD5 |
166067f46620f6033ef64e7a77c82259
|
|
| BLAKE2b-256 |
9b430f9bdcd7d1f8a48f47b7effe7f8c4f85f4e91c1524014bd7e883a15d5caa
|
File details
Details for the file llmterm_prasannaba-0.1.2-py3-none-any.whl.
File metadata
- Download URL: llmterm_prasannaba-0.1.2-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.12.4 {"installer":{"name":"uv","version":"0.12.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f90a76b84f1b31b98465b1ce331aad3ccedec8162a74dd5a38da5df15b591e91
|
|
| MD5 |
8919da05dc2a3d2f0c6882194a531647
|
|
| BLAKE2b-256 |
f6f700c4eb0c9174cadd47423a9dfe7ace96c18fd86b73272185ba8850b56a3c
|