The get path is the interesting bit — SELECT response and
UPDATE hit_count run inside a db.Transaction so concurrent readers
can't double-count or observe a partial increment.
Run
kukicha run examples/llm-cache/ put --model claude --prompt "hello" --response "hi there"
kukicha run examples/llm-cache/ get --model claude --prompt "hello"
kukicha run examples/llm-cache/ stats
kukicha run examples/llm-cache/ prune --older-than-days 7
The cache lives in llm-cache.db next to where you run the command;
override with --db /path/to/cache.db.