architect
Start robotics apps or demos from compatible examples for mapping/navigation, robot assistants, or pretrained manipulation. Choose a stack if none fits; not existing-app maintenance.
Install
npx skills add https://github.com/robium-ai/robium/tree/main/skills/architect
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
Reach a visible robot result with the least new work, then customize. Inspect existing examples before researching or designing a new stack.
Without an established app, an outcome-only request such as mapping a simulated environment or running a pretrained policy is a first-run request even without "new project", a robot brand, or "architect" in the prompt. Use this skill inline, not the optional heavy-research architect subagent. If a domain skill brought you here, select the baseline once and return to that skill for its mechanics; do not loop through architecture again for the same task.
Start from the outcome
- Inspect the current repository, the Robium app registry, and the closest working example before asking questions. Start with candidate READMEs, manifests, and launchers; exclude generated environments, caches, and model assets from discovery scans.
- Define what the robot should visibly do, where it will run, and what evidence would make the first slice credible.
- Honor the user's stated target platform and restrictions even when the agent runs on a different host. Ask about a compatible alternative, not for them to restate constraints they already gave.
Offer the shortest useful starting path
After a quick registry and candidate check, surface these paths briefly, mark the recommendation, and explain what would run first. Do this before broad research, architecture documents, cloning, or lengthy setup. Do not turn the four paths into a mandatory questionnaire: when intent is clear, explain and proceed within it; ask one short question only for a consequential choice.
| Path | When it fits | First step |
|---|---|---|
| Try an example | Close compatible match; user wants to see it work | Run it unchanged in the existing checkout; no new project. |
| Adapt an example | Close match; user wants their own customized app | Verify the baseline, then make a separate derivative and change one behavior. |
| Reuse selected pieces | Partial overlap; useful components fit the new app | Reuse the smallest compatible pieces and prove one integrated behavior. |
| Start fresh | No useful compatible overlap, or explicitly requested | Use the domain skills to scaffold only the smallest visible slice. |
For "just try it", default to the compatible example with the fewest new moving parts, not the most ambitious stack. Describe prerequisites and first-run work, not unmeasured speed promises. Read reuse paths only for adaptation, component reuse, or a fresh scaffold.
Inspect candidates and prove the selected slice
- Resolve the user's workspace with
npx robium-ai workspace --json; itsrepoandappspaths are authoritative, not a hardcoded~/robiumor the installed plugin cache. For workspace discovery and an occasional quiet freshness check before a new example, read workspace updates. Checking is not updating. - Discover candidates in the Robium app registry,
using a sibling checkout when available. Match the task, host architecture,
runtime requirements, and relevant verification evidence, not just the name
or a
stablelabel. Read the selected app's README and launcher; distinguish tested conditions from assumptions. For the homepage's three first-run tasks, use first-run examples. - For a clear compatible match, explain the choice and proceed within the user's request: "This matches Robium's navigation example. I'll get it running first, then we can adapt it." Ask only when different candidates or an incompatible platform materially change the outcome. Honor an explicit request to build from scratch. Routine maintenance stays in the owning skill.
- Use the existing checkout without resetting or pulling over user changes; acquire a separate checkout when necessary. Record the source revision and any local changes. For whole-app reuse, run the baseline with its launcher, pinned environment, assets, and viewer; do not create a derivative, upgrade dependencies, or recreate infrastructure just to demonstrate it.
- Check prerequisites, credentials, and occupied ports before lengthy builds. Explain first-run downloads and reuse caches on later starts. Missing model access is a blocker, not permission to substitute a mock and call it live. Keep secrets out of prompts/logs; explain API charges and obtain authorization before paid calls. Do not provision cloud resources or move physical hardware as an implicit part of onboarding.
- Check the requested behavior at a meaningful milestone, not after each edit. Use the app's smallest relevant check, not a new suite or repeated UI tours. A low-risk visual check may be handed to the user with exact steps and an explicit unverified status; an open port is not proof the demo works. Stop only processes started for this run. If blocked, report the exact unmet prerequisite without inventing a new stack. Before a port, dependency overhaul, or prolonged troubleshooting, surface the blocker and a simpler compatible path; let the user choose the tradeoff. For try-only requests, offer one small customization after it works. For requested customization, proceed with the agreed change and keep the baseline.
Choose only the stack the slice needs
- When environment setup is needed, use
environmentsearly. - For ROS-based mobile navigation, route through
ros2,navigation,simulation, and the selected simulator and visualizer. - For learned manipulation, route through
lerobot,data, andhuggingface; add a simulator only when the first slice needs one. - Use
integrationwhen module boundaries or cross-process communication are themselves a design decision. - Use
testingwhen risk, uncertainty, or requested test work needs a verification decision; do not automatically author tests. Usetest-assetsfor needed fixtures. - Route provider mechanics to
cloud-runorrunpodonly after deployment is part of the approved slice. A public session layer belongs tolive-demo; publishing a finished app belongs toapp-publishing.
When the stack is genuinely undecided, read stack-selection.md. Keep upstream project documentation as the source of truth for supported versions and hardware.
Keep the decision record light
- Keep decisions inline for tryouts and tiny demos. Use
docs/architecture-brief.mdwhen a new app or re-architecture benefits from a durable record, never as a gate before an agreed first visible result. - Record the outcome, chosen direction, provisional assumptions, risks, next probe, and allowed pivots. It is a living decision record, not a contract.
- Read brief-template.md only when creating or revising that record. The filled example is illustrative, not a source of current compatibility facts.
- If no close app exists, read scaffold-patterns.md and prune the starting shape to the first slice.
Files (robium)
-
examples
-
architecture-brief-example.md 5.5 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 | project-supported release | Standard navigation ecosystem. Verify the release against Nav2 and simulator support before implementation. | | Simulator | Gazebo | ROS-compatible release | No dedicated NVIDIA GPU is required for this slice. Isaac Sim is unnecessary for a lidar navigation demo. | | Navigation | Nav2 | release matching ROS 2 | Standard ROS 2 navigation with costmaps, planners, controllers, and behavior trees. | | Visualization | RViz2 (dev) + Foxglove (remote) | n/a | 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 with 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 compatibility-checked ROS 2 base plus its supported Gazebo and Nav2 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 | navigation | | 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 package compatibility**: the selected ROS 2, Nav2, and Gazebo combination has not yet been built. *Resolve:* stand up the Docker image first and confirm `colcon build` is clean before writing app code.
-
-
references
-
brief-template.md 3.1 KB
# Architecture decision record template Use `docs/architecture-brief.md` for a new application or a genuine re-architecture. It records decisions and uncertainty; it is not an immutable contract. Update it when evidence authorizes a pivot. Only the four core sections are required. Add optional detail when it changes a decision or helps the next implementation step. Lock the user-visible outcome, genuine constraints, and the next risk-reducing slice. Exact methods, versions, hardware SKUs, training parameters, metric thresholds, protocols, and deployment details stay provisional unless the user requires them, compatibility/safety/cost makes them necessary, or a cheap probe has validated that choice for the next slice. Record what actually worked as implementation evidence instead of predicting it in the architecture brief. ```markdown # Architecture Brief: <app name> **Date:** <YYYY-MM-DD> **Status:** <draft | active | superseded> ## Goal and constraints The user-visible outcome, robot/task, sim-vs-real target, available hardware, GPU/budget limits, and local/remote constraints. Mark unconfirmed inputs as provisional. ## Decisions | Decision | Choice | Why now | Confidence | |---|---|---|---| | First working slice | ... | Cheapest useful risk reduction | validated/provisional | | Environment | uv/Docker/... | ... | validated/provisional | | Simulator/middleware | ... | ... | validated/provisional | Include an alternative only when it was a genuine contender. Do not invent a rejected option to make the record look complete. ## Provisional assumptions and risks | Assumption or risk | Impact | Cheapest validation | Authorized pivot | |---|---|---|---| | ... | ... | ... | What may change without a new design gate | ## Implementation path 1. The smallest user-visible or risk-reducing slice. 2. The smallest relevant check, or an explicit low-risk manual acceptance handoff. 3. The next integration step if it passes. ``` ## Optional sections Add only those the application needs: - **Module boundaries and communications** for multi-process, ROS 2, remote, or multi-container systems. - **Environment and deployment detail** when GPU, system dependencies, or local/remote parity is a real risk. - **Data lifecycle** for dataset sourcing, storage, recording, publication, or model artifacts. - **Skill routing** when several Robium skills will be used across phases. - **Alternatives considered** for a material product or stack choice. ## Updating the record - Replace a provisional assumption with evidence as soon as a cheap probe resolves it. - Treat a failed probe as information, not a specification violation. Use the documented authorized pivot when it remains within the approved direction. - Ask for another direction decision only when the evidence creates a material product choice, scope expansion, external-cost action, or safety concern. - Set the record to `superseded` only for a genuine re-architecture. Ordinary implementation discoveries are normal edits to the active record. See `../examples/architecture-brief-example.md` for a filled instance; older examples may be more detailed than a small project requires. -
first-run-examples.md 3.1 KB
# First-run examples Use these candidates for the homepage prompts; they are not universal defaults for every navigation or manipulation project. The application repository owns commands, dependency pins, platform instructions, and measured results. Read the current README and launcher before running. Existing evidence for one host does not certify a fresh installation on another. The homepage uses outcome-based wording, not robot or policy brands. Mapping, localization, and a navigation goal suggest `robot-navigation`; a simulated assistant that sees and follows natural-language instructions suggests `silly-turtlebot`; pretrained two-arm cube transfer suggests `act-aloha-cube-transfer`. These are candidates to inspect, not permission to ignore platform constraints or silently choose a paid model provider. For the assistant, explain the Gemini requirement and possible charges before live use. | User outcome | Candidate and canonical instructions | First visible proof | | --- | --- | --- | | Map, localize, and navigate with a simulated TurtleBot | [robot-navigation](https://github.com/robium-ai/robium-apps/tree/main/robot-navigation): existing House environment and dashboard | Create and save a map, load it for localization, then reach a navigation goal. | | Control a simulated TurtleBot with Gemini | [silly-turtlebot](https://github.com/robium-ai/robium-apps/tree/main/silly-turtlebot): fast TurtleBot3 simulation profile, not physical TurtleBot4 mode | An authorized live Gemini mission completes with camera updates; cancellation stops simulated motion. | | Run pretrained ACT bimanual cube transfer | [act-aloha-cube-transfer](https://github.com/robium-ai/robium-apps/tree/main/act-aloha-cube-transfer): pinned checkpoint and documented default scenario | Viewer renders, actual inference runs, and the default transfer outcome is observed and reported honestly. No training. | ## First-user constraints - Target simulation on Apple Silicon macOS or Linux x86_64 without requiring a dedicated GPU. Verify the selected app's actual compatibility before choosing its native or container path; do not extrapolate host support from a Docker image or macOS-only run. - Navigation and Gemini simulation require Docker/Compose. Check availability, resources, and port conflicts without stopping an unrelated running demo. - Gemini additionally needs authorized model access and may incur API charges. Guide the user to configure `GEMINI_API_KEY` locally without pasting it into chat. Do not require the maintainer's secret-store account. Missing or denied access must be explained before attempting a live mission. Mock checks are useful diagnostics only and must be identified as such. - ACT uses an existing pretrained checkpoint. Setup may download the model and dependencies. Keep randomized trials optional and distinguish successful bring-up from policy success across arbitrary layouts. - Do not present hosted warm-start estimates as local installation times. Record cold/warm timing only when actually measured, including cache state, platform, source revision, scenario, and result. Report untested paths openly. -
reuse-paths.md 3.7 KB
# From a working example to the user's app Use only the chosen path. This is not a checklist requiring all four paths or a reason to delay a first demo for a design document. ## Adapt an example - A request for a customized app authorizes a derivative, not changes to the shared reference checkout. Identify the source app and revision; preserve existing user work. Use the application's documented clone/copy workflow, a separate checkout, or a worktree as appropriate to its repository layout. A GitHub fork or push is optional and requires separate authorization. - Prove the unchanged baseline before behavioral edits. Keep its launcher, compatible dependency pins, assets, viewer, and smallest relevant test. Reuse an already verified baseline when its revision, environment, and relevant behavior still match; do not repeat expensive setup ceremonially. - Confirm or safely resolve the destination before copying. Never overwrite an existing project or drag secrets, virtual environments, build outputs, or large caches into a new repository. Preserve license and attribution; reference shared assets through the owning app's supported mechanism. - Make the smallest requested customization, then check only the affected behavior once the change is coherent; do not rerun the whole baseline after every edit. Low-risk visual acceptance may be handed to the user with exact steps and an explicit unverified status. Keep unrelated behavior at the reference defaults rather than asking speculative customization questions. Keep an unchanged reference for comparison. Defer repo restructuring, optional services, training, and deployment until the user needs them. ## Reuse selected pieces - Explain which concrete pieces fit and which do not: for example a bounded robot-control adapter, camera stream, simulator launcher, or viewer. Check interfaces, dependency coupling, platform evidence, and licensing before choosing extraction over a fresh implementation. - Do not run or clone every candidate application just to reuse one module. Inspect its owning docs and existing evidence; run a focused check when compatibility is uncertain, without automatically writing a per-piece suite. Do not inherit a paid model dependency or an entire ROS stack for an unrelated dashboard component. - Retain necessary configuration, pins, licenses, and source revision with the reused piece. Adapt only the boundary needed for the new app. A module that worked in its source app is not evidence that the new combination works. - Create the smallest runnable app connecting those pieces and check one end-to-end behavior, or explicitly hand off low-risk manual acceptance. This need not be an automated harness. Expand only after that result is visible; do not build a general-purpose framework or complete all the source apps' features. ## Start fresh - Briefly state why existing apps or pieces do not fit, unless the user already explicitly chose from scratch. Do not insist on running an unwanted example. - Select domain skills for the first visible behavior, not every future feature. Research only unresolved compatibility or design decisions that could block that behavior. Bring in heavy architecture research only for a real ambiguity. - Use [scaffold patterns](scaffold-patterns.md) as optional shapes, not required directory trees. One process or package may be enough. Keep any architecture brief short; do not make it a separate approval gate for an agreed build. - Define one observable success check, get it running, then offer the next small customization. Keep hardware, paid APIs, and cloud provisioning behind their existing authorization boundaries. -
scaffold-patterns.md 5.6 KB
# Scaffold patterns Optional repo shapes after selecting adaptation, partial reuse, or a fresh build. Do not scaffold for a try-only request or copy an entire app merely because one component fits. Follow the chosen [reuse path](reuse-paths.md), then prune anything the first working slice does not need. The `tests/` directories below are optional. Reuse existing checks; add automated coverage for meaningful risk or repeatable regressions, not to fill the tree. Keep tiny-demo decisions inline; applications with meaningful architecture choices can use a concise `docs/architecture-brief.md`. Learning capture belongs to Robium's sibling `learnings/` tree and hooks rather than an application-local ritual. 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 # concise decision record ├── docker/ │ ├── Dockerfile # selected ROS 2 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 (`navigation` 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 compatibility-checked ROS 2 base image and a compose file wiring 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 # concise decision record ├── pyproject.toml # uv-managed deps (environments skill) ├── uv.lock ├── src/ │ └── my_policy/ │ ├── configs/ # policy + training configs (ACT, Diffusion, SmolVLA…) │ ├── datasets/ # LeRobotDataset prep / loading glue (lerobot) │ ├── 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`: LeRobotDataset preparation, loading, transforms, and recording glue belong to `lerobot`; Hub authentication and transfers go through `huggingface`, and sourcing strategy through `data`. - `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. Add `docs/architecture-brief.md` only when the application has meaningful decisions worth retaining beyond an inline explanation. -
stack-selection.md 3.5 KB
# Stack selection Use these decisions only when the first application slice has not already made the stack obvious. Verify supported versions, operating systems, hardware, and package combinations in current official documentation before recording them. ## Start with the runtime shape - Choose ROS 2 when the first slice benefits from standard robot drivers, multi-node communication, TF, ecosystem packages, or mobile navigation. - Skip ROS 2 for a self-contained training or policy experiment that does not need robot middleware yet. It can be added at the hardware boundary later. - If processes or hosts need nontrivial boundaries beyond a normal ROS graph, let `integration` choose the communication shape after the application modules are clear. Official starting point: [ROS 2 documentation](https://docs.ros.org/). ## Choose a simulator for the evidence - Prefer Gazebo for ROS-centric mobile robotics, common sensor simulation, and machines without a supported NVIDIA GPU. - Prefer MuJoCo for lightweight contact-rich manipulation where a full ROS stack is unnecessary. - Consider Isaac Sim when photorealistic perception, synthetic data, or the NVIDIA ecosystem materially changes the first slice and the machine meets its current GPU, driver, memory, OS, and storage requirements. - Consider Isaac Lab when the actual goal is parallel reinforcement or imitation learning on top of Isaac Sim, not simply because a GPU is present. - If hardware availability is unknown, choose a viable lower-cost path and record the higher-cost simulator as a provisional alternative. Route final selection through `simulation`, then use `gazebo`, `mujoco`, or `isaac-sim`/`isaac-lab` for mechanics. Current sources: [Gazebo](https://gazebosim.org/docs/), [MuJoCo](https://mujoco.readthedocs.io/), and [Isaac Sim](https://docs.isaacsim.omniverse.nvidia.com/). ## Choose classical or learned behavior - Use Nav2 through `navigation` when the robot needs classical localization, planning, and control for mobile navigation. - Use `lerobot` for manipulation imitation learning, supported policies, data recording, training, and evaluation. - Use `isaac-lab` for GPU-parallel RL or IL only after the simulator and hardware constraints are proven. - Do not add a training framework to an application whose first behavior is fully served by conventional planning or control. Data sourcing belongs to `data`; Hub operations belong to `huggingface`. Current sources: [Nav2](https://docs.nav2.org/) and [LeRobot](https://github.com/huggingface/lerobot). ## Select versions last - Start from the compatibility matrix of the chosen upstream stack rather than selecting every component's newest release independently. - Prefer a supported release with available binaries for all first-slice dependencies. An LTS label alone does not prove that the full combination is packaged. - Verify the installed or containerized combination with the cheapest build and launch probe before treating it as an architecture decision. - Record the working versions as implementation evidence. Revisit them only when a dependency, security issue, or required capability forces the change. ## Record only real branches Keep small decisions inline; use `docs/architecture-brief.md` for choices that need a durable record. Include the direction, why it fits, and the cheapest falsifying probe. Mention alternatives only when they were genuine contenders. Keep unresolved hardware or compatibility questions provisional with an explicit fallback. -
workspace-updates.md 3.3 KB
# Editable workspace and updates Setup creates a user-chosen parent directory containing two ordinary Git checkouts: `robium/` (skills/plugin source) and `robium-apps/` (reference apps). The parent is not a Git repository. Do not assume its name or location. ## Find the existing source Run `npx robium-ai workspace --json` to obtain `root`, `repo`, and `apps`. Resolution is an explicit `--dir <workspace>`, an enclosing two-repository workspace, then the root remembered in `~/.config/robium/workspace.json`. `setup --dir <workspace>` selects and remembers a location; subsequent setup reuses the checkouts without pulling them. A missing or invalid saved location is a reason to ask where the user moved it, not to clone over it or guess. Use `<apps>/REGISTRY.md` and the owning app's README for reference selection. `npx robium-ai app list --json` discovers the local apps from outside the workspace too. An explicit `app --dir` targets the apps repository itself; setup/update `--dir` targets its parent. Honor an explicitly selected app checkout or `ROBIUM_APPS_DIR` instead of silently using another workspace. ## Check quietly; update intentionally Before starting a new reference example, optionally run `npx robium-ai update --check --quiet`. Do not do this on every prompt, during a running experiment, or as a prerequisite to unrelated maintenance. The CLI limits these network checks to once per 24 hours per workspace, stays silent when current/offline, and offers one combined notice no more than weekly and never repeats the same known revisions. `ROBIUM_UPDATE_CHECKS=0` disables quiet checks. There is no background daemon or required scheduling. If the check prints nothing, continue without mentioning it. If it reports an update, give at most one short non-blocking note at a natural stopping point; do not pause the task or repeatedly ask. Follow a user's preference not to hear about updates. A newer commit alone is not evidence of a relevant fix or a security issue. Do not check unrelated third-party skill repositories. When asked whether Robium is current, use `npx robium-ai update --check --json` for a fresh comparison with both official `main` branches. Report `unknown` honestly on network/repository errors. A check fetches a comparison ref; it does not modify working files, the current branch, or dependencies. When the user asks to update, run `npx robium-ai update`. Only clean `main` branches with no local-only commits are fast-forwarded from official Robium upstream, even if `origin` is the user's fork. Personal branches, dirty files, detached HEADs, and divergent history are left alone with a reason. Do not stash, reset, switch branches, rebase, or merge a personal branch without separate direction. A partial update is not success for both repos. Users can also fetch/pull manually after reviewing branch and remote state. After a manual source update or personal edit, `npx robium-ai setup` reconnects host integrations without pulling the repos. Follow its host-specific restart instructions. Cached plugin activation is distinct from Git freshness; do not claim an agent has loaded edited skills based only on an unchanged version number. Never edit the installed cache as the user's source of truth. Develop on a branch in either checkout, test there, and optionally fork and open a PR later. Contribution is opt-in; never push local work automatically.
-
-
evals.yaml 1.9 KB
triggers: positive: - phrase: Help me map a simulated environment, localize a mobile robot, and navigate to a goal. - phrase: Help me build a simulated robot assistant that understands what it sees and follows natural-language instructions. - phrase: Help me run a pretrained policy that transfers a cube between two simulated robot arms. - phrase: Help me map a simulated environment with a TurtleBot, localize on the saved map, and navigate to a goal. - phrase: Help me control a simulated TurtleBot with Gemini using natural-language instructions. - phrase: Help me run a pretrained ACT policy that transfers a cube between two simulated robot arms. - phrase: I want to start a robotics project but this machine cannot run the closest example. Help me choose a compatible first slice. - phrase: we'll create a new TurtleBot3 application that does not exist yet. Before any live-demo or publishing work, help brainstorm the architecture, choose the stack, and plan the cheapest navigation-only first slice; teleoperation, camera transfer, and mapping come later. source: learnings/2026-08-02.md - phrase: we are changing this arm application from scripted control to a VLA and need to rethink the architecture negative: - phrase: In our existing robot-navigation app, Nav2 plans a path but the robot never receives velocity commands. Diagnose it. expect: navigation - phrase: Our existing Gemini robot assistant stalls after a navigate function call. Fix the tool response handling. expect: gemini-robotics - phrase: Inspect the processor files in our existing LeRobot checkpoint before evaluating it. expect: lerobot - phrase: fix the existing gateway CORS allowlist for our production frontend expect: integration - phrase: diagnose why this existing ROS 2 node misses messages expect: ros2 tasks: [] -
SKILL.md 7.3 KB
--- name: architect description: Start robotics apps or demos from compatible examples for mapping/navigation, robot assistants, or pretrained manipulation. Choose a stack if none fits; not existing-app maintenance. --- # Architect Reach a visible robot result with the least new work, then customize. Inspect existing examples before researching or designing a new stack. Without an established app, an outcome-only request such as mapping a simulated environment or running a pretrained policy is a first-run request even without "new project", a robot brand, or "architect" in the prompt. Use this skill inline, not the optional heavy-research architect subagent. If a domain skill brought you here, select the baseline once and return to that skill for its mechanics; do not loop through architecture again for the same task. ## Start from the outcome - Inspect the current repository, the Robium app registry, and the closest working example before asking questions. Start with candidate READMEs, manifests, and launchers; exclude generated environments, caches, and model assets from discovery scans. - Define what the robot should visibly do, where it will run, and what evidence would make the first slice credible. - Honor the user's stated target platform and restrictions even when the agent runs on a different host. Ask about a compatible alternative, not for them to restate constraints they already gave. ## Offer the shortest useful starting path After a quick registry and candidate check, surface these paths briefly, mark the recommendation, and explain what would run first. Do this before broad research, architecture documents, cloning, or lengthy setup. Do not turn the four paths into a mandatory questionnaire: when intent is clear, explain and proceed within it; ask one short question only for a consequential choice. | Path | When it fits | First step | | --- | --- | --- | | Try an example | Close compatible match; user wants to see it work | Run it unchanged in the existing checkout; no new project. | | Adapt an example | Close match; user wants their own customized app | Verify the baseline, then make a separate derivative and change one behavior. | | Reuse selected pieces | Partial overlap; useful components fit the new app | Reuse the smallest compatible pieces and prove one integrated behavior. | | Start fresh | No useful compatible overlap, or explicitly requested | Use the domain skills to scaffold only the smallest visible slice. | For "just try it", default to the compatible example with the fewest new moving parts, not the most ambitious stack. Describe prerequisites and first-run work, not unmeasured speed promises. Read [reuse paths](references/reuse-paths.md) only for adaptation, component reuse, or a fresh scaffold. ## Inspect candidates and prove the selected slice - Resolve the user's workspace with `npx robium-ai workspace --json`; its `repo` and `apps` paths are authoritative, not a hardcoded `~/robium` or the installed plugin cache. For workspace discovery and an occasional quiet freshness check before a new example, read [workspace updates](references/workspace-updates.md). Checking is not updating. - Discover candidates in the [Robium app registry](https://github.com/robium-ai/robium-apps/blob/main/REGISTRY.md), using a sibling checkout when available. Match the task, host architecture, runtime requirements, and relevant verification evidence, not just the name or a `stable` label. Read the selected app's README and launcher; distinguish tested conditions from assumptions. For the homepage's three first-run tasks, use [first-run examples](references/first-run-examples.md). - For a clear compatible match, explain the choice and proceed within the user's request: "This matches Robium's navigation example. I'll get it running first, then we can adapt it." Ask only when different candidates or an incompatible platform materially change the outcome. Honor an explicit request to build from scratch. Routine maintenance stays in the owning skill. - Use the existing checkout without resetting or pulling over user changes; acquire a separate checkout when necessary. Record the source revision and any local changes. For whole-app reuse, run the baseline with its launcher, pinned environment, assets, and viewer; do not create a derivative, upgrade dependencies, or recreate infrastructure just to demonstrate it. - Check prerequisites, credentials, and occupied ports before lengthy builds. Explain first-run downloads and reuse caches on later starts. Missing model access is a blocker, not permission to substitute a mock and call it live. Keep secrets out of prompts/logs; explain API charges and obtain authorization before paid calls. Do not provision cloud resources or move physical hardware as an implicit part of onboarding. - Check the requested behavior at a meaningful milestone, not after each edit. Use the app's smallest relevant check, not a new suite or repeated UI tours. A low-risk visual check may be handed to the user with exact steps and an explicit unverified status; an open port is not proof the demo works. Stop only processes started for this run. If blocked, report the exact unmet prerequisite without inventing a new stack. Before a port, dependency overhaul, or prolonged troubleshooting, surface the blocker and a simpler compatible path; let the user choose the tradeoff. For try-only requests, offer one small customization after it works. For requested customization, proceed with the agreed change and keep the baseline. ## Choose only the stack the slice needs - When environment setup is needed, use `environments` early. - For ROS-based mobile navigation, route through `ros2`, `navigation`, `simulation`, and the selected simulator and visualizer. - For learned manipulation, route through `lerobot`, `data`, and `huggingface`; add a simulator only when the first slice needs one. - Use `integration` when module boundaries or cross-process communication are themselves a design decision. - Use `testing` when risk, uncertainty, or requested test work needs a verification decision; do not automatically author tests. Use `test-assets` for needed fixtures. - Route provider mechanics to `cloud-run` or `runpod` only after deployment is part of the approved slice. A public session layer belongs to `live-demo`; publishing a finished app belongs to `app-publishing`. When the stack is genuinely undecided, read [stack-selection.md](references/stack-selection.md). Keep upstream project documentation as the source of truth for supported versions and hardware. ## Keep the decision record light - Keep decisions inline for tryouts and tiny demos. Use `docs/architecture-brief.md` when a new app or re-architecture benefits from a durable record, never as a gate before an agreed first visible result. - Record the outcome, chosen direction, provisional assumptions, risks, next probe, and allowed pivots. It is a living decision record, not a contract. - Read [brief-template.md](references/brief-template.md) only when creating or revising that record. The [filled example](examples/architecture-brief-example.md) is illustrative, not a source of current compatibility facts. - If no close app exists, read [scaffold-patterns.md](references/scaffold-patterns.md) and prune the starting shape to the first slice.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.