Hmbown/CodeWhale · error
--set is not supported by the legacy app-server transport…
Error message
--set is not supported by the legacy app-server transport; use app-server --http or a saved config
What it means
The dispatcher rejects `--set` overrides for the legacy (non-HTTP, non-mobile) app-server transport: that transport predates runtime overrides and does not consume them. Bail occurs when `cli.overrides` is non-empty and the command is `Commands::AppServer(args)` with `!args.http && !args.mobile`. The message directs users to the `--http` transport or a saved config.
Solutions
- Switch to the current transport: `codewhale app-server --http` and keep your `--set` flags.
- Keep the legacy transport but drop `--set` and bake the settings into a saved config via `codewhale config set`.
- Use `--mobile` transport instead if that matches your client, also compatible with `--set`.
Example fix
// before codewhale --set model=gpt-x app-server // error: --set is not supported by the legacy app-server transport // after codewhale --set model=gpt-x app-server --http
Defensive patterns
Strategy: validation
Validate before calling
# ensure app-server uses the http transport when overrides are present if [ -n "$OVERRIDES" ]; then set -- "$@" --http fi codewhale $OVERRIDES app-server --http
Try / catch
match run(args) {
Err(e) if e.to_string().contains("legacy app-server transport") => {
eprintln!("add --http (or drop --set)");
}
r => r?,
} Prevention
- Always launch app-server with --http for new integrations.
- Audit legacy launch scripts after upgrades for --set usage.
- Bake overrides into saved config when staying on the legacy transport.
When it happens
Trigger: Running `codewhale app-server` (without `--http` or `--mobile`) together with any `--set key=value` override.
Common situations: Older launch scripts that pair the legacy app-server with new-style `--set` overrides after a version upgrade, or following outdated documentation.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- --set is not supported by auth commands; use a saved config
- unsupported runtime --set key (value omitted): supported…
- --bridge is required in --non-interactive mode.
- Choose exactly one server mode: --mcp…
- `codewhale --continue` resumes the interactive TUI. Use…
AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22).
Data as JSON: /api/errors/ff15fbb26aa3e285.
Report an issue: GitHub.
Appendix: source
Thrown at crates/cli/src/lib.rs:1956
let matches = Cli::command().get_matches();
let project_bundle_scope = config_command_targets_project(&matches);
let mut cli = Cli::from_arg_matches(&matches).unwrap_or_else(|error| error.exit());
// The detached log proxy must not depend on user config parsing: its job
// is to frame child output and publish a terminal receipt even when the
// delegated command's own config is malformed.
let (proxy, command) = split_lane_log_proxy_command(cli.command.take());
if let Some(args) = proxy {
return run_lane_log_proxy_command(args);
}
if !cli.overrides.is_empty() && matches!(command, Some(Commands::Auth(_))) {
bail!("--set is not supported by auth commands; use a saved config");
}
if !cli.overrides.is_empty()
&& matches!(&command, Some(Commands::AppServer(args)) if !args.http && !args.mobile)
{
bail!(
"--set is not supported by the legacy app-server transport; use app-server --http or a saved config"
);
}
if !matches!(command, Some(Commands::Config(_))) {
apply_runtime_set_overrides(&mut cli)?;
}
let pipe_api_key_handoff = matches!(
&command,
Some(Commands::Auth(AuthArgs {
command: AuthCommand::PrintApiKey { .. }
}))
);
if pipe_api_key_handoff {
credential_handoff::prepare_stdout(io::stdout().is_terminal())?;
}
let runtime_provider = top_level_provider_override(cli.provider.as_deref(), command.as_ref())?;
let uses_raw_tui_provider = cli.provider.is_some() && runtime_provider.is_none();View on GitHub (pinned to 73e0f67d83)