Comment

Comment by kristopolous

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.

https://github.com/day50-dev/llcat

Discussion

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton