Configuration
Configuration
OpenCaddis uses two configuration files in the src/OpenCaddis directory:
fabr.json
LLM provider and model settings — what models to use and how to connect to them.
opencaddis.json
Agent definitions and plugin settings — what agents to create and how they behave.
fabr.json
ModelConfigurations
An array of model definitions. Each entry defines a named model that agents can reference.
| Property | Type | Description |
|---|---|---|
Name | string | Unique name for this model config (e.g., "default", "embeddings") |
Provider | string | "Azure" or "OpenAI" |
Uri | string | Endpoint URL (required for Azure, ignored for OpenAI) |
Model | string | Model deployment name (e.g., "gpt-4o", "text-embedding-ada-002") |
ApiKeyAlias | string | References an alias in the ApiKeys array |
TimeoutSeconds | int | Request timeout (default: 120) |
MaxOutputTokens | int | Maximum tokens in response |
ContextWindowTokens | int | Total context window size for the model. Used by chat history compaction to determine when to summarize |
You must define at least a "default" model (main LLM for chat) and an "embeddings" model (text-embedding-ada-002 for the memory system).
ApiKeys
An array of API key definitions. Keys are encrypted in memory at runtime.
| Property | Type | Description |
|---|---|---|
Alias | string | Name referenced by ApiKeyAlias in model configs |
Value | string | The API key value |
Full Example: Azure OpenAI
{
"ModelConfigurations": [
{
"Name": "default",
"Provider": "Azure",
"Uri": "https://your-resource.openai.azure.com/",
"Model": "gpt-4o",
"ApiKeyAlias": "azure-key",
"TimeoutSeconds": 120,
"MaxOutputTokens": 16384,
"ContextWindowTokens": 128000
},
{
"Name": "embeddings",
"Provider": "Azure",
"Uri": "https://your-resource.openai.azure.com/",
"Model": "text-embedding-ada-002",
"ApiKeyAlias": "azure-key"
}
],
"ApiKeys": [
{
"Alias": "azure-key",
"Value": "your-api-key-here"
}
]
}
Full Example: OpenAI
{
"ModelConfigurations": [
{
"Name": "default",
"Provider": "OpenAI",
"Model": "gpt-4o",
"ApiKeyAlias": "openai-key",
"TimeoutSeconds": 120,
"MaxOutputTokens": 16384,
"ContextWindowTokens": 128000
},
{
"Name": "embeddings",
"Provider": "OpenAI",
"Model": "text-embedding-ada-002",
"ApiKeyAlias": "openai-key"
}
],
"ApiKeys": [
{
"Alias": "openai-key",
"Value": "sk-your-api-key-here"
}
]
}
opencaddis.json
Agents
An array of agent definitions. Each agent is a separate conversation in the UI.
| Property | Type | Description |
|---|---|---|
Handle | string | Display name for the agent |
AgentType | string | "assistant", "delegate", "workflow", or "eventlog" (see Agents) |
Models | string[] | Model config names to use (e.g., ["default"]) |
SystemPrompt | string | System prompt that defines the agent's persona and behavior |
Plugins | string[] | List of plugins to enable (see Plugins) |
Tools | string[] | Optional: restrict to specific tools within enabled plugins |
Args | object | Plugin-specific configuration overrides |
Plugin Args Reference
Override default plugin behavior per-agent using the Args object:
| Plugin | Arg Key | Default | Description |
|---|---|---|---|
| WebBrowser | WebBrowser:TimeoutMs | 30000 | Page load timeout (ms) |
| WebBrowser | WebBrowser:MaxContentLength | 50000 | Max markdown output chars |
| WebBrowser | WebBrowser:ScreenshotPath | — | Screenshot save directory |
| WebBrowser | WebBrowser:Headless | true | Run browser headless |
| PowerShell | PowerShell:WorkingDirectory | — | Default working directory |
| PowerShell | PowerShell:TimeoutSeconds | 30 | Command timeout |
| PowerShell | PowerShell:MaxOutputLength | 10000 | Max output chars |
| FileSystem | FileSystem:RootPath | temp dir | Base directory for file ops |
| TaskManager | TaskManager:RootPath | — | Task file directory |
| TaskManager | TaskManager:FileName | tasks.json | Task file name |
| Docker | Docker:TimeoutSeconds | 60 | Command timeout |
| Docker | Docker:MaxOutputLength | 10000 | Max output chars |
| Docker | Docker:Shell | /bin/bash | Shell to use |
| Microsoft365Email | Microsoft365Email:MaxResults | 25 | Default email query count |
| Microsoft365Email | Microsoft365Email:MaxBodyLength | 10000 | Max email body chars |
| Memory | Memory:MaxResults | 5 | Default search results |
| Compaction | CompactionEnabled | true | Enable or disable chat history compaction |
| Compaction | CompactionKeepLastN | 20 | Number of recent messages to always preserve |
| Compaction | CompactionMaxContextTokens | from model | Override context window size for this agent |
| Compaction | CompactionThreshold | 0.75 | Trigger compaction at this ratio of context window |
| Delegate | ManagedAgents | all agents | Comma-separated list of agent names to route to |
| Delegate | DelegationTimeoutSeconds | 180 | Max seconds to wait for delegated agent response |
| Workflow | ManagedAgents | all agents | Comma-separated list of agent names to delegate to |
| Workflow | MaxTaskAttempts | 3 | Max retry attempts per task |
Microsoft365 Section
Top-level config for Microsoft 365 integration (see Microsoft 365 Setup):
| Property | Description |
|---|---|
ClientId | Azure App Registration Application (client) ID |
EncryptedTokens | Auto-populated after authentication — do not edit manually |
UserDisplayName | Auto-populated after authentication |
UserEmail | Auto-populated after authentication |
Full Example
{
"Agents": [
{
"Handle": "General Assistant",
"AgentType": "assistant",
"Models": ["default"],
"SystemPrompt": "You are a helpful assistant.",
"Plugins": ["WebBrowser", "Memory", "TaskManager"],
"Args": {
"WebBrowser:Headless": true,
"Memory:MaxResults": 10
}
},
{
"Handle": "Project Lead",
"AgentType": "workflow",
"Models": ["default"],
"SystemPrompt": "You are a project coordinator. Plan and delegate work.",
"Args": {
"ManagedAgents": "General Assistant",
"MaxTaskAttempts": 3
}
}
],
"Microsoft365": {
"ClientId": "your-app-id-here"
}
}