{"record":{"id":"b1ea9f7010f5cf09","repo":"multica-ai/multica","slug":"hermes-profile-name-q-is-reserved","errorCode":null,"errorMessage":"hermes profile name %q is reserved","messagePattern":"hermes profile name %q is reserved","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/internal/daemon/execenv/hermes_home.go","lineNumber":353,"sourceCode":"func hermesProfileDir(root, name string) (home string, mustExist bool, err error) {\n\tstripped := strings.TrimSpace(name)\n\tif stripped == \"\" {\n\t\treturn \"\", false, fmt.Errorf(\"hermes profile name cannot be empty\")\n\t}\n\tvar canon string\n\tif strings.EqualFold(stripped, \"default\") {\n\t\tcanon = \"default\"\n\t} else {\n\t\tcanon = strings.ToLower(stripped)\n\t}\n\tif canon == \"default\" {\n\t\treturn root, false, nil // the default profile IS the root home\n\t}\n\tif !hermesProfileNameRe.MatchString(canon) {\n\t\treturn \"\", false, fmt.Errorf(\"invalid hermes profile name %q\", canon)\n\t}\n\tif _, reserved := hermesReservedProfileNames[canon]; reserved {\n\t\treturn \"\", false, fmt.Errorf(\"hermes profile name %q is reserved\", canon)\n\t}\n\treturn filepath.Join(root, \"profiles\", canon), true, nil\n}\n\n// prepareHermesHome builds the per-task HERMES_HOME compatibility overlay\n// described above. The daemon exports the given path as HERMES_HOME on the\n// hermes subprocess so the CLI discovers the bound skills natively.\n//\n// Callers gate this on the agent having skills bound; it is a full rebuild each\n// time (mirror reconciled, config re-derived, bound skills rewritten) so a Reuse\n// after a skill/config change lands cleanly. It fails CLOSED: if the mirror, the\n// derived config, or the bound skills can't be established the whole overlay is\n// unusable, so the error propagates and the caller must not start Hermes against\n// a half-built home.\n// sourceHome is the shared home to seed from (resolved by the daemon via\n// ResolveHermesProfile, honoring the agent's HERMES_HOME/profile); empty\n// falls back to the platform default. sourceMustExist fails closed when the\n// source home is absent — set for an explicitly named profile so a typo doesn't","sourceCodeStart":335,"sourceCodeEnd":371,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/internal/daemon/execenv/hermes_home.go#L335-L371","documentation":"Error \"hermes profile name %q is reserved\" thrown in multica-ai/multica.","triggerScenarios":"Thrown at server/internal/daemon/execenv/hermes_home.go:353 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pick a different, non-reserved hermes profile name."],"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"}