Files
OpenResearch/SKILL.md
T
Myles AndersonandClaude Opus 4.8 a80f1c97ae Better paper integration + lit review chat view (#155)
* Add bioRxiv and OpenAlex sources to orx lit / orx paper

`orx lit` and `orx paper` covered only alphaXiv (arXiv corpus, not biomed).
Add OpenAlex (general scholarly graph) and bioRxiv (biology preprints) so lit
reviews reach beyond arXiv.

- `orx lit --source alphaxiv|openalex|biorxiv` (default alphaxiv, so existing
  behavior is unchanged). bioRxiv has no search API, so `--source biorxiv`
  searches OpenAlex filtered to bioRxiv's corpus (S4306402567).
- `orx paper <id>` auto-detects the source from the id (override with
  `--source`): arXiv id -> alphaXiv report/--full; 10.1101/... DOI -> bioRxiv;
  any other DOI or a W... id -> OpenAlex. A DOI is recognized only when it
  carries the mandatory '/', so October arXiv ids (e.g. 1810.04805) are not
  mistaken for DOIs.
- `orx lit --json` now emits a uniform LitHit shape across all sources
  (adds `source`/`citations`, preserves alphaXiv `votes`/`snippets`).
- OpenAlex/bioRxiv print a title/authors/date/citations + abstract card with
  DOI and PDF links; they have no extracted full text, so `--full` points at
  the PDF. All three sources are public (no login).

New config hosts: OPENALEX_API_URL, BIORXIV_API_URL, OPENALEX_MAILTO.
Docs (orx-lit skill, SKILL/SYSTEM_PROMPT/README, lit-review template) updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Add Settings toggles to enable/disable literature sources

Adds a "Literature sources" section to the dashboard Settings with on/off
toggles for alphaXiv, OpenAlex, and bioRxiv. The choice is hard-enforced:
`orx lit` and `orx paper` refuse a disabled source.

- Persisted in settings.json as `disabledLitSources` (empty = all enabled, so a
  source added later defaults on). New `telemetry` getter/setter via the locked
  `mutate_settings` RMW; `config::disabled_lit_sources` re-export.
- `GET`/`POST /api/settings/lit-sources` returns/accepts `{alphaxiv, openalex,
  biorxiv}` booleans, mirroring the profile settings handlers.
- UI `LiteratureSourcesTab` (built from the ProjectDefaultsTab template) in the
  Settings stack; `getLitSources`/`setLitSources` in api.ts. Rebuilt ui/dist.
- Enforcement: `orx lit --source <disabled>` errors; bare `orx lit` falls back to
  the first enabled source (noting the swap on stderr) and errors if all are off;
  `orx paper <id>` on a disabled source errors (no fallback — the id is fixed).
  `LitArgs.source` is now `Option<LitSource>` to distinguish an explicit choice
  from the default. `LitSource::as_str` centralizes the wire name.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Render orx lit / orx paper chat rows as a real search

In chat, a literature search rendered as a generic "Ran orx lit …" shell line.
Now `orx lit` / `orx paper` tool calls read as a real search — the source's
official logo plus natural language ("Searching OpenAlex for "…"", "Reading
2401.12345 on bioRxiv") — so a lit review feels first-class.

- New `LitSourceLogo.tsx`: the three official brand SVGs (inlined at build via
  `?raw`, shown in a small white tile so the solid-black OpenAlex/bioRxiv marks
  stay visible in dark mode) plus `parseOrxLit`, which recognizes an
  `orx lit`/`orx paper` command and pulls out the source + query/id.
  `detectPaperSource` mirrors the Rust `detect_source` so a bare `orx paper <id>`
  shows the right source.
- `ChatPanel` gains `toolSummary`: Bash rows matching an orx literature command
  render the logo + sentence; everything else falls back to the plain `toolLine`.
  The row still expands to the exact command + output — nothing is hidden.
- The text ellipsizes like other tool rows; the logo is aria-hidden (the source
  name is in the adjacent text).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Make orx paper chat rows link to the paper's source page

Clicking a fetched paper in chat now opens it on its own source: an arXiv id →
alphaXiv (alphaxiv.org/abs/<id>), a bioRxiv DOI → doi.org (resolves to bioRxiv),
and OpenAlex → the DOI or the OpenAlex work page. A small external-link arrow
marks the row as clickable; the row still expands to the raw command + output.

- `paperUrl(source, id)` in LitSourceLogo builds the per-source URL; `doiFrom`
  extracts a bare DOI from an id or URL and strips a bioRxiv content-URL version
  suffix (`v1.full`) so doi.org resolves it.
- `toolSummary` renders `orx paper` rows (with an id) as an `<a target=_blank
  rel=noopener>`; search rows stay plain text. The href scheme/origin are fixed
  literals, so the agent-supplied id can only ever be a path segment.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Polish lit-review UI: drop redundant source name, logo the settings toggles

- Chat: `orx lit`/`orx paper` rows now read "Searching for "…"" / "Reading <id>"
  — the logo already names the source, so the text no longer repeats it. The
  logo carries the source name for screen readers (aria-label) when no adjacent
  text does; a new `decorative` prop keeps it aria-hidden where text names it.
- Settings → Literature sources: each toggle row now shows the source's official
  logo next to its name.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Move literature-source toggles from Settings to the composer

The source on/off toggles were tucked away in Settings. Surface them where a
lit review happens: a switch icon at the bottom-left of the chat composer opens
a small popover to toggle alphaXiv / OpenAlex / bioRxiv. State still lives in
settings.json via /api/settings/lit-sources, so `orx lit`/`orx paper`
enforcement is unchanged.

- New `LitSourcesPicker` mirrors the composer's OptionPicker pattern (usePopover
  + option-menu); rows are `role="switch"` with the source logo + name.
- Remove the Literature sources section (and its dead styles) from SettingsPage.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Drop redundant per-row status dots inside tool groups

Rows expanded under "Used N tools" already sit inside the group's status dot
and indent rule, so the leading per-row dot was just noise. Hide it for grouped
rows only; the group summary dot and single-row dots are unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 12:23:12 -07:00

10 KiB

name, description
name description
openresearch-cli Use the `orx` CLI to drive OpenResearch projects from a terminal — browse the experiment tree, runs, logs, artifacts, and the evidence DB; create experiments; launch, wait on, and cancel runs on GPU compute; and chart W&B metrics. Each experiment is a git branch in a local cache-dir clone — reading, diffing, and editing code all happen there with plain git. Read this before driving `orx` programmatically.

OpenResearch CLI (orx)

orx is a command-line client over the OpenResearch API. It authenticates with a personal access token and exposes both read views of a project (experiment tree, runs, logs, artifacts, evidence database) and write actions (create experiments, launch/cancel runs on GPU compute). Code is the one thing orx does not serve: every experiment is a git branch on the project's GitHub repo, and the local clone in ~/.cache/openresearch/repos/<owner>/<repo> is the standard way to read, diff, and edit it (see the orx-git module). Use orx when you need to inspect or drive project state from a shell instead of the web UI.

This overview is deliberately short: it carries the cardinal rules and a command quick-reference, then points at focused modules for everything else. Load a module with orx skill <name> (the live index is printed at the end of orx skill output).

Cardinal rules — read before doing anything else

These four govern everything below. Breaking any one silently invalidates your results — they are not style preferences. The orx-experiment-tree module expands on the why; these are the non-negotiables.

  1. Never edit a node once a run has answered it. A node freezes the moment a run establishes its baseline or tests its hypothesis — that includes the root — and freezing is permanent: a disappointing result is still a result. Until then it is provisional: seeding it, fixing its deps, and making it run all happen on its own branch (orx-experiment-tree). To try an idea, branch a child and edit the child.
  2. The run command and the environment are a fixed contract — identical on every node. A child inherits its parent's run command verbatim; leave it alone. Do not give nodes different start commands, and do not vary behavior through environment variables or env-prefixed commands (LR=3e-4 python …). The only thing that may differ between nodes is the committed code/config on the node's git branch. orx exp cmd --set is legitimate exactly once: to set the baseline's command when it has none.
  3. Vary code, not knobs-in-the-command. Encode hyperparameters in the code/config files and branch a child per variant — never sweep them by editing the run command or passing env vars. Every node runs the same command over different code, so their EVAL.md outputs stay comparable.
  4. Grow the tree downward, not sideways. Fan a little within a round (the options of one decision), then descend onto that round's winner for the next round. A root with a long row of direct children and no grandchildren is the failure mode. See "Shape the tree" in the orx-experiment-tree module.

If you're ever tempted to change the command, pass an env var, or pile another node onto the root instead of branching a child, editing its branch, and descending — stop. That's the anti-pattern, not a shortcut.

Setup

orx login          # opens a browser, stores a token at ~/.config/openresearch/credentials.json
orx logout         # remove the stored token
  • The API base URL resolves from --api-url → OPENRESEARCH_API_URL → a built-in default. Set OPENRESEARCH_API_URL for non-local use.
  • Every command except login, lit, and paper needs a token; if you see Not logged in, run orx login. (lit and paper hit public alphaXiv / OpenAlex / bioRxiv hosts and work without one.)

Command quick-reference

Project-scoped commands take a project id; experiment-scoped commands take an experiment id; run-scoped commands take a run id. Don't mix them — get ids from orx projects, orx experiments, and orx runs respectively. Each group below has a module (orx skill <name>) with the full flags and rules.

Auth

Command What it does
orx login [--api-url <url>] Open a browser, do loopback OAuth, store a token.
orx logout Remove the stored token.

Discover (project- and experiment-scoped)

Command What it does
orx projects [--all] [--json] List your projects (id + name + GitHub owner/repo), grouped by org. --all includes archived; --json emits a flat array (incl. each project's paperId) for scripts. Project ids, org ids, and the repo to clone come from here.
orx explore [--json] List the public project directory (id + name + repo) — projects anyone can view. Drill in with orx project view / orx experiments / orx runs.
orx project view <projectId> Overview of one project: details, its experiment tree, and its reports. Works on any public project or any private one in your orgs.
orx experiments <projectId> Print the project's experiments as an indented tree. Experiment ids come from here.
orx runs <projectId> [--experiment <id>] List runs as a table, newest first. Run ids come from here.
orx env <projectId> List the names of the env vars a run will see (merged org + project + per-user), each tagged with its source. Names only — values never returned.

Run evidence (run-scoped) — module orx-evidence

Command What it does
orx logs <runId> [--head] [--bytes <n>] [--range <s>:<e>] Read a run's terminal log.
orx search-logs <projectId> "<pattern>" (--run <id> | --experiment <id>) [--max <n>] Grep run logs for a literal pattern.
orx artifacts <runId> / orx artifact <runId> <key> [--head] [--bytes <n>] List / read a run's text artifacts.
orx wandb <runId> List the W&B runs linked to a run.
orx chart wandb <projectId> --metric "<key>" --run <runId>[:label] ... Render a W&B metric across runs to a PNG.
orx query <projectId> "<sql>" Run one read-only DuckDB SQL statement against the evidence schema.

Create and run experiments (write) — modules orx-create, orx-compute, orx-git

Command What it does
orx create-project <orgId> --name "<n>" [--repo <owner/repo>] Create a project bound to a GitHub repo (or a fresh blank repo).
orx project edit <projectId> [--name "<n>"] [--description "<text>" | --description-stdin] Edit a project's name and/or description (pass at least one); --description-stdin overwrites the description from stdin (long markdown).
orx create-experiment <projectId> --title "<t>" [...] Add an experiment node; prints its git branch.
orx compute [--gpu <id>] [--count <n>] [--provider <name>] | --cpu] List the GPU/CPU compute catalog.
orx instance create <orgId> (--gpu <id> … | --cpu <flavor> …) Spin up a standalone instance in an org.
orx exp status/cmd/run/cancel/wait <expId> Inspect, run, cancel, and wait on a single experiment node.
orx exp desc <expId> [--set "<text>" | --stdin] Read or overwrite the experiment's description.
orx report upload/list/show/download <projectId> … Publish and read project reports (module orx-reports).

To read or edit a node's code — including diffing what a run changed — use plain git in the cache-dir clone; there is no orx code command. See the orx-git module.

Literature & papers — alphaXiv / OpenAlex / bioRxiv (no login required) — module orx-lit

Use before any web search for academic/research queries (paper, author, blog, model release).

Command What it does
orx lit "<query>" [--source alphaxiv|openalex|biorxiv] [--limit <n>] [--json] Full-text search; --source picks the corpus (default alphaxiv; openalex = all fields, biorxiv = biology preprints).
orx paper <id|url> [--source ...] [--full] Fetch a paper: alphaXiv report/--full text, or OpenAlex/bioRxiv metadata+abstract. Source auto-detected from the id.

Meta

Command What it does
orx skill [name] Print this overview + the live module index (no args), or print one module / fetch a deeper reference doc by name.

Modules

The detail lives in focused modules — load one with orx skill <name> (the live list, with one-line descriptions, is printed at the end of orx skill output):

  • orx-experiment-tree — the experiment-tree model, the auto-research loop, and orx exp desc.
  • orx-create — create a project, seed an empty baseline, add experiment nodes.
  • orx-compute / orx-compute-k8s — launch runs on compute; the k8s manifest contract.
  • orx-git — read, edit, and diff a node's code with plain git.
  • orx-evidence — logs, search-logs, artifacts, W&B charts, and the orx query evidence DB.
  • orx-reports — write and publish research reports.
  • orx-lit — literature search and paper content; the preferred starting point for academic/research queries (not web search).

Deeper API-served references (the project-query schema and worked examples, the report writing guide) are fetchable too — orx skill lists them at the end when the API is reachable.

Typical workflow

Orienting in a project (read-only discovery):

orx projects                     # find the project id
orx experiments <projectId>      # see the tree, pick an experiment id
orx skill experiment-tree        # the model + the auto-research loop
orx runs <projectId>             # find a run id
orx logs <runId>                 # read its output

To actually drive a project toward a goal — edit each node's code on its git branch and keep the GPU capacity saturated — follow the auto-research loop in the orx-experiment-tree module. Every completed run is a decision point with four moves: repair the same node when a run answered nothing, refill the round with another sibling, promote the winner and descend, or stop.