Hmbown/CodeWhale · error · anyhow::Error

Account settings import is not available yet; local config…

Error message

Account settings import is not available yet; local config was not changed. Run `codewhale account pull --dry-run` to inspect the signed-in account.

What it means

`codewhale account pull` only implements the `--dry-run` preview: /api/me exposes identity and key metadata but not a versioned settings document that could be applied locally. Without `--dry-run` the command refuses early, guaranteeing local config is untouched.

Solutions

  1. Re-run with `--dry-run`: `codewhale account pull --dry-run`.
  2. Wait for the settings-import feature; do not script around the guard, since local config must not change.
  3. Manage local config directly until import ships.

Example fix

// before
codewhale account pull
// after
codewhale account pull --dry-run
Defensive patterns

Strategy: validation

Validate before calling

// Only invoke pull with --dry-run until import ships
let args: Vec<String> = std::env::args().collect();
assert!(args.iter().any(|a| a == "--dry-run"), "pull is dry-run-only");

Prevention

When it happens

Trigger: Running `codewhale account pull` without the `--dry-run` flag.

Common situations: Users expecting pull to actually import account settings today; habits from other tools where pull applies changes; attempting config sync between machines.

Related errors


AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22). Data as JSON: /api/errors/5206a7d58edba2ee. Report an issue: GitHub.

Appendix: source

Thrown at crates/cli/src/cloud.rs:912

                let who = machine_client.whoami(sleeper)?;
                machine::write_whoami(out, &who, api_base, machine_client.key_head())
            }
            None => {
                let user = client.me()?;
                write_account(out, "Signed in to Codewhale.", profile, api_base, &user)
            }
        },
        CloudCommand::Agent => {
            // The agent route is machine-key-only by design, so CI and humans
            // never blur in an audit trail. There is no session fallback.
            let key = machine.require()?;
            let machine_client = machine::MachineClient::new(transport, key);
            let agent = machine_client.agent(sleeper)?.agent;
            machine::write_agent(out, &agent)
        }
        CloudCommand::Pull(args) => {
            if !args.dry_run {
                bail!(
                    "Account settings import is not available yet; local config was not changed. Run `codewhale account pull --dry-run` to inspect the signed-in account."
                );
            }
            let user = client.me()?;
            // `/api/me` currently exposes account identity and key metadata,
            // not a versioned settings document that can be applied locally.
            // Stay read-only and explicit until that import contract exists.
            writeln!(out, "Account settings (pull --dry-run):")?;
            writeln!(out, "Account ID: {}", printable(&user.id))?;
            writeln!(out, "Profile: {}", printable(profile))?;
            writeln!(out, "API: {api_base}")?;
            writeln!(
                out,
                "dry-run: remote settings import is not available; local config unchanged"
            )?;
            // Show the invariant: Bearer custody stays in the OS keyring, never in config.toml.
            writeln!(
                out,

View on GitHub (pinned to 73e0f67d83)