Shaaf's blog

A technical blog about Java, Kubernetes and things that matter

Introducing rgctl: A Code Knowledge Graph for Engineering Teams and Agents

Index once, query many times — structural facts instead of confident guesses

rgctl turns any repository into a queryable knowledge graph with pre-computed reachability, blast radius, program slicing, taint analysis, and community detection. Built in Rust for speed, designed for LLM agents and humans alike.

Lessons from Building My First Claude Skill - a code tutorial generator

About a year ago, I kicked off (Waver), a project designed to analyze codebases and build developer friendly, readable tutorials. The goal was to generate clean Markdown and Mermaid diagrams so onboarding becomes frictionless and the docs can slide right into existing project pipelines.

I chose Langchain4J for the LLM integration. And in a classic “engineers-quest”, I actually ended up building JGraphlet as well, which came to life while I was trying to squeeze better performance out of the LLM communication.


Modernizing Legacy Code with Konveyor AI: From EJB to Kubernetes

I always enjoy participating in KubeCon. This time it was at the RAI center in Amsterdam. I have been to many conferences and the ones that are the best IMHO are the ones that are very community focused. For example DevNexus for Java, GeeCon for Geeks ;), and obviously KubeCon for everything Kubernetes. And obvsiouly making new friends and connections is a great way of learning from all the cool stuff thats going on. Thats probably enough name dropping for a wednesday ;)


Nano Agent, Mega Senses: Adding LSP to the 260-Line Coding Agent

Learn, learn, and learn more—that’s the name of the game. Coding agents are innovating fast; things are getting bigger and, quite often, bloated. To understand what an agent is actually doing, I’ve found it’s best to go back to the basics. It takes a bit more time, but the expertise you gain along the way sets you up for the long haul." So here I read Max’s post and thought, how about add some more things to this. Fetching ideas… done.. Lets add LSP support.


Using LLMs and MCP to generate static code analysis rules

Scribe is a Model Context Protocol (MCP) server that exposes a single tool: executeKantraOperation. That tool turns structured parameters into YAML rules compatible with Konveyor / Kantra—the static analysis pipeline used for application migration and modernization. This post describes what Scribe does, how it is wired, and concrete examples you can copy.

Static code analyzers are great at what they do. Having the ability to write custom rules is important because it can cover multiple usecases such as, if an organization has their own framework or libraries that do not exist in the public domain. Or to look for patterns or anti-patterns or even best practises such as exceptions, logging etc. It can get quite cumbersome to write these rules and test them. While every conference in the world today buzzes of the word AI, how about we put it to real practise and provide this valuable feature with LLMs. Hence the advent of Scribe MCP server that will write Konveyor Kantra rules for an LLM.