· via Hacker News – Front Page (native)
TERMy maps natural language to shell commands with no LLM involved
The open-source assistant matches plain-language requests to shell commands using editable JSON datasets, vocabulary tags and regex extraction, no model, no API cost, instant responses.
What TERMy does
TERMy is an open-source terminal assistant that turns short natural-language requests, such as "list files" or "create file test.txt", into shell commands without any LLM, embedding or other machine learning in the loop. It debuted on Hacker News as a Show HN post, accompanied by a development log by its author, GitHub user gioblu, documenting the dead ends that led to the deterministic design.
According to that write-up, the author, previously known for the PJON network protocol that ETH Zurich researchers later implemented in silicon, spent roughly two months on the project starting in early July. The motivation was partly economic: rising AI prices and the end of heavily subsidized token consumption, combined with the author's habit of asking a coding assistant to perform trivial operations like activating a virtual environment, small requests that still accumulated on the monthly bill. The guiding question was whether trillions of parameters are genuinely necessary for that class of task.
The experiments that did not work
The write-up describes two abandoned approaches. The first was a transformer training framework built from scratch in Python, comparable to NanoGPT at 100 to 200 million parameters and later extended with flash attention and experiments with architectures such as Mamba. Training ran on an aging gaming machine with 16GB of RAM, a 4GB NVIDIA GTX 1050 Ti and an i7-4790K, using Project Gutenberg books, open-source software and various Hugging Face datasets. The resulting models produced incoherent output, fell into repetitive loops and rarely answered technical questions reliably; a proper run was estimated to require at least a month of continuous training. The author's verdict was that the models felt strangely alive yet were wasteful and practically useless for the goal.
The second approach used ollama with open-weight models through a harness called howto, which pre-prompts the model to respond only with terminal commands. Models such as ornith:9b, mistral:7b and cogito:14b occasionally delivered, but latency and unreliability, especially with only 4GB of VRAM, ruled them out for everyday use.
How the deterministic parser works
The final design carries three explicit constraints: no embeddings, no machine learning, no LLMs. Everything runs on structured data.
Knowledge is stored in the NDF 0.0 dataset format, part of the author's NPC-Forge project. Each JSON entry pairs a category, example phrasings, a response message, optional "thinking" traces, a permission level and tool calls, typically a run_in_terminal invocation carrying the command, an explanation, a goal and an execution mode. One sample entry maps "list files" to ls -lah. Adding a capability such as Docker commands means dropping a new JSON file into the dataset directory; no retraining or fine-tuning is involved.
Requests with arguments are handled by intent templates. Vocabulary tags such as <||vocab_create||> represent concept groups backed by synonym lists, for example "create", "make", "generate", "craft" and "forge", while typed variables such as a filename slot are extracted with regular expressions. A request like "create file test.txt" matches the template, pulls out the filename and assembles the corresponding command.
The implementation, the FlintParser and FlintNPC classes implementing a natural-language understanding pipeline, totals around 1,000 lines of code. The author reports writing matching implementations in Python for local operating system environments and at least one further target, with the tool-call format described as VS Code-compatible; the published write-up cuts off mid-sentence before naming all platforms.
Safety through permission gating
Every dataset entry carries a permission field, and anything potentially destructive is required to use the "ask" setting, meaning the assistant confirms with the user before executing. The author argues this makes the tool safe by construction, with residual risk confined to bugs in the implementation or in individual dataset entries.
Why it matters
TERMy inverts the assumption that a natural-language interface needs a model behind it. Coverage is bounded by what the datasets encode, and phrasings outside the vocabulary and templates simply will not match. But within that envelope, responses are instant, offline and free, where an LLM-backed CLI spends seconds and per-token cost. The JSON format also makes behaviour fully auditable: every command mapping is human-readable and editable, in contrast to probabilistic model output, which matters when the tool executes shell commands. As AI subscription prices climb, the project is a useful data point that for a defined set of routine terminal tasks, a deterministic matcher may be the more proportionate engineering choice.
- #open-source
- #terminal
- #command-line
- #developer-tools
- #local-first