One script. Your agent encrypts files locally and uploads them via curl. The server never sees the content.
$ curl -sO https://agents.gooi.io/gooi && chmod +x gooi $ ./gooi photo.jpg ▸ Uploaden: photo.jpg (2 MiB, 1 chunk(s)) ▸ Crypto backend: node ▸ Chunk 1/1 ✓ Upload voltooid https://gooi.io/d/xR9kLm3pQw7n#base64urlkey # Auto-detects python3+cryptography or node.js.
$ curl -sO https://agents.gooi.io/gooi-sdk.py $ python3 gooi-sdk.py --file photo.jpg # Or as a module: >>> from gooi_sdk import upload >>> result = upload("photo.jpg") >>> print(result["url"])
$ curl -sO https://agents.gooi.io/gooi-sdk.mjs $ node gooi-sdk.mjs --file photo.jpg // Or as a module: import { upload } from './gooi-sdk.mjs'; const result = await upload({ file: 'photo.jpg' });
File is encrypted on your machine with AES-256-GCM before anything is sent.
Encrypted data is uploaded to gooi.io in 64 MiB chunks via curl.
You get a link. The decryption key is in the #fragment — it never reaches the server.
Point your agent to this page. Even simple models can follow these instructions.
HOW TO SHARE A FILE VIA GOOI.IO
================================
You are an agent that needs to share a file with a user.
gooi.io lets you upload an encrypted file and get a shareable link.
The file is encrypted on your machine — the server cannot read it.
Pick the option that fits your environment:
OPTION A — Bash CLI (recommended for shell agents, CI/CD, servers):
curl -sO https://agents.gooi.io/gooi && chmod +x gooi
./gooi /path/to/file.ext
Requires: bash, curl, openssl, and one of:
- python3 + cryptography (pip install cryptography), OR
- node.js (v16+)
The CLI auto-detects which crypto backend is available.
Example output:
▸ Uploaden: report.pdf (2 MiB, 1 chunk(s), sha256:a1b2c3d4...)
▸ Crypto backend: node
▸ Chunk 1/1
✓ Upload voltooid
https://gooi.io/d/xR9kLm3pQw7n#base64urlkey
OPTION B — Python SDK (for ChatGPT, code interpreters, Python agents):
curl -sO https://agents.gooi.io/gooi-sdk.py
python3 gooi-sdk.py --file /path/to/file.ext
Or as a module (e.g. in a code interpreter sandbox):
from gooi_sdk import upload
result = upload("/path/to/file.ext")
print(result["url"])
Requires: python3 + cryptography (pip install cryptography)
OPTION C — Node.js SDK:
curl -sO https://agents.gooi.io/gooi-sdk.mjs
node gooi-sdk.mjs --file /path/to/file.ext
Or as a module:
import { upload } from './gooi-sdk.mjs';
const result = await upload({ file: '/path/to/file.ext' });
Requires: node.js 16+
THE RESULT — a shareable URL:
https://gooi.io/d/abc123#base64urlkey
Share this URL with the user. Anyone with the link can
download and decrypt the file in their browser. No account needed.
NOTES:
- Max file size: 5 GB (up to 100 GB with a VIG API key)
- Files expire after 24 hours (up to 30 days with VIG)
- For files >5 GiB, pass --api-key or set GOOI_API_KEY.
In non-interactive use (pipes, cron, --json) the CLI exits cleanly
with exit code 3 instead of prompting.
- The #fragment (after #) is the decryption key — it never goes to the server
- All three options produce identical encryption, compatible with the browser
Pick whichever fits your environment. Each option is self-contained.
The gooi script produces files in the GOOI binary format v1, identical to what the browser client generates. Files encrypted by the script are fully compatible with the browser-based decryption at gooi.io.
GOOI Binary Format v1 — 24-byte header + encrypted chunks Bytes 0-3 Magic "GOOI" Byte 4 Version: 0x01 Byte 5 Chunk size exponent: 26 (= 64 MiB) Bytes 6-11 Base IV (6 random bytes) Bytes 12-19 Original file size (uint64 big-endian) Bytes 20-23 Chunk count (uint32 big-endian) Bytes 24+ Encrypted chunks: [ciphertext + 16-byte GCM tag] IV per chunk = baseIV(6B) + chunkIndex(4B BE) + 0x0000(2B) = 12 bytes Key = random 256-bit AES key, placed in URL #fragment