jdx/mise · error
mise daemons tui opens the dashboard; pass TUI flags, not…
Error message
mise daemons tui opens the dashboard; pass TUI flags, not daemon names
What it means
`mise daemons tui` launches the pitchfork TUI dashboard, which is global to the supervisor. Positional arguments after `tui` are TUI flags; if the first argument doesn't start with '-' the command assumes a daemon name was passed, which this subcommand does not support, and bails with guidance.
Solutions
- Run `mise daemons tui` with no positional daemon name; pass only flag-style TUI options.
- To act on a specific daemon, use `mise daemons start|stop|restart|logs|status <name>` instead.
- Use `pitchfork tui` directly if you need pitchfork-specific TUI targeting.
Example fix
// before $ mise daemons tui webdaemon // after $ mise daemons tui # opens global dashboard $ mise daemons logs webdaemon # daemon-specific action
Defensive patterns
Strategy: validation
Validate before calling
case "$arg" in -*) mise daemons tui "$arg" ;; *) echo "tui takes flags only" ;; esac
Prevention
- Remember `tui` is a global dashboard: only flag-style options after it.
- Use start/stop/restart/logs/status subcommands for per-daemon operations.
When it happens
Trigger: Run `mise daemons tui <name>` — e.g. `mise daemons tui mydaemon` — where `args.first()` exists and does not begin with '-' while `action == "tui"`.
Common situations: Users pattern-matching from `mise daemons start|stop|logs <name>` and trying `mise daemons tui <name>`; scripting `tui` with a daemon argument copied from other daemon subcommands.
Understand the failure class
Background: "Unknown argument", "Invalid value", and "must be one of": invalid CLI argument errors explained — this error's family across 35 libraries.
Related errors
- bootstrap packages where currently supports brew: formulae…
- config set requires a TOML config file, but
- --install takes the executable's name, not a tool id; run…
- is not a sharing conflict
- mise daemons selects project daemon names; use pitchfork…
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/b2d051f44acc1721.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/daemons.rs:102
}
Some(Commands::Start(args)) => ("start", args.args, false),
Some(Commands::Stop(args)) => ("stop", args.args, false),
Some(Commands::Restart(args)) => ("restart", args.args, false),
Some(Commands::Logs(args)) => ("logs", args.args, false),
Some(Commands::Status(args)) => ("status", args.args, false),
Some(Commands::Tui(args)) => ("tui", args.args, false),
Some(Commands::Ls(list)) => ("ls", vec![], list.json),
None => ("ls", vec![], self.list.json),
};
let config = Config::get().await?;
let root = config
.project_root
.as_deref()
.ok_or_else(|| eyre::eyre!("mise daemons requires a project configuration"))?;
// The dashboard is global to the supervisor, not one invocation per daemon root.
if action == "tui" {
if args.first().is_some_and(|arg| !arg.starts_with('-')) {
bail!("mise daemons tui opens the dashboard; pass TUI flags, not daemon names");
}
let previous = runtime::read_state(root)?;
let (config, ts) = runtime::toolset(&config, false).await?;
let runtime = Runtime::from_toolset(&config, &ts, Some(&previous.bin)).await?;
if !runtime.supervisor_up(root).await? {
bail!("pitchfork supervisor is not running; run mise daemons start");
}
return runtime
.exec(root, [vec!["tui".into()], args].concat())
.await;
}
let loaded = config.daemons()?;
let mut roots = loaded.roots();
if !roots.iter().any(|r| r == root) {
roots.push(root.to_path_buf());
}
let (names, flags) = split_args(action, &args)?;
let install = matches!(action, "start" | "restart");View on GitHub (pinned to 533346cc37)