Configuration

Dupli layers configuration, and the last layer always wins:

  1. Built-in defaults
  2. Global config — ~/.config/dupli/dupli.json
  3. Per-folder config — ./dupli.json or ./.dupli/dupli.json
  4. CLI flags — --provider, --model, --theme, --sandbox, --web-port

This works like OpenCode’s config: one global file for your preferences, one file per project for anything project-specific.

Example

{
  "provider": "anthropic",
  "model": "claude-sonnet-4-20250514",
  "theme": "dracula",
  "sandbox": false,
  "sandboxImage": "ubuntu:24.04",
  "maxTurns": 8,
  "autoApprove": false,
  "webPort": 8620,
  "mcpServers": {
    "fetch": { "command": "uvx", "args": ["mcp-server-fetch"] }
  },
  "lspServers": {
    "rust": { "command": "rust-analyzer" }
  }
}

Fields

FieldTypeDefaultMeaning
providerstring—anthropic, openai, gemini, fireworks
modelstringprovider defaultModel ID passed to the API
themestringdupliSee Themes
sandboxboolfalseRun shell commands in Docker
sandboxImagestringubuntu:24.04Image for the sandbox
maxTurnsnumber8Action rounds per prompt
autoApproveboolfalseReserve for non-interactive flows
webPortnumber8620Port for --web
mcpServersobject{}See MCP
lspServersobject{}See LSP

Project vs global

The per-folder file is ideal for project-specific servers and models:

{ "provider": "fireworks", "mcpServers": { "db": { "command": "pg-mcp" } } }

Keep the global file for personal defaults like your theme. Both files are plain JSON; mcpServers and lspServers maps are merged across layers.