What is JaKtA?
JaKtA is an agent-oriented programming framework for building robust intelligent agents using the Belief-Desire-Intention (BDI) cognitive architecture. It's implemented in Kotlin and aims to simplify the development of complex agent-based systems by leveraging the language's modern features and concise syntax. Thanks to Kotlin multi-paradigm design, JaKtA agents seamlessly interoperate with Object-Oriented and Functional Programming, making BDI agents approachable for a wide range of developers. Kotlin multiplatform support also opens the door for JaKtA agents to run on various platforms, from servers to mobile devices.
If you intend to use JaKtA for a research project, make sure to cite it.

Paradigm Blending
Mix Functional and Object-Oriented programming within your MAS codebase
Multi Platform
Write once, run on the JVM, in JavaScript (browser and Node.js), and natively on Linux, Windows, macOS and iOS
Configurable
Plug in the knowledge representation (Prolog, strings, or your own types) and the execution model, from coroutines to Alchemist simulations
Hello world
Agents are written in pure Kotlin: their goals, beliefs and plans are declared with the DSL, and plan bodies are plain suspend Kotlin code.
- The agent starts with the goal
"sayHello", a plain string. - The plan triggered by adding that goal prints a message and stops the node.
- The MAS, one node with one agent, runs on Kotlin coroutines.
Add JaKtA to your Gradle build:
dependencies {
implementation("it.unibo.jakta:jakta-core:<VERSION>")
implementation("it.unibo.jakta:jakta-dsl:<VERSION>")
implementation("it.unibo.jakta:jakta-api:<VERSION>")
}
val helloWorldAgent = agent<String, String, Any> {
embodiedAs { Any() }
hasInitialGoals {
!"sayHello"
}
hasPlanLibrary {
adding.goal {
takeIf { it == "sayHello" }
} triggers {
agent.print("Hello, world!")
node.terminateNode()
}
}
}
fun main(): Unit = runBlocking {
mas(NodeBuilders.baseNode()) {
node { withAgents(helloWorldAgent) }
}.runLocally()
}
Meet the JaKtA Team
We are a group of researchers from the University of Bologna, in the Department of Computer Science and Engineering (DISI), based in Cesena, Italy
Discover more about what we and our colleagues do on the Pervasive Software Lab website!
About JaKtA
Please make sure to cite JaKtA if you use it in a research project!
If you're interested in research developments check out the other publications.
@article{DBLP:journals/sncs/BaiardiBCP24,
author = {Martina Baiardi and Samuele Burattini and Giovanni Ciatto and Danilo Pianini},
title = {Blending {BDI} Agents
with Object-Oriented and Functional Programming with JaKtA},
journal = {{SN} Comput. Sci.},
volume = {5},
number = {8},
pages = {1003},
year = {2024},
url = {https://doi.org/10.1007/s42979-024-03244-y},
doi = {10.1007/S42979-024-03244-Y},
timestamp = {Mon, 03 Mar 2025 22:23:02 +0100},
biburl = {https://dblp.org/rec/journals/sncs/BaiardiBCP24.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
Join the JaKtA Community!
Be a part of our open-source journey. Collaborate, contribute, and connect with fellow MAS and BDI enthusiasts.
Join on GitHub


