Loading the documentation…
DataMind Oda usually runs as the desktop app, and it can also run from a command line. Use the command line to start Oda in a named profile: serve its interface in a browser, answer one task and exit, or host a client of your own.
A command-line Oda runs in a profile: a named setup of Oda that decides how that run works. Each profile keeps its own folder under the Oda home folder, one folder per profile name, and starting the same name again reuses that setup.
Start one from a terminal:
oda --profile web
Oda ships five profiles:
| Profile | What it starts |
|---|---|
web | The Oda interface in a browser on this computer. |
headless | Answers one task and exits. |
sdk | A runtime for Oda SDK clients. |
sdk-minimal | A small standalone runtime for SDK clients. |
acp | A server for automation clients that speak the Agent Client Protocol. |
The serving profiles and their clients are described on Automation with Oda.
--from-default-profile <template>, for example oda rescue --from-default-profile web, then start oda rescue. A name that is already shipped or already exists is refused.profile "<name>" does not exist and points to the command that adds a package to that name.invalid profile name "<name>".desktop; starting it, inspecting it or managing its packages from a command line is refused, because the app manages that profile.select a profile only once.--patch <path> lays one of your own files over the profile; it needs a path, or Oda stops with error: --patch needs a path.
How a profile stacks its layers is on Oda profiles and launchers.Oda reads a small set of flags of its own, and every mode adds its own flags on top.
| Flag or command | What it does |
|---|---|
--profile <name> | Runs with the named profile. |
--from-default-profile <template> | Starts a new profile from a shipped template. |
--patch <path> | Lays one of your own files over the profile. |
--dump-config, --dump-default-config, --dump-config-schema | Print the configuration or its schemas without starting anything. |
--help | Prints the help and exits with code 0, without starting anything. |
-V, --version | Prints the release version exactly. |
plugin | Manages a profile's packages. |
-- argument needs the doubled form -- --.oda --profile web --port 8080 serves on port 8080 even when the settings name another port, and the rule holds when the settings value is written as an expression.error: --port must be a number, got "<value>". When a start fails instead, Startup and diagnostics covers the output and the exit code.The headless profile answers one task and exits, without opening the app:
oda --profile headless "summarise the latest changes"
git diff --stat | oda --profile headless. A lone - reads standard input too, and mixing it with words is refused.reasoning:) and any problems go to standard error, so a script can read the answer cleanly.--json to write newline-delimited events to standard output instead of the final answer. The stream opens with a session event that carries the chat's id.The full contract, including the JSON event stream and its bounds: Headless runs.
Name an earlier chat with --session-id, plus the new task:
oda --profile headless --session-id <id> "carry on with the task"
The refusals in full are on Headless runs.
A run needs a model credential before it can answer; until one resolves, model requests fail. Sign in to your DataMind server, or save a key on Settings > Models (Set up models and providers). Where Oda looks for a credential, and in which order, is on Stored credentials. A run can use the models your DataMind account offers.
A profile's packages are managed by the plugin command:
oda plugin --profile <name> add <package>
add, remove and update work the same way.pnpm on your PATH; the command reports when it is not installed or not on your path.The same command is walked through on Oda profiles and launchers.
Oda can show what a profile will run, without starting anything:
--dump-config prints the settings as Oda composes them from their layers. Sections and rows carry comments naming their source, # == <label>, or # == <label>, patched by <layers> when a later layer changed the row. Expressions print as written. For the file behind these layers, see The Oda settings file.failed to read config, failed to parse config), and one that is not a top-level list of entries is refused as well.--dump-default-config prints only what Oda ships, without your own layers.--dump-config-schema prints the schemas the entries declare instead of values, with a status for each: schema, partial, absent, unsupported or error. It never prints configuration values or the sources of expressions. Nothing starts and no expressions are evaluated, but the output can still contain sensitive defaults: Review output before sharing.oda --profile web serves the Oda interface to a browser on this computer, prints its address, and opens that address in your default browser. Started over a remote connection, Oda prints the address and skips the handoff.
--no-open starts it without opening a browser; the address still prints.127. 0. 0. 1, and binding every network interface is refused for safety.--host, --port, --trusted-host change the bound host, the port, and any extra hostname you reach the interface under.Starting it and signing in: The Oda web interface; working in the browser: Oda in the browser.
oda --help prints the launcher's own help and exits without starting anything.oda --profile web --help (or -h) prints that mode's help instead, exits with code 0 and starts nothing, without claiming standard input or output; the flags after a profile name belong to the mode you start.-V, --version prints the release version exactly.Press Ctrl+C to ask Oda to stop: it gets up to five seconds to settle, then stops. If it has not stopped yet, press Ctrl+C again to end it at once; an end you ask for this way reports exit code 130.
A named setup of Oda that decides how a run works: which layers Oda stacks and which of your own settings apply. Each profile lives in its own folder under the Oda home folder, and starting the same name again reuses the same setup.
Oda sets it up from the template it ships and then starts it, so you do not prepare the five shipped names by hand. Any other name is not created by itself: the start stops and points to the command that adds a package to that name.
--profile?Yes, when the profile name is the first word: oda web means oda --profile web. One word is special: plugin in the first position is the plugin command, so a profile named plugin needs the full form, oda --profile plugin.
desktop refused?That name belongs to the desktop app's own profile, and the app manages it. Starting it, inspecting its configuration or managing its packages from a command line is refused, so pick another name for a profile of your own.
Press Ctrl+C. Oda gets up to five seconds to settle and then stops; a second Ctrl+C ends it at once. An end you ask for this way reports exit code 130.
Some packages build while they are installed, and the package manager blocks that build until you allow it. The command prints the exact setting to add to the settings file inside the profile's folder; add it, then run the command again.
select a profile only once mean?Oda reads the command line once, and it selects a profile only once: a second --profile is refused with that message. A --patch without a path is refused the same way: error: --patch needs a path. Fix the line and start again.
A flag beats the matching value in the settings: --port 8080 serves on port 8080 even when the settings name another port, also when that value is written as an expression. Flags are resolved once, when Oda starts, so a settings reload never resets them.
Oda's own flags come first, and everything after them goes to the mode you start, which parses its own flags from there. Keep that order: Oda's flags first, then anything meant for the mode.
No. --dump-config-schema lists the schemas the configuration declares, with a status per entry (schema, partial, absent, unsupported or error). Values and the sources of expressions are never printed, and nothing is started. Defaults can still be sensitive, so review the output before you share it.
Add --json to a headless run. It writes one event per line to standard output instead of the final answer, opening with a session event that carries the chat's id. Headless runs lists the events and their bounds.
Yes: add --no-open. Oda still prints the interface's address, so you can open it yourself or copy it to a browser. The Oda web interface covers the printed address.