Boxyard CLI
Use the Boxyard CLI to manage, find, inspect, sync, include, exclude, group, rename, or copy boxes. Use when the user asks about boxyard command usage, Boxyard config files, locating box folders, rclone-backed storage, sync status, or shell/TUI helpers.
- Skill ID
- lukastk/boxyard/boxyard-cli
- Publisher
- lukastk
- Repository
- boxyard
- Installs
- 0
- Files
- 1
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
lukastk/boxyard/boxyard-cliInstalls these files- SKILL.md
What this skill tells the agent
Boxyard CLI Skill
Use this skill when the user wants to use Boxyard, not develop Boxyard itself.
Boxyard is a Python CLI for managing and syncing folders ("boxes") across local and remote storage using rclone or local storage. A box has data, metadata, optional sync configuration, group membership, and sync records.
Where generated data should live
Generated data — including large outputs — generally belongs inside the box it relates to, not in some sibling directory chosen to dodge syncing. Do not move heavy outputs out of a box to keep it "small". The whole point of Boxyard is that syncing makes large boxes comfortable to live with: anything you don't want pushed can be excluded from sync via the box's conf/.rclone_exclude (see "Per-box sync configuration"), or the box itself can be excluded locally with boxyard exclude. Keep data colocated with its box and control sync with filters — don't fragment it to avoid sync.
Before running commands
- If operating from this repository checkout, prefer:
cd /path/to/boxyard && uv run boxyard ...If Boxyard is already installed in the environment, boxyard ... is also fine.
- Read-only commands are safe to run without confirmation:
--help,list,tree,path,which,box-status,yard-status,list-groups,owner,doctor,convert --dry-run. - Ask before running commands that can modify local or remote state:
init,new,sync,multi-sync,sync-missing-meta,include,exclude,delete,rename,sync-name,add-to-group,remove-from-group,add-parent,remove-parent,create-user-symlinks,copy,force-push,claim,release,discard-local,convert. - Be especially careful with:
boxyard new --from PATH/-f PATH: movesPATHinto Boxyard unless--copyis supplied.boxyard exclude: syncs first by default, then removes the local data copy.boxyard delete: deletes a box.boxyard sync --sync-setting replace|force: can overwrite data depending on direction/status.boxyard force-push --force: destructively overwrites remote data from a local source folder.
Configuration files and important paths
Default files and folders:
~/.config/boxyard/config.toml # main Boxyard config
~/.config/boxyard/boxyard_rclone.conf # Boxyard's rclone config
~/.config/boxyard/default.rclone_exclude
~/.boxyard/ # default boxyard_data_path
~/boxes/ # default user_boxes_path; included box data appears here
~/box-groups/ # default user_box_groups_path; group symlinks appear hereThe config file controls the real locations. Important config keys:
default_storage_location = "..."
boxyard_data_path = "~/.boxyard"
user_boxes_path = "~/boxes"
user_box_groups_path = "~/box-groups"
[checkout_roots.bulk]
path = "~/large-boxes"
# Optional guarded root (both keys required together)
[checkout_roots.volume]
path = "/mnt/volume/boxes"
mount_target = "/mnt/volume"
filesystem_uuid = "..."
max_concurrent_rclone_ops = 3
[storage_locations.my-remote]
storage_type = "rclone" # or "local"
store_path = "boxyard"Derived paths:
<boxyard_data_path>/boxyard_meta.json # cached local box index
<boxyard_data_path>/local_store/<storage>/ # local metadata/conf roots by storage location
<boxyard_data_path>/sync_records/ # local sync records
<boxyard_data_path>/sync_backups/ # local sync backups
<boxyard_data_path>/remote_indexes/ # cached remote index lookups
<boxyard_data_path>/placements/<box_id>.json # machine-local checkout placementFor a box with index name <box_id>__<name>:
<configured-checkout-root>/<box_id>__<name>/ # authoritative local DATA path
<boxyard_data_path>/local_store/<storage>/<index>/ # local box root
<boxyard_data_path>/local_store/<storage>/<index>/boxmeta.toml
<boxyard_data_path>/local_store/<storage>/<index>/conf/Remote/rclone stores use this layout under the storage location's store_path:
boxes/<index>/data/ # plain boxes
boxes/<index>/data.restic/ # restic boxes: per-box repository (see "Storage format")
boxes/<index>/data.snapshot # restic boxes: pointer to the current snapshot
boxes/<index>/boxmeta.toml
boxes/<index>/conf/
sync_records/<index>/<data|meta|conf>.rec
sync_backups/The global CLI option for non-default config is:
boxyard --config /path/to/config.toml <command> ...boxyard init uses --config-path and --data-path to create a config/data directory. The shell helper honors BOXYARD_CONFIG_PATH; normal Typer CLI commands should be given --config when using a non-default config.
DEFAULT_BOX_GROUPS can add default groups at runtime. It is parsed as a TOML list string, for example:
export DEFAULT_BOX_GROUPS='["ctx/mac", "work"]'How to find where boxes are
Use these patterns first.
Find the box containing the current directory or any path
boxyard which
boxyard which --path /some/path
boxyard which --path /some/path --json
boxyard which --path /some/path --index-namewhich searches every configured checkout root (including symlink-resolved paths) and reports the box name, id, index name, storage location, checkout root/state, authoritative local DATA path, and inclusion state.
Get a box's data folder
boxyard path --box-name NAME --pick-first
boxyard path --box-id BOX_ID
boxyard path --box INDEX_NAMEboxyard path defaults to the data path. By default it filters to included boxes. Use --all when you need to select from included and excluded boxes.
Get non-data paths for a box
boxyard path --box-name NAME --pick-first --path-option root
boxyard path --box-name NAME --pick-first --path-option meta
boxyard path --box-name NAME --pick-first --path-option conf
boxyard path --box-name NAME --pick-first --path-option sync-record-data
boxyard path --box-name NAME --pick-first --path-option sync-record-meta
boxyard path --box-name NAME --pick-first --path-option sync-record-confFind checkout roots and actual local paths
Never reconstruct user_boxes_path/<index_name>: a box may be in any configured root. user_boxes_path is permanently the root named default; additional roots are [checkout_roots.NAME]. Use:
boxyard checkout-roots
boxyard list --show-status --show-checkout
boxyard list --checkout-root volume --output-format json
boxyard path --box INDEX_NAME
boxyard which --path /some/root/INDEX --jsonStatus markers are ● included, ○ excluded, ! root unavailable, × recorded checkout missing, and ↔ interrupted relocation. An unavailable root never falls back to default and its boxes remain in the catalog.
Common discovery commands
boxyard list
boxyard list --show-status
boxyard list --output-format json
boxyard list --view groups --show-status
boxyard list --view tree --show-status
boxyard tree --show-status
boxyard list-groups --all --include-virtual
boxyard yard-statusGroup filters support boolean expressions over group names:
boxyard list --group-filter 'work AND NOT archived'
boxyard path --group-filter 'ctx/mac OR ctx/linux' --pick-firstOther list filters:
boxyard list --include-group GROUP
boxyard list --exclude-group GROUP
boxyard list --children-of BOX
boxyard list --descendants-of BOX
boxyard list --parent-of BOX
boxyard list --ancestors-of BOX
boxyard list --roots
boxyard list --leavesBox selection options
Many commands accept one of:
--box INDEX_NAME # full <box_id>__<name>
--box-id BOX_ID # <timestamp>_<subid>
--box-name NAME # defaults to contains matching for many commandsName matching options:
--name-match-mode exact|contains|subsequence
--name-match-caseMore from lukastk
Use this skill in a project
Open any RiverX project, search the Skills panel for lukastk/boxyard/boxyard-cli, and install it in one click.
