Skip to main content

Dynamical Systems

Dynamical CLI

Latest release CI status Python 3.11 or later Apache 2.0 license

Dynamical CLI is the open-source interface for scientific autoresearch. An agent starts with a question or engineering objective and decides what evidence could resolve it. It composes a virtual laboratory from admitted instruments and computational providers. Dynamical compiles and records the campaign. The agent runs adaptive virtual experiments and can request the physical experiment worth running next.

A virtual laboratory can represent a complete supported laboratory or a purpose-built multi-instrument workflow. Agents can explore counterfactual experiments and learn instrument behavior and operating limits. Each recorded campaign is hash-bound and can be replayed. A preserved campaign state can also start a new experiment as a branch without changing the recorded campaign. The same virtual laboratories can support agent evaluation, data generation, and training. Connected facilities can then return the physical evidence that virtual environments cannot provide.

Give your agent Dynamical

For Codex, add the plugin:

codex plugin marketplace add Dynamical-Systems-Research/dynamical-cli --json
codex plugin add dynamical@dynamical-systems-research --json

For Claude Code, install the primary $dynamical skill:

npx skills add Dynamical-Systems-Research/dynamical-cli \
  --skill dynamical --global --copy --yes

Then ask a complete scientific question. The agent can decide whether it needs literature, data, models, or instrument capabilities before it plans experiments. For example:

Which catalyst composition should we synthesize and measure next to reduce uncertainty about which candidate has the lowest OER overpotential at 10 mA/cm²?

This question does not define a candidate pool. To run the public FastCat study, also give the agent the candidate set and campaign template. The agent then composes and validates one isolated arm for each candidate. It returns the validated campaign record, the limits of its evidence, and a proposed physical experiment or HOLD.

If the campaign needs a model, dataset, simulator, or instrument that is not available, use $dynamical-instrument as the next step. The Codex plugin includes it. For Claude Code, install it directly:

npx skills add Dynamical-Systems-Research/dynamical-cli \
  --skill dynamical-instrument --global --copy --yes

This skill prepares an integration for facility review. It cannot approve its own provider or authorize physical work.

See the virtual laboratory run

Watch four recorded campaigns and their synchronized NVIDIA Isaac Sim replays.

The portfolio covers water electrolysis, additive-alloy qualification, critical-mineral recovery, and rare-earth magnet qualification. Each film shows an agent compose a virtual laboratory, run experiments, respond to validated evidence, and submit a physical experiment request for facility review. The compiled OpenUSD laboratory runs in NVIDIA Isaac Sim while the recorded agent output remains linked to the campaign trace.

These are virtual campaign replays. They do not show physical execution, and they do not show that the full virtual workstations match physical laboratory behavior.

The Scientific Autoresearch study reports the matched FastCat outcome study and the later campaign behavior.

Manual CLI setup

Install the runtime with Python 3.11 or later:

python -m pip install dynamical-cli

The skills use this CLI as their runtime. No MCP server is required.

Run a virtual campaign

Download the example requirement and run the complete virtual workflow:

See the examples index for three public examples. It contains a simulator quickstart and a FastCat OER reference. It also contains a provider proposal that returns HOLD. HOLD means that Dynamical stopped because required evidence or authority is missing.

curl -fsSLO https://raw.githubusercontent.com/Dynamical-Systems-Research/dynamical-cli/main/examples/quickstart/requirement.yaml

dynamical capabilities
dynamical compose requirement.yaml -o composition.json
dynamical compile composition.json -o compiled-world
dynamical run compiled-world -o trace.ndjson
dynamical validate trace.ndjson --json
dynamical run trace.ndjson --mode replay -o replay.ndjson
dynamical validate replay.ndjson --json

The example transfers one sample into an ultrasonic conditioning station and runs a bounded virtual process. The trace records each action, observation, constraint, sample-state change, cost, and duration.

Use dynamical compose --schema to inspect the requirement schema. Use dynamical capabilities --operation <operation-id> --json to inspect the typed contract for one operation.

Restore a verified virtual state

Start a new virtual campaign from the sample state recorded at one observation in a completed simulation trace:

dynamical run child-world \
  --restore-from parent.ndjson \
  --restore-world parent-world \
  --restore-at-event simulate-abc123:event:000006 \
  --dry-run

dynamical run child-world \
  --restore-from parent.ndjson \
  --restore-world parent-world \
  --restore-at-event simulate-abc123:event:000006 \
  -o child.ndjson

Restore validates and reruns the parent up to the selected observation. The rerun must match the recorded trace bytes before Dynamical reads the sample state. Restore does not change the parent or copy parent actions into the child campaign. It does not support physical runs, runs from the 3D execution layer, HOLD results, or state supplied directly by a user. The child trace reports source and child evidence classes separately. A restored child trace can be replayed, but it cannot be a restore source. Repeating the exact child command reuses only a matching validated output and returns "reused": true; it never overwrites a conflicting file. Use dynamical run --help for the full flag list.

Run many campaigns

Dynamical runs one campaign per process. Codex, Claude Code, or a scheduler can run campaigns sequentially or in parallel and control the model, condition, candidate pool, repeat, and worker count. Dynamical records the composition, compiled world, trace, and validation result for each cell.

Store one predeclared requirement in each YAML file under requirements/. Give each file a unique, stable name. This example runs up to eight cells at the same time:

mkdir -p runs

find requirements -type f -name '*.yaml' -print0 |
  xargs -0 -P 8 -I {} sh -c '
    set -eu
    requirement_path=$1
    cell_id=$(basename "$requirement_path" .yaml)
    cell_dir="runs/$cell_id"
    mkdir -p "$cell_dir"

    dynamical compose "$requirement_path" \
      -o "$cell_dir/composition.json" \
      > "$cell_dir/compose-receipt.json"

    dynamical compile "$cell_dir/composition.json" \
      -o "$cell_dir/compiled-world" \
      > "$cell_dir/compile-receipt.json"

    dynamical run "$cell_dir/compiled-world" \
      -o "$cell_dir/trace.ndjson" \
      > "$cell_dir/run-receipt.json"

    dynamical validate "$cell_dir/trace.ndjson" --json \
      > "$cell_dir/validation.json"
  ' sh '{}'

For agent studies, save the model, prompt, condition, candidate pool, repeat, and agent transcript beside these artifacts. Add a trace to the final analysis only after its validation result reports "valid": true. Keep every HOLD receipt as a study outcome.

Run the FastCat candidate study

Give an agent the scientific decision and comparison rule directly:

Use Dynamical with examples/fastcat-oer/candidate-set.yaml. Create one isolated
campaign arm for each of the nine supplied compositions and keep the fixed test
conditions. Validate every arm before comparison. If uncertainty intervals
overlap, do not claim a confirmed winner.
Use a unique lowest point estimate only as the current virtual lead for the next
physical measurement. Preserve all promoted, not_promoted, HOLD, invalid, and
failed arms. Return study-report.json with the supported decision, rival
candidates, uncertainty, experiment snapshots, and next physical experiment or
HOLD.

How Dynamical works

Dynamical exposes five commands:

  • capabilities lists operations and the providers that can perform them.
  • compose matches a research requirement to approved providers.
  • compile builds the virtual laboratory and its execution rules.
  • run starts a simulation, replay, or restored virtual campaign.
  • validate checks structure, source records, evidence labels, and authority.

The reusable unit is a scientific capability. Each capability states its inputs, outputs, units, limits, uncertainty, failure states, source records, and execution authority. A provider performs that capability through a simulator, calibrated instrument model, read-only facility connection, or approved physical instrument.

The agent controls the scientific objective, experiment parameters, operation order, analysis, and stopping decision. Dynamical checks provider approval, evidence labels, trace integrity, and facility rules. The facility controls physical execution.

Automation contract

Dynamical uses these process exit codes:

  • Exit 0: the command produced an executable or valid result.
  • Exit 1: the command completed with a result that does not permit execution, such as HOLD or failed validation.
  • Exit 2: the invocation is invalid or the input is malformed.

Automation must inspect a structured result that returns exit 1. It must not treat the result as an ordinary crash.

Receipts include fields that state what evidence exists and what authority allowed the command: evidence_classes, execution_status, embodied_evidence_bound, claim_boundary, authority_anchor, and validation_reasons.

Custom --registry and --facility inputs are proposals. They cannot grant themselves approval. In v0.1, the installed bundle is the source of approved records.

capabilities --registry <path> inspects a proposal without activating it. Its receipt reports whether each provider is approved after comparison with the installed records. It preserves any self-declared approval as proposed_admission. Compiling a facility manifest directly creates a world for validation only. It cannot run a campaign, so its next_command is validate.

Compiled worlds and verified traces

OpenUSD carries the portable compiled world, including the scene, instrument assets, and campaign composition. NVIDIA Isaac Sim supplies the 3D execution and visualization layer. Dynamical can compile the same campaign for each target while keeping the records needed to compare and replay it.

Instrument models produce scientific observations. Each model states its inputs, outputs, units, operating range, uncertainty, and evidence class. One trace connects campaign actions, scene state, observations, sample history, validation, and replay. Its hashes reveal later changes.

Virtual output remains separate from physical evidence. A physical observation can only come after a facility approves and runs the request.

Add your own model or instrument

The included dynamical-instrument skill maps source evidence to the existing Dynamical contracts. It adds only the parts that the supplied evidence supports.

Give the agent:

  • The model, dataset, or instrument source, revision, owner, license, and digest.
  • The API, SDK, protocol, simulator, or model interface and a test endpoint when available.
  • The supported inputs, outputs, units, limits, failure states, cost, and duration.
  • Calibration data, thresholds, covered variables, and operating range.
  • The facility endpoint, safety limits, approvals, and physical authority.
  • The CAD source, license, and tolerances when geometry is required.

Then ask:

Use $dynamical-instrument to create the smallest pending Dynamical integration that these sources support. Return the candidate files, source evidence, capability operations, validation commands, approval status, and missing review items.

A supported contribution can include:

  1. Capability definitions with typed inputs and outputs that do not depend on one provider.
  2. An adapter for a documented simulator or instrument interface.
  3. A pending provider and, when supported, candidate facility records.
  4. Calibration, source, license, and asset records.
  5. A minimal example and targeted validation tests.

The skill reports the exact files and validation commands for the contribution. Every new provider remains pending until the facility approves it. Missing calibration, licensing, safety review, or physical authority keeps the route pending or returns HOLD.

What the results mean

Simulation, calibrated-model output, replay, and physical measurements are different evidence classes. Dynamical preserves that distinction in the capability records and campaign trace.

Validation confirms that a file follows its declared structure and source rules. It does not establish scientific truth or optimality. Physical execution requires an approved provider, facility rules, and independent approval. A missing route or authority record returns HOLD with reason codes.

Source and licensing

Dynamical is licensed under the Apache License 2.0. Third-party geometry and calibration data keep their original licenses and attribution. See THIRD_PARTY_NOTICES.md for details.

Machine-readable records link derived files to source hashes, source history, license evidence, and known limits. A derived file does not replace its source or grant new rights.

Development

git clone https://github.com/Dynamical-Systems-Research/dynamical-cli.git
cd dynamical-cli
uv sync --extra dev
uv run ruff check .
uv run ruff format --check .
uv run pytest -q

Metadata

Release files for dynamical-cli 0.1.16

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dynamical-cli 0.1.16
File Size Uploaded
dynamical_cli-0.1.16.tar.gz 1.8 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for dynamical-cli 0.1.16
File Interpreter ABI Platform
dynamical_cli-0.1.16-py3-none-any.whl Python 3 none any Details

Total release size: 3.7 MB

Release files / dynamical_cli-0.1.16.tar.gz

Download URL dynamical_cli-0.1.16.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
a869afa47dcb315f2578a9299f85bb7857e881cf17dbbb209d63524f5a63247e
BLAKE2b-256 checksum
How to use checksums
86a15ea7713e152f4ed13182c0f97b29d3b9eb668381e1ad1c22307ae2346b97
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dynamical_cli-0.1.16-py3-none-any.whl

Download URL dynamical_cli-0.1.16-py3-none-any.whl
Size 1.9 MB
Tags Python 3
SHA-256 checksum
How to use checksums
6a746996e5e9399bfaf6cdb9812dd018f5cf952ab5e6ac4492dd29000402f818
BLAKE2b-256 checksum
How to use checksums
dfebeceea802fd5ea72352a90258a3416d79910e15e9e13d85c316b37fa4bdd8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.1.22

2 release files

0.1.19

2 release files

0.1.18

2 release files

This release

0.1.16 This release

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page