{"record":{"id":"41cca9860bde5b67","repo":"Hmbown/CodeWhale","slug":"codewhale-login-now-signs-in-to-your-codewhale-account-via","errorCode":null,"errorMessage":"`codewhale login` now signs in to your Codewhale account via the browser device flow. To configure a provider key, run `codewhale auth set --provider <provider>` (hidden prompt) or `codewhale auth set --provider <provider> --api-key-stdin`.","messagePattern":"`codewhale login` now signs in to your Codewhale account via the browser device flow\\. To configure a provider key, run `codewhale auth set --provider <provider>` \\(hidden prompt\\) or `codewhale auth set --provider <provider> --api-key-stdin`\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/cli/src/lib.rs","lineNumber":2532,"sourceCode":"        let flag = arg.split_once('=').map_or(arg.as_str(), |(flag, _)| flag);\n        if GLOBAL_ONLY_FLAGS.contains(&flag) {\n            bail!(\n                \"{flag} must be placed before `exec`.\\n\\nUse:\\n  codewhale {flag} <value> exec \\\"<prompt>\\\"\"\n            );\n        }\n    }\n\n    Ok(())\n}\n\n/// `codewhale login` used to configure provider API keys; that surface moved\n/// to `auth set --provider`. The hidden legacy flags stay parseable so the\n/// redirect below can name the replacement instead of an unknown-flag error.\nfn reject_legacy_login_provider_args(args: &LoginArgs) -> Result<()> {\n    if args.api_key.is_none() && args.provider.is_none() {\n        return Ok(());\n    }\n    bail!(\n        \"`codewhale login` now signs in to your Codewhale account via the browser device flow. \\\n         To configure a provider key, run `codewhale auth set --provider <provider>` (hidden prompt) \\\n         or `codewhale auth set --provider <provider> --api-key-stdin`.\"\n    )\n}\n\nfn run_logout_command(store: &mut ConfigStore, profile: Option<&str>) -> Result<()> {\n    run_logout_command_with_secrets(store, &Secrets::auto_detect(), profile)\n}\n\nfn run_logout_command_with_secrets(\n    store: &mut ConfigStore,\n    secrets: &Secrets,\n    profile: Option<&str>,\n) -> Result<()> {\n    codewhale_config::with_xai_oauth_revocation_transaction(|| {\n        run_logout_command_with_secrets_unlocked(store, secrets, profile)\n    })","sourceCodeStart":2514,"sourceCodeEnd":2550,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/cli/src/lib.rs#L2514-L2550","documentation":"`codewhale login` was repurposed as the Codewhale account browser device-flow sign-in; provider/API-key arguments on login are legacy and now hard-fail with a redirect message naming `auth set`. The legacy flags remain hidden-parseable only so this helpful message can be shown instead of an unknown-flag error.","triggerScenarios":"Running `codewhale login --provider <p>` or `codewhale login --api-key <key>` (or any combination where either legacy arg is set).","commonSituations":"CI scripts or dotfiles from older Codewhale versions that authenticated providers via `login`; users following outdated blog posts or README snippets; migrating setup from a machine where login-then-key was the flow.","solutions":["Use `codewhale login` alone for Codewhale account sign-in","Configure the provider key with `codewhale auth set --provider <provider>` (hidden interactive prompt)","For non-interactive setup use `codewhale auth set --provider <provider> --api-key-stdin` with the key piped to stdin"],"exampleFix":"// before\ncodewhale login --provider openai --api-key sk-...\n// after\ncodewhale auth set --provider openai --api-key-stdin < key.txt","handlingStrategy":"validation","validationCode":"// shell\nif [[ \"$cmd\" == *\"login --provider\"* || \"$cmd\" == *\"login --api-key\"* ]]; then echo \"use: codewhale auth set --provider <p>\"; exit 1; fi","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use `codewhale login` only for Codewhale account sign-in","Use `codewhale auth set` for all provider keys; update old setup scripts"],"tags":["cli","deprecated","auth"],"backgroundTag":"deprecated-api-usage","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-22T11:17:16.035Z"}