Summary
ucode configure --dry-run is documented as "Print config files without writing them." In practice it only makes the agent config file write dry. Everything else in the flow still executes and mutates the machine.
Observed on a single invocation:
ucode configure --dry-run --agents claude --workspaces https://<workspace> \
--skip-validate --skip-upgrade --verbose low
- Upgraded the Databricks CLI via Homebrew, unprompted —
databricks/tap/databricks 0.298.0 -> 1.12.1, a major version bump, announced as Databricks CLI v0.298.0 is too old (need v1.0.0 or newer). Upgrading.... It also triggered a full brew update (tap refresh) as a side effect.
- Ran
databricks auth login and re-saved the CLI profile (Profile <name> was successfully saved).
- Installed "Databricks AI Tools" — the official Databricks plugin was written into
~/.claude/plugins/cache/claude-plugins-official/databricks, with "databricks@claude-plugins-official": true added to ~/.claude/settings.json and the plugin registries (installed_plugins.json, known_marketplaces.json) rewritten.
Only the final settings file was actually withheld, printed as [dry run] ~/.claude/ucode-settings.json.
Note that (3) edits the live config of the Claude Code installation on the machine — from a command whose entire contract is that it doesn't write anything.
Why it matters
--dry-run is the flag a cautious user reaches for precisely because they don't want their agent configs or toolchain touched — see #10, where config writes destroying existing agent settings was the reported harm. A dry run that upgrades a package manager dependency, re-authenticates, and installs a plugin is not usable for that purpose, and there is currently no flag that is.
--skip-upgrade does not prevent the CLI upgrade either; it is documented as covering agent CLIs, and the Databricks CLI minimum-version bump is applied regardless.
Suggested fix
Make --dry-run global to the flow: skip the CLI upgrade, skip the login, skip plugin/skills installation, and print what each step would do. If some steps are genuinely prerequisites for producing an accurate preview (auth is needed to discover models), then either state that limitation in --help, or gate the mutating ones behind an explicit opt-in.
Summary
ucode configure --dry-runis documented as "Print config files without writing them." In practice it only makes the agent config file write dry. Everything else in the flow still executes and mutates the machine.Observed on a single invocation:
databricks/tap/databricks 0.298.0 -> 1.12.1, a major version bump, announced asDatabricks CLI v0.298.0 is too old (need v1.0.0 or newer). Upgrading.... It also triggered a fullbrew update(tap refresh) as a side effect.databricks auth loginand re-saved the CLI profile (Profile <name> was successfully saved).~/.claude/plugins/cache/claude-plugins-official/databricks, with"databricks@claude-plugins-official": trueadded to~/.claude/settings.jsonand the plugin registries (installed_plugins.json,known_marketplaces.json) rewritten.Only the final settings file was actually withheld, printed as
[dry run] ~/.claude/ucode-settings.json.Note that (3) edits the live config of the Claude Code installation on the machine — from a command whose entire contract is that it doesn't write anything.
Why it matters
--dry-runis the flag a cautious user reaches for precisely because they don't want their agent configs or toolchain touched — see #10, where config writes destroying existing agent settings was the reported harm. A dry run that upgrades a package manager dependency, re-authenticates, and installs a plugin is not usable for that purpose, and there is currently no flag that is.--skip-upgradedoes not prevent the CLI upgrade either; it is documented as covering agent CLIs, and the Databricks CLI minimum-version bump is applied regardless.Suggested fix
Make
--dry-runglobal to the flow: skip the CLI upgrade, skip the login, skip plugin/skills installation, and print what each step would do. If some steps are genuinely prerequisites for producing an accurate preview (auth is needed to discover models), then either state that limitation in--help, or gate the mutating ones behind an explicit opt-in.