architect
Entry-point skill for designing robotics applications with AI agents. Turns requirements (robot type, task, hardware, sim-vs-real, GPU/budget) into a full stack decision — middleware, simulation, data, visualization, training frameworks — plus a scaffold plan and a written archit
Install
npx skills add https://github.com/robium-ai/robium/tree/main/archive/architect/1.2.0
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install robium-ai-robium@llmmart
git clone https://github.com/robium-ai/robium.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole robium-ai/robium collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
architect
The entry point to robium. Given a robotics application idea, this skill turns requirements into a concrete stack decision — middleware, simulation, data, visualization, and training frameworks — plus a scaffold plan and a written architecture brief. It is the only skill that knows the whole robium catalog; everything else is reached by routing from here. Load it first on any new robotics app, then hand off to the domain skills for the actual build.
When to use this skill
- Starting a brand-new robotics application from a rough idea ("build a mobile robot that navigates a warehouse", "train a manipulation policy on an arm").
- The requirements exist but the stack is unchosen, or half-chosen and you want a sanity check before committing.
- You need a durable, written architecture record the whole project builds from.
- You want the routing map: "which robium skill do I load for phase X?"
- Cross-references — go straight to the tool skill, skipping architect, when the
stack is already chosen and the question is narrow:
- Debugging or configuring an existing stack → the matching tool skill
(
nav2,ros2,gazebo,lerobot, …). "My costmap isn't updating" is anav2question, not an architect question. - Authoring or improving robium skills themselves →
skill-author. - Deep-diving one decision (uv vs Docker, which visualizer) → the umbrella
that owns it (
environments,visualization); architect points you there.
- Debugging or configuring an existing stack → the matching tool skill
(
Key directives
- Delegation posture: route + embed the decision logic. The decisions (which stack, why) live here; the how-to lives in the skill each decision routes to. Never duplicate a tool skill's content — link to it.
- Always produce or update
docs/architecture-brief.mdin the app repo. It is the living architecture contract — every later build step reads from it, and refinements edit it in place. No brief, not done. Usereferences/brief-template.mdfor its required sections. - Virtual-environment-first. Reproducibility is decided before code: route
the env question to the
environmentsskill (uv/venv vs Docker) and record the choice in the brief. Do not let a project start with an ad-hoc setup. - Never invent syntax or tools. Recommend only real, current tools at
versions you have verified — robium ships curation, not a framework. When a
version fact matters (ROS 2 distro, Gazebo pairing, GPU floor), confirm it
against current docs (e.g. docs.ros.org for ROS 2
distro/EOL status) rather than memory. See
references/stack-selection.mdfor the verified defaults this skill ships with. - State open risks explicitly in the brief. Unverified assumptions (GPU availability, hardware you can't see, sim-to-real gaps) go in the brief's open-risks section, not silently into a decision.
Quick start
1. Collect the requirement checklist (ask for anything missing; if a critical item is still unknown, record the assumption in the brief rather than guessing silently):
- Robot type — mobile base, arm/manipulator, humanoid, drone, custom?
- Task — navigate, manipulate/grasp, inspect, learn a policy, teleop?
- Hardware — real robot (which?), sim only, or sim-first then real?
- Sim vs real — where does the MVP need to run?
- GPU — is an NVIDIA RTX GPU available? VRAM? (gates Isaac Sim / Lab.)
- Local vs remote — laptop, workstation, or headless remote server?
(drives the visualization choice — remote favors
foxglove.)
2. Pick a golden path. The two MVP verticals:
Navigation (mobile robot, autonomous nav in sim):
ros2+nav2+gazebo+visualization→ ROS 2 Jazzy (LTS) middleware, Nav2 for the nav stack, Gazebo Harmonic as the paired simulator, an RViz2 or Foxglove view. Dockerized env viaenvironments. This is the classic, well-supported path — favor it when the task is "get from A to B autonomously."Manipulation (arm, learned policy):
lerobot(+isaac-sim/isaac-labif a capable GPU is available) +huggingface+data→ LeRobot for policy training/eval (ACT, Diffusion, SmolVLA, π0), datasets and models sourced through thehuggingfacedelegation,datafor the sourcing strategy. Addisaac-sim/isaac-labonly when the GPU floor is met (see Platform gotchas); otherwise stay in LeRobot's own sim/eval tools and a CPU/uv env. Favor this when the task is "learn to grasp / manipulate."
3. Write the brief. Fill docs/architecture-brief.md from
references/brief-template.md — chosen stack + reasoning, module breakdown,
comms plan, env strategy, data plan, robium skills per phase, open risks.
4. Scaffold — bootstrap-first. Before laying anything out from scratch,
check the battle-tested sample registry: REGISTRY.md at the root of the
companion robium-applications repo
(github.com/robium-ai/robium-applications;
locally a sibling checkout when present). Each card names the stack an app
proves, what it can bootstrap, and its encoded battle scars. If an existing
app resembles the target (same vertical, overlapping stack), bootstrap
from it — copy its structure, env shape, and test shape, then diverge —
and note the donor app in the brief. Only when no card is close, lay out
the repo fresh per references/scaffold-patterns.md (ROS 2 app layout or
LeRobot app layout). Then hand each phase to its skill.
For the heavy version of step 2 (a full stack-comparison research burst that
keeps the noise out of the main conversation), launch the robium-architect
subagent; it runs this skill as its playbook and writes the brief.
Decision guidance
The routing map. Architect is the only skill that sees the whole catalog; it hands each build phase to the skill below. Grouped by phase.
Design / architecture
| Skill | Hand off when… |
|---|---|
architect |
You are here — requirements → stack → brief → scaffold, and routing to everything below. |
integration |
Module boundaries and comms are the question: topics/services vs zenoh/gRPC, Dockerfiles, compose wiring across nodes. |
environments |
Deciding reproducibility: uv/venv vs Docker, identical local/remote repro, GPU passthrough. Resolve this early, per the env-first directive. |
Middleware & motion
| Skill | Hand off when… |
|---|---|
ros2 |
The app uses ROS 2 — core usage, packages, nodes, launch files, message/topic wiring. The substrate for the nav vertical. |
nav2 |
Autonomous navigation for a mobile base — costmaps, planners, controllers, behavior trees, localization. |
Simulation
| Skill | Hand off when… |
|---|---|
simulation |
Choosing a simulator or getting sensor simulation right, before committing to a specific engine. |
gazebo |
Simulating a ROS 2 robot — the paired sim for the nav vertical (Gazebo Harmonic ↔ ROS 2 Jazzy). |
isaac-sim |
Photoreal / GPU-accelerated sim or synthetic data — only when the NVIDIA RTX GPU floor is met. |
isaac-lab |
GPU-parallel reinforcement-learning environments on top of Isaac Sim — same GPU gate. |
Learning & data
| Skill | Hand off when… |
|---|---|
lerobot |
Training or running a manipulation/imitation policy — the substrate for the manipulation vertical. |
huggingface |
Pulling datasets/models or pushing artifacts to the Hub — delegate to hf-cli@huggingface-skills; robium adds only the robotics glue. |
data |
Deciding where data comes from: offline datasets vs sim generation vs teleop collection. |
Visualization
| Skill | Hand off when… |
|---|---|
visualization |
Choosing a viz tool or applying viz best practices, before picking a specific one. |
rviz2 |
Classic ROS 2 visualization on a local Linux machine with a display. |
foxglove |
Web-based viz — the go-to for a headless remote server or cross-platform team viewing. |
rerun |
Timeline/multimodal logging for ML and perception debugging (heavy pointer to Rerun's own docs). |
Verification & meta
| Skill | Hand off when… |
|---|---|
testing |
Standing up smoke tests, sim-based regression, or launch testing — plan this into the brief, don't bolt it on later. |
live-demo |
Publishing a finished app as a public interactive web demo — mission-control demo page, per-visitor Cloud Run sim instances, viewer handoff. Entry bar: the app's smoke test is green. |
skill-author |
Editing robium's own skills (fresh authoring, mining, hardening from learnings). Not an app-building skill. |
skill-updater |
End-of-session absorption: folding the current session's gotchas back into the robium skills. Not an app-building skill. |
See references/stack-selection.md for the decision trees behind these
hand-offs (middleware yes/no, simulator gazebo-vs-isaac, training framework).
Platform gotchas
- Isaac Sim / Isaac Lab are GPU-gated. Per NVIDIA's current requirements
(docs.isaacsim.omniverse.nvidia.com),
the floor is an RTX 4080 with 16 GB VRAM (minimum), an RTX 5080 or
better recommended (16 GB+ VRAM), and 32 GB+ system RAM (64 GB recommended;
Isaac Lab RL training wants more of both). Linux (Ubuntu) is the primary
target; there is no macOS support. If the GPU floor isn't met, do not
route to Isaac — keep the manipulation path in LeRobot's own sim/eval
tooling. Verify the current floor in
isaac-simbefore committing; treat GPU availability as an open risk if unconfirmed. - macOS / Apple Silicon cannot run the native ROS 2 + Gazebo desktop stack
cleanly — plan for Docker (route to
environments) or a Linux remote. - Remote / headless servers have no display for RViz2 — default the viz
choice to
foxglove(web UI) in that case, and note it in the brief. - ROS 2 distro choice: Lyrical Luth (LTS, GA 2026-05-22, supported to
May 2031) is the current newest LTS — default new apps to it unless a
dependency forces otherwise. Exception: the ROS 2 + Nav2 + Gazebo navigation
vertical still defaults to Jazzy Jalisco (LTS, supported to May 2029) for
now, because Nav2 has not yet shipped binary packages for Lyrical (tracked in
ros-navigation/navigation2#6123as of 2026-07) — re-check before picking Lyrical for that path. Kilted Kaiju is non-LTS and nearing its own EOL (~Dec 2026); don't pick it as a new default. Record the chosen distro in the brief.
Customization
- Different robot/task: re-run the requirement checklist and the decision
trees in
references/stack-selection.md. The two golden paths are starting points, not the only shapes — a drone-inspection app is still ROS 2 + a sim + viz, just with different nodes; a real-hardware manipulation app is LeRobot with the sim swapped for a hardware driver. - Adapt the scaffold:
references/scaffold-patterns.mdgives a ROS 2 layout and a LeRobot layout; rename packages and prune directories your app doesn't need, but keep thedocs/architecture-brief.mdlocation fixed — tooling and every later phase expect it there. - Adapt the brief: every section in
references/brief-template.mdis required, but its depth scales with the project — a one-robot sim demo needs a short comms plan; a multi-robot fleet needs a real one.
References
references/stack-selection.md— the decision trees: middleware (ROS 2 yes/no), simulator (Gazebo vs Isaac), and training framework, with the verified version defaults this skill ships.references/scaffold-patterns.md— repo layouts for a ROS 2 app and a LeRobot app: directory trees plus what each directory holds.references/brief-template.md— the required sections ofdocs/architecture-brief.md(chosen stack + reasoning, module breakdown, comms plan, env strategy, data plan, robium skills per phase, open risks).examples/architecture-brief-example.md— a filled brief for a hypothetical diff-drive warehouse robot (status: unverified).- Battle-tested sample apps + registry:
robium-applications —
REGISTRY.mdindexes every app (stack, pass bar, bootstrap-for, battle scars); the bootstrap-first source for Quick start step 4. - Upstream: ROS 2 docs, Nav2 docs,
Gazebo docs, LeRobot,
Isaac Sim,
Isaac Lab. The
robium-architectsubagent (agents/robium-architect.md) runs this skill as its playbook.
Changelog
1.2.0 (2026-07-13): routing map gains the new
live-demoskill (publish a finished app as a public web demo — born from the nav-trial demo deployment).1.1.1 (2026-07-12): skill-refiner run 1 — present-tense 'this session' phrasing reworded (no meaning change) so the refiner's undated-provenance warning stays noise-free.
1.1.0 (2026-07-12): scaffold step made bootstrap-first — check robium-applications' REGISTRY.md for a resembling battle-tested app before scaffolding fresh; registry link added to References.
Files (robium)
-
examples
-
architecture-brief-example.md 5.6 KB
<!-- status: unverified --> <!-- A filled architecture brief for a hypothetical robot, illustrating the brief-template. Not from a real trial run — promote to verified once an actual app is built from a brief like this. --> # Architecture Brief — WarehouseBot (diff-drive warehouse navigator) **Date:** 2026-07-10 **Status:** draft **Author:** robium-architect subagent ## 1. Requirements - **Robot type:** differential-drive mobile base (~40 cm footprint), 2D lidar + wheel odometry, no manipulator. - **Task:** navigate autonomously between named pick/drop stations in a warehouse, avoiding dynamic obstacles (people, carts). - **Hardware:** none yet — **sim-first**; a real base is a later phase. - **Sim vs real:** MVP must run entirely in simulation. - **GPU:** *assumed none* on the dev machine (laptop). **Assumption** — not confirmed; feeds open risks. - **Local vs remote:** developed on a macOS laptop, so the stack runs in Docker; a headless workstation is a possible later target. ## 2. Chosen stack + reasoning | Layer | Choice | Version | Why (and what was rejected) | |---|---|---|---| | Middleware | ROS 2 | Jazzy Jalisco | LTS to 2029; standard nav ecosystem. Lyrical Luth (newer LTS, to 2031) rejected for now — Nav2 has no released binaries for it yet. Kilted rejected — non-LTS, ends 2026. | | Simulator | Gazebo | Harmonic | Officially paired with Jazzy; no GPU needed. Isaac Sim rejected — GPU-gated, overkill for a lidar nav demo. | | Navigation | Nav2 | (Jazzy release) | The standard ROS 2 nav stack; costmaps + planners + BT out of the box. Rolling our own rejected — no reason to. | | Visualization | RViz2 (dev) + Foxglove (remote) | — | RViz2 locally for quick checks; Foxglove for the eventual headless workstation. Rerun rejected — not needed for classical nav. | | Environment | Docker | Jazzy base image | Dev machine is macOS, which can't run the native ROS 2 + Gazebo desktop cleanly; Docker gives identical local/remote repro. uv rejected — this is a compiled ROS 2 workspace, not pure Python. | Decisions trace to the architect trees: middleware → ROS 2 (mobile multi-node system); simulator → Gazebo (no GPU); no training framework (classical nav). ## 3. Module breakdown - **warehousebot_description** — URDF/xacro of the diff-drive base, lidar + wheel frames, meshes. Publishes the robot model. In/out: none / `robot_description`, TF. - **warehousebot_sim** — Gazebo world (warehouse layout, shelves, spawn points) and spawn glue. In/out: `robot_description` / simulated `/scan`, `/odom`, TF. - **warehousebot_navigation** — Nav2 config: costmaps (lidar-based obstacle layer + inflation), NavFn/Smac planner, DWB/MPPI controller, behavior tree, saved warehouse map. In/out: `/scan`,`/odom`,`/map`,goal / `/cmd_vel`. - **warehousebot_bringup** — top-level launch (sim + nav + viz) and params. In/out: launch args / the running system. ## 4. Comms plan Standard ROS 2 topics, single robot, all in-process for the MVP. | Topic | Type | Rate | Producer → Consumer | |---|---|---|---| | `/scan` | `sensor_msgs/LaserScan` | ~10 Hz | Gazebo lidar → Nav2 costmap | | `/odom` | `nav_msgs/Odometry` | ~30 Hz | Gazebo diff-drive → Nav2, TF | | `/cmd_vel` | `geometry_msgs/Twist` | ~20 Hz | Nav2 controller → base | | `/map` | `nav_msgs/OccupancyGrid` | latched | map_server → Nav2 | | goal | `nav2` action (`NavigateToPose`) | on demand | app → Nav2 BT | No cross-host transport needed for the MVP. If the fleet grows to multiple robots later, revisit with the `integration` skill (namespacing, DDS discovery). ## 5. Environment strategy Docker, single `Dockerfile` on a ROS 2 Jazzy base plus Gazebo Harmonic and Nav2 from ROS vendor packages; a `compose.yaml` running sim + nav + viz. macOS dev uses an X/Wayland forward or Foxglove for viewing. The same image runs on the headless workstation later — identical repro is the reason Docker was chosen over a native workspace. No GPU passthrough (none required). Detail: route to the `environments` skill. ## 6. Data plan No learned components → no datasets. Data artifacts are: the saved warehouse occupancy `map` (built once via SLAM in sim, then reused), Nav2 param YAMLs, and recorded rosbags for regression. Rosbags and maps are versioned in-repo; large bags gitignored. No Hub involvement. ## 7. Robium skills per build phase | Phase | Skill(s) | |---|---| | Environment setup | environments | | Robot model + bringup | ros2 | | Simulation world | gazebo | | Mapping + navigation | nav2 | | Visualization | visualization → rviz2 (local), foxglove (remote) | | Smoke/regression tests | testing | ## 8. Open risks - **GPU availability unconfirmed** — the design assumes no GPU and stays on Gazebo, which is fine. Blocks nothing for this app, but confirm before any future perception/learning phase that might want Isaac. *Resolve:* check `nvidia-smi` on the dev/target machine. - **Dynamic-obstacle avoidance in sim ≠ real** — Gazebo pedestrians are scripted; real warehouse traffic is messier. Blocks confidence in the avoidance tuning. *De-risk:* keep the costmap/controller params in `warehousebot_navigation` easy to retune; plan a hardware validation phase. - **macOS + Gazebo rendering** — GUI rendering under Docker on macOS can be slow or flaky. Blocks smooth local dev. *De-risk:* prefer Foxglove/headless sim for day-to-day; use RViz2 sparingly, or move dev to the Linux workstation early. - **ROS 2 Jazzy version pins** — Nav2/Gazebo package versions assumed compatible on the Jazzy line but not yet built. *Resolve:* stand up the Docker image first and confirm `colcon build` is clean before writing app code.
-
-
references
-
brief-template.md 4 KB
# Architecture brief template The required structure of `docs/architecture-brief.md` — the living architecture contract that lives in every robium application repo. The `robium-architect` subagent writes the first version; all later refinement happens in the main conversation with the `architect` skill loaded, editing this same file. **Every section below is required.** Depth scales with the project (a one-robot sim demo has a short comms plan; a fleet has a real one), but no section is omitted — an empty section is a signal that a decision hasn't been made yet. Copy the skeleton, fill each section, keep it current as the build proceeds. --- ## Skeleton ```markdown # Architecture Brief — <app name> **Date:** <YYYY-MM-DD> **Status:** <draft | active | superseded> **Author:** <robium-architect subagent | main agent refinement> ## 1. Requirements The inputs this design answers to. Robot type, task, hardware, sim-vs-real, GPU availability, local-vs-remote. Mark any assumed (not confirmed) input explicitly — assumptions also feed section 8. ## 2. Chosen stack + reasoning The decisions and why. One row per component with the alternative rejected. | Layer | Choice | Version | Why (and what was rejected) | |---|---|---|---| | Middleware | ROS 2 / none | Jazzy | … | | Simulator | Gazebo / Isaac / LeRobot-sim | Harmonic | … | | Nav / learning | Nav2 / LeRobot / … | … | … | | Visualization | rviz2 / foxglove / rerun | … | … | | Environment | uv / Docker | … | … | Tie each choice back to a branch in the architect stack-selection trees. ## 3. Module breakdown The system decomposed into modules/packages/nodes, each with its responsibility and its inputs/outputs. Mirrors the scaffold layout. ## 4. Comms plan How modules talk. For ROS 2: the key topics/services/actions and their message types and rates. For cross-process or remote boundaries: the transport (topics vs zenoh vs gRPC). Sensor rates and frames that matter go here. (The `integration` skill owns the detail.) ## 5. Environment strategy Reproducibility. uv/venv vs Docker and why; base image or Python version; GPU passthrough if any; how local and remote stay identical. (The `environments` skill owns the detail.) ## 6. Data plan Where data comes from and where it goes. Offline datasets vs sim-generated vs teleop-collected; Hub datasets/models pulled or pushed; storage and gitignore boundaries. For non-learning apps this may be short (maps, logs). (The `data` and `huggingface` skills own the detail.) ## 7. Robium skills per build phase The routing plan — which skill the builder loads at each phase, in order. Example: | Phase | Skill(s) | |---|---| | Env setup | environments | | Robot model + bringup | ros2 | | Simulation | gazebo | | Navigation | nav2 | | Visualization | visualization → foxglove | | Testing | testing | ## 8. Open risks Every unverified assumption and known unknown, stated plainly. GPU availability, sim-to-real gap, hardware you can't inspect, version pins you haven't confirmed, performance concerns. Each risk: what it is, what it blocks, and how you'd resolve or de-risk it. This section is never empty — if you think it is, you haven't looked hard enough. ``` --- ## Filling notes - **Section 2 is the heart.** A reader should be able to reconstruct why the stack is what it is without asking. Always name the rejected alternative. - **Section 7 makes the brief actionable** — it is the routing table from the architect skill, narrowed to this app and ordered by build phase. - **Section 8 protects the project.** The architect directive is to surface risks, not bury them. GPU availability is the most common one for the manipulation path; the sim-to-real gap for anything targeting real hardware. - Keep **Status** current: `draft` while being written, `active` once the build is proceeding from it, `superseded` when a re-architecture pivot produces a new version (the subagent is relaunched only for genuine pivots). See `examples/architecture-brief-example.md` for a filled instance. -
scaffold-patterns.md 5.5 KB
# Scaffold patterns Starting repo layouts for the two golden paths. Copy the tree, rename packages to your app, prune directories you don't need. Two invariants hold for every robium app regardless of stack: - `docs/architecture-brief.md` — the living architecture contract. Fixed location; every build phase and the `robium-architect` subagent expect it here. - `learnings/YYYY-MM-DD.md` — dated friction notes captured during building, later absorbed back into robium skills by `skill-author`. The env layer (Dockerfile vs `pyproject.toml`) is decided by the `environments` skill; both trees below show the common case. ## ROS 2 application (navigation golden path) For a mobile robot navigating in Gazebo with Nav2. A ROS 2 workspace with a `src/` colcon layout, one package per concern. ``` my-nav-robot/ ├── docs/ │ └── architecture-brief.md # the contract (required) ├── learnings/ # dated friction notes for skill-author ├── docker/ │ ├── Dockerfile # ROS 2 Jazzy base + deps (environments skill) │ └── compose.yaml # sim + nav + viz services ├── src/ # colcon workspace source │ ├── my_robot_description/ # URDF/xacro, meshes — the robot model │ │ ├── urdf/ │ │ ├── meshes/ │ │ └── launch/ # spawn/description launch │ ├── my_robot_bringup/ # top-level launch + params, ties it together │ │ ├── launch/ # bringup.launch.py (sim + nav + viz) │ │ └── config/ # nav2_params.yaml, ros2 params │ ├── my_robot_navigation/ # Nav2 config: costmaps, planners, BT │ │ ├── config/ │ │ ├── behavior_trees/ │ │ └── maps/ │ └── my_robot_sim/ # Gazebo worlds + spawn glue │ ├── worlds/ │ └── models/ ├── tests/ # smoke + launch tests (testing skill) └── README.md ``` **What each dir holds** - `*_description` — the robot's URDF/xacro, meshes, and the launch that publishes the model. One source of truth for the robot's geometry/frames. - `*_bringup` — the composition layer: the launch file that starts sim + Nav2 + visualization together, plus the parameter YAMLs. Where a new user starts. - `*_navigation` — everything Nav2 (`nav2` skill): costmap configs, planner and controller params, behavior trees, saved maps. - `*_sim` — Gazebo (`gazebo` skill): world files, spawn models, sim-only glue. - `docker/` — the reproducible environment (`environments` skill): a Jazzy base image and a compose file wiring the services. - `tests/` — smoke and launch tests (`testing` skill): "does the robot reach a goal in sim" as a regression. ## LeRobot application (manipulation golden path) For training and evaluating a manipulation policy. A Python project managed by `uv` (no colcon), organized around the data → train → eval loop. ``` my-arm-policy/ ├── docs/ │ └── architecture-brief.md # the contract (required) ├── learnings/ # dated friction notes for skill-author ├── pyproject.toml # uv-managed deps (environments skill) ├── uv.lock ├── src/ │ └── my_policy/ │ ├── configs/ # policy + training configs (ACT, Diffusion, SmolVLA…) │ ├── datasets/ # dataset prep / loading glue (huggingface delegation) │ ├── train.py # training entry point (lerobot) │ ├── eval.py # in-sim evaluation entry point │ └── env/ # sim/hardware env wrappers ├── data/ # local datasets / cache (gitignored; data skill) ├── outputs/ # checkpoints, logs, eval videos (gitignored) ├── notebooks/ # exploration (optional) ├── tests/ # smoke tests: dataset loads, 1-step train runs └── README.md ``` **What each dir holds** - `src/my_policy/configs` — training and policy hyperparameter configs; which policy family (ACT / Diffusion / SmolVLA / π0) and its settings. - `src/my_policy/datasets` — glue for fetching and shaping datasets; Hub pulls/pushes go through the `huggingface` delegation, sourcing strategy through the `data` skill. - `src/my_policy/{train,eval}.py` — the `lerobot` training and evaluation entry points; keep them thin, config-driven. - `src/my_policy/env` — wrappers around the sim (or, later, real hardware). Add `isaac-sim`/`isaac-lab` here **only if the GPU floor is met**; otherwise LeRobot's own sim. - `data/` and `outputs/` — large, regenerable, git-ignored. - `pyproject.toml` + `uv.lock` — the reproducible env (`environments` skill); uv is the default for the manipulation path since much of it is CPU-friendly Python and doesn't need the full ROS 2 Docker apparatus. ## Adapting - A real-hardware version of either app keeps the tree and swaps the `*_sim` / `env` directory for a hardware-driver package/module. - A hybrid (learned policy running inside a ROS 2 system) starts from the ROS 2 tree and adds a `my_policy` package that wraps the LeRobot inference. - Prune aggressively for an MVP — a single-package ROS 2 demo doesn't need four packages. But never move `docs/architecture-brief.md`. -
stack-selection.md 5.1 KB
# Stack selection decision trees The reasoning behind architect's routing table. Three decisions: middleware, simulator, training framework. Each ends at a concrete, verified default and the robium skill that owns the build. **Verify version facts against current docs before committing them to a brief** — the defaults below were current as of mid-2026 but robotics moves fast. ## Verified defaults (mid-2026) | Component | Default | Why | |---|---|---| | ROS 2 distro | **Lyrical Luth** (general default); **Jazzy Jalisco** for the Nav2 vertical | Lyrical Luth is the current newest LTS (GA 2026-05-22, supported to May 2031) — default for new apps. Nav2 has not yet released binaries for Lyrical (tracked in `ros-navigation/navigation2#6123`), so the ROS 2 + Nav2 + Gazebo path still defaults to Jazzy Jalisco (LTS, supported to May 2029) until that lands. Kilted Kaiju is non-LTS and nearing its own EOL (~Dec 2026); don't pick it as a new default. | | Simulator (ROS 2) | **Gazebo Jetty** with Lyrical; **Gazebo Harmonic** with Jazzy | Each is the officially paired sim for its ROS 2 distro, installed via ROS vendor packages. Both Jetty and Harmonic are themselves LTS Gazebo releases. | | Manipulation learning | **LeRobot** (v0.6+) | Open, actively developed; supports ACT, Diffusion Policy, VQ-BeT, TDMPC, SmolVLA, π0/π0.5; ships sim + eval tooling; broad arm support (SO-100/101, Koch, LeKiwi, Reachy2). | | GPU sim / RL | **Isaac Sim + Isaac Lab** | Only when the NVIDIA RTX GPU floor is met (see below); otherwise stay in LeRobot's sim. | ## Decision 1 — Middleware: ROS 2 or not? ``` Is the robot a mobile base / arm / multi-node system that needs standard drivers, message passing, and an ecosystem of packages? ├─ Yes → ROS 2 (default Lyrical Luth; Jazzy Jalisco for the Nav2 │ vertical — see verified defaults above). Route: ros2 │ Navigation on top? → nav2 │ Needs a simulator? → Decision 2 └─ No → Is it a pure learning/policy problem with no runtime robot middleware (train a policy, evaluate in a learning sim)? ├─ Yes → skip ROS 2 for the MVP; LeRobot owns the loop. Route: lerobot └─ Unsure → default to ROS 2; it is the safer, more interoperable base and nothing about it blocks adding a learning stack later. ``` **Notes** - ROS 2 is the substrate for the navigation golden path. Even manipulation apps often add ROS 2 later for hardware drivers — but don't force it into an MVP that only needs to train and evaluate a policy. - Middleware/comms choices *within* a ROS 2 app (topics vs services vs zenoh vs gRPC across process boundaries) are the `integration` skill's job, not this decision. ## Decision 2 — Simulator: Gazebo or Isaac? ``` Do you have a dedicated NVIDIA RTX GPU meeting the Isaac floor? (RTX 4080+, 16 GB VRAM minimum, 32 GB+ system RAM, Linux — no macOS) ├─ No → Gazebo Harmonic. Route: gazebo (the only viable ROS 2 sim here) └─ Yes → What do you need the sim for? ├─ ROS 2 robot in a physics world, sensors, nav testing │ → Gazebo Harmonic is still the simpler, better-integrated │ choice for the nav vertical. Route: gazebo ├─ Photorealistic rendering / synthetic perception data │ → Isaac Sim. Route: isaac-sim └─ Massively parallel RL environments (thousands of envs on GPU) → Isaac Lab (on Isaac Sim). Route: isaac-lab ``` **Notes** - Default to **Gazebo** unless there's a concrete reason to pay the Isaac cost (GPU requirement, driver setup, Linux-only, steeper learning curve). "It looks nicer" is not a reason for an MVP. - If GPU availability is unconfirmed, do **not** design the MVP around Isaac — pick Gazebo (or LeRobot's own sim) and log the GPU question as an open risk. - The `simulation` umbrella covers sensor-simulation correctness (noise, rates, frames) independent of which engine you pick. ## Decision 3 — Training / policy framework ``` Are you learning a control policy (imitation or RL)? ├─ No → no training framework needed; classical nav/control via nav2/ros2. └─ Yes → What kind? ├─ Imitation / behavior cloning from demos (teleop or datasets), │ manipulation especially │ → LeRobot. Route: lerobot (+ huggingface for data/models) ├─ Reinforcement learning at scale, GPU available │ → Isaac Lab. Route: isaac-lab └─ Small-scale RL / no GPU → LeRobot's tooling or a lightweight gym; keep it CPU/uv. ``` **Data sourcing** for any learning path is the `data` skill's call — offline datasets vs sim-generated vs teleop-collected — and Hub pulls/pushes go through the `huggingface` delegation (`hf-cli@huggingface-skills`). ## Where each decision is recorded Every branch you take becomes a line in `docs/architecture-brief.md` under "chosen stack + reasoning". An unresolved branch (GPU unknown, distro pinned by an external dependency you haven't confirmed) becomes an entry under "open risks". See `brief-template.md`.
-
-
SKILL.md 14 KB
--- name: architect version: 1.2.0 description: > Entry-point skill for designing robotics applications with AI agents. Turns requirements (robot type, task, hardware, sim-vs-real, GPU/budget) into a full stack decision — middleware, simulation, data, visualization, training frameworks — plus a scaffold plan and a written architecture brief. Use when: starting any new robotics app; 'build a robot app', 'which robotics stack', 'scaffold a robotics project', 'mobile robot', 'robot arm', 'manipulation policy', 'navigation stack'; or when requirements exist but the stack is unchosen. This is the entry-point skill of the robium plugin: load it first; it routes to every other robium skill per build phase. Not for: debugging an existing stack (use the matching tool skill) or authoring robium skills (skill-author). --- # architect The entry point to robium. Given a robotics application idea, this skill turns requirements into a concrete stack decision — middleware, simulation, data, visualization, and training frameworks — plus a scaffold plan and a written **architecture brief**. It is the only skill that knows the whole robium catalog; everything else is reached by routing from here. Load it first on any new robotics app, then hand off to the domain skills for the actual build. ## When to use this skill - Starting a brand-new robotics application from a rough idea ("build a mobile robot that navigates a warehouse", "train a manipulation policy on an arm"). - The requirements exist but the stack is unchosen, or half-chosen and you want a sanity check before committing. - You need a durable, written architecture record the whole project builds from. - You want the routing map: "which robium skill do I load for phase X?" - Cross-references — go straight to the tool skill, skipping architect, when the stack is already chosen and the question is narrow: - Debugging or configuring an existing stack → the matching tool skill (`nav2`, `ros2`, `gazebo`, `lerobot`, …). "My costmap isn't updating" is a `nav2` question, not an architect question. - Authoring or improving robium skills themselves → `skill-author`. - Deep-diving one decision (uv vs Docker, which visualizer) → the umbrella that owns it (`environments`, `visualization`); architect points you there. ## Key directives - **Delegation posture: route + embed the decision logic.** The *decisions* (which stack, why) live here; the *how-to* lives in the skill each decision routes to. Never duplicate a tool skill's content — link to it. - **Always produce or update `docs/architecture-brief.md` in the app repo.** It is the living architecture contract — every later build step reads from it, and refinements edit it in place. No brief, not done. Use `references/brief-template.md` for its required sections. - **Virtual-environment-first.** Reproducibility is decided before code: route the env question to the `environments` skill (uv/venv vs Docker) and record the choice in the brief. Do not let a project start with an ad-hoc setup. - **Never invent syntax or tools.** Recommend only real, current tools at versions you have verified — robium ships curation, not a framework. When a version fact matters (ROS 2 distro, Gazebo pairing, GPU floor), confirm it against current docs (e.g. [docs.ros.org](https://docs.ros.org/) for ROS 2 distro/EOL status) rather than memory. See `references/stack-selection.md` for the verified defaults this skill ships with. - **State open risks explicitly in the brief.** Unverified assumptions (GPU availability, hardware you can't see, sim-to-real gaps) go in the brief's open-risks section, not silently into a decision. ## Quick start **1. Collect the requirement checklist** (ask for anything missing; if a critical item is still unknown, record the assumption in the brief rather than guessing silently): - **Robot type** — mobile base, arm/manipulator, humanoid, drone, custom? - **Task** — navigate, manipulate/grasp, inspect, learn a policy, teleop? - **Hardware** — real robot (which?), sim only, or sim-first then real? - **Sim vs real** — where does the MVP need to run? - **GPU** — is an NVIDIA RTX GPU available? VRAM? (gates Isaac Sim / Lab.) - **Local vs remote** — laptop, workstation, or headless remote server? (drives the visualization choice — remote favors `foxglove`.) **2. Pick a golden path.** The two MVP verticals: - **Navigation** (mobile robot, autonomous nav in sim): `ros2` + `nav2` + `gazebo` + `visualization` → ROS 2 Jazzy (LTS) middleware, Nav2 for the nav stack, Gazebo Harmonic as the paired simulator, an RViz2 or Foxglove view. Dockerized env via `environments`. This is the classic, well-supported path — favor it when the task is "get from A to B autonomously." - **Manipulation** (arm, learned policy): `lerobot` (+ `isaac-sim` / `isaac-lab` *if a capable GPU is available*) + `huggingface` + `data` → LeRobot for policy training/eval (ACT, Diffusion, SmolVLA, π0), datasets and models sourced through the `huggingface` delegation, `data` for the sourcing strategy. Add `isaac-sim`/`isaac-lab` only when the GPU floor is met (see Platform gotchas); otherwise stay in LeRobot's own sim/eval tools and a CPU/uv env. Favor this when the task is "learn to grasp / manipulate." **3. Write the brief.** Fill `docs/architecture-brief.md` from `references/brief-template.md` — chosen stack + reasoning, module breakdown, comms plan, env strategy, data plan, robium skills per phase, open risks. **4. Scaffold — bootstrap-first.** Before laying anything out from scratch, check the battle-tested sample registry: `REGISTRY.md` at the root of the companion robium-applications repo ([github.com/robium-ai/robium-applications](https://github.com/robium-ai/robium-applications); locally a sibling checkout when present). Each card names the stack an app proves, what it can bootstrap, and its encoded battle scars. If an existing app resembles the target (same vertical, overlapping stack), **bootstrap from it** — copy its structure, env shape, and test shape, then diverge — and note the donor app in the brief. Only when no card is close, lay out the repo fresh per `references/scaffold-patterns.md` (ROS 2 app layout or LeRobot app layout). Then hand each phase to its skill. For the heavy version of step 2 (a full stack-comparison research burst that keeps the noise out of the main conversation), launch the `robium-architect` subagent; it runs this skill as its playbook and writes the brief. ## Decision guidance The routing map. Architect is the only skill that sees the whole catalog; it hands each build phase to the skill below. Grouped by phase. ### Design / architecture | Skill | Hand off when… | |---|---| | `architect` | You are here — requirements → stack → brief → scaffold, and routing to everything below. | | `integration` | Module boundaries and comms are the question: topics/services vs zenoh/gRPC, Dockerfiles, compose wiring across nodes. | | `environments` | Deciding reproducibility: uv/venv vs Docker, identical local/remote repro, GPU passthrough. Resolve this early, per the env-first directive. | ### Middleware & motion | Skill | Hand off when… | |---|---| | `ros2` | The app uses ROS 2 — core usage, packages, nodes, launch files, message/topic wiring. The substrate for the nav vertical. | | `nav2` | Autonomous navigation for a mobile base — costmaps, planners, controllers, behavior trees, localization. | ### Simulation | Skill | Hand off when… | |---|---| | `simulation` | Choosing a simulator or getting sensor simulation right, before committing to a specific engine. | | `gazebo` | Simulating a ROS 2 robot — the paired sim for the nav vertical (Gazebo Harmonic ↔ ROS 2 Jazzy). | | `isaac-sim` | Photoreal / GPU-accelerated sim or synthetic data — **only when the NVIDIA RTX GPU floor is met**. | | `isaac-lab` | GPU-parallel reinforcement-learning environments on top of Isaac Sim — same GPU gate. | ### Learning & data | Skill | Hand off when… | |---|---| | `lerobot` | Training or running a manipulation/imitation policy — the substrate for the manipulation vertical. | | `huggingface` | Pulling datasets/models or pushing artifacts to the Hub — **delegate** to `hf-cli@huggingface-skills`; robium adds only the robotics glue. | | `data` | Deciding where data comes from: offline datasets vs sim generation vs teleop collection. | ### Visualization | Skill | Hand off when… | |---|---| | `visualization` | Choosing a viz tool or applying viz best practices, before picking a specific one. | | `rviz2` | Classic ROS 2 visualization on a local Linux machine with a display. | | `foxglove` | Web-based viz — the go-to for a **headless remote server** or cross-platform team viewing. | | `rerun` | Timeline/multimodal logging for ML and perception debugging (heavy pointer to Rerun's own docs). | ### Verification & meta | Skill | Hand off when… | |---|---| | `testing` | Standing up smoke tests, sim-based regression, or launch testing — plan this into the brief, don't bolt it on later. | | `live-demo` | Publishing a finished app as a public interactive web demo — mission-control demo page, per-visitor Cloud Run sim instances, viewer handoff. Entry bar: the app's smoke test is green. | | `skill-author` | Editing robium's own skills (fresh authoring, mining, hardening from learnings). Not an app-building skill. | | `skill-updater` | End-of-session absorption: folding the current session's gotchas back into the robium skills. Not an app-building skill. | See `references/stack-selection.md` for the decision trees behind these hand-offs (middleware yes/no, simulator gazebo-vs-isaac, training framework). ## Platform gotchas - **Isaac Sim / Isaac Lab are GPU-gated.** Per NVIDIA's current requirements ([docs.isaacsim.omniverse.nvidia.com](https://docs.isaacsim.omniverse.nvidia.com/latest/installation/requirements.html)), the floor is an **RTX 4080 with 16 GB VRAM** (minimum), an RTX 5080 or better recommended (16 GB+ VRAM), and 32 GB+ system RAM (64 GB recommended; Isaac Lab RL training wants more of both). Linux (Ubuntu) is the primary target; **there is no macOS support**. If the GPU floor isn't met, do not route to Isaac — keep the manipulation path in LeRobot's own sim/eval tooling. Verify the current floor in `isaac-sim` before committing; treat GPU availability as an open risk if unconfirmed. - **macOS / Apple Silicon** cannot run the native ROS 2 + Gazebo desktop stack cleanly — plan for Docker (route to `environments`) or a Linux remote. - **Remote / headless servers** have no display for RViz2 — default the viz choice to `foxglove` (web UI) in that case, and note it in the brief. - **ROS 2 distro choice:** **Lyrical Luth** (LTS, GA 2026-05-22, supported to May 2031) is the current newest LTS — default new apps to it unless a dependency forces otherwise. Exception: the ROS 2 + Nav2 + Gazebo navigation vertical still defaults to **Jazzy Jalisco** (LTS, supported to May 2029) for now, because Nav2 has not yet shipped binary packages for Lyrical (tracked in `ros-navigation/navigation2#6123` as of 2026-07) — re-check before picking Lyrical for that path. Kilted Kaiju is non-LTS and nearing its own EOL (~Dec 2026); don't pick it as a new default. Record the chosen distro in the brief. ## Customization - **Different robot/task:** re-run the requirement checklist and the decision trees in `references/stack-selection.md`. The two golden paths are starting points, not the only shapes — a drone-inspection app is still ROS 2 + a sim + viz, just with different nodes; a real-hardware manipulation app is LeRobot with the sim swapped for a hardware driver. - **Adapt the scaffold:** `references/scaffold-patterns.md` gives a ROS 2 layout and a LeRobot layout; rename packages and prune directories your app doesn't need, but keep the `docs/architecture-brief.md` location fixed — tooling and every later phase expect it there. - **Adapt the brief:** every section in `references/brief-template.md` is required, but its depth scales with the project — a one-robot sim demo needs a short comms plan; a multi-robot fleet needs a real one. ## References - `references/stack-selection.md` — the decision trees: middleware (ROS 2 yes/no), simulator (Gazebo vs Isaac), and training framework, with the verified version defaults this skill ships. - `references/scaffold-patterns.md` — repo layouts for a ROS 2 app and a LeRobot app: directory trees plus what each directory holds. - `references/brief-template.md` — the required sections of `docs/architecture-brief.md` (chosen stack + reasoning, module breakdown, comms plan, env strategy, data plan, robium skills per phase, open risks). - `examples/architecture-brief-example.md` — a filled brief for a hypothetical diff-drive warehouse robot (status: unverified). - Battle-tested sample apps + registry: [robium-applications](https://github.com/robium-ai/robium-applications) — `REGISTRY.md` indexes every app (stack, pass bar, bootstrap-for, battle scars); the bootstrap-first source for Quick start step 4. - Upstream: [ROS 2 docs](https://docs.ros.org/), [Nav2 docs](https://docs.nav2.org/), [Gazebo docs](https://gazebosim.org/docs/), [LeRobot](https://github.com/huggingface/lerobot), [Isaac Sim](https://docs.isaacsim.omniverse.nvidia.com/), [Isaac Lab](https://isaac-sim.github.io/IsaacLab/). The `robium-architect` subagent (`agents/robium-architect.md`) runs this skill as its playbook. ## Changelog <!-- One dated line per battle-tested change, added by skill-author hardening sessions. --> - 1.2.0 (2026-07-13): routing map gains the new `live-demo` skill (publish a finished app as a public web demo — born from the nav-trial demo deployment). - 1.1.1 (2026-07-12): skill-refiner run 1 — present-tense 'this session' phrasing reworded (no meaning change) so the refiner's undated-provenance warning stays noise-free. - 1.1.0 (2026-07-12): scaffold step made bootstrap-first — check robium-applications' REGISTRY.md for a resembling battle-tested app before scaffolding fresh; registry link added to References.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.