Git for
agent runs.

Capture from any model, framework, CLI agent, or existing trace. Record provider, model, usage, and lineage as portable facts—then verify, fork, replay, export, or price the run later.

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.9.1 · Signed Trust & Security

Sign the claim.
Verify the gate.

Sign repository attestations, verify the signer and claim behind a release gate, and operate captured history with stronger redaction, bounded imports, and hardened tool policies. Data written by v0.3.0 through v0.9.0 stays readable: .tine files remain format v2 and repository objects remain v3.

Signed repository claims

Authenticate an attestation's target, claim, signer, and evidence with an operator-controlled HMAC or Ed25519 key.

tine attest --help

Scoped verification gates

Select the signer and claim an approval gate requires. At least one selected attestation must verify with the trusted key.

tine repo-verify heads/main --signer release-team --claim '{"approved":true}' --key-env OPENTINE_SIGNING_KEY

Security across capture and storage

Explicit JSON harness capture, stronger redaction, bounded imports, hardened git policies, and safer remote pack handling ship without a format change.

tine run --harness codex --harness-arg --json --prompt "Inspect this repo"

Provider becomes recorded provenance

Every model step records provider beside model and usage. The field is opaque: verification, fork, diff, and replay do not branch on it.

tine show first.tine --json

Price after capture

Recompute cost from the signed catalog without rewriting the run. Unknown provider, model, or usage stays unknown instead of becoming a false zero.

tine price first.tine --json

Historical pricing is explicit

Select the catalog date with --at while each recorded timestamp still selects any peak or off-peak window that applied to that step.

tine price first.tine --at 2026-08-22

Import and price in one pass

Apply catalog pricing to fresh OpenTelemetry events before they are first written, preserving source-reported cost and honest unknown states.

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

Peak and off-peak rate cards

The additive opentine-pricing/2 schema supports UTC schedules and weekday or weekend scopes; older catalogs and overlays still load.

tine pricing show deepseek deepseek-chat

Thirty nameable providers

Native, hosted-compatible, Ollama, and thirteen conventional local-server presets share the no-code capture entry point.

tine run --model lmstudio:qwen3 --prompt "Summarize this branch"

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

Optional capture layer · 30 named providers

Any provider. One recorded shape.

The core records provider, model, and usage as opaque facts. Native adapters, hosted-compatible transports, and local presets are capture conveniences; OpenTelemetry remains the universal on-ramp when no adapter is involved.

OpenAIGPT-5.6
AnthropicClaude Opus 5
GoogleGemini 3.5
OllamaLocal models
KimiK3 / K2.7
DeepSeekV4 · scheduled rates
GLM / Z.AIGLM-5.3 · cost unknown
xAIGrok 4.6
QwenQwen 3.8 Max
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-opus-5"), tools=tools)
agent = Agent(model=Google("gemini-3.5-flash"), tools=tools)
agent = Agent(model=Ollama("qwen3"), tools=tools)

Nameable local presets include LM Studio, vLLM, Unsloth, llama.cpp, LocalAI, Jan, SGLang, TGI, MLX-LM, NVIDIA NIM, TensorRT-LLM, KoboldCpp, and LiteLLM, alongside Ollama. They record API cost as unmetered by default (LiteLLM stays unknown because it can proxy paid backends). 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 OpenTelemetry with provider, model, and usage intact.

    Recorder · live callbacks · harnesses · OTel 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, price from a signed catalog, automate with JSON, or export OpenTelemetry GenAI spans to the stack you already run.

    verify · fork · diff · price · --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.8, provider, model, and usage stay recorded data rather than control flow, so verified runs can move through OpenTelemetry 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.