Documentation
¶
Index ¶
- func DefaultConfigPath() string
- type APIConfig
- type APIKeyConfig
- type AgentConfig
- type AgentInstanceConfig
- type AnthropicConfig
- type Config
- type DiscordConfig
- type FallbackConfig
- type LLMConfig
- type LogConfig
- type MemoryConfig
- type OllamaConfig
- type OpenRouterConfig
- type PluginConfig
- type ScheduleConfig
- type SessionConfig
- type TelegramConfig
- type ToolConfig
- type VoiceConfig
- type VoiceOpenAIConfig
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DefaultConfigPath ¶
func DefaultConfigPath() string
Types ¶
type APIConfig ¶
type APIConfig struct {
// Enabled controls whether the API server starts. Default: false.
Enabled bool `toml:"enabled"`
// Listen is the address to listen on (e.g. "0.0.0.0:8443", ":8080").
Listen string `toml:"listen"`
// TLS enables HTTPS. When true, CertFile and KeyFile are required.
TLS bool `toml:"tls"`
CertFile string `toml:"cert_file"`
KeyFile string `toml:"key_file"`
// CORS configures allowed origins for cross-origin requests.
// Empty means no CORS headers are sent.
CORSOrigins []string `toml:"cors_origins"`
// RateLimit is the maximum requests per second per API key. 0 = unlimited.
RateLimit float64 `toml:"rate_limit"`
// Keys defines API keys with scoped permissions.
Keys []APIKeyConfig `toml:"keys"`
}
APIConfig controls the external REST API server.
type APIKeyConfig ¶
type APIKeyConfig struct {
// Name is a human-readable label for this key.
Name string `toml:"name"`
// Key is the secret API key value. Loaded from config or env.
Key string `toml:"key"`
// Scopes controls what this key can access.
// Valid scopes: "chat", "sessions:read", "costs:read", "skills:read",
// "skills:write", "schedules:read", "schedules:write", "health", "admin".
Scopes []string `toml:"scopes"`
}
APIKeyConfig defines a single API key with named scopes.
type AgentConfig ¶
type AgentInstanceConfig ¶
type AgentInstanceConfig struct {
// Name is a unique identifier for this agent. One agent must be named "default".
Name string `toml:"name"`
// Description is a human-readable summary of the agent's purpose.
Description string `toml:"description"`
// PersonaDir is the path to the agent's persona directory (SOUL.md, USER.md, MEMORY.md).
PersonaDir string `toml:"persona_dir"`
// SkillsDir overrides the global skills directory for this agent. If empty,
// the global skills directory is used. Agent-specific skills in
// <persona_dir>/skills/ are always loaded and override global skills by name.
SkillsDir string `toml:"skills_dir"`
// Adapters lists the adapter bindings for this agent.
// "telegram" — wildcard: all messages on that adapter go to this agent.
// "telegram:12345" — specific: only messages from that chat ID.
Adapters []string `toml:"adapters"`
// LLMModel overrides the global default_model for this agent.
LLMModel string `toml:"llm_model"`
// SessionTier overrides the global session.tier for this agent.
SessionTier string `toml:"session_tier"`
}
AgentInstanceConfig defines a named agent with its own persona, skills, LLM model, permission tier, and adapter bindings. Multiple agents can run within a single denkeeper instance.
type AnthropicConfig ¶
type AnthropicConfig struct {
// APIKey is the Anthropic API key (sk-ant-...). Required to enable the provider.
APIKey string `toml:"api_key"`
// BaseURL overrides the default API endpoint. Useful for Bedrock/Vertex proxies.
BaseURL string `toml:"base_url"`
}
AnthropicConfig configures the Anthropic direct LLM provider.
type Config ¶
type Config struct {
Telegram TelegramConfig `toml:"telegram"`
Discord DiscordConfig `toml:"discord"`
LLM LLMConfig `toml:"llm"`
Memory MemoryConfig `toml:"memory"`
Log LogConfig `toml:"log"`
Agent AgentConfig `toml:"agent"`
Session SessionConfig `toml:"session"`
Agents []AgentInstanceConfig `toml:"agents"`
Schedules []ScheduleConfig `toml:"schedules"`
Tools map[string]ToolConfig `toml:"tools"`
Plugins map[string]PluginConfig `toml:"plugins"`
Voice VoiceConfig `toml:"voice"`
API APIConfig `toml:"api"`
}
type DiscordConfig ¶
type DiscordConfig struct {
// Token is the Discord bot token. Required to enable the Discord adapter.
Token string `toml:"token"`
// AllowedUsers is a list of Discord user snowflake IDs (as strings) that
// may interact with the bot. Required when token is set.
AllowedUsers []string `toml:"allowed_users"`
}
DiscordConfig configures the Discord bot adapter.
type FallbackConfig ¶
type FallbackConfig struct {
Trigger string `toml:"trigger"` // "error" | "rate_limit" | "low_funds"
Action string `toml:"action"` // "switch_provider" | "switch_model" | "wait_and_retry"
Provider string `toml:"provider"` // required for switch_provider
Model string `toml:"model"` // required for switch_model; optional for switch_provider
Threshold float64 `toml:"threshold"` // required for low_funds (USD remaining)
MaxRetries int `toml:"max_retries"` // required for wait_and_retry
Backoff string `toml:"backoff"` // "exponential" (default) | "constant"
}
FallbackConfig defines a single fallback rule for the LLM router. Rules are evaluated in declaration order; first match wins per trigger type.
type LLMConfig ¶
type LLMConfig struct {
DefaultProvider string `toml:"default_provider"`
DefaultModel string `toml:"default_model"`
OpenRouter OpenRouterConfig `toml:"openrouter"`
Ollama OllamaConfig `toml:"ollama"`
Anthropic AnthropicConfig `toml:"anthropic"`
MaxCostPerSession float64 `toml:"max_cost_per_session"`
Fallbacks []FallbackConfig `toml:"fallback"`
}
type MemoryConfig ¶
type MemoryConfig struct {
DBPath string `toml:"db_path"`
}
type OllamaConfig ¶
type OllamaConfig struct {
// BaseURL is the Ollama server address. Defaults to http://localhost:11434.
BaseURL string `toml:"base_url"`
}
OllamaConfig configures the local Ollama LLM provider.
type OpenRouterConfig ¶
type OpenRouterConfig struct {
APIKey string `toml:"api_key"`
}
type PluginConfig ¶
type PluginConfig struct {
// Type is the execution strategy. Only "subprocess" is supported currently.
// "docker" is reserved for future sandboxed execution.
Type string `toml:"type"`
Command string `toml:"command"`
Args []string `toml:"args"`
Env map[string]string `toml:"env"`
// Capabilities declares contracts this plugin satisfies.
// Currently only "tools" is meaningful — registers the plugin as an MCP server.
Capabilities []string `toml:"capabilities"`
}
PluginConfig defines a denkeeper plugin with explicit capability declarations. Unlike [tools.*] entries (raw MCP servers), plugins participate in permission checks and lifecycle management. Docker sandboxing is planned for a future release.
type ScheduleConfig ¶
type ScheduleConfig struct {
// Name is a unique identifier for this schedule. Required.
Name string `toml:"name"`
// Type classifies the schedule. Must be "system" or "agent". Required.
Type string `toml:"type"`
// Schedule is the timing expression. Required.
Schedule string `toml:"schedule"`
// Skill is the name of the skill to invoke on each run. Optional for
// system schedules; typically required for agent schedules.
Skill string `toml:"skill"`
// SessionTier is the permission tier for the session spawned on each run.
// Allowed values: "supervised" (default), "autonomous", "restricted".
SessionTier string `toml:"session_tier"`
// Channel is the adapter channel to deliver results to (e.g. "telegram:123456").
Channel string `toml:"channel"`
// SessionMode controls which conversation context is used for the scheduled run.
// "shared" (default): reuses the channel's existing conversation history.
// "isolated": creates a fresh conversation for each run with no prior context.
SessionMode string `toml:"session_mode"`
// Agent is the name of the agent that handles this schedule. Defaults to "default".
Agent string `toml:"agent"`
// Tags are freeform labels for organizing and filtering schedules.
Tags []string `toml:"tags"`
// Enabled controls whether this schedule is active. Use a pointer so that
// an omitted field can be distinguished from an explicit false, allowing
// applyDefaults to set the value to true when unspecified.
Enabled *bool `toml:"enabled"`
}
ScheduleConfig defines a single scheduled task entry.
Schedule expression formats (schedule field):
Named shortcuts: @hourly, @daily, @midnight, @weekly, @monthly, @yearly, @annually Interval syntax: @every <duration> (e.g. @every 5m, @every 1h30m) 5-field cron: <min> <hour> <dom> <month> <dow> (e.g. "0 8 * * 1-5")
Schedule types (type field):
"system" Core system tasks (heartbeats, maintenance). Isolated from
agent-created schedules and run with elevated priority.
"agent" User-configured scheduled agent skill runs.
type SessionConfig ¶
type SessionConfig struct {
Tier string `toml:"tier"` // "supervised" (default), "autonomous", "restricted"
}
SessionConfig controls the default permission tier for agent sessions.
type TelegramConfig ¶
type ToolConfig ¶
type ToolConfig struct {
Command string `toml:"command"`
Args []string `toml:"args"`
Env map[string]string `toml:"env"`
}
ToolConfig defines an MCP tool server to spawn.
type VoiceConfig ¶
type VoiceConfig struct {
STTProvider string `toml:"stt_provider"` // "openai" or "" (disabled)
TTSProvider string `toml:"tts_provider"` // "openai" or "" (disabled)
TTSVoice string `toml:"tts_voice"` // e.g. "alloy"
AutoVoiceReply bool `toml:"auto_voice_reply"` // reply with voice when user sends voice
OpenAI VoiceOpenAIConfig `toml:"openai"`
}
VoiceConfig controls speech-to-text and text-to-speech.
type VoiceOpenAIConfig ¶
type VoiceOpenAIConfig struct {
APIKey string `toml:"api_key"`
}