{"record":{"id":"cb7f2b4739412514","repo":"jdx/mise","slug":"no-matching-project-daemons-for-name","errorCode":null,"errorMessage":"no matching project daemons for {name:?}","messagePattern":"no matching project daemons for (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/daemons.rs","lineNumber":142,"sourceCode":"            let namespace = if previous.namespace.is_empty() {\n                runtime::namespace(root)?\n            } else {\n                previous.namespace.clone()\n            };\n            let mut ids = if install { Vec::new() } else { previous.ids };\n            ids.extend(\n                loaded\n                    .for_root(root)\n                    .daemons\n                    .keys()\n                    .map(|name| format!(\"{namespace}/{name}\")),\n            );\n            root_ids.push(ids);\n        }\n        // Validate the entire request before any root installs tools or changes state.\n        for name in &names {\n            if !root_ids.iter().flatten().any(|id| matches_name(id, name)) {\n                bail!(\"no matching project daemons for {name:?}\");\n            }\n        }\n        let mut rows = Vec::new();\n        let mut matched = false;\n        for (root, ids) in roots.into_iter().zip(root_ids) {\n            if !names.is_empty()\n                && !ids\n                    .iter()\n                    .any(|id| names.iter().any(|name| matches_name(id, name)))\n            {\n                continue;\n            }\n            let scoped = runtime::config_for_root(&config, &root).await?;\n            let set = scoped.daemons()?.for_root(&root);\n            let previous = runtime::read_state(&root)?;\n            if set.daemons.is_empty() && previous.ids.is_empty() {\n                continue;\n            }","sourceCodeStart":124,"sourceCodeEnd":160,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/daemons.rs#L124-L160","documentation":"`mise daemons <action> <names...>` validates, before touching any root or installing tools, that every requested name matches at least one daemon id declared in the project's `[daemons]` configuration across discovered roots. A name that matches nothing aborts the whole request.","triggerScenarios":"Run `mise daemons <action> <name>` where `<name>` is not found in any root's daemon id list (`root_ids`), checked via `matches_name(id, name)`.","commonSituations":"Typo in a daemon name; daemon renamed or removed from mise.toml `[daemons]`; running the command in the wrong project directory; name casing mismatch.","solutions":["Run `mise daemons status` with no names to list the daemon ids configured for the project.","Fix the daemon name spelling or add the missing daemon under `[daemons]` in mise.toml.","cd into the correct project root that defines the daemon."],"exampleFix":"// before (mise.toml has [daemons.web])\n$ mise daemons restart webserv  // no match\n// after\n$ mise daemons restart web","handlingStrategy":"validation","validationCode":"mise daemons status | awk '{print $1}' | grep -qx \"$name\" || echo \"unknown daemon: $name\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["List configured daemon ids with `mise daemons status` before scripting actions.","Keep daemon names consistent between mise.toml and scripts/CI."],"tags":["cli","daemons","config","name-resolution"],"backgroundTag":"record-not-found","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"}