Files to and from your remote machines
Collect a report, image or checkpoint from a machine, or send it a config or release file from your AI client.
Pro plan required · Up to 100 MiB per file.
Download links last 1 hour. Access to stored files ends 24 hours after creation.
Transfers require a signed-in Pro account. A downgrade leaves existing files and links available until their original expiry. This is temporary storage; an hourly, retrying cleanup sweep removes expired bytes after access ends.
Download a file
remote_pull(code, path) reads one regular file at an absolute path on the connected machine,
puts its bytes in a temporary relay blob, and returns a blobId plus a download URL.
The account must have Pro and the machine must not be restricted by the account's device limit.
# MCP
remote_pull(
code="gpu-box",
path="/home/u/aic-jobs/train/metrics.json"
)
# REST
curl -s -X POST https://aicommander.dev/api/v1/pull \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"code":"gpu-box","path":"/home/u/aic-jobs/train/metrics.json"}'
Upload a file
To send a file to your machine, upload bytes with POST /api/v1/files, then call
remote_push(code, blob_id, dest_path) or POST /api/v1/push.
Uploading and pushing both require a signed-in Pro account. The agent writes beside the destination and
atomically renames the completed file, so an interrupted transfer does not leave a partial replacement.
dest_path already names a file, a successful
remote_push replaces it atomically. Confirm the destination before pushing; the old contents are not recoverable through AI Commander.
# curl supplies Content-Length when uploading from a file
BLOB_ID=$(curl -s -X POST https://aicommander.dev/api/v1/files \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/octet-stream' \
--data-binary @release.tar.gz | jq -r .blobId)
curl -s -X POST https://aicommander.dev/api/v1/push \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d "{\"code\":\"api-prod\",\"blob_id\":\"$BLOB_ID\",\"dest_path\":\"/tmp/release.tar.gz\"}"
Transfer limits
| Rule | File transfer | What to do |
|---|---|---|
| File size | 100 MiB maximum | Use your own object storage or artifact registry for larger files. |
| Source type | One regular file | Archive a directory into one file before pulling it. |
| Blob access | Expires at 24 hours | Download promptly; an hourly, retrying sweep removes inaccessible expired bytes. |
| Download link | 1 hour | Open or share it while it is fresh. |
| Plan access | Pro | Free and anonymous callers cannot upload, pull, or push. |
| Request deadline | About 55 seconds | Move slow or large artifacts directly through storage you control. |
tar -czf /tmp/report.tgz ./report, then pull /tmp/report.tgz.
Do not split a large artifact merely to route it through the relay; let the producing job upload to your own storage.
Fair-use quotas
Quotas protect the shared temporary courier after the Pro entitlement check. Going over one returns
429 with reason: "rate_limited"; wait for capacity or move the artifact through storage you control.
| Budget | Limit | How it is charged |
|---|---|---|
| Machine transfers | 60/hour/account | remote_pull and remote_push share this count. |
| Caller uploads | 60/hour/account | POST /api/v1/files; also capped at 5,000 uploads/hour across the relay. |
| Stored bytes | 5 GiB/subject/rolling day | Charged by caller uploads and pulls, which put bytes into the relay; pushes do not charge it again. |
Where it helps
Give your AI more than a text result
Install the agent, connect your AI client, and move the first artifact with the built-in courier.