{"record":{"id":"6db2a4d7fa2c34db","repo":"multica-ai/multica","slug":"execenv-prepare-claude-skill-settings-w","errorCode":null,"errorMessage":"execenv: prepare claude skill settings: %w","messagePattern":"execenv: prepare claude skill settings: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/internal/daemon/execenv/execenv.go","lineNumber":505,"sourceCode":"\t\t}\n\t}\n\n\t// For Codex, set up a per-task CODEX_HOME seeded from ~/.codex/ with skills.\n\tif params.Provider == \"codex\" {\n\t\tcodexHome := filepath.Join(envRoot, codexHomeDirName)\n\t\tif err := prepareCodexHomeWithOpts(codexHome, CodexHomeOptions{CodexVersion: params.CodexVersion, IsLocalDirectory: params.LocalWorkDir != \"\" || params.LocalWorktree != nil, SessionStoreKey: codexSessionStoreKey(params.Profile, params.Task), CodexCustomArgs: params.CodexCustomArgs}, logger); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"execenv: prepare codex-home: %w\", err)\n\t\t}\n\t\tif err := hydrateCodexSkills(codexHome, params.Task.AgentSkills, params.Task.DisabledRuntimeSkills, logger); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"execenv: hydrate codex skills: %w\", err)\n\t\t}\n\t\tenv.CodexHome = codexHome\n\t}\n\n\tif params.Provider == \"claude\" {\n\t\tsettingsPath, err := prepareClaudeSkillSettings(envRoot, params.Task.DisabledRuntimeSkills, params.Task.AgentSkills)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"execenv: prepare claude skill settings: %w\", err)\n\t\t}\n\t\tenv.ClaudeSettingsPath = settingsPath\n\t}\n\n\t// For Hermes, redirect HERMES_HOME to a per-task compatibility overlay ONLY\n\t// when the agent has skills bound. A skill-less Hermes task keeps the user's\n\t// real home and its original behavior untouched. The overlay makes the bound\n\t// skills visible — Hermes discovers skills only from its home, so the old\n\t// .agent_context/skills/ fallback was never read (issue #5242). See\n\t// hermes_home.go.\n\t//\n\t// Note this is a local contract, not an observable product behaviour: the\n\t// server appends the platform's built-in skills to every agent's skill set\n\t// (service.LoadAgentSkillBundles), so a claimed task's AgentSkills is never\n\t// empty and the skill-less branch is effectively unreachable in production.\n\t// Emptying an agent's own skill list is NOT a way to opt out of the overlay.\n\tif params.Provider == \"hermes\" && len(params.Task.AgentSkills) > 0 {\n\t\thermesHome := filepath.Join(envRoot, \"hermes-home\")","sourceCodeStart":487,"sourceCodeEnd":523,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/internal/daemon/execenv/execenv.go#L487-L523","documentation":"Error \"execenv: prepare claude skill settings: %w\" thrown in multica-ai/multica.","triggerScenarios":"Thrown at server/internal/daemon/execenv/execenv.go:505 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the wrapped error from claude skill settings preparation."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}