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.