← Back to blog

Introducing opentine

0xcircuitbreaker··5 min read

Every agent framework today treats execution as ephemeral. Your agent runs, does its thing, and the execution vanishes into stdout. If it fails, you start over. If it succeeds, you have no way to understand why, reproduce it, or build on it.

I built opentine because I believe every agent run should be a first-class artifact — like a git commit, not like a process that exited.

The core abstraction is the Run Tree. Every step your agent takes is recorded as a node in a tree. Each node is content-addressed: hashed from its inputs, model config, and tool configuration. This means identical steps are automatically deduplicated, and you can verify the integrity of any run.

But the real power is in what you can do with this tree:

Fork it. When your agent fails at step 23, fork from step 22 with a different prompt. The first 22 steps are cached — you don't re-run them, and you don't re-pay for them.

Replay it. Re-execute any run from any step. With temperature 0, you get deterministic replay. Without it, you get informative replay that shows you the distribution of possible outcomes.

Resume it. Serialize the entire state to a .tine file, move it to another machine, and pick up where you left off. The run is the artifact, not the process.

Diff it. Compare two runs step-by-step. See exactly where they diverged and why.

This is what opentine does. 250 lines of core Python. No framework overhead. No vendor lock-in. Any model.

I'm releasing it today under Apache 2.0. I'd love your feedback.