{"record":{"id":"8fac1ac52ebf06a1","repo":"JuliusBrussee/caveman","slug":"cave-claude-max-budget-invalid","errorCode":null,"errorMessage":"cave_claude_max_budget_invalid","messagePattern":"cave_claude_max_budget_invalid","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/agent/src/claude-runtime.ts","lineNumber":111,"sourceCode":"  }\n  if (definition.memory !== undefined) {\n    throw new Error(\"cave_claude_memory_bridge_unavailable\");\n  }\n  if (definition.tools.some((item) => item.runtime?.kind === \"subagent\")) {\n    throw new Error(\"cave_claude_subagent_bridge_unavailable\");\n  }\n  const unsupportedTool = definition.tools.find((item) =>\n    item.effect !== \"read\" || item.result !== \"inline\");\n  if (unsupportedTool !== undefined) {\n    throw new Error(`cave_claude_tool_contract_unsupported:${unsupportedTool.name}`);\n  }\n  if (options.maxTurns !== undefined &&\n      (!Number.isSafeInteger(options.maxTurns) || options.maxTurns <= 0 || options.maxTurns > 1_000)) {\n    throw new Error(\"cave_claude_max_turns_invalid\");\n  }\n  if (options.maxBudgetUsd !== undefined &&\n      (!Number.isFinite(options.maxBudgetUsd) || options.maxBudgetUsd <= 0)) {\n    throw new Error(\"cave_claude_max_budget_invalid\");\n  }\n  const rootDir = resolve(options.rootDir ?? process.cwd());\n  const lowered = await lowerAgentContext(definition, { rootDir, input });\n  const bill = contextBill(lowered.ir);\n  const selected = resolveClaudeModel(definition, rootDir);\n  const reasoningOptions = claudeReasoningOptions(\n    selected,\n    definition.reasoning,\n    definition.output?.maxTokens,\n  );\n  const sandbox = await prepareHarnessToolSandbox(definition, {\n    rootDir,\n    ...(options.entryPath === undefined ? {} : { entryPath: options.entryPath }),\n  });\n  const controller = new AbortController();\n  const abort = () => controller.abort(options.signal?.reason ?? new Error(\"cave_run_aborted\"));\n  options.signal?.addEventListener(\"abort\", abort, { once: true });\n  if (options.signal?.aborted) abort();","sourceCodeStart":93,"sourceCodeEnd":129,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/packages/agent/src/claude-runtime.ts#L93-L129","documentation":"Error \"cave_claude_max_budget_invalid\" thrown in JuliusBrussee/caveman.","triggerScenarios":"Thrown at packages/agent/src/claude-runtime.ts:111 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set maxBudgetUsd to a positive number for the Claude run."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}