PAR LLAMA is a TUI (Text UI) application designed for easy management and use of Ollama based LLMs. (It also works with most major cloud provided LLMs) The application was built with Textual and Rich and my PAR AI Core. It runs on all major OS's including but not limited to Windows, Windows WSL, Mac, and Linux.
Supports Dark and Light mode as well as custom themes.









scoop install pythonscoop install makeOllama now supports native model quantization through the create model interface. When creating a new model, you can specify a quantization level (e.g., q4_K_M, q5_K_M) to reduce model size and memory requirements.
Important: Native quantization only works with F16 or F32 base models. If you try to quantize an already-quantized model (like llama3.2:1b which is already Q4_0), you'll receive an error.
For quantizing custom models from HuggingFace that aren't available through Ollama:
docker pull ollama/quantize
If you don't have uv installed you can run the following:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install parllama
To upgrade an existing uv installation use the -U --force flags:
uv tool install parllama -U --force
uvx parllama
uv tool install git+https://github.com/paulrobello/parllama
To upgrade an existing installation use the --force flag:
uv tool install git+https://github.com/paulrobello/parllama -U --force
If you don't have pipx installed you can run the following:
pip install pipx
pipx ensurepath
pipx install parllama
To upgrade an existing pipx installation use the --force flag:
pipx install parllama --force
pipx install git+https://github.com/paulrobello/parllama
To upgrade an existing installation use the --force flag:
pipx install git+https://github.com/paulrobello/parllama --force
Clone the repo and run the setup make target. Note uv is required for this.
git clone https://github.com/paulrobello/parllama
cd parllama
make setup
usage: parllama [-h] [-v] [-d DATA_DIR] [-u OLLAMA_URL] [-t THEME_NAME] [-m {dark,light}]
[-s {local,site,chat,prompts,tools,create,options,logs}] [--use-last-tab-on-startup {0,1}]
[--load-local-models-on-startup {0,1}] [-p PS_POLL] [-a {0,1}]
[--restore-defaults] [--purge-cache] [--purge-chats] [--purge-prompts] [--no-save] [--no-chat-save]
PAR LLAMA -- Ollama TUI.
options:
-h, --help show this help message and exit
-v, --version Show version information.
-d DATA_DIR, --data-dir DATA_DIR
Data Directory. Defaults to ~/.local/share/parllama
-u OLLAMA_URL, --ollama-url OLLAMA_URL
URL of your Ollama instance. Defaults to http://localhost:11434
-t THEME_NAME, --theme-name THEME_NAME
Theme name. Defaults to par
-m {dark,light}, --theme-mode {dark,light}
Dark / Light mode. Defaults to dark
-s {local,site,chat,prompts,tools,create,options,logs}, --starting-tab {local,site,chat,prompts,tools,create,options,logs}
Starting tab. Defaults to local
--use-last-tab-on-startup {0,1}
Use last tab on startup. Defaults to 1
--load-local-models-on-startup {0,1}
Load local models on startup. Defaults to 1
-p PS_POLL, --ps-poll PS_POLL
Interval in seconds to poll ollama ps command. 0 = disable. Defaults to 3
-a {0,1}, --auto-name-session {0,1}
Auto name session using LLM. Defaults to 0
--restore-defaults Restore default settings and theme
--purge-cache Purge cached data
--purge-chats Purge all chat history
--purge-prompts Purge all custom prompts
--no-save Prevent saving settings for this session
--no-chat-save Prevent saving chats for this session
Unless you specify "--no-save" most flags such as -u, -t, -m, -s are sticky and will be used next time you start PAR_LLAMA.
For the full list of adjustable settings.json keys, their types, and defaults, see the Configuration Reference.
PAR LLAMA includes an encrypted secrets vault (src/parllama/secrets_manager.py) for storing sensitive values (such as provider API keys) separately from plaintext settings.json. It derives an encryption key from a password using PBKDF2-HMAC-SHA256, then encrypts/decrypts stored secrets with AES-GCM. The vault stays locked until unlocked with the correct password.
PARLLAMA_VAULT_KEY in your environment to have the vault unlock automatically on startup.0600 permissions on POSIX systems.Note: The in-app "Secrets" tab UI (SecretsView) is currently disabled/in-progress — its TabPane is commented out in src/parllama/screens/main_screen.py. The vault's manager and encryption logic exist and are used programmatically, but there is currently no UI screen for managing secrets interactively.
From anywhere:
parllama
From parent folder of venv
source venv/Scripts/activate
parllama
parllama -u "http://REMOTE_HOST:11434"
Ollama by default only listens to localhost for connections, so you must set the environment variable OLLAMA_HOST=0.0.0.0:11434
to make it listen on all interfaces.
Note: this will allow connections to your Ollama server from other devices on any network you are connected to.
If you have Ollama installed via the native Windows installer you must set OLLAMA_HOST=0.0.0.0:11434 in the "System Variable" section
of the "Environment Variables" control panel.
If you installed Ollama under WSL, setting the var with export OLLAMA_HOST=0.0.0.0:11434 before starting the Ollama server will have it listen on all interfaces.
If your Ollama server is already running, stop and start it to ensure it picks up the new environment variable.
You can validate what interfaces the Ollama server is listening on by looking at the server.log file in the Ollama config folder.
You should see as one of the first few lines "OLLAMA_HOST:http://0.0.0.0:11434"
Now that the server is listening on all interfaces you must instruct PAR_LLAMA to use a custom Ollama connection url with the "-u" flag.
The command will look something like this:
parllama -u "http://$(hostname).local:11434"
Depending on your DNS setup if the above does not work, try this:
parllama -u "http://$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):11434"
PAR_LLAMA will remember the -u flag so subsequent runs will not require that you specify it.
From repo root:
make dev
/tab.1 and /tab.2^pParllama supports LlamaCPP running OpenAI server mode. Parllama will use the default base_url of http://127.0.0.1:8080. This can be configured on the Options tab.
To start a LlamaCPP server run the following command in separate terminal:
llama-server -m PATH_TO_MODEL
or
llama-server -mu URL_TO_MODEL
llmman is a local model runner that serves the Ollama API (alongside OpenAI- and Anthropic-compatible ones) on port 17434.
Because it speaks the Ollama API, Parllama's Ollama provider works against it unchanged; only the URL differs.
To start an llmman server run the following commands in a separate terminal:
llmman serve
llmman pull gemma4
Then point Parllama at it with the -u flag (or the OLLAMA_URL environment variable):
parllama -u "http://localhost:17434"
Parllama will remember the URL so subsequent runs will not require the -u flag.
Pulling a model from within Parllama uses /api/pull; use llmman model names (gemma4, qwen3.8) or Hugging Face references (hf.co/unsloth/Qwen3.5-0.8B-GGUF).
You can create a library of custom prompts for easy starting of new chats. You can set up system prompts and user messages to prime conversations with the option of sending immediately to the LLM upon loading of the prompt. Currently, importing prompts from the popular Fabric project is supported with more on the way.
PAR LLAMA features a comprehensive memory system that allows you to maintain persistent context across all your conversations. This addresses the common issue of LLMs forgetting important information about you between chat sessions.
Navigate to the Memory tab to:
Memory can be dynamically updated from any chat using these commands:
/remember [information]: Add new information to your memory using AI assistance
/remember I prefer concise technical explanations/remember I work in Python and React development/forget [information]: Remove specific information from your memory using AI assistance
/forget my old job title/forget I mentioned liking verbose responses/memory.status: View your current memory content and status
/memory.clear: Clear all memory content (with confirmation)
My name is Alex and I'm a senior software engineer working primarily with:
- Python (FastAPI, Django)
- React and TypeScript
- AWS cloud infrastructure
I prefer:
- Concise, technical explanations
- Code examples with comments
- Best practices and security considerations
Current projects:
- Building a microservices API
- Learning Rust programming language
The memory system transforms PAR LLAMA into a truly personalized AI assistant that remembers who you are and adapts to your preferences across all conversations.
PAR LLAMA includes a powerful yet secure template execution system that allows you to run code snippets and commands directly from chat messages. This feature enables interactive development workflows, data analysis, and quick testing without leaving the chat interface.
The execution system is designed with security as a top priority:
Template execution settings are configurable in the Options tab under "Template Execution":
uv, python3, python, node, tsc, bash, sh, zsh, fishThe system supports flexible execution templates that can:
This feature transforms PAR LLAMA into a powerful development companion, enabling seamless transitions between conversation and code execution.
Themes are json files stored in the themes folder in the data directory which defaults to ~/.parllama/themes
The default theme is "par" so can be located in ~/.parllama/themes/par.json
Themes have a dark and light mode are in the following format:
{
"dark": {
"primary": "#e49500",
"secondary": "#6e4800",
"warning": "#ffa62b",
"error": "#ba3c5b",
"success": "#4EBF71",
"accent": "#6e4800",
"panel": "#111",
"surface":"#1e1e1e",
"background":"#121212",
"dark": true
},
"light": {
"primary": "#004578",
"secondary": "#ffa62b",
"warning": "#ffa62b",
"error": "#ba3c5b",
"success": "#4EBF71",
"accent": "#0178D4",
"background":"#efefef",
"surface":"#f5f5f5",
"dark": false
}
}
You must specify at least one of light or dark for the theme to be usable.
Theme can be changed via command line with the --theme-name option.
See CONTRIBUTING.md for development setup, code style, commit conventions, and the pull request process.
par-ai-core 0.5.9 upgrade moved its provider integrations to optional extras (broke litellm at startup and langchain_openai on chat). parllama now consumes par-ai-core with the exact provider extras it exposes, and declares litellm and pillow as direct dependencies instead of relying on them transitivelyEnter or double-clicking a prompt in the Prompts tab no longer triggers an infinite loop that spawned chat sessions until the app was force-quit. PromptList was subscribed to the same PromptSelected message it posts, so each EventBus broadcast bounced back through the app handler and re-broadcast forever (#77)settings.json is written with 0o600 permissions; the code-execution "require confirmation" setting is now a real blocking dialog instead of a no-op; Docker uses the Windows named pipe, the quantization level is validated, path-traversal checks do real containment, and vault password checks are constant-timemake checkall now runs the test suite, a new push/PR CI workflow was added, and coverage grew from 132 to 211 testsProviderSettingsPanel from the Options view, and clipboard / PS-status / session-event coordinators out of the main app classpytest via sys.argv; fixed a background-execution temp-file race; replaced TUI-invisible print() errors with logging; suppressed litellm's stdout bannersSelect.Changed on mount — duplicate model refreshes, reasoning effort reset to Medium, spurious provider/model events, the Edit Prompt dialog opening dirty, and the Options tab re-applying the themec on any completed assistant message to continue generation from that point. Works with all providers. After stopping generation, edit the partial response with e, then press c to continue (#45)For the full version history, see CHANGELOG.md.
Python
99.5%
PAR LLAMA is a TUI (Text UI) application designed for easy management and use of Ollama based LLMs. (It also works with most major cloud provided LLMs) The application was built with Textual and Rich and my PAR AI Core. It runs on all major OS's including but not limited to Windows, Windows WSL, Mac, and Linux.
Supports Dark and Light mode as well as custom themes.









scoop install pythonscoop install makeOllama now supports native model quantization through the create model interface. When creating a new model, you can specify a quantization level (e.g., q4_K_M, q5_K_M) to reduce model size and memory requirements.
Important: Native quantization only works with F16 or F32 base models. If you try to quantize an already-quantized model (like llama3.2:1b which is already Q4_0), you'll receive an error.
For quantizing custom models from HuggingFace that aren't available through Ollama:
docker pull ollama/quantize
If you don't have uv installed you can run the following:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install parllama
To upgrade an existing uv installation use the -U --force flags:
uv tool install parllama -U --force
uvx parllama
uv tool install git+https://github.com/paulrobello/parllama
To upgrade an existing installation use the --force flag:
uv tool install git+https://github.com/paulrobello/parllama -U --force
If you don't have pipx installed you can run the following:
pip install pipx
pipx ensurepath
pipx install parllama
To upgrade an existing pipx installation use the --force flag:
pipx install parllama --force
pipx install git+https://github.com/paulrobello/parllama
To upgrade an existing installation use the --force flag:
pipx install git+https://github.com/paulrobello/parllama --force
Clone the repo and run the setup make target. Note uv is required for this.
git clone https://github.com/paulrobello/parllama
cd parllama
make setup
usage: parllama [-h] [-v] [-d DATA_DIR] [-u OLLAMA_URL] [-t THEME_NAME] [-m {dark,light}]
[-s {local,site,chat,prompts,tools,create,options,logs}] [--use-last-tab-on-startup {0,1}]
[--load-local-models-on-startup {0,1}] [-p PS_POLL] [-a {0,1}]
[--restore-defaults] [--purge-cache] [--purge-chats] [--purge-prompts] [--no-save] [--no-chat-save]
PAR LLAMA -- Ollama TUI.
options:
-h, --help show this help message and exit
-v, --version Show version information.
-d DATA_DIR, --data-dir DATA_DIR
Data Directory. Defaults to ~/.local/share/parllama
-u OLLAMA_URL, --ollama-url OLLAMA_URL
URL of your Ollama instance. Defaults to http://localhost:11434
-t THEME_NAME, --theme-name THEME_NAME
Theme name. Defaults to par
-m {dark,light}, --theme-mode {dark,light}
Dark / Light mode. Defaults to dark
-s {local,site,chat,prompts,tools,create,options,logs}, --starting-tab {local,site,chat,prompts,tools,create,options,logs}
Starting tab. Defaults to local
--use-last-tab-on-startup {0,1}
Use last tab on startup. Defaults to 1
--load-local-models-on-startup {0,1}
Load local models on startup. Defaults to 1
-p PS_POLL, --ps-poll PS_POLL
Interval in seconds to poll ollama ps command. 0 = disable. Defaults to 3
-a {0,1}, --auto-name-session {0,1}
Auto name session using LLM. Defaults to 0
--restore-defaults Restore default settings and theme
--purge-cache Purge cached data
--purge-chats Purge all chat history
--purge-prompts Purge all custom prompts
--no-save Prevent saving settings for this session
--no-chat-save Prevent saving chats for this session
Unless you specify "--no-save" most flags such as -u, -t, -m, -s are sticky and will be used next time you start PAR_LLAMA.
For the full list of adjustable settings.json keys, their types, and defaults, see the Configuration Reference.
PAR LLAMA includes an encrypted secrets vault (src/parllama/secrets_manager.py) for storing sensitive values (such as provider API keys) separately from plaintext settings.json. It derives an encryption key from a password using PBKDF2-HMAC-SHA256, then encrypts/decrypts stored secrets with AES-GCM. The vault stays locked until unlocked with the correct password.
PARLLAMA_VAULT_KEY in your environment to have the vault unlock automatically on startup.0600 permissions on POSIX systems.Note: The in-app "Secrets" tab UI (SecretsView) is currently disabled/in-progress — its TabPane is commented out in src/parllama/screens/main_screen.py. The vault's manager and encryption logic exist and are used programmatically, but there is currently no UI screen for managing secrets interactively.
From anywhere:
parllama
From parent folder of venv
source venv/Scripts/activate
parllama
parllama -u "http://REMOTE_HOST:11434"
Ollama by default only listens to localhost for connections, so you must set the environment variable OLLAMA_HOST=0.0.0.0:11434
to make it listen on all interfaces.
Note: this will allow connections to your Ollama server from other devices on any network you are connected to.
If you have Ollama installed via the native Windows installer you must set OLLAMA_HOST=0.0.0.0:11434 in the "System Variable" section
of the "Environment Variables" control panel.
If you installed Ollama under WSL, setting the var with export OLLAMA_HOST=0.0.0.0:11434 before starting the Ollama server will have it listen on all interfaces.
If your Ollama server is already running, stop and start it to ensure it picks up the new environment variable.
You can validate what interfaces the Ollama server is listening on by looking at the server.log file in the Ollama config folder.
You should see as one of the first few lines "OLLAMA_HOST:http://0.0.0.0:11434"
Now that the server is listening on all interfaces you must instruct PAR_LLAMA to use a custom Ollama connection url with the "-u" flag.
The command will look something like this:
parllama -u "http://$(hostname).local:11434"
Depending on your DNS setup if the above does not work, try this:
parllama -u "http://$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):11434"
PAR_LLAMA will remember the -u flag so subsequent runs will not require that you specify it.
From repo root:
make dev
/tab.1 and /tab.2^pParllama supports LlamaCPP running OpenAI server mode. Parllama will use the default base_url of http://127.0.0.1:8080. This can be configured on the Options tab.
To start a LlamaCPP server run the following command in separate terminal:
llama-server -m PATH_TO_MODEL
or
llama-server -mu URL_TO_MODEL
llmman is a local model runner that serves the Ollama API (alongside OpenAI- and Anthropic-compatible ones) on port 17434.
Because it speaks the Ollama API, Parllama's Ollama provider works against it unchanged; only the URL differs.
To start an llmman server run the following commands in a separate terminal:
llmman serve
llmman pull gemma4
Then point Parllama at it with the -u flag (or the OLLAMA_URL environment variable):
parllama -u "http://localhost:17434"
Parllama will remember the URL so subsequent runs will not require the -u flag.
Pulling a model from within Parllama uses /api/pull; use llmman model names (gemma4, qwen3.8) or Hugging Face references (hf.co/unsloth/Qwen3.5-0.8B-GGUF).
You can create a library of custom prompts for easy starting of new chats. You can set up system prompts and user messages to prime conversations with the option of sending immediately to the LLM upon loading of the prompt. Currently, importing prompts from the popular Fabric project is supported with more on the way.
PAR LLAMA features a comprehensive memory system that allows you to maintain persistent context across all your conversations. This addresses the common issue of LLMs forgetting important information about you between chat sessions.
Navigate to the Memory tab to:
Memory can be dynamically updated from any chat using these commands:
/remember [information]: Add new information to your memory using AI assistance
/remember I prefer concise technical explanations/remember I work in Python and React development/forget [information]: Remove specific information from your memory using AI assistance
/forget my old job title/forget I mentioned liking verbose responses/memory.status: View your current memory content and status
/memory.clear: Clear all memory content (with confirmation)
My name is Alex and I'm a senior software engineer working primarily with:
- Python (FastAPI, Django)
- React and TypeScript
- AWS cloud infrastructure
I prefer:
- Concise, technical explanations
- Code examples with comments
- Best practices and security considerations
Current projects:
- Building a microservices API
- Learning Rust programming language
The memory system transforms PAR LLAMA into a truly personalized AI assistant that remembers who you are and adapts to your preferences across all conversations.
PAR LLAMA includes a powerful yet secure template execution system that allows you to run code snippets and commands directly from chat messages. This feature enables interactive development workflows, data analysis, and quick testing without leaving the chat interface.
The execution system is designed with security as a top priority:
Template execution settings are configurable in the Options tab under "Template Execution":
uv, python3, python, node, tsc, bash, sh, zsh, fishThe system supports flexible execution templates that can:
This feature transforms PAR LLAMA into a powerful development companion, enabling seamless transitions between conversation and code execution.
Themes are json files stored in the themes folder in the data directory which defaults to ~/.parllama/themes
The default theme is "par" so can be located in ~/.parllama/themes/par.json
Themes have a dark and light mode are in the following format:
{
"dark": {
"primary": "#e49500",
"secondary": "#6e4800",
"warning": "#ffa62b",
"error": "#ba3c5b",
"success": "#4EBF71",
"accent": "#6e4800",
"panel": "#111",
"surface":"#1e1e1e",
"background":"#121212",
"dark": true
},
"light": {
"primary": "#004578",
"secondary": "#ffa62b",
"warning": "#ffa62b",
"error": "#ba3c5b",
"success": "#4EBF71",
"accent": "#0178D4",
"background":"#efefef",
"surface":"#f5f5f5",
"dark": false
}
}
You must specify at least one of light or dark for the theme to be usable.
Theme can be changed via command line with the --theme-name option.
See CONTRIBUTING.md for development setup, code style, commit conventions, and the pull request process.
par-ai-core 0.5.9 upgrade moved its provider integrations to optional extras (broke litellm at startup and langchain_openai on chat). parllama now consumes par-ai-core with the exact provider extras it exposes, and declares litellm and pillow as direct dependencies instead of relying on them transitivelyEnter or double-clicking a prompt in the Prompts tab no longer triggers an infinite loop that spawned chat sessions until the app was force-quit. PromptList was subscribed to the same PromptSelected message it posts, so each EventBus broadcast bounced back through the app handler and re-broadcast forever (#77)settings.json is written with 0o600 permissions; the code-execution "require confirmation" setting is now a real blocking dialog instead of a no-op; Docker uses the Windows named pipe, the quantization level is validated, path-traversal checks do real containment, and vault password checks are constant-timemake checkall now runs the test suite, a new push/PR CI workflow was added, and coverage grew from 132 to 211 testsProviderSettingsPanel from the Options view, and clipboard / PS-status / session-event coordinators out of the main app classpytest via sys.argv; fixed a background-execution temp-file race; replaced TUI-invisible print() errors with logging; suppressed litellm's stdout bannersSelect.Changed on mount — duplicate model refreshes, reasoning effort reset to Medium, spurious provider/model events, the Edit Prompt dialog opening dirty, and the Options tab re-applying the themec on any completed assistant message to continue generation from that point. Works with all providers. After stopping generation, edit the partial response with e, then press c to continue (#45)For the full version history, see CHANGELOG.md.
Python
99.5%