{"record":{"id":"18aef0b58e9d2fae","repo":"jdx/mise","slug":"no-matching-project-daemons-define-daemons-in-mise-toml","errorCode":null,"errorMessage":"no matching project daemons; define [daemons] in mise.toml","messagePattern":"no matching project daemons; define \\[daemons\\] in mise\\.toml","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/daemons.rs","lineNumber":247,"sourceCode":"            }\n        }\n        if action == \"ls\" {\n            if json {\n                miseprintln!(\"{}\", serde_json::to_string_pretty(&rows)?);\n            } else {\n                let mut table =\n                    crate::ui::table::MiseTable::new(false, &[\"Daemon\", \"Status\", \"Source\"]);\n                for row in rows {\n                    table.add_row(vec![\n                        comfy_table::Cell::new(row[\"id\"].as_str().unwrap_or_default()),\n                        comfy_table::Cell::new(row[\"status\"].as_str().unwrap_or_default()),\n                        comfy_table::Cell::new(row[\"source\"].as_str().unwrap_or_default()),\n                    ]);\n                }\n                table.print()?;\n            }\n        } else if !matched {\n            bail!(\"no matching project daemons; define [daemons] in mise.toml\");\n        }\n        Ok(())\n    }\n}\n\nfn matches_name(id: &str, name: &str) -> bool {\n    id == name || id.rsplit('/').next() == Some(name)\n}\n\n/// Separate positional IDs from pitchfork options before matching project roots.\n/// Value-taking options must retain their values even when a value is a daemon name.\nfn split_args(action: &str, args: &[String]) -> Result<(Vec<String>, Vec<String>)> {\n    let mut names = Vec::new();\n    let mut flags = Vec::new();\n    let mut args = args.iter();\n    while let Some(arg) = args.next() {\n        if arg == \"--\" {\n            names.extend(args.cloned());","sourceCodeStart":229,"sourceCodeEnd":265,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/daemons.rs#L229-L265","documentation":"After iterating over all project roots and selected daemons, if no daemon was matched at all (`matched == false`), mise concludes the project has no daemons configured and bails, pointing at the `[daemons]` section of mise.toml.","triggerScenarios":"Run any `mise daemons <action>` where the current project's mise.toml has no `[daemons]` table (or names matched nothing across all roots), so the `matched` flag stays false.","commonSituations":"Running `mise daemons start` in a repo that never defined daemons; `[daemons]` placed in the wrong file or a non-project config; forgetting to define daemons before managing them.","solutions":["Add a `[daemons]` section with daemon definitions to your project's mise.toml.","Run the command from the project root that contains the daemon config.","Run `mise daemons status` to see whether any daemons are recognized."],"exampleFix":"// before (mise.toml without daemons)\n$ mise daemons start  // no matching project daemons\n// after\n# mise.toml\n[daemons.web]\nrun = \"npm start\"\n$ mise daemons start","handlingStrategy":"validation","validationCode":"grep -q '^\\[daemons' mise.toml || echo \"no [daemons] defined\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Define `[daemons]` in the project mise.toml before using `mise daemons`.","Verify you're in the project root, not a subdirectory without daemon config."],"tags":["cli","daemons","config","empty-result"],"backgroundTag":"empty-result-set","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"}