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.