CLI

forks

storage forks lists every fork on the selected adapter. Human mode prints one name per line; JSON mode emits the full ForkInfo[] ({ name, fromSnapshot?, createdAt }):

storage forks
# experiment-a
# experiment-b

storage forks | jq '.[] | { name, fromSnapshot }'
# { "name": "experiment-a", "fromSnapshot": "snap-0193abc1234567890abcdef" }
# { "name": "experiment-b", "fromSnapshot": null }

fromSnapshot is set when the fork was seeded from a captured snapshot; null/undefined when seeded from the parent’s live state.

Flags

Create and remove

The write surface lives under storage fork (singular):

storage fork create experiment-a                                  # seeded from base
storage fork create experiment-a --from-snapshot snap-0193abc1234  # seeded from a snapshot
storage fork rm experiment-a                                      # delete (idempotent)

fork rm is a no-op when the name doesn’t exist.

Scoping reads and writes

Every object command — both reads (ls, stat, cat, sign) and writes (cp, mv, rm) — accepts --fork <name> to redirect into a fork:

storage ls photos/ --fork experiment-a
storage cp ./image.jpg storage://image.jpg --fork experiment-a
storage rm storage://image.jpg --fork experiment-a

--fork composes with --snapshot — see Composing with --fork on the snapshots page.