Git for
agent runs.

Capture from a model, framework callback, CLI agent, or existing trace. Keep portable, verifiable history you can inspect, fork, replay, promote, and export to your OpenTelemetry stack.

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.7.0 · Interop & Adoption Release

Capture once.
Ship anywhere.

Start a captured model run from one command, export verified history directly to OpenTelemetry, and operate the full v3 provenance workflow from the CLI without changing either storage format. Data written by v0.3 through v0.6 stays readable: .tine files remain format v2 and repository objects remain v3.

First run, no Python file

Call any bundled native or hosted-compatible adapter from the CLI and save the resulting run as a portable artifact.

tine run --model openai:gpt-5.6 --prompt "Explain this branch" --save first.tine

OpenTelemetry, out in one command

Write a modern OTLP/JSON GenAI document or send it to an OTLP/HTTP collector with explicit transport safeguards.

tine export first.tine --output spans.json

Modern telemetry content

Exports carry semconv 1.36 structured messages alongside legacy attributes, complete usage dimensions, a schema URL, and per-event span kinds.

tine export first.tine --endpoint http://127.0.0.1:4318

The v3 workflow, now at the terminal

Inspect, branch, compare, search, evaluate, attest, and promote repository runs with operator- and CI-friendly verbs introduced in v0.6.

tine repo-diff heads/main experiments/terse --repo . --exit-code

Reproduction becomes a gate

Verify cached replay with a binary exit status, or run an external harness twice to surface nondeterministic drift.

tine replay first.tine --verify

One automation contract

Pricing, export, run receipts, and existing machine-readable surfaces share one serializer. Grok 4.6 is priced; GLM 5.3 stays visibly unknown until a verified rate exists.

tine pricing check --json

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.3 · cost unknown
xAIGrok 4.6
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.7. 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.