{"record":{"id":"e013e1570f3ae592","repo":"multica-ai/multica","slug":"get-skill-w","errorCode":null,"errorMessage":"get skill: %w","messagePattern":"get skill: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_skill.go","lineNumber":275,"sourceCode":"\t\t\tstrVal(s, \"created_at\"),\n\t\t})\n\t}\n\tcli.PrintTable(os.Stdout, headers, rows)\n\treturn nil\n}\n\nfunc runSkillGet(cmd *cobra.Command, args []string) error {\n\tclient, err := newAPIClient(cmd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tctx, cancel := cli.APIContext(context.Background())\n\tdefer cancel()\n\n\tvar skill map[string]any\n\tif err := client.GetJSON(ctx, \"/api/skills/\"+args[0], &skill); err != nil {\n\t\treturn fmt.Errorf(\"get skill: %w\", err)\n\t}\n\n\toutput, _ := cmd.Flags().GetString(\"output\")\n\tif output == \"json\" {\n\t\treturn cli.PrintJSON(os.Stdout, skill)\n\t}\n\n\theaders := []string{\"ID\", \"NAME\", \"DESCRIPTION\", \"CREATED_AT\"}\n\trows := [][]string{{\n\t\tstrVal(skill, \"id\"),\n\t\tstrVal(skill, \"name\"),\n\t\tstrVal(skill, \"description\"),\n\t\tstrVal(skill, \"created_at\"),\n\t}}\n\tcli.PrintTable(os.Stdout, headers, rows)\n\treturn nil\n}\n","sourceCodeStart":257,"sourceCodeEnd":293,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_skill.go#L257-L293","documentation":"Returned by `multica skill get <id>` when the HTTP GET /api/skills/<id> via client.GetJSON fails. Beyond transport failures, this is the standard path for a not-found skill id: the server's 404 is wrapped into this error. The command aborts before any table/JSON output.","triggerScenarios":"Requesting a skill id that was deleted, belongs to another workspace, or has a typo; also fires for the same transport/auth causes as list (server down, expired token).","commonSituations":"Scripts holding stale skill ids after a workspace reset; ids copied across profiles/environments where they don't exist; token scoped to a different workspace.","solutions":["List valid ids first: `multica skill list` and copy the exact id.","If the id is correct, check auth (`multica login`) and server reachability.","Confirm you are on the right profile — ids are per-deployment.","Handle 404 in automation by re-resolving ids from skill list instead of hardcoding."],"exampleFix":"# before\nmultica skill get abc123\n# after: resolve the id dynamically\nmultica skill list --output json | jq -r '.[] | select(.name==\"lint\") | .id'","handlingStrategy":"validation","validationCode":"# Resolve the id from the authoritative list before get\nSKILL_ID=$(multica skill list --output json | jq -r --arg n \"$NAME\" '.[] | select(.name==$n) | .id')\n[ -n \"$SKILL_ID\" ] || { echo \"skill '$NAME' not found\"; exit 2; }\nmultica skill get \"$SKILL_ID\"","typeGuard":null,"tryCatchPattern":"Treat 'get skill:' wrapping a 404 as a not-found signal: re-resolve the id via skill list, and only escalate to connectivity/auth checks if list also fails.","preventionTips":["Never hardcode skill ids in automation; resolve by name at runtime.","Remember ids are scoped per server/workspace and profile.","Re-check ids after workspace resets or server reinstalls."],"tags":["go","cli","http","not-found","skills"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}