Credential lifecycle
Persistence: dashboard only
Credentials live in your account at cli.syntheticsciences.ai, encrypted at rest. The CLI never writes them to disk. There is no
~/.synsc/credentials file, no entry in ~/.aws/credentials, no HF_TOKEN in your shell profile. The dashboard is the only persistent layer.Sync: in-memory at session start
Each
synsc launch fetches credentials over an authenticated TLS channel and holds them in process memory. When the process exits, the credentials are gone, there’s no long-lived daemon retaining them.Subprocess injection: filtered env
When the agent runs a shell command, the CLI builds a custom environment for that subprocess. Provider keys that aren’t relevant to the command are stripped, see the filtering policy below.
Subprocess env filtering
Not every subprocess needs every credential. The CLI filters the env it passes based on what the command is doing:| Subprocess | Credentials passed |
|---|---|
| Python training script | HF, W&B (if used), and any cloud creds (AWS/GCP) the script imports |
git | None of the synced provider keys; git doesn’t need them |
curl to a third-party API | None, curl gets a clean env unless the prompt explicitly authorized otherwise |
modal CLI | Modal token only |
lambda-cloud CLI | Lambda key only |
aws CLI | AWS keys only |
printenv with HF_TOKEN exposed so I can verify the value.” The agent treats this as an authorization and unmasks for that single call.
Output redaction
Even though credentials only enter subprocess envs, sometimes a command echoes one back. Common cases:printenv, debug logs from cloud SDKs, or a misconfigured curl command with -v.
The CLI runs an output filter that scans subprocess stdout and stderr for any synced credential value and replaces it with [REDACTED] before display:
Authentication: device flow
The CLI uses a device-code OAuth flow to authenticate against the dashboard. The flow:- CLI requests a device code from the dashboard.
- Dashboard returns the code and a short-lived (15-minute) verification URL.
- CLI prints the URL and code; opens your browser.
- You confirm the code in the browser.
- CLI polls until the dashboard issues a Bearer token, then stops polling.
- No localhost callback server. The CLI doesn’t open a port for the OAuth callback, there’s nothing to attack on the local machine.
- Works headless. SSH and remote-tunnel sessions can complete login by visiting the URL on any device.
- Codes expire fast. A 15-minute window means a stolen device code is useless after the timeout.
synsc connect logout and synsc connect login again.
Per-user isolation
Even on shared infrastructure, your credentials and sessions are isolated:- Supabase Row-Level Security scopes credential rows to your user ID at the database level. Even an admin without explicit permissions cannot read your row.
- Bearer-token auth means each session presents a token bound to your user ID. The dashboard rejects any request not matching the issuing user.
- Process memory is per-CLI-process. Two CLI sessions on the same machine each pull their own credentials from the dashboard, they don’t share state.
synsc connect logout when you step away. The Bearer token becomes unusable immediately.
Network surface
The CLI talks to:- The Synsci dashboard at
cli.syntheticsciences.aifor credential sync and usage reporting. - The Synsci model proxy for Anthropic, OpenAI, and Google routing.
- Whatever the agent decides to call, git remotes, cloud APIs, package registries, etc.
Reporting issues
If you find a security issue in Synsci CLI, please email security@syntheticsciences.ai with a description and reproduction steps. Critical issues are acknowledged within 24 hours.What’s next
- Credentials. The user-facing view of how tokens enter and leave subprocesses.
- Dashboard. The persistent layer where credentials and sessions live.