{"record":{"id":"b2d051f44acc1721","repo":"jdx/mise","slug":"mise-daemons-tui-opens-the-dashboard-pass-tui-flags-not","errorCode":null,"errorMessage":"mise daemons tui opens the dashboard; pass TUI flags, not daemon names","messagePattern":"mise daemons tui opens the dashboard; pass TUI flags, not daemon names","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/daemons.rs","lineNumber":102,"sourceCode":"            }\n            Some(Commands::Start(args)) => (\"start\", args.args, false),\n            Some(Commands::Stop(args)) => (\"stop\", args.args, false),\n            Some(Commands::Restart(args)) => (\"restart\", args.args, false),\n            Some(Commands::Logs(args)) => (\"logs\", args.args, false),\n            Some(Commands::Status(args)) => (\"status\", args.args, false),\n            Some(Commands::Tui(args)) => (\"tui\", args.args, false),\n            Some(Commands::Ls(list)) => (\"ls\", vec![], list.json),\n            None => (\"ls\", vec![], self.list.json),\n        };\n        let config = Config::get().await?;\n        let root = config\n            .project_root\n            .as_deref()\n            .ok_or_else(|| eyre::eyre!(\"mise daemons requires a project configuration\"))?;\n        // The dashboard is global to the supervisor, not one invocation per daemon root.\n        if action == \"tui\" {\n            if args.first().is_some_and(|arg| !arg.starts_with('-')) {\n                bail!(\"mise daemons tui opens the dashboard; pass TUI flags, not daemon names\");\n            }\n            let previous = runtime::read_state(root)?;\n            let (config, ts) = runtime::toolset(&config, false).await?;\n            let runtime = Runtime::from_toolset(&config, &ts, Some(&previous.bin)).await?;\n            if !runtime.supervisor_up(root).await? {\n                bail!(\"pitchfork supervisor is not running; run mise daemons start\");\n            }\n            return runtime\n                .exec(root, [vec![\"tui\".into()], args].concat())\n                .await;\n        }\n        let loaded = config.daemons()?;\n        let mut roots = loaded.roots();\n        if !roots.iter().any(|r| r == root) {\n            roots.push(root.to_path_buf());\n        }\n        let (names, flags) = split_args(action, &args)?;\n        let install = matches!(action, \"start\" | \"restart\");","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/daemons.rs#L84-L120","documentation":"`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.","triggerScenarios":"Run `mise daemons tui <name>` — e.g. `mise daemons tui mydaemon` — where `args.first()` exists and does not begin with '-' while `action == \"tui\"`.","commonSituations":"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.","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."],"exampleFix":"// before\n$ mise daemons tui webdaemon\n// after\n$ mise daemons tui          # opens global dashboard\n$ mise daemons logs webdaemon  # daemon-specific action","handlingStrategy":"validation","validationCode":"case \"$arg\" in -*) mise daemons tui \"$arg\" ;; *) echo \"tui takes flags only\" ;; esac","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Remember `tui` is a global dashboard: only flag-style options after it.","Use start/stop/restart/logs/status subcommands for per-daemon operations."],"tags":["cli","daemons","tui","invalid-argument"],"backgroundTag":"invalid-cli-argument","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}