agentleFS
antioch-roboticsantioch-robotics/antioch-agent-plugin/skills/scenario-design/SKILL.md

scenario-design

Skill1 starsChanged 16 days agoApache-2.0View on GitHub

Use when authoring Antioch scenarios, typed cases, measured checks, results, artifacts, or telemetry. Covers evaluation and recording; use antioch-platform for dispatch/history and the Isaac skills for native simulator code.

2 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions2 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 2

    1. feixiaoxu2022/agent-evaluation-skills★ 4same name
    2. WilliamEbong/CourseForge★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository6 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Keep module imports free of simulation, network, or file-writing effects.

    line 37
  2. Distinctive:

    Use one named check per task criterion, with measured detail.

    line 82
  3. Distinctive:

    After execution, inspect the checks, results, and relevant artifacts through run history.

    line 108

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Scenario design

A scenario evaluates behavior with typed inputs, measured checks, and saved evidence. Dispatch captures its output and pins images and source; use research to ground native measurement APIs.

Author the unit

import antioch

logger = antioch.Logger("task")


@antioch.scenario(tags=["smoke"], cases=[antioch.case({"seed": 2}, id="seed-2")])
def evaluate(run: antioch.ScenarioRun, seed: int = 1) -> None:
    """Evaluate the requested behavior."""
    # Build, step, and measure the task here.

The first parameter is run: antioch.ScenarioRun. Remaining parameters need scalar annotations (bool, int, float, str, or Literal) and defaults; antioch.param(default, ge=..., le=..., description=...) adds bounds and documentation. Use Literal for a closed set of choices. The parameter names, types, defaults, bounds, and descriptions appear during collection so callers can inspect the contract before running it.

The runner starts Kit before the body. Declare startup with config=antioch.SimulationConfig(...), not a startup call inside the scenario; config=None skips runner-owned Kit but still uses remote compute under CLI dispatch. Keep simulator imports inside functions; discovery runs locally without Isaac.

Keep module imports free of simulation, network, or file-writing effects. antioch scenario collect --json validates definitions, not the body; scenario_paths in the manifest limits discovery; without it, discovery scans the project. antioch.scenarios() reads definitions already registered in the current process, whereas client collection discovers and expands project source.

Inputs and execution policy

antioch.case accepts parameter overrides, a Cartesian grid, or correlated combinations; use helper objects, not bare dictionaries, in cases=. IDs can format resolved parameters; omitted IDs are derived. Expansion is capped at 2,000 cases per scenario. Use cases for independent outcomes and comparisons, or an internal loop for one evaluation/dataset lifecycle; suite selectors group cases in YAML.

cases = [
    antioch.case({"speed": 0.2}, id="slow", tags=["smoke"]),
    antioch.case(grid={"speed": [0.2, 0.4], "seed": [1, 2]}, id="speed-{speed}-seed-{seed}"),
    antioch.case(combinations=[{"speed": 0.2, "load_kg": 20.0}, {"speed": 0.4, "load_kg": 5.0}]),
]

A grid crosses independent values; combinations preserve intentional pairs. Shared overrides can accompany either expansion, but a parameter cannot be set both in the shared overrides and the expansion. Case tags combine with scenario tags for selection. Keep IDs stable enough to compare the same case across revisions.

Decorator keywords: name, description, tags, cases, config, blueprint, capture, service, profile, restart_services, and kit_cache.

kit_cache names a folder, such as a workflow task's volume, that each run loads Isaac Sim's Kit cache from before Isaac Sim starts and saves it to when it passes, so its first frames skip compiling what an earlier run did. Plain code calls antioch.load_kit_cache(path) before antioch.start_simulation() and antioch.save_kit_cache(path) once it has rendered.

service selects an eligible active container; it does not activate a profile. Omit it only when the active graph has one eligible service. profile includes helper services in the dispatched revision; restart_services restarts their processes and waits for fresh health before each managed run. Direct calls apply neither policy. For development with those helpers, or to target a session explicitly, start the required graph with antioch session new --profile perception. A submitted bundle reaches every mapped service, but a service outside restart_services keeps its existing process. If its files differ from those that process started with, the run reports earlier service code. Restart that helper between runs or add it to this policy. See manifest services and restart behavior.

Measured verdicts

run.add_result("max_error_m", max_error_m)
run.add_result("error_limit_m", error_limit_m)
run.check("position", max_error_m <= error_limit_m, detail=f"{max_error_m:.4f} m")
run.add_artifact("outputs/measurements.json", description="Measured task trajectory")

Use one named check per task criterion, with measured detail. Checks return the supplied boolean and do not stop execution; reusing a criterion replaces its verdict, so accumulate failures or worst-case values for conditions that must hold throughout motion. Geometric clearance is not measured contact, and a commanded grasp is not a measured lift; label proxies as proxies.

On normal completion, any failed check gives FAILED; all passing checks or no checks give PASSED, so no checks proves only that execution completed. run.fail and assertion failures stop the body with FAILED; run.skip reports an unmet precondition; run.set_outcome overrides checks, but unexpected exceptions still produce ERRORED.

Keep thresholds and summaries in JSON results and do not write the reserved checks key. run.add_results({...}) stores several results together; values must be finite, JSON-compatible values, so convert arrays and tensors before storing a small summary. Keep large arrays, tables, images, and files in artifacts instead. Artifact names are unique within a run; use name= when files share a basename. output and telemetry are reserved artifact names. An artifact uploads when add_artifact is called; keep many small files in one archive to avoid an upload for each.

run.params, case_id, tags, scenario_run_id, suite_run_id, suite, and suite_position describe the current evaluation. wall_s and sim_s distinguish elapsed wall time from simulation time; sim_s can be absent without a simulator, and a loop that steps Newton or MuJoCo-Warp without Kit sets it with run.set_sim_time(seconds) (telemetry). Long loops should call run.raise_if_cancelled() so a requested cancellation can stop useful work promptly; it reads a flag refreshed in the background and never waits on the network, so calling it every step is fine. In-session recording explains why a direct call cannot rely on the platform killing its parent process.

Telemetry and read-back

A module-scope antioch.Logger writes into whichever recording is active when it is called, a scenario's or a script's antioch.Telemetry, beside native rr.log calls. Use scalar for metrics, image for raw RGB/RGBA review frames, and value for Rerun archetypes; image calls take a path and then pixels: logger.image("camera/front", rgb). Read telemetry for image encoding, timelines, geometry, layouts, and diagnosing RRDs.

After execution, inspect the checks, results, and relevant artifacts through run history. Smooth video alone does not establish physical correctness.

For imported scenario calls or notebook recording inside a session, read in-session recording. Native simulator APIs belong to Isaac Sim, Isaac Lab, and research.

Choose the next reference

TaskLoad when needed
Choose typed inputs, cases, or a pass/fail criterionThis skill's authoring, input, and measured-verdict sections
Save camera images, metrics, geometry, and a useful viewer layoutTelemetry and viewer layouts
Stream or save telemetry from a script or notebook without a runScripts and notebooks
Record code in a script or notebook; handle offline work or cancellationIn-session recording
Run, compare, download, cancel, or repeat saved workScenario history and suites
Iterate on native code before making a recorded evaluationAgentic simulation

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.