← ClaudeAtlas

routeros-scriptinglisted

RouterOS scripting language and CLI configuration idioms for .rsc files and interactive commands. Use when: writing or reviewing RouterOS scripts, scheduler/netwatch/on-event snippets, idempotent CLI config, :local/:global/:foreach/:do syntax, [find] selectors, print as-value handling, script permissions, or when the user mentions .rsc, RouterOS script, scripting tips, or CLI config automation.
tikoci/routeros-skills · ★ 18 · Code & Development · score 81
Install: claude install-skill tikoci/routeros-skills
# RouterOS Scripting & CLI Config RouterOS scripts (`.rsc`, `/system/script`, scheduler `on-event`, Netwatch hooks, and interactive CLI snippets) use RouterOS's own language. It is **not shell, Lua, Python, or Tcl**. For the syntax baseline, see [references/syntax.md](./references/syntax.md). This skill focuses on the traps that LLMs are likely to confidently get wrong. ## Do Not Use Interactive Row Numbers in Scripts Interactive `print` output shows temporary row numbers (`0`, `1`, `2`...) for the current console buffer. They are **not stable object IDs** and are not usable inside scripts. ```routeros # WRONG in scripts — "1" is only an interactive print-buffer row number /ip/route/set 1 gateway=3.3.3.3 # Better — internal IDs have a * prefix, but can change if objects are removed/re-added /ip/route/set *1 gateway=3.3.3.3 # Best — resolve the target at runtime /ip/route/set [find dst-address="0.0.0.0/0"] gateway=3.3.3.3 ``` For generated config, use stable selectors such as `comment=`, `name=`, or a unique address/list value. Internal IDs are visible in `print as-value` as `.id=*HEX`. ## Treat `[find]` Results as ID Arrays `[find ...]` returns zero, one, or many internal IDs. Many commands accept that array directly (`set`, `remove`, `disable`), but code that needs exactly one object should check the count before `get`. ```routeros :local ids [/interface/find where name="ether1"] :if ([:len $ids] = 1) do={ :put [/interface/get ($ids->0) name] } else={ :error ("