| name | r2 |
| description | Cloudflare R2 Storage management — setup, upload, download, sync via rclone |
| metadata | {"clawdbot":{"emoji":"☁️","requires":{"bins":["rclone"]},"env":["R2_CONFIG"],"install":[{"id":"rclone","kind":"shell","command":"curl -fsSL https://rclone.org/install.sh | sudo bash","label":"Install rclone"}]}} |
r2 ☁️
Cloudflare R2 Storage management using rclone.
Install
curl -fsSL https://rclone.org/install.sh | sudo bash
Credentials Required
Set R2_CONFIG in dashboard with this JSON format:
{
"access_key_id": "YOUR_ACCESS_KEY_ID",
"secret_access_key": "YOUR_SECRET_ACCESS_KEY",
"endpoint": "https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com",
"bucket": "your-bucket-name"
}
Get credentials from Cloudflare:
- Go to https://dash.cloudflare.com → R2
- Create API token with Object Read/Write/List permissions
- Copy Account ID (from R2 dashboard URL)
- Endpoint format:
https://<account_id>.r2.cloudflarestorage.com
Setup
r2-setup --config '{"access_key_id":"...","secret_access_key":"...","endpoint":"...","bucket":"..."}'
Or run interactively:
./skills/r2/scripts/setup.sh
Commands
Upload
r2-upload /path/to/file.txt
r2-upload /path/to/folder/
r2-upload /path/to/file.txt --bucket other-bucket
Download
r2-download file.txt /local/path/
r2-download folder/ /local/
r2-download file.txt
List
r2-ls
r2-ls my-bucket
r2-ls --long
Sync (One-way)
r2-sync /local/folder/ r2:bucket/
r2-sync r2:bucket/ /local/folder/
r2-sync /local/ r2:bucket/ --delete
Delete
r2-rm file.txt
r2-rm folder/
r2-purge my-bucket
Show Credentials
./skills/r2/scripts/show-creds.sh
./skills/r2/scripts/show-creds.sh --raw
Direct rclone Commands
rclone copy /local/file.txt r2:bucket/
rclone sync /local/ r2:bucket/ -P
rclone size r2:bucket
Config Location
- Env config:
~/.config/r2/config.json (or dashboard R2_CONFIG)
- rclone config:
~/.config/rclone/rclone.conf
- Named remote:
r2
Troubleshooting
403 Access Denied
Token lacks permissions. Update API token in Cloudflare with:
- Object Read ✅
- Object Write ✅
- Object List ✅
Bucket Not Found
Create the bucket first:
rclone mkdir r2:bucket-name