kristopolous
5 hours ago
I've been working on something in a similar class for about a year called llcat
It was born out of the lack of LLM-native unix-friendly tools that work like cURL, awk and sed.
I couldn't find any so I wrote one myself.
I knew I wanted a reference that is stateless, explicit, low-level, and composable without modal settings.
For instance, instead of config files, llcat can index into files with built-in jq-syntax and line numbers. Then it can the save invocations for later:
llcat --save invocation.json \
-k "@~/credentials.txt:12" \
-u "@settings.json:.[3].host" \
-s "@system_prompts:8" \
-m "@settings.json:.[3].model" \
"@query.txt:12" > output.txt
and then llcat --load invocation.json { ... parameters you want to override ... }
It's easy to send to colleagues over chat or keep them invocations in a shared network folder.Conversations are also just JSON files. You can have a different input and output one. This means you can do stuff like
for i in *; do
# use a non-mutable conversation
# apply it over a group of files with standard unix pipes
cat "$i" | llcat --load settings.json -cr context.json > ../results/"${i}.output"
# or use attachments
llcat --load settings.json -a "$i" -cr context.json > ../results/"${i}.output"
# or save the whole context
llcat --load settings.json -a "$i" -cr context.json -c ../results/"${i}.output" > /dev/null
done
One of my favorite patterns is this one: llcat -k @~/secrets.json:.anthropic -u api.anthropic.com
llcat -k @~/secrets.json:.openrouter -u openrouter.ai/api
Since there's no hidden state you can use llcat in shell scripts and get operational guarantees.I've put a lot of effort into it and use it daily. If you can give it a go and give me feedback and file bugs, I'd love it.
rtaylorgarlock
34 minutes ago
Cool product :) I'm still so gun-shy on using any llm tooling in prod for sysadmin, devops, etc. but frontier models walk circles around me in bash at insane tok/s. cURL and cat + json sounds nice