Logging runs you did before Fieldnotes
Most people arrive at Fieldnotes with a backlog: dozens of runs already sitting in folders, produced before any of this was tracked. You can record them now. A run record is just metadata and pointers, so logging an old run costs nothing and makes it findable alongside everything new.
The short version
One log call per old run, pointing at whatever still exists: the code, the parameters you can identify, and the output files on disk.
fieldnotes log \
--script analysis_v2.py \
--param temperature=2.27 \
--param lattice=128 \
--output results/run_2025_11.jld2 \
--tag imported \
--note "reconstructed from November 2025"
No config file? Log parameters inline
You do not need a params.json or a job submission script. Pass each parameter directly with a repeatable --param flag. This is the same answer for new runs whose parameters live in your head or hardcoded in the script rather than in a separate file.
fieldnotes log --param temperature=2.27 --param seed=7 --param method=baseline \
--script run.py --output results/output.csv
If you do have a config file, --params reads it (.toml, .json, or .yaml), and you can still add or override individual values with --param.
What you can and cannot recover
Fieldnotes records what you can still identify; it cannot invent parameters you never wrote down. Two things do a lot of the work for you:
- The script snapshot.
--scriptstores the full text of the code, so any parameters hardcoded in it are preserved verbatim, including the ones you forget to pass as--param. - The output files.
--outputlinks the data and figures that still exist on disk, so the record points at the real artifacts even when the parameters are fuzzy.
For a run whose parameters are genuinely lost, log what you have anyway. The code snapshot and the output paths still make it findable and mostly reproducible.
Recording the original date
By default the timestamp is the moment you log. To record when the run actually happened, pass --timestamp with the original date, or a full date and time:
fieldnotes log --timestamp 2025-11-12 \
--script run.py --output results/output.jld2 --tag imported
It accepts YYYY-MM-DD or an ISO 8601 datetime such as 2025-11-12T14:30. A value without a timezone is read as local time.
Importing a backlog
To bring in many old runs at once, loop over them in the shell, one log call each.
for dir in old_runs/*/; do
fieldnotes log \
--script "$dir/run.py" \
--params "$dir/params.json" \
--output "$dir/output.jld2" \
--tag imported \
--note "backfilled from $dir"
done
Once imported, they are queryable like any other run: find one by a figure or data filename with fieldnotes show --file fig3.png, or by a parameter with fieldnotes show --param temperature=2.27.