Status: IN
Replay matching is positional — action N in the current run matches action N in the replay log; successful replayed actions are skipped with cached output.
Source: entries/2026/05/11/api-automation-context.md
async with automation(
recording_file="run.log", # record this run
replay_file="run.log", # replay from previous
) as ftl:
await ftl.file(path="/tmp/a", state="touch") # action 0: skipped if cached
await ftl.copy(src="app.py", dest="/opt/app/") # action 1: skipped if cached
await ftl.service(name="app", state="restarted") # action 2: runs if new