A 5-minute walkthrough. Assumes the pf binary is on your PATH (see
Install).
mkdir -p /tmp/agent-sandbox/src
echo "fn main() { println!(\"hello\"); }" > /tmp/agent-sandbox/src/main.rs
pf --store ~/.processfork snapshot \
--agent-id demo \
--fs-root /tmp/agent-sandbox
# → sha256:1c2497b0dc23d21b8068b26f54c0d8b14b7fdf704c11a456dca7e36eaf6fbed6pf --store ~/.processfork log
pf --store ~/.processfork statuspf log prints the snapshot DAG newest-first; pf status prints the
store size.
pf --store ~/.processfork fork sha256:1c24… -n 4 --explore "try alternatives"
# → 4 new CIDs printed, one per lineEach fork is a manifest-level branch — its parents = [<source>]. The
underlying layer blobs are shared via CAS dedup; storage cost is the
new manifest only (~600 B per fork).
echo "fn main() { println!(\"hello, world\"); }" > /tmp/agent-sandbox/src/main.rs
pf --store ~/.processfork snapshot --agent-id demo --fs-root /tmp/agent-sandbox \
--name updated
# → sha256:7e670a428c073dec837b879dcf78ec2f1eb54c2c1949b25457f7300515a7aaa5pf --store ~/.processfork diff sha256:1c24… sha256:7e67…
# - world.fs = sha256:231945ab…
# + world.fs = sha256:de9a5a4a…
# (every other layer identical)pf --store ~/.processfork checkout sha256:7e67… --into /tmp/restored
cat /tmp/restored/src/main.rs
# fn main() { println!("hello, world"); }mkdir -p /tmp/my-registry
pf --store ~/.processfork push sha256:7e67… file:///tmp/my-registry
# ✓ pushed sha256:7e67… → file:///tmp/my-registrypf --store /tmp/store-on-other-host pull file:///tmp/my-registry
# sha256:7e670a428c073dec837b879dcf78ec2f1eb54c2c1949b25457f7300515a7aaa5The CID round-trips identical — content-addressed all the way down.
That's it. Real integrations live one level up, in Integrations.