CLI options reference#
Every command line option exposed by RFD4-Proteina’s installed commands, organized by entry point. This page is a lookup table; for task-oriented walkthroughs see Running the model, Partial diffusion and inverse folding, Reward guided search, and Metric guidance.
Contents
Conventions#
rfd4-generate,rfd4-evaluate,rfd4-train, andrfd4-train-aeare Hydra applications. Every option is set askey=value, never--key value. Use dotted paths for nested keys (generation.args.nsteps=80) and+key=valueto add a key that has no default in the composed config (for example+guidance=contract_ca).Required means the underlying Hydra config sets that key to
???; omitting it raises a HydraMissingMandatoryValueerror. Optional keys all ship a default, shown in the Default column.A Type of group selector means the value is the name of a Hydra config group (a YAML file under the matching
configs/subdirectory), not an arbitrary scalar. Pass the group name as the value, e.g.inference_experiment=sm_binder_hbond_search.List-valued options take a bracketed, quoted Hydra list on the shell:
metrics_tags='[design,unconditional_refolding]'.${oc.env:DATA_PATH}and similar are OmegaConf resolvers; they read the named environment variable at resolution time and are not something you type literally on the command line.Entry point and base config, given at the top of each section below, describe where that command’s CLI surface comes from rather than something you supply: entry point is the Python function the installed command actually runs, and base config is the root Hydra YAML it composes against by default (setting some keys directly, pulling in others through its own
defaults:list). Yourkey=valueoverrides are applied on top of that composed config, not in place of it.Run any command with
--helpfor Hydra’s own generated help, or--cfg jobto print the fully resolved configuration without running anything.
CLI options for rfd4-generate#
Generates new designs (both structure and sequence) by running the model’s flow-matching sampling trajectory from a conditioning input, optionally under reward guided search, and can score each design with inline metrics as it finishes.
Entry point:
script_utils.entrypoints:generate→rfproteina.generate.main_hydra.Base config:
configs/inference.yaml.
rfd4-generate inputs=data/benchmarks/monomer num_replicates=80 batch_size=8 out_dir=./runs/monomers
Essential#
The handful of options nearly every run sets explicitly: what to design, how many replicates to generate, how large a batch to run at once, and which metrics to score inline. Their shipped defaults suit a quick smoke test, not a full-scale run.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
path, or group selector for a condition-spec file |
Required |
Annotated CIF/BCIF, JSON/YAML condition spec, or a directory of them. See Preparing inputs. |
|
|
string path or |
Optional — |
Output directory for samples and metrics. Set an external path for anything but a smoke test. |
|
|
int |
Optional — |
Designs generated per input example. |
|
|
int |
Optional — |
Designs processed in parallel on GPU. Confirm your longest input fits at |
|
|
list of strings |
Optional — |
Tags selecting which metrics run inline after generation. See the metrics reference and Running metrics inline. |
|
Inputs and checkpoints#
Before any sampling happens, the model needs to know what to condition on and which trained weights to load. These options select the input examples for the run, control how reproducible each run is, and point at the denoiser, autoencoder, and optional adapter checkpoints to load. See the checkpoints reference for information about the available checkpoints.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
comma-separated keys, or |
Optional — |
Restrict the run to specific input example keys. |
|
|
bool |
Optional — |
Skip examples whose output structure files already exist in |
|
|
bool |
Optional — |
Sanity-check each unique input once before generation, failing fast on bad inputs. Also skips sampling transforms. |
|
|
int or |
Optional — |
Random seed. |
|
|
bool |
Optional — |
Lock cuDNN/cuBLAS to deterministic algorithms. Significantly reduces throughput. |
|
|
Hub repository, local bundle directory, or |
Optional — |
Model bundle (denoiser and autoencoder) to load. When set, it overrides |
|
|
Hub commit hash, or |
Optional — pinned release commit in |
Hub commit of the bundle, for reproducible loading. |
|
|
directory path |
Optional — |
Directory holding the native denoiser checkpoint; used when |
|
|
filename |
Optional — pinned release filename in |
Denoiser checkpoint filename. |
|
|
file path |
Optional — pinned release autoencoder path |
Autoencoder checkpoint; fixes the latent space the denoiser was trained in. Must match the denoiser. |
|
|
directory path or |
Optional — |
Local PEFT adapter directory, loaded onto the exact base denoiser/autoencoder pair it was fine-tuned against. |
|
|
bool |
Optional — |
When a pre-oracle filter is active and a design fails it, delete that design’s structure files. |
|
Sampling#
Sampling is the generative step itself: starting from noise (or, for partial diffusion, a noised copy of an existing structure), the model integrates its flow-matching trajectory over a fixed number of steps to produce a finished structure and sequence together. These options control that trajectory: how many steps it takes, how much stochasticity and trunk recycling it uses, and which high-level experiment preset composes generation, search, and metrics for the run.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
group selector |
Optional — |
Top-level experiment config composing generation, search, and metrics. Ships |
|
|
group selector or |
Optional — |
Trunk recycle-depth schedule: `<low |
medium |
|
group selector |
Optional — |
Base generation/sampling config. Ships |
|
|
int |
Optional — |
Number of model evaluations (integration steps) in the sampling schedule. |
|
|
float |
Optional — |
Classifier-free guidance weight; |
|
|
int |
Optional — |
Save a trajectory snapshot every N steps; |
|
|
bool |
Optional — |
Save CA-only XTC trajectories when |
|
|
bool |
Optional — |
Also save the noisy intermediate state at each saved trajectory step, alongside the clean prediction. |
|
|
bool |
Optional — |
Condition the autoencoder decoder on the flow model’s own sequence readout. Disable for checkpoints without a sequence readout. |
|
|
float |
Optional — |
Injected-noise variance multiplier for the backbone. See Inference temperature parameters. |
|
|
float |
Optional — |
Injected-noise variance multiplier for the sidechain and sequence latents. |
|
|
string |
Optional — |
Set both to |
|
|
float |
Optional — |
TSR temperature-rescaling controls for the backbone modality; see Sampling with TSR. |
|
|
float |
Optional — |
TSR controls for the latent modality. |
|
|
int |
Optional — |
Fixed trunk recycle depth per step; only applies when |
|
|
list of |
Optional — |
Per-step-range recycle depth; overrides |
|
Partial diffusion#
Partial diffusion starts the sampling trajectory from a noised copy of a structure you already have, instead of pure noise, so the model refines that structure rather than building one from scratch. See Partial diffusion for the commands.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
float in |
Optional — |
Simple interface: run the final fraction of |
|
|
float in |
Optional — |
Advanced interface: starting corruption level for the backbone modality. Near |
|
|
float in |
Optional — |
Advanced interface: starting corruption level for the latent modality. |
|
|
bool |
Optional — |
Derive one modality’s |
|
Inverse folding#
Inverse folding is partial diffusion with the backbone held fixed throughout the trajectory: the model resamples only the sequence and side-chain latents, so you get back new sequences that fold to the same shape as your input backbone. See Inverse folding for the commands.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
group selector |
Optional — |
Set to |
|
|
bool |
Optional — |
Hold the input backbone fixed and resample only sequence and side chains. Set automatically by |
|
|
string |
Optional — |
Sampling method; currently the only supported value. |
— |
Reward guided search#
Reward guided search replaces one uninterrupted sampling trajectory with beam search: at
configured checkpoints along the trajectory, each surviving candidate branches into several
children, a reward model scores the branches, and only the strongest survive to continue. See
Reward guided search for how the pieces fit together, and the
search parameters reference for every search.* field, including the
per-checkpoint schema.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
int |
Optional — |
Number of candidates retained per input after each scored checkpoint. |
|
|
int |
Optional — |
Default number of children per surviving beam, for any checkpoint interval that doesn’t override it. |
|
|
bool |
Optional — |
Also return completed scoring rollouts that lost selection, in addition to the final beam. |
|
|
mapping of step → checkpoint config |
Optional — |
Flat mapping of positive integer integration steps to per-checkpoint fields ( |
|
Metric guidance#
Metric guidance nudges the sampling trajectory toward a better score on a differentiable metric: at each active step it differentiates the metric with respect to the model’s predicted clean state and adds a weighted gradient step to the sampler, rather than changing training data or architecture. See Metric guidance for the concept and Metric guidance for the YAML. Currently wired to standard full generation only.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
group selector (newly added key) |
Optional — no |
Adds a metric-guidance config. The shipped |
|
|
Hydra target (Python class path) |
Required within a |
Differentiable |
|
|
Hydra target (schedule callable) |
Required within a |
Signed schedule mapping one |
Output and compute#
These options control what gets written to disk and how the run uses compute, independent of what is actually generated: output compression, numeric precision, trajectory and chain-of-interest exports, and dataloader worker counts all live here.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
bool |
Optional — |
Routine warnings and diagnostic dumps. Defaults |
|
|
bool |
Optional — |
Compress persistent structure outputs (samples, refolds, trajectories) with Zstandard level 3 instead of writing plain CIF. See Output format. |
|
|
bool |
Optional — |
Write per-design chain-of-interest CIFs. Needed only for FoldSeek diversity clustering. |
|
|
list of ints, or |
Optional — 15 buckets from 128 to 1024 |
Token counts (multiples of 16) that inputs are padded to so the compiled trunk sees static shapes. |
|
|
string, or |
Optional — null (checkpoint: default mode) |
|
|
|
bool, or |
Optional — null (released checkpoint: single graph per block) |
Whether each trunk block must compile as a single graph; |
|
|
string, or |
Optional — null (keeps the checkpoint’s value; |
|
|
|
string, or |
Optional — null (keeps the checkpoint’s value; |
|
|
|
string |
Optional — |
Numerical precision. See the analogous training precision option for the full set of values. |
|
|
int |
Optional — |
Dataloader worker processes. |
|
Hardware and cluster job settings#
Set automatically by scripts/launch_generate.sh; override directly only when running rfd4-generate by hand.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
string |
Optional — |
Lightning accelerator. |
|
|
int |
Optional — |
GPUs per node. |
|
|
int |
Optional — |
Number of nodes. |
|
|
int |
Optional — |
CPUs per task, used by |
|
|
int |
Optional — |
Number of parallel generation jobs per config. |
|
|
int |
Optional — |
Number of parallel evaluation jobs per config. |
|
|
int or |
Optional — |
Set by |
— |
|
string |
Optional — |
Run name; used to derive |
|
|
path |
Optional — |
Where Hydra writes its own run logs/config dump. Standard Hydra key, not RFD4-Proteina specific. |
|
CLI options for rfd4-evaluate#
Computes metrics, pre-oracle filters, and refolding-oracle scores against structures that already exist on disk — already generated designs, or any other CIF-like files — without generating anything itself.
Entry point:
rfproteina.evaluate:main_hydra.Base config:
configs/evaluate.yaml. Runs the same metrics, pre-oracle filters, and refolding oracles asrfd4-generate.
rfd4-evaluate inputs=./runs/monomers/inference_samples metrics_tags='[unconditional_refolding]' out_dir=./runs/monomers_eval
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
directory path |
Required |
Directory of CIF-like files for already generated/designed structures. |
|
|
list of strings |
Required |
Tags controlling which metrics activate. See the metrics reference. |
|
|
directory path |
Required |
Output directory for metrics results. |
|
|
CSV path, or |
Optional — |
Optional CSV with |
|
|
int or |
Optional — |
Chunk index for parallel evaluation. |
|
|
int |
Optional — |
Total number of parallel jobs, used when |
|
|
bool |
Optional — |
Applies to newly written refolds and chain exports; input structures are read unchanged. |
|
|
bool |
Optional — |
Delete structure files for designs that fail an active pre-oracle filter. |
|
|
bool |
Optional — |
Routine warnings and diagnostic dumps. |
|
|
string |
Optional — |
Run name. |
|
|
path |
Optional — |
Where Hydra writes its own run logs/config dump. |
|
CLI options for rfd4-train#
Trains the latent flow-matching denoiser — the generative model rfd4-generate samples from —
against a frozen autoencoder checkpoint that fixes the latent space it trains in.
Entry point:
rfproteina.train:main.Base config:
configs/training_proteina.yaml. A composition root, not a runnable experiment snapshot by itself — most runs select anexperimentand setdatasets.train.
rfd4-train datasets.train=<dataset-group> out_dir=/shared/runs/my_training_run
Datasets and run identity#
Every training run composes a dataset mixture, a network architecture, and a named experiment recipe before any hyperparameter below takes effect. These options are that composition layer, plus the run name and output directory the resulting checkpoints and samples land under.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
group selector / mapping |
Required |
Training dataset composition. Validation datasets are optional. |
|
|
group selector |
Optional — |
Version-controlled hyperparameter recipe layered over the composition root. |
|
|
group selector or |
Optional — |
Optional overlay for quick local testing/debugging; ships |
|
|
group selector |
Optional — |
Denoiser network architecture config. |
|
|
group selector |
Optional — |
Dataloader configuration (batch sizes, workers, samplers). |
|
|
group selector |
Optional — |
Sampling config used for validation-time generation. Same keys as rfd4-generate’s sampling options. |
|
|
group selector |
Optional — |
Metric set evaluated during validation. See the metrics reference. |
— |
|
group selector |
Optional — |
Lightning callback set. |
— |
|
string |
Optional — |
Run name; used to derive |
|
|
path or |
Optional — |
Output directory for checkpoints, samples, and metrics. |
|
Checkpoint loading#
See Training-time checkpoint roles for the full semantics; the two paths are mutually exclusive.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
file path or |
Optional — |
Start a new run from saved weights only; resets optimizer, scheduler, step, epoch, and RNG state. |
|
|
file path or |
Optional — |
Resume an interrupted run, restoring full Lightning trainer state. |
|
|
file path |
Optional — pinned release autoencoder path |
Frozen autoencoder the denoiser trains against; fixes the latent space. |
|
|
Hydra target ( |
Optional — |
Honored only on the |
see |
|
Hydra target ( |
Optional — |
Honored only on the |
|
|
bool |
Optional — |
Delete structure files for validation designs that fail an active pre-oracle filter. |
|
LoRA fine-tuning#
Low-Rank Adaptation (LoRA) fine-tunes a pretrained denoiser by training a small set of additional
low-rank weights instead of the full model, so a fine-tuning run is cheaper and its result composes
back onto the base checkpoint as an adapter at inference time (see adapter_path in the
rfd4-generate inputs and checkpoints table). Leave lora.r unset to
train the full model instead.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
int or |
Optional — |
LoRA rank. Typical values are |
|
|
float |
Optional — |
LoRA scaling factor. |
|
|
float |
Optional — |
Dropout for LoRA layers. |
|
|
string |
Optional — |
Bias training policy; keeps base biases frozen by default. |
— |
|
list of strings |
Optional — |
Denoiser attention projections to adapt, relative to |
|
Training precision and optimization#
These options control the training loop itself — numeric precision, learning rate and warmup, gradient clipping and accumulation, validation cadence, and the trunk recycling schedule — rather than the dataset or architecture being trained.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
string |
Optional — |
One of |
|
|
bool |
Optional — |
Deprecated; use |
— |
|
int |
Optional — |
Random seed. |
|
|
bool |
Optional — |
Lock cuDNN/cuBLAS to deterministic algorithms; significantly reduces throughput. |
|
|
float |
Optional — |
Learning rate. |
|
|
int |
Optional — |
Linear warmup steps (optimizer updates) to |
|
|
int |
Optional — |
Linear warmup steps to |
|
|
float |
Optional — |
Max gradient norm. |
|
|
int |
Optional — |
Maximum training epochs. |
|
|
int |
Optional — |
Gradient accumulation steps. |
|
|
string |
Optional — |
Lightning distributed strategy. |
|
|
int |
Optional — |
Defines epoch length in optimizer steps, not full dataset passes. |
|
|
int |
Optional — |
Validate at the end of every N epochs. |
|
|
int |
Optional — |
Delay validation until this epoch; |
|
|
bool |
Optional — |
Global switch for per-dataset validation-loss logging. |
|
|
int |
Optional — |
Wall-clock budget for FoldSeek diversity clustering per validation epoch. |
|
|
list of regex strings |
Optional — ships two default patterns excluding embedding/output-head params |
Parameters kept on Adam instead of Muon, matched by name pattern. Muon also never sees non-2D params (norms, biases). |
— |
|
string |
Optional — |
Either |
|
|
bool |
Optional — |
Batch equal-shaped FP32 Muon updates; |
|
|
int |
Optional — |
Trunk recycle depth is sampled per step and clamped to |
|
|
string |
Optional — |
|
|
|
float |
Optional — |
Poisson mean when |
|
|
bool |
Optional — |
Derive the recycle-depth draw from |
|
|
int |
Optional — |
Fixed recycle depth for validation-loss forward passes; generation uses its own recycle schedule. |
|
|
bool |
Optional — |
Enable motif-conditioning training behavior. |
|
Hardware and logging#
These options control where training runs — accelerator type, GPU and node counts — and how its progress gets recorded: Weights & Biases logging and checkpoint-saving cadence.
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
string |
Optional — |
Lightning accelerator. |
|
|
int |
Optional — |
GPUs per node. |
|
|
int |
Optional — |
Number of nodes. |
|
|
string |
Optional — |
Weights & Biases project name. |
|
|
string or |
Optional — |
Weights & Biases entity; read from the |
|
|
list of strings |
Optional — |
Weights & Biases run tags. |
|
|
bool |
Optional — |
Enable Weights & Biases logging. |
|
|
int |
Optional — |
Logging frequency, in steps. |
|
|
bool |
Optional — |
Whether to save checkpoints at all. |
|
|
int |
Optional — |
Save a top-k checkpoint every N epochs; matches validation frequency. |
|
|
int |
Optional — |
Save |
|
|
bool |
Optional — |
Compress validation structures, refolds, and CIF trajectories. |
|
|
bool |
Optional — |
Routine warnings and diagnostic dumps. |
|
|
path |
Optional — |
Where Hydra writes its own run logs/config dump. |
|
CLI options for rfd4-train-ae#
Trains the partial autoencoder that encodes and decodes the local-latents representation the denoiser trains and samples against — independently of any denoiser training run.
Entry point:
rfproteina.partial_autoencoder.train:main.Base config:
configs/training_ae.yaml.
rfd4-train-ae out_dir=/shared/runs/my_ae_run
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
string |
Optional — |
Run name; used to derive |
|
|
path or |
Optional — |
Output directory for checkpoints, samples, and metrics. |
|
|
group selector |
Optional — |
Autoencoder network architecture config. |
|
|
group selector |
Optional — |
Training/validation dataset composition. |
— |
|
group selector |
Optional — |
Dataloader configuration. |
|
|
group selector |
Optional — |
Lightning callback set. |
— |
|
group selector |
Optional — |
Version-controlled hyperparameter recipe. |
|
|
group selector or |
Optional — |
Optional overlay for quick local testing/debugging; ships |
|
|
file path or |
Optional — |
Optional checkpoint to start training from. |
|
|
int |
Optional — |
CPUs per task during training. |
|
|
string |
Optional — |
Lightning accelerator. |
|
|
int |
Optional — |
GPUs per node. |
|
|
int |
Optional — |
Number of nodes. |
|
|
float |
Optional — |
KL divergence loss weight. |
|
|
bool |
Optional — |
Anneal the KL weight over training. |
|
|
int |
Optional — |
Annealing patience, in steps. |
|
|
string |
Optional — |
Structure loss type, e.g. |
|
|
float |
Optional — |
Structure loss weight. |
|
|
bool |
Optional — |
Permute chemically equivalent ground-truth atoms onto the prediction before scoring. Requires |
|
|
bool |
Optional — |
Decide the atom-permutation labelling in a superimposed frame rather than the raw one. |
|
|
float |
Optional — |
Sequence loss weight. |
|
|
bool |
Optional — |
Use full |
|
|
float |
Optional — |
Learning rate. |
|
|
float |
Optional — |
Max gradient norm. |
|
|
list of regex strings |
Optional — ships three default patterns excluding embedding/output-head params |
Parameters kept on Adam instead of Muon. |
— |
|
string |
Optional — |
Same semantics as rfd4-train’s option. |
|
|
bool |
Optional — |
Batch equal-shaped FP32 Muon updates. |
|
|
int |
Optional — |
Maximum training epochs. |
|
|
int |
Optional — |
Gradient accumulation steps. |
|
|
string |
Optional — |
Lightning distributed strategy. |
|
|
int |
Optional — |
Defines epoch length in steps. |
|
|
int |
Optional — |
Validate at the end of every N epochs. |
|
|
int |
Optional — |
Delay validation until this epoch. |
|
|
string |
Optional — |
Weights & Biases project name. |
|
|
string or |
Optional — |
Weights & Biases entity. |
|
|
list of strings |
Optional — |
Weights & Biases run tags. |
|
|
bool |
Optional — |
Enable Weights & Biases logging. |
|
|
int |
Optional — |
Logging frequency, in steps. |
|
|
bool |
Optional — |
Whether to save checkpoints. |
|
|
int |
Optional — |
Save a top-k checkpoint every N epochs. |
|
|
int |
Optional — |
Save |
|
|
string or |
Optional — |
Latent-space projection method for training-time visualization: |
|
|
int |
Optional — |
Log a projection plot every N steps. |
|
|
int |
Optional — |
Max tokens projected per plot; subsampled if needed. |
|
|
bool |
Optional — |
Save projection plots to local disk. |
|
|
path |
Optional — |
Directory for saved projection plots. |
|
|
int |
Optional — |
Random seed. |
|
|
bool |
Optional — |
Lock cuDNN/cuBLAS to deterministic algorithms. |
|
|
bool |
Optional — |
Compress validation structure samples. |
|
|
bool |
Optional — |
Routine warnings and diagnostic dumps. |
|
Aggregating multi-job metrics#
rfproteina.inference_utils.aggregate_metrics is a standalone fire
CLI, not a Hydra app: pass --flag value, not key=value. launch_generate.sh runs it
automatically as a dependent SLURM job; invoke it directly to concatenate manually. See
Multi-job runs.
python -m rfproteina.inference_utils.aggregate_metrics ./inference/my_run/metrics/ --cluster_with_foldseek
Option |
Type |
Required/Default |
Description |
Example |
|---|---|---|---|---|
|
directory or file path |
Required |
Directory containing per-job result files, or an already-concatenated |
|
|
bool |
Optional — |
Also run FoldSeek structural diversity clustering. |
|
|
bool |
Optional — |
Move individual job result files into |
|
|
bool |
Optional — |
Delete the |
|
|
directory path, or |
Optional — |
Directory where aggregated results are saved. |
|
|
int, or |
Optional — |
CPU threads passed to FoldSeek. Set explicitly when running several clustering jobs on one node. |
|
|
int, or |
Optional — |
Worker processes used to reconstruct sequence-probability observations from output CIFs. |
|
Cluster launcher scripts#
scripts/launch_generate.sh, scripts/launch_evaluate.sh, scripts/launch_train_latents.sh,
scripts/launch_train_ae.sh, scripts/launch_search.sh, scripts/launch_infer.sh,
scripts/launch_infer_ae.sh, and scripts/launch_sweep.sh wrap the commands above for SLURM or
local submission. They accept the same Hydra key=value overrides (passed straight through to
the underlying entry point) plus their own scheduler flags (--njobs, resource overrides, and
similar), which differ per launcher and are controlled in part by your
scripts/.user_info_<cluster> profile.
This page does not duplicate those flags, since preserving the exact scheduler intent (partition,
account, GPU type, time limit, SLURM_EXTRA_OPTIONS, …) matters more than a generic list — read
the header of the specific launcher you’re using before changing or invoking it, as documented in
AGENTS.md.
