Releasing Kwaak with Kwaak

Published: at by Timon Vonk

The past weeks we’ve been using Kwaak to release Kwaak. Kwaak is an open-source app we’ve built that allows you to run multiple autonomous agents on your code, in parallel.

It has made several pull requests to our codebase and we’re excited to share it with you. We’ve been using it to fix bugs, improve tests, and make improvements to our codebase. We’ve been tracking all the pull requests created by Kwaak in a github issue.

One of the things we needed to clean up was the CLI. It used a mode flag but it would be much nicer if it would use subcommands. Since I have plenty of other things to do I figured I’d let kwaak do it for me. So I asked it to refactor the cli to subcommands and make a pull request when it was done. And it did! You can see the result here: PR #95.

Kwaak refactors the CLI

Here is a video of kwaak in action:

demo of kwaak refactoring code

At the same time, kwaak was also working on on a few other tasks. Not every task was a success, and we’re excited to share both.

Apparently, LLMs aren’t that good at unicode symbols and nerd fonts. In one of the tasks, it replaced the nerd font icons with donuts.

LLMs love donuts

So what exactly is Kwaak?

Often in engineering we have more small tasks than we can handle. With generative AI rapidly improving, wouldn’t it be cool if we could have autonomous agents fix those tasks for us?

The idea behind Kwaak is that you can set it to work on those tasks, do something else, and when it is done, maybe with some polishing, merge the fixes in. Kwaak is a tool that allows you to run multiple autonomous agents in parallel, on your code.

Kwaak runs inside your terminal. In a chat session, you can instruct the agent to explore, plan, and execute. The agent can run tests, is aware of your code, and has a loaded toolbox to accomplish its task. Once completed, it can create a pull request. Every chat runs in an isolated docker container, agents can run in parallel and can execute code safely.

What can and can’t it do?

When building LLM applications, context is key. Kwaak keeps an updated index of your code, so that it starts with a grounded context of what is needed to do what it has to do. In addition it can search code, run tests, search github and the web, and more.

We’ve run quite a few sessions where it is happily running 5 different tasks in parallel and some time later there are 5 pull requests. To me that feels pretty awesome, I can focus on the fun stuff and get the rest merged in when I’m done with my coffee.

To be completely fair the majority of non-benchmark usage of kwaak we have done has been in Rust. Perhaps the language is a bit harder than most, but it also provides an excellent feedback loop. Even then, the majority of the pull requests it created were either mergeable right away, or needed some minute changes because of nitpicking (thanks me) and details.

We’re releasing this because we think it is cool and we would like to stress that it is not a silver bullet, and we’re not claiming it will magically code your app.

Getting started

You can try out kwaak right away, head over to the github page and follow the install and setup instructions.

Kwaak is open-source

Connect with us on discord and let us know what you think. If you have feedback or ideas, we’d love to hear them!

Working on Kwaak is easy, it’s a straightforward Rust project and there’s loads of small and big improvements you could work on to make Kwaak even better. Contributions are welcome!

We strongly believe that AI generated code is an amazing tool, and it should be transparent when such a tool is used. If you’re an open source maintainer, you’ve probably seen generated pull requests. Pull requests created by kwaak have a footer referencing the github issue. We hope this removes any potential frustration of ‘Oh, another tool that generates code’, and reviewers only figuring that out half way through. If you create a pull request, it is your responsibility. And this removes the question right away on how much the AI did. Bonus is that it helps us track the performance of kwaak and where we can improve.

Conclusion

Kwaak is in its infant stages and we’re excited to ship a concept that works. We think it’s cool and we hope you you do too. We have a large list of improvements and we are very excited about where we can bring Kwaak moving forward.

So far we’ve already had a couple of great ideas and suggestions. Supporting more LLMs and getting changes from an agent in different ways than via a pull request are some of the things we’re looking into.