Show HN: qqqa – A fast, stateless LLM-powered assistant for your shell

github.com

133 points by iagooar 17 hours ago

I built qqqa as an open-source project, because I was tired of bouncing between shell, ChatGPT / the browser for rather simple commands. It comes with two binaries: qq and qa.

qq means "quick question" - it is read-only, perfect for the commands I always forget.

qa means "quick agent" - it is qq's sibling that can run things, but only after showing its plan and getting an approval by the user.

It is built entirely around the Unix philosophy of focused tools, stateless by default - pretty much the opposite of what most coding agent are focusing on.

Personally I've had the best experience using Groq + gpt-oss-20b, as it feels almost instant (up to 1k tokens/s according to Groq) - but any OpenAI-compatible API will do.

Curious if the HN crowd finds it useful - and of course, AMA.

baalimago 15 hours ago

For inspiration (and, ofc, PR since I'm salty that this gets attention while my pet project doesn't), you can checkout clai[0] which works very similarly but has a year or so's worth of development behind it.

So feature suggestions:

* Pipe data into qq ("cat /tmp/stacktrace | qq What is wrong with this: "),

* Profiles (qq -profile legal-analysis Please checkout document X and give feedback)

* Conversations (this is simply appending a new message to a previous query)

[0]: https://github.com/baalimago/clai/blob/main/EXAMPLES.md

  • iagooar 15 hours ago

    The net is vast and more often than not we miss the good things out there.

    A little anecdote: a few years ago I published an open source library that for many years would go completely underappreciated. For a few years I did not even check it - and then one day I realized it had over 500 stars on GH (+700 today). Good things take time.

    Appreciate the ideas!

etaioinshrdlu 7 hours ago

I can suggest our service (previously here https://news.ycombinator.com/item?id=44849129 ) that might be helpful -- If you want a zero-setup backend to try qqqa, ch.at might be a useful option. We built ch.at — a single-binary, OpenAI‑compatible chat service with no accounts, no logs, and no tracking. You can point qqqa at our API endpoint and it should “just work”:

OpenAI-compatible endpoint: https://ch.at/v1/chat/completions (supports streamed responses)

Also accessible via HTTP/SSH/DNS for quick tests: curl ch.at/?q=… , ssh ch.at Privacy note: we don’t log anything, but upstream LLM providers might...

  • iagooar 6 hours ago

    That would be pretty cool for testing the waters, will give it a thought!

    How do you guys pay for this? I guess the potential for abuse is huge.

    • etaioinshrdlu 5 hours ago

      Cool! Right now it's just IP address rate limiting and the costs have not mattered too much, but yes long term I am not sure what we'll do...

pmarreck 15 hours ago

Just about everyone has already written one of these. Mine are called "ask" and "please". My "ask" has a memory though, since I often needed to ask followup questions:

https://github.com/pmarreck/dotfiles/blob/master/bin/ask

I have a local version of ask that works with ollama: https://github.com/pmarreck/dotfiles/blob/master/bin/ask_loc...

And here is "please" as in "please rename blahblahblah in this directory to blahblah": https://github.com/pmarreck/dotfiles/blob/master/bin/please

  • iagooar 15 hours ago

    I can type qq faster than you can type ask. Even more so with qa vs please ;)

    • baalimago 10 hours ago

      Length of the binaries name doesn't really matter though as one easily can "alias please=p"

sheepscreek 11 hours ago

On the stateless part - I increasingly believe that state keeping is an absolute necessity. Not necessarily across requests but on the local storage. Handoffs are proving invaluable in overcoming context limitations and I would like more tools to support a higher level of coordination and orchestration across sessions and with sub-agents.

I believe the best “worker” agents of the future are going to be great at following instructions, have a fantastic intuition but not so much knowledge. They’ll be very fast but will need to retain their learnings so they can build on it, rather than relearning everything in every request - which is slow and a complete waste a resources. Much like what Claude is trying to achieve with skills.

I’m not suggesting that every tool reinvent this paradigm in its own unique way. Perhaps we a single system that can do all the necessary state keeping so each tool can focus on doing its job really well.

Unfortunately, this is more art than science - for example, asking each model to carry out handoff in the expected way will be a challenge. Especially on current gen small models. But many people are using frontier models, that are slowly converging in their intuition and ability to comprehend instructions. So it might still be worth the effort.

d4rkp4ttern 15 hours ago

I built a similar tool called “lmsh” (LM shell) that uses Claude-code non-interactive mode (hence no API keys needed, since it uses your CC subscription): it presents the shell command on a REPL like line that you can edit first and hit enter to run it. Used Rust to make it a bit snappier:

https://github.com/pchalasani/claude-code-tools?tab=readme-o...

It’s pretty basic, and could be improved a lot. E.g make it use Haiku or codex-CLI with low thinking etc. Another thing is have it bypass reading CLAUDE.md or AGENTS.md. (PRs anyone? ;)

  • iagooar 15 hours ago

    This a pretty neat approach, indeed. Having to use the API might be an inconvenience for some people indeed. I guess having the Claude or ChatGPT subscription and using it with the CLI tools is what makes developers stick with these tools, instead of using what is out there.

    • d4rkp4ttern 15 hours ago

      Right, when we’re already paying $100 or $200 per month, leveraging that “almost-all-you-can eat buffet” is always going to be more attractive than spending more on per token API billing.

stevedsimkins 15 hours ago

Feel like this might have already been done and beyond by aichat (which I give the alias `ai` on my machines)

https://github.com/sigoden/aichat

Nevertheless it’s good to see more tools with the Unix philosophy!

Zetaphor 6 hours ago

I personally prefer aichat, as it allows me the option to copy the command its proposing to the clipboard, iterate further on the prompt, or to describe its choice

https://github.com/sigoden/aichat

krzkaczor 15 hours ago

This is nice. Reminds me how in warp terminal you can (could?) just type `# question` and it would call some LLM under the hood. Good UX.

  • iagooar 15 hours ago

    Thank you - appreciate it. I really tried to create something simple, that solve one problem really well.

insane_dreamer an hour ago

Nice! Do you have plans to make it work with a CC subscription? Great idea but not really interested in paying for another API key

NSPG911 16 hours ago

very cool, can be useful for simple commands, but i find github cli's copilot extension useful for this, i just do `ghcs <question>` and it gives me an command, i can ask it how it works, or make it better, copy it, or run it

iagooar 17 hours ago

And of course, if you find any bugs or feature requests, report them via issues on Github.

RamtinJ95 16 hours ago

This looks really cool and I love the idea but I will stick with opencode run ”query” and for specific agents which have specific models, I can just configure that also in an agent.md then add opencode run ”query” -agent quick

swah 14 hours ago

I usually do this in Raycast but the Groq tip is good...

CGamesPlay 16 hours ago

Looks interesting! Does it support multiple tool calls in a chain, or only terminating with a single tool use?

Why is there a flag to not upload my terminal history and why is that the default?

  • iagooar 16 hours ago

    Thanks!

    It does not support chaining multiple tool calls - if it did, it would not be a lightweight assistant anymore, I guess.

    The history is there to allow referencing previous commands - but now that I think about it, it should clearly not be on by default.

    Going to roll out a new version soon. Thanks for the feedback!

    • CGamesPlay 16 hours ago

      Given that it doesn't support multiple tool calls, one thing I noticed that is not ideal is that it seems to buffer stdout and stderr. This means that I don't see any output if the command takes 10 minutes, and I also can't see stdout mixed with stderr. It would be ideal to actually "exec" the target process instead, honestly. https://doc.rust-lang.org/std/os/unix/process/trait.CommandE...

      • iagooar 15 hours ago

        This one is a bit tricky. The tool needs the output to process stuff after the AI returns results. And since the focus is on rather short interactions, this is an OK-ish tradeoff I believe. But I will give it a couple more thoughts, not saying no to it, but need to go through the possible ramifications.

armcat 16 hours ago

One mistake in your README - groq throughput is actually 1000 tokens per "second" (not "minute"), for gpt-oss-20b.

  • iagooar 16 hours ago

    Nice catch - fixed!

ripped_britches 9 hours ago

I’ve used sgpt and really liked that as prior art

psychoslave 13 hours ago

Can it run local LLM with quick parameters?

  • iagooar 13 hours ago

    I would like to add support, but I do not have a computer powerful enough to run an LLM fast enough, so I am not able to test.

    Is it possible to use an OpenAI-compatible API locally, or how does that work?

flashu 16 hours ago

Good one, but I do not see release for MacOS :(

  • iagooar 16 hours ago

    Darwin is the MacOS release - should make that clear - will update readme. Thanks.

    • shellfishgene 16 hours ago

      I don't see any binaries on github?

      • flashu 16 hours ago

        That was my point, nothing in releases on GH

        • iagooar 15 hours ago

          The readme clearly links to releases. I am not using GH releases, but that does not mean they are not there.

          • imcritic 14 hours ago

            Pushing releases right into the repository? That's kinda nuts.

            • iagooar 14 hours ago

              Just learned something new! Will soon change how releases are delivered, fixing a few other issues I got reported.

              • imcritic 9 hours ago

                If you were unaware that such approach is frowned upon then you might also not know that even if you delete the binary files from your git - they will stay there and thus be bloating your repository forever. To truly cut them away from the repository you will need to use some special instruments that will rewrite git history while trying to remove the bloat and the downside of that is that commits checksums will change and you will essentially have to force push existing commits but with new checksums.

                • iagooar 9 hours ago

                  Point taken. The files were really small, no need to exaggerate.

kissgyorgy 16 hours ago

There is also the llm tool written by simonwillison: https://github.com/simonw/llm

I personally use "claude -p" for this

  • iagooar 16 hours ago

    Compared to the llm tool, qqqa is as lightweight as it gets. In the Ruby world it would be Sinatra, not Rails.

    I have no interest in adding too many complex features. It is supposed to be fast and get out of your way.

    Different philosophies.

foobarqux 11 hours ago

llm cmdcomp is better:

    - it puts the command in the shell editor line so you can edit it (for example to specify filenames using the line editor after the fact and make use of the shell tools like glob expansion etc.) 
    - it goes into the history. 
    - It can use a binding so you can start writing something without remembering to prefix it with a command and invoke the cmd completion at any place in the line editor. 
    - It also allows you to refine the command interactively.
I haven't see any of the other of the myriad of tools do these very obvious things.

https://github.com/CGamesPlay/llm-cmd-comp

  • iagooar 9 hours ago

    Thanks. I guess it all depends on the perspective. I do not see how editing the command is a good tradeoff here in terms of complexity+UI. Once you get the command suggested by the LLM, you can quickly copy and modify it, before running it.

    qqqa uses history - although in a very limited fashion for privacy reasons.

    I am taking note of these ideas though, never say never!

    • foobarqux 7 hours ago

      > Once you get the command suggested by the LLM, you can quickly copy and modify it, before running it.

      Copying and pasting tends to be a very tedious operation in the shell, which usually requires moving your hands away from the keyboard to the mouse (there are terminals which allow you to quick-select and insert lines but they are still more tedious than simply pressing enter to have the command on the line editor). Maybe try using llm-cmd-comp for a while.

      > I do not see how editing the command is a good tradeoff here in terms of complexity+UI.

      I don't find it a tradeoff, I think it's strictly superior in every way including complexity. llm-cmd-comp is probably the way I most often interface with llms (maybe second to basic search-engine-replacement) and I almost always either 1. don't have the file glob or the file names themselves ready (they may not exist yet!) at the time when I want to start writing the command or they are easier to enter using a fuzzy selector like fzf 2. don't want the llm to do weird things with globs when I pass them directly and having the shell expand them is usually difficult because the prompt is not a command (so the completion system won't do the right thing).

      But even in your own demo it is faster to use llm-cmd-comp and you also get the benefit that the command goes into the history and you can optionally edit it if you want or further revise the prompt! It does require pressing enter twice instead of "y" but I don't find that a huge inconvenience especially since I almost always edit the command anyway.

      Again, try installing llm-cmd-comp and try out your demo case.

_vxgq 15 hours ago

[flagged]

  • iagooar 15 hours ago

    It is highly disturbing that you would go through my private profiles and nicknames to prove what? Ever heard of nicknames on the Internet? Ever heard a person can have multiple projects over the many years?

    I published an open source library, it is not even v1.0 yet.

    I kindly ask you to delete this comment.

    • bee_rider 15 hours ago

      The act of looking is normal. Running your code on their computer requires a lot of trust, after all.

      But there’s nothing suspicious about having multiple nicknames. I don’t really get what they are talking about there.

      • alt187 15 hours ago

        Looking is. Sharing, I'm not so sure? At least for me, it crosses a boundary.

        Especially since it's looking and sharing for something as irrelevant as "HN name doesn't check out!"

        • acdha 14 hours ago

          I think it’s reasonable: just look at how many scams there have been over the last few years since cryptocurrency made it so easy to convert running code into money. The open source world is not what it was a couple decades ago and it’s reasonable to have the discussion about how to trust someone in a way which might have seemed obsessive twenty years ago, similar to how we used to think realistic faked images were hard to make and thus uncommon but now have to think about provenance for everything.

          • alt187 14 hours ago

            The point is that there was exactly nothing of suspicion.

            This was to correct the doubt that the HN poster was not the same person as the GitHub user.

            Conceding to you that a search can be useful, GP could've stopped at "The github is old and the person has other reputable projects". There was no reason to expand to the LinkedIn.

            • _vxgq 14 hours ago

              If there is something of suspicion or not lies in the eye of the beholder.

              Only LinkedIn showed the link between the HN profile and the Github profile, because it lists both the project mentioned on the HN profile as well as the project listed in the Github profile.

              • alt187 12 hours ago

                > If there is something of suspicion or not lies in the eye of the beholder.

                That may tell more about the beholder than you think.

                > Only LinkedIn showed the link between the HN profile and the Github profile, because it lists both the project mentioned on the HN profile as well as the project listed in the Github profile.

                What if there was no link between the HN profile and GitHub, then? Would you conclude that, because you can't reliably link the HN profile to the GitHub profile (that was independently already trustworthy), this would make the project seem suspicious?

                In other words -- Would your projects be more suspicious, if I, a total stranger, made Show HNs about them?

                You're seeing my point, don't you?

        • bee_rider 15 hours ago

          If it were a legitimately suspicious issue, I’d think sharing was the right thing to do.

          I disagree with the idea that having multiple nicknames is suspicious, though. But, if that is something the poster believes, I guess I can see why they’d share it.

          • _vxgq 14 hours ago

            I am absolutely, perfectly, 100% fine with how OP structures, manages, names, and presents his online profiles.

            After the latest fun incidents with NPM and others, I just wanted to make a point how the way the project is currently "marketed" and distributed — and again, PERFECTLY fine for a first draft and "look what I built" — might stand in the way of it getting further traction.

            And I did so in a very stream-of-consciousness way, trying to illustrate what I mean by "Trust & Safety issue".

            • bee_rider 14 hours ago

              I still don’t see the issue. There’s a HackerNews account and a GitHub account. The HackerNews account could be some random person.

              All of the other aspects of identity are on the other side, the GitHub account with the real name, other projects, a reputation. So then, consider the Hackernews account to be some random, start the check-out at the GitHub, and you don’t see anything particularly suspicious.

    • darkwater 15 hours ago

      Private if they are on the Internet? They are not private at all. Your answer to the OP comment is frankly... wrong.

      • iagooar 15 hours ago

        I guess you are partially right. Still, this feels much unsolicited.

    • alt187 15 hours ago

      Frankly, I second that sentiment.

      I'm not sure how extensive your search was to find OP's LinkedIn, but it's clearly not in his HN profile, and that's enough to be unwarranted imho.

      • _vxgq 15 hours ago

        I say this with the utmost respect, but: are you guys serious?

        It was YOU, iagooar, who posted a "Show HN" here with a link to the following URL: https://github.com/matisojka/qqqa

        This is a public web site hosted on Github, and it belongs to the Github user matisojka, whose public Github profile is at https://github.com/matisojka, containing, in public, the full name "[name-redacted]" — put there by no other than yourself!

        You came here to promote your tool, asking for feedback ("Curious if the HN crowd finds it useful"), so YOU expect me to download and run YOUR software on MY system, and therefore trusting your software to not wreck havoc on my personal computer system.

        And then flip out if I dare to do a quick, superficial cross-check on whose software I'm installing? Using only public information that you yourself put onto the Internet on public pages yourself?

        Are you seriously suggesting that I broke into private web sites or computer systems in order to illegally retrieve information that was not meant for public eyes? Like, seriously?

        "go through my private profiles" -> can you point at a SINGLE private profile that I went through? Just ONE?

        You asked for feedback. Your literally wrote "AMA" — "Ask me anything".

        And all I did was just that: asking you to understand that if you want this project to gain traction, that the nature of the way it is currently distributed, and the way that the Apple ecosystem treats it, might be a roadblock for this.

        A roadblock for a project that I love and want to see succeed.

        • pmarreck 15 hours ago

          you could have avoided all that (including all the awkwardness) just by inspecting the open-source source code, my man. no need to google the author to see if he passes your personal "sniff tests". Have you done that for the authors of your OS, your browser, and your routers too?o I mean, Apple isn't even open-source; they could be sending all manner of things to their servers that you wouldn't be happy about, and you wouldn't know

          • imcritic 14 hours ago

            > inspecting the open-source source code

            But how does one open the open-source source code?

            • _vxgq 14 hours ago

              Definitely don't look at any Github profile names while doing so please!

  • alt187 15 hours ago

    So if the random guy who posted it on HN wasn't the OP, it would've been a thousand times more untrustworthy, obviously?

    I don't see your point, and I squinted very hard.

    • iagooar 15 hours ago

      And since when does publishing open source software require you to present any credentials at all? I am not hiding anything, I just published using my regular accounts - some of which I have been using for more than a decade.

      • _vxgq 15 hours ago

        Where exactly did I say that "publishing open source software require[s] you to present any credentials"?

        That is not the point of my original comment.

        The point of my original comment was that downloading and using software from the Internet is a process that requires trust, at least if you want your project to gain traction, and that this specific project might have — at least to some people — road blocks in this regard.

  • _vxgq 9 hours ago

    Hey dang, can you please remove the above comment 45834359, as per iagooar's request?

    I don't see an option for removal on the HN ui.

    Same for 45834692 if possible, as this also contains the name.

  • hombre_fatal 15 hours ago

    Mate, it's a free project on github they shared with us. Let's keep things in perspective.

    • _vxgq 15 hours ago

      The perspective is that it is a free project shared on Github which prompts a OS-level warning message on macOS, which might certainly intimidate some people.

      I really want to see this project succeed, and thus gave feedback on this — what else is a "Show HN" good for, then?

      • hombre_fatal 13 hours ago

        But you're raising the alarm over a standard expectation which suggests an unfamiliarity with the norms here. It's like you're confusing it with an anti-virus alert. They already know about the warning since that's what all software does on macOS until it's notarized.

        For them to avoid that Gatekeeper warning, they would have to pay Apple $100 and then notarize their executable through Apple for their hobby project with 30 commits.

        This isn't something we'd expect OP to do for this project.

        Also the Gatekeeper warning is kind of a norm among developer tools. You can see it in much more popular projects. Just today `brew install --cask syncthing` triggered it when I went to open it. You're trying to be helpful but I hope you find this comment helpful as well.

        Finally, all of that is beside the issue of digging up someone's linkedin profile and pseudonyms for the crime of sharing a tool with us that wasn't notarized with a $100 Apple permission slip.

      • imcritic 14 hours ago

        A lack of such a prompt would mean nothing from security point of view. It's not like you run a program you used regularly and now all of a sudden such a warning appears (as if someone replaced the program's binary with another one). You did download this program manually from the internet, the warning is basically just about that.

        • _vxgq 14 hours ago

          Yes, but the target group of this project is not "me". It's potentially many people, and I assume (maybe incorrectly) that the author wants their project to succeed and gain traction.