From 4d8d318da7d81bdac72188b2729d8e24aa3b8fe3 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Wed, 13 May 2026 15:49:15 +0200 Subject: [PATCH 01/24] docs(site): use Docker brand fonts (Roboto / Roboto Mono) Replace Inter and JetBrains Mono with Roboto and Roboto Mono to align with Docker's design system used across docker.com and docs.docker.com. --- docs/_layouts/default.html | 2 +- docs/css/style.css | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index 01b0387f4..cb8672525 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -13,7 +13,7 @@ - + diff --git a/docs/css/style.css b/docs/css/style.css index 713bd0853..6dfb672fd 100644 --- a/docs/css/style.css +++ b/docs/css/style.css @@ -48,8 +48,8 @@ --header-height: 56px; --toc-width: 220px; - --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - --font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace; + --font-sans: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + --font-mono: 'Roboto Mono', 'SF Mono', Menlo, 'Cascadia Code', monospace; } /* Light theme override */ From 11b72ba568c3cf546f40a1e2a300b9096a8600a7 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Wed, 13 May 2026 15:49:55 +0200 Subject: [PATCH 02/24] docs(site): introduce Docker brand color tokens Replace ad-hoc hex values with a structured palette of named tokens (--blue-100..700, --navy-600..900, --moby-cyan) that mirrors Docker's design system. Existing --docker-* and --accent-* names are kept as aliases so nothing breaks; new code should prefer the scaled tokens. --- docs/css/style.css | 62 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/docs/css/style.css b/docs/css/style.css index 6dfb672fd..a96cc9f1c 100644 --- a/docs/css/style.css +++ b/docs/css/style.css @@ -2,16 +2,40 @@ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } :root { - /* Docker brand palette */ - --docker-blue: #1D63ED; - --docker-blue-hover: #1854D1; - --docker-blue-light: #4A8AF4; - --docker-navy: #09101F; - --docker-navy-light: #111827; - - /* Colors – dark theme (default, docker-branded) */ - --bg: #09101F; - --bg-sidebar: #0D1525; + /* ===== Docker brand palette ===== + * Source: Docker design system / brand guidelines. + * Use these tokens (rather than raw hex) when adding new styles. */ + + /* Primary blue scale */ + --blue-100: #E5EFFE; + --blue-200: #BFD6FC; + --blue-300: #7AAAF7; + --blue-400: #4A8AF4; + --blue-500: #1D63ED; /* Docker Blue — primary */ + --blue-600: #0B5DD0; /* hover */ + --blue-700: #0A4DA8; /* pressed */ + + /* Neutral / navy scale */ + --navy-900: #09101F; + --navy-800: #0D1525; + --navy-700: #111827; + --navy-600: #1E293B; + + /* Accents */ + --moby-cyan: #19B6E6; /* Moby highlight */ + --moby-teal: #00B4C7; + + /* Legacy aliases — kept for backwards compatibility, prefer the + * --blue-* and --navy-* tokens above for new code. */ + --docker-blue: var(--blue-500); + --docker-blue-hover: var(--blue-600); + --docker-blue-light: var(--blue-400); + --docker-navy: var(--navy-900); + --docker-navy-light: var(--navy-700); + + /* ===== Semantic tokens — dark theme (default) ===== */ + --bg: var(--navy-900); + --bg-sidebar: var(--navy-800); --bg-code: rgba(255,255,255,0.05); --bg-code-block: #0B1120; --bg-card: rgba(255,255,255,0.03); @@ -28,8 +52,8 @@ --border: rgba(255,255,255,0.08); --border-light: rgba(255,255,255,0.05); - --accent: #1D63ED; - --accent-hover: #4A8AF4; + --accent: var(--blue-500); + --accent-hover: var(--blue-400); --accent-light: rgba(29,99,237,0.12); --success: #34D399; @@ -66,14 +90,14 @@ --text-muted: #94A3B8; --text-sidebar: #475569; --text-sidebar-active: #0F172A; - --text-code: #1D63ED; + --text-code: var(--blue-500); --border: #E2E8F0; --border-light: #F1F5F9; - --accent: #1D63ED; - --accent-hover: #1854D1; - --accent-light: #EFF6FF; + --accent: var(--blue-500); + --accent-hover: var(--blue-600); + --accent-light: var(--blue-100); } /* ===== Skip link (accessibility) ===== */ @@ -686,7 +710,7 @@ body { /* ===== Hero section (home page) ===== */ .hero { - background: linear-gradient(145deg, #09101F 0%, #0D1D3A 40%, #1D63ED 100%); + background: linear-gradient(145deg, var(--navy-900) 0%, #0D1D3A 40%, var(--blue-500) 100%); color: var(--text-on-hero); padding: 64px 48px; border-radius: var(--radius-lg); @@ -697,7 +721,7 @@ body { border: 1px solid rgba(29,99,237,0.2); } [data-theme="light"] .hero { - background: linear-gradient(145deg, #0F172A 0%, #1E3A5F 40%, #1D63ED 100%); + background: linear-gradient(145deg, #0F172A 0%, #1E3A5F 40%, var(--blue-500) 100%); } .hero::before { content: ''; @@ -748,7 +772,7 @@ body { } .btn-primary { background: white; - color: #1D63ED; + color: var(--blue-500); } .btn-primary:hover { background: #F0F4FF; From 606ea37fa379b790164e7a6168c07db87c8afb85 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Wed, 13 May 2026 15:50:37 +0200 Subject: [PATCH 03/24] docs(site): make code blocks honor the light theme Previously code blocks stayed dark navy even when the rest of the page switched to the light theme, which clashed with docs.docker.com styling. Switch the light theme to a soft \"#F6F8FA\" code background and add a matching warm Rouge token palette so code reads naturally in both modes. --- docs/css/style.css | 60 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/docs/css/style.css b/docs/css/style.css index a96cc9f1c..1ade13390 100644 --- a/docs/css/style.css +++ b/docs/css/style.css @@ -80,8 +80,8 @@ [data-theme="light"] { --bg: #FAFBFC; --bg-sidebar: #F3F4F6; - --bg-code: #F1F5F9; - --bg-code-block: #0F172A; + --bg-code: #F1F3F5; + --bg-code-block: #F6F8FA; --bg-card: #FFFFFF; --bg-hover: #E5E7EB; @@ -90,7 +90,7 @@ --text-muted: #94A3B8; --text-sidebar: #475569; --text-sidebar-active: #0F172A; - --text-code: var(--blue-500); + --text-code: var(--blue-600); --border: #E2E8F0; --border-light: #F1F5F9; @@ -522,6 +522,10 @@ body { line-height: 1.65; border: none; } +[data-theme="light"] .content pre code, +[data-theme="light"] .content .highlighter-rouge pre.highlight code { + color: #1F2937; +} /* Rouge / highlighter-rouge overrides */ .content pre[class*="language-"], @@ -588,6 +592,56 @@ body { .highlight .gi { color: #34D399; } .highlight .w { color: #CBD5E1; } +/* Light-theme syntax — docs.docker.com style (warm, low-contrast) */ +[data-theme="light"] .highlight .c, +[data-theme="light"] .highlight .c1, +[data-theme="light"] .highlight .cm, +[data-theme="light"] .highlight .cs { color: #6B7280; font-style: italic; } +[data-theme="light"] .highlight .k, +[data-theme="light"] .highlight .kd, +[data-theme="light"] .highlight .kn, +[data-theme="light"] .highlight .kp, +[data-theme="light"] .highlight .kr { color: #7C3AED; } +[data-theme="light"] .highlight .kc { color: #B45309; } +[data-theme="light"] .highlight .kt { color: #B45309; } +[data-theme="light"] .highlight .s, +[data-theme="light"] .highlight .s1, +[data-theme="light"] .highlight .s2, +[data-theme="light"] .highlight .sb, +[data-theme="light"] .highlight .sc, +[data-theme="light"] .highlight .sh { color: #047857; } +[data-theme="light"] .highlight .na { color: var(--blue-600); } +[data-theme="light"] .highlight .nb, +[data-theme="light"] .highlight .bp { color: var(--blue-600); } +[data-theme="light"] .highlight .nc, +[data-theme="light"] .highlight .nn { color: #B45309; } +[data-theme="light"] .highlight .nf, +[data-theme="light"] .highlight .fm { color: var(--blue-600); } +[data-theme="light"] .highlight .no { color: #B45309; } +[data-theme="light"] .highlight .ni { color: #1F2937; } +[data-theme="light"] .highlight .ne { color: #B91C1C; } +[data-theme="light"] .highlight .nv, +[data-theme="light"] .highlight .vi, +[data-theme="light"] .highlight .vc, +[data-theme="light"] .highlight .vg { color: #B91C1C; } +[data-theme="light"] .highlight .o, +[data-theme="light"] .highlight .ow { color: #0E7490; } +[data-theme="light"] .highlight .p, +[data-theme="light"] .highlight .pi { color: #1F2937; } +[data-theme="light"] .highlight .m, +[data-theme="light"] .highlight .mi, +[data-theme="light"] .highlight .mf, +[data-theme="light"] .highlight .mh, +[data-theme="light"] .highlight .il { color: #B45309; } +[data-theme="light"] .highlight .sr { color: #047857; } +[data-theme="light"] .highlight .ss { color: #0E7490; } +[data-theme="light"] .highlight .nt { color: #B91C1C; } +[data-theme="light"] .highlight .err { color: #B91C1C; } +[data-theme="light"] .highlight .gh { color: #1F2937; font-weight: bold; } +[data-theme="light"] .highlight .gd { color: #B91C1C; } +[data-theme="light"] .highlight .gi { color: #047857; } +[data-theme="light"] .highlight .w { color: #1F2937; } + /* ===== Tables ===== */ .content table { width: 100%; From c5902c024ac7cbe9a56675b62e716a3251b9a163 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Wed, 13 May 2026 15:51:28 +0200 Subject: [PATCH 04/24] docs(site): redesign callouts in docs.docker.com style Switch admonitions to a Docker-style panel: rounded card, filled circular icon badge in the top-left, and a strong title row. Authors keep the same Markdown structure, so existing pages just look better. Also strip the redundant emoji prefixes (\"\u2139\ufe0f\", \"\ud83d\udca1\", \"\u26a0\ufe0f\") from callout titles \u2014 the icon badge now carries that role. --- docs/community/contributing/index.md | 6 +- docs/community/telemetry/index.md | 4 +- docs/community/troubleshooting/index.md | 6 +- docs/concepts/agents/index.md | 4 +- docs/concepts/distribution/index.md | 4 +- docs/concepts/models/index.md | 2 +- docs/concepts/multi-agent/index.md | 12 ++-- docs/concepts/tools/index.md | 4 +- docs/configuration/agents/index.md | 8 +-- docs/configuration/hcl/index.md | 4 +- docs/configuration/hooks/index.md | 16 +++--- docs/configuration/overview/index.md | 4 +- docs/configuration/permissions/index.md | 6 +- docs/configuration/routing/index.md | 6 +- docs/configuration/sandbox/index.md | 4 +- docs/configuration/structured-output/index.md | 4 +- docs/configuration/tools/index.md | 12 ++-- docs/css/style.css | 57 +++++++++++++++---- docs/features/a2a/index.md | 4 +- docs/features/acp/index.md | 6 +- docs/features/api-server/index.md | 4 +- docs/features/chat-server/index.md | 6 +- docs/features/cli/index.md | 8 +-- docs/features/evaluation/index.md | 8 +-- docs/features/mcp-mode/index.md | 2 +- docs/features/rag/index.md | 6 +- docs/features/remote-mcp/index.md | 4 +- docs/features/skills/index.md | 6 +- docs/features/tui/index.md | 10 ++-- docs/getting-started/installation/index.md | 6 +- docs/getting-started/introduction/index.md | 2 +- docs/getting-started/quickstart/index.md | 6 +- docs/guides/go-sdk/index.md | 2 +- docs/guides/secrets/index.md | 2 +- docs/index.md | 2 +- docs/providers/anthropic/index.md | 2 +- docs/providers/bedrock/index.md | 2 +- docs/providers/custom/index.md | 2 +- docs/providers/dmr/index.md | 4 +- docs/providers/google/index.md | 4 +- docs/providers/local/index.md | 4 +- docs/providers/openai/index.md | 2 +- docs/providers/overview/index.md | 2 +- docs/tools/a2a/index.md | 2 +- docs/tools/api/index.md | 6 +- docs/tools/background-agents/index.md | 2 +- docs/tools/fetch/index.md | 6 +- docs/tools/filesystem/index.md | 2 +- docs/tools/handoff/index.md | 4 +- docs/tools/lsp/index.md | 6 +- docs/tools/memory/index.md | 2 +- docs/tools/model-picker/index.md | 2 +- docs/tools/script/index.md | 2 +- docs/tools/shell/index.md | 4 +- docs/tools/tasks/index.md | 2 +- docs/tools/think/index.md | 2 +- docs/tools/transfer-task/index.md | 2 +- docs/tools/user-prompt/index.md | 6 +- 58 files changed, 177 insertions(+), 142 deletions(-) diff --git a/docs/community/contributing/index.md b/docs/community/contributing/index.md index 4d8fde7f9..a08a268ab 100644 --- a/docs/community/contributing/index.md +++ b/docs/community/contributing/index.md @@ -18,7 +18,7 @@ _docker-agent is open source. Here's how to set up your development environment - [golangci-lint](https://golangci-lint.run/docs/welcome/install/local/)
-
ℹ️ Platform Support +
Platform Support

macOS and Linux are fully supported for development. On Windows, use task build-local to build via Docker.

@@ -87,7 +87,7 @@ Key conventions: File issues on the [GitHub issue tracker](https://github.com/docker/docker-agent/issues). Please:
-
ℹ️ See also +
See also
Troubleshooting — Common issues and debug mode. Telemetry — What data is collected and how to opt out. @@ -106,7 +106,7 @@ File issues on the [GitHub issue tracker](https://github.com/docker/docker-agent 5. **Open a pull request** against the `main` branch
-
💡 Tip +
Tip

Use the dogfooding agent (docker agent run ./golang_developer.yaml) to help write and review your changes before submitting.

diff --git a/docs/community/telemetry/index.md b/docs/community/telemetry/index.md index 4866a1b5e..1a2d5d211 100644 --- a/docs/community/telemetry/index.md +++ b/docs/community/telemetry/index.md @@ -21,7 +21,7 @@ $ export TELEMETRY_ENABLED=false ```
-
ℹ️ Default +
Default

Telemetry is **enabled by default**. Set TELEMETRY_ENABLED=false to opt out.

@@ -44,7 +44,7 @@ $ export TELEMETRY_ENABLED=false - Personally identifying information (PII)
-
💡 See events locally +
See events locally

Use --debug to see telemetry events printed to the debug log without sending them anywhere additional.

diff --git a/docs/community/troubleshooting/index.md b/docs/community/troubleshooting/index.md index 62602e1ca..6a35a7cd9 100644 --- a/docs/community/troubleshooting/index.md +++ b/docs/community/troubleshooting/index.md @@ -63,7 +63,7 @@ $ docker agent run config.yaml --otel ```
-
💡 Tip +
Tip

Always enable --debug when reporting issues. The log file contains detailed traces of API calls, tool executions, and agent interactions.

@@ -159,7 +159,7 @@ docker-agent validates config at startup and reports errors with line numbers. C - Provider names must be one of: `openai`, `anthropic`, `google`, `amazon-bedrock`, `dmr`, etc.
-
ℹ️ Schema Validation +
Schema Validation

Use the JSON schema in your editor for real-time config validation and autocompletion.

@@ -248,7 +248,7 @@ When reviewing debug logs, search for these key patterns: | `[Reranker]` | Reranking operations |
-
⚠️ Still stuck? +
Still stuck?

If these steps don't resolve your issue, file a bug on the GitHub issue tracker with your debug log attached, or ask on Slack.

diff --git a/docs/concepts/agents/index.md b/docs/concepts/agents/index.md index f1ff4cbd6..4cd8b6fff 100644 --- a/docs/concepts/agents/index.md +++ b/docs/concepts/agents/index.md @@ -37,7 +37,7 @@ agents: Every docker-agent configuration has a **root agent** — the entry point that receives user messages. In a single-agent setup, this is the only agent. In a multi-agent setup, the root agent acts as a coordinator, delegating tasks to specialized sub-agents.
-
ℹ️ Naming +
Naming

The first agent defined in your YAML (or the one named root) is the root agent by default. You can also specify which agent to start with using docker agent run config.yaml -a agent_name.

@@ -111,7 +111,7 @@ $ docker agent run # now runs your custom agent ```
-
💡 See also +
See also

For reusable task-specific instructions, see Skills. For multi-agent patterns, see Multi-Agent. For full config reference, see Agent Config.

diff --git a/docs/concepts/distribution/index.md b/docs/concepts/distribution/index.md index 2c33bcd4b..09d9a5673 100644 --- a/docs/concepts/distribution/index.md +++ b/docs/concepts/distribution/index.md @@ -13,7 +13,7 @@ _Package, share, and run agents via OCI-compatible registries — just like cont docker-agent agents can be pushed to any OCI-compatible registry (Docker Hub, GitHub Container Registry, etc.) and pulled/run anywhere. This makes sharing agents as easy as sharing Docker images.
-
💡 Tip +
Tip

For CLI commands related to distribution, see CLI Reference (docker agent share push, docker agent share pull, docker agent alias).

@@ -120,7 +120,7 @@ $ docker agent run docker.io/myorg/private-agent:latest ```
-
ℹ️ Troubleshooting +
Troubleshooting

Having issues with push/pull? See Troubleshooting for common registry issues.

diff --git a/docs/concepts/models/index.md b/docs/concepts/models/index.md index 6fa868522..1570dad9f 100644 --- a/docs/concepts/models/index.md +++ b/docs/concepts/models/index.md @@ -105,7 +105,7 @@ models: ```
-
ℹ️ Multi-provider teams +
Multi-provider teams

Different agents can use different providers in the same config. See Multi-Agent for patterns.

diff --git a/docs/concepts/multi-agent/index.md b/docs/concepts/multi-agent/index.md index 5acb7e7ab..33a515983 100644 --- a/docs/concepts/multi-agent/index.md +++ b/docs/concepts/multi-agent/index.md @@ -35,7 +35,7 @@ docker-agent supports two multi-agent patterns: You can combine both patterns in the same configuration — an agent can have both `sub_agents` and `handoffs`.
-
💡 When to use which +
When to use which

sub_agents — Use when a coordinator needs to send tasks to specialists and synthesize their results.

handoffs — Use when agents should take turns processing the same conversation (pipelines, routing).

@@ -63,7 +63,7 @@ transfer_task( ```
-
ℹ️ Auto-Approved +
Auto-Approved

Unlike other tools, transfer_task is always auto-approved — no user confirmation needed. This allows seamless delegation between agents.

@@ -95,7 +95,7 @@ handoff( ```
-
ℹ️ Scoped Handoff Targets +
Scoped Handoff Targets

Each agent can only hand off to agents listed in its own handoffs array. The handoff tool is automatically injected — you don't need to add it manually.

@@ -141,7 +141,7 @@ agents: ```
-
💡 Full pipeline example +
Full pipeline example

For a more complex handoff graph with branching and multiple processing stages, see examples/handoff.yaml.

@@ -213,7 +213,7 @@ External sub-agents are automatically named after their last path segment — fo ```
-
💡 Tip +
Tip

External sub-agents work with any OCI-compatible registry, not just the Docker Agent Catalog. See Agent Distribution for more on registry references.

@@ -346,7 +346,7 @@ toolsets: - **Choose the right pattern** — Use `sub_agents` for hierarchical task delegation, `handoffs` for pipeline workflows and conversational routing
-
ℹ️ Beyond docker-agent +
Beyond docker-agent

For interoperability with other agent frameworks, docker-agent supports the A2A protocol and can expose agents via MCP Mode.

diff --git a/docs/concepts/tools/index.md b/docs/concepts/tools/index.md index 081df5480..41219e523 100644 --- a/docs/concepts/tools/index.md +++ b/docs/concepts/tools/index.md @@ -18,7 +18,7 @@ When an agent needs to perform an action, it makes a **tool call**. The docker-a 4. Agent incorporates the result and responds
-
ℹ️ Tool Confirmation +
Tool Confirmation

By default, docker-agent asks for user confirmation before executing tools that have side effects (shell commands, file writes). Use --yolo to auto-approve all tool calls.

@@ -65,7 +65,7 @@ toolsets: See [Tool Config]({{ '/configuration/tools/#mcp-tools' | relative_url }}) for full MCP configuration reference.
-
💡 See also +
See also

For full configuration reference, see Tool Config. For RAG (document retrieval), see RAG.

diff --git a/docs/configuration/agents/index.md b/docs/configuration/agents/index.md index 193e0dbd2..af62f19fa 100644 --- a/docs/configuration/agents/index.md +++ b/docs/configuration/agents/index.md @@ -58,7 +58,7 @@ agents: ```
-
💡 See also +
See also

For model parameters, see Model Config. For tool details, see Tool Config. For multi-agent patterns, see Multi-Agent.

@@ -93,7 +93,7 @@ agents: | `cache` | object | ✗ | Response cache. When the same user question is asked again, the previous answer is replayed verbatim and the model is not called. See [Response Cache](#response-cache) below. |
-
⚠️ max_iterations +
max_iterations

Default is 0 (unlimited). Always set max_iterations for agents with powerful tools like shell to prevent infinite loops. A value of 20–50 is typical for development agents.

@@ -173,13 +173,13 @@ Detection uses the [portcullis](https://github.com/docker/portcullis) ruleset, w Each detected span is replaced with the literal string `[REDACTED]`; the surrounding text is preserved so a redacted argument still looks like a legitimate flag (e.g. `--token=[REDACTED]`). Redaction is idempotent — applying it twice yields the same result.
-
ℹ️ False positives vs. false negatives +
False positives vs. false negatives

False positives are extremely rare: every rule pairs a regex with a discriminating keyword, so plain English never trips detection. False negatives are possible — only patterns the ruleset recognises are scrubbed, so this is a defense-in-depth feature, not a substitute for keeping secrets out of the conversation in the first place. Pair it with a proper secret manager for the credentials your agent actually needs.

-
ℹ️ Equivalent hook entry +
Equivalent hook entry

Setting redact_secrets: true on the agent is shorthand for auto-registering all three legs of the feature as hook entries. They share the same built-in name (type: builtin, command: redact_secrets) on pre_tool_use, before_llm_call, and tool_response_transform respectively — the implementation dispatches on the hook event. You can spell them out by hand to scope a leg to a subset of tools (set matcher: to a regex), stack them with other rewriters in a specific order, or enable just one or two legs. See examples/redact_secrets_hooks.yaml for a complete manual wiring and the Hooks reference for the builtin's event coverage.

diff --git a/docs/configuration/hcl/index.md b/docs/configuration/hcl/index.md index e9793b4d0..0a5b5508c 100644 --- a/docs/configuration/hcl/index.md +++ b/docs/configuration/hcl/index.md @@ -11,7 +11,7 @@ _Write docker-agent configs in HCL instead of YAML. It maps to the same docker-a `docker-agent` supports `.hcl` config files anywhere it supports `.yaml` or `.yml` files. HCL is useful if you prefer labeled blocks, less punctuation, and heredocs for long prompts.
-
💡 Same config model, different syntax +
Same config model, different syntax

YAML and HCL are just two syntaxes for the same docker-agent configuration model. docker-agent converts HCL to the equivalent YAML structure internally, then runs the normal schema validation and loading pipeline.

@@ -41,7 +41,7 @@ $ docker agent serve api ./agents/ # directories may mix .yaml, .yml, and .hcl ```
-
💡 See also +
See also

HCL changes the syntax, not the meaning of fields. For what each field does, see Agent Config, Model Config, and Tool Config.

diff --git a/docs/configuration/hooks/index.md b/docs/configuration/hooks/index.md index efa091a5a..1ace6c7d4 100644 --- a/docs/configuration/hooks/index.md +++ b/docs/configuration/hooks/index.md @@ -13,7 +13,7 @@ _Run shell commands at various points during agent execution for deterministic c Hooks allow you to execute shell commands or scripts at key points in an agent's lifecycle. They provide deterministic control that works alongside the LLM's behavior, enabling validation, logging, environment setup, and more.
-
ℹ️ Use Cases +
Use Cases
- Validate or transform tool inputs before execution @@ -61,7 +61,7 @@ docker-agent dispatches the following hook events: | `on_tool_approval_decision` | After the runtime's approval chain (yolo / permissions / readonly / ask) resolves | No |
-
ℹ️ Two compaction events +
Two compaction events

pre_compact and before_compaction both fire just before a compaction. pre_compact is the original event and is best-suited to steering the LLM-generated summary by appending guidance via additional_context. before_compaction is the newer, structured event: it carries the input/output token counts, the model's context limit, and a compaction_reason so handlers can decide based on real session pressure, and it can replace the LLM-generated summary verbatim via hook_specific_output.summary.

@@ -159,13 +159,13 @@ Built-ins are typically zero-config and faster than equivalent shell hooks becau | `unload` | `on_agent_switch` | _none_ | POSTs `{"model": ""}` to each of the previous agent's DMR model endpoints (`/_unload` by default, overridable per-model via `unload_api`) to free the GPU/RAM the just-departing model was holding. Pure HTTP — reads the model snapshot the runtime ships on `on_agent_switch` and depends on no provider-specific runtime state. Non-DMR providers (OpenAI, Anthropic, …) are silently skipped, so cross-provider chains are safe. Errors are logged and swallowed; agent switching never blocks on a slow or unreachable engine (each call has a 10 s timeout). See [`examples/unload_on_switch.yaml`](https://github.com/docker/docker-agent/blob/main/examples/unload_on_switch.yaml). |
-
ℹ️ Per-turn vs. per-session +
Per-turn vs. per-session

turn_start built-ins recompute every turn and contribute transient context that is not persisted to the session — perfect for fast-moving signals like the date or current git state. session_start built-ins run once per session and their context persists across turns and resumes — pick this for stable context like the OS user or the initial directory listing.

-
ℹ️ Auto-injected built-ins +
Auto-injected built-ins

The agent flags add_date: true, add_environment_info: true, add_prompt_files: [...], and redact_secrets: true are shorthands that auto-register the matching built-in hook. You don't need to repeat them under hooks: — set the flag or the hook entry(ies), not both. redact_secrets: true auto-registers the same builtin on all three of pre_tool_use, before_llm_call, and tool_response_transform; you can also wire any subset of them by hand for finer-grained control (per-tool matchers, ordering with other rewriters, …).

@@ -197,7 +197,7 @@ settings: Omit `snapshot` or set it to `false` to leave automatic snapshots off; manually configured snapshot hooks still run.
-
⚠️ Two flavors of max_iterations +
Two flavors of max_iterations

The max_iterations agent field has its own UX (it pauses and asks the user to resume past the limit). The max_iterations built-in hook is a hard stop with no resume — when its counter trips, the agent terminates with a block decision. Use the agent field for interactive sessions and the built-in hook to enforce non-negotiable caps in unattended runs.

@@ -388,14 +388,14 @@ hooks: `pre_tool_use` is fail-closed for safety: a failed pre-tool hook blocks the tool call regardless of `on_error`.
-
⚠️ Performance +
Performance

Hooks run synchronously and can slow down agent execution. Keep hook scripts fast and efficient. Consider using suppress_output: true for logging hooks to reduce noise.

-
ℹ️ Session End and Cancellation +
Session End and Cancellation

session_end hooks are designed to run even when the session is interrupted (e.g., Ctrl+C). They are still subject to their configured timeout.

@@ -733,7 +733,7 @@ $ docker agent run agentcatalog/coder \ ```
-
ℹ️ Merging behavior +
Merging behavior

CLI hooks are appended to any hooks already defined in the agent's YAML config. They don't replace existing hooks. Pre/post-tool-use hooks added via CLI match all tools (equivalent to matcher: "*").

diff --git a/docs/configuration/overview/index.md b/docs/configuration/overview/index.md index 7ebe3bca5..e36a6fa57 100644 --- a/docs/configuration/overview/index.md +++ b/docs/configuration/overview/index.md @@ -192,14 +192,14 @@ API keys and secrets are read from environment variables — never stored in con | `DOCKER_AGENT_HIDE_TELEMETRY_BANNER`| Set to `1` to suppress the first-run telemetry notice. |
-
ℹ️ Legacy CAGENT_* aliases +
Legacy CAGENT_* aliases

The same variables are also accepted with the legacy CAGENT_ prefix (e.g. CAGENT_DEFAULT_MODEL, CAGENT_MODELS_GATEWAY, CAGENT_HIDE_TELEMETRY_BANNER) for backward compatibility. Prefer the DOCKER_AGENT_* form in new setups.

-
⚠️ Important +
Important

Model references are case-sensitive: openai/gpt-5-mini is not the same as openai/GPT-5-mini.

diff --git a/docs/configuration/permissions/index.md b/docs/configuration/permissions/index.md index b601aa1a5..89a8731c8 100644 --- a/docs/configuration/permissions/index.md +++ b/docs/configuration/permissions/index.md @@ -13,7 +13,7 @@ _Control which tools can execute automatically, require confirmation, or are blo Permissions provide fine-grained control over tool execution. You can configure which tools are auto-approved (run without asking), which require user confirmation, and which are completely blocked.
-
ℹ️ Evaluation Order +
Evaluation Order

Permissions are evaluated in this order: **Deny → Allow → Ask**. Deny patterns take priority, then allow patterns, and anything else defaults to asking for user confirmation.

@@ -159,7 +159,7 @@ Patterns follow filepath.Match semantics with some extensions: Matching is **case-insensitive**.
-
💡 Trailing Wildcards +
Trailing Wildcards

Trailing wildcards like sudo* match any characters including spaces, so sudo* matches sudo rm -rf /.

@@ -244,7 +244,7 @@ Permissions work alongside [hooks]({{ '/configuration/hooks/' | relative_url }}) Hooks can override allow decisions but cannot override deny decisions.
-
⚠️ Security Note +
Security Note

Permissions are enforced client-side. They help prevent accidental operations but should not be relied upon as a security boundary for untrusted agents. For stronger isolation, use sandbox mode.

diff --git a/docs/configuration/routing/index.md b/docs/configuration/routing/index.md index f071f8eee..faa799676 100644 --- a/docs/configuration/routing/index.md +++ b/docs/configuration/routing/index.md @@ -13,7 +13,7 @@ _Route requests to different models based on the content of user messages._ Model routing lets you define a "router" model that automatically selects the best underlying model based on the user's message. This is useful for cost optimization, specialized handling, or load balancing across models.
-
ℹ️ How It Works +
How It Works

docker-agent uses NLP-based text similarity (via Bleve full-text search) to match user messages against example phrases you define. The route with the best-matching examples wins, and that model handles the request.

@@ -80,7 +80,7 @@ The router: 5. Falls back to the base model if no good match is found
-
💡 Writing Good Examples +
Writing Good Examples
- Use diverse phrasing that captures the intent @@ -168,7 +168,7 @@ Look for log entries like: ```
-
⚠️ Limitations +
Limitations
- Routing only considers the last user message, not full conversation context diff --git a/docs/configuration/sandbox/index.md b/docs/configuration/sandbox/index.md index cf1d9699c..2a4dd23c1 100644 --- a/docs/configuration/sandbox/index.md +++ b/docs/configuration/sandbox/index.md @@ -15,7 +15,7 @@ Sandbox mode runs the entire agent inside a disposable sandbox VM instead of dir 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`.
-
ℹ️ Requirements +
Requirements

Sandbox mode requires Docker Desktop with sandbox support (or a working sbx CLI). docker-agent shells out to these tools, it does not start raw docker run containers.

@@ -73,7 +73,7 @@ docker agent run --sandbox agent.yaml 5. When the session ends, the sandbox VM is stopped and removed.
-
⚠️ Limitations +
Limitations
- Sandbox VMs start fresh each session (no persistence between sessions). diff --git a/docs/configuration/structured-output/index.md b/docs/configuration/structured-output/index.md index 24fc500c8..e139c67d5 100644 --- a/docs/configuration/structured-output/index.md +++ b/docs/configuration/structured-output/index.md @@ -13,7 +13,7 @@ _Force the agent to respond with JSON matching a specific schema._ Structured output constrains the agent's responses to match a predefined JSON schema. This is useful for building agents that need to produce machine-readable output for downstream processing, API responses, or integration with other systems.
-
ℹ️ When to Use
+
When to Use
  • Building API endpoints that need consistent JSON responses
  • Data extraction and transformation pipelines
  • @@ -222,6 +222,6 @@ agents: ```
    -
    ⚠️ Tool Limitations
    +
    Tool Limitations

    When using structured output, the agent typically cannot use tools since its response format is constrained to the schema. Design your agent workflow accordingly — structured output agents work best for single-turn analysis or extraction tasks.

    diff --git a/docs/configuration/tools/index.md b/docs/configuration/tools/index.md index 5b8186c2a..b0fb525ba 100644 --- a/docs/configuration/tools/index.md +++ b/docs/configuration/tools/index.md @@ -50,7 +50,7 @@ toolsets: Extend agents with external tools via the [Model Context Protocol](https://modelcontextprotocol.io/).
    -
    💡 Reusable MCP definitions +
    Reusable MCP definitions

    Repeated MCP server definitions can be hoisted into the top-level mcps: section and referenced by name with {type: mcp, ref: <name>}. See Reusable MCP Servers.

    @@ -189,7 +189,7 @@ export DOCKER_AGENT_AUTO_INSTALL=false Installed binaries are placed in `~/.cagent/tools/bin/` and cached so they are only downloaded once.
    -
    💡 Tip +
    Tip

    Auto-install supports both Go packages (via go install) and GitHub release binaries (via archive download). The aqua registry metadata determines which method is used.

    @@ -257,7 +257,7 @@ toolsets: | `call_timeout` | duration | Documented per-call timeout. Informational; the runtime currently uses the caller's context for cancellation. |
    -
    ℹ️ required and startup_timeout are not yet enforced +
    required and startup_timeout are not yet enforced

    The schema validates these fields and the supervisor stores them, but no code path acts on them yet. They are documented now so config files written today keep working when the planned eager-startup phase lands. Picking the strict profile is forward-compatible — it will start enforcing required=true automatically.

    @@ -292,7 +292,7 @@ toolsets: When a tool's output is not valid JSON, it is returned unchanged — TOON encoding is best-effort and never breaks tools that emit plain text.
    -
    ℹ️ When to use TOON +
    When to use TOON

    TOON typically yields 30-60% smaller payloads than equivalent JSON for MCP tools that return arrays of records (issue lists, search results, file listings, …). It works best when the schema is regular; one-off responses with deeply nested or heterogeneous shapes may benefit less.

    @@ -345,7 +345,7 @@ toolsets: ```
    -
    💡 Tip +
    Tip

    Filtering tools improves agent performance — fewer tools means less confusion for the model about which tool to use.

    @@ -443,7 +443,7 @@ agents: ```
    -
    ⚠️ Toolset Order Matters +
    Toolset Order Matters

    If multiple toolsets provide a tool with the same name, the first one wins. Order your toolsets intentionally.

    diff --git a/docs/css/style.css b/docs/css/style.css index 1ade13390..fac4d4287 100644 --- a/docs/css/style.css +++ b/docs/css/style.css @@ -664,46 +664,81 @@ body { color: var(--text-secondary); } -/* ===== Callouts / Admonitions ===== */ +/* ===== Callouts / Admonitions ===== + * docs.docker.com-style: rounded panel with a filled, circular icon + * badge in the upper-left and a strong title. Authors keep using the + * existing Markdown: + *
    + *
    + *

    + *
    + */ .callout { - padding: 16px 20px; - border-radius: var(--radius); + position: relative; + padding: 16px 20px 16px 56px; + border-radius: var(--radius-lg); margin-bottom: 20px; - border-left: 3px solid; - font-size: 0.875rem; + border: 1px solid var(--border); + border-left-width: 3px; + font-size: 0.9rem; background: var(--bg-card); } -.callout p { margin-bottom: 0; } +.callout p { margin-bottom: 0; color: var(--text-secondary); } +.callout p + p { margin-top: 8px; } + .callout-title { + display: block; font-weight: 700; - font-size: 0.75rem; + font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 6px; + color: var(--text); +} + +.callout::before { + content: ''; + position: absolute; + top: 16px; + left: 16px; + width: 28px; + height: 28px; + border-radius: 50%; + background-color: currentColor; + background-position: center; + background-repeat: no-repeat; + background-size: 16px 16px; + flex-shrink: 0; } .callout-info { border-color: var(--info); color: var(--info); } -.callout-info p { color: var(--text-secondary); } +.callout-info::before { + background-image: url("data:image/svg+xml;utf8,"); +} .callout-tip { border-color: var(--success); color: var(--success); } -.callout-tip p { color: var(--text-secondary); } +.callout-tip::before { + background-image: url("data:image/svg+xml;utf8,"); +} .callout-warning { border-color: var(--warning); color: var(--warning); } -.callout-warning p { color: var(--text-secondary); } +.callout-warning::before { + background-image: url("data:image/svg+xml;utf8,"); +} [data-theme="light"] .callout-info { background: #EFF6FF; border-color: var(--accent); - color: #1E40AF; + color: var(--blue-700); } [data-theme="light"] .callout-info p { color: #1E40AF; } [data-theme="light"] .callout-tip { diff --git a/docs/features/a2a/index.md b/docs/features/a2a/index.md index 84127cb78..80432a1ad 100644 --- a/docs/features/a2a/index.md +++ b/docs/features/a2a/index.md @@ -13,7 +13,7 @@ _Expose docker-agent agents via Google's Agent-to-Agent (A2A) protocol for inter The `docker agent serve a2a` command starts an A2A server that exposes your agents using the [A2A protocol](https://a2a-protocol.org/latest/). This enables communication between Docker Agent and other agent frameworks that support A2A.
    -
    ⚠️ Early support +
    Early support

    A2A support is functional but still evolving. Tool calls, artifacts, and memory features have limited A2A integration. See limitations below.

    @@ -57,7 +57,7 @@ $ docker agent serve a2a agentcatalog/pirate - **Multiple sources** — Load agents from files or the agent catalog
    -
    💡 See also +
    See also

    For exposing agents via MCP instead, see MCP Mode. For stdio-based integration, see ACP. For the HTTP API, see API Server.

    diff --git a/docs/features/acp/index.md b/docs/features/acp/index.md index 79a2c5507..fd80e5aa4 100644 --- a/docs/features/acp/index.md +++ b/docs/features/acp/index.md @@ -15,7 +15,7 @@ The `docker agent serve acp` command starts an ACP server that communicates over ACP is built on the [ACP Go SDK](https://github.com/coder/acp-go-sdk) and provides a standardized way for client applications to interact with AI agents.
    -
    ℹ️ ACP vs A2A vs MCP +
    ACP vs A2A vs MCP
    **ACP** connects an agent to a *host application* (IDE, CLI tool) via stdio. **A2A** connects *agents to other agents* over HTTP. **MCP** exposes agents as *tools* for other MCP clients. Choose based on your integration target. @@ -106,14 +106,14 @@ child.stdout.on("data", (data) => { ```
    -
    💡 When to use ACP +
    When to use ACP

    Use ACP when building **IDE integrations**, **editor plugins**, or any tool that wants to embed a docker-agent agent as a subprocess. For HTTP-based integrations, use the API Server instead.

    -
    ℹ️ See also +
    See also

    For HTTP-based agent access, see the API Server. For agent-to-agent communication, see A2A Protocol. For exposing agents as MCP tools, see MCP Mode.

    diff --git a/docs/features/api-server/index.md b/docs/features/api-server/index.md index aead43afb..79e3f03b0 100644 --- a/docs/features/api-server/index.md +++ b/docs/features/api-server/index.md @@ -163,7 +163,7 @@ docker agent serve api | [flags] | `--record` | (none) | Record AI API interactions to cassette file |
    -
    💡 Multi-agent configs +
    Multi-agent configs

    You can point docker agent serve api at a directory containing multiple agent YAML files. Each becomes a separate agent accessible via /api/agents. Combine with --pull-interval to auto-refresh agents from an OCI registry.

    @@ -188,7 +188,7 @@ By default, tool calls require approval. In the API workflow: Toggle auto-approve with `POST /api/sessions/:id/tools/toggle` for automated workflows.
    -
    ℹ️ See also +
    See also

    For interactive use, see the Terminal UI. For agent-to-agent communication, see A2A Protocol and ACP. For MCP integration, see MCP Mode. For an OpenAI-compatible chat-completions API, see the Chat Server.

    diff --git a/docs/features/chat-server/index.md b/docs/features/chat-server/index.md index 6cb1fa06d..86dbfd443 100644 --- a/docs/features/chat-server/index.md +++ b/docs/features/chat-server/index.md @@ -36,7 +36,7 @@ $ docker agent serve chat agent.yaml --api-key-env CHAT_BEARER_TOKEN ```
    -
    💡 When to use chat server vs. API server +
    When to use chat server vs. API server

    Use the chat server when you want to plug docker-agent into existing OpenAI-compatible tooling (chat UIs, IDE integrations, OpenAI SDK clients). Use the API server when you want full control over sessions, agent execution, tool-call confirmations, and streamed runtime events.

    @@ -162,7 +162,7 @@ request to `/v1/*`. Both `/v1/models` and `/v1/chat/completions` are protected once a key is set.
    -
    ⚠️ Public exposure +
    Public exposure

    The default listen address is 127.0.0.1:8083. If you bind to a non-loopback address, always set --api-key or --api-key-env — there is no other authentication layer.

    @@ -223,7 +223,7 @@ in: 3. Each agent in your config appears as a selectable model.
    -
    ℹ️ See also +
    See also

    For the docker-agent–native HTTP API (sessions, tool-call confirmation, runtime events), see the API Server. For full CLI flag documentation, see the CLI Reference.

    diff --git a/docs/features/cli/index.md b/docs/features/cli/index.md index d8b451114..30cdb0a30 100644 --- a/docs/features/cli/index.md +++ b/docs/features/cli/index.md @@ -9,7 +9,7 @@ permalink: /features/cli/ _Complete reference for all docker-agent command-line commands and flags._
    -
    💡 No config needed +
    No config needed

    Running docker agent run without a config file uses a built-in default agent. Perfect for quick experimentation.

    @@ -373,14 +373,14 @@ Run an alias with: docker agent run ```
    -
    💡 Override alias options +
    Override alias options

    Command-line flags override alias options. For example, docker agent run yolo-coder --yolo=false disables yolo mode even though the alias has it enabled.

    -
    💡 Set a default agent +
    Set a default agent

    Create a default alias to customize what docker agent starts with no arguments:

    $ docker agent alias add default /my/default/agent.yaml
    @@ -432,7 +432,7 @@ Commands that accept a config support multiple reference types: | Default | (no argument) — uses built-in default agent |
    -
    ℹ️ Debugging +
    Debugging

    Having issues? See Troubleshooting for debug mode, log analysis, and common solutions.

    diff --git a/docs/features/evaluation/index.md b/docs/features/evaluation/index.md index 0632562b5..0a9155fe6 100644 --- a/docs/features/evaluation/index.md +++ b/docs/features/evaluation/index.md @@ -13,7 +13,7 @@ _Measure agent quality with automated evaluations — tool call accuracy, respon The `docker agent eval` command runs your agent against a set of recorded sessions and scores the results. Each eval session captures a user question, the expected tool calls, and criteria the response must satisfy. docker-agent replays the question, compares the agent's behavior to expectations, and produces a report.
    -
    ℹ️ Docker required +
    Docker required

    Evaluations run inside Docker containers for isolation. Each eval gets a clean environment with optional setup scripts. Docker Desktop (or Docker Engine) must be running.

    @@ -147,7 +147,7 @@ The easiest way to create eval sessions is from real conversations: 4. Edit the generated JSON to add `evals` criteria (relevance, size, etc.)
    -
    💡 Tip +
    Tip

    Start with tool call scoring (automatic from recorded sessions), then add relevance criteria for the responses you care most about.

    @@ -181,7 +181,7 @@ After a run completes, docker-agent produces: - **Log file** — Debug-level log of the entire evaluation run
    -
    💡 Debugging Failed Evals +
    Debugging Failed Evals

    Use --keep-containers to preserve containers after evaluation. You can then inspect them with docker exec to understand why an eval failed. The session database (.db file) contains the full conversation history for each eval.

    @@ -231,7 +231,7 @@ $ docker agent eval agent.yaml ./evals ```
    -
    ℹ️ See also +
    See also

    Use /eval in the TUI to create eval sessions from conversations. See the CLI Reference for all docker agent eval flags. Example eval configs are in examples/eval on GitHub.

    diff --git a/docs/features/mcp-mode/index.md b/docs/features/mcp-mode/index.md index 5b62742cf..e3f1dabd6 100644 --- a/docs/features/mcp-mode/index.md +++ b/docs/features/mcp-mode/index.md @@ -18,7 +18,7 @@ The `docker agent serve mcp` command makes your agents available to any applicat - Integrate domain-specific agents into existing workflows
    -
    ℹ️ What is MCP? +
    What is MCP?

    The Model Context Protocol is an open standard for connecting AI tools. See also Remote MCP Servers for connecting to cloud services.

    diff --git a/docs/features/rag/index.md b/docs/features/rag/index.md index becf82fa3..8c37a3ee1 100644 --- a/docs/features/rag/index.md +++ b/docs/features/rag/index.md @@ -80,7 +80,7 @@ strategies: ```
    -
    ℹ️ Trade-offs +
    Trade-offs

    Semantic embeddings provide higher quality retrieval but slower indexing (LLM call per chunk) and additional API costs.

    @@ -167,7 +167,7 @@ chunking: ```
    -
    ℹ️ Language Support +
    Language Support

    Currently supports Go (.go) files. More languages will be added. Falls back to plain text chunking for unsupported file types.

    @@ -184,7 +184,7 @@ $ docker agent run config.yaml --debug --log-file debug.log Look for log tags: `[RAG Manager]`, `[Chunked-Embeddings Strategy]`, `[BM25 Strategy]`, `[RRF Fusion]`, `[Reranker]`.
    -
    💡 Examples +
    Examples

    See the RAG examples in the GitHub repo for complete, runnable configurations.

    diff --git a/docs/features/remote-mcp/index.md b/docs/features/remote-mcp/index.md index 9177c4a21..5c547ee5d 100644 --- a/docs/features/remote-mcp/index.md +++ b/docs/features/remote-mcp/index.md @@ -21,7 +21,7 @@ toolsets: ```
    -
    💡 OAuth flow +
    OAuth flow

    When you connect to a remote MCP server that requires OAuth, docker-agent opens your browser automatically for authentication. Tokens are cached for subsequent sessions.

    @@ -210,7 +210,7 @@ agents: ```
    -
    ℹ️ Growing list +
    Growing list

    This list is updated as more services add MCP support. If a service you use isn't listed, check their documentation — many providers are adding MCP endpoints regularly.

    diff --git a/docs/features/skills/index.md b/docs/features/skills/index.md index 362e305de..abec9ff2f 100644 --- a/docs/features/skills/index.md +++ b/docs/features/skills/index.md @@ -28,7 +28,7 @@ agents: ```
    -
    💡 Tip +
    Tip

    Skills are perfect for encoding team-specific workflows (PR review, deployment, coding standards) that apply across projects.

    @@ -133,7 +133,7 @@ When the agent encounters a task that matches a `context: fork` skill, it uses t - **Inherits the parent's model and tools** — the sub-agent can use all tools available to the parent agent
    -
    💡 When to use context: fork +
    When to use context: fork

    Use context: fork for skills that involve many steps, heavy tool usage, or that should not clutter the main conversation — for example dependency bumping, large refactors, or code generation pipelines.

    @@ -248,7 +248,7 @@ EOF The skill will automatically be available to any agent with skills enabled (`skills: true`, or a list that targets its name — see [Filtering Skills](#filtering-skills)).
    -
    ℹ️ See also +
    See also

    Skills are enabled in the Agent Config with the skills property (boolean or list). For tool-based capabilities, see Tools.

    diff --git a/docs/features/tui/index.md b/docs/features/tui/index.md index ad6a6b36f..51d61a63e 100644 --- a/docs/features/tui/index.md +++ b/docs/features/tui/index.md @@ -101,7 +101,7 @@ Change the AI model during a session with `/model` or Ctrl+M -
    💡 Tip +
    Tip

    Use model switching to try a more capable model for complex tasks, or a cheaper one for simple queries — without modifying your YAML config.

    @@ -139,7 +139,7 @@ Customize session titles to make them more meaningful and easier to find. By def 3. Press Enter to save, or Escape to cancel
    -
    ℹ️ Note +
    Note

    Manually set titles are preserved and won’t be overwritten by auto-generation. Title changes are persisted immediately to the session.

    @@ -241,14 +241,14 @@ settings: **At runtime:** Use the `/theme` command to open the theme picker and select from available themes. Your selection is saved globally in `~/.config/cagent/config.yaml` under `settings.theme` and persists across sessions.
    -
    💡 Hot Reload +
    Hot Reload

    Custom themes auto-reload when you save changes to the file — no restart needed. This makes it easy to tweak colors in real-time.

    -
    ⚠️ Partial overrides +
    Partial overrides

    All user themes are applied on top of the default theme. If you want to customize a built-in theme (e.g., dracula), copy its full YAML from the built-in themes on GitHub into ~/.cagent/themes/ and edit the copy. Otherwise, omitted values will use default colors, not the original theme's colors.

    @@ -265,7 +265,7 @@ When an agent calls a tool, docker-agent shows a confirmation dialog by default. **Granular permissions:** The permission system supports pattern-based matching. When you “Always allow” a specific tool command, only that exact pattern is auto-approved — other commands from the same tool still require confirmation. This lets you auto-approve safe, read-only operations while maintaining control over destructive ones.
    -
    💡 YOLO mode +
    YOLO mode

    Use --yolo or the /yolo command to auto-approve all tool calls. You can also toggle this mid-session. For aliases, set --yolo when creating the alias: docker agent alias add fast agentcatalog/coder --yolo.

    diff --git a/docs/getting-started/installation/index.md b/docs/getting-started/installation/index.md index 3258cb8f0..39f82ac05 100644 --- a/docs/getting-started/installation/index.md +++ b/docs/getting-started/installation/index.md @@ -22,7 +22,7 @@ $ docker agent version ```
    -
    💡 Tip +
    Tip

    Docker Desktop bundles docker-agent and keeps it up to date. This is the easiest way to get started, especially if you want to use Docker MCP tools and Docker Model Runner.

    @@ -90,7 +90,7 @@ task build ```
    -
    💡 Building on Windows +
    Building on Windows

    On Windows, use task build-local instead of task build. This builds the binary inside a Docker container using Docker Buildx, which avoids issues with Windows-specific toolchain setup and CGo cross-compilation. The output goes to the ./dist directory.

    @@ -111,7 +111,7 @@ export MISTRAL_API_KEY="..." # Mistral See [Configuration Overview]({{ '/configuration/overview/#environment-variables' | relative_url }}) for the full list of supported providers and environment variables.
    -
    ℹ️ Note +
    Note

    You only need the key(s) for the provider(s) you configure in your agent YAML. If you use Docker Model Runner (DMR), no API key is needed — models run locally.

    diff --git a/docs/getting-started/introduction/index.md b/docs/getting-started/introduction/index.md index b36fa5075..0970b9bf0 100644 --- a/docs/getting-started/introduction/index.md +++ b/docs/getting-started/introduction/index.md @@ -89,7 +89,7 @@ $ docker agent run agent.yaml ```
    -
    💡 Tip +
    Tip

    Jump straight to the Quick Start if you want to build your first agent right away.

    diff --git a/docs/getting-started/quickstart/index.md b/docs/getting-started/quickstart/index.md index 5822f92b0..140fbfe30 100644 --- a/docs/getting-started/quickstart/index.md +++ b/docs/getting-started/quickstart/index.md @@ -83,7 +83,7 @@ $ docker agent run agent.yaml ```
    -
    💡 Prefer HCL? +
    Prefer HCL?

    You can write the same config as agent.hcl using labeled blocks and heredocs. See HCL Configuration.

    @@ -98,7 +98,7 @@ Once your agent is running, try asking it to: - _"Explain what the code in main.go does"_
    -
    💡 Tip +
    Tip

    Add --yolo to auto-approve all tool calls: `docker agent run agent.yaml --yolo`

    @@ -137,7 +137,7 @@ agents: ```
    -
    ℹ️ Docker MCP Tools +
    Docker MCP Tools

    The ref: docker:duckduckgo syntax runs the DuckDuckGo MCP server in a Docker container. This is the recommended way to use MCP tools — secure, isolated, and easy to configure. Requires Docker Desktop.

    diff --git a/docs/guides/go-sdk/index.md b/docs/guides/go-sdk/index.md index 108aad4fe..a2505d4f1 100644 --- a/docs/guides/go-sdk/index.md +++ b/docs/guides/go-sdk/index.md @@ -13,7 +13,7 @@ _Use docker-agent as a Go library to embed AI agents in your applications._ docker-agent can be used as a Go library, allowing you to build AI agents directly into your Go applications. This gives you full programmatic control over agent creation, tool integration, and execution.
    -
    ℹ️ Import Path +
    Import Path
    import "github.com/docker/docker-agent/pkg/..."
    diff --git a/docs/guides/secrets/index.md b/docs/guides/secrets/index.md index ff54a41e8..fb10a5fef 100644 --- a/docs/guides/secrets/index.md +++ b/docs/guides/secrets/index.md @@ -79,7 +79,7 @@ The file format supports: - Blank lines are ignored
    -
    ⚠️ Important
    +
    Important

    Add .env to your .gitignore to avoid committing secrets to version control.

    diff --git a/docs/index.md b/docs/index.md index 99cbad769..e233f8dfa 100644 --- a/docs/index.md +++ b/docs/index.md @@ -158,7 +158,7 @@ $ docker agent serve api agent.yaml --listen :8080 ```
    -
    💡 Prefer HCL? +
    Prefer HCL?

    You can also write agent configs in HCL using labeled blocks and heredocs. See HCL Configuration.

    diff --git a/docs/providers/anthropic/index.md b/docs/providers/anthropic/index.md index cc0a90b36..75a8ba19a 100644 --- a/docs/providers/anthropic/index.md +++ b/docs/providers/anthropic/index.md @@ -189,7 +189,7 @@ Valid values: Note: `thinking_display` applies to both `thinking_budget` with token counts and adaptive/effort-based budgets. Full thinking tokens are billed regardless of the `thinking_display` value.
    -
    ℹ️ Note +
    Note

    Anthropic thinking budget values below 1024 or greater than or equal to max_tokens are ignored (a warning is logged).

    diff --git a/docs/providers/bedrock/index.md b/docs/providers/bedrock/index.md index a2703b469..9a0beba81 100644 --- a/docs/providers/bedrock/index.md +++ b/docs/providers/bedrock/index.md @@ -95,7 +95,7 @@ Use inference profile prefixes for optimal routing: | `apac.` | Asia Pacific regions only |
    -
    💡 Inference profiles +
    Inference profiles

    Use global. prefix on model IDs for automatic cross-region routing. Use eu. prefix for GDPR compliance.

    diff --git a/docs/providers/custom/index.md b/docs/providers/custom/index.md index f4bf9382e..cefb1375d 100644 --- a/docs/providers/custom/index.md +++ b/docs/providers/custom/index.md @@ -18,7 +18,7 @@ The `providers` section in your agent YAML lets you define named provider config - **Any provider type** — Works with OpenAI, Anthropic, Google, Bedrock, and any OpenAI-compatible API
    -
    ℹ️ Works with any provider +
    Works with any provider

    The providers section supports all provider types: openai, anthropic, google, amazon-bedrock, dmr, and any built-in alias. When the provider field is not set, it defaults to openai for backward compatibility.

    diff --git a/docs/providers/dmr/index.md b/docs/providers/dmr/index.md index 52d230b67..3a4a82414 100644 --- a/docs/providers/dmr/index.md +++ b/docs/providers/dmr/index.md @@ -13,7 +13,7 @@ _Run AI models locally with Docker — no API keys, no costs, full data privacy. Docker Model Runner (DMR) lets you run open-source AI models directly on your machine. Models run in Docker, so there's no API key needed and no data leaves your computer.
    -
    💡 No API key needed +
    No API key needed

    DMR runs models locally — your data never leaves your machine. Great for development, sensitive data, or offline use.

    @@ -188,7 +188,7 @@ models: Unload errors are logged and swallowed — a stuck or unreachable engine never blocks an agent transfer (each call is bounded to 10 s). Pair this with [`keep_alive`](#keeping-models-resident-in-memory-keep_alive) only when you want the model to *also* survive idle periods within a single agent's run; the hook controls **between-agent** unloads independently.
    -
    ⚠️ Single-tenant assumption
    +
    Single-tenant assumption
    The `_unload` endpoint is engine-level: it evicts the model from DMR's memory regardless of who is using it. If two concurrent sessions on the same runtime (e.g. an API server serving multiple users) hit the same agent, switching away in session A will yank the model out from under session B's in-flight request, which then has to wait for a reload. Wire `unload` only when the agents using these models are not run concurrently — typically a single TUI/CLI session.
    diff --git a/docs/providers/google/index.md b/docs/providers/google/index.md index 93eabde6c..9d43477cd 100644 --- a/docs/providers/google/index.md +++ b/docs/providers/google/index.md @@ -65,7 +65,7 @@ models: Gemini supports two approaches depending on the model version:
    -
    ⚠️ Different thinking formats +
    Different thinking formats

    Gemini 2.5 uses **token-based** budgets (integers). Gemini 3 uses **level-based** budgets (strings like low, high). Make sure you use the right format for your model version.

    @@ -171,7 +171,7 @@ models: | `publisher` | Model publisher (e.g. `anthropic`, `meta`, `mistral`). Must not be `google` |
    -
    ℹ️ Gemini models on Vertex AI +
    Gemini models on Vertex AI

    Setting publisher: google (or omitting publisher) uses the native Gemini SDK path. The Model Garden endpoint is only used for non-Google publishers.

    diff --git a/docs/providers/local/index.md b/docs/providers/local/index.md index 01198c949..4bdebf900 100644 --- a/docs/providers/local/index.md +++ b/docs/providers/local/index.md @@ -17,7 +17,7 @@ docker-agent can connect to any OpenAI-compatible local model server. This guide - **LocalAI** — OpenAI-compatible API for various backends
    -
    💡 Docker Model Runner +
    Docker Model Runner

    For the easiest local model experience, consider Docker Model Runner which is built into Docker Desktop and requires no additional setup.

    @@ -170,7 +170,7 @@ agents: ## Performance Tips
    -
    ℹ️ Local Model Considerations +
    Local Model Considerations
    - **Memory:** Larger models need more RAM/VRAM. A 7B model typically needs 8-16GB RAM. diff --git a/docs/providers/openai/index.md b/docs/providers/openai/index.md index 965893e1a..4c69a85b2 100644 --- a/docs/providers/openai/index.md +++ b/docs/providers/openai/index.md @@ -60,7 +60,7 @@ models: ```
    -
    💡 Custom endpoints +
    Custom endpoints

    Use base_url for proxies and OpenAI-compatible services. See Custom Providers for full setup.

    diff --git a/docs/providers/overview/index.md b/docs/providers/overview/index.md index bac90bf55..e8073f2c8 100644 --- a/docs/providers/overview/index.md +++ b/docs/providers/overview/index.md @@ -76,7 +76,7 @@ agents: ```
    -
    💡 Multi-provider teams +
    Multi-provider teams

    Use expensive models for complex reasoning and cheaper/local models for routine tasks. See the example below.

    diff --git a/docs/tools/a2a/index.md b/docs/tools/a2a/index.md index 24b26b55e..fd88eabcf 100644 --- a/docs/tools/a2a/index.md +++ b/docs/tools/a2a/index.md @@ -35,7 +35,7 @@ toolsets: | `headers` | map\[string\]string | ✗ | Extra HTTP headers sent with every request (useful for `Authorization`, tenant selection, tracing, \u2026). |
    -
    💡 See also +
    See also

    For full details on the A2A protocol and serving agents as A2A endpoints, see A2A Protocol.

    diff --git a/docs/tools/api/index.md b/docs/tools/api/index.md index cf8cd6ac6..dd872e23c 100644 --- a/docs/tools/api/index.md +++ b/docs/tools/api/index.md @@ -13,7 +13,7 @@ _Create custom tools that call HTTP APIs._ The API tool type lets you define custom tools that make HTTP requests to external APIs. This is useful for integrating agents with REST APIs, webhooks, or any HTTP-based service without writing code.
    -
    ℹ️ When to Use +
    When to Use
    - Integrating with REST APIs that don't have an MCP server @@ -214,13 +214,13 @@ agents: - No support for file uploads or multipart forms
    -
    💡 For Complex APIs +
    For Complex APIs

    For APIs that need authentication flows, pagination, or complex request/response handling, consider using an MCP server instead. The API tool is best for simple, stateless HTTP operations.

    -
    ⚠️ Security +
    Security

    API keys and tokens in headers are visible in debug logs. Use environment variables (${env.VAR}) rather than hardcoding secrets in configuration files.

    diff --git a/docs/tools/background-agents/index.md b/docs/tools/background-agents/index.md index 921158992..8fd607452 100644 --- a/docs/tools/background-agents/index.md +++ b/docs/tools/background-agents/index.md @@ -71,7 +71,7 @@ agents: ```
    -
    💡 When to Use +
    When to Use

    Use background_agents when your orchestrator needs to fan out work to multiple specialists in parallel — for example, researching several topics simultaneously or running independent code analyses side by side.

    diff --git a/docs/tools/fetch/index.md b/docs/tools/fetch/index.md index cc8554c9e..94cb934da 100644 --- a/docs/tools/fetch/index.md +++ b/docs/tools/fetch/index.md @@ -13,7 +13,7 @@ _Read content from HTTP/HTTPS URLs._ The fetch tool lets agents retrieve content from one or more HTTP/HTTPS URLs. It is **read-only** — only `GET` requests are supported. The tool respects `robots.txt`, limits response size (1 MB per URL), and can return content as plain text, Markdown (converted from HTML), or raw HTML.
    -
    ℹ️ GET only +
    GET only

    The fetch tool does not support POST, PUT, DELETE or other methods, and does not expose request bodies or custom headers. To call REST endpoints with other verbs, use the API tool or an OpenAPI toolset.

    @@ -50,7 +50,7 @@ The lists are mutually exclusive: a single fetch toolset may set either `allowed When a list is configured, every redirect target is re-checked against the same list. A request to an allowed origin that redirects to a forbidden host is rejected before any data is read from the redirect.
    -
    ⚠️ Limitations +
    Limitations

    Matching is purely string-based on the URL host. It does not perform DNS resolution and does not normalise alternative IP encodings (decimal 2852039166, hex 0xa9.0xfe.0xa9.0xfe, octal, etc. IPv4-mapped IPv6 addresses ARE normalized to their IPv4 form). If you need to deny access to a specific IP, also list its alternative encodings, or block at the network layer.

    @@ -100,7 +100,7 @@ The toolset exposes a single tool, `fetch`, with the following parameters: Responses are capped at **1 MB** per URL. Hosts that disallow the agent's user-agent via `robots.txt` are skipped with a clear error.
    -
    💡 Fetch vs. API Tool +
    Fetch vs. API Tool

    Use fetch when the agent needs to read arbitrary public URLs at runtime. Use the API tool to expose specific, structured HTTP endpoints (including non-GET verbs) as named tools.

    diff --git a/docs/tools/filesystem/index.md b/docs/tools/filesystem/index.md index e02461483..e5fc15c9e 100644 --- a/docs/tools/filesystem/index.md +++ b/docs/tools/filesystem/index.md @@ -98,7 +98,7 @@ toolsets: ```
    -
    💡 Tip +
    Tip

    The filesystem tool resolves paths relative to the working directory. Agents can also use absolute paths.

    diff --git a/docs/tools/handoff/index.md b/docs/tools/handoff/index.md index 4bf4ecb28..148de6abf 100644 --- a/docs/tools/handoff/index.md +++ b/docs/tools/handoff/index.md @@ -15,7 +15,7 @@ The `handoff` tool lets an agent transfer control of the **current conversation* This is the core mechanism for **handoffs routing** — a pattern where a router agent classifies the user's request and hands it off to a specialist, which then owns the rest of the session.
    -
    ℹ️ Local only +
    Local only

    The handoff tool only targets agents declared in the same config file by their local name. It does not open network connections. To delegate to a remote agent over the network, use the A2A toolset instead.

    @@ -59,7 +59,7 @@ The `handoff` tool takes a single parameter: Only names listed in the current agent's `handoffs:` field are valid targets.
    -
    💡 See also +
    See also

    For sub-task delegation (caller stays in control, waits for the result), see Transfer Task. For remote agent connections over the network, see the A2A toolset. For the broader pattern, see Handoffs Routing.

    diff --git a/docs/tools/lsp/index.md b/docs/tools/lsp/index.md index 61882e18e..147ff2a80 100644 --- a/docs/tools/lsp/index.md +++ b/docs/tools/lsp/index.md @@ -13,7 +13,7 @@ _Connect to Language Server Protocol servers for code intelligence._ The LSP tool connects your agent to any Language Server Protocol (LSP) server, providing comprehensive code intelligence capabilities like go-to-definition, find references, diagnostics, and more.
    -
    ℹ️ What is LSP? +
    What is LSP?

    The Language Server Protocol is a standard for providing language features like autocomplete, go-to-definition, and diagnostics. Most programming languages have LSP servers available.

    @@ -165,7 +165,7 @@ The LSP tool includes built-in instructions that guide the agent on how to use i 5. Apply `lsp_format` after edits are complete
    -
    💡 Best Practice +
    Best Practice

    Always include the filesystem tool alongside LSP. The agent needs filesystem access to read and write code files, while LSP provides intelligence about the code.

    @@ -223,7 +223,7 @@ All LSP tools use **1-based** line and character positions: ```
    -
    💡 Auto-Installation +
    Auto-Installation

    docker-agent can automatically download and install LSP servers if they are not found in your PATH. Use the version property to specify a package, or let docker-agent auto-detect it from the command name. See Auto-Installing Tools for details.

    diff --git a/docs/tools/memory/index.md b/docs/tools/memory/index.md index 4f64447bb..df5933aca 100644 --- a/docs/tools/memory/index.md +++ b/docs/tools/memory/index.md @@ -55,7 +55,7 @@ Memories support an optional `category` field for organization and filtering. Co - `decision` — Past decisions and their rationale
    -
    💡 Tip +
    Tip

    Memory is especially useful for long-running assistants that need to recall information across conversations — like coding preferences, project conventions, or context discovered during previous sessions.

    diff --git a/docs/tools/model-picker/index.md b/docs/tools/model-picker/index.md index f71c2ec23..0d7278470 100644 --- a/docs/tools/model-picker/index.md +++ b/docs/tools/model-picker/index.md @@ -51,7 +51,7 @@ agents: ```
    -
    💡 Cost optimization +
    Cost optimization

    The model picker tool is particularly useful for cost optimization: let the agent use a cheap model by default and only escalate to expensive models when necessary.

    diff --git a/docs/tools/script/index.md b/docs/tools/script/index.md index 34b8f04a7..07a77a731 100644 --- a/docs/tools/script/index.md +++ b/docs/tools/script/index.md @@ -58,7 +58,7 @@ toolsets: | `shell..working_dir` | string | Working directory for script execution |
    -
    💡 Script vs. Shell +
    Script vs. Shell

    Use the shell tool when the agent needs to run arbitrary commands. Use the script tool when you want to expose specific, predefined operations with clear names and typed parameters — giving the agent less freedom but more safety.

    diff --git a/docs/tools/shell/index.md b/docs/tools/shell/index.md index 43fe88fb8..fdda93755 100644 --- a/docs/tools/shell/index.md +++ b/docs/tools/shell/index.md @@ -69,13 +69,13 @@ Background job output is captured up to 10 MB per job. All background jobs are a `view_background_job` and `stop_background_job` each take a single required `job_id` string returned by `run_background_job` or `list_background_jobs`.
    -
    ⚠️ Safety +
    Safety

    The shell tool gives agents full access to the system shell. Always set max_iterations on agents that use the shell tool to prevent infinite loops. A value of 20–50 is typical for development agents. Use Sandbox Mode for additional isolation.

    -
    ℹ️ Tool Confirmation +
    Tool Confirmation

    By default, docker-agent asks for user confirmation before executing shell commands. Use --yolo to auto-approve all tool calls.

    diff --git a/docs/tools/tasks/index.md b/docs/tools/tasks/index.md index 49989ae2f..6403c6728 100644 --- a/docs/tools/tasks/index.md +++ b/docs/tools/tasks/index.md @@ -53,7 +53,7 @@ agents: ```
    -
    💡 Tasks vs. Todo +
    Tasks vs. Todo

    Use the tasks tool when you need persistence across sessions, priorities, or dependencies (e.g., long-running projects, recurring work). Use the todo tool for ephemeral, session-scoped task lists.

    diff --git a/docs/tools/think/index.md b/docs/tools/think/index.md index 623080d73..b616c7280 100644 --- a/docs/tools/think/index.md +++ b/docs/tools/think/index.md @@ -24,7 +24,7 @@ toolsets: No configuration options.
    -
    💡 When to use +
    When to use

    Use the think tool with models that don't have native reasoning capabilities. If your model already supports a thinking budget, you likely don't need this tool.

    diff --git a/docs/tools/transfer-task/index.md b/docs/tools/transfer-task/index.md index 806d09cdd..96e99b9b7 100644 --- a/docs/tools/transfer-task/index.md +++ b/docs/tools/transfer-task/index.md @@ -58,7 +58,7 @@ The `transfer_task` tool takes three parameters: The call blocks until the sub-agent returns its result, which becomes the tool's response. For non-blocking parallel delegation, use [`background_agents`]({{ '/tools/background-agents/' | relative_url }}) instead.
    -
    💡 See also +
    See also

    For parallel task delegation, see Background Agents. For multi-agent patterns, see Multi-Agent.

    diff --git a/docs/tools/user-prompt/index.md b/docs/tools/user-prompt/index.md index 6bbb6b1f9..c56eca9ec 100644 --- a/docs/tools/user-prompt/index.md +++ b/docs/tools/user-prompt/index.md @@ -13,7 +13,7 @@ _Ask the user questions and collect interactive input during agent execution._ The user prompt tool allows agents to ask questions and collect input from users during execution. This enables interactive workflows where the agent needs clarification, confirmation, or additional information before proceeding.
    -
    ℹ️ When to Use +
    When to Use
    - When the agent needs clarification before proceeding @@ -170,7 +170,7 @@ How the prompt appears depends on the interface: - **API/MCP**: Returns an elicitation request to the client
    -
    💡 Best Practice +
    Best Practice

    Provide clear, concise messages. Include context about why you're asking and what the information will be used for. Use schemas with descriptions to guide users on expected input format.

    @@ -184,7 +184,7 @@ The agent should handle all possible actions: - **cancel**: Stop the current operation gracefully
    -
    ⚠️ Context Requirement +
    Context Requirement

    The user prompt tool requires an elicitation handler to be configured. It works in the TUI and CLI modes but may not be available in all contexts (e.g., some MCP client configurations).

    From be5cbf997f4ee12e67b850b427526727a51828f5 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Wed, 13 May 2026 15:51:51 +0200 Subject: [PATCH 05/24] docs(site): tighten and meta description for SEO The homepage now reads \"Docker Agent \u2014 Run AI agents from YAML, like containers\" instead of the generic \"Docker Agent \u2013 Documentation\", and the site description is shortened to fit Google's ~155-char snippet budget. Also surface a sharper tagline (\"Run AI agents like containers.\") in _config.yml and add og:site_name plus Twitter card metadata for nicer link previews. --- docs/_config.yml | 3 ++- docs/_layouts/default.html | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index 469a46fe5..84dd96665 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,5 +1,6 @@ title: Docker Agent -description: Build, run, and share powerful AI agents with a declarative YAML config, rich tool ecosystem, and multi-agent orchestration — by Docker. +tagline: Run AI agents like containers. +description: Run AI agents from a YAML file. Define them once, share them through any OCI registry, and run them anywhere — by Docker. url: "https://docker.github.io" baseurl: "/docker-agent" diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index cb8672525..eb6a899dd 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -3,13 +3,16 @@ <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>{% if page.title %}{{ page.title }} – Docker Agent Docs{% else %}Docker Agent – Documentation{% endif %} + {% if page.title and page.url != '/' %}{{ page.title }} – Docker Agent Docs{% else %}Docker Agent — Run AI agents from YAML, like containers{% endif %} - + + + + From 7e3b96f498be1428d8c789967a8421dbf578f147 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Wed, 13 May 2026 15:53:03 +0200 Subject: [PATCH 06/24] docs(site): ship Moby mark as a real asset, not an inline path The previous header SVG and favicon used a viewBox of 0 0 50 36 even though the path extended down to y=39, clipping part of the whale's body. Move the mark into /assets/docker-mark.svg with a corrected 0 0 50 40 viewBox, reference it from both and the header logo, and add an /assets/docker-wordmark.svg variant for the upcoming Docker top bar. --- docs/_includes/header.html | 5 +---- docs/_layouts/default.html | 3 +-- docs/assets/docker-mark.svg | 9 +++++++++ docs/assets/docker-wordmark.svg | 8 ++++++++ docs/css/style.css | 5 +++-- 5 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 docs/assets/docker-mark.svg create mode 100644 docs/assets/docker-wordmark.svg diff --git a/docs/_includes/header.html b/docs/_includes/header.html index 210417cc5..67c4dfbba 100644 --- a/docs/_includes/header.html +++ b/docs/_includes/header.html @@ -2,10 +2,7 @@