Open Source

Git for
agent runs.

Record, verify, fork, replay, and diff portable agent run artifacts. Native agents plus scoped external CLI harnesses.

tine
$

The problem

Your agent failed after
10 minutes. Now what?

No way to debug

Your agent ran 47 tool calls over 10 minutes. Something went wrong at step 23. You have a log file and a prayer.

No way to retry from step 7

The first 22 steps were fine. But you can't go back. You re-run the whole thing, burning tokens and time.

No way to share the failing state

Your teammate wants to reproduce it. You send them a screenshot of terminal output. They spend 30 minutes getting to the same failure.

The solution

Make every run a tree
you can navigate.

Every step content-addressed. Every branch forkable. Every run resumable on any machine.

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-4-20250514"), tools=[search, fetch])
7run = agent.run_sync("Research quantum error correction")
8run.save("research.tine")

Run Tree

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

The killer demo

Three commands.
Night and day.

Your agent failed. Fork from the last good step, edit the prompt, replay. Cached steps are free. The fix costs pennies.

tine \u2014 forked_debug.py
$
1

Agent fails at step 8

2

Fork from step 5 with a new prompt

3

New branch succeeds in 3 steps

Universal

Any model. Same code.

No first-class model. No vendor lock-in. Every adapter implements the same protocol. Swap providers with a single line change.

AnthropicClaude
OpenAIGPT / o-series
GoogleGemini
MetaLlama via Ollama
MistralMistral / Mixtral
CompatOpenAI-style APIs
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=Anthropic("claude-sonnet-4-20250514"), tools=tools)
agent = Agent(model=OpenAI("gpt-4o"), tools=tools)
agent = Agent(model=Google("gemini-2.0-flash"), tools=tools)
agent = Agent(model=Ollama("llama3.1"), tools=tools)

Lean

Focused primitives vs.
framework sprawl.

Most agent frameworks ship the kitchen sink. opentine ships the primitive. Build what you need on top.

FrameworkInstall SizeLOCVendor Lock-inForkable Runs
LangChain166 MB405kMixedNo
LangGraph51 MB37kMixedPartial
CrewAI173 MB18kYesNo
smolagents198 MB8kNoNo
opentine<5 MBFocusedNoYes

For teams

Built for production
agent infrastructure.

Audit-grade run trees

Every step is content-addressed and immutable. Reconstruct any decision your agent made, when it made it, and what it saw.

On-prem deployable

Zero external dependencies at runtime. No SaaS, no telemetry, no phone-home. Runs wherever Python runs.

No telemetry

We don't collect anything. No usage data, no error reporting, no analytics. Your runs are yours.

Apache 2.0

Use it, fork it, sell it, embed it. No CLA, no AGPL surprise, no relicensing risk. Permissive from day one.