@globant/coda-windows-x64-baseline 1.3.0 → 1.5.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.
- package/assets/agents/coda-help.md +25 -12
- package/assets/agents/council.md +11 -0
- package/assets/agents/reviewer.md +14 -0
- package/assets/agents/side.md +15 -0
- package/assets/docs/add-mcp-server-skill.md +137 -0
- package/assets/docs/agents.md +1 -1
- package/assets/docs/cli-reference.md +40 -4
- package/assets/docs/cli-vs-batch.md +2 -0
- package/assets/docs/config-json.md +71 -57
- package/assets/docs/config-reference.md +99 -48
- package/assets/docs/configuration.md +33 -18
- package/assets/docs/connect-provider.md +34 -31
- package/assets/docs/extensions.md +25 -28
- package/assets/docs/faq.md +47 -15
- package/assets/docs/glossary.md +8 -8
- package/assets/docs/guide-automate.md +6 -2
- package/assets/docs/guide-changes.md +4 -4
- package/assets/docs/guide-collaborate.md +8 -8
- package/assets/docs/guide-extend.md +32 -5
- package/assets/docs/hooks.md +33 -69
- package/assets/docs/how-it-works.md +3 -3
- package/assets/docs/index.md +8 -7
- package/assets/docs/installation.md +9 -9
- package/assets/docs/logging.md +1 -1
- package/assets/docs/overview.md +9 -8
- package/assets/docs/permissions.md +35 -16
- package/assets/docs/quickstart.md +9 -5
- package/assets/docs/sessions.md +6 -2
- package/assets/docs/shortcuts.md +53 -3
- package/assets/docs/tools-reference.md +21 -10
- package/assets/docs/workflows.md +2 -1
- package/assets/output-styles/attention-kind.md +50 -0
- package/assets/output-styles/concise.md +46 -0
- package/assets/output-styles/default.md +4 -0
- package/assets/output-styles/explanatory.md +84 -0
- package/assets/output-styles/learning.md +103 -0
- package/assets/output-styles/plain.md +39 -0
- package/assets/output-styles/proactive.md +52 -0
- package/assets/output-styles/rundown.md +23 -0
- package/assets/output-styles/spartan.md +26 -0
- package/assets/output-styles/visual.md +96 -0
- package/assets/skills/configure-mcp/SKILL.md +281 -0
- package/assets/skills/create-hook/SKILL.md +5 -5
- package/assets/skills/init-rules/SKILL.md +78 -26
- package/coda.exe +2 -2
- package/lib/keytar/build/Release/keytar.node +0 -0
- package/lib/opentui/parser.worker.js +15 -14
- package/lib/ripgrep/rg.exe +0 -0
- package/package.json +1 -1
package/assets/docs/glossary.md
CHANGED
|
@@ -4,21 +4,21 @@ Quick definitions for terms used throughout the docs.
|
|
|
4
4
|
|
|
5
5
|
| Term | Definition |
|
|
6
6
|
| --- | --- |
|
|
7
|
-
| **AGENTS.md** |
|
|
7
|
+
| **AGENTS.md** | The preferred instruction filename for project conventions, quality gates, and constraints. CODA loads it from the launch directory at startup and can attach more-specific instruction files when reading deeper paths. `AGENT.md` and `CLAUDE.md` are fallback names. |
|
|
8
8
|
| **Agent** | In CODA, an agent is a Markdown-defined profile that describes a specialist persona. CODA can delegate subtasks to agents, running them in parallel for complex work. |
|
|
9
9
|
| **Batch mode** | Headless, non-interactive mode. Run with `coda -p "prompt"`. No TUI, no multi-turn conversation — use in scripts and CI. |
|
|
10
10
|
| **Checkpoint** | A file snapshot taken before each turn — the state from before CODA acts on the message you just sent. Restored via `/timeline` or `/rewind`; your project's Git history is untouched. |
|
|
11
11
|
| **CLI** | The `coda` command-line tool. It runs in two modes: interactive (the TUI) and headless (batch). |
|
|
12
12
|
| **coda-help** | A built-in agent that answers questions about how to use CODA by searching the local user guide. CODA delegates to it automatically when you ask about itself. |
|
|
13
|
-
| **Compaction** |
|
|
13
|
+
| **Compaction** | Context reduction for long sessions. CODA either stores the current context directly or reduces it by moving stale tool output aside and, at the configured threshold, condensing older messages into a summary. |
|
|
14
14
|
| **Extension** | A TypeScript module that registers custom tools, slash commands, or lifecycle hooks into CODA. |
|
|
15
|
-
| **Glob.AI
|
|
15
|
+
| **Glob.AI** | Globant's internal AI gateway — the primary provider for CODA at Globant. |
|
|
16
16
|
| **MCP** | Model Context Protocol. A standard for connecting AI models to external tools and services. CODA uses MCP servers to talk to GitHub, databases, CI systems, and other integrations. |
|
|
17
17
|
| **MEMORY.md** | Durable notes the agent keeps across sessions — preferences, decisions, and gotchas it learns. Unlike AGENTS.md (which you write), CODA maintains this itself, and it survives checkpoint rollbacks. |
|
|
18
|
-
| **Plugin** | A versioned, installable package that can bundle skills, agents, extensions, and
|
|
19
|
-
| **Provider** | The AI backend CODA sends prompts to — for example a Glob.AI
|
|
18
|
+
| **Plugin** | A versioned, installable package that can bundle skills, agents, extensions, MCP fragments, and lifecycle hooks. More structured than an extension; installable via `coda plugin install`. |
|
|
19
|
+
| **Provider** | The AI backend CODA sends prompts to — for example a Glob.AI instance, a local Ollama server, or any OpenAI-compatible endpoint. Managed with `/providers`. |
|
|
20
20
|
| **Session** | A persistent CODA conversation. Stored on disk; resumable at any time. |
|
|
21
|
-
| **Skill** | A Markdown file that encodes a repeatable workflow. Invoked with a slash command like `/skill-name`. |
|
|
21
|
+
| **Skill** | A Markdown file that encodes a repeatable workflow. Invoked with a slash command like `/skill-name`. CODA discovers skills from its own `.coda/skills` and, when enabled, from other agents' folders (`.agents`, `.claude`, `.codex`, `.opencode`) — see `skills.sources`. |
|
|
22
22
|
| **TUI** | Terminal User Interface — the full-screen interface you see when you run `coda` interactively. |
|
|
23
23
|
| **Workflow** | A deterministic script that orchestrates multiple agents — parallel fan-out, multi-stage pipelines, and loops. Authored by the built-in `create-workflow` agent, stored in `.coda/workflows/`, run in the background, and monitored with `/workflows`. |
|
|
24
24
|
| **ACP** | Agent Client Protocol — the integration that lets editors like Zed and JetBrains drive CODA. |
|
|
@@ -27,7 +27,7 @@ Quick definitions for terms used throughout the docs.
|
|
|
27
27
|
| **`.codaignore`** | A gitignore-syntax file at your project root with glob patterns (and optional `!negation` lines) to exclude from — or forcibly include in — checkpoints. Shares `.gitignore` semantics, so patterns, directory globs, and negations all work. |
|
|
28
28
|
| **Context window** | The amount of conversation CODA can hold at once. The status-bar percentage shows how full it is; compaction frees room as it fills. |
|
|
29
29
|
| **Drift** | Uncaptured changes in your worktree at restore time. CODA stops the restore so you don't lose work; press **F** to force it. |
|
|
30
|
-
| **`fastModel`** | The model the literal `model: "fast"` shortcut resolves to, used for cheap, high-volume agent runs. Can be configured per-provider (`providers.<key>.fastModel`) or globally under `agents.fastModel`; CODA also supplies a built-in Glob.AI
|
|
30
|
+
| **`fastModel`** | The model the literal `model: "fast"` shortcut resolves to, used for cheap, high-volume agent runs. Can be configured per-provider (`providers.<key>.fastModel`) or globally under `agents.fastModel`; CODA also supplies a built-in Glob.AI fallback when neither is set. |
|
|
31
31
|
| **`smartModel`** | The model the literal `model: "smart"` shortcut resolves to — the balanced mid-tier for agent runs. Configured under `agents.smartModel` or per-provider. |
|
|
32
32
|
| **`deepModel`** | The model the literal `model: "deep"` shortcut resolves to — the highest-capability, most expensive tier. Configured under `agents.deepModel` or per-provider. |
|
|
33
33
|
| **HITL** | Human-in-the-loop — the approval model where CODA pauses to ask before risky actions. |
|
|
@@ -37,7 +37,7 @@ Quick definitions for terms used throughout the docs.
|
|
|
37
37
|
| **`propose_policy`** | The built-in tool CODA uses to suggest a permanent permission change (add rule, remove rule, or change mode) for you to approve. Triggered when you ask in plain English (e.g. "allow pnpm build") or after a denial. On by default; a *widening* change always needs your explicit approval. Disable with `permissions.proposePolicy: false`, `CODA_PROPOSE_POLICY`, or the admin `disableProposePolicy`. |
|
|
38
38
|
| **Managed policy** | An organization-level policy set by an administrator that overrides and locks certain permission settings in your personal and project configs (e.g. forbidding `auto` mode, restricting MCP servers). A managed `deny` is final. |
|
|
39
39
|
| **Headless mode** | See *Batch mode*. |
|
|
40
|
-
| **Marketplace** |
|
|
40
|
+
| **Marketplace** | A catalog of installable plugins, reachable from the `/plugin` manager. CODA recognizes native, Claude Code, Cursor, and portable Agent Plugins layouts. |
|
|
41
41
|
| **Redaction** | The always-on scrubbing of secret-looking keys and values from logs before they're written to disk. |
|
|
42
42
|
| **ripgrep / fastgrep** | The two content-search backends behind the `grep` tool. ripgrep ships bundled and is the default. |
|
|
43
43
|
| **Shadow repository** | The private Git repo where checkpoints are stored, separate from your project's own `.git`. Located at `~/.coda/checkpoints/<hash>/` by default (one per project, keyed by a SHA-256 of the project path). The base directory can be relocated via `CODA_HOME`. |
|
|
@@ -76,7 +76,7 @@ fi
|
|
|
76
76
|
| `--checkpoints=true` | Enable file snapshots (off by default in headless runs) |
|
|
77
77
|
| `--profile id` | Use a specific persisted profile for this run (read-only; doesn't change your saved `activeProfile`) |
|
|
78
78
|
| `--provider name` | Ephemeral run provider: `glob-ai`, `openai-compat`, or `ollama` (default `glob-ai`) |
|
|
79
|
-
| `--instance id` | Glob.AI
|
|
79
|
+
| `--instance id` | Glob.AI instance for an ephemeral run (`eu-v1`, `us-v1`, `clients`, `corp`; the former `saas-us` / `saas-europe` still resolve, to `us-v1` and `eu-v1`). Omitted: the declared default — see `coda --help` |
|
|
80
80
|
| `--base-url url` | Base URL for an ephemeral `openai-compat` / `ollama` run |
|
|
81
81
|
| `--api-key key` | Ephemeral, run-only API key — held in memory, never persisted, redacted in logs |
|
|
82
82
|
|
|
@@ -95,7 +95,7 @@ A batch run needs credentials just like an interactive one, but there's no wizar
|
|
|
95
95
|
coda -p "Review this diff" --provider openai-compat \
|
|
96
96
|
--base-url https://api.example.com/v1 --api-key "$MY_API_KEY"
|
|
97
97
|
|
|
98
|
-
# Glob.AI
|
|
98
|
+
# Glob.AI Clients instance with an API key
|
|
99
99
|
coda -p "Summarize the changes" --provider glob-ai \
|
|
100
100
|
--instance clients --api-key "$CODA_GEAI_CLIENTS_API_KEY"
|
|
101
101
|
```
|
|
@@ -115,6 +115,10 @@ coda -p "Summarize the open TODOs in this repo" --output json \
|
|
|
115
115
|
| jq -r 'select(.type=="agent_response") | .payload.response'
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
+
**What the result contains.** `response` is the run's **final reply** — the answer the agent ended on. Text the agent wrote along the way (for example "Let me look at the tests first" before a tool call) is progress, not part of the result; it stays visible in the event stream. `--output-last-message FILE` writes exactly that final reply, `--output-schema` validates it, and `--silent` prints only it. If the run ends without a final reply (for example, it hit its step limit while still working), `response` is empty and a warning is added to the result.
|
|
119
|
+
|
|
120
|
+
**Retried responses are never printed.** When a provider connection drops mid-answer, CODA retries automatically. The interrupted partial answer is dropped: it doesn't appear in stdout, in the JSON stream, or in `response`. In `--output json`, each model attempt ends with a `turn_end` event whose `outcome` is `committed` or `discarded`, so a consumer that tracks attempts can tell them apart.
|
|
121
|
+
|
|
118
122
|
Always check the **exit code**: a non-zero status means the run failed (an error, a timeout, or — with `--auto-approve none` — a denied approval), so your CI step can fail fast.
|
|
119
123
|
|
|
120
124
|
## Scope it down for safety
|
|
@@ -10,11 +10,11 @@ In addition to per-turn snapshots, CODA automatically takes an extra snapshot la
|
|
|
10
10
|
|
|
11
11
|
For how checkpoints work in detail — the shadow repo, Git requirements, and how restoring rewinds the conversation — see [Sessions & Checkpoints](#sessions).
|
|
12
12
|
|
|
13
|
-
## Approve
|
|
13
|
+
## Approve actions when CODA asks
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Every tool call goes through the authorization engine. It combines your **permission mode** with `allow` / `ask` / `deny` rules and the built-in safety floor. An `allow` decision runs immediately, `deny` does not run, and `ask` opens the approval prompt — press **Y** for this action, **A** for the displayed reusable session rule when offered, or **N** to deny it. Use **Arrow keys + Enter** to select another offered option; a permanent project rule always gets a second confirmation.
|
|
16
16
|
|
|
17
|
-
How much runs without asking depends on
|
|
17
|
+
How much runs without asking depends on the session's permission mode. Cycle it with **Ctrl+P** (the session keeps it when you resume it); `permissions.defaultMode` sets the mode new sessions start in:
|
|
18
18
|
|
|
19
19
|
| Mode | What it allows |
|
|
20
20
|
| --- | --- |
|
|
@@ -88,7 +88,7 @@ If your project has an `AGENTS.md` with a "quality gate" section, CODA follows i
|
|
|
88
88
|
## A quick mental model for staying in control
|
|
89
89
|
|
|
90
90
|
1. **Checkpoint** — every turn is snapshotted before it runs, so you can always go back.
|
|
91
|
-
2. **
|
|
91
|
+
2. **Authorize** — rules and the current mode decide each tool call; only `ask` decisions pause for you.
|
|
92
92
|
3. **Interrupt** — **Esc** stops a turn the instant it heads the wrong way.
|
|
93
93
|
4. **Steer or queue** — react without stopping the turn (`/settings` → **Composer**).
|
|
94
94
|
5. **Undo** — `/timeline` (or **Esc Esc**) rewinds files *and* the conversation to a chosen point.
|
|
@@ -6,7 +6,7 @@ CODA works best when the whole team uses it consistently. This guide covers how
|
|
|
6
6
|
|
|
7
7
|
`AGENTS.md` is the most important file for team collaboration. CODA reads it at the start of every session and uses it to understand your project's conventions — coding style, testing approach, which areas to avoid, how to run the quality checks.
|
|
8
8
|
|
|
9
|
-
CODA looks for
|
|
9
|
+
CODA looks for an instruction file in the directory where you launch it, preferring `AGENTS.md`, then `AGENT.md`, then `CLAUDE.md`. Put project instructions at that root for visibility. A legacy `<project>/.coda/AGENTS.md` is no longer loaded; move it to the project root.
|
|
10
10
|
|
|
11
11
|
Create or update it with `/init` and then edit it to add what CODA missed. A typical `AGENTS.md` looks like this:
|
|
12
12
|
|
|
@@ -61,16 +61,16 @@ The most valuable things to share live in the repo and apply to everyone who clo
|
|
|
61
61
|
- **Skills** in `<project>/.coda/skills/` — shared workflows the whole team can invoke.
|
|
62
62
|
- **MCP servers** in `<project>/.coda/mcp.json` — the external services this project connects to.
|
|
63
63
|
|
|
64
|
-
A project-level `<project>/.coda/config.json` is also **safe to commit**
|
|
64
|
+
A project-level `<project>/.coda/config.json` is also **safe to commit** as long as no one hand-edits a literal secret into it — provider API keys go through your system keychain (or an encrypted secrets file) outside the repo, so they have no reason to end up here. But be selective about what you put there:
|
|
65
65
|
|
|
66
|
-
- **Don't commit the active provider.** Which provider you use (a specific Glob.AI
|
|
67
|
-
- **
|
|
66
|
+
- **Don't commit the active provider.** Which provider you use (a specific Glob.AI instance, or a local Ollama) is a personal, machine-specific choice, and provider profiles are defined in each developer's own global config. Pinning it in the repo can break teammates who don't have that profile.
|
|
67
|
+
- **Use project permission modes to tighten, not widen.** A project `.coda/config.json` can start sessions in a more restrictive mode, but CODA ignores attempts to raise autonomy above each developer's user-level default. Share explicit rules only when the team agrees on them.
|
|
68
68
|
|
|
69
69
|
In short: share **conventions and workflows**, keep **personal and security preferences** local.
|
|
70
70
|
|
|
71
71
|
## Working in a monorepo
|
|
72
72
|
|
|
73
|
-
CODA loads
|
|
73
|
+
At startup, CODA loads your optional global instruction file from `~/.coda/` and one instruction file from the directory where you launch it, using the `AGENTS.md` → `AGENT.md` → `CLAUDE.md` fallback order. It does not merge instruction files from parent directories at startup. When CODA later reads a file below that root, it can attach more-specific instruction files found between that file and the launch directory. Agent definitions and workflow modules use their own upward discovery rules.
|
|
74
74
|
|
|
75
75
|
In a monorepo, launch CODA from the package directory you're working in:
|
|
76
76
|
|
|
@@ -79,7 +79,7 @@ cd packages/billing
|
|
|
79
79
|
coda # loads packages/billing/AGENTS.md
|
|
80
80
|
```
|
|
81
81
|
|
|
82
|
-
Put conventions
|
|
82
|
+
Put package-specific conventions in each package's `AGENTS.md`. For repository-wide conventions, launch from the repository root or make the shared rules available from the package launch directory; CODA does not automatically inherit a parent root file at startup.
|
|
83
83
|
|
|
84
84
|
## Share agents and workflows too
|
|
85
85
|
|
|
@@ -108,9 +108,9 @@ To keep shared assets in and personal/secret state out, a typical project ignore
|
|
|
108
108
|
# .coda/skills/ .coda/agents/ .coda/workflows/ .coda/mcp.json AGENTS.md
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
Note that **session records aren't stored in your project** — they live in the global `~/.coda/coda.db` (see [Sessions & Checkpoints](#sessions)), so there's nothing session-related to ignore here.
|
|
111
|
+
Note that **session records aren't stored in your project** — they live in the global `~/.coda/coda.db` (see [Sessions & Checkpoints](#sessions)), so there's nothing session-related to ignore here. Provider API keys never live in tracked repo content — they're in your system keychain (or an encrypted secrets file), outside the project.
|
|
112
112
|
|
|
113
|
-
> **Watch out for `.env` files.** CODA also
|
|
113
|
+
> **Watch out for `.env` files.** CODA also reads a `.coda/.env` or `.env` file in the project directory as values for `${VAR}` in its config. It does not export them: the bash tool, hooks and MCP servers see a variable only when it is exported in your shell or kept in `~/.coda/.secrets`, or when an MCP server's `env` or `headers` passes it with `${VAR}`. These files may contain API keys or other secrets and should **never** be committed. Add `.coda/.env` and `.env` to your `.gitignore`. For per-developer values, use a project `.coda/.env` (kept out of Git) for generic `${VAR}` values — provider API keys belong in the keychain via `/providers` (or an encrypted store file when no keychain is available), never in a dotenv file.
|
|
114
114
|
|
|
115
115
|
## See also
|
|
116
116
|
|
|
@@ -27,9 +27,9 @@ Everything happens from inside CODA through the `/mcp` manager:
|
|
|
27
27
|
/mcp
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
From there you can **add a server** (paste its JSON or import it from a file), edit the global or project `mcp.json`, list configured servers and their connection status, view the tools each one exposes, enable or disable servers for the session, and reload after a change — no need to hand-edit files outside the app.
|
|
30
|
+
From there you can **add a server** (paste its JSON or import it from a file), edit the global or project `mcp.json`, list configured servers and their connection status, view the tools each one exposes, enable or disable servers for the session, and reload after a change — no need to hand-edit files outside the app. You can also ask CODA to configure one from a package, command, repository, or URL; see [Configure an MCP Server](#add-mcp-server-skill).
|
|
31
31
|
|
|
32
|
-
**Where MCP servers are defined.** Servers live in `mcp.json` files that layer like the rest of your config: `~/.coda/mcp.json` (global) and `<project>/.coda/mcp.json` (project). A third, session-level file at `~/.coda/sessions/<sessionId>/mcp.json` holds per-session overrides — including a disable-only shorthand `{ "disabled": true }` to switch a higher-tier server off for one session. Each server entry is either **stdio** (`command` plus optional `args`/`env`) or **HTTP** (`url`, optional `headers`/token)
|
|
32
|
+
**Where MCP servers are defined.** Servers live in `mcp.json` files that layer like the rest of your config: `~/.coda/mcp.json` (global) and `<project>/.coda/mcp.json` (project). A third, session-level file at `~/.coda/sessions/<sessionId>/mcp.json` holds per-session overrides — including a disable-only shorthand `{ "disabled": true }` to switch a higher-tier server off for one session. Each project/global server entry is either **stdio** (`command` plus optional `args`/`env`) or **HTTP** (`url`, optional `headers`/token). Use the `/mcp` manager to enable or disable it for the current session. CODA builds the live server map from `mcp.json` + plugins + `--mcp-config`, so prefer `mcp.json` over the `mcp.servers` block in `config.json`.
|
|
33
33
|
|
|
34
34
|
Once a server is connected, CODA can use its tools automatically — you just describe what you want in plain language. For example, with a **GitHub MCP server** connected, you could ask:
|
|
35
35
|
|
|
@@ -78,6 +78,33 @@ To browse, enable, disable, or install skills, use the skills manager from insid
|
|
|
78
78
|
|
|
79
79
|
The manager lists every skill and its enabled state, and lets you enable or disable individual skills (per-session disables are stored under `~/.coda/sessions/<sessionId>/`). You can also install a skill straight from GitHub with `/skills add <repo-url> [project|global]` — choose `project` to commit it with the repo or `global` for your personal library. For private repos or to avoid rate limits, set `GITHUB_TOKEN` (or `GH_TOKEN`) so the GitHub API fallback can authenticate.
|
|
80
80
|
|
|
81
|
+
### Import skills from other coding agents
|
|
82
|
+
|
|
83
|
+
CODA can also discover skills that already live in *other* agents' directories, so you don't have to copy them. Alongside its own `.coda/skills`, it can scan the cross-tool `.agents/skills` folder and — once you opt in — the skill folders of Claude, Codex, and OpenCode:
|
|
84
|
+
|
|
85
|
+
| Source | Scanned directories | Default |
|
|
86
|
+
| --- | --- | --- |
|
|
87
|
+
| `coda` | `<project>/.coda/skills`, `~/.coda/skills` | Always on (native) |
|
|
88
|
+
| `agents` | `<project>/.agents/skills`, `~/.agents/skills` | On |
|
|
89
|
+
| `claude` | `<project>/.claude/skills`, `$CLAUDE_CONFIG_DIR`/`~/.claude/skills` | Off |
|
|
90
|
+
| `codex` | `<project>/.codex/skills`, `$CODEX_HOME`/`~/.codex/skills` | Off |
|
|
91
|
+
| `opencode` | `<project>/.opencode/skills`, `~/.opencode/skills` | Off |
|
|
92
|
+
|
|
93
|
+
Foreign sources are **off by default**, so upgrading changes nothing until you turn one on. Project directories are scanned before global ones, and CODA dedupes: the same skill file reached from several roots shows up once, and if two *different* files share a name, the higher-tier source wins (`coda` > `agents` > `claude` > `codex` > `opencode` > your extra paths).
|
|
94
|
+
|
|
95
|
+
Turn sources on or off from the **`/settings → Skills`** screen (a per-source toggle, at global or project scope), or from the terminal with the **`coda skills`** sub-command:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
coda skills sources # show each source and whether it's enabled
|
|
99
|
+
coda skills list # list every discovered skill and its source
|
|
100
|
+
coda skills enable claude --global # opt a source in (needs --global or --project)
|
|
101
|
+
coda skills disable codex --project
|
|
102
|
+
coda skills add-path ~/shared/skills --global # scan an extra folder (must exist)
|
|
103
|
+
coda skills remove-path ~/shared/skills --global
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Reads (`sources`, `list`) show the resolved, merged view (project overrides global). Writes require an explicit `--global` or `--project` scope, and add `--json` for a machine-readable envelope. Extra folders can also be listed directly under `skills.paths` in `config.json`. Source and path changes apply on the next launch.
|
|
107
|
+
|
|
81
108
|
## Automate with extensions
|
|
82
109
|
|
|
83
110
|
Extensions are TypeScript modules that can register custom **tools**, **slash commands**, **lifecycle hooks** (e.g. `session_start`, `tool_execution_end`), custom model providers, keyboard shortcuts, CLI flags, and custom message renderers — using the full `ExtensionAPI`. Use them when you need CODA to integrate with an internal system that doesn't have an MCP server, or to automate a complex workflow that doesn't fit in a skill.
|
|
@@ -88,7 +115,7 @@ Ready to build one? The easiest way is to ask CODA — its `create-extension` sk
|
|
|
88
115
|
|
|
89
116
|
## Share packaged integrations with plugins
|
|
90
117
|
|
|
91
|
-
Plugins are versioned, installable packages — like extensions, but with a manifest, version number, and the ability to bundle skills, agents,
|
|
118
|
+
Plugins are versioned, installable packages — like extensions, but with a manifest, version number, and the ability to bundle skills, agents, extensions, MCP fragments, and lifecycle hooks together. Use plugins when you want to share a reusable CODA integration across teams or projects.
|
|
92
119
|
|
|
93
120
|
Manage plugins from inside CODA with the `/plugin` manager — enable, disable, and browse any registered marketplace catalog. The `/plugin install` slash command accepts **only absolute local paths** to a plugin directory; for npm packages, Git URLs, or marketplace-sourced plugins, use `coda plugin install <source>` from the terminal:
|
|
94
121
|
|
|
@@ -102,7 +129,7 @@ You can also install from your terminal:
|
|
|
102
129
|
coda plugin install <source> [--name <folder>] [--scope global|project]
|
|
103
130
|
```
|
|
104
131
|
|
|
105
|
-
`<source>` can be an npm package (prefix `npm:`), a Git/HTTPS URL, a local directory path, a `.zip` archive, or a `file://…` URL. `--name` selects a subdirectory (useful for monorepo git sources); `--scope` chooses `global` (default) or `project` install scope.
|
|
132
|
+
`<source>` can be an npm package (prefix `npm:`), a Git/HTTPS URL, a local directory path, a `.zip` archive, or a `file://…` URL. `--name` selects a subdirectory (useful for monorepo git sources); `--scope` chooses `global` (default) or `project` install scope. After installing, enabling, or disabling a plugin, run `/reload-plugins`. It starts a fresh session with plugins reloaded.
|
|
106
133
|
|
|
107
134
|
### Adding a marketplace
|
|
108
135
|
|
|
@@ -113,7 +140,7 @@ A marketplace is a catalog of plugins. Add one from the terminal with `coda mark
|
|
|
113
140
|
- a **local folder** containing a `marketplace.json` (Claude-style `.claude-plugin/` or `.coda-plugin/` layouts are recognized);
|
|
114
141
|
- a **local `.zip`** archive — CODA unpacks it and finds the catalog inside, including the single nested top-level folder you get from a GitHub "Download ZIP" / "Source code" archive.
|
|
115
142
|
|
|
116
|
-
CODA
|
|
143
|
+
CODA recognizes native CODA plugins plus Claude Code, Cursor, and portable Agent Plugins layouts. Features outside CODA's supported component set may be ignored, so review the detected plugin details before enabling it.
|
|
117
144
|
|
|
118
145
|
## Orchestrate multiple agents with workflows
|
|
119
146
|
|
package/assets/docs/hooks.md
CHANGED
|
@@ -10,7 +10,7 @@ The hook system is **compatible with Claude Code hooks**: the same JSON input/ou
|
|
|
10
10
|
|
|
11
11
|
Add a `hooks` key to `~/.coda/config.json` (global) or `.coda/config.json` (project):
|
|
12
12
|
|
|
13
|
-
```
|
|
13
|
+
```json
|
|
14
14
|
{
|
|
15
15
|
"hooks": {
|
|
16
16
|
"PreToolUse": [
|
|
@@ -160,7 +160,7 @@ The `matcher` field filters which tool names (or session sources) trigger the ho
|
|
|
160
160
|
| `type` | ✅ | `"command"` |
|
|
161
161
|
| `command` | ✅ | The command to run. In **shell form** (no `args`) it is the command string passed to a shell. In **exec form** (`args` present) it is the executable to spawn directly. Receives JSON on stdin. |
|
|
162
162
|
| `args` | — | Argument vector. When present (even `[]`), the hook runs in **exec form**: `command` is spawned directly with `args` as its arguments and **no shell** — each element is passed verbatim (no quoting/globbing). `shell` is ignored. Path placeholders are substituted in each element. |
|
|
163
|
-
| `shell` | — | Shell for **shell form** only (ignored when `args` is set): `"bash"` (→ `bash -c`)
|
|
163
|
+
| `shell` | — | Shell for **shell form** only (ignored when `args` is set): `"bash"` (→ `bash -c`), `"powershell"` (→ `powershell -NoProfile -Command`), or `"sh"` (→ `sh -c`). Omitted or `"auto"` is **POSIX-first** (#909/#921): `sh -c` on macOS/Linux; on Windows, Git Bash when present, else `powershell -NoProfile -Command` as a last resort. It never inherits the session's `bash.shellMode` — that is the model/user's shell choice, not the hook author's, and pinning is the way to opt into PowerShell/bash explicitly. |
|
|
164
164
|
| `timeout` | — | Seconds before the hook is killed (default: 600). |
|
|
165
165
|
| `if` | — | Permission rule — conditionally skip the hook (see [Conditional execution](#conditional-execution-if-field)). |
|
|
166
166
|
| `statusMessage` | — | Custom spinner label shown while the hook runs. |
|
|
@@ -186,15 +186,18 @@ The `matcher` field filters which tool names (or session sources) trigger the ho
|
|
|
186
186
|
|
|
187
187
|
Coda sends a JSON object on **stdin** (command hooks) or as the **POST body** (HTTP hooks). All events include these base fields:
|
|
188
188
|
|
|
189
|
-
```
|
|
189
|
+
```json
|
|
190
190
|
{
|
|
191
191
|
"session_id": "abc123",
|
|
192
192
|
"transcript_path": "",
|
|
193
193
|
"cwd": "/home/user/my-project",
|
|
194
|
-
"hook_event_name": "PreToolUse"
|
|
194
|
+
"hook_event_name": "PreToolUse",
|
|
195
|
+
"cli_version": "0.4.2"
|
|
195
196
|
}
|
|
196
197
|
```
|
|
197
198
|
|
|
199
|
+
`cli_version` is the running Coda version — the value `coda --version` prints — so a hook can attribute what it observes to the exact version that produced it. Command hooks also receive it as the `CODA_VERSION` environment variable (see [Environment variables available to hooks](#environment-variables-available-to-hooks)), which is cheaper than parsing stdin in hot-path hooks.
|
|
200
|
+
|
|
198
201
|
### Tool events (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`)
|
|
199
202
|
|
|
200
203
|
```jsonc
|
|
@@ -203,7 +206,8 @@ Coda sends a JSON object on **stdin** (command hooks) or as the **POST body** (H
|
|
|
203
206
|
"transcript_path": "",
|
|
204
207
|
"cwd": "/home/user/my-project",
|
|
205
208
|
"hook_event_name": "PreToolUse",
|
|
206
|
-
"
|
|
209
|
+
"cli_version": "0.4.2",
|
|
210
|
+
"tool_name": "bash",
|
|
207
211
|
"tool_input": { "command": "git status", "description": "Check git status" },
|
|
208
212
|
"tool_use_id": "toolu_01XYZ",
|
|
209
213
|
// PostToolUse only:
|
|
@@ -215,36 +219,39 @@ Coda sends a JSON object on **stdin** (command hooks) or as the **POST body** (H
|
|
|
215
219
|
|
|
216
220
|
### `UserPromptSubmit`
|
|
217
221
|
|
|
218
|
-
```
|
|
222
|
+
```json
|
|
219
223
|
{
|
|
220
224
|
"session_id": "abc123",
|
|
221
225
|
"transcript_path": "",
|
|
222
226
|
"cwd": "/home/user/my-project",
|
|
223
227
|
"hook_event_name": "UserPromptSubmit",
|
|
228
|
+
"cli_version": "0.4.2",
|
|
224
229
|
"prompt": "Refactor the auth module"
|
|
225
230
|
}
|
|
226
231
|
```
|
|
227
232
|
|
|
228
233
|
### `SessionStart`
|
|
229
234
|
|
|
230
|
-
```
|
|
235
|
+
```json
|
|
231
236
|
{
|
|
232
237
|
"session_id": "abc123",
|
|
233
238
|
"transcript_path": "",
|
|
234
239
|
"cwd": "/home/user/my-project",
|
|
235
240
|
"hook_event_name": "SessionStart",
|
|
241
|
+
"cli_version": "0.4.2",
|
|
236
242
|
"source": "startup"
|
|
237
243
|
}
|
|
238
244
|
```
|
|
239
245
|
|
|
240
246
|
### `Stop`
|
|
241
247
|
|
|
242
|
-
```
|
|
248
|
+
```json
|
|
243
249
|
{
|
|
244
250
|
"session_id": "abc123",
|
|
245
251
|
"transcript_path": "",
|
|
246
252
|
"cwd": "/home/user/my-project",
|
|
247
253
|
"hook_event_name": "Stop",
|
|
254
|
+
"cli_version": "0.4.2",
|
|
248
255
|
"stop_reason": "turn_complete"
|
|
249
256
|
}
|
|
250
257
|
```
|
|
@@ -385,7 +392,7 @@ rule ::= toolName | toolName(content)
|
|
|
385
392
|
| File glob | `"Edit(src/*.ts)"` | TypeScript files under `src/` |
|
|
386
393
|
| Prefix (legacy) | `"Bash(npm:*)"` | `npm`, `npm install`, `npm run …` |
|
|
387
394
|
|
|
388
|
-
```
|
|
395
|
+
```json
|
|
389
396
|
{
|
|
390
397
|
"hooks": {
|
|
391
398
|
"PreToolUse": [
|
|
@@ -444,29 +451,17 @@ Plugins can ship a `hooks/hooks.json` file at the plugin root. The format is ide
|
|
|
444
451
|
|
|
445
452
|
## Session environment files (`CODA_ENV_FILE`)
|
|
446
453
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
### Mode 1 — External env file (process-level)
|
|
450
|
-
|
|
451
|
-
Set `CODA_ENV_FILE` in your shell before launching Coda. Its contents are prepended to every Bash command:
|
|
452
|
-
|
|
453
|
-
```bash
|
|
454
|
-
export CODA_ENV_FILE=~/.coda/my-env.sh
|
|
455
|
-
coda
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
### Mode 2 — Hook-writable env file (hook-level)
|
|
454
|
+
The hook runtime can give `SessionStart` hooks a writable `CODA_ENV_FILE`, and embedders can use the session-environment API to prepend those exports to later Bash commands. The current CODA CLI does **not** connect that optional callback to its Bash tool, so these files do not currently change later CLI commands. Treat this as an embedding API rather than a CLI feature.
|
|
459
455
|
|
|
460
|
-
|
|
456
|
+
A `SessionStart` hook may still write the file for a host that supports it:
|
|
461
457
|
|
|
462
458
|
```bash
|
|
463
459
|
#!/bin/bash
|
|
464
|
-
|
|
465
|
-
source .venv/bin/activate
|
|
466
|
-
echo "export VIRTUAL_ENV=$VIRTUAL_ENV" >> "$CODA_ENV_FILE"
|
|
467
|
-
echo "export PATH=$PATH" >> "$CODA_ENV_FILE"
|
|
460
|
+
echo "export VIRTUAL_ENV=$PWD/.venv" >> "$CODA_ENV_FILE"
|
|
468
461
|
```
|
|
469
462
|
|
|
463
|
+
Do not rely on this for the standard CLI today; configure the environment before launching CODA instead.
|
|
464
|
+
|
|
470
465
|
---
|
|
471
466
|
|
|
472
467
|
## Async hooks
|
|
@@ -475,9 +470,9 @@ By default hooks run **synchronously** — the lifecycle event waits for every m
|
|
|
475
470
|
|
|
476
471
|
### `async: true` — tracked background
|
|
477
472
|
|
|
478
|
-
The hook runs in the background. Results are polled at the start of each turn
|
|
473
|
+
The hook runs in the background. Results are polled at the start of each turn. Completed `additionalContext` is injected into the conversation as an `[Async hook]` user message before that turn proceeds.
|
|
479
474
|
|
|
480
|
-
```
|
|
475
|
+
```json
|
|
481
476
|
{
|
|
482
477
|
"type": "command",
|
|
483
478
|
"command": ".coda/hooks/slow-analysis.sh",
|
|
@@ -490,7 +485,7 @@ The hook runs in the background. Results are polled at the start of each turn an
|
|
|
490
485
|
|
|
491
486
|
The hook runs fully detached. If it exits with code 2, its stderr/stdout is injected as a system message that re-engages the model. Useful for background file watchers or integrity checkers.
|
|
492
487
|
|
|
493
|
-
```
|
|
488
|
+
```json
|
|
494
489
|
{
|
|
495
490
|
"type": "command",
|
|
496
491
|
"command": ".coda/hooks/file-integrity-watcher.sh",
|
|
@@ -508,7 +503,7 @@ A hook can decide at runtime to go async by printing `{"async": true}` as its fi
|
|
|
508
503
|
|
|
509
504
|
Set `disableAllHooks: true` in `config.json` to disable all hooks globally. Useful in CI environments or when debugging unexpected behavior:
|
|
510
505
|
|
|
511
|
-
```
|
|
506
|
+
```json
|
|
512
507
|
{
|
|
513
508
|
"disableAllHooks": true
|
|
514
509
|
}
|
|
@@ -531,8 +526,9 @@ Set `disableAllHooks: true` in `config.json` to disable all hooks globally. Usef
|
|
|
531
526
|
| Variable | Value |
|
|
532
527
|
| --- | --- |
|
|
533
528
|
| `CODA_PROJECT_DIR` | Current project directory |
|
|
529
|
+
| `CODA_VERSION` | The running Coda version (what `coda --version` prints) — same value as the `cli_version` payload field. Set by Coda and authoritative: it overrides any `CODA_VERSION` you exported, and is absent (not empty) when the running version is unknown |
|
|
534
530
|
| `CODA_PLUGIN_ROOT` | Plugin installation directory (plugin hooks only) |
|
|
535
|
-
| `CODA_ENV_FILE` | Writable env file path
|
|
531
|
+
| `CODA_ENV_FILE` | Writable env file path for `SessionStart` hooks. It affects later Bash calls only in an embedding that wires session-environment support; the standard CLI currently does not. |
|
|
536
532
|
|
|
537
533
|
All other environment variables from the Coda process are also inherited.
|
|
538
534
|
|
|
@@ -561,7 +557,7 @@ All other environment variables from the Coda process are also inherited.
|
|
|
561
557
|
|
|
562
558
|
### Block `git push` in a project
|
|
563
559
|
|
|
564
|
-
```
|
|
560
|
+
```json
|
|
565
561
|
{
|
|
566
562
|
"hooks": {
|
|
567
563
|
"PreToolUse": [
|
|
@@ -602,7 +598,7 @@ All other environment variables from the Coda process are also inherited.
|
|
|
602
598
|
|
|
603
599
|
### Log every session to a file
|
|
604
600
|
|
|
605
|
-
```
|
|
601
|
+
```json
|
|
606
602
|
{
|
|
607
603
|
"hooks": {
|
|
608
604
|
"SessionStart": [
|
|
@@ -642,38 +638,6 @@ All other environment variables from the Coda process are also inherited.
|
|
|
642
638
|
}
|
|
643
639
|
```
|
|
644
640
|
|
|
645
|
-
### Activate a Python venv for the whole session
|
|
646
|
-
|
|
647
|
-
```bash
|
|
648
|
-
#!/bin/bash
|
|
649
|
-
# .coda/hooks/activate-venv.sh
|
|
650
|
-
# Used as a SessionStart hook
|
|
651
|
-
if [ -f ".venv/bin/activate" ]; then
|
|
652
|
-
source .venv/bin/activate
|
|
653
|
-
echo "export VIRTUAL_ENV=\"$VIRTUAL_ENV\"" >> "$CODA_ENV_FILE"
|
|
654
|
-
echo "export PATH=\"$PATH\"" >> "$CODA_ENV_FILE"
|
|
655
|
-
fi
|
|
656
|
-
```
|
|
657
|
-
|
|
658
|
-
```jsonc
|
|
659
|
-
{
|
|
660
|
-
"hooks": {
|
|
661
|
-
"SessionStart": [
|
|
662
|
-
{
|
|
663
|
-
"hooks": [
|
|
664
|
-
{
|
|
665
|
-
"type": "command",
|
|
666
|
-
"command": ".coda/hooks/activate-venv.sh"
|
|
667
|
-
}
|
|
668
|
-
]
|
|
669
|
-
}
|
|
670
|
-
]
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
```
|
|
674
|
-
|
|
675
|
-
---
|
|
676
|
-
|
|
677
641
|
## Troubleshooting
|
|
678
642
|
|
|
679
643
|
**Hooks are not running**
|
|
@@ -698,7 +662,7 @@ fi
|
|
|
698
662
|
|
|
699
663
|
## See also
|
|
700
664
|
|
|
701
|
-
- [Configuration](configuration
|
|
702
|
-
- [
|
|
703
|
-
- [
|
|
704
|
-
- [
|
|
665
|
+
- [Configuration](#configuration) — where `config.json` files live and how they merge.
|
|
666
|
+
- [Extend CODA](#guide-extend) — plugins, extensions, agents, skills, and MCP.
|
|
667
|
+
- [Writing Extensions](#extensions) — programmatic lifecycle hooks and tool interception.
|
|
668
|
+
- [Tools Reference](#tools-reference) — built-in tool names used in matcher patterns.
|
|
@@ -32,7 +32,7 @@ CODA draws on a few different kinds of memory:
|
|
|
32
32
|
|
|
33
33
|
**In-session context** — everything you've said and everything CODA has read or done in the current session. This builds up as the session progresses, which is why later turns in a session are often better than earlier ones — CODA has more context.
|
|
34
34
|
|
|
35
|
-
**
|
|
35
|
+
**Project instructions (instructions you give)** — `AGENTS.md` is the preferred filename; `AGENT.md` and `CLAUDE.md` are fallbacks. CODA loads instructions from the launch directory at startup and can attach more-specific files as it reads deeper paths. This is how *you* describe conventions, quality gates, and constraints.
|
|
36
36
|
|
|
37
37
|
**MEMORY.md (facts CODA learns)** — durable notes the agent keeps across sessions: your preferences, decisions, and project gotchas. Unlike AGENTS.md, CODA writes this one itself as it learns. It even survives checkpoint rollbacks — restoring an earlier point never erases what CODA has remembered.
|
|
38
38
|
|
|
@@ -44,13 +44,13 @@ The two files you control directly play different roles:
|
|
|
44
44
|
| --- | --- | --- |
|
|
45
45
|
| **Who writes it** | You (or `/init`) | CODA, as it learns |
|
|
46
46
|
| **What goes in it** | Project conventions, quality gates, no-go zones | Preferences, decisions, gotchas |
|
|
47
|
-
| **Scope** |
|
|
47
|
+
| **Scope** | Launch-directory root, with more-specific on-read files below it | Global (`~/.coda/`) and per-project |
|
|
48
48
|
| **Survives rollback?** | It's your file — yes | Yes, excluded from checkpoints on purpose |
|
|
49
49
|
| **Commit to Git?** | Yes — share with the team | Usually no — it's agent scratch memory |
|
|
50
50
|
|
|
51
51
|
## Compaction: keeping context fresh
|
|
52
52
|
|
|
53
|
-
Long sessions accumulate a lot of history.
|
|
53
|
+
Long sessions accumulate a lot of history. Before each model call, CODA makes a simple two-way choice: **store directly** when the context fits, or **reduce** it when it does not. Reduction first moves stale, large tool results out of the active context and then, when the configured threshold is reached, condenses older messages into a summary while keeping recent messages verbatim. Original transcript rows remain stored, even though the model sees the reduced view.
|
|
54
54
|
|
|
55
55
|
You can also trigger compaction manually before switching topics:
|
|
56
56
|
|
package/assets/docs/index.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**CODA** (`coda`) is Globant's AI coding agent. You describe what you want in plain language; CODA reads your codebase, plans the work, makes changes, and runs commands — while you stay in control of every step.
|
|
4
4
|
|
|
5
|
-
This guide is the authoritative reference for using CODA.
|
|
5
|
+
This guide is the authoritative reference for using CODA. It is synced to the active CODA home under `docs/` (normally `~/.coda/docs/`) from the version you have installed. Cross-links use `#page-name` anchors that map directly to the file of the same name (for example, `#config-reference` → `config-reference.md`).
|
|
6
6
|
|
|
7
7
|
## Where to start
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ If you are brand new, read these in order:
|
|
|
10
10
|
|
|
11
11
|
1. [What is CODA?](#overview) — the big picture and what you can do with it.
|
|
12
12
|
2. [Installation](#installation) — get `coda` running on your machine.
|
|
13
|
-
3. [Connect a Provider](#connect-provider) — choose Glob.AI
|
|
13
|
+
3. [Connect a Provider](#connect-provider) — choose Glob.AI (recommended for Globant employees) or a custom OpenAI-compatible / Ollama endpoint, and authenticate.
|
|
14
14
|
4. [Quick Start](#quickstart) — open CODA in a real project and run your first prompt.
|
|
15
15
|
|
|
16
16
|
## Table of contents
|
|
@@ -19,7 +19,7 @@ If you are brand new, read these in order:
|
|
|
19
19
|
|
|
20
20
|
- [What is CODA?](#overview) — overview, the two run modes, and what a session looks like.
|
|
21
21
|
- [Installation](#installation) — requirements, install script vs npm, and upgrading.
|
|
22
|
-
- [Connect a Provider](#connect-provider) — the first
|
|
22
|
+
- [Connect a Provider](#connect-provider) — the first run's single sign-in, choosing an instance, OAuth vs API key, custom providers.
|
|
23
23
|
- [Quick Start](#quickstart) — your first session in under five minutes.
|
|
24
24
|
- [How CODA Works](#how-it-works) — tools, memory, and compaction under the hood.
|
|
25
25
|
|
|
@@ -46,17 +46,18 @@ If you are brand new, read these in order:
|
|
|
46
46
|
- [Workflows](#workflows) — orchestrate many agents at once.
|
|
47
47
|
- [Writing Extensions](#extensions) — the extension API reference.
|
|
48
48
|
- [Lifecycle Hooks](#hooks) — shell/HTTP hooks that fire at session, tool, and prompt events.
|
|
49
|
+
- [Configure an MCP Server](#add-mcp-server-skill) — let CODA safely turn a package, command, repository, or URL into MCP configuration.
|
|
49
50
|
|
|
50
51
|
### Operations & reference
|
|
51
52
|
|
|
52
53
|
- [Configuration](#configuration) — how settings cascade and where they live.
|
|
53
54
|
- [Configuration Reference](#config-reference) — config keys, defaults, and environment variables.
|
|
54
55
|
- [config.json — A Complete Example](#config-json) — a full, annotated `config.json` you can copy from.
|
|
55
|
-
- [View & Share Logs](#logging) — `coda logs`, redaction, and support
|
|
56
|
-
- [FAQ](#faq) — short answers to common questions.
|
|
56
|
+
- [View & Share Logs](#logging) — `coda logs`, redaction, support bundles, and the support contact.
|
|
57
|
+
- [FAQ](#faq) — short answers to common questions, including how to check your installed version.
|
|
58
|
+
- **What changed?** Run `coda upgrade --check` to compare your installed version with the current release, then check the release notes published with that version.
|
|
57
59
|
- [Glossary](#glossary) — definitions for the terms used throughout.
|
|
58
|
-
- [Release History](#release-history) — notable changes by version.
|
|
59
60
|
|
|
60
61
|
## A note on safety
|
|
61
62
|
|
|
62
|
-
CODA is built to be safe on real codebases.
|
|
63
|
+
CODA is built to be safe on real codebases. Every tool call goes through an authorization decision, with `ask` actions sent to you for approval (see [Permissions & Approvals](#permissions)). CODA snapshots your files before every turn so you can roll back (see [Sessions & Checkpoints](#sessions)), and it never touches your project's own Git history. If you only remember one thing: when CODA heads the wrong way, press **Esc** to interrupt, then redirect — that is faster than undoing a pile of changes.
|