Showcase / opentine v0.9.1

The artifact layer, put to work.

Record provider, model, and usage without binding provenance to a provider. Capture through any of 30 nameable adapters or import an OpenTelemetry trace, price the same record after the fact, and keep it portable across runtimes. Then see ecosystem projects build on the artifact layer—with their current compatibility boundaries intact.

10v0.9.1 workflows
02published integrations
01source experiment
02companion apps
07core examples

v0.9.1 current-release workflows

Provenance across the ecosystem.

These 10 workflows ship in the core opentine release for v0.9.1. Together they cover provider-aware, model-agnostic capture, 30 hosted and local provider names, post-hoc and time-of-day pricing, OpenTelemetry interop, the v3 operator surface, deterministic replay, live framework capture, transport, and cost evidence without changing the v2 or v3 formats.

01v0.9.1 core

Trust workflow in v0.9.1

Signed claims and approval gates

Authenticate repository attestations and evaluate an approval gate against a selected signer and claim.

Current core · repository v3

Signing is opt-in. Existing unsigned attestations keep their identities. Signature presence in search requires trusted-key verification before accepting a claim.

  • HMAC-SHA256 and Ed25519 bind target, claim, signer, and evidence.
  • Signer/claim selection prevents unrelated attestations from satisfying or blocking a scoped gate.
  • 523 conformance vectors provide executable evidence for independent format implementations.
Verify an authenticated approvalshell
tine repo-verify heads/main --repo . --signer release-team --claim '{"approved":true}' --key-env OPENTINE_SIGNING_KEY --json
tine repo-search --repo . --signed-only --json
02v0.8.0 core

Model-Agnostic Core in v0.8.0

Provider-aware, model-agnostic capture

Record provider, model, and usage as opaque provenance without making any artifact operation depend on a model vendor. Capture through a bundled adapter or use OpenTelemetry as the universal, adapter-free on-ramp.

Available in current core · portable v2 · repository v3

The provider field is additive. Artifacts and repositories written by v0.3.0 through v0.7.2 remain readable, and pre-v0.8 artifacts keep their original bytes when re-serialized.

  • Every model step records provider beside model and usage; verify, fork, diff, and replay treat all three as opaque recorded content.
  • tine run --model accepts 30 provider names across native cloud, hosted-compatible, Ollama, and conventional local-server adapters.
  • vLLM, LM Studio, SGLang, TGI, LiteLLM, MLX-LM, NVIDIA NIM, TensorRT-LLM, KoboldCpp, Jan, LocalAI, Unsloth, and llama.cpp are one-command local capture targets.
  • OpenTelemetry import needs no bundled model adapter or rate card, while tine export still sends the resulting history back as modern OTLP/JSON GenAI.
Two capture paths, one artifact layershell
tine run --model lmstudio:qwen3 --prompt "Explain this branch" --save local.tine
tine import trace.json --format otel-json --save imported.tine
tine show local.tine --json
tine export imported.tine --output spans.json
03Introduced v0.6 · current

Surface Release in v0.6.0

The full provenance workflow at the terminal

Inspect, compare, search, attest, evaluate, promote, fork, and resume v3 repository runs from the CLI, then turn deterministic replay and cross-run statistics into CI checks.

Stable CLI surface · no format bump

The v0.6 operator surface remains part of v0.8. Its read and write verbs share engines with the MCP tools, while stored v0.3.0–v0.7.2 data remains covered by the current compatibility gate.

  • repo-show, context, repo-log, repo-diff, and repo-search expose the v3 read path with stable machine-readable output.
  • attest, evaluate, promote, repo-fork, and repo-resume append operator-directed provenance without a hidden force path.
  • tine replay --verify returns a binary reproducibility verdict; harness mode re-executes twice to surface nondeterministic drift.
  • tine stats aggregates local indexed runs by model, status, tag, day, or format version, with deep loading explicitly opt-in.
Operator and CI surfaceshell
tine repo-show heads/main --repo . --json
tine repo-diff heads/main experiments/terse --repo . --exit-code
tine replay first.tine --verify
tine stats --group-by model --deep --json
04Introduced v0.5 · current

Trace normalization introduced in v0.5.0

Telemetry in, telemetry out

Bring supported agent traces into opentine from the shell, emit stable JSON for automation, and export a run as OpenTelemetry GenAI for the observability system already beside it.

No format bump · portable v2 · repository v3

The v0.5 import and library-export surface remains current in v0.8. The current compatibility gate covers stored v0.3.0 through v0.7.2 data; export is read-only over provenance.

  • to_otel_genai and to_otel_genai_document export portable runs, loaded artifacts, repository runs, or TraceEvents as GenAI spans or complete OTLP/JSON.
  • tine import accepts OTel GenAI spans, OTLP/JSON, OpenTine JSONL, and serialized LangChain, LlamaIndex, AutoGen, CrewAI, and OpenAI Agents logs.
  • An import can write a portable artifact, advance a repository ref, or do both without changing either format.
  • Stable --json objects on show, verify, ls, search, and cost make the same evidence usable from scripts and CI.
Shell interopshell
tine init .
tine import trace.json --format otel-json --save imported.tine --repo . --ref heads/imported
tine show imported.tine --json
05Introduced v0.4 · current

Fork-act identity, current in v0.8

Collision-free portable forks

Fork one portable run at the same step more than once and keep every intervention: each default fork act receives its own verifiable ID instead of colliding on one run and filename.

Portable .tine v2 · new fork IDs only

There is no storage-format migration. Existing v0.3 artifacts load with their IDs unchanged, while pre-v0.4 forks simply have no verdict under the new fork-identity check.

  • Source lineage, retained history, fork point, branch, declared intent, and a recorded 128-bit nonce form the identity basis.
  • Two ordinary forks from one point receive distinct IDs and default output paths.
  • Cached replay stays reproducible with an empty nonce; v3 repository IDs remain content-addressed and unchanged.
  • The artifact-body checksum, fork-ID consistency, and signatures covering metadata.fork remain distinct verification checks.
Distinct fork actsshell
tine fork failed.tine --from-step 3
tine fork failed.tine --from-step 3
# same point, two independently addressable run IDs
06Introduced v0.3 · current

Content-addressed run history

Git-shaped repository

Store agent provenance as typed, immutable objects in a .tine/ repository, then move refs with compare-and-swap semantics and verify the graph from the bytes up.

Repository objects: verified v3

Portable .tine artifacts remain format v2. migrate-v3 imports one into a repository; it does not rewrite the portable format in place.

  • Typed SHA-256 blob, event, run, attestation, and separately versioned annotation objects.
  • Refs, reflogs, compare-and-swap updates, semantic log and diff, causal slices, and forks.
  • Deep fsck, deterministic packs, shallow boundaries, missing-object negotiation, fetch, push, and clone.
  • Client-side redaction happens before canonicalization and hashing.
  • When writable, Repo.open recreates missing empty layout directories best-effort; read-only repositories remain readable, and fsck treats missing packs/ as empty.
Repository workflowshell
tine init .
tine migrate-v3 result.tine --repo . --ref heads/main
tine fsck --repo .
tine repo-log heads/main --repo .
07Introduced v0.5 · current

Recorder and framework interop

Live capture + normalized traces

Record native activity or capture LangChain and LangGraph live through their callback protocol, while supported serialized traces enter the same event and repository model after the fact.

Live LangChain/LangGraph · supported imports

CrewAI has no verified live adapter in v0.8; its serialized logs import post hoc. Framework log import remains best-effort because upstream shapes can drift.

  • Recorder captures code, dirty patch, environment, policy, budget, and pricing manifests.
  • OpenTineCallbackHandler records LangChain and LangGraph as they run through the optional opentine[langchain] extra.
  • Model, tool, human, policy, approval, subagent, and error events keep partial runs inspectable.
  • Modern OpenTelemetry message shapes and supported framework logs normalize through the same TraceEvent and Recorder path.
  • to_otel_genai exports the resulting run back to an existing OpenTelemetry GenAI pipeline.
  • Evaluate, attest, promote, fork, resume, search, inspect, and semantic diff build on one event model.
Live LangChain / LangGraphpython
from opentine import Repo
from opentine.integrations.langchain import OpenTineCallbackHandler
handler = OpenTineCallbackHandler(Repo.init("runs"))
graph.invoke({"question": "..."}, config={"callbacks": [handler]})
run_id = handler.run_id
08Current in v0.8

A bounded remote foundation

Self-hosted synchronization

Synchronize repository objects through a minimal HTTP remote with discovery, shallow or filtered fetch, resumable pack upload, and tenant-scoped ref updates.

Reference deployment, not turnkey HA

The bundled WSGI server is intended for development and small self-hosted installations. It is not a hosted control plane, payment product, or turnkey high-availability service.

  • Tenant namespaces and reader, writer, and admin RBAC with static-token and OIDC seams.
  • Encrypted filesystem objects, SQLite metadata, and hash-chained audit records.
  • Pluggable storage, index, identity, authorization, KMS, audit, retention, and admission policies.
  • Bounded downloads and uploads, timeouts, concurrency limits, and fail-closed audit-key handling.
Self-hosted workflowshell
tine serve --root /srv/opentine --cert cert.pem --key key.pem
tine push https://runs.example --tenant team --repo .
tine clone https://runs.example ./clone --tenant team
09Current in v0.8

Capture terminal agents

CLI harness matrix

Wrap an external coding-agent CLI and turn its output into a bounded, inspectable run artifact while retaining reported usage, latency, and cost when the harness exposes them.

Table-driven presets + generic fallback

Harnesses do not inherit the parent environment by default. Their process controls bound resources, but they are not an operating-system sandbox.

  • Profiles cover Claude Code, Codex, Cursor, Gemini CLI, Grok Build, Hermes, Kimi Code, OpenClaw, OpenCode, Pi, and generic commands.
  • Configurable wall-time, output, event-count, and line-size ceilings contain noisy processes.
  • Shell and Python execution drains child pipes, terminates owned process groups, and keeps bounded diagnostics.
  • Table-driven presets let new terminal agents join the same recording path without a new subclass.
Harness captureshell
tine run --harness codex --prompt "Inspect this repo" --save run.tine
tine run --harness kimi-code --prompt "Summarize README.md" --save run.tine
tine run --harness generic --harness-command "agent run" --prompt "Fix tests"
10v0.8.0 core

Post-hoc cost in v0.8.0

Price after capture

Keep the consumption record independent of the rate card, then price native, imported, or previously uncosted runs against the signed catalog without rewriting their provenance.

Recorded cost and post-hoc price stay distinct

tine cost sums what capture recorded; tine price recomputes from recorded provider, model, and usage. Estimates remain tied to a catalog and are not provider invoices; missing provider, usage, or rate cards stay unknown rather than becoming a false zero.

  • tine price is read-only and can re-price imported or uncosted runs; --at selects a historical catalog date.
  • tine import --price applies the same catalog pass before fresh OpenTelemetry events are first written, while preserving any source-reported cost.
  • opentine-pricing/2 adds ordered UTC peak/off-peak windows with weekday or weekend scope; /1 catalogs and overlays still load.
  • Each step's recorded timestamp selects its schedule window, so one run can span peak and off-peak rates even when --at pins the catalog date.
Recorded cost versus catalog priceshell
tine cost imported.tine --json
tine price imported.tine --json
tine price imported.tine --at 2026-08-22
tine import trace.json --format otel-json --price --save priced.tine

Published integrations

Keep the architecture. Add provenance.

These 2 independently installable packages use opentine beneath declared graphs and branching loops. Their current 0.1.0 distributions require Python 3.11 or newer and explicitly cap opentine below 0.5. Keep them visible as published 0.2–0.4 integrations, but use a separately pinned v0.4 environment until they publish and test a wider compatibility range.

010.1.0 / Compatibility hold

Declared agent graphs with portable provenance

Graph Engineering

A framework-independent graph engine and capture layer that records the edge actually taken, state snapshots, joins, and forkable resume points into opentine artifacts and repositories.

Published 0.1.0 · core v0.2–0.4 · v0.8 incompatible

The published package explicitly requires opentine >=0.2.0,<0.5, so it cannot resolve beside core v0.8. Use the documented, separately pinned v0.4 environment until a tested compatibility release expands that range.

  • GraphSpec and GraphEngine cover static edges, routers, multi-parent joins, bounded cycles, state snapshots, and resume from a recorded step.
  • Shipped adapters cover LangGraph, Burr, CrewAI Flows, LlamaIndex Workflows, and pydantic-graph.
  • OTLP/JSON, opentine TraceEvent, framework callback, and JSONL ingestion feed the same graph-aware capture surface.
  • V3 persistence adds graph-layer diff, evaluation, promotion, and search, with CLI and non-promoting MCP operations over the recorded provenance.
Published packageshell
pip install "opentine==0.4.0" "opentine-graph-engineering[cli,mcp]==0.1.0"
graphforge run-demo-fanout --question "graphs vs loops"
graphforge show <run-id-prefix>
graphforge mermaid <run-id-prefix>
020.1.0 / Compatibility hold

Branchable iterative systems

Loop Engineering

A policy-gated loop engine that records iterations, candidate states, scores, and branch decisions in portable artifacts, with repository workflows for evaluating and promoting the best run.

Published 0.1.0 · core v0.2–0.4 · v0.8 incompatible

The published package explicitly requires opentine >=0.2.0,<0.5, so it cannot resolve beside core v0.8. Use the documented, separately pinned v0.4 environment until a tested compatibility release expands that range.

  • LoopEngine bounds branch fan-out and enforces run-wide step, cost, duration, and score policies.
  • Each iteration retains state, candidates, deltas, scoring, and fork ancestry so alternative paths remain inspectable.
  • V3 repository support adds shared ancestry, evaluation attestations, candidate search, and explicit promotion.
  • Provider usage normalization, signed-catalog pricing, artifact signing, and loop-aware MCP operations keep cost and provenance attached.
Published packageshell
pip install "opentine==0.4.0" "opentine-loop-engineering[mcp]==0.1.0"
loopforge run-numeric 42 --start 0 --max-steps 25
loopforge verify ./<run-id>.tine

Source experiment

Early integrations, shown with their boundaries.

This source integration is useful and inspectable, but it is not a bundled v0.8 feature, a PyPI release, or a verified v0.8-compatible package. Its source and compatibility caveats are part of the showcase.

01Source 0.1.0 / v0.8 unverified

Subagent provenance and slash commands

Hermes + opentine

A source integration that records Hermes subagent and audit lifecycles as .tine artifacts, with a /tine command surface and MCP wrapper for inspecting those runs.

Source only · no PyPI release

Its open-ended opentine >=0.1.1 dependency is not proof of v0.8 compatibility. There is no tag or PyPI package, the source was last updated June 29, 2026, and its documentation still describes the v1 artifact line, so review and test it before use.

  • HermesRunRecorder captures subagent start, tool, completion, and failure events.
  • The Hermes plugin groups list, show, fork, diff, replay, budget, verify, and help beneath /tine.
  • A separate recorder maps authorization, evidence, and completion into robotics audit artifacts.
  • The MCP wrapper exposes list, show, fork, and diff operations to compatible clients.
Install from sourceshell
git clone https://github.com/0xcircuitbreaker/hermes-opentine-integrations.git
cd hermes-opentine-integrations
python -m opentine_cli_commands install --target hermes
/tine help

Companion interfaces

See the run, your way.

2 visual clients explore portable run artifacts. The latest published TUI is v0.4.0 for core v0.4; its untagged 0.5.0 source moves to core v0.5 but still excludes v0.6 and later releases, including v0.8. PyPI still serves GUI 0.2.0, while untagged GUI 0.3.0 source now explicitly requires core v0.8. Use that source build to evaluate the current desktop console, or the core CLI for a fully published v0.8 workflow. GUI main explicitly excludes v0.9; use the current core CLI for v0.9.1 signing and verification.

opentine TUI: Published: core v0.4 · source: core v0.5 · v0.8 incompatible; opentine GUI: Published: core v0.4–0.5 · source: core v0.8.

View app details 

Core repository

Start with a source pattern.

These 7 links point to runnable patterns in the current opentine repository. The descriptions stay provider-neutral so the examples track whichever current adapters you configure.

Browse all examples

Build on the artifact

Made something with opentine?

Share the repository and the workflow it enables. Stable release or useful experiment, its status and compatibility will be shown clearly.

Submit a project