← Back to blog

Introducing opentine

0xcircuitbreaker··5 min read

Every agent framework can show you a stream of activity. The harder question is what remains when the process exits.

Editor's note - August 17, 2026: This introduction predates the repository, Surface, and Interop & Adoption releases. Its model example remains current in v0.7; the shipped surface now includes v3 repository commands, OpenTelemetry import/export and OTLP push, live LangChain/LangGraph capture, and no-code tine run --model capture.

I built opentine because an agent run should be a first-class artifact: something you can inspect, verify, move, fork, replay, and compare.

The run is the unit of work

An opentine run is stored as a content-addressed graph of model calls, tool calls, outputs, errors, cache provenance, and transcript state. Save it as a .tine file and the history travels with the result.

from opentine import Agent
from opentine.models.anthropic import Anthropic

agent = Agent(model=Anthropic("claude-sonnet-5"))
run = agent.run_sync("What is opentine?")
run.save("result.tine")

The CLI gives that artifact a small set of graph operations:

tine show result.tine
tine verify result.tine
tine fork result.tine --from-step 0 --save forked.tine
tine replay result.tine --mode cache
tine diff result.tine forked.tine

Why a file matters

If history exists only inside a hosted dashboard, the dashboard owns the useful representation. A local artifact changes the boundary. You decide where it lives, who receives it, and which tools inspect it.

The .tine format records enough state for supported replay and scoped resumption workflows. It does not claim every external trace can be converted into a fully resumable runtime. The capability depends on what the producer recorded and which runtime or harness is available.

Why content addressing matters

Steps are identified from canonical immutable payloads. Parent links make the artifact a graph rather than a flat log. Shared prefixes can be reused, integrity can be checked, and a diff can identify the point where two branches diverged.

A focused primitive

opentine does not try to replace every orchestration framework. It provides a portable provenance layer for native agents, scoped external CLI harnesses, live LangChain/LangGraph callbacks, and supported post-hoc trace imports. Those paths do not all promise the same completeness or resumability, so each boundary remains explicit.

That narrower promise is the point. Trust starts with saying exactly what an artifact contains and exactly which operations have been validated.

Every run should leave behind more than stdout. It should leave an artifact.