hycode is provider-agnostic. It supports any OpenAI-compatible APIs (OpenAI, Anthropic, Ollama, OpenRouter), etc. Connect to custom providers, corporate proxies, or self-hosted models without modifying hycode's source code.
Your config file lives at:
~/.config/hycode/config.yaml
You can override settings with environment variables or CLI flags. Priority order: CLI flags > env vars > config file.
provider:type: openaibase_url: https://your-proxy.example.com/v1api_key: your-api-keymodel_id: your-model-name
export HYCODE_PROVIDER=openaiexport HYCODE_BASE_URL=https://your-proxy.example.com/v1export HYCODE_API_KEY=your-api-keyexport HYCODE_MODEL=your-model-namehycode
hycode -p openai --base-url https://your-proxy.example.com/v1 --api-key your-key -m your-model
All fields go under provider: in config.yaml.
| Field | YAML Key | Env Var | CLI Flag | Description |
|---|---|---|---|---|
| Type | type | HYCODE_PROVIDER | -p | Adapter type: openai, anthropic, bedrock |
| Base URL | base_url | HYCODE_BASE_URL | --base-url | API endpoint URL |
| API Key | api_key | HYCODE_API_KEY | --api-key | Authentication token |
| Model ID | model_id | HYCODE_MODEL | -m | Model identifier |
| Display Name | display_name | — | — | Name shown in the TUI status bar |
| Region | region | — | — | AWS region (Bedrock only) |
| Preset | Backend | Default Model |
|---|---|---|
| anthropic | Anthropic Messages API | claude-opus-4-6 |
| openai | OpenAI API | gpt-4o |
| bedrock | AWS Bedrock | claude-opus-4-6 |
| openrouter | OpenRouter | anthropic/claude-opus-4.6 |
| deepseek | DeepSeek | deepseek-chat |
| qwen | Alibaba Qwen | qwen-plus |
| ollama | Ollama (local) | llama3 |
| vllm | vLLM (local) | default |
| sglang | SGLang (local) | default |
The includes field merges additional config files that use the same YAML schema. Non-empty fields from included files override the main config. This is the recommended approach for extensions — write a separate file and include it, so extensions can add provider settings without touching the user's existing config.
includes:- corp_proxy.yaml # Adds corporate proxy settings- team_palette.yaml # Team branding
The recommended pattern for distributing a custom provider is a setup.sh that:
my_proxy.yaml) to ~/.config/hycode/includes: list in the main config.yaml#!/usr/bin/env bashset -euo pipefailCONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/hycode"CONFIG_FILE="$CONFIG_DIR/config.yaml"EXTENSION_FILE="$CONFIG_DIR/my_proxy.yaml"API_KEY="$(your-credential-tool get-token)"mkdir -p "$CONFIG_DIR"# Write the extension configcat > "$EXTENSION_FILE" <<EOFprovider:type: openaibase_url: https://your-proxy.example.com/v1api_key: $API_KEYmodel_id: your-model-namedisplay_name: your-providerEOF# Add to includes (if not already there)if [[ ! -f "$CONFIG_FILE" ]]; thenecho 'includes: ["my_proxy.yaml"]' > "$CONFIG_FILE"elif ! grep -q "my_proxy.yaml" "$CONFIG_FILE" 2>/dev/null; then{ echo 'includes: ["my_proxy.yaml"]'; cat "$CONFIG_FILE"; } > "$CONFIG_FILE.tmp"mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"fiecho "hycode configured for your-provider"
Palettes let you customize hycode's TUI colors, accent hues, and status verbs. Here's the default palette shipped with the binary:
palette:# Optional: load a named preset (see "Presets" below)# preset: defaultcolors:primary: "#B0B0B0" # Main brand color (neutral warm grey)secondary: "#909090" # Secondary accent (darker grey)accent1: "#707070" # Tertiary accent (optional)accent2: "#585858" # Quaternary accent (optional)# Progressive + past-tense verbs shown during/after agent turnsaction_verb: Cookingdone_verb: Cooked# Inline markdown code color. Empty = glamour default.# Valid values: "", primary, secondary, accent1, accent2markdown_code: ""# Syntax highlighting theme for code blockssyntax_theme: monokai
| Field | Type | Default | Notes |
|---|---|---|---|
| preset | string | (none) | Loads a named preset, then user fields override |
| colors.primary | hex string | #B0B0B0 | Required |
| colors.secondary | hex string | #909090 | Required |
| colors.accent1 | hex string | #707070 | Optional |
| colors.accent2 | hex string | #585858 | Optional |
| action_verb | string | Cooking | Present-progressive, shown while the agent is working |
| done_verb | string | Cooked | Past-tense, shown when a turn completes |
| markdown_code | enum | "" | One of: "", primary, secondary, accent1, accent2 |
| syntax_theme | enum | monokai | See list below |
Only primary, secondary, accent1, and accent2 exist — there is no background, border, or muted. The background is whatever your terminal theme provides.
| Value | Description |
|---|---|
| monokai | Monokai Pro (warm, high contrast) — default |
| dracula | Dracula (purple/cyan pastels) |
| github | GitHub (clean, familiar) |
| solarized | Solarized (Ethan Schoonover's classic) |
| catppuccin | Catppuccin |
| mariana | Mariana / Sublime Text (ocean palette) |
| breakers | Breakers (light-first, warm coastal) |
Named presets are loaded from (in priority order):
$HYCODE_PALETTES_FILE (env var)~/.config/hycode/palettes.json (user global)./.hycode/palettes.json (workspace)default fallbackRegister a team/brand palette in your own palettes.json:
{"my-team": {"colors": {"primary": "#FF6B35","secondary": "#F7C948","accent1": "#2EC4B6","accent2": "#011627"},"action_verb": "Forging","done_verb": "Forged"}}
Then reference it from config.yaml:
palette:preset: my-team
Per-user fields in config.yaml override the preset — e.g. you can load a preset and change only syntax_theme.
Beyond providers and palettes, hycode supports additional extension mechanisms (docs coming as the APIs stabilize):
HyCode can explore its own features and do a walk-through by invoking the /hycode-guide internal skill.