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 jsonFor 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 arguments | Input → 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 PATH | Copies 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 PATH | Validates 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
| Command | Behavior 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.
| Command | Input → output; failure boundary |
|---|---|
frontier build --config PATH | Validates 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 PATH | Manual 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 PATH | Reads 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 PATH | Reads 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 PATH | Checks 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 PATH | Requires 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.