Opp repl ai workflows
Composable Anthropic-format Agent Skills for driving OMNeT++ simulations via opp_repl. Works in Claude, Windsurf, and any SKILL.md-aware agent.
npx -y skills add tabgab/opp_repl-skill --skill opp-repl-ai-workflowsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
End-to-end recipes for an AI agent working with opp_repl via its MCP server or shell tools — investigate a regression, bisect across git commits, tune parameters, run a full release gate, set up a new project from scratch. Load this ALONG WITH opp-repl-mcp-server when acting as an autonomous agent managing OMNeT++ simulations.
SKILL.md
6.9 KB, as published. Nobody here has run it
AI agent workflows with opp_repl
This skill is a cookbook for agents driving opp_repl. Each
recipe lists the prerequisite skills, the decision tree, and the
actual tool calls. Load together with opp-repl-mcp-server for
MCP-based integration, or opp-repl-cli-tools for pure-shell
orchestration.
Recipe 1 — "Run this simulation and report"
Prereqs: opp-repl-installation, opp-repl-opp-files,
opp-repl-running-simulations, opp-repl-tasks-and-results,
opp-repl-result-analysis.
-
If no
.oppfile exists for the target project, write one (template fromopp-repl-opp-files/templates/), OR runcreate_project(name, path=...)on current opp_repl. -
Start or attach to a REPL / MCP server.
-
Run:
r = run_simulations( simulation_project=<name>_project, config_filter="...", sim_time_limit="1s") -
Summarise
r.get_error_results()andr.is_all_results_done(). On failure, rerun a failing task in debug mode and pullprint_stderr()for diagnostics. -
On success, aggregate scalars:
df = r.get_scalars() # DataFrame merged across reps means = df.groupby("name").value.mean()
Recipe 2 — "Investigate a regression"
Prereqs: opp-repl-fingerprint-tests,
opp-repl-comparing-simulations, opp-repl-tasks-and-results.
-
Reproduce the failure:
r = run_fingerprint_tests( simulation_project=<p>, config_filter=<suspect>, sim_time_limit="1s") failures = r.get_fail_results() -
Compare HEAD against the last-known-good tag/commit:
cr = compare_simulations_between_commits( simulation_project=<p>, git_hash_1="v4.5", git_hash_2="HEAD", config_filter=<suspect>, run_number=0) -
Inspect the divergence:
first = cr.results[0] first.fingerprint_trajectory_comparison_result first.print_different_statistical_results( include_relative_errors=True) first.show_divergence_position_in_sequence_chart() -
Once the suspect commit is identified, leave a report explicitly referencing the first divergent event number and simulation time.
Recipe 3 — "Tune a parameter to hit a target"
Prereqs: opp-repl-parameter-optimization,
opp-repl-running-simulations.
- Narrow to a single task with
get_simulation_task(...). - Specify
expected_result_names,expected_result_values, andparameter_*arguments (see the skill). - Call
optimize_simulation_parameters(...). - Report convergence: best values, residual error, number of evaluations.
If the objective is noisy, lengthen sim_time_limit or use
repeats before giving up.
Recipe 4 — "Release gate on a feature branch"
Prereqs: opp-repl-feature-and-release-tests,
opp-repl-github-actions, opp-repl-cli-tools.
-
Locally:
run_smoke_tests()on the default project. -
If green, trigger a remote suite:
dispatch_workflow("release-tests.yml", ref="topic/my-feature") -
In parallel, run
run_fingerprint_tests()locally on the subset of configs you actually touched (narrow filter). -
Summarise pass/fail for both local and remote verdicts.
Recipe 5 — "Set up a new simulation project from scratch"
Prereqs: opp-repl-installation, opp-repl-project-scaffolding,
opp-repl-concepts, opp-repl-running-simulations,
opp-repl-result-analysis.
On current opp_repl (>= commit a17fcab, Apr 2026):
from opp_repl.simulation.project import create_project
# Generates <name>.opp, .oppbuildspec, .nedfolders, package.ned,
# omnetpp.ini; loads the project; returns the SimulationProject.
p = create_project("mm1k", path="/tmp", namespace=False)
# Now add NED + C++:
# /tmp/mm1k/Mm1k.ned
# /tmp/mm1k/Source.{h,cc} Queue.{h,cc} Sink.{h,cc}
# and edit /tmp/mm1k/omnetpp.ini to set `network = Mm1k` +
# parameter assignments.
p.build()
r = run_simulations(simulation_project=p, sim_time_limit="100s")
df = r.get_scalars()
On older opp_repl, copy templates from
opp-repl-project-scaffolding/templates/ into a fresh directory
instead, rename mm1k to your chosen name everywhere, then
load_opp_file() + build_project() + run_simulations().
Recipe 6 — "Distribute a parameter sweep to a cluster"
Prereqs: opp-repl-ssh-cluster,
opp-repl-running-simulations, opp-repl-filtering.
-
Authenticate SSH to each worker.
-
Make the built binaries reachable on every worker — via a shared filesystem, or by building on each node (there is no auto-copy helper):
p.build(mode="release") # ensure each worker can reach the same compiled binaries -
Launch:
c = SSHCluster(scheduler_hostname="node1", worker_hostnames=["node1", "node2"]) c.start() run_simulations(scheduler="cluster", cluster=c, config_filter="PureAlohaExperiment") -
Watch the Dask dashboard at localhost:8797.
Recipe 7 — "Keep baselines up to date after a planned change"
Prereqs: any opp-repl-*-tests skill for the test type.
-
Confirm the CHANGE is intentional (humans have reviewed it).
-
Regenerate the relevant baseline, SCOPED to the touched area:
update_fingerprint_test_results( simulation_project=<p>, working_directory_filter="examples/ethernet", sim_time_limit="10s") -
Commit the updated store JSON / statistics folder / media folder alongside the code change. Never auto-update baselines in CI.
General agent guardrails
- Always verify
r.is_all_results_done()/is_all_results_expected()before reporting "green". A PASS summary can hide ERRORs in sub-sub-results. - Never
--break-system-packages; always install into a venv. - Don't run
update_*_test_resultswithout an explicit human instruction — that overwrites baselines. - When an
execute_pythoncall fails, fetch the stderr viaprint_stderr()before retrying; do NOT retry blindly with higher time limits. - For a local sub-agent REPL, prefer the tokenless
--mcp-sockettransport (clients connect viaopp_repl_mcp_bridge). TCP (--mcp-port) needs--mcp-token-hash(or--mcp-bypass-token-hash-check) outsideopp_sandbox. Keep the MCP server OFF (both flags unset) in CI. Seeopp-repl-mcp-server.
See also
opp-repl-overview— skill map.opp-repl-mcp-server— MCP endpoint details.opp-repl-shared-terminal— co-drive one REPL with a human.opp-repl-sandbox— isolateexecute_pythonunder bubblewrap.opp-repl-cli-tools— shell-only alternative.- Every task-specific
opp-repl-*skill referenced above.