RSSAmplifier

Blog

Guillaume Laforge

Recent content on Guillaume Laforge

glaforge.devRSS feed ↗325 posts

Latest posts

The Unofficial Antigravity SDK for Java

Before heading for well-deserved vacations, I wanted to share something I’ve been cooking on and off for the past few weeks: an unofficial Java SDK for Antigravity . If you’re familiar with Antigravity , you’ll know it’s available across different surfaces: Antigravity 2.0 : an agent manager for the Antigravity harness, where you can work across multiple projects and…

Running Gemma 4 locally on Mac: Benchmarking Qxotic Jinfer, llama.cpp, MLX, and connecting Java 25 with LangChain4j

As a Java developer, integrating Large Language Models (LLMs) into applications is becoming a core requirement. While cloud APIs like Google Gemini, Anthropic’s Claude, or OpenAI’s GPT are convenient, running models locally on my machine offers lower latency, zero API costs, privacy, and full control over system telemetry. I can even run models disconnected from the internet, when…

Antigravity Brain Visualizer Now With a Contextual Smart Chat

A few weeks ago, I wrote about building the Antigravity Brain Visualizer : a tool to parse raw JSONL transcript logs from Antigravity AI agent sessions and render them into an interactive web interface with proportional timelines and sequence groupings. While visual timeline scrubbing and sequence filtering made it easier to inspect what an agent did, diagnosing complex tool failures or creating…

Open Reasoning Format: Building Self-Learning AI Coding Agents Without Server Infrastructure

When AI coding agents tackle complex tasks, they often waste time making the same mistakes, running into environment quirks, or retrying failed approaches before finding something that works. If an agent encounters a domain-specific trap in one session, that lesson is lost when the next session starts, forcing the agent to repeat the exact same trial-and-error cycle. I built the Open Reasoning…

Selfware: Building my own text editor without knowing Swift

I constantly use a text editor to jot ideas, draft blog posts, or collate documents, but my usual options always felt a bit off. TextEdit is too bare-bones and defaults to a tiny font I can barely read. MacVim takes a few seconds too long to load. VS Code requires me to dismiss plugin updates and changelogs before I can even start typing. I realized I didn’t want another bloated app from a…

Making Sense of Google Agentic Dev Tools

In June, I had the please to come back to Devoxx Poland to give an overview of the various agentic coding tools offered by Google. The big highlight was obviously Antigravity , but I started with Google AI Studio to show the various models in action, as well as how you can vibe code apps, and even deploy them in the cloud (on Google Cloud Run ) or save them on GitHub. In addition to those, I also…

Of Skills and Loops with AI Assistance

For the past few weeks, a lot has been written and said about Loop Engineering , and we’re seeing an explosion of Agent Skills out there for various tasks. These concepts are trendy, but how do they actually translate into day-to-day productivity? Today, I want to testify with a concrete use case where skills and loops helped me become significantly more productive: authoring Google Codelabs…

Creating Images and Videos in Java With the New Nano Banana and Omni Models

Google just announced the launch of some new image and video models: Nano Banana 2 Lite (the fastest, most cost-efficient Gemini Image model yet) and Gemini Omni Flash for high-quality video and conversational editing. You can read all about the announcement on the Google Blog . As soon as I saw the news, I couldn’t wait to get my hands dirty. I wanted to see how easy it would be to generate…

Gemini Interactions API now GA: Exploring the release candidate of my Java SDK

The Google Gemini Interactions API is now generally available (GA). It provides a unified interface for interacting with Gemini models and agents. You can read the official announcement on the Google Blog , and if you are using Python, Philipp Schmid published a helpful developer guide to get started. For Java developers, the Gemini Interactions API SDK for Java is gearing up for its stable…

How I Vibecoded a Philosophy Prep App with Google AI Studio and Gemini

My daughter’s French Bac de Philosophie (philosophy baccalaureate) is tomorrow. Preparing for this examination usually involves reviewing handwritten flashcards, printed handouts, and paper notes. Reviewing these concepts, authors, works, and quotes systematically is a pain. My daughter asked me for a digital tool to help her study, as she knew I had already helped her younger sister with similar…

Building a Visualizer for Antigravity Agentic Development Sessions

When working with autonomous AI agents like Antigravity , understanding what they are doing in the background can be difficult. The agents construct reasoning chains, dispatch background tasks, and execute system commands over long sessions. All of this is recorded in detailed JSONL transcript files. Reading raw JSONL is inefficient, so I built the Antigravity Brain Visualizer to parse and render…

Customizing Antigravity CLI: Title and Status Line

Antigravity CLI allows you to customize both the terminal window title and the bottom status line . This is done by passing a JSON payload of the current agent state to external shell scripts via standard input. In this post, I will explain how I set up my environment, the specific scripts I use, and how to configure the CLI to load them. The Principle Both the title and the status line operate on…

Iterating on Frontend Design with Stitch and Antigravity CLI

My friend Leonard and I were collaborating over the weekend on some new updates for the Groovy Web Console . This console is an online playground where Apache Groovy users can run Groovy scripts online, with different versions of the language, from Groovy 3 up to the experimental Groovy 6. Additionally, there’s a specific integration with the Spock testing framework , which allows users to…

Managed AI Agents with the Gemini Interactions Java SDK

Google recently announced Managed Agents in the Gemini API at Google I/O. This feature allows developers to run autonomous agents that “reason, plan, use tools, and execute code inside isolated cloud sandboxes” . Rather than requiring developers to manually build, secure, and scale the execution environment (including sandbox containers, network routes, and runtime engines), the Gemini…

Wiring ADK Kotlin agents in an Android application

With the launch of ADK for Kotlin , it means you can power up your Android applications with agents . My colleague Jolanda Verhoef built an Android app that integrates an ADK agent written in Kotlin. It’s an app with a chat interface that lets you ask fun facts about anything you want. Tip You can check out the video of the Google I/O session that introduced ADK for Kotlin & Android,…

Agentic Design Patterns

At Devoxx France 2026 and JNation 2026, I had the pleasure of presenting a session on Agentic Design Patterns . In this talk, I explore how to move beyond basic LLM wrappers to build reliable, scalable, and sophisticated AI agent systems. In the coming weeks, I’ll be blogging about some of these patterns, that I implemented using LangChain4j and ADK for Java . Abstract It’s time to…

Streaming Gemini 3.1's expressive new TTS model in Java

Google just released Gemini 3.1 Flash Text-to-Speech (TTS) , a new expressive TTS model that you can steer with audio tags and scene descriptions. I wanted to see how it worked with the Gemini Interactions SDK for Java . Expressive control The model sounds natural out of the box, but the real benefit is the control you have over expressiveness. By defining “Audio Profiles” ,…

A Simple Coding Agent in a Loop with LangChain4j, Jbang, and Gemini

A few days ago, Max Rydahl Andersen published a fascinating article about nanocode : a minimalist Claude Code alternative implemented in just 260 lines of Java (inspired from a 250-line Python equivalent). It was a masterclass in “leanness,” using raw HTTP calls and Jackson JSON parsing, an OpenRouter or Anthropic LLM endpoint, to create an autonomous coding loop. I loved the concept,…

An ADK Java agent powered by Gemma 4

Today, DeepMind announced the release of Gemma 4 , a very impressive and powerful new version of the Gemma family of models . As I’ve been contributing to ADK Java a fair bit recently, I was curious to see how I would configure ADK Java agents to work with Gemma 4. In this article, we’ll explore 3 paths: Calling the AI Studio API surface directly, Calling Gemma 4 hosted via a vLLM…

Creating a Wikipedia MCP Server in Java in a Few Prompts with Skills

Since I started using Model Context Protocol (MCP) to equip my AI agents with useful tools, I’ve been looking for ways to quickly build and iterate on local servers. A few weeks ago, I shared how to easily build a local MCP server in Java with a custom skill in Gemini CLI . Today, I wanted to put that skill to the test by creating a Wikipedia MCP server . What’s impressive is that I…

Building my Comic Trip agent with ADK Java 1.0

I’m happy to echo here the release of ADK for Java v1.0 , Google’s Agent Development Kit framework to build AI agents in Java. I spent a lot of time on this project. I also wrote the announcement blog post on the Google for Developers blog. And I’ve recorded this YouTube video highlighting some of the new features of the framework, in which I’m demonstrating some of them…

Generating music with Lyria 3 and the Gemini Interactions Java SDK

Generative AI isn’t just about text or images (with Nano Banana ) but it’s also great at generating videos (with Veo 3 ). And now with the recently released Lyria 3 model from DeepMind, you can create some engaging and creative music with lyrics (generated, or your own) or invent a calming instrumental track to loop in the background of your online TikTok or YouTube Shorts. And of…

Extracting JSON from LLM chatter with JsonSpotter

LLMs are great at generating structured data, in particularly those which support a strict JSON output mode (sometimes also called structured decoding ), but sometimes they give you a bit more than the requested JSON. You get a Markdown code block wrapped in “Here’s the data you asked for:” and “Hope this helps!” . If you’re lucky, the JSON is valid. If…

Fixing AI Slop with a Skill in Gemini CLI

We all recognize AI writing when we see it. As language models get used for everything, their specific tics are everywhere. People call this “AI slop” . The grammar is fine, but the text is boring, repetitive, and lacks any real voice. A site called tropes.fyi tracks these patterns. It lists the exact words and structures that give AI away. You’ll see callouts for overused…

Easily Build a Local MCP Server in Java with a Skill inside Gemini CLI

Recently, I’ve been exploring the Model Context Protocol (MCP) and how to easily create custom servers to extend the capabilities of AI assistants like Gemini CLI which I use daily. I wanted a way to build these servers in Java without the heavy boilerplate of a traditional Maven or Gradle project, or with a complex framework. The solution? Combining JBang , LangChain4j , and……

Zero Boilerplate Java STDIO MCP Servers with LangChain4j and JBang

By now, you’re certainly all familiar with the Model Context Protocol (MCP) ? It’s the standard for connecting Large Language Models (LLMs) to tools and data. But if you look at the current ecosystem, you’ll see a lot of Python and TypeScript… As a Java developer, you might be wondering: How can I easily and quickly run my own MCP servers? On this blog, I’ve…

Advanced RAG — Understanding Reciprocal Rank Fusion in Hybrid Search

Today, let’s come back to one of my favorite generative AI topics: Retrieval Augmented Generation , or RAG for short. In RAG, the quality of your generation (when an LLM crafts its answer based on search results) is only as good as your retrieval (the actually retrieved search results). While vector search (semantic) and keyword search ( BM25 ) each have their strengths, combining them often…

Decoded: How Google AI Studio Securely Proxies Gemini API Requests

If you’ve recently vibe-coded and exported a Gemini-powered app from Google AI Studio to host it online on Google Cloud Run , you might have noticed a server/ directory containing a Node.js application. This isn’t just a simple file server; it’s a clever “transparent proxy” designed to solve a classic problem in frontend AI development: How do I use my API key without…

Latest Gemini and Nano Banana Enhancements in LangChain4j

A few days ago, LangChain4j 1.11.0 was released, and with this version, a few notable enhancements to the support of the Gemini model family have landed. Let’s dive in! New Image Generation Models (Gemini 2.5 & 3.0 Preview, aka 🍌 Nano Banana) Note Before showing some snippets of code, let me give you the link to the full documentation on the new image model:…

Researching Topics in the Age of AI — Rock-Solid Webhooks Case Study

Back in 2019, I spent significant time researching Webhooks . In particular, I was interested in best practices, pitfalls, design patterns, and approaches for implementing Webhooks in a reliable, resilient, and effective way. Everything is distilled in that article: Implementing Webhooks, not as trivial as it may seem It likely took me a full week to dive deep into this subject, finding sources…

How to Integrate Gemini CLI with Intellij Idea Using ACP

The Agent Client Protocol ( ACP ) allows you to connect external AI agents directly into IDEs and text editors that support that protocol (like JetBrains’ IntelliJ IDEA, PyCharm, or WebStorm, as well as Zed ). This means you can bring the power of the Gemini CLI directly into your editor, allowing it to interact with your code, run terminal commands, and use Model Context Protocol (MCP)…

A Javelit Frontend for the Deep Research Agent

A month ago, I wrote about building a research assistant in Java, using the Gemini Interactions API, and the Deep Research agent. Today I wanted to revisit this project, but with the goal to make it more user-friendly, with a Javelit based frontend. The Research Pipeline: From Query to Infographic First, the user enters the subject of the research. A button action triggers the research of possible…

Executable Markdown Files with gcli-mdrun & Gemini CLI

Have you ever wanted to turn your cool LLM prompts & tools, research notes, automation ideas, or even a simple “todo” list into an executable script? Inspired by a HackerNews post about executable Markdown , I’m happy to share gcli-mdrun , a smart little script that allows you to transform standard Markdown files into executable scripts powered by Gemini CLI . This project allows…

Implementing an arXiv MCP Server with Quarkus in Java

For my recent presentation at SnowCamp on AI Standards & Protocols for AI Agents , I decided to build an MCP server to access the arXiv research paper website where pre-print versions are published and shared with the community. My goal was to shed light on some lesser-known aspects of the Model Context Protocol: 🛠️ While the majority of MCP servers use the tools feature to expose…

On AI Standards and Protocols: Focus on MCP and A2A

At SnowCamp 2026 , with my Cast Codeurs buddy Emmanuel Bernard of Hexactgon , I had the chance to deliver a talk on AI standards and protocols, with a big focus on MCP (Model Context Protocol), and A2A (Agent 2 Agent Protocol). Without further ado, here’s the slide deck we presented: This talk is based on the Devoxx 2025 deep dive session that I delivered with Emmanuel and my colleague Mete…

Building a Research Assistant with the Interactions API in Java

First of all, dear readers, let me wish you a happy new year ! This is my first post on this blog for 2026. I’m looking forward to continuing sharing interesting content with you. During my holiday break, I wanted to put my recent Java implementation of the Gemini Interactions API to the test. I implemented and released it with the help of Antigravity . My colleague Shubham Saboo and Gargi…

Implementing the Interactions API with Antigravity

Google and DeepMind have announced the Interactions API , a new way to interact with Gemini models and agents. Here are some useful links to learn more about this new API: An announcement is available on Google’s Keywords blog: Interactions API: A unified foundation for models and agents A more detailed article is available on Google’s developers blog: Building agents with the ADK and…

AI Agentic Patterns and Anti-Patterns

This week, I was on stage at the Tech Rocks Summit 2025 in the beautiful Théâtre de Paris. This is the first I’m attending this event, gathering a nice crowd of CTOs, tech leads, architects, and decision makers. My talk focused on what everyone is talking about right now: AI Agents . And in particular, I was interested in sharing with the audience things I’ve seen work or not work in…

Gemini Is Cooking Bananas Under Antigravity

What a wild title, isn’t it? It’s a catchy one, not generated by AI, to illustrate this crazy week of announcements by Google. Of course, there are big highlights like Gemini 3 Pro , Antigravity , or Nano Banana Pro , but not only, and this is the purpose of the article to share with you everything, including links to all the interesting materials about those news. Gemini 3 Pro The…

Semantic Document Similarity: Finding related articles with vector embedding models

When you enjoyed reading an article on a blog, you might be interested in other, similar articles. As a blog author, you want to surface that relevant content to your readers to keep them engaged. For a long time, I’ve wanted to add a “Similar articles” section to my posts, but I never quite found a simple and effective way to do it. Hugo (the static stite generator I’m…

Driving a web browser with Gemini's Computer Use model in Java

In this article, I’ll guide you through the process of programmatically interacting with a web browser using the new Computer Use model in Gemini 2.5 Pro. We’ll accomplish this in Java ☕ leveraging Microsoft’s powerful Playwright Java SDK to handle the browser automation. The New Computer Use Model Unveiled in this announcement article and made available in public preview…

A Javelit frontend for an ADK agent

Continuing my journey with Javelit , after creating a frontend for “Nano Banana” to generate images and a chat interface for a LangChain4j-based Gemini chat model , I decided to see how I could integrate an ADK agent with a Javelit frontend. The Javelit interface for an ADK search agent A Javelit interface for an ADK search agent

Creating a Javelit chat interface for LangChain4j

Yesterday, I uncovered the Javelit project in this article where I built a small frontend to create and edit images with Google’s Nano Banana image model. Javelit Javelit is an open source project inspired by Streamlit from the Python ecosystem to enable rapid prototyping and deployment of applications in Java.

Javelit to create quick interactive app frontends in Java

Have you ever heard of Javelit ? It’s like Streamlit in the Python ecosystem, but for the Java developer ! I was lucky that the project creator reached out and introduced me to this cool little tool! Javelit is a tool to quickly build interactive app frontends in Java , particularly for data apps, but it’s not limited to them. It helps you quickly develop rapid prototypes, with a…

Building AI Agents with ADK for Java

At Devoxx Belgium, I recently had the chance to present this new talk dedicated to ADK for Java , the open source Agent Development Kit framework developed by Google. The presentation covered: an introduction to the notion of AI agents how to get started in a Java and Maven project how to create your first agent how to debug an agent via the Dev UI the coverage of the various tools (custom…

Creative Java AI agents with ADK and Nano Banana 🍌

Large Language Models (LLMs) are all becoming “multimodal” . They can process text, but also other “modalities” in input, like pictures, videos, or audio files. But models that output more than just text are less common… Recently, I wrote about my experiments with Nano Banana 🍌 (in Java), a Gemini chat model flavor that can create and edit images . This is…

Creating a Streamable HTTP MCP server with Micronaut

In previous articles, I explored how to create an MCP server with Micronaut by vibe-coding one, following the Model Context Protocol specification (which was a great way to better understand the underpinnings) and how to create an MCP server with Quarkus . Micronaut lacked a dedicated module for creating MCP servers, but fortunately, recently Micronaut added official support for MCP, so I was…

Generating videos in Java with Veo 3

Yesterday, we went bananas 🍌 creating and editing images with Nano Banana, in Java . Now, what about generating videos as well, still in Java , with Veo 3 ? Especially since this week, Google announced that Veo 3 became generally available , with reduced pricing , a new 9:16 aspect ratio (nice for those vertical viral videos) and even with resolution up to 1080p ! In today’s article,…

Generating and editing images with Nano Banana in Java

By now, you’ve all probably seen the incredible images generated by the Nano Banana model (also known as Gemini 2.5 Flash Image preview )? If you haven’t, I encourage you to play with it within Google AI Studio , and from the Gemini app . or have a look at the @NanoBanana X/Twitter account which shares some of its greatest creations. As a Java developer , you may be wondering how you…

In-browser semantic search with EmbeddingGemma

A few days ago, Google DeepMind released a new embedding model based on the Gemma open weight model: EmbeddingGemma . With 308 million parameters , such a model is tiny enough to be able to run on edge devices like your phone, tablet, or your computer. Embedding models are the cornerstone of Retrieval Augmented Generation systems (RAG), and what generally powers semantic search solutions. Being…