{"slug": "jq", "name": "jq", "category": "terminal", "category_name": "Terminal and shell", "description": "Command-line JSON processor with its own language for filtering and transforming data.", "recommenders": 7, "commenters": 12, "warners": 0, "score": 7.421, "rising": -0.96, "first": "2025-12-06", "latest": "2026-10-05", "why": "HN commenters use jq to parse JSON from APIs in terminal pipelines and shell scripts, and increasingly tell AI coding agents to use it for structured data.", "why_is_quote": false, "has_verdict": true, "sentiment": {"recommend": 7, "neutral": 4, "compare": 1, "warn": 0}, "spark": [0, 2, 0, 0, 2, 1, 0, 0, 1, 0, 0, 1], "listed": true, "loved": ["Agent tooling", "Shell scripting glue"], "caveat": "Syntax learning curve", "short_quote": "I love jq, though. It provides an extremely good language for its task", "icon": false, "domain": null, "github_repo": "github.com/jqlang/jq", "official_url": "https://jqlang.org", "pricing": "open source", "aliases": ["jq"], "verdict": [{"text": "HN commenters use jq to parse JSON from APIs in terminal pipelines and shell scripts,", "cites": [{"id": 761691456, "item_id": 47605716, "url": "https://news.ycombinator.com/item?id=47605716", "by": "artakulov", "date": "2026-04-01", "stance": "recommend", "quote": "jq piped with curl for API debugging.", "excerpt": "jq piped with curl for API debugging. Sounds obvious but I still see people open Postman for things that take 10 seconds in the terminal. `curl -s url | jq '.data[] | {id, status}'` and you're done. Also `entr` for file watching \u2014 `ls *.js | entr -r node build.js`. Replaced like three different watch tools for me.", "context": "", "use_case": "API debugging", "switched_from": "", "story": "Ask HN: What dev tools do you rely on that nobody talks about?"}, {"id": 799553424, "item_id": 49972089, "url": "https://news.ycombinator.com/item?id=49972089", "by": "JohnBooty", "date": "2026-10-05", "stance": "recommend", "quote": "5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us.", "excerpt": "A lot of APIs we use return JSON - Github, Semaphore, Context7, Docker, etc. We're parsing JSON dozens of times per session. I think 5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us. I eagerly await your misunderstanding!", "context": "", "use_case": "parsing JSON in agent sessions", "switched_from": "", "story": "Agents don't need memory, they need documentation"}, {"id": 740140964, "item_id": 46258810, "url": "https://news.ycombinator.com/item?id=46258810", "by": "pxc", "date": "2025-12-13", "stance": "recommend", "quote": "it becomes a lot less painful when I can just pull in `jq`", "excerpt": "> If a script is simple - I use posix sh + awk, sed, etc. > But if a script I write needs to use arrays, sets, hashtable or processes many files One option that I sometimes use at work (in addition to writing some Python CLIs) that is a pretty nice next step on this spectrum is Bash-with-all-the-fixins'. I use a Nix-based dependency resolver for shell scripts called resholve\u00b9 to parse scripts so that it can identify ", "context": "", "use_case": "structured data in shell scripts", "switched_from": "", "story": "Using Python for Scripting"}, {"id": 782071347, "item_id": 48879459, "url": "https://news.ycombinator.com/item?id=48879459", "by": "raffraffraff", "date": "2026-07-12", "stance": "neutral", "quote": "For small stuff I use bash / sed / awk / jq / yq / curl etc.", "excerpt": "For small stuff I use bash / sed / awk / jq / yq / curl etc. I stopped using perl (a long time ago) and hate trying to build or distribute anything in Python. \"You asked for a script! I give you... a venv, a pip install, woops need to compile something, so let's install build tools. Actually let's get github actions set up to handle this, or would you prefer a Docker image? Do you have a registry so I can share the i", "context": "", "use_case": "small scripts", "switched_from": "", "story": "Amber the programming language compiled to Bash/Ksh/Zsh"}]}, {"text": " and increasingly tell AI coding agents to use it for structured data.", "cites": [{"id": 799553424, "item_id": 49972089, "url": "https://news.ycombinator.com/item?id=49972089", "by": "JohnBooty", "date": "2026-10-05", "stance": "recommend", "quote": "5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us.", "excerpt": "A lot of APIs we use return JSON - Github, Semaphore, Context7, Docker, etc. We're parsing JSON dozens of times per session. I think 5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us. I eagerly await your misunderstanding!", "context": "", "use_case": "parsing JSON in agent sessions", "switched_from": "", "story": "Agents don't need memory, they need documentation"}, {"id": 755359632, "item_id": 47209977, "url": "https://news.ycombinator.com/item?id=47209977", "by": "wenc", "date": "2026-03-01", "stance": "recommend", "quote": "There are two CLIs are particularly powerful for working with large structured data: `jq` and `duckdb` cli.", "excerpt": "MCPs (especially remote MCPs) are like a black box API -- you don't have to install anything, provision any resources, etc. You just call it and get an answer. There's a place for that, but an MCP is ultimately a blunt instrument. CLI tools on the other hand are like precision instruments. Yes, you have to install them locally once, but after that, they have access to your local environment and can discover things on", "context": "ML work with agents", "use_case": "probing large JSON data", "switched_from": "", "story": "MCP is dead. Long live the CLI"}, {"id": 775992480, "item_id": 48499530, "url": "https://news.ycombinator.com/item?id=48499530", "by": "williamcotton", "date": "2026-06-11", "stance": "neutral", "quote": "jq is what, 15 years old? I see LLMs using it all the time.", "excerpt": ">So really, if you want to do something you'd normally use a DSL for, you should be talking to your AI, and telling the AI to encode it into computer-speak. Binary files, libraries, programs, composeable piped applications. The AI can take what you think and turn it into a regular old computer program, just as easy as you would write a DSL. But you don't need a DSL to do this; the AI can already program. I use LLMs t", "context": "", "use_case": "JSON processing in LLM pipelines", "switched_from": "", "story": "How a New DSL May Survive in the Era of LLMs"}]}, {"text": " The caveats are few: its syntax can send users back to the manual,", "cites": [{"id": 781868512, "item_id": 48866782, "url": "https://news.ycombinator.com/item?id=48866782", "by": "isityettime", "date": "2026-07-10", "stance": "recommend", "quote": "I love jq, though. It provides an extremely good language for its task", "excerpt": "> it's almost a programming language It is a programming language. That thing you write between single quotation marks when you invoke jq is a program. (And like with other programming languages, it's often useful to write your jq programs to files instead of always writing them inline in the shell.) I love jq, though. It provides an extremely good language for its task, even if I often have to take a look at the man", "context": "", "use_case": "JSON processing", "switched_from": "", "story": "Good Tools Are Invisible"}, {"id": 760651984, "item_id": 47540749, "url": "https://news.ycombinator.com/item?id=47540749", "by": "bouk", "date": "2026-03-27", "stance": "recommend", "quote": "it's kind of mind-blowing how it works under the hood", "excerpt": "I highly recommend anyone to look at jq's VM implementation some time, it's kind of mind-blowing how it works under the hood: https://github.com/jqlang/jq/blob/master/src/execute.c It does some kind of stack forking which is what allows its funky syntax", "context": "", "use_case": "JSON processing", "switched_from": "", "story": "A Faster Alternative to Jq"}]}, {"text": " and one commenter prefers FracturedJson for pretty printing.", "cites": [{"id": 792588129, "item_id": 49536758, "url": "https://news.ycombinator.com/item?id=49536758", "by": "OskarS", "date": "2026-09-02", "stance": "compare", "quote": "I much prefer fracjson[0] pretty printing to jq", "excerpt": "Lovely little alias, but I much prefer fracjson[0] pretty printing to jq, so I might go with that instead! [0]: https://github.com/j-brooke/FracturedJson", "context": "", "use_case": "formatting JSON", "switched_from": "", "story": "Using jq to format JSON on the clipboard"}]}], "praise": [{"label": "Agent tooling", "summary": "Commenters tell AI agents to use jq so they can work with JSON and large structured data without loading it whole.", "quotes": [{"id": 799553424, "item_id": 49972089, "url": "https://news.ycombinator.com/item?id=49972089", "by": "JohnBooty", "date": "2026-10-05", "stance": "recommend", "quote": "5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us.", "excerpt": "A lot of APIs we use return JSON - Github, Semaphore, Context7, Docker, etc. We're parsing JSON dozens of times per session. I think 5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us. I eagerly await your misunderstanding!", "context": "", "use_case": "parsing JSON in agent sessions", "switched_from": "", "story": "Agents don't need memory, they need documentation"}, {"id": 755359632, "item_id": 47209977, "url": "https://news.ycombinator.com/item?id=47209977", "by": "wenc", "date": "2026-03-01", "stance": "recommend", "quote": "There are two CLIs are particularly powerful for working with large structured data: `jq` and `duckdb` cli.", "excerpt": "MCPs (especially remote MCPs) are like a black box API -- you don't have to install anything, provision any resources, etc. You just call it and get an answer. There's a place for that, but an MCP is ultimately a blunt instrument. CLI tools on the other hand are like precision instruments. Yes, you have to install them locally once, but after that, they have access to your local environment and can discover things on", "context": "ML work with agents", "use_case": "probing large JSON data", "switched_from": "", "story": "MCP is dead. Long live the CLI"}, {"id": 775992480, "item_id": 48499530, "url": "https://news.ycombinator.com/item?id=48499530", "by": "williamcotton", "date": "2026-06-11", "stance": "neutral", "quote": "jq is what, 15 years old? I see LLMs using it all the time.", "excerpt": ">So really, if you want to do something you'd normally use a DSL for, you should be talking to your AI, and telling the AI to encode it into computer-speak. Binary files, libraries, programs, composeable piped applications. The AI can take what you think and turn it into a regular old computer program, just as easy as you would write a DSL. But you don't need a DSL to do this; the AI can already program. I use LLMs t", "context": "", "use_case": "JSON processing in LLM pipelines", "switched_from": "", "story": "How a New DSL May Survive in the Era of LLMs"}]}, {"label": "Shell scripting glue", "summary": "A standard small tool next to sed, awk and curl, and it makes Bash scripts less painful.", "quotes": [{"id": 782071347, "item_id": 48879459, "url": "https://news.ycombinator.com/item?id=48879459", "by": "raffraffraff", "date": "2026-07-12", "stance": "neutral", "quote": "For small stuff I use bash / sed / awk / jq / yq / curl etc.", "excerpt": "For small stuff I use bash / sed / awk / jq / yq / curl etc. I stopped using perl (a long time ago) and hate trying to build or distribute anything in Python. \"You asked for a script! I give you... a venv, a pip install, woops need to compile something, so let's install build tools. Actually let's get github actions set up to handle this, or would you prefer a Docker image? Do you have a registry so I can share the i", "context": "", "use_case": "small scripts", "switched_from": "", "story": "Amber the programming language compiled to Bash/Ksh/Zsh"}, {"id": 740140964, "item_id": 46258810, "url": "https://news.ycombinator.com/item?id=46258810", "by": "pxc", "date": "2025-12-13", "stance": "recommend", "quote": "it becomes a lot less painful when I can just pull in `jq`", "excerpt": "> If a script is simple - I use posix sh + awk, sed, etc. > But if a script I write needs to use arrays, sets, hashtable or processes many files One option that I sometimes use at work (in addition to writing some Python CLIs) that is a pretty nice next step on this spectrum is Bash-with-all-the-fixins'. I use a Nix-based dependency resolver for shell scripts called resholve\u00b9 to parse scripts so that it can identify ", "context": "", "use_case": "structured data in shell scripts", "switched_from": "", "story": "Using Python for Scripting"}, {"id": 767338017, "item_id": 47958626, "url": "https://news.ycombinator.com/item?id=47958626", "by": "stop50", "date": "2026-04-29", "stance": "neutral", "quote": "Thanks to jq-lang and the jq-wrapper tomlq", "excerpt": "Thats what i implemented for myself. I made myself pre commit hooks for running clippy nightly and deploying my standard lints(clippy and non-clippy). Thanks to jq-lang and the jq-wrapper tomlq it can even work around the lints/workspace.lints difference with little problems. For myself i have forbidden unwrap/expect, since this can lead to panics. For cases where an unwrap IS unavoidable, i use unsafe {unwrap_unchec", "context": "", "use_case": "processing lint config", "switched_from": "", "story": "Your Rust Clippy Config Should Be Stricter"}]}, {"label": "API debugging", "summary": "Piping curl into jq inspects API responses in seconds without opening Postman.", "quotes": [{"id": 761691456, "item_id": 47605716, "url": "https://news.ycombinator.com/item?id=47605716", "by": "artakulov", "date": "2026-04-01", "stance": "recommend", "quote": "jq piped with curl for API debugging.", "excerpt": "jq piped with curl for API debugging. Sounds obvious but I still see people open Postman for things that take 10 seconds in the terminal. `curl -s url | jq '.data[] | {id, status}'` and you're done. Also `entr` for file watching \u2014 `ls *.js | entr -r node build.js`. Replaced like three different watch tools for me.", "context": "", "use_case": "API debugging", "switched_from": "", "story": "Ask HN: What dev tools do you rely on that nobody talks about?"}, {"id": 799553424, "item_id": 49972089, "url": "https://news.ycombinator.com/item?id=49972089", "by": "JohnBooty", "date": "2026-10-05", "stance": "recommend", "quote": "5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us.", "excerpt": "A lot of APIs we use return JSON - Github, Semaphore, Context7, Docker, etc. We're parsing JSON dozens of times per session. I think 5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us. I eagerly await your misunderstanding!", "context": "", "use_case": "parsing JSON in agent sessions", "switched_from": "", "story": "Agents don't need memory, they need documentation"}]}, {"label": "Expressive language", "summary": "Praised as an extremely good language for its task, with an interesting VM underneath.", "quotes": [{"id": 781868512, "item_id": 48866782, "url": "https://news.ycombinator.com/item?id=48866782", "by": "isityettime", "date": "2026-07-10", "stance": "recommend", "quote": "I love jq, though. It provides an extremely good language for its task", "excerpt": "> it's almost a programming language It is a programming language. That thing you write between single quotation marks when you invoke jq is a program. (And like with other programming languages, it's often useful to write your jq programs to files instead of always writing them inline in the shell.) I love jq, though. It provides an extremely good language for its task, even if I often have to take a look at the man", "context": "", "use_case": "JSON processing", "switched_from": "", "story": "Good Tools Are Invisible"}, {"id": 760651984, "item_id": 47540749, "url": "https://news.ycombinator.com/item?id=47540749", "by": "bouk", "date": "2026-03-27", "stance": "recommend", "quote": "it's kind of mind-blowing how it works under the hood", "excerpt": "I highly recommend anyone to look at jq's VM implementation some time, it's kind of mind-blowing how it works under the hood: https://github.com/jqlang/jq/blob/master/src/execute.c It does some kind of stack forking which is what allows its funky syntax", "context": "", "use_case": "JSON processing", "switched_from": "", "story": "A Faster Alternative to Jq"}]}, {"label": "Git filters", "summary": "Works well as a Git clean filter that strips output from Jupyter notebooks.", "quotes": [{"id": 738864704, "item_id": 46179044, "url": "https://news.ycombinator.com/item?id=46179044", "by": "gucci-on-fleek", "date": "2025-12-06", "stance": "recommend", "quote": "I use a long \"jq\" command [0] as a Git clean filter for my Jupyter notebooks, and it works really well.", "excerpt": "> On the note of Jupyter notebooks and version control - there was a talk at this year's Pycon Ireland about using a built in cleaner for notebooks when committing the JSON (discard the cell results) Yup, I use a long \"jq\" command [0] as a Git clean filter for my Jupyter notebooks, and it works really well. I use a similar program [1] for Mathematica notebooks, and it also works really well. [0]: https://stackoverflo", "context": "", "use_case": "cleaning Jupyter notebooks for git", "switched_from": "", "story": "Wolfram Compute Services"}]}], "caveats": [{"label": "Syntax learning curve", "summary": "Writing non-trivial programs often requires checking the manual, and the syntax is described as funky.", "quotes": [{"id": 781868512, "item_id": 48866782, "url": "https://news.ycombinator.com/item?id=48866782", "by": "isityettime", "date": "2026-07-10", "stance": "recommend", "quote": "I love jq, though. It provides an extremely good language for its task", "excerpt": "> it's almost a programming language It is a programming language. That thing you write between single quotation marks when you invoke jq is a program. (And like with other programming languages, it's often useful to write your jq programs to files instead of always writing them inline in the shell.) I love jq, though. It provides an extremely good language for its task, even if I often have to take a look at the man", "context": "", "use_case": "JSON processing", "switched_from": "", "story": "Good Tools Are Invisible"}, {"id": 760651984, "item_id": 47540749, "url": "https://news.ycombinator.com/item?id=47540749", "by": "bouk", "date": "2026-03-27", "stance": "recommend", "quote": "it's kind of mind-blowing how it works under the hood", "excerpt": "I highly recommend anyone to look at jq's VM implementation some time, it's kind of mind-blowing how it works under the hood: https://github.com/jqlang/jq/blob/master/src/execute.c It does some kind of stack forking which is what allows its funky syntax", "context": "", "use_case": "JSON processing", "switched_from": "", "story": "A Faster Alternative to Jq"}]}, {"label": "Pretty printing", "summary": "One commenter prefers FracturedJson's pretty-printed output to jq's.", "quotes": [{"id": 792588129, "item_id": 49536758, "url": "https://news.ycombinator.com/item?id=49536758", "by": "OskarS", "date": "2026-09-02", "stance": "compare", "quote": "I much prefer fracjson[0] pretty printing to jq", "excerpt": "Lovely little alias, but I much prefer fracjson[0] pretty printing to jq, so I might go with that instead! [0]: https://github.com/j-brooke/FracturedJson", "context": "", "use_case": "formatting JSON", "switched_from": "", "story": "Using jq to format JSON on the clipboard"}]}], "who": [{"by": "wenc", "context": "ML work with agents", "url": "https://news.ycombinator.com/item?id=47209977", "date": "2026-03-01"}], "tags": ["for API debugging", "for AI coding agents", "for shell scripting", "for Jupyter notebooks in Git"], "use_cases": ["json processing", "parsing json in agent sessions", "formatting json", "small scripts", "json processing in llm pipelines", "processing lint config"], "compared": [{"slug": "nushell", "name": "Nushell", "co": 2, "switched_from": 0, "switched_to": 1}, {"slug": "jaq", "name": "jaq", "co": 2, "switched_from": 0, "switched_to": 1}, {"slug": "fracturedjson", "name": "FracturedJson", "co": 1, "switched_from": 0, "switched_to": 1}, {"slug": "bash", "name": "Bash", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "ripgrep", "name": "ripgrep", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "curl", "name": "curl", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=49945933", "title": "Agents don't need memory, they need documentation", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49535324", "title": "Using jq to format JSON on the clipboard", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48822441", "title": "Amber the programming language compiled to Bash/Ksh/Zsh", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48858121", "title": "Good Tools Are Invisible", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48490939", "title": "How a New DSL May Survive in the Era of LLMs", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47956602", "title": "Your Rust Clippy Config Should Be Stricter", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"recommend": 2}, "2026-01": {}, "2026-02": {}, "2026-03": {"recommend": 2}, "2026-04": {"recommend": 1, "neutral": 2}, "2026-05": {}, "2026-06": {"neutral": 1}, "2026-07": {"recommend": 1, "neutral": 1}, "2026-08": {}, "2026-09": {"compare": 1}, "2026-10": {"recommend": 1}}, "quotes": [{"id": 799553424, "item_id": 49972089, "url": "https://news.ycombinator.com/item?id=49972089", "by": "JohnBooty", "date": "2026-10-05", "stance": "recommend", "quote": "5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us.", "excerpt": "A lot of APIs we use return JSON - Github, Semaphore, Context7, Docker, etc. We're parsing JSON dozens of times per session. I think 5-6 tokens telling it to use `jq` in AGENTS.md was the right call for us. I eagerly await your misunderstanding!", "context": "", "use_case": "parsing JSON in agent sessions", "switched_from": "", "story": "Agents don't need memory, they need documentation"}, {"id": 792588129, "item_id": 49536758, "url": "https://news.ycombinator.com/item?id=49536758", "by": "OskarS", "date": "2026-09-02", "stance": "compare", "quote": "I much prefer fracjson[0] pretty printing to jq", "excerpt": "Lovely little alias, but I much prefer fracjson[0] pretty printing to jq, so I might go with that instead! [0]: https://github.com/j-brooke/FracturedJson", "context": "", "use_case": "formatting JSON", "switched_from": "", "story": "Using jq to format JSON on the clipboard"}, {"id": 782071347, "item_id": 48879459, "url": "https://news.ycombinator.com/item?id=48879459", "by": "raffraffraff", "date": "2026-07-12", "stance": "neutral", "quote": "For small stuff I use bash / sed / awk / jq / yq / curl etc.", "excerpt": "For small stuff I use bash / sed / awk / jq / yq / curl etc. I stopped using perl (a long time ago) and hate trying to build or distribute anything in Python. \"You asked for a script! I give you... a venv, a pip install, woops need to compile something, so let's install build tools. Actually let's get github actions set up to handle this, or would you prefer a Docker image? Do you have a registry so I can share the i", "context": "", "use_case": "small scripts", "switched_from": "", "story": "Amber the programming language compiled to Bash/Ksh/Zsh"}, {"id": 781868512, "item_id": 48866782, "url": "https://news.ycombinator.com/item?id=48866782", "by": "isityettime", "date": "2026-07-10", "stance": "recommend", "quote": "I love jq, though. It provides an extremely good language for its task", "excerpt": "> it's almost a programming language It is a programming language. That thing you write between single quotation marks when you invoke jq is a program. (And like with other programming languages, it's often useful to write your jq programs to files instead of always writing them inline in the shell.) I love jq, though. It provides an extremely good language for its task, even if I often have to take a look at the man", "context": "", "use_case": "JSON processing", "switched_from": "", "story": "Good Tools Are Invisible"}, {"id": 775992480, "item_id": 48499530, "url": "https://news.ycombinator.com/item?id=48499530", "by": "williamcotton", "date": "2026-06-11", "stance": "neutral", "quote": "jq is what, 15 years old? I see LLMs using it all the time.", "excerpt": ">So really, if you want to do something you'd normally use a DSL for, you should be talking to your AI, and telling the AI to encode it into computer-speak. Binary files, libraries, programs, composeable piped applications. The AI can take what you think and turn it into a regular old computer program, just as easy as you would write a DSL. But you don't need a DSL to do this; the AI can already program. I use LLMs t", "context": "", "use_case": "JSON processing in LLM pipelines", "switched_from": "", "story": "How a New DSL May Survive in the Era of LLMs"}, {"id": 767338017, "item_id": 47958626, "url": "https://news.ycombinator.com/item?id=47958626", "by": "stop50", "date": "2026-04-29", "stance": "neutral", "quote": "Thanks to jq-lang and the jq-wrapper tomlq", "excerpt": "Thats what i implemented for myself. I made myself pre commit hooks for running clippy nightly and deploying my standard lints(clippy and non-clippy). Thanks to jq-lang and the jq-wrapper tomlq it can even work around the lints/workspace.lints difference with little problems. For myself i have forbidden unwrap/expect, since this can lead to panics. For cases where an unwrap IS unavoidable, i use unsafe {unwrap_unchec", "context": "", "use_case": "processing lint config", "switched_from": "", "story": "Your Rust Clippy Config Should Be Stricter"}, {"id": 762692144, "item_id": 47668259, "url": "https://news.ycombinator.com/item?id=47668259", "by": "kator", "date": "2026-04-06", "stance": "neutral", "quote": "using jq, ripgrep, and the messages[2] flagged in the stop guard script", "excerpt": "I put together a quick audit to check for \"early landing\" messages[1] using jq, ripgrep, and the messages[2] flagged in the stop guard script. I have noticed a trend in these sessions asking more and more about calling it a day, \"it's getting late,\" and other phrases. I sort of assumed it was some kind of \"load shedding\" on Anthropic's side. My audit of 80 sessions was interesting. Sorry, I won't share details, but I", "context": "", "use_case": "auditing Claude Code sessions", "switched_from": "", "story": "Claude Code is unusable for complex engineering tasks with the Feb updates"}, {"id": 761691456, "item_id": 47605716, "url": "https://news.ycombinator.com/item?id=47605716", "by": "artakulov", "date": "2026-04-01", "stance": "recommend", "quote": "jq piped with curl for API debugging.", "excerpt": "jq piped with curl for API debugging. Sounds obvious but I still see people open Postman for things that take 10 seconds in the terminal. `curl -s url | jq '.data[] | {id, status}'` and you're done. Also `entr` for file watching \u2014 `ls *.js | entr -r node build.js`. Replaced like three different watch tools for me.", "context": "", "use_case": "API debugging", "switched_from": "", "story": "Ask HN: What dev tools do you rely on that nobody talks about?"}, {"id": 760651984, "item_id": 47540749, "url": "https://news.ycombinator.com/item?id=47540749", "by": "bouk", "date": "2026-03-27", "stance": "recommend", "quote": "it's kind of mind-blowing how it works under the hood", "excerpt": "I highly recommend anyone to look at jq's VM implementation some time, it's kind of mind-blowing how it works under the hood: https://github.com/jqlang/jq/blob/master/src/execute.c It does some kind of stack forking which is what allows its funky syntax", "context": "", "use_case": "JSON processing", "switched_from": "", "story": "A Faster Alternative to Jq"}, {"id": 755359632, "item_id": 47209977, "url": "https://news.ycombinator.com/item?id=47209977", "by": "wenc", "date": "2026-03-01", "stance": "recommend", "quote": "There are two CLIs are particularly powerful for working with large structured data: `jq` and `duckdb` cli.", "excerpt": "MCPs (especially remote MCPs) are like a black box API -- you don't have to install anything, provision any resources, etc. You just call it and get an answer. There's a place for that, but an MCP is ultimately a blunt instrument. CLI tools on the other hand are like precision instruments. Yes, you have to install them locally once, but after that, they have access to your local environment and can discover things on", "context": "ML work with agents", "use_case": "probing large JSON data", "switched_from": "", "story": "MCP is dead. Long live the CLI"}, {"id": 740140964, "item_id": 46258810, "url": "https://news.ycombinator.com/item?id=46258810", "by": "pxc", "date": "2025-12-13", "stance": "recommend", "quote": "it becomes a lot less painful when I can just pull in `jq`", "excerpt": "> If a script is simple - I use posix sh + awk, sed, etc. > But if a script I write needs to use arrays, sets, hashtable or processes many files One option that I sometimes use at work (in addition to writing some Python CLIs) that is a pretty nice next step on this spectrum is Bash-with-all-the-fixins'. I use a Nix-based dependency resolver for shell scripts called resholve\u00b9 to parse scripts so that it can identify ", "context": "", "use_case": "structured data in shell scripts", "switched_from": "", "story": "Using Python for Scripting"}, {"id": 738864704, "item_id": 46179044, "url": "https://news.ycombinator.com/item?id=46179044", "by": "gucci-on-fleek", "date": "2025-12-06", "stance": "recommend", "quote": "I use a long \"jq\" command [0] as a Git clean filter for my Jupyter notebooks, and it works really well.", "excerpt": "> On the note of Jupyter notebooks and version control - there was a talk at this year's Pycon Ireland about using a built in cleaner for notebooks when committing the JSON (discard the cell results) Yup, I use a long \"jq\" command [0] as a Git clean filter for my Jupyter notebooks, and it works really well. I use a similar program [1] for Mathematica notebooks, and it also works really well. [0]: https://stackoverflo", "context": "", "use_case": "cleaning Jupyter notebooks for git", "switched_from": "", "story": "Wolfram Compute Services"}]}