A secret can now be given to the machine as its real value
Some secrets are not HTTPS headers: a database password, an SSH key, a signing key or a service account's JSON file. Store one with --exposed (or exposed: true in the API, the MCP tool and the SDKs) and the machines it reaches get the value itself in its variable. It may be any text up to 64 KiB, several lines included. The value is still sealed, and opened only on the server that runs the machine. Code in the machine can read it, so the placeholder kind stays the default and the one to use for HTTPS APIs. For the same reason, it goes only to the sandboxes and Apps you name by id (--only-sandbox, --only-app), never to every sandbox or by label, and only a key that may run commands in each of them can store it. Which machines get it changes only when you store it again with its value. Every secret now has a version too, one more for each change to it: its value, who gets it, its hosts or its variable. Pass it as expectedVersion (--expected-version) and a write happens only if no one has changed the secret since; otherwise the answer is 409 version_conflict. GET /v1/egress-secrets/{name} and runtime secrets get show one secret's kind and version, never its value. The website's Secrets page offers both kinds and shows each secret's kind and version. See a secret the machine needs itself.