iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Burr lets you inspect an agent’s tracked execution and start a new application branch from saved state at an earlier point. That is useful time-travel debugging—but it does not, by itself, prove that rerunning the branch will reproduce the same model calls, tool responses, or external effects. To make a defensible “nothing changed” claim, define what must match and capture evidence at that boundary.
What Burr time-travel debugging actually gives you
Burr models an application as actions operating on state. Its State API describes state as immutable: “It is entirely immutable, meaning that you can only create new states from old ones, not modify them in place.” In practice, state operations produce a new state rather than changing the existing state object in place. The official documentation also warns that private fields prefixed with __ are internal; modifying them outside the framework is undefined behavior, not a supported way to make a checkpoint.
Tracking adds an execution record. Burr’s tracking documentation describes information such as the step name, inputs, state at execution, timestamps, and results. Its UI is intended to help inspect the state machine and executed steps. That can help answer questions such as “Why did this LLM call fail?” and “Things went off the rails, but where?”—questions posed in the Apache Burr GPT-like multimodal chatbot example.
Persistence and initialization provide the other half of the workflow: restoring state and creating a new branch from a selected prior application, partition, and sequence ID. Burr’s examples show loading prior tracked state, then either forking or continuing an application. A fork is a way to try a different choice from an earlier point; it is not evidence that every subsequent computation is deterministic.
#1 Best Overall
- Used Book in Good Condition
Restore an earlier point and create a branch
The general workflow is to identify the run and step you want, inspect the tracked record, and initialize a new application from that saved point. The exact configuration depends on the persistence or tracking backend you use; the steps below describe the workflow rather than a version-specific code recipe.
- Configure tracking or persistence. Retain the identifiers needed to find the run. Burr’s documentation describes an
app_id, an optionalpartition_key, and asequence_id. The tracking documentation describesLocalTrackingClientwriting locally, by default under~/.burr. - Locate and inspect the step. In the tracker or UI, select the relevant execution record and review its step name, logged inputs, state, result, and timestamp. Confirm that the record represents the point you intend to branch from.
- Initialize from the chosen source. Use Burr’s
initialize_fromworkflow with the source application and the identifiers for the selected point. The persistence documentation describes using these identifiers to restore state and fork from a prior application, partition, and sequence ID. - Choose where execution resumes. Decide whether the new application should proceed at the next action or use another configured entry point. Also decide which inputs will come from recorded data and which will be recomputed or fetched again. The official RAG example distinguishes forking from continuing an existing application.
- Keep the branch identifiable. Use the new identifiers and persistence configuration to distinguish subsequent branch state from the source run. Check the configuration for the backend you are using rather than assuming that every tracker or persister stores branch data in the same way.
This is a restore-and-continue workflow. It does not imply that Burr automatically replays every recorded action output instead of executing the action again; decide and verify what each step in your own diagnostic run actually consumes.
Restored state is not the same as deterministic recomputation
Two different claims are easy to conflate:
- Same state at the fork: the new branch begins from state restored from the selected saved point.
- Same outcome when recomputed: running the branch again produces the same requests, responses, action outputs, transition path, and possibly external effects.
Burr’s persistence and tracking documentation supports the restore-and-fork workflow. It does not establish bit-for-bit deterministic re-execution of LLM calls or external effects. That is a boundary of what those documented features establish, not proof that deterministic replay is impossible. A model response can differ across calls; tools and network services can return changed data; and actions can depend on time, randomness, or mutable external state. A saved application state alone does not freeze those dependencies.
Recommended Free Tools
For that reason, “replay” should be qualified. It might mean restoring a checkpoint and rerunning actions, replaying a transition path with recorded outputs, or reproducing the full observable behavior of a run. Those have different requirements. State restoration is useful in all three cases, but only the latter claims require evidence about the computations and effects beyond the saved state.
Define what “nothing changed” means
Before comparing an original run with a fork, choose the boundary of the claim. A matching final state does not necessarily mean that intermediate outputs matched; matching model responses does not establish that a payment, email, or other external action occurred exactly once. The comparison should name the artifact being checked and the equality rule applied to it.
| Claim being tested | What to compare | What that comparison does not establish on its own |
|---|---|---|
| State was restored at the fork | The serialized state at the selected checkpoint, using a defined serialization and equality rule | That later actions or external dependencies will produce the same results |
| The action path matched | The ordered action or transition sequence and any relevant branch decisions | That each action received the same inputs or returned the same output |
| The model interaction matched | The model request, relevant configuration, and response for each call | That tools, network dependencies, or side effects matched |
| Tool computations matched | Recorded tool inputs and outputs, with a defined comparison rule | That the tool would return the same result if called against a changing service again |
| External behavior matched | The specific external effects under test, using evidence from the system that owns each effect | Anything outside the effects and observations included in the test |
These are engineering comparison axes, not a Burr feature checklist. For each claim, retain the original and fork’s relevant artifacts, state whether inputs and outputs were recorded or called again, and specify how differences such as timestamps, identifiers, ordering, or floating-point values are treated. Without that definition, “same” is too vague to verify.
Design a replay test that can support its conclusion
A useful diagnostic separates restoration from recomputation. First establish that the selected checkpoint is the one the fork loaded. Then run a deliberately bounded test and record the evidence required for the particular equality claim. If the test calls a live model or service, describe it as a fresh recomputation, not as a replay of the original response.
- For checkpoint fidelity: capture the source checkpoint and the fork’s initial state in a comparable serialized form. State what is excluded or normalized before comparison.
- For action-level reproducibility: record the action sequence and inputs, outputs, and relevant configuration at each step. Distinguish values loaded from the original run from values obtained during the new run.
- For model-call reproducibility: preserve the request and response artifacts needed for the comparison. If the model is called again, compare the new response with the stored response under a stated criterion; do not assume a matching request guarantees a matching response.
- For tool or network behavior: record the tool’s inputs and returned data, and note whether the diagnostic used a recorded result, a stub, a controlled test service, or a live dependency.
- For side effects: avoid repeating non-idempotent operations during diagnostics. Use an isolated environment, a safe substitute, or an explicit idempotency strategy where appropriate, and verify effects with the system that owns them.
- For the conclusion: report exactly which artifacts matched, what equality rule was used, and which dependencies or effects were not tested. Do not turn a successful state comparison into a broader claim about the whole agent run.
Choose a replay strategy that matches the question
There is no single meaning of replay. The right approach depends on whether you want to inspect a checkpoint, test code with fixed inputs, or reproduce interactions with live dependencies.
| Strategy | What happens after the checkpoint | Best suited to | Main limitation |
|---|---|---|---|
| Restore and recompute | Restore saved state, then execute actions and call their dependencies again | Finding whether current code or a fresh dependency response changes the outcome | Fresh model, tool, or network results may differ from the original run |
| Restore and supply recorded inputs or outputs | Restore state and feed selected recorded values to downstream steps rather than making the original calls again | Isolating downstream logic from model or service variability | The result says little about what a fresh live call would return; records must contain the values needed |
| Restore and run against controlled substitutes | Restore state and route selected dependencies or effects to stubs, fakes, or isolated systems | Testing action logic while limiting live calls and unsafe effects | The substitute may not capture every behavior of the real dependency |
These strategies are general engineering options, not documented modes or guarantees attributed to Burr. Burr supplies the tracking and state-restore/fork foundation described above; the developer still chooses what is rerun, substituted, or compared.
Persistence and tracking caveats
Burr’s tracking documentation describes local tracking and a server intended to visualize the state machine and executed steps. Its persistence documentation describes database and custom persister options and cautions that tracker-based reload is not recommended for production use. Treat tracking for inspection and production persistence as distinct choices, and check the documentation for the Burr version and backend you deploy because defaults and supported options can change.
Do not build a checkpoint by altering private state internals. Use the documented state and persistence interfaces, and verify that the chosen backend retains the records and identifiers your debugging workflow depends on.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →What a defensible result sounds like
A precise report might say: “The fork restored the selected checkpoint’s serialized state under the stated comparison rule. The action path and recorded tool outputs matched in this run; the model was called again, and its response differed. No live non-idempotent side effects were repeated.” That reports the scope and evidence without claiming more than the test establishes.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

