Skip to content

Configuration reference

This page is the comprehensive reference for the system’s configuration surface. For the operational guide on which knobs to use when, see cost and performance and review modes.

Configuration priority order (highest to lowest): CLI args → environment variables → defaults.

VariableTypeDefaultUsed byPurpose
ELIFE_CORPUS_DIRpathnonewrite, verify-refs, runWhere claim files are read/written
ELIFE_EXTRACT_OUTPUTpath./outextractWhere draft tables and intermediates land
ELIFE_EXTRACT_MODEL_RESULTSstringclaude-sonnet-4-6extract, run, evaluateOverride Results-reader agent’s model
ELIFE_EXTRACT_MODEL_CAPTIONstringclaude-sonnet-4-6as aboveOverride Caption-reader agent’s model
ELIFE_EXTRACT_MODEL_STRUCTUREstringclaude-sonnet-4-6as aboveOverride Structure-reader agent’s model
ELIFE_EXTRACT_MODEL_RECONCILEstringclaude-opus-4-6as aboveOverride reconciliation + reviewer model
VERTEX_PROJECT_IDstringcr-mainenall subcommands using LLMsGCP project for Vertex AI Claude
VERTEX_REGIONstringeurope-west1all subcommands using LLMsVertex region
GOOGLE_APPLICATION_CREDENTIALSpathnoneall subcommands using VertexService account JSON for Vertex auth
ANTHROPIC_API_KEYstringnoneall subcommands using LLMs (when Vertex isn’t configured)Direct Anthropic API auth
FlagTypeDefaultPurpose
--doistring(required)eLife paper DOI
--corpus-dirpathenv or requiredCorpus root
--output-dirpathenv or ./outWhere draft JSON lands
--paper-slugstringderivedOverride slug
--prompt-variantstringdefaultNamed directory under prompts/<variant>/
--reconcile-strategyenumconfidence-taggedconfidence-tagged / union / intersection-only / majority-vote
--max-claimsintunlimitedHard cap on per-paper claim count
--no-retry-on-thinflagretry enabledDisable retry when agent output looks thin
--model-resultsstringenv or claude-sonnet-4-6Override Results-reader model
--model-captionstringenv or defaultOverride Caption-reader model
--model-structurestringenv or defaultOverride Structure-reader model
--model-reconcilestringenv or claude-opus-4-6Override reconciliation model
--vertex-projectstringenv or cr-mainenGCP project
--vertex-regionstringenv or europe-west1Vertex region
FlagTypeDefaultPurpose
--draftpath(required)Path to draft JSON from extract
--corpus-dirpathenv or requiredWhere claim files land
--review-modeenuminteractiveinteractive / external / auto-approve / dry-run
FlagTypeDefaultPurpose
--paperstringnone (sweeps all)Single paper slug
--corpus-dirpathenv or requiredCorpus root
--dry-runflagwrite enabledShow resolutions without writing back

(Same as extract, plus implies --review-mode auto-approve for the write phase.)

FlagTypeDefaultPurpose
--reference-dirpath(required)Curated reference corpus root
--work-dirpath(required)Where per-paper artifacts and scorecards land
--paperstringmutually exclusive with —papers / —allSingle paper slug
--papersstringcomma-separated list of paper slugs
--allflagmutually exclusive with aboveEvaluate every paper-dir under reference-dir
--review-modeenumexternalexternal / auto-approve
--skip-existingflagre-runsSkip papers with existing scorecard.json
--prompts-dirpathpackage-localOverride prompts directory
--prompt-variantstringdefaultNamed prompt variant
(model flags)as in extractPer-agent model overrides

All configuration resolution lives in elife_extract/config.py. The Config dataclass holds the resolved values:

@dataclass
class Config:
model_results: str = DEFAULT_MODEL_RESULTS
model_caption: str = DEFAULT_MODEL_CAPTION
model_structure: str = DEFAULT_MODEL_STRUCTURE
model_reconcile: str = DEFAULT_MODEL_RECONCILE
vertex_project: str = DEFAULT_VERTEX_PROJECT
vertex_region: str = DEFAULT_VERTEX_REGION
corpus_dir: Path | None = None
prompts_dir: Path | None = None
output_dir: Path | None = None
prompt_variant: str = DEFAULT_PROMPT_VARIANT
reconcile_strategy: str = "confidence-tagged"
review_mode: str = "interactive"
max_claims: int | None = None
retry_on_thin: bool = True
@classmethod
def from_args(cls, args) -> "Config":
"""Build a Config from argparse Namespace, falling back to env then defaults."""
...

Each subcommand handler calls Config.from_args(args) to resolve the configuration; the resulting Config is passed to the per-step modules.

DEFAULT_MODEL_RESULTS = "claude-sonnet-4-6"
DEFAULT_MODEL_CAPTION = "claude-sonnet-4-6"
DEFAULT_MODEL_STRUCTURE = "claude-sonnet-4-6"
DEFAULT_MODEL_RECONCILE = "claude-opus-4-6"
DEFAULT_VERTEX_PROJECT = "cr-mainen"
DEFAULT_VERTEX_REGION = "europe-west1"
DEFAULT_PROMPT_VARIANT = "default"

These defaults reflect the empirically-validated configuration the 10-paper sweep used. Change at your own risk; re-run evaluate to confirm any default substitution doesn’t regress.

  • elife_extract/config.py — the Config dataclass and resolution logic
  • elife_extract/cli.py — argparse definitions and per-subcommand argument lists