@oliverne/myboxctl
v0.4.2
Published
Agent-friendly CLI for NAVER MYBOX file operations
Readme
myboxctl
myboxctl is a small, predictable CLI for managing files through the NAVER MYBOX Open API.
It is built for AI-agent subprocesses and remains readable for direct terminal use. It is not a
sync tool, SDK, MCP server, or complete API wrapper.
I built it for my own Hermes Agent and Codex CLI workflows. This is an independent project and is not affiliated with NAVER.
Commands
| Command | Purpose |
| ------------- | ---------------------------------------------------- |
| list / ls | List a folder or show one resource |
| info | Show file or folder metadata |
| mkdir | Create a remote folder; supports -p |
| upload | Upload a file or an explicit recursive folder tree |
| download | Download a file or an explicit recursive folder tree |
| delete | Move a remote file or folder to the MYBOX trash |
| rename | Rename a file or folder in place |
| move | Move a file or folder into an existing folder |
Install
Requires Node.js 20 or later.
npm install -g @oliverne/myboxctl
myboxctl --versionSet a MYBOX PAT through MYBOX_PAT, or store one token line in
~/.config/myboxctl/credentials with file mode 600. Never pass a PAT as a CLI argument or put it
in source code, logs, or Git.
Quick start
Remote paths are absolute POSIX paths beginning with /.
myboxctl list /agents
myboxctl info /agents/report.md
myboxctl mkdir -p /agents/output
myboxctl upload ./report.md /agents/output/ --mkdir
myboxctl download /agents/output/report.md ./report.md
myboxctl upload ./reports /agents/ --recursive --mkdir
myboxctl download /agents/reports ./reports-copy --recursive
myboxctl delete /agents/output/report.md
myboxctl rename /agents/output/draft.md final.md
myboxctl move /agents/output/final.md /agents/archive/Paths containing spaces must be quoted so that the shell passes each path as one argument. The quotes are shell syntax and are not part of the local or remote file name.
PowerShell accepts single or double quotes:
myboxctl download '/Team Files/big report.zip' '.\Local Files\big report.zip'Use double quotes in Command Prompt (cmd.exe):
myboxctl download "/Team Files/big report.zip" ".\Local Files\big report.zip"Important behavior:
uploadcompares size and modification time, not content hashes. It skips matching files and rejects a clearly newer remote file; use--forceonly for an intentional overwrite.downloadpreserves an existing local file unless--overwriteis explicit.- Folder transfer requires
--recursive, never merges an existing destination tree, and rejects symlinks and names that are not portable across macOS, Linux, and Windows. It excludes macOS AppleDouble metadata files whose names start with._. deletemoves resources to the MYBOX trash. Root, encrypted folders, and shared-with-me folders are unsupported.renameandmovekeep the resource ID, call exactly one mutation endpoint, and fail before mutating when the new name collides with another resource in the destination.moverequires an existing destination folder, rejects a folder moving into itself or its descendant, and never renames.- New remote resources are created with NFC names. Existing lookups use the given spelling, and
ambiguous Unicode-equivalent candidates fail safely.
renamesends the requested name as-is.
Automation
Use --json and check the exit code first. Stdout contains one schemaVersion: 1 JSON result. With
--verbose, safe progress events are written as JSON Lines to stderr. PATs and signed transfer URLs
are redacted.
myboxctl upload ./report.md /agents/output/ --mkdir --jsonSet MYBOX_PLAN to 30GB, 80GB, 180GB, 330GB, 2TB, 5TB, 10TB, or 20TB to apply the
documented plan-specific local limits and download daily-limit advisory. A {"plan":"180GB"} value
in ~/.config/myboxctl/config.json is used when the environment variable is absent. The plan is
declared by the user; it cannot be detected safely from storage capacity.
For an opt-in support log, add --diagnostic-log <new-file>. The file is created exclusively and
contains JSONL events and the final result, but it may contain local paths and a redacted stack;
review it before sharing. Existing files are never overwritten.
| Exit | Meaning | | ---: | ------------------------------ | | 0 | Success | | 2–5 | Input, auth, missing, conflict | | 6–8 | API, local I/O, rate limit | | 70 | Unexpected internal error |
See the versioned CLI contract for exact JSON fields, actions, options, and exit-code semantics.
Agent Skill
The repository includes a reusable
Agent Skill with CLI
installation, command examples, and the essential safety rules. Copy the entire skill directory to
your agent's skill location; for Hermes user skills, use ~/.hermes/skills/myboxctl/.
Development
Source development requires Bun 1.4 or later.
bun install --frozen-lockfile
bun run check
bun run buildLive MYBOX tests are opt-in and mutate only an isolated test prefix.
MYBOX_PAT=<YOUR_PAT> bun run test:integration