CLI reference

The four Agent Skills are the researcher interface. These commands are the stable, inspectable operations the agent uses underneath.

Invocation and paths

If Setup installed FrontierOps as a uv tool, run frontier --help from the research workspace. If you are developing from a source checkout, run uv run --locked frontier --help from the repository root; uv run outside that project will not find its CLI entry point. --config points to the active YAML and --run to the exact Run directory printed by Sync. Rank, Evidence, Brief, Review, and Render must all use that same Run. CLI failures return a nonzero exit code and print a reason to stderr.

frontier --help
frontier schema config --format json

For live alphaXiv, the Python tool also needs its optional MCP dependency and an API key. See Credentials; a separately authenticated browser or MCP host does not supply credentials to this CLI automatically.

Initialize and inspect configuration

Command and argumentsInput → output; important behavior
frontier setup [--workspace PATH] [--name NAME]Uses the current directory by default. Creates frontier.yaml with an inferred project ID/name and frontier_output/; returns JSON with config_path, output_dir, created_config. Existing YAML is validated, not overwritten. No dependencies are installed by the CLI itself; the Setup Skill handles uv installation.
frontier schema config [--format json]Prints the Pydantic JSON schema, including accepted fields, types, and defaults. Only json is supported.
frontier config inspect [--config PATH]Validates YAML and prints the resolved config as JSON, including defaults. Defaults to frontier.yaml.
frontier config validate [--config PATH]Checks the same schema without changing the file; prints a valid confirmation or an error.
frontier config draft [--config PATH] --output PATHCopies resolved settings to a candidate YAML file. The candidate is not active until Apply; the agent can edit it and check the diff.
frontier config diff --old PATH --new PATHValidates both files and prints JSON field-level path, before, and after changes. Does not apply anything.
frontier config apply --candidate PATH [--config PATH]Validates the candidate then writes the active YAML (default frontier.yaml). This does modify the target; let the agent show the proposed diff first. It does not run Sync.

frontier.yaml.example in the repository is an offline fixture. Unless passed explicitly with --config, none of the commands use it. A candidate YAML is a reviewable proposal, not an alternate source of truth.

Resolve source identities

CommandBehavior and limitation
frontier scholar resolve --name NAME [--provider semantic_scholar]Prints candidate author identities as JSON. The current resolver uses offline fixtures; it does not confirm a live Semantic Scholar ID. Verify the chosen stable ID before writing tracking.scholars[].identities.
frontier venue resolve --name NAME [--year YEAR] [--provider openreview]Prints venue candidates from offline fixtures. Verify the exact OpenReview group ID, including year, before using it in tracking.venues[].venue_id.

Run stages

frontier sync creates a Build stage automatically. Running frontier build first creates a separate Run; it is for isolated validation/debugging, not a required first step before Sync.

CommandInput → output; failure boundary
frontier build --config PATHValidates YAML, snapshots resolved settings, and creates a Run with 00-build/ and run-manifest.json. Does not fetch papers. Prints its Run path.
frontier sync --config PATHManual source fetch. Creates a Run, compares provider ID and content fingerprints with saved state, writes 01-sync/research-signals.jsonl, topic-observations.jsonl, cursor snapshot, and stage result. Prints the Run path. A failing live source currently stops Sync even if sync.on_provider_error: partial is set; do not report an empty success.
frontier rank --run PATHReads that Run's Sync artifacts and resolved YAML; writes candidates, excluded candidates, Evidence, scoring report, topic-delta.json, and Discovery HTML in 02-rank/ plus the public output directory. A Gate exclusion is distinct from low rank.
frontier discovery serve --run PATH [--port N]Serves the Run's interactive Discovery page on loopback (random free port by default). Prints a local URL and blocks until stopped. Saving a selection validates IDs and writes 02-rank/briefing-selection.json. A static HTML file cannot write that selection itself.
frontier evidence --run PATH --candidate ID --query QUESTION [--query QUESTION ...]Optional alphaXiv MCP PDF query for a candidate already in Rank. Requires a verified arXiv ID/PDF URL, the MCP dependency, and ALPHAXIV_API_KEY or configured variable. Adds page-numbered primary_fulltext Evidence and saves query/raw XML history under 02-rank/; does not change rank or select the paper. The agent must still check claims against the PDF.
frontier brief --run PATHReads eligible candidates and any saved selection, writes an editable 03-brief/briefing.draft.json, Markdown draft, narration script, and stage result. The deterministic draft is not an audited paper explanation.
frontier review --run PATHChecks the edited draft against the Run's Evidence and policy; writes a report and claim checks in 04-review/. Only an approved draft gets briefing.approved.json. Structural checks do not prove scientific correctness.
frontier render --run PATHRequires 04-review/briefing.approved.json; writes HTML and OpenSlide source, optional video preview, 05-render/render-result.json, and public per-paper output. The public manifest.json is the path index. No automatic PPTX or MP4 export.

Where the Skills fit

frontier-setup handles package installation and calls Setup. frontier-config turns a researcher's request into candidate YAML, asks about missing choices, validates and applies it. frontier-discover calls Sync and Rank only on request and presents the comparison/selection page. frontier-briefing reads the selection, optionally gathers full-text evidence, revises the draft, passes Review, and renders. Researchers do not need to manually chain all stage commands.