Generated banner for Roadrunner Core
Generated logo for Roadrunner Core

Roadrunner Core

MathWorksOfficialCreated by MathWorks

  • Skill
  • Tool integration
  • Software development
  • BSD-2-Clause
  • Low risk

From the author

Foundation skill for all RoadRunner workflows: MATLAB path setup, connection, project/scene/scenario lifecycle, world settings, handle management, status, and close. Use when connecting to RoadRunner, managing projects/scenes/scenarios, setting world origin, checking status, closing RoadRunner, or when any downstream RoadRunner skill needs initialization.
— the description by MathWorks

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The roadrunner-core skill serves as the essential bridge between MATLAB and the RoadRunner application. It automates the lifecycle management of RoadRunner instances, including connection handling, project initialization, and scene or scenario operations. By providing a standardized set of patterns for interacting with the RoadRunner API, it ensures consistent and safe execution of commands while maintaining proper handle management and path configuration.

What it does

  • Initializes and validates the connection between MATLAB and RoadRunner.
  • Manages the lifecycle of projects, scenes, and scenarios.
  • Configures world settings such as origin, center, and extents.
  • Provides status monitoring for active projects and unsaved changes.
  • Handles safe termination of the RoadRunner process.
  • Automates path setup and configuration for the RoadRunner API.

When to use it

  • When you need to connect to or launch RoadRunner from a MATLAB environment.
  • When performing operations on projects, scenes, or scenarios.
  • When setting or modifying world origin and scene bounds.
  • When you need to check the current status of the RoadRunner application.
  • When closing the RoadRunner application safely from within a script.

Advantages

  • Ensures idempotent and reliable initialization of the RoadRunner connection.
  • Provides a structured, pattern-based approach to API calls to prevent errors.
  • Automates complex path and configuration management.
  • Supports both interactive GUI and headless operation modes.
  • Maintains clear handle management to prevent stale references.

Usage examples

“Initialize my RoadRunner connection.”
The agent runs the rrCoreInitialize script to establish a connection, validates the path, and returns the rrApp handle for further use.
“Open the project located at D:/Projects/HighwayProject.”
The agent uses the OPEN_PROJECT pattern to load the specified project into the active RoadRunner instance.
“What is the current status of my RoadRunner scene?”
The agent executes the STATUS command to retrieve and display information about the current scene, including its filename and whether there are unsaved changes.
“Set the world origin to 42.3021, -71.3747.”
The agent applies the CHANGE_WORLD_ORIGIN pattern to update the geospatial coordinates in the active RoadRunner scene.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/matlab/roadrunner-core/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip roadrunner-core.zip -d .agents/skills

Documentation by MathWorks

RoadRunner Core

Foundation skill for all RoadRunner agent workflows. Manages the RoadRunner connection, project/scene/scenario lifecycle, and handle management from MATLAB. Produces the rrApp handle used by all downstream RoadRunner skills.

Execution: all MATLAB code runs via evaluate_matlab_code MCP tool. Never matlab -batch.

When to Use

  • Connecting to or launching RoadRunner from MATLAB

  • Creating, opening, or saving projects, scenes, or scenarios

  • Setting world origin or scene extents

  • Checking RoadRunner status

  • Closing RoadRunner safely

  • Any downstream RoadRunner skill needs rrApp initialization

When NOT to Use

  • RoadRunner is not installed — this skill requires a working RoadRunner installation; it cannot install the product

  • MATLAB version below R2022a — the roadrunner class and related APIs are not available in earlier releases

  • rrApp already exists and is valid — re-running rrCoreInitialize is safe (it's idempotent) but unnecessary; prefer checking exist('rrApp','var') first to avoid the overhead

  • User has not provided installation or project paths when first-time setup is needed — ask the user first, do not guess paths

  • RoadRunner is intentionally closed — do not reconnect or relaunch without explicit user permission


1. How the Agent Uses This Skill

First-time setup (once per machine — two-tier resolution)

rrCoreInitialize handles setup automatically using a two-tier approach:

TierConditionWhat happens
1Settings valid + roadrunner class on pathSetup skipped — already configured
2Agent has installFolder and projectPath variablesProgrammatic setup: addpath, savepath, writes MATLAB settings. No GUI.

Just run rrCoreInitialize. The script automatically:

  1. Connects to a running instance (roadrunner.connect())

  2. If that fails, launches a new instance (roadrunner()) using saved settings

  3. If not configured, errors with PathsRequired — then ask the user for installFolder and projectPath, set them, and re-run

Once setup succeeds, it persists forever (across MATLAB sessions). Never needed again.

No GUI dialogs. This skill never calls roadrunnerSetup. All configuration is done programmatically.

First call in a session
  1. Add the skill scripts to the MATLAB path (required before rrCoreInitialize can be found):

    addpath("<absolute-path-to-this-skill>/scripts");

    Replace <absolute-path-to-this-skill> with the actual filesystem path to this skill's directory (the folder containing this SKILL.md file).

  2. Run rrCoreInitialize → it handles everything: connects to a running instance, or launches one using saved settings, or errors with a clear message if not configured.

  3. If it errors with PathsRequired → ask the user for installFolder and projectPath, set them as variables, re-run rrCoreInitialize.

  4. Proceed with the user's request.

Subsequent calls
  1. Check exist('rrApp','var') — if missing, re-run rrCoreInitialize

  2. Look up the operation in the Decision Logic table (Section 3)

  3. Copy the exact pattern from scripts/rrCoreCommands.m under the matching %% heading

  4. Substitute placeholders with actual values

  5. Execute via evaluate_matlab_code

Key principle

Never improvise API calls. Before every RoadRunner operation, read the matching %% section from rrCoreCommands.m and reproduce it exactly. Do not guess function names, argument syntax, or parameter orders from memory. This prevents hallucinated function names, missing guard rails, and forgotten handle invalidation.

If you are unsure of the correct syntax for any operation, stop and read the pattern file before attempting the call.


2. Files

FileRole
scripts/rrCoreInitialize.mRuns directly. Bootstraps path + connection + validation.
scripts/rrCoreCommands.mPattern reference. Agent reads %% section, substitutes placeholders, executes.
Deployment

On first use, the agent ensures the RoadRunner API is on the MATLAB path (one-time savepath). The scripts in this skill are pattern references — the agent reads them and reproduces the patterns via evaluate_matlab_code.


3. Decision Logic

User IntentPattern (%% section)Placeholders to substitute
Connect / initializeINIT—
Connect without launchingCONNECT_ONLY— (errors if no instance running)
Create a new projectNEW_PROJECT or NEW_PROJECT_WITH_ASSETSprojectPath — ask user whether to include base assets (asset library). Always rrCoreInitialize first (RoadRunner must be running with any project before newProject can be called).
Open an existing projectOPEN_PROJECTprojectPath
Save the projectSAVE_PROJECT—
Create a new sceneNEW_SCENE—
Open a sceneOPEN_SCENEsceneName — if not found, use LIST_SCENES and present options
List available scenesLIST_SCENES—
Save the sceneSAVE_SCENE or SAVE_SCENE_ASAsk user: "Save in place, or save with a new name?" If new name → use SAVE_SCENE_AS with sceneName
Create a new scenarioNEW_SCENARIO—
Open a scenarioOPEN_SCENARIOscenarioName — if not found, use LIST_SCENARIOS and present options
List available scenariosLIST_SCENARIOS—
Save the scenarioSAVE_SCENARIO—
Set world originCHANGE_WORLD_ORIGINlat, lon
Set scene center and extentsCHANGE_SCENE_BOUNDSx, y, w, h
Set scene center onlyCHANGE_SCENE_CENTERx, y
Set scene extents onlyCHANGE_SCENE_EXTENTSw, h
Clear world projectionCLEAR_WORLD_PROJECTION—
Check statusSTATUS—
Close RoadRunnerCLOSE—

Available From: changeWorldSettings requires R2023b or later. All other operations are available from R2022a.

Launch (handled by rrCoreInitialize)

After first-time setup, rrCoreInitialize automatically launches RoadRunner using saved defaults if no instance is running. Manual launch is only needed for non-default modes:

rrApp = roadrunner(ProjectFolder=projectPath, InstallationFolder=installFolder);
ModeAdd this argument
Headless (no UI)NoDisplay=true
No desktop + graphicsNoDesktop=true
Custom portsPorts=[apiPort, cosimPort]

Manual launch still requires explicit user permission.


4. Placeholders

These are the variable names used in rrCoreCommands.m. The agent substitutes them with actual values before executing.

PlaceholderTypeExample
SKILL_SCRIPTS_DIRstring(absolute path to this skill's scripts/ folder)
rrApproadrunner(from rrCoreInitialize, never reassigned)
projectPathstring"D:/Projects/HighwayProject"
sceneNamestring"FourWaySignal.rrscene"
scenarioNamestring"CutInScenario"
latdouble42.3021
londouble-71.3747
x, ydouble1445, 1237
w, hdouble160, 465
installFolderstring"C:/Program Files/RoadRunner R2026a"

5. Handle Management

This skill produces rrApp via rrCoreInitialize. Operations that change state (NEW_SCENE, OPEN_SCENE, NEW_SCENARIO, OPEN_SCENARIO, OPEN_PROJECT, CLOSE) include clear statements to remove stale handles.


6. Path Setup

RoadRunner API path is added to MATLAB's saved path on first use. No config files or environment variables needed.

The agent runs savepath after adding the API path — this persists across MATLAB sessions. If the user upgrades RoadRunner, the agent detects the failure (roadrunner class missing or version mismatch) and asks for the new installation folder.


7. Critical Rules

  1. Always rrCoreInitialize first — never call RoadRunner APIs without a validated rrApp

  2. Never launch without permission — ask the user before roadrunner(ProjectFolder=...)

  3. One rrApp per session — never create a second connection

  4. Read the pattern before every call — open rrCoreCommands.m, find the %% section, reproduce it exactly. Do not guess syntax from memory.

  5. Never auto-save — NEW_SCENE, NEW_SCENARIO, and CLOSE patterns detect unsaved changes but do NOT save automatically. Always ask the user whether to save, save-as, or discard. Saving with the same name overwrites the original and can break backwards compatibility if the file was created with an older version.

  6. Verify version after connect — check rrApp.Version and report it. If the user requested a specific version, warn if it doesn't match.

  7. Ask before save — when saving is needed (new scene/scenario, close, or explicit save request), ask the user whether to save in place, save with a new name, or discard changes

  8. List on not-found — if openScene or openScenario fails because the name doesn't exist, list available scenes/scenarios using dir and present options to the user

  9. Relative scene paths resolve to <project>/Scenes/

  10. Unicode not supported in paths

  11. Handle invalidation is automatic — patterns include clear statements

  12. All execution via MCP — never matlab -batch

  13. close(rrApp) terminates RoadRunner entirely — the process exits. After close, roadrunner.connect() will fail. A fresh roadrunner() launch is required to reconnect.

  14. Scene is NOT restored on relaunch — after close + relaunch, RoadRunner opens the project but shows a blank scene. The agent must explicitly reopen the desired scene.


8. Anti-Patterns

  • Do not launch RoadRunner without user permission

  • Do not call roadrunner(ProjectFolder=...) when already connected — this launches a duplicate instance

  • Do not pass two arguments to roadrunner.connect(port, port) — use single port

  • Do not call any function on a closed/invalid rrApp

  • Do not skip clear statements from the patterns

  • Do not invent function calls not present in rrCoreCommands.m (e.g., no save(rrApp), no saveSceneAs, no switchScenario, no Latitude=lat)

  • Do not hardcode installation paths — use the resolution chain in rrCoreInitialize

  • Do not save a scene without asking the user — saveScene(rrApp, name) silently overwrites existing files

  • Do not confuse "close MATLAB" with "close RoadRunner" — they are independent processes

  • Do not assume scene is restored after relaunch — it is not; always reopen explicitly


9. Project Structure

<RoadRunner Project>/
├── Assets/              3D models, materials, textures
├── Scenes/              .rrscene files
├── Scenarios/           .rrscenario files
├── Exports/             Exported output
├── Project/             Project metadata
└── Scripts/             User scripts (optional)

10. API Behavior Notes

Project
  • newProject creates any missing parent folders

  • The folder name becomes the project name

  • If openProject targets an already-open project, a new blank scene is still created

Scene
  • Relative paths resolve to <project>/Scenes/

  • .rrscene extension is optional — RoadRunner appends it if missing

  • If the scene belongs to a different project, RoadRunner switches to that project

  • If modified assets exist during save, the project is also saved

  • saveScene(rrApp, name) silently overwrites if the name already exists — no confirmation

  • saveScene(rrApp) on an unnamed (new) scene errors — must provide a name

  • Subfolder paths work (e.g., "Scenarios/subfolder/Name")

Scenario
  • newScenario, openScenario, saveScenario available since R2022a

  • Opening a new scene automatically closes the active scenario

  • Scenarios can be opened even on a blank (unsaved) scene

World Settings
ParameterTypeDescription
WorldOrigin[lat lon]Geospatial world origin
SceneCenter[x y]Center of scene workspace
SceneExtents[w h]Scene workspace dimensions
ClearWorldProjectionlogicalClear current projection

Available since R2023b.

Status Properties
rrStatus = status(rrApp);
rrStatus.Project.Filename         % Current project path
rrStatus.Project.UnsavedChanges   % true/false
rrStatus.Scene.Filename           % Current scene path
rrStatus.Scene.UnsavedChanges     % true/false
rrStatus.Scenario.Filename        % Current scenario path
rrStatus.Scenario.UnsavedChanges  % true/false
PropertyDescription
rrApp.InstallationFolderRoadRunner install path
rrApp.VersionVersion string
rrApp.NoDisplayConsole mode flag
rrApp.NoDesktopNo-desktop mode flag
Close
  • close(rrApp) does NOT prompt to save — always save before closing

  • Deletes the associated roadrunner object — do not reuse the variable after closing

  • Terminates the RoadRunner process entirely — it is not just a disconnect

  • After close, roadrunner.connect() will fail (nothing to connect to)

  • On relaunch via roadrunner(), the project is restored but the scene is NOT — a blank scene appears

  • Port validation enforces range 1024–65535

Connection
rrApp = roadrunner.connect();           % Default port 35707
rrApp = roadrunner.connect(portNumber); % Explicit port
ModeSyntaxUse case
GUI (default)roadrunner(ProjectFolder=...)Interactive use
Headlessroadrunner(ProjectFolder=..., NoDisplay=true)Batch/CI, no UI
No desktop + graphicsroadrunner(ProjectFolder=..., NoDesktop=true)Export needing render
Custom portsroadrunner(ProjectFolder=..., Ports=[apiPort, cosimPort])Multi-instance

Copyright 2026 The MathWorks, Inc.


Files

scripts/rrCoreInitialize.m

%% rrCoreInitialize — RoadRunner Core Initialization
% Ensures RoadRunner is configured, on the MATLAB path, connected, and
% validated. Handles first-time setup automatically.
%
% Produces:
%   rrApp — validated roadrunner application handle in base workspace
%
% First-time setup (one-time, persists across sessions):
%   Tier 1: Already configured — settings valid + class on path → skip
%   Tier 2: Paths provided as variables (installFolder, projectPath) →
%           programmatic setup, no GUI
%
% No GUI dialogs. If paths are not provided and not configured, errors
% with a clear message asking the user to provide them.
%
% Copyright 2026 The MathWorks, Inc.

%% Tier 1: Check if already configured
alreadyConfigured = exist('roadrunner', 'class');
if alreadyConfigured
    s = settings;
    try
        instDir = s.roadrunner.application.InstallationFolder.ActiveValue;
        projDir = s.roadrunner.application.ProjectFolder.ActiveValue;
        if strlength(instDir) == 0 || strlength(projDir) == 0
            alreadyConfigured = false;
        end
    catch
        alreadyConfigured = false;
    end
end

%% Tier 2 & 3: First-time setup (runs only if not configured)
if ~alreadyConfigured
    % Tier 2: Programmatic setup if paths are provided as workspace variables
    hasInstallFolder = exist('installFolder', 'var') && strlength(installFolder) > 0;
    hasProjectPath   = exist('projectPath', 'var') && strlength(projectPath) > 0;

    if hasInstallFolder && hasProjectPath
        % Validate installation folder
        apiPath = fullfile(installFolder, "bin", computer('arch'), "Tools", "MATLAB", "api");
        if ~isfolder(apiPath)
            error("rrCoreInitialize:InvalidInstall", ...
                "RoadRunner API folder not found at:\n  %s\nCheck your installation path.", apiPath);
        end

        % Add API to MATLAB path (persists)
        addpath(apiPath);
        savepath;

        % Save to MATLAB settings (persists)
        s = settings;
        s.roadrunner.application.InstallationFolder.PersonalValue = installFolder;
        s.roadrunner.application.ProjectFolder.PersonalValue = projectPath;

        fprintf("RoadRunner configured programmatically.\n");
        fprintf("  Installation: %s\n", installFolder);
        fprintf("  Project:      %s\n", projectPath);

    else
        % No paths available — error with clear message (no GUI)
        error("rrCoreInitialize:PathsRequired", ...
            "RoadRunner is not configured.\n" + ...
            "Please provide:\n" + ...
            "  1. installFolder — RoadRunner installation path (e.g., ""C:\\Program Files\\RoadRunner R2026a"")\n" + ...
            "  2. projectPath — an existing RoadRunner project folder\n" + ...
            "Once configured, use newProject(rrApp, path) to create new projects.");
    end
end

%% Connection (idempotent)
if ~exist('rrApp', 'var') || ~isvalid(rrApp)
    % Strategy: try connecting to an already-running instance first,
    % then fall back to launching a new instance.
    connected = false;

    % Attempt 1: Connect to existing RoadRunner instance
    try
        rrApp = roadrunner.connect();
        connected = true;
    catch
        % Connection failed — instance may not be running
    end

    % Attempt 2: Launch RoadRunner using saved defaults
    if ~connected
        try
            rrApp = roadrunner();
        catch ME
            error("rrCoreInitialize:LaunchFailed", ...
                "Cannot connect to or launch RoadRunner.\n" + ...
                "Check that Installation and Project folders are set correctly.\nError: %s", ME.message);
        end
    end
end

%% Validate
try
    rrStatus = status(rrApp);
catch ME
    error("rrCoreInitialize:ConnectionFailed", ...
        "Cannot reach RoadRunner. Is it running?\nError: %s", ME.message);
end

%% Report version
fprintf("RoadRunner connected successfully.\n");
fprintf("  Version: %s\n", rrApp.Version);
fprintf("  Project: %s\n", rrStatus.Project.Filename);

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

What our scanner noticed· Low risk

  • Phrasing that asks for actions without confirmation

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
MathWorks
Publisher
MathWorks (Official)
Source
matlab/matlab-agentic-toolkit · skills-catalog/automotive/roadrunner-core · commit 2a7f215
Licence
BSD 2-Clause License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE.md)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by MathWorks.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download roadrunner-core.zip