Overview
Add a first-run onboarding experience that teaches the basics of docker agent
by doing, not by reading: a short, skippable, interactive tour inside the TUI,
plus a way to replay it later (docker agent tour and a /tour slash command).
Motivation
The current first-run experience gives no guidance. A new user who runs
docker agent gets a telemetry banner, then lands in a chat UI without knowing:
- that a provider API key (or Docker Model Runner) is required, and how to set one
- that slash commands and a command palette (
Ctrl+k) exist
- what an
agent.yaml is, and that docker agent new can generate one
- how tool-call approval works (approve / reject / yolo)
- where to find help (
Ctrl+h only lists key bindings, there is no /help)
The quickstart docs cover all of this, but outside the terminal. Users who do
not read docs never discover these features.
Current state
| Piece |
Exists today |
Gap |
| First-run hook |
.cagent_first_run marker in cmd/root/root.go |
Only prints a static telemetry/feedback banner |
| Key bindings help |
Ctrl+h / F1 dialog |
Key list only, no concepts, not discoverable |
| Command palette |
Ctrl+k |
Not discoverable if you do not know it exists |
| Guided config creation |
docker agent new |
Covers config authoring only, not the TUI or concepts |
| Docs quickstart |
docker.github.io/docker-agent |
Outside the terminal |
Use cases
- First-time user installs Docker Desktop, types
docker agent, has no API key set: gets guided to a working setup instead of an error.
- New user wants to learn the basics without leaving the terminal: takes the 2-minute tour on first launch.
- Returning user forgot the shortcuts and concepts: runs
docker agent tour (or /tour in the TUI) to replay it.
Proposed solution
Flow
docker agent run (first run, interactive TTY only)
|
+- no provider configured
| -> setup step: detect env keys / DMR, show per-provider
| instructions, re-check, then continue
|
+- provider available
-> prompt: "First time here. Take the 2-minute tour? [Y/n/never]"
|
+- Y -> scripted tour in the TUI
+- n -> normal chat + one-line hint on how to replay
+- never -> normal chat, never asked again
Tour content (scripted, learn-by-doing)
Short steps rendered by the TUI itself (deterministic, no tokens consumed).
Each step waits for the user to actually perform the action, Esc skips at
any point.
| Step |
Teaches |
Interaction |
| 1 |
Send a message |
Type anything and press Enter, see the streamed reply |
| 2 |
Tool calls and approval |
Trigger a canned prompt that uses a tool, approve it, mention Ctrl+y (yolo) |
| 3 |
Command palette |
Press Ctrl+k, run a command from it |
| 4 |
Slash commands |
Try /model or /sessions |
| 5 |
Agents are YAML |
Show the running config, point to docker agent new and agentcatalog/* |
| 6 |
Where to get help |
Ctrl+h, /tour, docs link, feedback link |
Entry points
| Entry point |
Behavior |
First interactive docker agent run |
Offer the tour (opt-in prompt, not forced) |
docker agent tour |
Replay anytime from the CLI |
/tour slash command + palette entry |
Replay from inside the TUI |
Root --help output |
One-line pointer: "New to docker agent? Run 'docker agent tour'" |
Guardrails
- Never shown in non-interactive contexts:
--exec, piped stdin/stdout, api, mcp, a2a, acp, serve, eval, CI (no TTY).
- Skippable at every step (
Esc), resumable is not required (restart from the beginning is fine).
- "Never" choice persisted; also honor an env var (e.g.
DOCKER_AGENT_NO_TOUR=1) for scripted environments, following the existing DOCKER_AGENT_HIDE_TELEMETRY_BANNER precedent.
- State stored next to the existing first-run marker (config dir), separate from session data.
- Existing telemetry banner folds into the new first-run flow instead of stacking on top of it.
Implementation notes
- Reuse the existing dialog framework (
pkg/tui/dialog) for the step overlays; the tour is a sequence of dialogs plus event hooks on the actions being taught.
- First-run detection already exists (
isFirstRun() in cmd/root/root.go); extend rather than duplicate.
- Provider detection can reuse what the model resolution already knows (env keys, DMR availability).
- Optional: telemetry events for tour started / completed / skipped-at-step-N to measure drop-off.
Alternatives
| Option |
Pros |
Cons |
| A. Scripted TUI tour (proposed) |
Deterministic, free (no tokens), works offline for most steps |
More TUI code to maintain |
| B. Built-in "tour agent" (an agent whose instructions teach docker agent, dogfooding) |
Fun, showcases the product, conversational |
Needs a working provider, burns tokens, non-deterministic teaching |
| C. Static welcome screen / cheat sheet |
Trivial to build |
Reads as a wall of text, likely dismissed and forgotten |
| D. Progressive tips (one contextual hint per session) |
Low friction |
Slow discovery, does not solve the "day one" problem |
A and B combine well: the final scripted step can hand off to a built-in tour
agent ("ask me anything about docker agent") as an optional bonus. C works as
the fallback when no provider is configured and the user declines setup. D can
be a separate follow-up.
Open questions
- Command name:
tour vs onboarding vs learn vs getting-started (tour is short and matches /tour).
- Auto-offer on first run vs auto-start: prompt-first seems less intrusive.
- Should completing provider setup count as "first run done", or should the tour be offered again next time if it was interrupted?
- Should the tour agent (option B hand-off) ship in
pkg/config/builtin-agents like default.yaml and coder.yaml?
Additional context
Related existing pieces: cmd/root/root.go (first-run marker, welcome banner),
pkg/tui/dialog/help.go (key bindings dialog), pkg/tui/commands/commands.go
(slash commands, palette), pkg/config/builtin-agents/ (default and coder
agents), docker agent new (interactive config creator).
Overview
Add a first-run onboarding experience that teaches the basics of
docker agentby doing, not by reading: a short, skippable, interactive tour inside the TUI,
plus a way to replay it later (
docker agent tourand a/tourslash command).Motivation
The current first-run experience gives no guidance. A new user who runs
docker agentgets a telemetry banner, then lands in a chat UI without knowing:Ctrl+k) existagent.yamlis, and thatdocker agent newcan generate oneCtrl+honly lists key bindings, there is no/help)The quickstart docs cover all of this, but outside the terminal. Users who do
not read docs never discover these features.
Current state
.cagent_first_runmarker incmd/root/root.goCtrl+h/F1dialogCtrl+kdocker agent newUse cases
docker agent, has no API key set: gets guided to a working setup instead of an error.docker agent tour(or/tourin the TUI) to replay it.Proposed solution
Flow
Tour content (scripted, learn-by-doing)
Short steps rendered by the TUI itself (deterministic, no tokens consumed).
Each step waits for the user to actually perform the action,
Escskips atany point.
Ctrl+y(yolo)Ctrl+k, run a command from it/modelor/sessionsdocker agent newandagentcatalog/*Ctrl+h,/tour, docs link, feedback linkEntry points
docker agent rundocker agent tour/tourslash command + palette entry--helpoutputGuardrails
--exec, piped stdin/stdout,api,mcp,a2a,acp,serve,eval, CI (no TTY).Esc), resumable is not required (restart from the beginning is fine).DOCKER_AGENT_NO_TOUR=1) for scripted environments, following the existingDOCKER_AGENT_HIDE_TELEMETRY_BANNERprecedent.Implementation notes
pkg/tui/dialog) for the step overlays; the tour is a sequence of dialogs plus event hooks on the actions being taught.isFirstRun()incmd/root/root.go); extend rather than duplicate.Alternatives
A and B combine well: the final scripted step can hand off to a built-in tour
agent ("ask me anything about docker agent") as an optional bonus. C works as
the fallback when no provider is configured and the user declines setup. D can
be a separate follow-up.
Open questions
tourvsonboardingvslearnvsgetting-started(touris short and matches/tour).pkg/config/builtin-agentslikedefault.yamlandcoder.yaml?Additional context
Related existing pieces:
cmd/root/root.go(first-run marker, welcome banner),pkg/tui/dialog/help.go(key bindings dialog),pkg/tui/commands/commands.go(slash commands, palette),
pkg/config/builtin-agents/(default and coderagents),
docker agent new(interactive config creator).