Two modes, one goal: treat Box like a local filesystem.
Transparent mode — initialize a workspace, then every Write or Edit inside it auto-syncs to Box via PostToolUse hooks. No box commands needed.
Explicit mode — search, download, share, or organize files using Box CLI commands directly. See references/operations-guide.md for the full command reference.
Box CLI (@box/cli) wraps the full Box API as shell commands. This skill adds three layers:
Key principle: inspect before acting, report after acting. Folder ID 0 is always root.
npm install --global @box/cli
box login
box users:get --me # verify auth + enterprise context
Auth methods: OAuth (interactive), JWT (automation), CCG (server-to-server), Developer Token (testing, 60 min).
jq is required for the hook scripts.
Follow this workflow for every Box operation:
box users:get --me, identify target folder ID, check the trust zonereferences/operations-guide.md for commands)| Zone | Operations | Behavior |
|---|---|---|
| Read | search, list, download, metadata | Execute freely |
| Create | upload new, create folders | Verify parent folder ID first |
| Update | version upload, move, copy | Use file ID, prefer files:versions:upload |
| Expose | share links, access levels | Default collaborators, never open unless explicit |
| Destructive | delete, bulk reorganize | Only on explicit request; summarize first |
box files:versions:upload FILE_ID for updates. Avoids 409 conflicts, preserves history.--access open shared links unless user says "public" or "open."box folders:items FOLDER_ID --json # list folder
box search "query" --type file --json # search
box files:download FILE_ID --destination ./ # download
box files:upload ./file.txt --parent-id FOLDER_ID # upload new
box files:versions:upload FILE_ID ./file.txt # update existing
box files:share FILE_ID --access collaborators # share (narrow)
box folders:download FOLDER_ID --destination ./ # bulk download
Full command reference with examples: references/operations-guide.md
Initialize a workspace, work locally, push changes back. The manifest tracks file IDs.
${CLAUDE_PLUGIN_ROOT}/scripts/box-init-workspace.sh FOLDER_ID /tmp/box-workspace
With hooks active, every Write/Edit auto-syncs. For manual sync, compare local state against the manifest:
box files:versions:upload FILE_ID (version update)box files:upload --parent-id FOLDER_ID (new upload)Full sync workflow with conflict detection: references/sync-pattern.md
Every write operation returns:
Read operations return JSON with id, name, size, modified date.
| Error | Recovery |
|---|---|
Not Found (404) |
Verify ID with box search or re-list parent folder |
Conflict (409) |
Use files:versions:upload to update, or --name for distinct file |
Forbidden (403) |
Re-run box login or check JWT scopes |
Rate Limited (429) |
CLI retries automatically; batch via --bulk-file-path |
Auth expired |
Run box login; use JWT/CCG for production |
box: command not found |
npm install --global @box/cli |
| Name collision | Use file ID, never filename, to identify targets |
| Local/remote divergence | Re-download, diff, ask user which to keep |
Always report what failed and what succeeded. Never silently skip. Full error table: references/operations-guide.md
Back up docs to Box:
box folders:create 0 "my-project-docs" --json
box files:upload docs/README.md --parent-id FOLDER_ID
box folders:share FOLDER_ID --access collaborators
Pull, analyze, push back:
box search "Q1 sales" --type file --json
box files:download FILE_ID --destination /tmp/box-workspace/
# analyze locally, then push result
box files:upload /tmp/box-workspace/summary.md --parent-id PARENT_ID
Workspace sync (with hooks):
${CLAUDE_PLUGIN_ROOT}/scripts/box-init-workspace.sh FOLDER_ID /tmp/box-workspace
# edit files normally — hooks auto-sync to Box
More detailed examples: references/sync-pattern.md