CLI commands
File transfers
openclaw file-transfer
Review the standing approvals that the file-transfer plugin stores under
plugins.entries.file-transfer.config. The command group ships with the
file-transfer plugin. It is absent when that plugin is not installed.
file-transfer approvals migrate
Review older file-transfer permissions and migrate them to the current policy format. Older positive permissions stay inactive until this review finishes. Deny rules, size limits, and symlink settings keep applying throughout.
openclaw file-transfer approvals migrateopenclaw file-transfer approvals migrate --dry-runopenclaw file-transfer approvals migrate --json| Option | Effect |
|---|---|
--dry-run |
Walk the prompts and print the plan. No config is written. |
--json |
Print the unreviewed permissions as JSON and exit. No prompts, no config write. |
Both options default to off.
Where it runs
Run the command on the Gateway host in an interactive terminal. The command
updates that host's file-transfer policy, so it refuses to run when
gateway.mode is remote. It also refuses when the OpenClaw config is invalid.
Fix the config first, then rerun.
What the interactive run asks
The command lists one entry per legacy permission, shown as
<node selector> · read|write · <path>. Choose one outcome per entry:
- Require exact reapproval removes the ambiguous permission. The next use prompts once and records the exact node, command, requested path, and canonical target.
- Keep as an intentional wildcard preserves the entry as an operator-authored glob.
- Remove this permission drops the entry outright.
The command then prints a plan with the count for each outcome, plus a downgrade note. It asks for one confirmation before writing. On success it writes the migrated config and reports the adjacent config backup path. It says so when that backup cannot be verified.
Scripted and non-interactive use
--json reports the work without changing anything. Use it in a health check or
an upgrade script.
| Situation | Output | Exit code |
|---|---|---|
| Nothing to review | {"status":"ok","changed":false,"message":"No legacy permissions need review."} |
0 |
| Permissions still need review | {"status":"needs-input","changed":false,"items":[...],"command":"openclaw file-transfer approvals migrate"} |
2 |
Without --json, the command checks for work first. A non-interactive shell is
an error only when permissions still need review. The command then tells you to
rerun it in a terminal rather than guessing an outcome for each permission. A
non-interactive run with nothing to review prints the same no-work message and
exits 0, so a repeated upgrade script stays quiet.