/usr/bin/cat for the LLM era
Project description
/usr/bin/cat for LLMs
llcat is an LLM program with very little ambition.
That's why it's awesome.
You can handle this!
llcat solves all your problems.
Yes. Every one.
It can also:
- Pipe things from stdin and/or be prompted on the command line.
- Store conversation history optionally, in a normal file.
- Do tool calling using the OpenAI spec. There's an example in this repository (and below).
- Use local or remote servers, authenticated or not.
- List models using
-mwithout arguments. Specify a model with the argument.
Free Samples? Sure! It's Free Software.
- pipx install llcat
- uvx llcat
It's llcat, not llmcat. Let's keep it pronounceable.
Dependencies? Just the requests library.
Pretty unambitious. Pretty nice.
Examples
List the models on OpenRouter:
uvx llcat -s https://openrouter.ai/api -m
Go ahead, do that one right now. I'll wait.
Let's start with llama:
$ llcat -s https://openrouter.ai/api \
-m meta-llama/llama-3.2-3b-instruct:free \
-c /tmp/convo.txt \
-k $(cat openrouter.key) \
"What is the capital of France?"
Continue with Qwen:
$ llcat -s https://openrouter.ai/api \
-m qwen/qwen3-4b:free \
-c /tmp/convo.txt \
-k $(cat openrouter.key) \
"And what about Canada?"
And finish on the local network:
$ llcat -s http://192.168.1.21:8080 \
-c /tmp/convo.txt \
"And what about Japan?"
One conversation, hopping across models and servers.
Pure sorcery.
More convenient summoning
Want to store state? Let's go!
$ source fancy.sh
$ llc-server http://192.168.1.21:8080
$ llc "write a diss track where the knapsack problem hates on the towers of hanoi"
Now go read the four lines of fancy.sh. Surprise! It's just an example.
(Spoiler Alert: environment variables and a wrapper function)
The Tool Call To Rule Them All
This example, a very strange way to play mp3s, uses the sophisticated 21 line example_tool_program.py included in this repository.
It also uses DA`/50's pretty little streaming markdown renderer, streamdown.
Kablam! Alright a16z where's my $50 million?
The enterprise applications are limitless...
Boring Documentation
usage: llcat [-h] [-c CONVERSATION] [-m [MODEL]] [-k KEY] [-s SERVER]
[-tf TOOL_FILE] [-tp TOOL_PROGRAM]
[prompt ...]
positional arguments:
prompt Your prompt
options:
-h, --help show this help message and exit
-c, --conversation CONVERSATION
Conversation history file
-m, --model [MODEL] Model to use (or list models if no value)
-k, --key KEY API key for authorization
-s, --server SERVER Server URL (e.g., http://::1:8080)
-tf, --tool_file TOOL_FILE
JSON file with tool definitions
-tp, --tool_program TOOL_PROGRAM
Program to execute tool calls
Project details
Release history Release notifications | RSS feed
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 llcat-0.4.0.tar.gz.
File metadata
- Download URL: llcat-0.4.0.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53ff3f8b2f3a3b7876c18059250cff142198a22c6e2006a98b84710de3a8c77b
|
|
| MD5 |
5de955c9b4dce22b545718baf430afd2
|
|
| BLAKE2b-256 |
abbd74c38eaad51bbef494135beb3f0aae1a2fbd2ba2a6c76affad8f1f0fcbe0
|
File details
Details for the file llcat-0.4.0-py3-none-any.whl.
File metadata
- Download URL: llcat-0.4.0-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
557738b3bddeef8033c9a2f64f3e91ffe20df156018929ad4b8b0cff7597315a
|
|
| MD5 |
a96c219a88c4ee30eca4c587f0b6b889
|
|
| BLAKE2b-256 |
23c7d787bf367d86b4c124fde6477724adde14a118495ac04cd836d1e1c5d74b
|