opentine v0.2.0: trusted, searchable agent artifacts
opentine 0.2.0 is the release where a saved agent run becomes something you can operate, not merely inspect.
The first public beta established the core: record execution as a portable .tine artifact, verify its checksum, fork from known history, replay recorded work, and diff branches. Version 0.2 keeps that model and adds the lifecycle around it.
Format v2, without abandoning v1
.tine format v2 carries the new budget, draft, usage, tag, and signature data needed by this release. Run.load still reads v1 artifacts and migrates them in memory. Nothing is rewritten simply because you inspected an old run.
tine migrate old.tine --dry-run
tine migrate old.tine --save upgraded.tine
Migration verifies the source first. Re-saving a v1 artifact writes v2, so keep the original when an older 0.1.x client still needs to read it.
Find the run that matters
Runs can now carry tags without changing their content digest or signature. A rebuildable local index powers filters and a compact query language.
tine tag result.tine --add prod --add regression
tine search "tag:prod model:claude cost:>0.05"
tine ls --status failed --since 2026-06-01
The index is a convenience, not a second source of truth. Delete it and tine reindex reconstructs it from the artifacts in .tine_runs.
Know what a run spent
Version 0.2 records per-step usage and exposes total tokens, cost breakdowns, and budget state.
tine cost result.tine
Native agents can enforce a budget with either a recorded halt or a caller-visible exception. The policy is stored inside the artifact digest, so the constraint that governed a run travels with the run.
Save before the process ends
Long runs should not depend on a clean process exit. Autosave writes atomic draft checkpoints and flushes a clean final artifact when execution completes.
from opentine import Agent
from opentine.models.anthropic import Anthropic
model = Anthropic()
agent = Agent(model=model, autosave_path="latest.tine", autosave_every_n_steps=1)
run = agent.run_sync("Complete the task")
tine run --harness codex --prompt "Inspect this repo" --autosave codex.tine
The draft flag is integrity-protected. A consumer can distinguish a checkpoint from a completed artifact instead of guessing from a filename.
Sign what you ship
Checksums detect corruption. Signatures let a verifier check that artifact content matches a key they trust. HMAC-SHA256 uses the standard library; Ed25519 is available through the crypto extra.
export TINE_KEY="a-long-secret-value"
tine sign result.tine --key-env TINE_KEY --key-id prod
tine verify result.tine --key-env TINE_KEY
Mutable metadata such as tags does not invalidate the signature. The content that describes the run does.
Diff the fields, not just the shape
tine diff now aligns steps by lineage position and reports field-level before-and-after values. That includes changes in outputs, errors, tool metadata, usage, and cost even when the surrounding graph is familiar.
tine diff failed.tine fixed.tine
That closes the loop: find the run, verify it, fork it, compare the repair, and retain both branches as evidence.
The beta contract
opentine remains a public beta. The core .tine operations, checksum verification, secure tool defaults, Ollama, Codex CLI, and Kimi Code CLI have explicit validation gates. Other providers and harnesses remain scoped compatibility targets until their own live gates pass.
Install the release from PyPI and read the complete 0.2.0 changelog.