Git for
agent runs.

Capture native runs, framework callbacks, or existing traces as portable artifacts and verified repositories you can inspect, fork, attest, exchange, and synchronize.

Get startedView on GitHub
tine
$

The problem

Your agent failed after
10 minutes. Now what?

Logs lose the graph

Your agent ran 47 tool calls over 10 minutes. Something went wrong at step 23, but a flat transcript does not preserve a branchable execution state.

Retries repeat good work

The first 22 steps were useful. Without a reusable prefix, repairing the failure can mean repeating the same calls, tokens, and elapsed time.

Failures are hard to hand off

A screenshot shows terminal output, not the exact graph, inputs, policy, usage, and provenance a teammate needs to inspect the same state.

The solution

Make every run a graph
you can navigate.

Every step content-addressed. Every branch explicit. Every artifact portable, verifiable, and ready for supported replay or scoped resumption.

research.py
1from opentine import Agent
2from opentine.models.anthropic import Anthropic
3from opentine.tools.search import search
4from opentine.tools.web import fetch
5
6agent = Agent(model=Anthropic("claude-sonnet-5"), tools=[search, fetch])
7run = agent.run_sync("Research quantum error correction")
8run.save("research.tine")

Run Graph

output: reportthink: synthesizetool: read_pagethink: analyze resultstool: web_searchoutput: report v2tool: web_searchthink: replanfork: retry with GPT-5.6think: plan researchrun_abc

Current release · v0.5.0 · Ecosystem Release

Capture live.
Exchange cleanly.

Export verified runs as OpenTelemetry GenAI spans, import framework and telemetry traces from the CLI, and capture LangChain or LangGraph live without changing the artifact formats. Existing v0.3 and v0.4 data stays readable: .tine files remain format v2 and repository objects remain v3.

Live LangChain + LangGraph capture

One optional callback handler records chains, graph nodes, models, tools, retrievers, usage, and errors into a finalized v3 run as the invocation happens.

pip install "opentine[langchain]==0.5.0"

OpenTelemetry GenAI export

Render a portable run, repository run, or TraceEvents as GenAI spans or a complete OTLP/JSON document in the same shape opentine imports.

to_otel_genai_document(run, service_name="agent")

Trace import from the shell

Bring OTel, OpenTine JSONL, LangChain, LlamaIndex, AutoGen, CrewAI, or OpenAI Agents logs into a portable artifact, a repository ref, or both.

tine import trace.json --format otel-json --save run.tine

Stable JSON for automation

Show, verify, list, search, and cost commands can emit one documented JSON object while the human-readable output remains the default.

tine verify run.tine --json

Modern telemetry content

The OTel importer now understands span events, log records, structured message attributes, and common OpenLLMetry and OpenInference shapes.

tine import spans.json --format otel-spans --repo .

Compatibility, now release-gated

Golden fixtures prove that v0.3 and v0.4 artifacts and repositories still load and verify. The package also ships py.typed for downstream type checkers.

tine verify legacy-v0.4.tine

The debugging loop

Three commands.
One legible branch.

Inspect the failure, preserve the trusted prefix, then compare the branch field by field. Live reruns remain explicit through a native runtime or harness.

tine — forked_debug
$
1

Inspect the recorded failure

2

Fork the known-good prefix

3

Diff the attempted repair

Model + runtime coverage

Current models. One protocol.

Native adapters, provider-scoped compatible transports, and local-runtime presets share one agent surface. Model IDs pass through; exact billing is attached only when a signed catalog card matches.

OpenAIGPT-5.6
AnthropicClaude 5
GoogleGemini 3.5
OllamaLocal models
KimiK3 / K2.7
DeepSeekV4
GLM / Z.AIGLM-5.2
xAIGrok 4.5
QwenQwen 3.7
MistralMistral / Ministral
Groq + TogetherHosted open models
HermesNous / OpenRouter
swap.py
# Swap models with one line. Same agent, same tools.
from opentine.models.anthropic import Anthropic
from opentine.models.openai import OpenAI
from opentine.models.google import Google
from opentine.models.ollama import Ollama

agent = Agent(model=OpenAI("gpt-5.6"), tools=tools)
agent = Agent(model=Anthropic("claude-sonnet-5"), tools=tools)
agent = Agent(model=Google("gemini-3.5-flash"), tools=tools)
agent = Agent(model=Ollama("qwen3"), tools=tools)

Local presets include LM Studio, vLLM, Unsloth, llama.cpp, LocalAI, Jan, SGLang, TGI, MLX-LM, NVIDIA NIM, TensorRT-LLM, KoboldCpp, and LiteLLM. Tool calling, reasoning, multimodal input, and usage reporting still depend on the loaded model and server configuration.

Where opentine fits

A provenance bridge,
not another orchestrator.

LangChain, LangGraph, CrewAI, provider SDKs, and custom agents decide how work runs. OpenTelemetry and dashboards help operate it. opentine records the portable, verifiable history between them—capturing live where supported, importing existing traces, and exporting verified runs back to OpenTelemetry.

  1. Path 01

    Capture

    Meet the run where it happens.

    Record natively, attach the LangChain/LangGraph callback, wrap a CLI agent, or import a supported trace after the fact.

    Recorder · live callbacks · harnesses · trace import

  2. Path 02

    Preserve

    Keep evidence outside the runtime.

    Store portable .tine v2 artifacts or verified v3 repository history with lineage, usage, cost, and integrity evidence.

    .tine v2 · repository v3 · signatures · refs

  3. Path 03

    Act + exchange

    Use the history, then send it on.

    Verify, fork, diff, replay, automate with JSON, or export OpenTelemetry GenAI spans to the observability stack you already run.

    verify · fork · diff · --json · OTel export

Cross-cutting provenance · opentine

Keep the framework and telemetry stack.

LangChain and LangGraph can be captured live. CrewAI and the other supported framework formats import after the fact in v0.5. Verified runs can flow back out as OpenTelemetry GenAI without turning opentine into another orchestrator or hosted dashboard.

your runtime → durable provenance → your observability backend

Enterprise foundation

Own the repository.
Define the boundary.

Verified repository objects

Typed SHA-256 identities, immutable envelopes, causal links, and deep fsck make repository corruption visible.

Tenant-scoped authorization

Reader, writer, and admin roles sit behind static development tokens or pluggable OIDC/JWKS verification.

Encrypted self-hosting

The reference remote encrypts stored objects, supports KMS seams, and records a hash-chained audit trail.

Pluggable control points

Storage, indexing, identity, authorization, keys, audit, retention, and admission policies have explicit interfaces.

The repository and extension seams are the enterprise foundation. The bundled WSGI server is a bounded reference deployment for development and small self-hosted installations—not a turnkey HA service or hosted control plane.