API Reference

Complete SDK reference for the spooled Python package (v0.3.1).

spooled.init()

Initialize Spooled and start recording.

def init(
    agent_id: Optional[str] = None,
    *,
    auto_instrument: bool = False,
    session_id: Optional[str] = None,
    parent_run_id: Optional[str] = None,
    correlation_context: Optional[Dict[str, str]] = None,
    sample_rate: Optional[float] = None,
    tags: Optional[list] = None,
    exporters: Optional[list] = None,
    **kwargs: Any,
) -> Recorder
ParameterTypeDefaultDescription
agent_idOptional[str]NoneAgent identifier. Falls back to SPOOLED_AGENT_ID env var, then "default"
auto_instrumentboolFalseEnable monkey-patching of supported libraries (deprecated — use explicit wrappers)
session_idOptional[str]NoneMulti-agent session correlation ID
parent_run_idOptional[str]NoneParent trace ID for child/spawned agents
correlation_contextOptional[Dict[str, str]]NoneKey-value context for multi-agent correlation
sample_rateOptional[float]NoneOverride SPOOLED_SAMPLE_RATE (0.0–1.0)
tagsOptional[list]NoneTags for fleet grouping and filtering
exportersOptional[list]NoneCustom exporters (e.g., SpooledOTELExporter)

spooled.shutdown()

def shutdown(success: bool = True) -> None

Flush and close the recorder. Call this when your agent finishes. Pass success=False if the agent failed.

spooled.spawn()

def spawn(agent_id: str, **kwargs: Any) -> Recorder

Create a child recorder from the global recorder. The child shares the same session_id and links via parent_run_id. Used for multi-agent orchestration.

Decorators

@spooled.trace()

@spooled.trace(agent_id="my_agent")
def run_agent(query: str):
    ...

Wraps a function as a traced agent run. Automatically calls init() before and shutdown() after. Recommended over manual init/shutdown.

@spooled.tool()

@spooled.tool()
def search(query: str):
    ...

Marks a function as a tool call. Records input shapes, output shapes, latency, and errors.

@spooled.observe()

@spooled.observe()
def validate(result):
    ...

Marks a function as an observation point. Records execution without modifying behavior.

Recorder class

class Recorder:
    def __init__(
        self,
        agent_id: str,
        backend_url: Optional[str] = None,
        buffer_size: int = 100,
        flush_interval: float = 5.0,
        session_id: Optional[str] = None,
        parent_run_id: Optional[str] = None,
        correlation_context: Optional[Dict[str, str]] = None,
        sample_rate: Optional[float] = None,
        tags: Optional[List[str]] = None,
        fingerprint_mode: Optional[str] = None,
        exporters: Optional[List[Any]] = None,
    ) -> None

record_interaction()

def record_interaction(
    self,
    interaction_type: InteractionType,
    input_data: Dict[str, Any],
    output_data: Optional[Dict[str, Any]] = None,
    error: Optional[str] = None,
    metadata: Optional[Dict[str, Any]] = None,
    parallel_group: Optional[str] = None,
) -> Interaction
ParameterTypeDescription
interaction_typeInteractionTypeLLM_CALL, TOOL_CALL, HTTP_REQUEST, or OTHER
input_dataDict[str, Any]Input to the interaction (prompt, function args, URL)
output_dataOptional[Dict]Output from the interaction (response, result)
errorOptional[str]Error message if the interaction failed
metadataOptional[Dict]Additional metadata (latency_ms, tokens, status_code)
parallel_groupOptional[str]Group ID for concurrent interactions

InteractionType enum

class InteractionType(str, Enum):
    LLM_CALL = "LLM_CALL"
    TOOL_CALL = "TOOL_CALL"
    HTTP_REQUEST = "HTTP_REQUEST"
    OTHER = "OTHER"

Auto-instrumented libraries

LibrarySyncAsync
OpenAI
Anthropic
requests
httpx
aiohttp
AWS Bedrock

Framework integrations

FrameworkIntegration class
LangChainSpooledLangChainCallbackHandler
LlamaIndexSpooledLlamaIndexCallbackHandler
AutoGeninstall_autogen_hook(recorder)

Install with pip install spooled-ai[integrations]. See Frameworks for usage details.