Signed repository claims
Authenticate an attestation's target, claim, signer, and evidence with an operator-controlled HMAC or Ed25519 key.
tine attest --helpCapture 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.
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.9.1 · Signed Trust & Security
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.
Authenticate an attestation's target, claim, signer, and evidence with an operator-controlled HMAC or Ed25519 key.
tine attest --helpSelect 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_KEYExplicit 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"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 --jsonRecompute 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 --jsonSelect 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-22Apply 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.tineThe additive opentine-pricing/2 schema supports UTC schedules and weekday or weekend scopes; older catalogs and overlays still load.
tine pricing show deepseek deepseek-chatNative, 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
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
Optional capture layer · 30 named providers
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.
# 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
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 OpenTelemetry with provider, model, and usage intact.
Recorder · live callbacks · harnesses · OTel 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, 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
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
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.