Skip to content

CLI Overview

The Dreadnode terminal client is a full-screen Textual app that talks to the Python agent server. You start it once, it connects to a running server or auto-starts the default local one, and then all chat, sessions, and runtime metadata flow through that server connection.

The primary command is dreadnode. dn is the shortcut.

Terminal window
$ dreadnode
opens the Textual client
Terminal window
$ dn
same TUI, using the shortcut

Use dreadnode serve when you want a long-lived local runtime for another client, test harness, or separate terminal:

Terminal window
$ dreadnode serve --host 127.0.0.1 --port 8787 --working-dir .
FlagArgumentsDescription
-s, --server<url>Connect to an existing runtime server instead of auto-starting the default local one
-p, --platform<url>Platform API URL override used for authentication and profile selection

Use dreadnode login to save a platform profile before launching the client. If you omit the API key, the CLI starts a browser-based device login flow.

Terminal window
$ dreadnode login
$ dreadnode login dn_key_... --server http://localhost:3000

If you launch dreadnode without a saved profile, the TUI opens its auth modal first. Once you are inside the client, the in-app /login command remains available.

Use dreadnode serve when you want to run the runtime server without launching the TUI.

FlagArgumentsDescription
--host<host>Host interface for the local runtime server
--port<port>Port for the local runtime server
--working-dir<path>Working directory for the runtime server
--platform-server<url>Platform API base URL for the local runtime
--api-key<key>Platform API key used by the runtime server
--organization<org>Default organization key for the runtime server
--workspace<ws>Default workspace key for the runtime server
--project<proj>Default project key for the runtime server
--verboseEnable verbose trace logging for the local server

The CLI can also publish reusable assets to the platform OCI registry:

Terminal window
$ dreadnode capability push ./packages/capabilities/web-security
$ dreadnode dataset push ./seed-data/datasets/vulnerability-reports
$ dreadnode model push ./seed-data/models/vuln-classifier
$ dreadnode task push ~/projects/security-tasks/terminal-bench-tasks/security-bandit-bandit-00

Use dreadnode task push for task-style environment directories that contain a task.yaml and a runnable environment definition such as docker-compose.yaml.

For registry-backed package management, the CLI now also supports read and delete flows directly:

Terminal window
$ dreadnode capability list
$ dreadnode capability get [email protected]
$ dreadnode capability update [email protected] --public
$ dreadnode capability delete [email protected]
$ dreadnode dataset list
$ dreadnode dataset get [email protected]
$ dreadnode dataset delete [email protected]
$ dreadnode model list
$ dreadnode model get [email protected]
$ dreadnode model delete [email protected]
$ dreadnode task list
$ dreadnode task get security-bandit-bandit-00@latest
$ dreadnode task update security-bandit-bandit-00@latest --public
$ dreadnode task delete security-bandit-bandit-00@latest

Datasets and models are immutable once published. To “update” them, push a new version. Capabilities and tasks support metadata updates for visibility through the update subcommand. Task refs use NAME@latest.

The CLI also exposes hosted training submission and management through dreadnode train. See Training for the SFT and RL command surface.

The CLI also exposes hosted optimization submission and management through dreadnode optimize. See Optimization for the hosted GEPA command surface.

The CLI also exposes AIRT assessment management and analytics through dreadnode airt. See AIRT for the assessment, report, trace, and project-summary command surface.

The CLI also exposes Worlds manifest, trajectory, and job management through dreadnode worlds. See Worlds for the full control-plane command surface.

Use the --platform flag or the DREADNODE_SERVER environment variable to target a non-default platform before the auth modal opens (for example, a local web app):

Terminal window
$ dreadnode --platform http://localhost:3000
$ DREADNODE_SERVER=http://localhost:3000 dreadnode

Precedence order:

  1. --platform flag
  2. DREADNODE_SERVER environment variable
  3. Active profile URL
  4. Default platform URL

The TUI is screen-first. A few commands open overlays or screens, and the rest help you control the current session.

CommandArgumentsDescription
/helpShow the in-app command set
/newCreate a new session
/resetReset the current session
/sessionsOpen the session browser
/rename<title>Rename the current session
/compact[guidance]Compact conversation history
/export[filename]Export the current session transcript
/agentsList loaded agents
/agent<name>Start a session with a specific agent
/model[provider/model]Get or set the active model
/modelsOpen the model picker
/thinking[on|off|low|medium|high|max]Toggle reasoning effort
/reloadRe-discover capabilities and rebuild the registry
/login[api-key] [--server <url>]Authenticate with the platform and restart the runtime
/logoutDelete the active profile and restart local-only
/whoamiShow the current identity
/workspace[key]View or switch workspace
/workspacesList workspaces
/projects[workspace]List projects in a workspace
/runtimesView interactive runtimes
/environmentsBrowse available environments
/capabilitiesManage runtime capabilities
/skillsBrowse and load skills
/mcpView MCP server status
/secretsInspect configured secrets and provider presets
/tracesBrowse traces for the current project
/sandboxesMonitor sandboxes
/evaluationsView evaluation jobs
/consoleView backend logs
/tools<compact|expanded>Control tool result rendering
/updateUpdate the CLI to the latest version
/copyCopy the last assistant message
/quitExit the client
!<command><command>Run a shell command on the connected runtime
@<agent><agent>Route a prompt to a specific agent from the current capability
KeybindingDescription
Ctrl+BOpen sessions
Ctrl+OOpen workspaces
Ctrl+POpen capabilities
Ctrl+ROpen runtimes
Ctrl+TOpen traces
Ctrl+EOpen evaluations
Ctrl+AOpen the agent picker
Ctrl+KOpen the model picker
Ctrl+Shift+KCycle reasoning effort
Ctrl+NStart a new session
F5Open console logs
F9Update the CLI
TabCycle focus
EscDismiss overlays or interrupt
j / kScroll the conversation up or down
g / GJump to the top or bottom
yCopy the last assistant message
?Show in-app help

Use the Environments screen (/environments) to browse tasks and start sandboxes.

KeybindingDescription
s / EnterStart the selected environment
cCopy the rendered instruction to the clipboard

The chat panel now follows deterministic event boundaries:

  • Assistant text streams live in the draft area during generation.
  • Draft text is committed once at stable boundaries (for example when a tool starts or the turn ends).
  • Tool calls render as one-line rows (tool(arg) — summary) so the timeline stays compact.
  • Use /tools expanded when you want tool rows to include a second detail line with the raw result.
  • Use /tools compact to return to summary-only tool rows.
  • heartbeat events update liveness internally and do not add transcript noise.
  • permissionrequired and userinputrequired events move the UI into blocking mode and disable composer input until the turn can resume.

The terminal client is still evolving quickly. The first Textual version focuses on the server session loop first, then broader platform workflows will be layered back in.