lichess.org
Donate

ChessAgine 1 Year Update: v2

ChessSoftware DevelopmentChess bot
Contains sponsored content, affiliate links or commercial advertisement
"Empty your mind, be formless, shapeless, like water." – Bruce Lee

Intro

Hey all, it's been a while since I posted a blog about Chessagine or any updates in the last few months, but since we are reaching the 1-year point, I thought I'd write a blog about some of the cool updates I've been making on the side to this project.

Untitled design (1).jpg

UI/UX Overhaul

Exactly 6 months ago, though I was making great updates on the AI side of things (which we will get into later in the blog), the UI/UX of the previous Chessagine web app wasn't good enough to keep users satisfied. In general, the app didn't have user-specific settings like Lichess, and the overall theme, as well as the board size for the analysis board and position boards, wasn't that great either. So I decided to make UI adjustments and redesign the entire app such that navigation is on the left-hand side while the app itself stays intact. I also moved away from title navigation headings to user-friendly icons so the user experience is similar on mobile and desktop, giving the app a modern look and feel.

image.png
The above is the modern Chessagine v2 platform; the position and game review pages also got big updates with a modern feel but also better organization that helps users perform chess actions like generating game reviews, annotating games, and seeing game lists and more.

image.pngThe game review page now has better panels and an overall better structure; the board shows two eval bars, one for Maia and one for local Stockfish, making the chatting experience

AI Architecture Change

ChessAgine v2 drops the Chess Context Protocol (CCP), the system I originally built to feed chess context to the AI. It had three problems: it was slow, it did most of its work on the client, and its communication with the server was unreliable. When the AI didn't get the right context, it hallucinated more. In v1, the server's job was small. It gathered context from Stockfish and ChessDB, and CCP on the client piped that context to the AI. That worked while there were only two sources. As ChessAgine added more services (Maia, Lc0, ChessDojo and others), every extra service meant another round trip through the client. A serious chess query could take 60 to 70 seconds to answer. For v2, I moved the whole architecture to an MCP server backend. MCP made the client side simple, and because each MCP tool can map to a single service, the design split naturally into separate services. I built an HTTP-to-MCP adapter that routes each request to the right service. ChessAgine now runs as a cloud-native microservice architecture, and queries need far fewer round trips.
This also changed the local MCP server I wrote about here. Most of the heavy work that used to run on the desktop now runs in the cloud, so the local server uses the same fast microservices. The hardest lesson was about building my own protocol. As a solo developer, a custom protocol meant I had to maintain every part of it myself. Moving to an established standard like MCP was the better choice.

Gemini_Generated_Image_59au9x59au9x59au.jpg

Better CAIx (Chess AI Experience)

With ChessAgine v2, I shifted the app away from its original focus of analyzing positions with LLMs and toward making your life as a chess player a little easier. In v1, ChessAgine was a tool you went to when you wanted position analysis. v2 focuses on the things that tend to annoy chess players and turns Agine AI into a user-friendly companion that helps with the detailed tasks you do day to day. For example, in the ChessAgine chat app, you can connect your Lichess account and ask Agine about recent trends in your games. You can also have it look at your Lichess studies and review a game you've pasted in to see how well it matches a specific opening repertoire. The biggest improvement in this version is how well it integrates with third-party chess apps. With ChessBoardMagic (CBM), Agine can fetch your repertoires, TCEC games and more, so you can have it inspect your opening repertoires and give you written analysis. Because it's working with the right context, that analysis is easier to understand and less prone to AI hallucinations. Agine can also connect to Stockfish, Maia and Leela to analyze specific positions by comparing what each engine sees. It does this as an assistant rather than a coach: it gives you the engine perspectives and helps you understand them, and the conclusions are left to you. Finally, with ChessDojo integration, ChessAgine can pull your training plan and log your training tasks, which makes it easier to keep up with your ChessDojo activities on the fly. Many thanks to the lead developers of ChessBoardMagic, Toan and Jack from ChessDojo, the Lichess open-source dev community, and various other developers making this integration successful!

Gemini_Generated_Image_gkejlvgkejlvgkej.jpg
Behind the scenes, the ChessAgine Chat app uses a Model Context Protocol (MCP) server to connect to integrations, allowing LLMs to get the correct context. Asking "can you analyze my last Lichess game" automatically pulls the ChessAgine Game Reviewer dashboard, allowing you to explore Lichess games, analyze them, and have an assistant answer questions.

image.png

Open Source Philosophy

ChessAgine is still open source and free to use, and that isn't changing. Chess has an unusually generous open-source community. Stockfish, Leela, Lichess and many of the tools Agine connects to exist because people built them in the open and shared them. ChessAgine is built on that work, so keeping it open felt like the right way to give something back. Anyone can read the code, learn from it, or build on it.
image.png

Conclusion

When I started ChessAgine, I thought building something meant deciding what it would be and holding onto that. v2 taught me the opposite. The project only got better once I let it change shape: I dropped a protocol I was proud of, rebuilt the backend from scratch, and let the app become what players actually needed rather than what I first imagined. Water doesn't fight the container it's poured into. It takes the shape it needs and keeps moving. That's the best description I have of how ChessAgine got here, and of how I hope it keeps growing. ChessAgine will keep changing, and I want that change to come from the people who use it. If you've read this far, give ChessAgine, a modern FOSS chess analysis platform a try. Break it, question it, and tell me what annoys you, what's missing, and what you wish it could do. Every piece of feedback has shaped this version, and it will shape the next one too. Thank you to everyone who tested v1, reported bugs, suggested features, and stuck around while it grew. Thank you to the developers whose open-source work made every integration possible. And thank you for reading.

Noob