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.tineCapture 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.
The problem
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.
The first 22 steps were useful. Without a reusable prefix, repairing the failure can mean repeating the same calls, tokens, and elapsed time.
A screenshot shows terminal output, not the exact graph, inputs, policy, usage, and provenance a teammate needs to inspect the same state.
The solution
Every step content-addressed. Every branch explicit. Every artifact portable, verifiable, and ready for supported replay or scoped resumption.
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
Current release · v0.7.0 · Interop & Adoption Release
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.
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.tineWrite a modern OTLP/JSON GenAI document or send it to an OTLP/HTTP collector with explicit transport safeguards.
tine export first.tine --output spans.jsonExports 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:4318Inspect, 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-codeVerify cached replay with a binary exit status, or run an external harness twice to surface nondeterministic drift.
tine replay first.tine --verifyPricing, 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 --jsonThe debugging loop
Inspect the failure, preserve the trusted prefix, then compare the branch field by field. Live reruns remain explicit through a native runtime or harness.
Inspect the recorded failure
Fork the known-good prefix
Diff the attempted repair
Model + runtime coverage
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.
# 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
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.
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
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
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
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
Typed SHA-256 identities, immutable envelopes, causal links, and deep fsck make repository corruption visible.
Reader, writer, and admin roles sit behind static development tokens or pluggable OIDC/JWKS verification.
The reference remote encrypts stored objects, supports KMS seams, and records a hash-chained audit trail.
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.