-
Notifications
You must be signed in to change notification settings - Fork 0
API Quick Reference
Compact tables covering every DSL function in Agents.KT. For in-depth explanations, follow the links to dedicated wiki articles.
Defined inside agent<IN, OUT>("name") { ... }:
| Function | Signature | Description |
|---|---|---|
prompt |
prompt(text: String) |
Sets the system prompt sent to the LLM before every agentic call. |
model |
model { ... } |
Configures the LLM backend. See Model Config. |
budget |
budget { ... } |
Sets the agentic loop turn limit. See Budget Config. |
tools |
tools { ... } |
Registers callable tools the LLM can invoke. See Tools. |
skills |
skills { ... } |
Declares the agent's capabilities. At least one skill must produce OUT. |
memory |
memory(bank: MemoryBank) |
Attaches a MemoryBank and auto-injects memory_read, memory_write, memory_search tools. |
skillSelection |
skillSelection { input -> "skillName" } |
Predicate-based skill routing. Runs before LLM routing. See Skill Selection. |
onToolUse |
onToolUse { name, args, result -> } |
Callback fired after every action tool execution. |
onKnowledgeUsed |
onKnowledgeUsed { name, content -> } |
Callback fired when the LLM fetches a knowledge entry. |
onSkillChosen |
onSkillChosen { name -> } |
Callback fired when the agent selects a skill (any routing strategy). |
val agent = agent<String, String>("myAgent") { /* ... */ }
val result: String = agent("input") // operator fun invoke(input: IN): OUTDefined inside skills { ... }:
| Function | Signature | Description |
|---|---|---|
skill |
skill<IN, OUT>("name", "desc") { ... } |
Declares a skill inline within the agent. |
+ (unaryPlus) |
+preDefinedSkill |
Adds a pre-defined Skill<IN, OUT> instance to the agent. |
Defined inside skill<IN, OUT>("name", "desc") { ... }:
| Function | Signature | Description |
|---|---|---|
implementedBy |
implementedBy { input -> output } |
Marks skill as pure Kotlin. No LLM involved. |
tools |
tools(vararg names: String) |
Marks skill as agentic (LLM-driven). Listed tool names become available to the LLM. |
knowledge |
knowledge("key", "desc") { provider } |
Registers a lazy context provider. Loaded on demand in agentic skills, eagerly in non-agentic. |
transformOutput |
transformOutput { llmString -> parsedType } |
Transforms the raw LLM text response into the skill's OUT type. |
llmDescription |
llmDescription("override text") |
Overrides the auto-generated toLlmDescription() markdown. |
| Method | Returns | Description |
|---|---|---|
skill.toLlmDescription() |
String |
Auto-generated markdown: name, types, description, knowledge index. |
skill.toLlmContext() |
String |
Full context: toLlmDescription() + all knowledge content. |
skill.knowledgeTools() |
List<KnowledgeTool> |
Knowledge entries as callable tools for lazy LLM loading. |
skill.execute(input) |
OUT |
Directly executes the skill's implementedBy lambda. |
skill(input) |
OUT |
Alias for execute(input) via operator fun invoke. |
Defined inside model { ... }:
| Property/Function | Type | Default | Description |
|---|---|---|---|
ollama(name) |
fun |
-- | Sets the model name and provider to Ollama. |
host |
String |
"localhost" |
Ollama server hostname. |
port |
Int |
11434 |
Ollama server port. |
temperature |
Double |
0.7 |
Sampling temperature. |
client |
ModelClient? |
null |
Custom ModelClient implementation (overrides Ollama). Used for testing. |
model { ollama("qwen2.5:7b"); host = "localhost"; port = 11434; temperature = 0.7 }fun interface ModelClient {
fun chat(messages: List<LlmMessage>): LlmResponse
}Create a mock for testing:
val mock = ModelClient { messages -> LlmResponse.Text("mocked response") }
model { ollama("any"); client = mock }Defined inside budget { ... }:
| Property | Type | Default | Description |
|---|---|---|---|
maxTurns |
Int |
Int.MAX_VALUE |
Maximum agentic loop iterations. Throws BudgetExceededException when exceeded. |
budget { maxTurns = 10 }Defined inside tools { ... }:
| Function | Signature | Description |
|---|---|---|
tool |
tool("name", "desc") { args -> result } |
Registers a tool. args is Map<String, Any?>. Return value is sent back to the LLM. |
tools {
tool("add", "Add two numbers. Args: a, b") { args ->
(args["a"] as Number).toDouble() + (args["b"] as Number).toDouble()
}
}When memory(bank) is called, these tools are auto-registered:
| Tool Name | Arguments | Returns | Description |
|---|---|---|---|
memory_read |
-- | Full memory content | Reads the agent's memory bank. |
memory_write |
content: String |
"ok" |
Overwrites the agent's memory. |
memory_search |
query: String |
Matching lines | Case-insensitive line search. |
All composition results are callable via operator fun invoke. See Type Algebra for full overload table.
| Operator | Syntax | Result Type | Description |
|---|---|---|---|
| Pipeline | A then B |
Pipeline<A.IN, B.OUT> |
Sequential execution. Requires A.OUT == B.IN. |
| Parallel | A / B |
Parallel<A.IN, A.OUT> |
Concurrent fan-out. Both agents must share <IN, OUT>. Returns List<OUT>. |
| Forum | A * B |
Forum<A.IN, B.OUT> |
Multi-agent deliberation. |
| Loop | A.loop { out -> nextInput? } |
Loop<A.IN, A.OUT> |
Feedback loop. Returns null to stop, IN to continue. |
| Branch | A.branch { on<V>() then handler } |
Branch<A.IN, handler.OUT> |
Conditional routing on sealed type variants. |
import agents_engine.composition.pipeline.then
import agents_engine.composition.parallel.div
import agents_engine.composition.forum.times
import agents_engine.composition.loop.loop
import agents_engine.composition.branch.branchSee Generable and Guide for detailed usage.
| Annotation | Target | Description |
|---|---|---|
@Generable("desc") |
Class | Marks a data class or sealed interface as an LLM generation target. |
@Guide("desc") |
Constructor param, sealed subclass | Per-field or per-variant guidance for the LLM. |
@LlmDescription("text") |
Class | Overrides auto-generated toLlmDescription() verbatim. |
| Function | Returns | Description |
|---|---|---|
KClass<*>.toLlmDescription() |
String |
Markdown description with fields, types, and @Guide texts. |
KClass<*>.jsonSchema() |
String |
JSON Schema string for constrained decoding. |
KClass<*>.promptFragment() |
String |
Natural-language prompt fragment with JSON template. |
KClass<T>.fromLlmOutput(json) |
T? |
Lenient deserialization. Handles markdown fences, trailing commas. Returns null on failure. |
| Method | Description |
|---|---|
PartiallyGenerated.empty<T>() |
Creates an empty partial instance. |
partial.withField("name", value) |
Returns a new partial with the field set. |
partial.toComplete() |
Attempts full construction. Returns T?. |
partial.has("name") |
Checks if a field has arrived. |
partial["name"] |
Gets a field value (or null). |
partial.arrivedFieldNames |
Set<String> of fields received so far. |
See Agent Memory for detailed usage.
| Method | Signature | Description |
|---|---|---|
| Constructor | MemoryBank(maxLines: Int = Int.MAX_VALUE) |
Creates a bank with optional line cap. |
read |
read(key: String): String |
Returns stored content or empty string. |
write |
write(key: String, content: String) |
Writes content, auto-truncating to maxLines. |
entries |
entries(): Map<String, String> |
Returns a snapshot of all key-value pairs. |
See Tool Error Recovery for detailed usage.
| Type | Fields | Description |
|---|---|---|
ToolError.InvalidArgs |
rawArgs, parseError, expectedSchema
|
Malformed tool call arguments. |
ToolError.DeserializationError |
rawValue, targetType, cause
|
Type coercion failure. |
ToolError.ExecutionError |
args, cause
|
Runtime error during tool execution. |
ToolError.EscalationError |
source, reason, severity, originalError, attempts
|
Repair agent escalated the error. |
LOW | MEDIUM | HIGH | CRITICAL
onError {
invalidArgs { rawArgs, error ->
fix { rawArgs.replace(",}", "}") } // deterministic fix
fix(agent = jsonFixer, retries = 3) // LLM-driven repair
}
deserializationError { rawValue, error ->
sanitize { rawValue.replace("\\", "/") }
}
executionError { cause ->
retry(maxAttempts = 3, backoff = exponential())
}
}tools {
defaults {
onError { invalidArgs { _, _ -> fix(agent = jsonFixer, retries = 3) } }
}
tool("write_file") { /* inherits defaults */ }
tool("compile") { onError { /* override */ } }
}| Tool | Description |
|---|---|
escalate() |
Soft failure -- parent agent decides what to do. |
throwException() |
Hard failure -- propagates through the pipeline. |
| Type | Description |
|---|---|
LlmMessage(role, content, toolCalls?) |
A message in the conversation. Roles: "system", "user", "assistant", "tool". |
LlmResponse.Text(content) |
LLM returned a text response. |
LlmResponse.ToolCalls(calls) |
LLM returned one or more tool calls. |
ToolCall(name, arguments) |
A single tool invocation. arguments is Map<String, Any?>. |
See also: Type Algebra | Glossary | Best Practices | Cookbook | Troubleshooting
Getting Started
Core Concepts
Composition Operators
LLM Integration
- Model & Tool Calling
- Tool Error Recovery
- Skill Selection & Routing
- Budget Controls
- Observability Hooks
Guided Generation
Agent Memory
Reference