JuliusBrussee/caveman · error · Error

cave_conversation_in_use

cave_conversation_in_use

Error message

cave_conversation_in_use

What it means

Concurrency guard in beginConversation: the conversation's state is already busy — another run/stream is currently using this Conversation, and re-entrant turns would corrupt message history and fingerprints.

Source

Thrown at packages/agent/src/runtime.ts:305

export function createConversation(): Conversation {
  return new Conversation();
}

type ConversationTransaction = {
  readonly owner: Conversation;
  readonly sessionId: string;
  messages: AgentMessage[];
  fingerprint: string | undefined;
  cachePrefixDigest: string | undefined;
  providerFrozen: ProviderFrozenView | undefined;
  originalFrozen: ProviderFrozenView | undefined;
};

function beginConversation(owner: Conversation): ConversationTransaction {
  const state = conversationStates.get(owner);
  if (!state) throw new Error("cave_conversation_invalid");
  if (state.busy) throw new Error("cave_conversation_in_use");
  const transaction: ConversationTransaction = {
    owner,
    sessionId: state.sessionId,
    messages: structuredClone(state.messages),
    fingerprint: state.fingerprint,
    cachePrefixDigest: state.cachePrefixDigest,
    providerFrozen: state.providerFrozen === undefined
      ? undefined
      : structuredClone(state.providerFrozen),
    originalFrozen: state.originalFrozen === undefined
      ? undefined
      : structuredClone(state.originalFrozen),
  };
  state.busy = true;
  return transaction;
}

function commitConversation(

View on GitHub (pinned to 766dce6b13)

Solutions

  1. Await the in-flight run on this Conversation before starting another
  2. Use a separate createConversation() per concurrent session
  3. Serialize access with a queue keyed by conversation
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at packages/agent/src/runtime.ts:305 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of JuliusBrussee/caveman@766dce6b13 (2026-08-18). Data as JSON: /api/errors/91648690736a7c84. Report an issue: GitHub.