Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Files and folders

Every path is in your home or in your runtime folder, $XDG_RUNTIME_DIR (/run/user/<uid>). Every name starts with the prefix, sandcastle.

PathWhat it holdsWritten byuninstall
~/.config/sandcastle/the configurationyoukeeps it
~/.local/share/sandcastle/secrets/one file per secret, readable only by yousandcastle secret setkeeps it
~/.local/share/sandcastle/jobs/the jobs’ records; it is data_dirthe corekeeps it
~/.local/bin/sandcastlethe installed binary, which the core and the gate’s preparation runinstallkeeps it
~/.config/containers/systemd/sandcastle-link.networkthe link network’s unitinstallremoves it
~/.config/containers/systemd/sandcastle-keep.containerthe keep’s unitinstallremoves it
~/.config/containers/systemd/sandcastle-gate.containerthe gate’s unitinstallremoves it
~/.config/systemd/user/sandcastle.servicethe core’s unitinstallremoves it
~/.config/systemd/user/sandcastle-gate-repair.service, .timerthe gate’s repair, every minuteinstallremoves them
~/.config/systemd/user/sandcastle.targetthe target that groups the three and the gate’s repairinstallremoves it
~/.config/containers/systemd/sandcastle-*.container.d/your drop-insyoukeeps them
$XDG_RUNTIME_DIR/sandcastle-keep/keep.sockthe keep’s socket, the core’s only way to itthe keepgone when the keep stops
$XDG_RUNTIME_DIR/sandcastle-gate/the gate’s smokescreen.yaml and acl.yaml, its list of namesthe gate’s preparationgone when the gate stops

uninstall also removes the images and the two networks, which live in Podman: see Network names and ranges. It leaves lingering on, as other services of yours may need it.

A different --config or --secrets folder, or $SANDCASTLE_CONFIG, moves the first two; install writes the folders it was given into the units.

A job’s record

Each job leaves a folder under data_dir, readable only by you:

<source>/<job id>/input.json    what the source sent; for ocr, the image's size and SHA-256 instead of its bytes
<source>/<job id>/output.json   what was sent back, or the reply that was refused
<source>/<job id>/meta.json     what happened

meta.json holds source, job, capability, status (succeeded, failed or released), error, stderr (the start of what the box wrote there, which is hostile and is kept only here), started_at, finished_at, and usage with the model and the tokens when the job reached one.

The core deletes the folders older than retention_days when it starts, then every hour.