Agent to build presentations using Embabel. Both an example of Embabel and a useful tool in its own right.
Flow:
- Starts from a YML definition file describing the speaker and presentation goals.
- Decides on key points to cover using the best available model
- Performs internet research to back up points to be made, in parallel using a cheaper model and MCP tools.
- Draws code examples from a software project, if specified.
- Generates Markdown slide content using the best available model, adhering to Marp conventions
- Uses the Marp CLI to convert the Markdown into an HTML presentation
- Expands images in dot format using GraphViz
Run the shell script to start Embabel under Spring Shell:
./shell.sh
make-presentation <absolute path to presentation YML file>
The presentation YML file should have the following structure:
data class PresentationRequest(
val slideCount: Int,
val presenterBio: String,
val brief: String,
val softwareProject: String?,
val outputDirectory: String = "/Users/rjohnson/Documents",
val outputFile: String = "presentation.md",
val header: String,
val images: Map<String, ImageInfo> = emptyMap(),
val autoIllustrate: Boolean = false,
val coStar: CoStar,
)
See kotlinconf_presentation.yml
for an example.
Here's a real YML file, used to generate Rod Johnson's presentation at KotlinConf 2025.
slideCount: 28
presenterBio: >
Rod Johnson, Embabel. Creator of Spring
brief: >
Kotlin and Spring are the ideal modern server side stack.
We're not just looking backward, but forward. This deck is generated by
an agent framework written in Kotlin using Spring.
The JVM has a big place in the future.
In the last 10 years, I've done a lot of languages:
[make this a table]
Scala - Elegant language, too clever for mortals
TypeScript - Love the language, but Node is messy
Python - Getting better but still thumbs its nose at computer science.
Modern Java - I hadn't done for >10 years, and it's improved a lot. Spring is so nice after Node and Python ecosystem.
Kotlin - The best of both worlds
While modern Java has improved a lot, Kotlin remains better.
Provide all examples from the given codebase if possible, not via web search.
Show examples of Kotlin reification and extension functions.
Show how Spring @Service works naturally with Kotlin classes
Show how Kotlin data classes work well with Spring @ConfigurationProperties annotation.
Show how Java code can consume Kotlin code in a natural way: see StarNewsFinder.java.
Add slides on how the Kotlin compiler "open" is configured in pom.xml and how
it helps avoid errors with Spring.
Explain how this presentation has been created by Embabel, which is written in Kotlin and based on Spring.
Explain the core concepts of Embabel, as explained in project README.md.
Specifically distinguished by:
- planning toward goals, which enables extensibility without modification
- rich domain model, exposing domain methods to LLMs as tools
Show how the file named 'kotlinconf_presentation.yml' in the project (use findFiles and readFile),
lays out the narrative for this presentation.
Explain the implementation of the PresentationMaker Kotlin class.
Show the signatures of the @Action methods
Draw a GraphViz diagram of how the class works.
Conclude with a call to action: experience the future of agentic systems
by trying Embabel; it's an example of Spring + Kotlin in action.
You can see the code that built this presentation.
header: |
---
marp: true
title: Kotlin and Spring: The Modern Server Side Stack
theme: default
paginate: false
class: invert
size: 16:9
---
images:
embabel:
useWhen: start of deck on title slide, end of deck. it's a tall image
url: https://raw.githubusercontent.com/embabel/embabel-agent/refs/heads/main/embabel-agent-api/images/315px-Meister_der_Weltenchronik_001.jpg
spring:
useWhen: on first slide mentioning spring
url: https://upload.wikimedia.org/wikipedia/commons/4/44/Spring_Framework_Logo_2018.svg
kotlin:
useWhen: background of first slide mentioning kotlin
url: https://upload.wikimedia.org/wikipedia/commons/thumb/0/06/Kotlin_Icon.svg/1024px-Kotlin_Icon.svg.png?20171012085709
spring-ai:
useWhen: first slide mentioning Spring AI
url: https://raw.githubusercontent.com/spring-io/spring-io-static/refs/heads/main/blog/tzolov/20250520/spring-ai-logo.png
outputFile: kotlinconf.md
softwareProject: /Users/rjohnson/dev/embabel.com/embabel-agent/embabel-agent-api
coStar:
context: talk at KotlinConf 2025
objective: >
convey the importance of Kotlin in the Spring ecosystem and how they
complement each other
style: Rod Johnson on programming
tone: informative and entertaining. be provocative and challenge the audience
audience: Kotlin developers interested in Spring