tine record
Added in v0.20.0, this command starts a localhost reverse proxy on an ephemeral port and launches your program with supported provider base URLs pointed at it. No opentine SDK hook or harness is required.
# agent.py is your existing program
tine record -- python agent.py
# Choose a destination; refuse an existing file by default
tine record --save run.tine -- python agent.py
# Explicitly replace that destination
tine record --save run.tine --force -- python agent.py
# Inspect or calculate a post-hoc price
tine show run.tine
tine price run.tineHow routing works
The child receives proxy URLs through OPENAI_BASE_URL, OPENAI_API_BASE, ANTHROPIC_BASE_URL, DEEPSEEK_BASE_URL, and XAI_BASE_URL. Calls are forwarded to the upstream configured before wrapping, or the provider default. Responses stream back, including SSE.
The program or SDK must honor these variables. Hard-coded endpoints, unsupported provider routing, or traffic bypassing the proxy are not captured. This is model-call recording, not a sandbox, packet capture, or full tool/filesystem audit.
What the artifact records
Intercepted calls become model steps with provider, model, request, reply text, duration, and token usage normalized by the existing adapter readers. The recorded command and child exit code are retained in run metadata. An unreachable upstream returns HTTP 502 to the child and produces an error step.
The default destination is .tine_runs/<id>.tine. --save PATH chooses another destination; use --force to replace an existing one. The wrapper exits with the child's exit code; a launch failure uses 127.
Privacy and trust
Headers are never captured, so Authorization and x-api-key headers do not enter the artifact through header capture. Request and response bodies use the usual redaction. Bodies and command arguments may still contain sensitive information: inspect the saved artifact before sharing. Recording traffic does not independently attest to the program's identity or behavior.
Use tine run for existing harness and execution workflows, recording and imports for other capture paths, and the upgrade guide for release boundaries.