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.

Download a file
Choose a file on your machine and get a temporary download link.
Upload a file
Upload a file, then send it to a path on your machine. An existing file at that path is replaced.

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.

Your machineone regular file
Temporary relay blobreadable for up to 24 hours
Download URLvalid for 1 hour
# 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.

A push overwrites. If 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

RuleFile transferWhat to do
File size100 MiB maximumUse your own object storage or artifact registry for larger files.
Source typeOne regular fileArchive a directory into one file before pulling it.
Blob accessExpires at 24 hoursDownload promptly; an hourly, retrying sweep removes inaccessible expired bytes.
Download link1 hourOpen or share it while it is fresh.
Plan accessProFree and anonymous callers cannot upload, pull, or push.
Request deadlineAbout 55 secondsMove slow or large artifacts directly through storage you control.
Directories do not transfer directly. Create a regular archive first, for example 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.

BudgetLimitHow it is charged
Machine transfers60/hour/accountremote_pull and remote_push share this count.
Caller uploads60/hour/accountPOST /api/v1/files; also capped at 5,000 uploads/hour across the relay.
Stored bytes5 GiB/subject/rolling dayCharged by caller uploads and pulls, which put bytes into the relay; pushes do not charge it again.
Pulls reserve headroom. The relay cannot know a remote file's size before it arrives, so a pull temporarily reserves the full 100 MiB per-file maximum and settles to the actual size afterward. With less than 100 MiB of rolling-day headroom left, even a smaller pull can be refused; concurrent pulls reserve from the same pool.

Where it helps

GPU and ML artifacts
Collect a small checkpoint, metrics file, or rendered image from a headless GPU machine.
CI build artifacts
Bring back one build output or an archived log bundle from the actual runner.
Configs and releases
Push a config or small release artifact, then run the deployment command.
NAS reports and archives
Pull a health report or one small archive without exposing an inbound port.

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.