{"record":{"id":"d2673be9f2a81d0c","repo":"JuliusBrussee/caveman","slug":"usage-caveman-proxy-usage-import-codex-claude","errorCode":null,"errorMessage":"usage: caveman-proxy usage import codex|claude","messagePattern":"usage: caveman-proxy usage import codex\\|claude","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"proxy/cmd/caveman-proxy/main.go","lineNumber":480,"sourceCode":"\tdefault:\n\t\tfatalJSON(logger, fmt.Errorf(\"unknown trial subcommand: %s\", sub))\n\t}\n}\n\nfunc runUsage(logger *slog.Logger, args []string) {\n\tif len(args) == 0 {\n\t\tfatalJSON(logger, fmt.Errorf(\"usage: caveman-proxy usage import|link|refresh|unlink <provider>\"))\n\t}\n\tsub := args[0]\n\targs = args[1:]\n\thome := mustHome(logger)\n\tspend := mustStore(logger, home)\n\tdefer spend.Close()\n\tprovider := firstPositional(args)\n\tswitch sub {\n\tcase \"import\":\n\t\tif provider == \"\" {\n\t\t\tfatalJSON(logger, fmt.Errorf(\"usage: caveman-proxy usage import codex|claude\"))\n\t\t}\n\t\tpath := argFlag(args, \"--path\", \"\")\n\t\tsince := argFlag(args, \"--since\", \"\")\n\t\tswitch provider {\n\t\tcase \"codex\":\n\t\t\tout, err := spend.ImportCodex(path, since)\n\t\t\tif err != nil {\n\t\t\t\tfatalJSON(logger, err)\n\t\t\t}\n\t\t\tprintJSON(out)\n\t\tcase \"claude\":\n\t\t\tout, err := spend.ImportClaude(path, since)\n\t\t\tif err != nil {\n\t\t\t\tfatalJSON(logger, err)\n\t\t\t}\n\t\t\tprintJSON(out)\n\t\tdefault:\n\t\t\tfatalJSON(logger, fmt.Errorf(\"unknown usage source: %s\", provider))","sourceCodeStart":462,"sourceCodeEnd":498,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/proxy/cmd/caveman-proxy/main.go#L462-L498","documentation":"The `usage import` subcommand requires a provider positional (codex or claude) and none was supplied. fatalJSON prints this usage line and exits 1 before any import runs.","triggerScenarios":"Running `caveman-proxy usage import --path ~/logs` without the provider token; flags present but positional missing, since firstPositional only sees non-flag args.","commonSituations":"Reordered arguments copied from a different tool's syntax; provider supplied as --provider claude (a flag) instead of a positional; empty PROVIDER variable in scripts.","solutions":["Add the provider positional: caveman-proxy usage import claude --path ... --since ...","Verify provider spelling — exactly codex or claude","In scripts, assert the variable is set before invoking"],"exampleFix":"# before\ncaveman-proxy usage import --path ~/codex.jsonl\n\n# after\ncaveman-proxy usage import codex --path ~/codex.jsonl","handlingStrategy":"validation","validationCode":"if [ -z \"$PROVIDER\" ]; then echo \"provider required: codex|claude\" >&2; exit 2; fi\ncaveman-proxy usage import \"$PROVIDER\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Provider is a positional, not a flag — argument order matters","Validate provider against the literal set codex|claude in wrappers","Assert variables are set before CLI calls"],"tags":["cli","usage-error","exit-1"],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}