On this page
Policy
A policy is Skryba's native GRPO distribution over rewrite strategies. It decides which editing direction to ask the generator to try; it does not generate text and does not bypass the quality or detector gates.
A policy is not the required writing style. rewrite --style <NAME> and --language <NAME> name entries of the catalog and apply to every sampled candidate. These requirements override conflicting editing instructions, including a plainspoken strategy sampled for an academic rewrite. They also override a personal adapter's learned voice. Neither flag edits the policy or trains an adapter. train and benchmark use the catalog's preserve style and preserve language, with whatever instructions the catalog holds for them.
Built-in strategies
The version-1 policy contains six ordered strategies:
natural-editorplainspokenscholarly-humanrhythmicspecificlight-touch
The default policy has equal logits, so each strategy starts at probability 1/6.
File shape
A saved policy is JSON with:
version
strategies[] name plus editing instruction
logits[]
reference_logits[]
adam_first_moment[]
adam_second_moment[]
updates
All vectors must have the same length as strategies. Values must be finite. The current version is 1.
Lifecycle
skryba train loads a policy or starts from the uniform default. For each training example it samples a group of strategies, generates and scores their rewrites, converts detectability and quality into rewards, normalizes those rewards into advantages, and updates logits with Adam under PPO-style clipping and a KL penalty against reference_logits.
The output policy is saved after every group. Saving creates the parent directory, writes a sibling path with extension json.tmp, then renames it to the requested path. An interrupted run therefore leaves the last published JSON or, before rename, a temporary file rather than a partially written policy.
Invariants and refusals
unsupported policy version <n>policy vectors do not match the strategy countpolicy contains a non-finite valueGRPO group size must be positiveGRPO samples and rewards must have the same non-zero lengthGRPO rewards must be finiteinvalid GRPO optimization configuration
A missing file begins with reading policy <path>; malformed JSON begins with parsing policy <path>. Rewrite and benchmark never silently replace an invalid requested policy.
Maintained as part of the website-owned Skryba documentation corpus.