Saphan StudioDocs
Reference/Commands

saphan seat

Acts on one seat — a vendor CLI login, with its own profile directory, on an admitted machine: checking and repairing its credential, configuring its vendor settings, and issuing or ending the tokens

Acts on one seat — a vendor CLI login, with its own profile directory, on an admitted machine: checking and repairing its credential, configuring its vendor settings, and issuing or ending the tokens and keys it signs with. Machines themselves are managed with saphan machine.

saphan seat auth

Reports what the record says about a seat's credential: credential-dead, reauth-recorded, lane-limited (a usage limit, which waiting fixes and re-login does not), credential-ok or never-measured, with the age of the evidence. Only for credential-dead does it print the exact command to run on the seat's own host to log in again; it never logs in itself. By default it only reads the record and costs nothing; an old credential-ok can be stale, so use --probe to check live.

saphan seat auth --identity <seat>
saphan seat auth --identity <seat> --probe   # one paid model turn
saphan seat auth
flagtypedefaultwhat it does
--identitystringThe seat to report on; omitted, every seat in the registry is reported.
--machinestringLook the seat up on this one admitted machine only. Without it, the name is resolved across all machines and the last declaration wins.
--probeboolfalseRun one non-interactive, billed model turn on each named seat under its own profile, record the result, and answer from it. ⚠ Without --identity this bills a turn on every seat in the registry.
--requested-bystringWhen a tool or screen requests the probe on someone's behalf, who asked; written into the probe's record note. The recorded actor remains the engine.

saphan seat auth-performed

Records that a named person re-authenticated a seat whose credential the record reads as dead, so seat auth reports reauth-recorded until the next real run confirms it. This is a report, not a check: nothing contacts the vendor, yet it makes the seat dispatchable again. Refused on a seat whose credential is not recorded as dead.

saphan seat auth-performed
flagtypedefaultwhat it does
--bystringThe person who performed the login — a person, not a role; recorded as given and not verified. Required.
--identitystringThe seat that was re-authenticated. Required.

saphan seat configure

Copies the workspace's declared settings into one seat's vendor configuration file (today codex only): the retry settings for server-side capacity refusals, written only for a ChatGPT login, and network access to the channel store, written only when the seat's permission class already allows it. It writes no credential and widens no permission. A key you set to a different value is refused and both values are shown, never overwritten; lines this command wrote earlier for a ChatGPT login are removed if the seat no longer reads as one. Re-run it after any re-login.

saphan seat configure
flagtypedefaultwhat it does
--backendstringWhich vendor's configuration to write; today only codex.
--seatstringThe seat's own profile directory (for codex, its CODEX_HOME). Required.

saphan seat grant-token

Issues a bearer token of one class for an actor already bound to the workspace, and writes it to a file in the server's state directory with mode 0600; the token is never printed. issuance is the token engines and agents use to obtain seat keys, placement is the engine's own token for requesting each run's issuance nonce when the run is placed, and operator is for saphan seat revoke. Nothing but file access to the server's state directory and its signing key decides who can issue a token: run it as the user that owns that directory. Without --yes it only shows what it would issue.

saphan seat grant-token
flagtypedefaultwhat it does
--actorstringThe bound actor the token is issued for. Required.
--classstringThe token class: issuance, placement or operator. Required.
--register-clientstringRegister the actor as a client in the server's registry under this client id, if it is not registered yet; a running server reads it at its next restart.
--replaceboolfalseOverwrite an existing token file, to refresh the token; without it an existing file is refused.
--ttlduration0sThe token's lifetime; defaults to 720 hours for issuance and placement tokens (at most 2160) and 24 hours for operator tokens (at most 168).
--yesboolfalseIssue and write the token; without it, the command only shows what it would do.

saphan seat revoke

Ends a seat key using an operator token. --cause leak-report marks the key compromised from its creation, so everything it ever signed reads as compromised — ⚠ this is permanent and cannot later be turned into a plain retirement; --cause run-end retires the key of a run that has ended, and is refused while the run is still running. Anyone holding an operator token can send either cause for any seat key. Without --yes it only shows what it would send.

saphan seat revoke
flagtypedefaultwhat it does
--causestringWhy the key is ended: leak-report or run-end. Required.
--keystringThe seat key id (sek-…), as shown in a signed document's author verdict. Required.
--token-filestringThe operator token file; defaults to seat-operator.token in the server's state directory.
--yesboolfalseSend the request; without it, the command only shows what it would send.

Global options apply to every command — see Every command.

On this page