Skip to content

Commit aa27291

Browse files
authored
Merge pull request #2479 from dgageot/board/verify-github-issues-on-docker-agent-246-5d060e7a
docs: fix doc-code divergences reported in #2464
2 parents d8f1bfa + 1001336 commit aa27291

40 files changed

Lines changed: 648 additions & 155 deletions

File tree

agent-schema.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "http://json-schema.org/draft-07/schema#",
33
"$id": "https://github.com/docker/docker-agent/blob/main/agent-schema.json",
44
"title": "Docker Agent Configuration",
5-
"description": "Configuration schema for Docker Agent v7",
5+
"description": "Configuration schema for Docker Agent v8",
66
"type": "object",
77
"properties": {
88
"version": {
@@ -16,7 +16,8 @@
1616
"4",
1717
"5",
1818
"6",
19-
"7"
19+
"7",
20+
"8"
2021
],
2122
"examples": [
2223
"0",
@@ -26,7 +27,8 @@
2627
"4",
2728
"5",
2829
"6",
29-
"7"
30+
"7",
31+
"8"
3032
]
3133
},
3234
"providers": {

docs/concepts/agents/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ Every docker-agent configuration has a **root agent** — the entry point that r
5757
| `add_environment_info` | boolean | ✗ | Include OS, working directory, git info in context |
5858
| `max_iterations` | int | ✗ | Max tool-calling loops (default: unlimited) |
5959
| `commands` | object | ✗ | Named prompts callable via `/command` |
60-
| `skills` | boolean | ✗ | Enable skill discovery and loading |
60+
| `skills` | boolean \| list | ✗ | Enable skill discovery and loading. `true` = `["local"]`; list values may combine `"local"` with remote skill-server URLs. |
6161

6262
## Model Fallbacks
6363

docs/concepts/models/index.md

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,21 @@ Named models let you configure temperature, token limits, thinking budgets, and
4545

4646
## Supported Providers
4747

48-
| Provider | Key | Example Models | API Key Env Var |
49-
| ------------------- | ---------------- | ------------------------------------ | ------------------- |
50-
| OpenAI | `openai` | gpt-4o, gpt-5, gpt-5-mini | `OPENAI_API_KEY` |
51-
| Anthropic | `anthropic` | claude-sonnet-4-0, claude-sonnet-4-5 | `ANTHROPIC_API_KEY` |
52-
| Google | `google` | gemini-2.5-flash, gemini-3-pro | `GOOGLE_API_KEY` |
53-
| AWS Bedrock | `amazon-bedrock` | Claude, Nova, Llama models | AWS credentials |
54-
| Docker Model Runner | `dmr` | ai/qwen3, ai/llama3.2 | None (local) |
55-
| Mistral | `mistral` | Mistral models | `MISTRAL_API_KEY` |
56-
| xAI | `xai` | Grok models | `XAI_API_KEY` |
48+
| Provider | Key | Example Models | API Key Env Var |
49+
| ------------------- | ---------------- | ------------------------------------ | ----------------------------------- |
50+
| OpenAI | `openai` | gpt-4o, gpt-5, gpt-5-mini | `OPENAI_API_KEY` |
51+
| Anthropic | `anthropic` | claude-sonnet-4-0, claude-sonnet-4-5 | `ANTHROPIC_API_KEY` |
52+
| Google | `google` | gemini-2.5-flash, gemini-3-pro | `GOOGLE_API_KEY` / `GEMINI_API_KEY` |
53+
| AWS Bedrock | `amazon-bedrock` | Claude, Nova, Llama models | AWS credentials |
54+
| Docker Model Runner | `dmr` | ai/qwen3, ai/llama3.2 | None (local) |
55+
| Mistral | `mistral` | Mistral models | `MISTRAL_API_KEY` |
56+
| xAI | `xai` | Grok models | `XAI_API_KEY` |
57+
| Nebius | `nebius` | Open-source and specialised models | `NEBIUS_API_KEY` |
58+
| MiniMax | `minimax` | MiniMax models | `MINIMAX_API_KEY` |
59+
| Requesty | `requesty` | Multi-provider gateway | `REQUESTY_API_KEY` |
60+
| Azure OpenAI | `azure` | gpt-4o, gpt-5 on Azure | `AZURE_OPENAI_API_KEY` + `base_url` |
61+
| Ollama | `ollama` | Any local Ollama model | None (local; optional `base_url`) |
62+
| GitHub Copilot | `github-copilot` | Copilot-hosted OpenAI/Anthropic | GitHub CLI auth (`gh auth login`) |
5763

5864
See the [Model Providers]({{ '/providers/overview/' | relative_url }}) section for detailed configuration guides.
5965

docs/concepts/tools/index.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,22 @@ docker-agent ships with several built-in tools that require no external dependen
3030
| Tool | Description |
3131
| --- | --- |
3232
| [Filesystem]({{ '/tools/filesystem/' | relative_url }}) | Read, write, list, search, and navigate files and directories |
33-
| [Shell]({{ '/tools/shell/' | relative_url }}) | Execute arbitrary shell commands in the user's environment |
33+
| [Shell]({{ '/tools/shell/' | relative_url }}) | Execute synchronous and background shell commands |
3434
| [Think]({{ '/tools/think/' | relative_url }}) | Step-by-step reasoning scratchpad for planning and decision-making |
3535
| [Todo]({{ '/tools/todo/' | relative_url }}) | Task list management for complex multi-step workflows |
36+
| [Tasks]({{ '/tools/tasks/' | relative_url }}) | Persistent task database shared across sessions |
3637
| [Memory]({{ '/tools/memory/' | relative_url }}) | Persistent key-value storage backed by SQLite |
37-
| [Fetch]({{ '/tools/fetch/' | relative_url }}) | Make HTTP requests to external APIs and web services |
38+
| [Fetch]({{ '/tools/fetch/' | relative_url }}) | Read content from HTTP/HTTPS URLs (GET only) |
3839
| [Script]({{ '/tools/script/' | relative_url }}) | Define custom shell scripts as named tools |
3940
| [LSP]({{ '/tools/lsp/' | relative_url }}) | Connect to Language Server Protocol servers for code intelligence |
4041
| [API]({{ '/tools/api/' | relative_url }}) | Create custom tools that call HTTP APIs without writing code |
42+
| [OpenAPI]({{ '/tools/openapi/' | relative_url }}) | Generate tools from an OpenAPI 3.x document |
43+
| [RAG]({{ '/features/rag/' | relative_url }}) | Retrieval-augmented generation over indexed sources |
44+
| [Model Picker]({{ '/tools/model-picker/' | relative_url }}) | Let the agent pick between several models per turn |
4145
| [User Prompt]({{ '/tools/user-prompt/' | relative_url }}) | Ask users questions and collect interactive input |
4246
| [Transfer Task]({{ '/tools/transfer-task/' | relative_url }}) | Delegate tasks to sub-agents (auto-enabled with `sub_agents`) |
4347
| [Background Agents]({{ '/tools/background-agents/' | relative_url }}) | Dispatch work to sub-agents concurrently |
44-
| [Handoff]({{ '/tools/handoff/' | relative_url }}) | Delegate tasks to remote agents via A2A |
48+
| [Handoff]({{ '/tools/handoff/' | relative_url }}) | Hand the conversation off to another local agent in the same config (auto-enabled with `handoffs:`) |
4549
| [A2A]({{ '/tools/a2a/' | relative_url }}) | Connect to remote agents via the Agent-to-Agent protocol |
4650

4751
## MCP Tools

docs/configuration/agents/index.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ agents:
1818
description: string # Required: what this agent does
1919
instruction: string # Required: system prompt
2020
sub_agents: [list] # Optional: local or external sub-agent references
21-
toolsets: [list] # Optional: tool configurations
22-
rag: [list] # Optional: RAG source references
21+
toolsets: [list] # Optional: tool configurations (use `type: rag` for RAG sources)
2322
fallback: # Optional: fallback config
2423
models: [list]
2524
retries: 2

docs/configuration/models/index.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ _Complete reference for defining models with providers, parameters, and reasonin
1414
```yaml
1515
models:
1616
model_name:
17-
provider: string # Required: openai, anthropic, google, amazon-bedrock, dmr
17+
provider: string # Required. One of: openai, anthropic, google, amazon-bedrock,
18+
# dmr, mistral, xai, nebius, minimax, requesty, azure, ollama,
19+
# github-copilot, or a named provider defined under the top-level
20+
# `providers:` section.
1821
model: string # Required: model identifier
1922
temperature: float # Optional: 0.0–1.0
2023
max_tokens: integer # Optional: response length limit
@@ -65,7 +68,7 @@ models:
6568
gpt:
6669
provider: openai
6770
model: gpt-5-mini
68-
thinking_budget: low # minimal | low | medium | high
71+
thinking_budget: low # minimal | low | medium | high | xhigh | max | adaptive/<level>
6972
```
7073

7174
### Anthropic
@@ -101,7 +104,7 @@ models:
101104
gemini3:
102105
provider: google
103106
model: gemini-3-flash
104-
thinking_budget: medium # minimal | low | medium | high
107+
thinking_budget: medium # minimal | low | medium | high | xhigh | max | adaptive/<level>
105108
```
106109

107110
### Disabling Thinking

docs/configuration/overview/index.md

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ A docker-agent YAML config has these main sections:
1414

1515
```bash
1616
# 1. Version — configuration schema version (optional but recommended)
17-
version: 6
17+
version: 8
1818

1919
# 2. Metadata — optional agent metadata for distribution
2020
metadata:
@@ -46,14 +46,21 @@ rag:
4646
- type: chunked-embeddings
4747
model: openai/text-embedding-3-small
4848

49-
# 6. Providers — optional reusable provider definitions
49+
# 6. MCPs — reusable MCP server definitions (optional)
50+
mcps:
51+
github:
52+
remote:
53+
url: https://api.githubcopilot.com/mcp
54+
transport_type: sse
55+
56+
# 7. Providers — optional reusable provider definitions
5057
providers:
5158
my_provider:
5259
provider: anthropic # or openai (default), google, amazon-bedrock, etc.
5360
token_key: MY_API_KEY
5461
max_tokens: 16384
5562

56-
# 7. Permissions — agent-level tool permission rules (optional)
63+
# 8. Permissions — agent-level tool permission rules (optional)
5764
# For user-wide global permissions, see ~/.config/cagent/config.yaml
5865
permissions:
5966
allow: ["read_*"]
@@ -181,10 +188,10 @@ For editor autocompletion and validation, use the [Docker Agent JSON Schema](htt
181188

182189
## Config Versioning
183190

184-
docker-agent configs are versioned. The current version is `5`. Add the version at the top of your config:
191+
docker-agent configs are versioned. The current version is `8`. Add the version at the top of your config:
185192

186193
```yaml
187-
version: 5
194+
version: 8
188195
189196
agents:
190197
root:
@@ -218,6 +225,32 @@ metadata:
218225

219226
See [Agent Distribution]({{ '/concepts/distribution/' | relative_url }}) for publishing agents to registries.
220227

228+
## Reusable MCP Servers (`mcps:`)
229+
230+
The top-level `mcps:` section defines named MCP server configurations that agents can reference with `toolsets: [{type: mcp, ref: <name>}]`. This avoids repeating the same command / URL / headers across agents and keeps credentials in one place.
231+
232+
```yaml
233+
mcps:
234+
github:
235+
remote:
236+
url: https://api.githubcopilot.com/mcp
237+
transport_type: sse
238+
playwright:
239+
command: npx
240+
args: ["-y", "@modelcontextprotocol/server-playwright"]
241+
242+
agents:
243+
root:
244+
model: openai/gpt-4o
245+
toolsets:
246+
- type: mcp
247+
ref: github # reuse the definition above
248+
- type: mcp
249+
ref: playwright
250+
```
251+
252+
An `mcps` entry accepts every field a regular `type: mcp` toolset accepts (command/args/env, `remote` with `url`/`transport_type`/`headers`/`oauth`, `tools` filter, `instruction`, `defer`, …) — the `type: mcp` is implicit. See the [Tool Config]({{ '/configuration/tools/' | relative_url }}) page for all options and the [Remote MCP Servers]({{ '/features/remote-mcp/' | relative_url }}) guide for remote setups.
253+
221254
## Custom Providers Section
222255

223256
Define reusable provider configurations with shared defaults. Providers can wrap any provider type — not just OpenAI-compatible endpoints:

docs/configuration/permissions/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,20 @@ permissions:
4646
- "read_*" # Glob patterns
4747
- "shell:cmd=ls*" # With argument matching
4848

49+
# Always ask before running these tools, even if an allow pattern would match
50+
ask:
51+
- "shell:cmd=git push*"
52+
- "write_file:path=/home/user/important/*"
53+
4954
# Block these tools entirely
5055
deny:
5156
- "shell:cmd=sudo*"
5257
- "shell:cmd=rm*-rf*"
5358
- "dangerous_tool"
5459
```
5560
61+
The three lists are evaluated in order `deny` → `allow` → `ask`, so an `ask:` entry lets you add a confirmation layer on top of an otherwise-allowed tool.
62+
5663
## Global Permissions
5764

5865
Global permissions let you enforce rules across **all** agents, regardless of which agent config you run. Define them in your user config file:

docs/configuration/sandbox/index.md

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
---
22
title: "Sandbox Mode"
3-
description: "Run agents in an isolated Docker container for enhanced security."
3+
description: "Run agents in an isolated Docker sandbox VM for enhanced security."
44
permalink: /configuration/sandbox/
55
---
66

77
# Sandbox Mode
88

9-
_Run agents in an isolated Docker container for enhanced security._
9+
_Run agents in an isolated Docker sandbox VM for enhanced security._
1010

1111
## Overview
1212

13-
Sandbox mode runs the entire agent inside a Docker container instead of directly on the host system. This provides an additional layer of isolation, limiting the potential impact of unintended or malicious commands.
13+
Sandbox mode runs the entire agent inside a disposable sandbox VM instead of directly on the host system. All shell, filesystem, and process activity happens inside that VM, so a misbehaving agent cannot touch files outside the mounted working directory or reach long-lived host state.
14+
15+
The backend is provided by the [`docker sandbox`](https://docs.docker.com/desktop/features/sandbox/) CLI plugin (ships with Docker Desktop) or the standalone [`sbx`](https://github.com/docker/sbx) CLI if it is on `PATH`.
1416

1517
<div class="callout callout-info" markdown="1">
1618
<div class="callout-title">ℹ️ Requirements
1719
</div>
18-
<p>Sandbox mode requires Docker to be installed and running on the host system.</p>
20+
<p>Sandbox mode requires Docker Desktop with sandbox support (or a working <code>sbx</code> CLI). docker-agent shells out to these tools, it does not start raw <code>docker run</code> containers.</p>
1921

2022
</div>
2123

@@ -27,7 +29,23 @@ Enable sandbox mode with the `--sandbox` flag on the `docker agent run` command:
2729
docker agent run --sandbox agent.yaml
2830
```
2931

30-
This runs the agent inside a Docker container with the current working directory mounted.
32+
docker-agent launches a sandbox VM, copies itself into it, mounts the current working directory, and re-runs the agent from inside.
33+
34+
## Flags
35+
36+
| Flag | Default | Description |
37+
| ------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
38+
| `--sandbox` | `false` | Enable sandbox mode. |
39+
| `--template` | `docker/sandbox-templates:docker-agent` | OCI image used as the sandbox template. Passed to `docker sandbox create -t` / `sbx create -t`. |
40+
| `--sbx` | `true` | Prefer the `sbx` CLI backend when it is available. Set `--sbx=false` to always use `docker sandbox`. |
41+
42+
```bash
43+
# Use a custom template image
44+
docker agent run --sandbox --template myorg/custom-agent-template:latest agent.yaml
45+
46+
# Force the docker sandbox backend even if sbx is on PATH
47+
docker agent run --sandbox --sbx=false agent.yaml
48+
```
3149

3250
## Example
3351

@@ -48,15 +66,18 @@ docker agent run --sandbox agent.yaml
4866

4967
## How It Works
5068

51-
1. When `--sandbox` is specified, docker-agent launches a Docker container
52-
2. The current working directory is mounted into the container
53-
3. All agent tools (shell, filesystem, etc.) operate inside the container
54-
4. When the session ends, the container is automatically stopped and removed
69+
1. `--sandbox` tells docker-agent to prefer the `sbx` CLI (if available and `--sbx` is true), otherwise it falls back to `docker sandbox`.
70+
2. A new sandbox VM is created from the image passed via `--template`.
71+
3. The current working directory is mounted into the VM; the agent binary is copied in.
72+
4. All tools (shell, filesystem, background jobs, etc.) run inside the VM.
73+
5. When the session ends, the sandbox VM is stopped and removed.
5574

5675
<div class="callout callout-warning" markdown="1">
5776
<div class="callout-title">⚠️ Limitations
5877
</div>
5978

60-
- Container starts fresh each session (no persistence between sessions)
79+
- Sandbox VMs start fresh each session (no persistence between sessions).
80+
- Only the working directory is mounted; files outside it are not visible to the agent.
81+
- Network egress is constrained by the sandbox backend's policy.
6182

62-
</div>
83+
</div>

docs/configuration/tools/index.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,22 @@ Built-in tools are included with docker-agent and require no external dependenci
1515
| Type | Description | Page |
1616
| --- | --- | --- |
1717
| `filesystem` | Read, write, list, search, navigate | [Filesystem]({{ '/tools/filesystem/' | relative_url }}) |
18-
| `shell` | Execute shell commands | [Shell]({{ '/tools/shell/' | relative_url }}) |
18+
| `shell` | Execute shell commands (sync + background jobs) | [Shell]({{ '/tools/shell/' | relative_url }}) |
1919
| `think` | Reasoning scratchpad | [Think]({{ '/tools/think/' | relative_url }}) |
2020
| `todo` | Task list management | [Todo]({{ '/tools/todo/' | relative_url }}) |
21+
| `tasks` | Persistent task database shared across sessions | [Tasks]({{ '/tools/tasks/' | relative_url }}) |
2122
| `memory` | Persistent key-value storage (SQLite) | [Memory]({{ '/tools/memory/' | relative_url }}) |
22-
| `fetch` | HTTP requests | [Fetch]({{ '/tools/fetch/' | relative_url }}) |
23+
| `fetch` | HTTP `GET` requests with text/markdown/html output | [Fetch]({{ '/tools/fetch/' | relative_url }}) |
2324
| `script` | Custom shell scripts as tools | [Script]({{ '/tools/script/' | relative_url }}) |
2425
| `lsp` | Language Server Protocol integration | [LSP]({{ '/tools/lsp/' | relative_url }}) |
2526
| `api` | Custom HTTP API tools | [API]({{ '/tools/api/' | relative_url }}) |
27+
| `openapi` | Import every operation of an OpenAPI 3.x document as tools | [OpenAPI]({{ '/tools/openapi/' | relative_url }}) |
28+
| `rag` | Retrieval-augmented generation over indexed sources | [RAG]({{ '/features/rag/' | relative_url }}) |
29+
| `model_picker` | Let the agent pick between several models per turn | [Model Picker]({{ '/tools/model-picker/' | relative_url }}) |
2630
| `user_prompt` | Interactive user input | [User Prompt]({{ '/tools/user-prompt/' | relative_url }}) |
2731
| `transfer_task` | Delegate to sub-agents (auto-enabled) | [Transfer Task]({{ '/tools/transfer-task/' | relative_url }}) |
2832
| `background_agents` | Parallel sub-agent dispatch | [Background Agents]({{ '/tools/background-agents/' | relative_url }}) |
29-
| `handoff` | A2A remote agent delegation | [Handoff]({{ '/tools/handoff/' | relative_url }}) |
33+
| `handoff` | Local conversation handoff to another agent in the same config (auto-enabled by `handoffs:`) | [Handoff]({{ '/tools/handoff/' | relative_url }}) |
3034
| `a2a` | A2A remote agent connection | [A2A]({{ '/tools/a2a/' | relative_url }}) |
3135

3236
**Example:**

0 commit comments

Comments
 (0)