{"slug": "llm", "name": "llm", "category": "terminal", "category_name": "Terminal and shell", "description": "", "recommenders": 3, "commenters": 3, "warners": 0, "score": 2.516, "rising": -0.98, "first": "2025-11-06", "latest": "2026-03-27", "why": "I hand Simon's `llm` command lone tool access to its own todo list and read/write access to the cwd", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 4, "neutral": 0, "compare": 0, "warn": 0}, "spark": [1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "I hand Simon's `llm` command lone tool access to its own todo list and read/write access to the cwd", "icon": true, "domain": "datasette.io", "github_repo": null, "official_url": "https://llm.datasette.io", "pricing": "", "aliases": ["llm", "LLM"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 760770801, "item_id": 47548175, "url": "https://news.ycombinator.com/item?id=47548175", "by": "dannyobrien", "date": "2026-03-27", "stance": "recommend", "quote": "I use the llm-jq plugin for Simon Willison's `llm` command line frontend for this", "excerpt": "I use the llm-jq plugin for Simon Willison's `llm` command line frontend for this: https://github.com/simonw/llm-jq", "context": "", "use_case": "LLM command line frontend", "switched_from": "", "story": "A Faster Alternative to Jq"}, {"id": 745061328, "item_id": 46566333, "url": "https://news.ycombinator.com/item?id=46566333", "by": "nvader", "date": "2026-01-10", "stance": "recommend", "quote": "I think this is definitely a step in the right direction, and is exactly the kind of answer I was looking for.", "excerpt": "I think this is definitely a step in the right direction, and is exactly the kind of answer I was looking for. Thank you! `llm` gives my tool a standard bin to call to invoke completions, and configuring and managing it is the user's responsibility. If more tools started expecting something like this, it could become a defacto standard. Then maybe the OS would begin to provide it.", "context": "", "use_case": "standard CLI for invoking LLM completions", "switched_from": "", "story": "Ask HN: What's a standard way for apps to request text completion as a service?"}, {"id": 739745920, "item_id": 46234120, "url": "https://news.ycombinator.com/item?id=46234120", "by": "bh0k4l", "date": "2025-12-11", "stance": "recommend", "quote": "feed the most recent chunk to a utility such as Simon W.'s llm.", "excerpt": "How I use the script command to read the output of the last command and ask an LLM for help: The following custom command is executed for starting the terminal /usr/bin/zsh -c 'export SCRIPT_LOG_FILE_NAME=$(date \"+%m-%d-%y-%H-%M-%S-%N\") && mkdir -p /tmp/script-log/ && script -f -q /tmp/script-log/$SCRIPT_LOG_FILE_NAME' export SCRIPT_LOG_FILE_NAME=$(date \"+%m-%d-%y-%H-%M-%S-%N\") mkdir -p /tmp/script-log/ script -f -q ", "context": "", "use_case": "asking an LLM to fix failed commands", "switched_from": "", "story": "How can I read the standard output of an already-running process?"}, {"id": 733468368, "item_id": 45841773, "url": "https://news.ycombinator.com/item?id=45841773", "by": "dannyobrien", "date": "2025-11-06", "stance": "recommend", "quote": "I hand Simon's `llm` command lone tool access to its own todo list and read/write access to the cwd", "excerpt": "https://github.com/simonw/llm-jq for those following along at home https://github.com/simonw/llm-cmd is what i use as the \"actually good ffmpeg etc front end\" and just to toot my own horn, I hand Simon's `llm` command lone tool access to its own todo list and read/write access to the cwd with my own tools, https://github.com/dannyob/llm-tools-todo and https://github.com/dannyob/llm-tools-patch Even with just these an", "context": "", "use_case": "agent loop with tools", "switched_from": "", "story": "You should write an agent"}]}], "caveats": [], "who": [], "tags": [], "use_cases": ["cli for llm access", "llm command line frontend", "standard cli for invoking llm completions", "asking an llm to fix failed commands", "agent loop with tools"], "compared": [], "makers": [{"id": 793040128, "item_id": 49565008, "url": "https://news.ycombinator.com/item?id=49565008", "by": "simonw", "date": "2026-09-04", "stance": "recommend", "quote": "I use my https://llm.datasette.io tool where I have a template saved", "excerpt": "My automation is pretty simple. I use my https://llm.datasette.io tool where I have a template saved: llm \"Generate an SVG of a pelican riding a bicycle\" --save pelican When a model comes out I first make sure LLM can talk to it - usually by updating the relevant plugin, but if it's on OpenRouter I can use it directly with https://github.com/simonw/llm-openrouter - sometimes I use this mechanism instead, for OpenAI-c", "context": "", "use_case": "running model benchmark prompts", "switched_from": "", "story": "GPT-6 Astra"}, {"id": 751348225, "item_id": 46959264, "url": "https://news.ycombinator.com/item?id=46959264", "by": "simonw", "date": "2026-02-10", "stance": "recommend", "quote": "I remain very proud of my current open source projects too", "excerpt": "> Has Simon actually produced anything novel or compelling? Here are some of my recent posts which I self-evaluate as \"novel and compelling\". - Running Pydantic\u2019s Monty Rust sandboxed Python subset in WebAssembly https://simonwillison.net/2026/Feb/6/pydantic-monty/ - demonstrating how easy and useful it is to be able to turn Rust code into WASM that can run independently or be used inside a Python wheel for Pyodide i", "context": "", "use_case": "CLI for LLMs", "switched_from": "", "story": "AI Doesn't Reduce Work\u2013It Intensifies It"}], "threads": [{"url": "https://news.ycombinator.com/item?id=49984025", "title": "Decisions API is in public beta", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49554643", "title": "GPT-6 Astra", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47539825", "title": "A Faster Alternative to Jq", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46955703", "title": "AI Doesn't Reduce Work\u2013It Intensifies It", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46506261", "title": "Ask HN: What's a standard way for apps to request text completion as a service?", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46168180", "title": "How can I read the standard output of an already-running process?", "mentions": 1}], "sentiment_by_month": {"2025-11": {"recommend": 1}, "2025-12": {"recommend": 1}, "2026-01": {"recommend": 1}, "2026-02": {}, "2026-03": {"recommend": 1}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "quotes": [{"id": 799760563, "item_id": 49985035, "url": "https://news.ycombinator.com/item?id=49985035", "by": "simonw", "date": "2026-10-06", "stance": "neutral", "quote": "", "excerpt": "curl https://api.openai.com/v1/decisions \\ -H \"Authorization: Bearer $(llm keys get openai)\" \\ -H \"Content-Type: application/json\" \\ --data ' { \"model\": \"gpt-6-luna\", \"input\": [{ \"role\": \"user\", \"content\": [ {\"type\": \"input_text\", \"text\": \"I am angry about the new product feature\"} ] }], \"questions\": [{ \"type\": \"predicate\", \"name\": \"complaint\", \"instructions\": \"Is this a complaint?\" }, { \"type\": \"predicate\", \"name\": ", "context": "", "use_case": "CLI for LLM access", "switched_from": "", "story": "Decisions API is in public beta"}, {"id": 760770801, "item_id": 47548175, "url": "https://news.ycombinator.com/item?id=47548175", "by": "dannyobrien", "date": "2026-03-27", "stance": "recommend", "quote": "I use the llm-jq plugin for Simon Willison's `llm` command line frontend for this", "excerpt": "I use the llm-jq plugin for Simon Willison's `llm` command line frontend for this: https://github.com/simonw/llm-jq", "context": "", "use_case": "LLM command line frontend", "switched_from": "", "story": "A Faster Alternative to Jq"}, {"id": 745061328, "item_id": 46566333, "url": "https://news.ycombinator.com/item?id=46566333", "by": "nvader", "date": "2026-01-10", "stance": "recommend", "quote": "I think this is definitely a step in the right direction, and is exactly the kind of answer I was looking for.", "excerpt": "I think this is definitely a step in the right direction, and is exactly the kind of answer I was looking for. Thank you! `llm` gives my tool a standard bin to call to invoke completions, and configuring and managing it is the user's responsibility. If more tools started expecting something like this, it could become a defacto standard. Then maybe the OS would begin to provide it.", "context": "", "use_case": "standard CLI for invoking LLM completions", "switched_from": "", "story": "Ask HN: What's a standard way for apps to request text completion as a service?"}, {"id": 739745920, "item_id": 46234120, "url": "https://news.ycombinator.com/item?id=46234120", "by": "bh0k4l", "date": "2025-12-11", "stance": "recommend", "quote": "feed the most recent chunk to a utility such as Simon W.'s llm.", "excerpt": "How I use the script command to read the output of the last command and ask an LLM for help: The following custom command is executed for starting the terminal /usr/bin/zsh -c 'export SCRIPT_LOG_FILE_NAME=$(date \"+%m-%d-%y-%H-%M-%S-%N\") && mkdir -p /tmp/script-log/ && script -f -q /tmp/script-log/$SCRIPT_LOG_FILE_NAME' export SCRIPT_LOG_FILE_NAME=$(date \"+%m-%d-%y-%H-%M-%S-%N\") mkdir -p /tmp/script-log/ script -f -q ", "context": "", "use_case": "asking an LLM to fix failed commands", "switched_from": "", "story": "How can I read the standard output of an already-running process?"}, {"id": 733468368, "item_id": 45841773, "url": "https://news.ycombinator.com/item?id=45841773", "by": "dannyobrien", "date": "2025-11-06", "stance": "recommend", "quote": "I hand Simon's `llm` command lone tool access to its own todo list and read/write access to the cwd", "excerpt": "https://github.com/simonw/llm-jq for those following along at home https://github.com/simonw/llm-cmd is what i use as the \"actually good ffmpeg etc front end\" and just to toot my own horn, I hand Simon's `llm` command lone tool access to its own todo list and read/write access to the cwd with my own tools, https://github.com/dannyob/llm-tools-todo and https://github.com/dannyob/llm-tools-patch Even with just these an", "context": "", "use_case": "agent loop with tools", "switched_from": "", "story": "You should write an agent"}]}