{"record":{"id":"88ca7657362ffe51","repo":"affaan-m/ECC","slug":"unsupported-agent-type-other","errorCode":null,"errorMessage":"Unsupported agent type: {other}","messagePattern":"Unsupported agent type: (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"ecc2/src/session/manager.rs","lineNumber":2345,"sourceCode":"}\n\nfn agent_program(cfg: &Config, agent_type: &str) -> Result<PathBuf> {\n    let harness = HarnessKind::from_agent_type(agent_type);\n    let runner_key = SessionHarnessInfo::runner_key(agent_type);\n    if let Some(runner) = cfg.harness_runner(&runner_key) {\n        let program = runner.program.trim();\n        if program.is_empty() {\n            anyhow::bail!(\"Configured harness runner for {runner_key} is missing a program\");\n        }\n        return Ok(PathBuf::from(program));\n    }\n\n    match harness {\n        HarnessKind::Claude => Ok(PathBuf::from(\"claude\")),\n        HarnessKind::Codex => Ok(PathBuf::from(\"codex\")),\n        HarnessKind::OpenCode => Ok(PathBuf::from(\"opencode\")),\n        HarnessKind::Gemini => Ok(PathBuf::from(\"gemini\")),\n        other => anyhow::bail!(\"Unsupported agent type: {other}\"),\n    }\n}\n\nfn resolve_session(db: &StateStore, id: &str) -> Result<Session> {\n    let session = if id == \"latest\" {\n        db.get_latest_session()?\n    } else {\n        db.get_session(id)?\n    };\n\n    session.ok_or_else(|| anyhow::anyhow!(\"Session not found: {id}\"))\n}\n\nfn parse_cron_schedule(expr: &str) -> Result<CronSchedule> {\n    let trimmed = expr.trim();\n    let normalized = match trimmed.split_whitespace().count() {\n        5 => format!(\"0 {trimmed}\"),\n        6 | 7 => trimmed.to_string(),","sourceCodeStart":2327,"sourceCodeEnd":2363,"githubUrl":"https://github.com/affaan-m/ECC/blob/01e15490f04e29cfefe3896951f43db46994d8ee/ecc2/src/session/manager.rs#L2327-L2363","documentation":"The agent_program function maps the agent type to a HarnessKind via HarnessKind::from_agent_type. If the resulting kind does not match Claude, Codex, OpenCode, or Gemini, it bails. There is no default fallback — unknown agent types cannot be launched.","triggerScenarios":"Passing an agent_type string whose HarnessKind::from_agent_type mapping does not yield Claude, Codex, OpenCode, or Gemini, and no harness_runner config overrides the program.","commonSituations":"Using a custom agent type not registered in the harness mapping. Typo in agent type name. New harness not yet supported by this version of ECC.","solutions":["Use one of the supported agent types: claude, codex, opencode, or gemini","If you need a custom agent, configure a harness_runner entry for its runner_key to bypass the default mapping","Check that HarnessKind::from_agent_type returns the expected variant for your agent type string","Update ECC to a version that supports the new harness"],"exampleFix":"// before\nlet agent_type = \"aider\";\nsession.run(agent_type).await?;\n\n// after (option 1: use supported type)\nlet agent_type = \"claude\";\nsession.run(agent_type).await?;\n\n// after (option 2: configure harness_runner in config)\n// harness_runners:\n//   aider-runner:\n//     program: \"/usr/local/bin/aider\"","handlingStrategy":"type-guard","validationCode":"fn is_supported_agent_type(agent_type: &str) -> bool {\n    matches!(\n        HarnessKind::from_agent_type(agent_type),\n        HarnessKind::Claude | HarnessKind::Codex | HarnessKind::OpenCode | HarnessKind::Gemini\n    )\n}","typeGuard":"fn is_supported_agent_type(agent_type: &str) -> bool {\n    matches!(\n        HarnessKind::from_agent_type(agent_type),\n        HarnessKind::Claude | HarnessKind::Codex | HarnessKind::OpenCode | HarnessKind::Gemini\n    )\n}","tryCatchPattern":null,"preventionTips":["Maintain a list of supported agent types and validate user input against it","Configure a harness_runner entry for any custom agent type to bypass the default mapping","Check agent type support at config-load time if agent types come from config"],"tags":["configuration","harness","agent-type","unsupported"],"backgroundTag":null,"analyzedSha":"01e15490f04e29cfefe3896951f43db46994d8ee","analyzedAt":"2026-08-13T00:31:08.655Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}