Agents
Denkeeper supports running multiple named agents within a single instance. Each agent has its own persona, skills, LLM model, and permission tier.
Persona system
Each agent’s identity is defined by persona files in its persona_dir:
| File | Purpose | Who updates it |
|---|---|---|
SOUL.md | Core identity — personality, values, communication style | Agent (supervised requires approval; autonomous writes directly) |
USER.md | What the agent knows about its user | Agent (user can edit directly) |
MEMORY.md | Working memory — updated automatically each session | Agent |
These files are injected into the system prompt at the start of every conversation.
Adapter bindings
Each agent declares which adapters it listens on:
[[agents]]
name = "default"
adapters = ["telegram"] # all Telegram messages
[[agents]]
name = "work-assistant"
adapters = ["telegram:987654321"] # only this specific chat
The Dispatcher routes incoming messages to the correct agent based on these bindings. If no specific binding matches, messages go to the "default" agent.
For routing that is not a fixed 1:1 agent–adapter pair — one conversation shared across Telegram and Discord, or switching a chat between agents at runtime — see Channels.
Per-agent configuration
Each agent can override the global LLM model and permission tier:
[[agents]]
name = "home-automation"
persona_dir = "~/.denkeeper/agents/home-automation"
adapters = ["discord"]
llm_model = "meta-llama/llama-3-70b"
session_tier = "restricted"
Self-modification rules
Agents can modify their own persona files within their permission tier:
- MEMORY.md — freely writable (working memory)
- USER.md — writable in
supervisedandautonomoustiers - SOUL.md — writable in
supervised(requires approval) andautonomoustiers