
BDI agent-oriented framework enabling agents, beliefs, goals and plans to coexist with ordinary code; supports generic knowledge representation, pluggable plan-matching incarnations, and coroutine-based intentions.
JaKtA is a BDI (Belief-Desire-Intention) agent-oriented programming framework, built as an internal DSL for Kotlin Multiplatform. Agents, their beliefs, goals and plans are written side by side with ordinary Kotlin code.
suspend Kotlin code.JaKtA is published on Maven Central (and on npm under @jakta).
Add jakta-core and an incarnation, e.g. the Prolog one:
dependencies {
implementation("it.unibo.jakta:jakta-core:<VERSION>")
implementation("it.unibo.jakta:jakta-prolog-incarnation:<VERSION>")
}| Module | Description |
|---|---|
jakta-api |
Representation-agnostic contracts (agents, events, plans, nodes) |
jakta-dsl |
DSL builder interfaces |
jakta-core |
Engine implementation and DSL entry points (mas, node, agent) |
jakta-prolog-incarnation |
Beliefs and goals as 2P-Kt Prolog terms, KQML messaging |
jakta-string-incarnation |
Beliefs and goals as plain strings |
alchemist-jakta-incarnation |
Run JaKtA agents in Alchemist simulations |
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()
}Runnable examples live in examples:
./gradlew :examples:hello-world:run
./gradlew :examples:blocksworld:runIf you want to cite this work, you can follow citation instructions.
JaKtA is a BDI (Belief-Desire-Intention) agent-oriented programming framework, built as an internal DSL for Kotlin Multiplatform. Agents, their beliefs, goals and plans are written side by side with ordinary Kotlin code.
suspend Kotlin code.JaKtA is published on Maven Central (and on npm under @jakta).
Add jakta-core and an incarnation, e.g. the Prolog one:
dependencies {
implementation("it.unibo.jakta:jakta-core:<VERSION>")
implementation("it.unibo.jakta:jakta-prolog-incarnation:<VERSION>")
}| Module | Description |
|---|---|
jakta-api |
Representation-agnostic contracts (agents, events, plans, nodes) |
jakta-dsl |
DSL builder interfaces |
jakta-core |
Engine implementation and DSL entry points (mas, node, agent) |
jakta-prolog-incarnation |
Beliefs and goals as 2P-Kt Prolog terms, KQML messaging |
jakta-string-incarnation |
Beliefs and goals as plain strings |
alchemist-jakta-incarnation |
Run JaKtA agents in Alchemist simulations |
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()
}Runnable examples live in examples:
./gradlew :examples:hello-world:run
./gradlew :examples:blocksworld:runIf you want to cite this work, you can follow citation instructions.