On this page
Configuration
Skryba has no configuration file. The CLI reads flags and environment variables; flags backed by clap environment bindings win over the environment. Skryba Desktop optionally supplies missing environment variables from ~/.config/skryba/env before spawning the CLI.
Model inference
| Variable / flag | Default | Reader | Meaning |
|---|---|---|---|
BRAMA_URL / --brama-url |
unset | src/cli/args/mod.rs |
Brama base URL; Skryba appends /v1/chat/completions for generation or /v1/decisions for typed choices |
SKRYBA_MODEL_SERVICE_URL / --model-service-url |
unset | src/cli/args/mod.rs |
OpenAI-compatible service base URL; conflicts with --brama-url |
BRAMA_TOKEN_ROLE |
unset | src/app/brama/credentials.rs |
ROLE#FIELD resolved by stado credentials get --role; returned value is the bearer |
SKRYBA_MODEL_SERVICE_KEY_FILE |
unset | src/app/brama/credentials.rs |
owner-only regular file holding a bearer; required with the direct-service URL and refused with the Brama URL |
SKRYBA_MODEL / --model |
required for chat generation and direct-service decisions | src/cli/args/mod.rs |
chat model sent to the selected route; Brama's folder and held-out voice decisions use decision-model instead |
SKRYBA_JUDGE_MODEL / --judge-model |
generator model | src/cli/args/mod.rs |
quality-judge model |
SKRYBA_AGENT_ID |
unset | src/app/brama/mod.rs |
optional agent identity; pair with the secret |
SKRYBA_AGENT_AUTH_SECRET_ROLE |
unset | src/app/brama/credentials.rs |
optional ROLE#FIELD for the HMAC secret; pair with agent id |
STADO_BIN |
stado |
src/app/brama/credentials.rs |
executable resolving credential roles |
SKRYBA_CREDENTIALS_FILE |
unset | src/app/brama/credentials.rs |
explicitly selected owner-only JSON role → field → value file for use without Stado |
The URL flag determines the credential route. --brama-url (or BRAMA_URL) requires BRAMA_TOKEN_ROLE and refuses a service key-file declaration. --model-service-url (or SKRYBA_MODEL_SERVICE_URL) requires SKRYBA_MODEL_SERVICE_KEY_FILE and refuses Brama token and signing declarations; it sends no agent signature. The URL flags conflict. On the Brama route, agent id and secret are all-or-nothing; a present-but-blank declaration is refused. The generator and judge must support the requested output language. A style or language selection does not remove credential requirements. Calls carry no token budget: the routed model writes until it ends.
Role references never name vault items. Missing fields, empty secrets, invalid
references and failed credential commands are errors; the explicit credentials
file is not an automatic fallback. BRAMA_TOKEN and
SKRYBA_AGENT_AUTH_SECRET are retired and are not read. See
credential boundary for the file shape.
Detector selection
| Variable / flag | Default | Reader | Meaning |
|---|---|---|---|
GPTZERO_API_KEY |
unset | src/text/detectors/ensemble.rs, src/text/detectors/http.rs |
enables GPTZero |
WINSTON_API_KEY |
unset | src/text/detectors/ensemble.rs, src/text/detectors/http.rs |
enables Winston |
ORIGINALITY_API_KEY |
unset | src/text/detectors/ensemble.rs, src/text/detectors/http.rs |
enables Originality.ai |
SAPLING_API_KEY |
unset | src/text/detectors/ensemble.rs, src/text/detectors/http.rs |
enables Sapling |
GPTZERO_API_URL |
https://api.gptzero.me/v2/predict/text |
src/text/detectors/http.rs |
endpoint override |
WINSTON_API_URL |
https://api.gowinston.ai/v2/ai-content-detection |
src/text/detectors/http.rs |
endpoint override |
ORIGINALITY_API_URL |
https://api.originality.ai/api/v3/scan |
src/text/detectors/http.rs |
endpoint override |
SAPLING_API_URL |
https://api.sapling.ai/api/v1/aidetect |
src/text/detectors/http.rs |
endpoint override |
--detectors |
infer from non-empty API keys | src/cli/args/mod.rs, src/text/detectors/ensemble.rs |
comma-separated provider names |
--detector-interval-ms |
none; requests are not paced | src/cli/args/mod.rs |
pause between two requests to one detector |
Endpoint overrides are primarily for controlled deployments and offline fixtures. The endpoint is part of the score cache namespace, so an override cannot reuse a different endpoint's scores. Fixture responses do not qualify real style or translation behavior.
Fleet database
The catalog, drafts, writing-style rows and score cache are tables of Skryba's fleet database. Nothing here names a file.
| Variable / file | Default | Reader | Meaning |
|---|---|---|---|
SKRYBA_DATABASE_SCHEMA |
skryba |
src/app/fleet/mod.rs |
schema every table lives in; another name gives a test rows of its own |
~/.stado/skryba-database-client-skarbiec-token |
— | src/app/fleet/mod.rs, through Stado's stado-database crate |
the bearer Skarbiec answers pooler_url and ca_certificate of skryba-database to |
The database itself is named by Stado (stado database resolve skryba --consumer skryba) and the route to Skarbiec by Stado's service directory (stado service directory connect skarbiec --consumer skryba); stado must be on PATH. A new schema's catalog starts with the styles preserve, academic, message and the languages preserve, pl, en; after that it holds exactly what skryba style and skryba language put in it. Changing an entry changes what the next rewrite is held to, on the CLI and in Skryba Desktop alike.
Writing-style database operations do not need model or detector credentials.
Folder selection and held-out comparison use Brama's typed decision route or
the explicitly selected direct service's chat model. Samples and new writing
assignments use chat generation. Each model operation reads only its route's
credential. train also reaches outside the database: the ster process it spawns resolves a
checkpoint through Hugging Face's own environment — HF_HOME for the cache
and token location, default ~/.cache/huggingface — which Skryba neither
reads nor sets, and Ster inherits it as it stands.
Other CLI controls
These are flags rather than environment keys. Every number a run uses is the caller's: Skryba assumes none, and a missing required one is refused before anything runs.
| Flag | Default | Scope |
|---|---|---|
--minimum-quality |
required by rewrite, benchmark, train | global judge threshold |
rewrite --style |
preserve |
required style, by name, from the catalog |
rewrite --language |
preserve |
required output language, by name, from the catalog |
rewrite --candidates |
required | candidates per chunk |
rewrite --max-words-per-chunk |
required | chunk budget |
rewrite/train/benchmark --temperature |
required | generator temperature |
rewrite/train/benchmark/corpus --seed |
required | deterministic local sampling/order |
benchmark --samples / --candidates / --min-words / --max-words |
required | passages, candidates and passage bounds |
train --epochs / --generations / --learning-rate / --beta / --clip-epsilon / --inner-iterations |
required | GRPO optimizer |
train --detector-weight / --quality-weight / --quality-failure-penalty |
required | reward |
writing-style add --min-words / --max-words |
required | passage word bounds |
writing-style export/train --name |
writing-style |
name in an SFT set, trait_name in a pair set |
writing-style export/train --lead-words |
required for SFT | words of the writer's own opening used as the SFT prompt |
writing-style export/train --limit |
every row | oldest rows first |
writing-style train --method |
sft |
ster tune sft on passages, ster tune dpo on pairs |
writing-style train --device / --precision |
cpu / f32 |
passed through to ster tune |
writing-style train --rank / --alpha / --epochs / --learning-rate / --accumulation / --max-sequence / --batch-size / --seed |
required | passed through to ster tune, which assumes none of them |
writing-style train --beta |
required with --method dpo, refused with sft |
passed through to ster tune dpo |
writing-style train --export |
beside --output |
where the export Ster reads is written |
rewrite --generator |
required | brama or local, which spawns ster generate per candidate |
rewrite --local-device / --local-precision |
cpu / f32 |
passed through to ster generate |
rewrite --local-chat-template |
auto |
passed through to ster generate |
rewrite --local-max-new-tokens |
required with --generator local |
passed through to ster generate, which assumes no token budget |
database drop-schema --schema |
— | schema to drop; skryba is refused |
The style and language choices are independent of the model, personal adapter, and sampled policy. train and benchmark use the catalog's preserve entries for both choices. Every command's flags are in CLI reference and train and benchmark.
Desktop environment file
~/.config/skryba/env syntax:
# comments and blank lines are ignored
BRAMA_TOKEN_ROLE=skryba-inference#token
SAPLING_API_KEY=value
Each non-comment line is split at its first =. Key and value are trimmed. Empty keys and malformed lines are ignored. A variable already present in the app's launch environment wins; the file fills only missing keys. The CLI itself does not read this file.
Maintained as part of the website-owned Skryba documentation corpus.