🔧

Ripperdoc

Configuration

Configuring Ripperdoc models and behavior

Ripperdoc can be configured through configuration files or environment variables.

Configuration Files

Configuration is loaded in order of precedence:

  1. Global: ~/.ripperdoc.json
  2. Project: .ripperdoc/config.json
  3. Local: .ripperdoc/config.local.json (gitignored)

Project and local configuration override global configuration.

Model Configuration

Basic Model Setup

{
  "model_profiles": {
    "default": {
      "provider": "openai_compatible",
      "model": "deepseek-chat",
      "api_key": "YOUR_DEEPSEEK_KEY",
      "api_base": "https://api.deepseek.com",
      "max_tokens": 4096,
      "temperature": 0.0
    }
  },
  "model_pointers": {
    "main": "default",
    "quick": "default"
  }
}

Multiple Models

You can define multiple model profiles:

{
  "model_profiles": {
    "default": {
      "provider": "openai_compatible",
      "model": "deepseek-chat",
      "api_key": "YOUR_DEEPSEEK_KEY",
      "api_base": "https://api.deepseek.com"
    },
    "reasoner": {
      "provider": "openai_compatible",
      "model": "deepseek-reasoner",
      "api_key": "YOUR_DEEPSEEK_KEY",
      "api_base": "https://api.deepseek.com",
      "thinking_mode": "deepseek"
    },
    "local": {
      "provider": "openai_compatible",
      "model": "llama3.2",
      "api_base": "http://localhost:11434/v1",
      "api_key": null
    }
  },
  "model_pointers": {
    "main": "default",
    "quick": "reasoner"
  }
}

Switch between profiles using the /models command or --model flag (use the profile name from model_profiles):

ripperdoc --model reasoner

Model Profile Fields

FieldDescriptionRequired
providerProvider typeYes
modelModel identifierYes
api_keyAPI key (or use env var)Provider-specific
api_baseAPI base URLProvider-specific
auth_tokenBearer token authenticationNo
max_tokensMaximum output tokensNo
temperatureSampling temperatureNo
thinking_modeExtended thinking modeNo
max_input_tokensMaximum input tokensNo
max_output_tokensMaximum output tokensNo
openai_tool_modeTool calling mode for OpenAINo
supports_visionOverride image/vision support (true/false)No
input_cost_per_million_tokensCost tracking (input)No
output_cost_per_million_tokensCost tracking (output)No

Set supports_vision to true if your model supports image input and auto-detection does not pick it up.

Provider Options

ProviderRequired ConfigDescription
openai_compatibleapi_base, modelAny OpenAI-compatible API
anthropicapi_keyAnthropic Claude
geminiapi_keyGoogle Gemini

Authentication Options

{
  "model_profiles": {
    "with_api_key": {
      "provider": "openai_compatible",
      "api_key": "sk-xxx",
      "api_base": "https://api.example.com/v1",
      "model": "model-name"
    },
    "with_bearer_token": {
      "provider": "openai_compatible",
      "auth_token": "your-bearer-token",
      "api_base": "https://api.example.com/v1",
      "model": "model-name"
    }
  }
}

Thinking Mode

For models that support extended thinking (DeepSeek, Claude with extended thinking):

{
  "model_profiles": {
    "reasoning": {
      "provider": "openai_compatible",
      "model": "deepseek-reasoner",
      "api_key": "YOUR_DEEPSEEK_KEY",
      "api_base": "https://api.deepseek.com",
      "thinking_mode": "deepseek"
    }
  }
}

Thinking mode options:

ModeDescription
noneDisable extended thinking (default)
deepseekDeepSeek-style thinking
anthropicAnthropic-style thinking (Claude)

OpenAI Tool Mode

Control how tools are presented to OpenAI-compatible models:

{
  "model_profiles": {
    "custom": {
      "provider": "openai_compatible",
      "model": "model-name",
      "openai_tool_mode": "native"
    }
  }
}

Options:

  • native - Use OpenAI native tool calling
  • text - Use text-based tool descriptions

Cost Tracking

Track token costs per model:

{
  "model_profiles": {
    "expensive": {
      "provider": "openai_compatible",
      "model": "gpt-4",
      "api_key": "YOUR_KEY",
      "api_base": "https://api.openai.com/v1",
      "input_cost_per_million_tokens": 30.0,
      "output_cost_per_million_tokens": 60.0
    }
  }
}

Custom API Endpoints

For OpenAI-compatible APIs:

{
  "model_profiles": {
    "custom": {
      "provider": "openai_compatible",
      "api_base": "https://your-api-endpoint.com/v1",
      "api_key": "YOUR_CUSTOM_KEY",
      "model": "your-model-name"
    }
  },
  "model_pointers": {
    "main": "custom",
    "quick": "custom"
  }
}

Permission Settings

{
  "allowed_tools": ["Read", "Glob", "Grep", "LS", "Edit", "Bash"],
  "bash_allow_rules": [
    {"pattern": "npm *", "description": "Allow npm"}
  ],
  "bash_ask_rules": [
    {"pattern": "terraform *", "description": "Always ask before terraform"}
  ],
  "bash_deny_rules": [
    {"pattern": "rm -rf /", "description": "Block dangerous"}
  ]
}

See Permissions for detailed configuration.

Theme Configuration

Ripperdoc includes a built-in theme system for customizing the CLI appearance. Configure your preferred theme in the global config:

{
  "theme": "dark"
}

Available Themes

ThemeDescription
darkDefault dark theme with cyan accents
lightLight theme for bright terminals
monokaiMonokai-inspired color scheme
draculaDracula color scheme
solarized_darkSolarized dark color scheme
nordArctic, bluish color scheme

Switch themes at runtime using the /themes command:

> /themes              # Show current theme and list available
> /themes light        # Switch to light theme
> /themes preview nord # Preview nord theme colors

CLI Options

OptionDescription
--model NAMEUse a specific model profile
--yoloSkip permission prompts
--verboseEnable verbose output
--max-thinking-tokens NSet max thinking tokens
-c, --continueContinue last session
-p, --prompt TEXTNon-interactive prompt

Environment Variables

API keys can be provided in the config file. If you want to configure via env vars, Ripperdoc only reads RIPPERDOC_* variables (provider-specific vars like OPENAI_API_KEY are not used).

RIPPERDOC_ overrides

These variables override config values in memory for the current session (they are not persisted to disk). If no profile exists, set at least RIPPERDOC_MODEL, RIPPERDOC_PROTOCOL, or RIPPERDOC_BASE_URL so Ripperdoc can build a profile.

VariableDescription
RIPPERDOC_BASE_URLAPI base URL override (api_base)
RIPPERDOC_API_KEYAPI key override (api_key)
RIPPERDOC_AUTH_TOKENAuth token override (auth_token)
RIPPERDOC_MODELModel name override
RIPPERDOC_SMALL_FAST_MODELModel name for the quick pointer
RIPPERDOC_PROTOCOLProtocol family (anthropic, openai_compatible, gemini)

Other environment variables

VariableDescription
RIPPERDOC_MAX_RETRIESMax API retries (default: 10)
RIPPERDOC_API_TIMEOUTAPI timeout in seconds (default: 120)

See Environment Variables for a complete list.