-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathconfig.example
More file actions
211 lines (196 loc) · 7.97 KB
/
Copy pathconfig.example
File metadata and controls
211 lines (196 loc) · 7.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# Save to ~/.config/3code/config
#
# Values are Nim string literals — always wrap them in double quotes.
# parsecfg treats ':', '=', and '#' as syntax in unquoted values, so
# unquoted URLs or API keys will silently truncate or drop.
[settings]
current = "baseten.glm5"
; current = "openai.gpt-4o-mini"
; auto_update = "true" ; on for prebuilt binaries, off for source builds
; [search] configures the `web_search` tool. Engine is one of:
; exa (default) keyless MCP endpoint; exa-key for a paid tier
; parallel keyless MCP endpoint
; brave keyed REST endpoint; requires brave-key
; No automatic failover: the chosen engine is used as-is. Keys are
; engine-specific (`exa-key`, `brave-key`) and also read from their env
; vars (EXA_API_KEY, BRAVE_API_KEY).
; [search]
; engine = "brave"
; exa-key = "..."
; brave-key = "..."
; notify = off ; turn off the desktop notification that fires when a turn ends (on by default)
; sandbox = off ; disable filesystem sandbox enforcement (on by default: .sandbox in the project, else ~/.config/3code/sandbox)
; patient_retry = off ; disable patient retry of 429/5xx/network errors (on by default: ~36h hold so a long-running session rides out a usage limit or network dropout without dropping to the prompt)
; sandbox_wall_warn = off ; silence the Windows "wall not set up" warning (host rules in policy, no `3code wall setup-windows` yet)
; bash_path = "C:\\tools\\msys64\\usr\\bin\\bash.exe" ; Windows only: force a bash path (MSYS2 and Git for Windows are auto-detected)
;
; [shortcuts] remaps editor commands. Value is a space-separated list of
; keys; empty string unbinds. Defaults match today's hardcoded behaviour.
; Key syntax: ESC / Escape, CtrlX / Ctrl+X, AltX / Alt+X, Home, End, Up,
; Down, Left, Right, Insert, Delete, Backspace, Tab, ShiftTab. Prefix
; Double for two consecutive presses (DoubleCtrlC, DoubleESC).
; Commands: cancel, clear, quit-if-empty, home, end, left, right,
; word-left, word-right, up, down, history-previous, history-next,
; backspace, delete, insert, delete-word-left, delete-to-boundary-left,
; clear-screen, suspend, complete, reverse-complete, edit-in-editor,
; insert-newline. `clear` also adds the discarded text to history.
; [shortcuts]
; cancel = "DoubleESC CtrlC"
; clear = "ESC"
# Colour tone. 3code detects dark vs light background automatically by
# querying the terminal background (OSC 11). Set `tone` to pin it instead
# (the legacy key `mode` and value "bright" still work):
# tone = "auto" detect from the terminal (the default)
# tone = "dark" force the dark palette
# tone = "light" force the light-background palette
; tone = "light"
#
# The white-family colours can be overridden per tone. A plain key sets
# BOTH tones; a "-light" key sets light tone only and wins there. Keys
# are bright-white, off-white, dim-white, token-bar, private-bar. Values
# are quoted ANSI escape sequences (parsecfg interprets backslash escapes,
# so "\x1b[30m" becomes a real ESC byte). Defaults:
# bright-white = "\x1b[97m" (dark) / "\x1b[30m" (light, black)
# off-white = "\x1b[38;5;252m" / "\x1b[38;5;238m"
# dim-white = "\x1b[38;5;244m" / "\x1b[38;5;250m"
# token-bar = "\x1b[36m" (cyan; the live token bar)
# private-bar = "\x1b[35m" (magenta; the bar in private mode)
# The colourful colours (cyan/green/red/magenta) are otherwise fixed in
# both tones.
;
; [colors]
; bright-white = "\x1b[37m"
; bright-white-light = "\x1b[30m"
[provider]
name = "baseten"
url = "https://inference.baseten.co/v1"
key = "..."
models = "zai-org/GLM-5 thinkingmachines/inkling"
; current_model = "zai-org/GLM-5" ; remembered per-provider model: switching
; ; back with :provider returns here, not to the first
; ; entry. Written automatically by :model.
[provider]
name = "openai"
url = "https://api.openai.com/v1"
key = "sk-..."
models = "gpt-4o-mini gpt-4o"
[provider]
name = "groq"
url = "https://api.groq.com/openai/v1"
key = "gsk_..."
models = "llama-3.3-70b-versatile llama-3.1-8b-instant"
[provider]
name = "openrouter"
url = "https://openrouter.ai/api/v1"
key = "sk-or-..."
models = "openai/gpt-oss-120b"
; SuperGrok subscription (browser OAuth via `:provider add` → supergrok).
; Tokens live in $XDG_DATA_HOME/3code/auth/xai.json and refresh automatically.
; Can sit beside an API-key `xai` provider.
; [provider]
; name = "supergrok"
; url = "https://api.x.ai/v1"
; key = ""
; auth = "oauth"
; models = "grok-4.6 grok-4.5 grok-4.20"
;
; ChatGPT Plus/Pro subscription (browser OAuth via `:provider add` → chatgpt).
; Tokens live in $XDG_DATA_HOME/3code/auth/openai.json and refresh
; automatically. Requests go to the ChatGPT Codex backend
; (chatgpt.com/backend-api/codex), not api.openai.com. Can sit beside an
; API-key `openai` provider.
; [provider]
; name = "chatgpt"
; url = "https://api.openai.com/v1"
; key = ""
; auth = "oauth"
; models = "gpt-5.4 gpt-5.5"
;
; [provider]
; name = "xai"
; url = "https://api.x.ai/v1"
; key = "xai-..."
; models = "grok-4.6 grok-4.5 grok-4.20"
[provider]
name = "together"
url = "https://api.together.xyz/v1"
key = "..."
models = "thinkingmachines/Inkling zai-org/GLM-5.2"
; model_prefix = "meta-llama/"
; models = "Llama-3.3-70B-Instruct-Turbo"
[provider]
name = "fireworks"
url = "https://api.fireworks.ai/inference/v1"
key = "fw..."
models = "accounts/fireworks/models/inkling"
[provider]
name = "longcat"
url = "https://api.longcat.chat/openai"
key = "..."
models = "LongCat-2.0"
[provider]
name = "hetzner"
url = "https://inference.hetzner.com/api/v1"
key = "..."
models = "GLM-5.2-NVFP4 DeepSeek-V4-Flash-0731 Qwen/Qwen3.6-35B-A3B-FP8 Kimi-K2.7-Code"
[provider]
name = "greenpt"
url = "https://api.greenpt.ai/v1"
key = "..."
models = "glm-5.2 glm-5.3 glm-5.3-flash kimi-k3 deepseek-v4-flash-0731"
[provider]
name = "aki"
url = "https://aki.io/openai/v1"
key = "..."
models = "kimi-k2.7-code-1100b deepseek-v4-flash-0731-284b minimax-m2.5-230b"
[provider]
name = "lyceum"
url = "https://api.lyceum.technology/openai/v1"
key = "lk_..."
models = "z-ai/glm-5.2 moonshotai/kimi-k3 deepseek/deepseek-v4-pro"
# [params] sections override the known-good model parameters per
# (provider, model) pair. `provider` scopes to one provider; `model` is
# optional: omit it (or leave it empty) and the entry covers every
# model of that provider. A model-scoped entry beats a provider-wide
# one; among equals the last section in the file wins. Every parameter
# is optional; unset ones keep the known-good value (and models off the
# known-good table simply get that parameter sent, where before it was
# omitted). Values are quoted string literals.
# temperature float, e.g. "0.4"
# max-tokens int, per-turn output budget
# think-back none | turn | all: how much of the assistant's
# own reasoning_content is replayed in the request
# history. none strips it everywhere (strict
# validators), turn keeps only the active tool loop,
# all keeps every turn (deepseek demands it, glm/kimi
# preserved thinking rewards it)
# context-window int, tokens; drives compaction thresholds
# allow-private bool: trust this provider (or just this model) with
# private-mode data (`:private on` gates turns on it;
# see Private mode in the manual). Curated zero-training
# providers, e.g. together/fireworks/ovh/novita, are
# allowed without this
#
# [params]
# provider = "zai"
# temperature = "0.2"
# think-back = "turn"
#
# [params]
# provider = "zai"
# model = "glm-5.2"
# temperature = "0.4"
# max-tokens = "16384"
# think-back = "all"
#
# `family` is an experimental-only override (only honored under
# `--experimental`) that picks the system-prompt branch by family
# name, when the (provider, model) combo isn't on the known-good
# list. Known-good combos ignore it.
;
; [provider]
; name = "deepseek"
; url = "https://api.deepseek.com/v1"
; key = "..."
; family = "deepseek"
; models = "deepseek-chat"