@globant/coda-windows-x64 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/assets/agents/coda-help.md +166 -0
  2. package/assets/agents/create-workflow.md +264 -0
  3. package/assets/agents/explore.md +26 -0
  4. package/assets/docs/agents.md +162 -0
  5. package/assets/docs/cli-reference.md +131 -0
  6. package/assets/docs/cli-vs-batch.md +58 -0
  7. package/assets/docs/config-json.md +314 -0
  8. package/assets/docs/config-reference.md +329 -0
  9. package/assets/docs/configuration.md +105 -0
  10. package/assets/docs/connect-provider.md +77 -0
  11. package/assets/docs/extensions.md +260 -0
  12. package/assets/docs/faq.md +152 -0
  13. package/assets/docs/glossary.md +41 -0
  14. package/assets/docs/guide-automate.md +135 -0
  15. package/assets/docs/guide-changes.md +101 -0
  16. package/assets/docs/guide-collaborate.md +119 -0
  17. package/assets/docs/guide-extend.md +120 -0
  18. package/assets/docs/guide-understand.md +95 -0
  19. package/assets/docs/hooks.md +704 -0
  20. package/assets/docs/how-it-works.md +73 -0
  21. package/assets/docs/index.md +62 -0
  22. package/assets/docs/installation.md +71 -0
  23. package/assets/docs/logging.md +123 -0
  24. package/assets/docs/overview.md +91 -0
  25. package/assets/docs/permissions.md +93 -0
  26. package/assets/docs/quickstart.md +104 -0
  27. package/assets/docs/sessions.md +139 -0
  28. package/assets/docs/shortcuts.md +61 -0
  29. package/assets/docs/tools-reference.md +81 -0
  30. package/assets/docs/workflows.md +146 -0
  31. package/assets/skills/create-extension/SKILL.md +293 -0
  32. package/assets/skills/create-hook/SKILL.md +442 -0
  33. package/assets/skills/create-skill/SKILL.md +180 -0
  34. package/assets/skills/plan/SKILL.md +25 -0
  35. package/coda.exe +0 -0
  36. package/lib/keytar/build/Release/keytar.node +0 -0
  37. package/lib/keytar/lib/keytar.js +43 -0
  38. package/lib/opentui/assets/javascript/highlights.scm +205 -0
  39. package/lib/opentui/assets/javascript/tree-sitter-javascript.wasm +0 -0
  40. package/lib/opentui/assets/markdown/highlights.scm +150 -0
  41. package/lib/opentui/assets/markdown/injections.scm +27 -0
  42. package/lib/opentui/assets/markdown/tree-sitter-markdown.wasm +0 -0
  43. package/lib/opentui/assets/markdown_inline/highlights.scm +115 -0
  44. package/lib/opentui/assets/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
  45. package/lib/opentui/assets/typescript/highlights.scm +604 -0
  46. package/lib/opentui/assets/typescript/tree-sitter-typescript.wasm +0 -0
  47. package/lib/opentui/assets/zig/highlights.scm +284 -0
  48. package/lib/opentui/assets/zig/tree-sitter-zig.wasm +0 -0
  49. package/lib/opentui/parser.worker.js +4244 -0
  50. package/lib/opentui/tree-sitter-3jzf13jk.wasm +0 -0
  51. package/lib/ripgrep/COPYING +3 -0
  52. package/lib/ripgrep/LICENSE-MIT +21 -0
  53. package/lib/ripgrep/UNLICENSE +24 -0
  54. package/lib/ripgrep/rg.exe +0 -0
  55. package/package.json +20 -0
@@ -0,0 +1,329 @@
1
+ # Configuration Reference
2
+
3
+ Reference for the most common configuration options. For how to set these up in practice, see [Configuration](#configuration). To see every block together in one annotated file you can copy from, see [config.json — A Complete Example](#config-json). Most of these can be changed from the UI — you rarely need to edit the files by hand.
4
+
5
+ ## Config file locations
6
+
7
+ | File | Purpose |
8
+ | --- | --- |
9
+ | `~/.coda/config.json` | User-global settings |
10
+ | `~/.coda/.secrets` | API keys (dotenv format, never commit) |
11
+ | `~/.coda/mcp.json` | Global MCP server definitions |
12
+ | `<project>/.coda/config.json` | Project-level overrides |
13
+ | `<project>/coda.config.ts` | TypeScript config (takes priority) |
14
+ | `<project>/.coda/mcp.json` | Project-level MCP servers |
15
+
16
+ ## activeProfile and profiles
17
+
18
+ **`activeProfile`** and **`profiles`** are the current way CODA selects which AI backend to use. The setup wizard (`/providers` or `coda --reconfigure`) and `/switch-profile` (alias `/sp`) manage these for you.
19
+
20
+ | Field | Description |
21
+ | --- | --- |
22
+ | `activeProfile` | ID of the currently-active profile (key into `profiles`). Set by the wizard or `/switch-profile`. |
23
+ | `profiles` | Map of named, switchable provider targets keyed by a unique ID you choose. |
24
+
25
+ Each profile has a `provider` type that determines its shape:
26
+
27
+ ### `glob-ai` profiles (Glob.AI OS / Globant)
28
+
29
+ ```jsonc
30
+ {
31
+ "activeProfile": "work",
32
+ "profiles": {
33
+ "work": {
34
+ "provider": "glob-ai",
35
+ "label": "Globant Clients",
36
+ "instance": "clients", // "clients" | "corp" | "saas-europe" | custom id
37
+ "auth": { "method": "oauth" },
38
+ "model": "anthropic/claude-opus-4-8",
39
+ "org": { "id": "org-123", "name": "My Org" }, // set by wizard after login
40
+ "project": { "id": "proj-456", "name": "My Project" }
41
+ }
42
+ }
43
+ }
44
+ ```
45
+
46
+ | Field | Description |
47
+ | --- | --- |
48
+ | `provider` | Must be `"glob-ai"` |
49
+ | `label` | Human-readable name shown in the UI |
50
+ | `instance` | Preset environment: `"clients"`, `"corp"`, `"saas-europe"`, or a custom ID. Custom instances require a `baseUrl`. |
51
+ | `auth` | Auth method: `{ "method": "oauth" }` (browser login, tokens in OS keyring) or `{ "method": "apikey", "secretRef": "ENV_VAR_NAME" }` |
52
+ | `model` | Default model for this profile (optional) |
53
+ | `org` / `project` | Selected org and project (written by wizard after login) |
54
+ | `favoriteModels` | Array of model IDs shown as quick-switch options |
55
+ | `fastModel` / `smartModel` / `deepModel` | Model IDs for the `"fast"`, `"smart"`, and `"deep"` agent shortcut tiers |
56
+
57
+ ### `openai-compat` profiles (any OpenAI-compatible API)
58
+
59
+ ```jsonc
60
+ {
61
+ "activeProfile": "my-api",
62
+ "profiles": {
63
+ "my-api": {
64
+ "provider": "openai-compat",
65
+ "label": "My Custom API",
66
+ "baseUrl": "https://api.example.com/v1",
67
+ "auth": { "method": "apikey", "secretRef": "MY_API_KEY" },
68
+ "model": "my-model"
69
+ }
70
+ }
71
+ }
72
+ ```
73
+
74
+ | Field | Description |
75
+ | --- | --- |
76
+ | `provider` | Must be `"openai-compat"` |
77
+ | `label` | Human-readable name |
78
+ | `baseUrl` | Base URL of the API endpoint |
79
+ | `auth` | Must be `{ "method": "apikey", "secretRef": "ENV_VAR_NAME" }` |
80
+ | `model` | Default model (optional) |
81
+
82
+ ### `ollama` profiles (local Ollama server)
83
+
84
+ ```jsonc
85
+ {
86
+ "activeProfile": "local",
87
+ "profiles": {
88
+ "local": {
89
+ "provider": "ollama",
90
+ "label": "Local Ollama",
91
+ "baseUrl": "http://127.0.0.1:11434/v1", // optional, this is the default
92
+ "auth": { "method": "none" },
93
+ "model": "llama3.1"
94
+ }
95
+ }
96
+ }
97
+ ```
98
+
99
+ | Field | Description |
100
+ | --- | --- |
101
+ | `provider` | Must be `"ollama"` |
102
+ | `label` | Human-readable name |
103
+ | `baseUrl` | Ollama server URL (optional, defaults to `http://127.0.0.1:11434/v1`) |
104
+ | `auth` | Must be `{ "method": "none" }` |
105
+ | `model` | The model you've pulled in Ollama |
106
+
107
+ Start Ollama first: `ollama serve` and `ollama pull <model>`. You can configure the same thing through the wizard: `/providers` → **Custom provider** → **Ollama** (see [Connect a Provider](#connect-provider)).
108
+
109
+ ---
110
+
111
+ ## providers (runtime client map — legacy)
112
+
113
+ > **CODA no longer writes `provider` / `providers` to disk.** The on-disk config is profiles-only; at launch CODA derives an equivalent runtime provider-client map from your active profile. This section documents the legacy shape for older configs (which still work) and for reference — you don't add it by hand.
114
+
115
+ Each entry maps a key (referenced by `provider`) to a typed config block:
116
+
117
+ | Type | Required fields | Notes |
118
+ | --- | --- | --- |
119
+ | `geai` | `baseUrl`, `apiKey` (or OAuth) | Glob.AI OS gateway |
120
+ | `openai-compat` | `baseUrl` | Any OpenAI-compatible API; `apiKey` optional |
121
+ | `ollama` | — | `baseUrl` optional (defaults to `http://127.0.0.1:11434/v1`) |
122
+ | `openai` | `apiKey` | OpenAI SDK |
123
+ | `anthropic` | `apiKey` | Anthropic SDK |
124
+ | `google` | `apiKey` | Google Generative AI SDK |
125
+ | `groq` | `apiKey` | Groq SDK |
126
+ | `openrouter` | `apiKey` | OpenRouter SDK |
127
+ | `azure` | `resourceName`, `apiKey`, `apiVersion` | Azure OpenAI SDK |
128
+ | `vertex` | project/region config | Google Vertex AI SDK |
129
+
130
+ Every provider entry also accepts `fastModel`, `smartModel`, `deepModel`, and a `models` map for per-model capability overrides.
131
+
132
+ Keep secrets out of `config.json` — store them in `~/.coda/.secrets` (dotenv format) and reference with `${VAR}`:
133
+
134
+ ```json
135
+ {
136
+ "providers": {
137
+ "my-api": {
138
+ "type": "openai-compat",
139
+ "baseUrl": "https://api.example.com/v1",
140
+ "apiKey": "${MY_API_KEY}"
141
+ }
142
+ }
143
+ }
144
+ ```
145
+
146
+ ## model (top-level)
147
+
148
+ | Field | Description |
149
+ | --- | --- |
150
+ | `model` | Legacy fallback model id, paired with the deprecated top-level `provider`. Prefer setting `model` inside a profile (or switch live with `/model`). Not written to disk by current CODA. |
151
+
152
+ ## auth (Glob.AI OS login preferences)
153
+
154
+ Applies to Glob.AI OS / Globant OAuth sign-in. The wizard manages these; you rarely edit them by hand.
155
+
156
+ | Field | Default | Description |
157
+ | --- | --- | --- |
158
+ | `auth.methodPreference` | `"access_token"` | Prefer OAuth access tokens (`"access_token"`) or a static API key (`"api_key"`) |
159
+ | `auth.callbackTimeout` | `300` | Seconds to wait for the browser OAuth callback |
160
+ | `auth.tokenRefreshThreshold` | (built-in) | Seconds before expiry at which an access token is proactively refreshed |
161
+ | `auth.gamRedirectUri` | `http://localhost:XXXX/callback` | OAuth redirect URI. **Deprecated:** prefer `authDefaults` inside the provider entry |
162
+
163
+ ## mcp (inline servers)
164
+
165
+ You can define [MCP](#tools-reference) servers inline instead of in `mcp.json`:
166
+
167
+ | Field | Description |
168
+ | --- | --- |
169
+ | `mcp.servers` | Map of server id → server entry (`command`+`args` for stdio, or `url` for http; plus optional `env`, `headers`, `timeout`, `authorizationToken`). Merged with `~/.coda/mcp.json` and `<project>/.coda/mcp.json`. |
170
+
171
+ ## bash
172
+
173
+ | Field | Default | Description |
174
+ | --- | --- | --- |
175
+ | `autoApproveLevel` | `"low"` | Risk level auto-approved without confirmation: `"safe"`, `"low"`, `"medium"`, `"high"` |
176
+ | `shellMode` | `"auto"` | Shell to use: `"auto"`, `"bash"`, `"powershell"`, `"wsl"` |
177
+
178
+ ## compaction
179
+
180
+ | Field | Default | Description |
181
+ | --- | --- | --- |
182
+ | `enabled` | `true` | Enable automatic pre-flight compaction |
183
+ | `threshold` | `0.75` | Fraction of token budget that triggers compaction (0.3–0.9) |
184
+ | `retainFraction` | `0.3` | Fraction of recent messages kept verbatim (0.1–0.9) |
185
+
186
+ ## reasoning
187
+
188
+ | Field | Default | Description |
189
+ | --- | --- | --- |
190
+ | `reasoning.enabled` | `false` | Opt in to sending thinking/reasoning tokens to reasoning-capable models. Off by default. |
191
+ | `reasoning.effort` | `"medium"` | Thinking effort level: `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"`. Change it live with `/effort` (see [Commands & Flags](#cli-reference)). Per-model support varies — some models accept only a subset, and some none at all. |
192
+
193
+ ## Other common settings
194
+
195
+ | Field | Default | Description |
196
+ | --- | --- | --- |
197
+ | `theme` | (unset) | UI theme: `"classic"` or `"modern"` (no schema default; the UI layer defaults to `"classic"`) |
198
+ | `maxSteps` | `300` | Cap on agent loop steps per turn |
199
+ | `agents.enabled` | `true` | Whether delegated agents and their tools are available |
200
+ | `agents.maxConcurrent` | `6` | Cap on parallel agent runs (1–10) |
201
+ | `agents.defaultModel` | — | **Legacy.** Default model for delegated runs. Kept for older configs; runs now use your main session model unless an agent definition sets `model`. |
202
+ | `agents.fastModel` | — | Model ID used when a run requests the `"fast"` tier (overrides provider-level setting) |
203
+ | `agents.smartModel` | — | Model ID used when a run requests the `"smart"` tier |
204
+ | `agents.deepModel` | — | Model ID used when a run requests the `"deep"` tier |
205
+ | `agents.disabledDefinitions` | — | Array of agent definition names to disable without deleting their files |
206
+ | `checkpoints.enabled` | on (interactive) / off (headless) | Master switch for the checkpoints subsystem |
207
+ | `errorHandling.posture` | `balanced` | How aggressively CODA retries on model/provider failures: `conservative` (fewer retries, fail fast), `balanced`, `aggressive` (more retries and failover attempts). See [How CODA Works](#how-it-works). |
208
+
209
+ ## tools
210
+
211
+ | Field | Description |
212
+ | --- | --- |
213
+ | `tools.glob` | Enable/disable the file finder and tune its limits |
214
+ | `tools.glob.max_results` | Max file paths returned per glob call (1–5000, default `100`) |
215
+ | `tools.grep.backend` | Content-search engine: `"ripgrep"` (default, bundled) or `"fastgrep"` |
216
+ | `tools.grep.index_path` | Path to a pre-built fgr index directory (fastgrep backend only) |
217
+ | `tools.grep` | Enable/disable content search and cap result counts |
218
+
219
+ ## vision
220
+
221
+ | Field | Description |
222
+ | --- | --- |
223
+ | `vision.model` | Model used by `examine_images` (Glob.AI OS profiles) |
224
+
225
+ ## checkpoints
226
+
227
+ | Field | Description |
228
+ | --- | --- |
229
+ | `checkpoints.enabled` | Master switch (on interactive, off headless) |
230
+ | `checkpoints.diskSoftCapMb` | Soft warning threshold for snapshot disk usage. Default **2048** (2 GiB) |
231
+ | `checkpoints.diskHardCapMb` | Hard limit; checkpoints disable for the session once exceeded. Default **5120** (5 GiB) |
232
+ | `checkpoints.maxWorktreeFiles` | Disable snapshots when the worktree exceeds this many files. Default **100000** |
233
+
234
+ ## skills
235
+
236
+ | Field | Default | Description |
237
+ | --- | --- | --- |
238
+ | `skills.descriptionMaxChars` | `200` | Max characters of each skill's description injected into the prompt (longer ones are truncated) |
239
+ | `skills.warnThreshold` | `100` | Warn when the number of discovered skills exceeds this — large skill sets cost context |
240
+
241
+ ## logging
242
+
243
+ | Field | Description |
244
+ | --- | --- |
245
+ | `logging.level` | Global default log level |
246
+ | `logging.levels` | Per-service overrides (e.g. `{ "core.agent": "debug" }`) |
247
+ | `logging.redact` | Extra redaction rules merged on top of the always-on built-ins |
248
+ | `logging.rawViewer.enabled` | Gate for browsing raw logs (on in dev, off in release) |
249
+
250
+ ## Advanced blocks
251
+
252
+ These exist for power users and rarely need hand-editing. Most can be reached through `/settings` or are tuned per provider.
253
+
254
+ **`fallback`** — failover between providers/models:
255
+
256
+ | Field | Default | Description |
257
+ | --- | --- | --- |
258
+ | `fallback.enabled` | `false` | Enable provider/model failover |
259
+ | `fallback.provider` | — | Key of the fallback provider |
260
+ | `fallback.model` | — | Model to use on the fallback provider (optional) |
261
+
262
+ **`webSearch`** — web search tool settings:
263
+
264
+ | Field | Default | Description |
265
+ | --- | --- | --- |
266
+ | `webSearch.provider` | `"brave"` | Search backend: `"exa"`, `"brave"`, or `"serper"` |
267
+ | `webSearch.apiKey` | — | API key for the chosen search backend |
268
+
269
+ **`session`** — session auto-rename behavior:
270
+
271
+ | Field | Default | Description |
272
+ | --- | --- | --- |
273
+ | `session.autoRenameEnabled` | `true` | Automatically rename sessions based on content |
274
+ | `session.autoRenameTimeoutMs` | `5000` | Timeout for the rename request (ms) |
275
+ | `session.autoRenameMaxRetries` | `3` | Retry limit for auto-rename failures |
276
+
277
+ **`composer`** — message queue behavior while the agent is busy:
278
+
279
+ | Field | Default | Description |
280
+ | --- | --- | --- |
281
+ | `composer.whileBusy.delivery` | `"queue"` | What to do with messages sent while the agent is running: `"queue"` or `"steer"` |
282
+ | `composer.queueSteer.enabled` | `true` | Enable queue/steer feature |
283
+ | `composer.queueSteer.defaultMode` | `"later"` | Default mode when queuing: `"next"` (run next) or `"later"` (append to queue) |
284
+
285
+ **`acp`** — agent communication protocol:
286
+
287
+ | Field | Default | Description |
288
+ | --- | --- | --- |
289
+ | `acp.enabled` | `true` | Enable ACP headless mode (`coda --acp`) |
290
+
291
+ **`autoupdate`** — automatic update behavior: `true` (auto-install), `"notify"` (notify only), or `false` (disable). Default `true`.
292
+
293
+ **`extensions`** — array of extension file paths to load at startup (e.g. `[".coda/extensions/my-tool.ts"]`).
294
+
295
+ **`reasoning`** — effort/thinking controls for reasoning-capable models.
296
+
297
+ **`telemetry`** — OpenTelemetry export:
298
+
299
+ | Field | Default | Description |
300
+ | --- | --- | --- |
301
+ | `telemetry.enabled` | `false` | Master switch for OTel export |
302
+ | `telemetry.exporter` | `"otlp"` | Exporter: `"otlp"` (send to a collector) or `"console"` (print spans locally) |
303
+ | `telemetry.otlpHost` | (build-injected) | Collector host/URL for the OTLP exporter |
304
+ | `telemetry.otlpProtocol` | `"http"` | OTLP transport: `"http"` or `"grpc"` |
305
+ | `telemetry.otlpUseTls` | `false` | Use HTTPS / gRPC TLS to the collector |
306
+ | `telemetry.serviceName` | — | Custom `service.name` reported in traces |
307
+ | `telemetry.tracesEnabled` | `true` | Emit traces |
308
+ | `telemetry.metricsEnabled` | `true` | Emit metrics |
309
+
310
+ Settings cascade in priority order: CLI flags override project config, which overrides your global config (see [Configuration](#configuration)).
311
+
312
+ ## Referencing secrets with `${VAR}`
313
+
314
+ Keep keys out of `config.json` by storing them in `~/.coda/.secrets` (dotenv format) and referencing them with `${VAR}` interpolation:
315
+
316
+ ```jsonc
317
+ // ~/.coda/.secrets
318
+ // GEAI_API_KEY=sk-...
319
+
320
+ // ~/.coda/config.json
321
+ { "providers": { "geai-corp": { "apiKey": "${GEAI_API_KEY}" } } }
322
+ ```
323
+
324
+ ## Environment variables
325
+
326
+ | Variable | Default | Description |
327
+ | --- | --- | --- |
328
+ | `LOG_LEVEL` | `info` | Log verbosity, Rust-style: a bare token sets the global floor, `service:level` overrides per service (e.g. `info,core.agent:debug`) |
329
+ | `CODA_HOME` | `~/.coda` | Alternative home directory for config, secrets, sessions, logs, and checkpoints |
@@ -0,0 +1,105 @@
1
+ # Configuration
2
+
3
+ CODA is configured from within the tool itself — you normally don't edit files by hand. Commands like `/providers` and `/settings` write your choices to a layered config. This page explains how that works and where everything lives.
4
+
5
+ ## Connect a provider
6
+
7
+ You don't need to run any command to get your first provider. The very first time you launch CODA, a setup wizard appears automatically and walks you through it:
8
+
9
+ - **Pick a Glob.AI OS environment** — Clients, Corp, SaaS Europe, and so on.
10
+ - **Choose how to authenticate** — **OAuth (recommended)**, which signs you in through your browser, or an **API key**.
11
+
12
+ For a step-by-step walkthrough of that flow — including OAuth vs API key and custom providers — see [Connect a Provider](#connect-provider). API keys are stored in `~/.coda/.secrets`, separate from config and never committed to Git.
13
+
14
+ To **add another provider or edit an existing one** later, open the wizard again from inside CODA:
15
+
16
+ ```text
17
+ /providers
18
+ ```
19
+
20
+ The same wizard is available from your terminal with `coda --reconfigure`.
21
+
22
+ ## Switch between providers
23
+
24
+ If you've set up more than one provider (say, two Glob.AI OS instances, or a local Ollama for testing), switch between them right from the UI with `/providers` — no config files to edit.
25
+
26
+ ## Where settings live
27
+
28
+ Settings cascade in priority order — project settings override user settings, and CLI flags override everything:
29
+
30
+ | File | What it's for |
31
+ | --- | --- |
32
+ | `~/.coda/config.json` | Your personal defaults — provider, model, theme |
33
+ | `~/.coda/.secrets` | API keys and credentials (never commit this) |
34
+ | `<project>/.coda/config.json` | Project-level overrides (safe to commit if no secrets) |
35
+ | `<project>/coda.config.ts` | TypeScript config — if present, it replaces the project `config.json` (the JSON is ignored) |
36
+ | `~/.coda/mcp.json` | MCP servers available in all your projects |
37
+ | `<project>/.coda/mcp.json` | MCP servers for this project only |
38
+ | `~/.coda/sessions/<id>/mcp.json` | Per-session MCP overrides (written by `/mcp` commands within a session) |
39
+ | `<project>/.coda/.env` or `<project>/.env` | Project-level secrets for `${VAR}` interpolation (merged with `~/.coda/.secrets`) |
40
+
41
+ ## Common settings to change
42
+
43
+ Some settings can be adjusted from the settings panel. Open it from inside CODA:
44
+
45
+ ```text
46
+ /settings
47
+ ```
48
+
49
+ **Bash approval level** — open **Bash Tool Preferences** to control how many shell commands CODA can run without asking you first. There are four levels:
50
+
51
+ - `safe` — only read-only commands run automatically; everything else asks.
52
+ - `low` — the default; a conservative set of safe commands is auto-approved.
53
+ - `medium` — more commands run without prompting.
54
+ - `high` — everything is auto-approved except destructive operations.
55
+
56
+ The same screen lets you pick the **shell** CODA uses (`auto`, `bash`, `powershell`, or `wsl`).
57
+
58
+ **Compaction** — to keep context fresh, CODA can automatically condense older conversation before it runs out of room. Tune it under **Context Compaction**:
59
+
60
+ - **Scope** — apply your changes globally or to the current project (project overrides global).
61
+ - **Enable / disable** — turn automatic compaction on or off. With it off, you can still compact on demand with `/compact`.
62
+ - **Threshold** — how full the context can get (as a percentage) before CODA condenses.
63
+ - **Retain fraction** — how much of the most recent conversation is kept intact when condensing; older messages are summarized.
64
+
65
+ **Chat input** — choose what happens when you send a message while CODA is already working: **Queue message** waits until the current turn finishes (default), while **Steer message** sends your message as the next input to guide the active flow. In `/settings`, this appears under **Composer**. See [Make Changes Safely](#guide-changes) for details.
66
+
67
+ **Theme** — switch the look of the UI between `classic` and `modern` under **UI Theme**.
68
+
69
+ ## How settings cascade
70
+
71
+ When the same key is set in more than one place, the most specific wins. From lowest to highest priority:
72
+
73
+ 1. **Built-in defaults** — what CODA ships with.
74
+ 2. **`~/.coda/config.json`** — your personal, machine-wide settings.
75
+ 3. **`<project>/.coda/config.json`** (or `<project>/coda.config.ts`, which replaces it) — project overrides.
76
+ 4. **CLI flags** — `--bash-security`, `--model`, `--profile`, and friends, for a single run.
77
+
78
+ So a project can raise the bash level for everyone who clones it, and you can still override it for one run with `--bash-security` — without editing any file.
79
+
80
+ ## What's safe to commit
81
+
82
+ - **Commit:** `<project>/.coda/config.json` (no secrets), `<project>/.coda/mcp.json`, `AGENTS.md`, shared skills/agents/workflows.
83
+ - **Never commit:** `~/.coda/.secrets` (it lives in your home directory, not the repo) and your personal `~/.coda/config.json`.
84
+ - **Think twice:** pinning the active `provider` or an elevated `bash.autoApproveLevel` in a project config affects every teammate — see [Collaborate with Your Team](#guide-collaborate).
85
+
86
+ ## A minimal `config.json`
87
+
88
+ You rarely write this by hand, but it helps to know the shape:
89
+
90
+ ```json
91
+ {
92
+ "activeProfile": "my-corp-profile",
93
+ "model": "claude-sonnet",
94
+ "theme": "modern",
95
+ "bash": { "autoApproveLevel": "low", "shellMode": "auto" },
96
+ "compaction": { "enabled": true, "threshold": 0.75 },
97
+ "agents": { "enabled": true, "maxConcurrent": 6 }
98
+ }
99
+ ```
100
+
101
+ > **Note:** The older `"provider"` key is still accepted for backward compatibility but `activeProfile` + `profiles` is the current mechanism used by the wizard and `/switch-profile`.
102
+
103
+ API keys are *not* in here — they live in `~/.coda/.secrets` in dotenv format and can be referenced from config with `${VAR}` interpolation.
104
+
105
+ See the full [Configuration Reference](#config-reference) for every available option, or [config.json — A Complete Example](#config-json) for one annotated file showing every block in context.
@@ -0,0 +1,77 @@
1
+ # Connect a Provider
2
+
3
+ The first time you launch CODA — before you can run a prompt — a setup wizard (titled **CODA setup**) walks you through connecting a **provider**: the AI backend CODA talks to. This page explains each choice so you land on the right one. You can reopen the wizard later — see **Reconfigure** below.
4
+
5
+ ## Step 1 — Choose how to connect
6
+
7
+ - **Glob.AI OS (Globant environments)** — what most people at Globant want.
8
+ - **Custom provider** — an OpenAI-compatible endpoint, or a local [Ollama](https://ollama.com) server.
9
+
10
+ ## Step 2 — Pick a Glob.AI OS environment
11
+
12
+ > **Note:** The environment picker (this step) only appears when you launch `coda --globant`. Running plain `coda` skips the picker and defaults directly to **SaaS Europe**.
13
+
14
+ Pick your environment: **Clients**, **Corp** (API key only — no browser OAuth), or **SaaS Europe**.
15
+
16
+ ## Step 3 — Authenticate
17
+
18
+ - **OAuth (recommended)** — CODA opens your browser, you sign in with your Globant account, and the session is stored for you. No keys to copy or rotate. Back in CODA, if you have more than one project assigned in that environment, you'll be asked to **select your organization and project** so CODA knows which workspace to use.
19
+ - **API Key** — paste or type your key (the input is hidden), then press **Enter**. Key-only environments skip straight here.
20
+
21
+ API keys are stored in `~/.coda/.secrets`, separate from your config and never committed to Git.
22
+
23
+ ## Custom provider
24
+
25
+ If you picked **Custom provider**, choose the type:
26
+
27
+ - **OpenAI-compatible** — enter a profile name, the base URL, and an API key.
28
+ - **Ollama** — point CODA at your local server (no API key needed). The default endpoint is `http://127.0.0.1:11434/v1`. For a copy-paste `config.json` example, see [Configuration Reference](#config-reference).
29
+
30
+ ## Switch between configured providers
31
+
32
+ Each provider you set up is stored as a named **profile** (in the `profiles` map of `~/.coda/config.json`), and one of them is marked **active** via the top-level `activeProfile` key. The active profile decides which backend — and, for Glob.AI OS, which environment, organization, and project — CODA talks to.
33
+
34
+ Once you have more than one profile configured, switch between them quickly with **`/switch-profile`** (alias **`/sp`**):
35
+
36
+ ```text
37
+ /switch-profile # opens the profile picker
38
+ ```
39
+
40
+ `/switch-profile` only chooses among profiles you've **already configured** — it doesn't add or edit them. It saves your choice as `activeProfile` and reports `Active profile "…" set — applies on next launch`; the switch takes effect the next time you start CODA (there's no live re-target of the current session).
41
+
42
+ To **add, edit, or remove** a profile instead of just selecting one, use `/providers` (see [Reconfigure](#reconfigure)).
43
+
44
+ ## Switching the active Glob.AI OS project
45
+
46
+ If you authenticated with OAuth and your account has more than one project in the chosen environment, CODA asks you to select an **organization and project** during setup. To change that selection later without re-running the whole wizard, use `/project` inside a session — it switches the active Glob.AI OS project (OAuth only).
47
+
48
+ ## Check who you're signed in as
49
+
50
+ To confirm the current authentication state from inside a session:
51
+
52
+ ```text
53
+ /auth-status (alias /whoami)
54
+ ```
55
+
56
+ It shows the active provider, environment, and — for OAuth — the signed-in identity and selected project. To sign out of a Glob.AI OS session, run `/logout`.
57
+
58
+ ## Reconfigure
59
+
60
+ To re-authenticate within an active session (e.g. after an OAuth session expires), run `/login` — it re-initiates browser OAuth without reopening the full wizard. For first-time provider setup or editing an existing provider, use `/providers` inside a session (changes take effect after a restart) or `coda --reconfigure` from your terminal. Use `/providers` to switch between configured providers anytime — the provider you configure or select there becomes the **active** one. `coda --reconfigure` edits a provider's settings *without* changing which provider is active.
61
+
62
+ You can configure **more than one provider** and keep them side by side — for example a Glob.AI OS environment for day-to-day work and a local Ollama for offline testing. `/providers` lets you add, edit, remove, and switch between them. If you only want to *change which configured profile is active* (not add or edit one), `/switch-profile` (alias `/sp`) is the quicker path — see [Switch between configured providers](#switch-between-configured-providers). Either way, the change applies after a restart.
63
+
64
+ ### Switch a Glob.AI OS provider between OAuth and API key
65
+
66
+ To change *how* you authenticate to the same environment — say, move from a pasted API key to browser OAuth, or the reverse — reopen the wizard with `/providers` (or `coda --reconfigure`), select that environment again, and pick the other authentication method. CODA replaces the stored credential: an OAuth session is captured for you, or a new key is written to `~/.coda/.secrets`. The change takes effect after a restart. To drop the current credential entirely, `/logout` signs out of the active Glob.AI OS session.
67
+
68
+ ## Troubleshooting
69
+
70
+ - **The browser didn't open during OAuth** — copy the URL CODA prints and open it manually. Once you finish signing in, the session is captured automatically.
71
+ - **"No project found" after OAuth** — your account may not be assigned to a project in that environment. Pick a different environment, or use `/project` after sign-in to select one.
72
+ - **A key stopped working** — re-run `/providers` (or `coda --reconfigure`) and paste a fresh key. Keys live in `~/.coda/.secrets`; rotating one there is enough.
73
+ - **Changes to `/providers` didn't take effect** — provider changes apply after a restart. Exit and relaunch CODA.
74
+
75
+ ## What's next
76
+
77
+ With a provider connected, head to [Quick Start](#quickstart) to run your first prompt. For where credentials and settings live, see [Configuration](#configuration).