@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.
Files changed (49) hide show
  1. package/assets/agents/coda-help.md +25 -12
  2. package/assets/agents/council.md +11 -0
  3. package/assets/agents/reviewer.md +14 -0
  4. package/assets/agents/side.md +15 -0
  5. package/assets/docs/add-mcp-server-skill.md +137 -0
  6. package/assets/docs/agents.md +1 -1
  7. package/assets/docs/cli-reference.md +40 -4
  8. package/assets/docs/cli-vs-batch.md +2 -0
  9. package/assets/docs/config-json.md +71 -57
  10. package/assets/docs/config-reference.md +99 -48
  11. package/assets/docs/configuration.md +33 -18
  12. package/assets/docs/connect-provider.md +34 -31
  13. package/assets/docs/extensions.md +25 -28
  14. package/assets/docs/faq.md +47 -15
  15. package/assets/docs/glossary.md +8 -8
  16. package/assets/docs/guide-automate.md +6 -2
  17. package/assets/docs/guide-changes.md +4 -4
  18. package/assets/docs/guide-collaborate.md +8 -8
  19. package/assets/docs/guide-extend.md +32 -5
  20. package/assets/docs/hooks.md +33 -69
  21. package/assets/docs/how-it-works.md +3 -3
  22. package/assets/docs/index.md +8 -7
  23. package/assets/docs/installation.md +9 -9
  24. package/assets/docs/logging.md +1 -1
  25. package/assets/docs/overview.md +9 -8
  26. package/assets/docs/permissions.md +35 -16
  27. package/assets/docs/quickstart.md +9 -5
  28. package/assets/docs/sessions.md +6 -2
  29. package/assets/docs/shortcuts.md +53 -3
  30. package/assets/docs/tools-reference.md +21 -10
  31. package/assets/docs/workflows.md +2 -1
  32. package/assets/output-styles/attention-kind.md +50 -0
  33. package/assets/output-styles/concise.md +46 -0
  34. package/assets/output-styles/default.md +4 -0
  35. package/assets/output-styles/explanatory.md +84 -0
  36. package/assets/output-styles/learning.md +103 -0
  37. package/assets/output-styles/plain.md +39 -0
  38. package/assets/output-styles/proactive.md +52 -0
  39. package/assets/output-styles/rundown.md +23 -0
  40. package/assets/output-styles/spartan.md +26 -0
  41. package/assets/output-styles/visual.md +96 -0
  42. package/assets/skills/configure-mcp/SKILL.md +281 -0
  43. package/assets/skills/create-hook/SKILL.md +5 -5
  44. package/assets/skills/init-rules/SKILL.md +78 -26
  45. package/coda.exe +2 -2
  46. package/lib/keytar/build/Release/keytar.node +0 -0
  47. package/lib/opentui/parser.worker.js +15 -14
  48. package/lib/ripgrep/rg.exe +0 -0
  49. package/package.json +1 -1
@@ -4,21 +4,21 @@ Quick definitions for terms used throughout the docs.
4
4
 
5
5
  | Term | Definition |
6
6
  | --- | --- |
7
- | **AGENTS.md** | A Markdown file at your project root that CODA reads at the start of every session. Use it to document your project's conventions, quality gates, and constraints for the agent. |
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** | Automatic condensing of older conversation history to free up context window space. Triggered at a configurable fill threshold. |
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 OS** | Globant's internal AI gateway — the primary provider for CODA at Globant. |
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 MCP fragments. More structured than an extension; installable via `coda plugin install`. |
19
- | **Provider** | The AI backend CODA sends prompts to — for example a Glob.AI OS instance, a local Ollama server, or any OpenAI-compatible endpoint. Managed with `/providers`. |
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 OS fallback when neither is set. |
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** | The catalog of installable plugins, reachable from the `/plugin` manager; Claude Code-ecosystem compatible. |
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 OS instance for an ephemeral run (`clients`, `corp`, `saas-europe`; default `saas-europe`) |
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 OS Clients instance with an API key
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 commands as they run
13
+ ## Approve actions when CODA asks
14
14
 
15
- When CODA wants to run a shell command, it shows you what it's about to execute and waits for your approval — press **Y** to allow it or **N** to skip it. By default, CODA auto-approves low-risk commands (like `git status` or `cat`) and asks before anything that writes or deletes files.
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 your **permission mode**, which you cycle with **Ctrl+P** or set via `permissions.defaultMode`:
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. **Approve** — risky shell commands and unread-file overwrites pause for your **Y**/**N**.
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 it at your project root (`<project>/AGENTS.md`) first, and falls back to `<project>/.coda/AGENTS.md` if the root file isn't present. Put it at the root for visibility, or under `.coda/` if you prefer to keep it out of the top level.
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** — it never holds secrets (those live in `~/.coda/.secrets`, which is never committed). But be selective about what you put there:
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 OS 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
- - **Think twice before committing an elevated permission mode.** Setting `permissions.defaultMode: "auto"` in the project's `.coda/config.json` means everyone who clones the repo runs more commands without being asked — a safety trade-off your team should agree on first.
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 exactly one `AGENTS.md` — the one in the directory where you launch it. **For `AGENTS.md` specifically**, there is no upward directory walk and no merging of parent files. (Agent definitions and workflow modules _do_ walk upward to parent directories, so placing them closer to the repo root makes them available to nested package launches automatically.)
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 that apply everywhere in each package's `AGENTS.md`, or maintain a root-level one and symlink it into each package.
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. Secrets never live in the repo at all — they're in `~/.coda/.secrets`, outside the project.
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 loads environment variables from a `.coda/.env` or `.env` file in the project directory. These files may contain API keys or other secrets and should **never** be committed. Add `.coda/.env` and `.env` to your `.gitignore` and use `~/.coda/.secrets` for per-developer secrets instead.
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); add `"disabled": true` to any entry to keep it but turn it off. (CODA builds the live server map from `mcp.json` + plugins + `--mcp-config`, so prefer `mcp.json` over the `mcp.servers` block in `config.json`.)
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, and MCP fragments together. Use plugins when you want to share a reusable CODA integration across teams or projects.
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 is compatible with the Claude Code plugin and marketplace ecosystem, so catalogs published for Claude Code work here.
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
 
@@ -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
- ```jsonc
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`) or `"powershell"` (→ `powershell -NoProfile -Command`). Defaults to `sh -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
- ```jsonc
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
- "tool_name": "Bash",
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
- ```jsonc
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
- ```jsonc
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
- ```jsonc
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
- ```jsonc
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
- Hooks can export environment variables that persist across all subsequent Bash tool commands in the session.
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
- For `SessionStart` hooks (bash/wsl only), Coda sets `CODA_ENV_FILE` to a writable path before spawning your hook. Write `export` statements to that file; they are sourced before every subsequent Bash command in the session:
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
- # SessionStart hook — activate a Python venv for the whole session
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 and applied (e.g. `additionalContext` is injected into the next tool result).
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
- ```jsonc
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
- ```jsonc
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
- ```jsonc
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 (SessionStart hooks only, bash/wsl) |
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
- ```jsonc
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
- ```jsonc
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.md) — where `config.json` files live and how they merge
702
- - [Features](features.md) — plugins, extensions, agents, skills
703
- - [How to create a Coda extension](create-extension.md) — programmatic hooks via the extension API
704
- - [Coda tools overview](tools.md) — tool names to use in `matcher` patterns
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
- **AGENTS.md (instructions you give)** — project-specific instructions injected at the start of every session. This is how *you* tell CODA about your project's conventions, quality gates, and constraints.
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** | The project where it lives | Global (`~/.coda/`) and per-project |
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. Once the conversation reaches a certain size, CODA automatically condenses older messages into a summary (compaction) while keeping recent messages verbatim. This keeps the session running smoothly without losing important context.
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
 
@@ -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. Every page is a Markdown file under `~/.coda/docs/`, synced from the version of CODA 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`).
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 OS (recommended for Globant employees) or a custom OpenAI-compatible / Ollama endpoint, and authenticate.
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-run setup wizard, OAuth vs API key, custom providers.
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 bundles.
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. It asks before doing anything risky (see [Permissions & Approvals](#permissions)), snapshots your files before every turn so you can roll back (see [Sessions & Checkpoints](#sessions)), and 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.
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.