Setup
/remote-sync setup to open the editable form.
Choose a provider and enter the required bucket, container, or store name. Provider defaults to aws. Optional settings contains the prefix (default
opensre), provider-supported region/profile fields (optional, using ambient
configuration when empty), and the enabled switch (default Yes for new setups).
Existing stored settings and supplied flags prefill the form. Changing the
provider updates its fields and credential guidance. Save settings writes
~/.opensre/config.yml; Cancel, Esc from review, or Ctrl-C saves nothing.
Validation errors keep your draft editable. Setup saves configuration only: it
does not verify access, create a store, or transfer files. Use a private store.
External CLI commands (opensre remote-sync setup) and chat gateways use flags
only, even on a TTY. Missing --bucket returns an actionable error without
prompting or saving. Provider is optional and defaults to aws; for example,
opensre remote-sync setup --bucket my-opensre-bucket saves directly. Complete
REPL flag commands also save without opening the form. For example:
--prefix= uses the default prefix. setup --disabled only turns sync off,
keeping the stored destination; to save new settings while disabled, also supply
--bucket (and optionally --provider). Credentials stay in the provider’s
ambient environment, not in this form or config file. Environment variables still override saved
settings for a run.
Or set env vars yourself:
OPENSRE_REMOTE_SYNC=1 (or enable it via opensre remote-sync setup).
Env vars override
~/.opensre/config.yml for that run. --region / --profile only work with AWS and Azure (profile = storage account); setup rejects them for other providers.
Every machine that should share history needs the same provider, store, and prefix (and for Vercel, a token for that store).
Sync
/remote-sync status and /remote-sync sync.
To run one full sync automatically after an interactive shell session exits:
opensre
session remains manual-only. If the automatic sync fails, OpenSRE prints a
warning without changing the shell’s exit status.
Providers
AWS / S3 — private bucket. Uses your normal AWS credentials (AWS_*, profile, or SSO). Uploads use server-side encryption (AES256). Needs s3:ListBucket, s3:GetObject, and s3:PutObject on your prefix. Sync never deletes objects, so s3:DeleteObject is not required.
Google Cloud Storage — private bucket. Set OPENSRE_REMOTE_SYNC_PROVIDER=gcs. Credentials come from Application Default Credentials (gcloud auth application-default login). Needs storage.objects.list, storage.objects.get, storage.objects.create, and storage.objects.delete (delete is required to replace an object even though sync never removes keys). A bucket-scoped roles/storage.objectUser binding covers all four.
Vercel Blob — private store. Set BLOB_READ_WRITE_TOKEN. OPENSRE_REMOTE_SYNC_BUCKET is the store name/id for status.
Azure Blob Storage — private container. Set OPENSRE_REMOTE_SYNC_PROVIDER=azure, OPENSRE_REMOTE_SYNC_BUCKET to the container name, and OPENSRE_REMOTE_SYNC_PROFILE to the storage account name. Auth uses ambient Azure credentials (az login, Managed Identity, or AZURE_*). The principal needs Storage Blob Data Contributor on the account (plain Contributor is not enough).
S3-compatible (MinIO / R2 / Spaces) — set OPENSRE_REMOTE_SYNC_PROVIDER=s3compat and OPENSRE_REMOTE_SYNC_ENDPOINT_URL to the custom endpoint (or AWS_ENDPOINT_URL_S3). Path-style addressing is enabled for MinIO. Use the same ambient S3 credentials as AWS.
Skip some paths
By default every session and memory file syncs. To hold some back:~/.opensre/config.yml:
sessions/… or memory/… (case-sensitive). * can cross folders. Excluded paths are skipped both ways (not uploaded, not downloaded). Patterns starting with ! are rejected. Sync never deletes from the store.
Conflicts
Sync pulls first, then pushes.- Only on one side → copied to the other
- Both changed → newer write wins
- Nothing is deleted on either side