CLI configuration previews and writes
September 24, 2026 ยท View on GitHub
The authenticated /api/cli-tools/config and /api/cli-tools/apply routes return
non-cacheable, redacted previews. They preserve the existing authentication and
authorization checks. Request bodies reject unknown fields. An explicit base URL
must use HTTP(S) without embedded username/password credentials; when omitted,
the server's configured base URL is used.
For a batch preview, GET /api/cli-tools/config accepts an optional baseUrl query
parameter and takes the configuration credential from the
x-omniroute-config-api-key header. Credentials in the query string are rejected.
POST /api/cli-tools/config accepts toolId, baseUrl, apiKey and optional
model in its JSON body. Responses use Cache-Control: no-store on both success
and error paths. Preview text is not a usable credential-bearing configuration.
Preview projection redacts serialized caller credentials and credential fields already present in merged JSONC, TOML or YAML profiles. The apply route writes the original configuration; preview redaction does not alter the on-disk values. Malformed JSON is rejected with 400. Public error responses use the standard sanitized error envelope.
Applying a configuration uses a private temporary file in the destination
directory, flushes it, and atomically renames it into place. Files and backups use
mode 0600; permissions are set on the owned descriptor before rename. Final
destination symlinks and non-regular files are refused. Codex and OpenCode reads
also refuse final-path symlinks before merging existing TOML/JSONC. This does not
claim protection against an adversary who controls the parent directory.
The container write guard remains active: an unsafe ephemeral destination returns 422 and directs the operator to the host-side setup command. A dry run remains available and does not write files. See CLI integrations for the supported host-side setup commands and error sanitization for the public error contract.