On this page

skryba writing-style

Hold prose the author actually wrote, collect it incrementally, ask for new writing and rewrites, train a local adapter through Ster, and compare it to its base checkpoint on later authored writing. Counts describe coverage; only a held-out comparison measures the model's voice. The passages, preferences, samples, harvesters, assignments, training provenance and comparisons live in Skryba's fleet database, in schema skryba or SKRYBA_DATABASE_SCHEMA.

Invocation

skryba [GLOBAL OPTIONS] writing-style <add|keep|pairs|unkeep|samples|harvest|work|export|train|status|progress|evaluate|profile|sources|remove> [OPTIONS]

samples plans model passages to rewrite; harvest collects authored work from folders, Messages, Notes and Transcript Lake, manually or on Stado's schedule. Writing-style learning covers the durable work queue, training, prospective evaluation and progress with commands, examples and refusals. work next returns an assignment already pending without touching any source; only when none is pending does it refresh every registered harvester before creating new work, so a source outage refuses new work but never hides assigned work.

Brama is used to select prose from a directory, write model samples or new assignments, and judge held-out comparisons. Those operations read --brama-url/BRAMA_URL, --model/SKRYBA_MODEL and BRAMA_TOKEN_ROLE. Named files, stored rows, profile, export and training require no model credential. Ster maps the checkpoint and owns training and local generation; Skryba never loads its weights.

Authored passages

skryba writing-style add <SOURCES>... --min-words <N> --max-words <N>

A named file is read as authored prose. For a directory Brama chooses prose files and subdirectories; Skryba does not follow symbolic links or ingest dependency trees based on an extension list. It removes fenced code, tables, images, HTML and bare links, strips Markdown markers and splits on blank lines where possible. Both word bounds are required. A passage is keyed by its text, so rerunning import does not duplicate it; edited writing adds the new text. Unreadable sources, invalid bounds and a directory-selection failure name their cause. See harvest for registered automatic sources, cursors, provenance and per-source diagnostics.

Human-resolved rewrites

skryba writing-style keep [--pair <PATH|->] [--machine <PATH>] [--kept <PATH>] [--strategy <NAME>] [--sample <ID>]
skryba writing-style pairs
skryba writing-style unkeep <PAIR>

keep records what the person wrote or kept against the model's text for the same passage. Give two files, --sample with --kept, or JSON on stdin (default --pair -): {"machine": …, "kept": …} or {"sample": …, "kept": …}. A named sample supplies its own machine text; providing another is refused. Empty or identical sides are refused. pairs lists ids, both texts and sample links; unkeep removes one pair and makes its sample pending again. The desktop sends JSON on stdin so prose is not in its displayed command line. work submit offers a persistent assignment path to the same authored preference.

Export and local training

skryba writing-style export --format <sft|dpo> --output <PATH> [--name <NAME>] [--lead-words <N>] [--limit <N>]

SFT uses passages and a required positive --lead-words opening at a sentence boundary; DPO uses human-resolved pairs without a prompt. The output is the JSON Ster reads, oldest rows first when bounded. A missing source, a lead too long for every passage, or missing output is refused. train exports the same data and drives ster tune, retaining the export beside the adapter unless its path was named. Its exact command and Ster's own stderr are visible. After successful adapter creation Skryba records exact content and export digests and a conservative training boundary. Full flags, limits, provenance and the held-out contract are in writing-style learning.

Inspect and remove

skryba writing-style status
skryba writing-style profile [--quantile <SHARE>]...
skryba writing-style sources
skryba writing-style remove <SOURCE> --yes
skryba writing-style progress [--evaluation <ID>]

status counts authored passages, words and preference pairs. profile measures sentence, word and paragraph lengths and optional nearest-rank quantiles from zero to one, using the same counters as writing rules. sources lists each source's passages and words. remove takes back a source's passages; without --yes it names the deletion and refuses, and a missing source refuses. Kept preferences are separate and remain until unkeep. progress adds coverage by writing kind, assignment lifecycle, latest training provenance and the history of held-out comparisons without turning volume into a voice score. --evaluation <ID> retrieves one complete persisted comparison.

JSON report and failure interpretation

Every command prints one JSON object. Common fields are action, store (stado://database/skryba/<SCHEMA>), passages, passage_words, preferences, added, skipped, removed. Command-specific fields are sources, pairs, output, written, adapter, ster_command, profile, plan, samples, sample, unfilled, harvesters, harvested, schedule, work, works, progress and evaluation. Absent fields are omitted, not zeroed or asserted as successful. added counts new rows; a duplicate is reported as skipped, not a second passage.

A database connection, table creation, read or write error names the fleet location and failing operation with its Postgres cause. A Brama failure includes its request or source; Ster's nonzero exit retains its stderr. An unavailable adapter, missing prospective holdout, degenerate generation or malformed judge answer refuses evaluate, not an invented score. See learning refusals, sample refusals and harvest refusals for the precise cases.

Maintained as part of the website-owned Skryba documentation corpus.