Agent skill

Authoring Vessel Controllers

by LunCoSim in LunCoSim/lunco-sim

Author vehicle controllers in LunCoSim so spacecraft, landers, rovers, and drones can move, fly, drive, land, or accept pilot control.

Apache-2.0Auto-check passedDevelopment

Install Authoring Vessel Controllers

skills CLI
$ npx skills add LunCoSim/lunco-sim --skill authoring-vessel-controllers -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install LunCoSim/lunco-sim authoring-vessel-controllers --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/authoring-vessel-controllers .claude/skills/authoring-vessel-controllers && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
authoring-vessel-controllers
GitHub stars
107
Token cost
~5.8k tokens
SKILL.md length
2,862 words
Files
1
Skills in repo
40
Repo updated
First seen
Licence
Apache-2.0

At a glance

Author vehicle controllers in LunCoSim so spacecraft, landers, rovers, and drones can move, fly, drive, land, or accept pilot control.

  • Works in 4 steps: The control law → a Modelica model → High-level logic → rhai, event-driven → Sensors → USD library primitives, wired → …
  • Debugging autopilot
  • SKILL.md covers Start with the closest…, 1. The control law → a…, 2. High-level logic → rhai,… and 3. Sensors → USD library…, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Authoring Vessel Controllers is an agent skill from LunCoSim/lunco-sim. Author vehicle controllers in LunCoSim so spacecraft, landers, rovers, and drones can move, fly, drive, land, or accept pilot control. Use when adding or debugging autopilot, GNC, guidance, waypoint following, thruster response, manual takeover, a Modelica control model, a controller program prim, or the wired piloted authority signal. This skill assigns control math to Modelica, sequencing and events to Rhai, and structure, sensors, wiring, and authority to USD. It covers the unwired-input failure mode…

Its SKILL.md is about 5.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development. The repository describes itself as: Collaborative Multiphysics Cosimulator For Space Missions 🌎🚀🌚. The licence is Apache-2.0.

When your agent uses it

  • Debugging autopilot
  • Waypoint following
  • Thruster response
  • Manual takeover

Example prompts

  • “/authoring-vessel-controllers”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. The control law → a Modelica model
  2. High-level logic → rhai, event-driven
  3. Sensors → USD library primitives, wired
  4. User possession → the piloted signal + ControlLink

What it can do on your machine

Read from SKILL.md and the folder at commit 43f1301. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are usda, modelica and rhai).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Authoring Vessel Controllers loads about 5.8k tokens when it runs. Until then it costs about 178 tokens; SKILL.md has 2,862 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~178
When it runs · the whole SKILL.md, loaded when a task matches
~5.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from LunCoSim/lunco-sim at commit 43f1301, republished under its Apache-2.0 licence (© LunCoSim). 2,862 words, ~5,781 tokens.

Download SKILL.mdSave it as .claude/skills/authoring-vessel-controllers/SKILL.md (or your agent's skills folder).
name
authoring-vessel-controllers
description
Author vehicle controllers in LunCoSim so spacecraft, landers, rovers, and drones can move, fly, drive, land, or accept pilot control. Use when adding or debugging autopilot, GNC, guidance, waypoint following, thruster response, manual takeover, a Modelica control model, a controller program prim, or the wired `piloted` authority signal. This skill assigns control math to Modelica, sequencing and events to Rhai, and structure, sensors, wiring, and authority to USD. It covers the unwired-input failure mode, PortRegistry input ownership, sensor-based feedback, and reuse of the closest production exemplar. The shipped lander is an example, not the universal production contract.

Authoring vessel controllers

Read luncosim-architecture before adding a sensor, actuator, generated network, or custom USD field. This skill owns the vessel-controller recipe; the architecture skill owns the standard-schema and no-compatibility gate.

A vessel that drives itself (a GNC, an autopilot) is built from three layers, each in the language that fits it. Never blur them.

LayerLanguageOwnsRule
Control LAWModelica (.mo)the math: PID, schedules, mixing, τ=I·αALL control math lives here. Never compute a control law in rhai.
Logic / sequencingrhai (.rhai)phases, events, mission steps, reactionsEVENT-DRIVEN only. No per-tick control loops, no time-stepping.
Structure / wiring / authorityUSD (.usda)sensors, wires, possession, identityDeclarative. Sensors are referenced library prims; a wire is a native USD connection.

The shipped lander is one reference implementation: assets/models/Lander.mo, assets/scenarios/lander_subsystems.rhai, assets/vessels/landers/descent_lander.usda (referenced by assets/scenes/luncosim/lander_ops.usda). For another vehicle, select the closest production controller, vehicle asset, composing scene, and test before authoring a new one. A tutorial model can clarify the idea while still being too simplified to serve as the production contract.

Start with the closest production exemplar

Before writing a new controller:

  1. Search assets/models/, assets/vessels/, assets/components/, assets/scenes/, and assets/scenarios/ for an existing controller and its consumer.
  2. Read the model's declared inputs/outputs, the USD wires, and the scene test that observes the behavior.
  3. Reuse the same authority, sensor, frame, and actuation boundaries. Override vehicle facts in USD and controller tuning through the established input or parameter contract.
  4. Add a new .mo only when the existing equation or public interface is genuinely insufficient; do not fork a working controller for naming alone.

This is a discovery rule, not a requirement to reuse one particular vehicle.

For a new controller assembly, use the generic Rhai authoring checkpoint before debugging the equations: model_context reads the exact program/body tree, readiness_report checks the caller's topology, physicality, mount, connection, control, and runtime policy, and port_graph/wiring_plan validates the standard USD endpoint paths and types. Keep the controller's continuous law in Modelica and the phase/mission policy in Rhai; these facades only inspect and return dry typed USD plans. See the model-authoring guide.

When propellant changes a hull's mass properties, connect the Modelica mass, body-local COM, and diagonal inertia outputs to the physical Avian inputs:mass, inputs:com_x/y/z, and inputs:inertia_xx/yy/zz through the document API. Controller inputs such as controller_inertia_xx/yy/zz consume separate wires; those inputs do not update the physical body. The live physical endpoint retains native f64 solver values through collider recomputation. Scalar inertia updates require an axis-aligned tensor and reject nonzero cross terms before commit; they cannot represent a coupled tensor update. Keep articulated appendages as their own bodies: the joint-island mass outputs are complete translational mass, not an assumed rigid assembly inertia. Verify live burn mass, COM, and inertia against QueryPhysicsState in the owning authored Rhai scene test. See the lander mass-property contract.

1. The control law → a Modelica model

The model reads what the vessel senses and outputs force/torque. It is a PROGRAM, and a program is a prim: the vessel's own flight-control system is inseparable from the airframe, so the vessel prim applies LunCoProgramAPI and names the model in place — uniform asset info:sourceAsset = @models/MyController.mo@. Its inputs: ARE the vessel's control surface. A control law that is bolted on (a guidance component, a supervisory script) is a a Scope applying LunCoProgramAPI CHILD prim instead, so deleting the prim removes the behaviour. Ports are wired with native USD connections (§3).

Because it drives a force on a body the client predicts, it must promise it steps fast enough for that: uniform bool lunco:program:realtimeSafe = true. Without the promise the wiring pass refuses it a force_*/torque_* port and says why.

modelica
model MyController
  input Real altitude, descent_rate;      // SENSED (wired from sensors, see §3)
  input Real piloted = 0.0;               // authority gate (wired, see §4)
  input Real external_throttle = 0.0;     // the pilot's stick (when piloted)
  output Real force_y, throttle;
  Real gnc_throttle, cmd;
equation
  gnc_throttle = <your control law>;                 // math, DIRECT (no lag)
  cmd = piloted*external_throttle + (1.0-piloted)*gnc_throttle;  // yield-to-pilot gate
  force_y = cmd * max_thrust;
end MyController;

Gotchas that will waste hours if you don't know them:

  • rumoca folds unwired, algebraic-only inputs to their default. An input Real x used only in algebraic equations, never wired and never written, is constant-folded → runtime writes to it never reach the solver. To keep an input LIVE, either wire it (see §3/§4) or route it through a der (der(x_live)=(x-x_live)/0.02; use x_live). Symptom: set() returns true but has no effect.
  • Inputs that feed a der are always live (a state depends on them) — that's why external_throttle/pitch are spool-filtered (der(filter)=(cmd-filter)/tau): it both gives pilot feel AND keeps them live.
  • Keep the control (GNC) path DIRECT — no spool. A lag on the autonomous path makes it sluggish and can tumble the vehicle. Spool only the pilot's stick.
  • rumoca mis-lowers if on algebraic vars. Use min/max for clamps and a branch-free arithmetic blend (a*x+(1-a)*y) for selection, never a nested if.

For a rover route, the drivetrain and any continuous control law remain the actuator-side Modelica/USD contract. Both skid RoverDrivetrain and wheel-steered RoverAckermannDrivetrain consume parameters:forward_yaw_offset on the drivetrain prim to align guidance with the wheel travel frame. Navigation uses −Z forward by default; a body-local +X wheel heading requires −π/2. Derive the travel direction from the authored steering axis crossed with the wheel axle, and keep that frame parameter when switching drive laws. Verify waypoint arrival in the authored production route test with its actual axle frame. A scene-level Rhai route program reads the route's composed point prims, waits for generic sensor enter events, and publishes current named-port guidance through the shared bridge. The route is not stored on the rover. User possession controls the local ControlLink, HUD, and manual-input session; possession alone does not stop an enabled route program. The shared controller requests ClaimControl when the operator first presses a bound intent on a target owned by another session. The existing control.authority.take Rhai policy decides whether that handoff is allowed. After the claim, the target-scoped semantic edge reaches the route policy and the held port command is applied.

Route editing resolves composed LunCoProgramAPI and inputs:subject bindings, including when the pointer context has no selected or possessed subject. Identity and hierarchy queries explicitly request attrs: []; omitted attrs reads every authored attribute. Discover programs through bounded, branch-local QueryUsdPrims batches: Rhai limits aggregate string bytes in nested values, so a whole CAD hierarchy level can exceed the limit even without attributes. Verify both a unique unpossessed route and ambiguity rejection, and exercise the active scene_interaction hook through native window input for UI acceptance.

2. High-level logic → rhai, event-driven

A a Scope applying LunCoProgramAPI child prim on the vessel, naming a .rhai scenario (uniform asset info:sourceAsset = @scenarios/my_supervisor.rhai@), does supervision and sequencing — never a control loop. React to events; don't poll or step.

rhai
fn on_event(me, evt, ctx) {
    if evt.name == "lander_touchdown" { /* advance the mission */ }
    if evt.name == "low_fuel" { notify_kind("Low fuel", "warn"); }
}
  • Phase timing comes from the mission sequencer (wait, wait_for, wait_until) or from Modelica condition outputs connected to LunCoEvent prims, not dt counting: def LunCoEvent "LowFuel" { float inputs:trigger.connect = </Lander.outputs:low_fuel>; uniform token lunco:event:name = "lander_low_fuel"; uniform token lunco:event:severity = "warning" }.
  • Do not write the vessel's command ports every tick from rhai. If you're tempted to, the logic belongs in the model (math) or the wiring (authority).

3. Sensors → USD library primitives, wired

The controller reads SENSORS, not the god-view body. Sensors are reusable prims in assets/vessels/sensors/ (imu.usda, altimeter.usda), referenced + mounted:

usda
def "Altimeter" (prepend references = @../../vessels/sensors/altimeter.usda@</Altimeter>)
{ double3 xformOp:translate = (0, -3.3, 0); uniform token[] xformOpOrder = ["xformOp:translate"] }

A wire is a native USD connection, authored on the prim that CONSUMES the value — float inputs:descent_rate.connect = </Lander.outputs:velocity_y>, float inputs:altitude.connect = </Lander/Altimeter.outputs:range>. Wired inputs are live (they reach the solver). Physical constants a model needs (mass, inertia) come from the body's own ports (inputs:vehicle_mass.connect = </Lander.outputs:mass>, inputs:inertia_xx.connect = …) — USD-derived, not magic numbers.

A Modelica parameter is authored as a typed USD constant and is placed in the compile-time parameter set by contract classification. A runtime Modelica input is a live signal and needs a native USD connection or an explicit runtime writer; do not infer its kind from the USD spelling alone.

Rust publishes only generic built-in observations. The sensor asset and USD connections identify placement and topology; Modelica performs filtering, frame conversion, navigation, and control. Do not add a semantic sensor registry, a world-coordinate force special case, or a fallback port when the parsed Modelica contract does not match the authored scene.

This is the key pattern. Do not build a bespoke gate.

  • The GNC is INTERNAL (part of the model). A local or remote user is an external session that may possess the vessel; SessionRegistry and RBAC (may_take_control) arbitrate those user sessions. An authored mission or route program is scenario policy, not a possession session.
  • The internal controller yields to whoever possesses via the piloted port: a read-only cosim port (PILOTED_BACKEND, lunco-cosim/src/ports.rs) that is 1.0 when any session owns the vessel (SessionRegistry::owner_of(...).is_some()), else 0.
  • Wire it (float inputs:piloted.connect = </Lander.outputs:piloted>) into the model as the manual-input authority signal. Gate the pilot stick with it, then combine manual input with authored program/autopilot inputs through the model's explicit authority signals. Do not let a possession change replace or zero an active program's enable, target, or speed inputs. Possession owns the manual input claim; authored model policy owns the command mux.
  • When a bound local control intent arrives while another session owns the target, the shared controller requests the existing generic ClaimControl transition. The authored control.authority.take policy decides whether the local session can take the endpoint; Rust does not special-case an autopilot role.
  • The pilot's stick reaches external_throttle/pitch/… through the vessel's intent→port Controls scope (next section) when they possess. Camera-follow without taking control: follow(entity) (inserts a chase camera, no ControlLink).

Scene replacement clears possession claims for outgoing USD prims at the shared SceneTeardown boundary. Because claims use stable GlobalEntityId values, a replacement projection may reuse an id without inheriting the previous scene's driver; persistent non-scene ids are not cleared by that sweep.

AcquireControl and ReleaseControlSource are the single owner of the possession transaction: they validate the endpoint and local binding before changing SessionRegistry or ControlLink. A handoff releases prior claims for that session (except the selected target). Releasing possession removes the local control/camera binding and updates the manual-input authority; it does not write endpoint ports or stop an authored autopilot. Wire-applied commands update host authority only and never bind a remote session to the local camera. Explicit endpoint lifecycle stops remain separate from possession release.

Show full SKILL.md (1,224 more words)Show less
Guidance policy is separate from user possession

A route or mission program publishes authored guidance through the vessel's generic named-port surface and the model's existing guidance/actuation contract. It does not call AcquireControl or claim a user session. Releasing possession leaves the program's input ports and enable state intact. The generic route_follow policy stops guidance on a pressed or pulsed non-Action intent.edge from its currently possessed subject; input from the free avatar or another unpossessed surface cannot stop it. Action remains the route toggle. Other authored autopilots should consume the same semantic edge contract to yield. When a mission also drives that subject, retire its driving branch on the operator route's route_started and route_stopped events. Subscribe to the running script host (usd_path(me) at the emitter), which can be the parent scope of the LunCoProgramAPI source prim. Retiring a mission must preserve a newly started operator program's guidance writes. Test the HUD handoff while mission guidance is active immediately after deployment, then verify it remains stopped across subsequent ticks and a scene reload.

An attended deployment may explicitly hand the local operator to the new vehicle with AcquireControl { bind_camera: true }. A host-authority claim with bind_camera: false does not move local keyboard input to that vehicle. Keep this discrete operator handoff separate from publishing guidance. Do not set Position, LinearVelocity, ModelicaModel.inputs, or a private actuator component to make a scenario move; those bypass the authored input and model contracts.

What makes an entity active — the intent→port Controls scope

A vessel is possessable + drivable when it carries two things:

  1. An actuation surface — the command ports a pilot or AI writes. A rover gets throttle/steer/brake from its composed USD/model network (the projection stamps a separate MobilityRoot and OutputPorts); a cosim vessel gets its .mo inputs (external_throttle, pitch, …). This surface is topology-derived; you don't hand-write it.
  2. A Controls scope — the intent→port map (stage 2 of control), read into a lunco_control_core::ControlBinding. Without it a vessel can be possessed but keyboard input does nothing — drive_from_bindings skips a bindingless vessel. (API / set_input / rhai can still drive it by port name — that path needs only the surface.)

For desktop manual control, the workbench owns the UI-to-simulation focus boundary. A press resolved to the main 3D scene surrenders retained egui TextEdit focus before it publishes EguiFocus, so a possessed vessel can receive the shared input map after a perspective switch. Active text fields continue to capture keyboard input until that explicit scene press. The controller must consume this published focus state; it must not read raw keys again, clear focus itself, or add a vehicle-specific input path.

The local Embodiment is a separate domain role. It also has an InputPorts surface and binding, but those ports are its free-flight embodiment and are not a vessel possession target. Click resolution and AcquireControl enforce this boundary by accepting a non-Embodiment input surface; SceneCamera is presentation metadata and does not participate in possession.

Author the scope as a child references arc to the shared profile — the SAME arc kind the wheels use, so it composes through a spawn/reference. Root subLayers and inherits do not provide the required spawned control profile.

usda
# on the vessel prim — a rover:
def "Controls" (
    prepend references = @../control_profiles.usda@</RoverControls>   # lander: </LanderControls>
)
{
}
  • Profiles live in assets/vessels/control_profiles.usda: RoverControls (forward/back→throttle, left/right→steer, brake→brake) and LanderControls (forward/back→body pitch, left/right→body roll, yaw_left/right→body yaw, thrust→external_throttle, release→release). The lander profile selects a stable orbit camera: camera orientation never remaps these body axes. W/S/A/D/Q/E and G are only the bundled input_bindings labels; help must resolve the current settings rather than hardcoding those keys. In the bundled lander mission, G writes the authored release input; the scene Rhai program edge-detects it after touchdown and calls generic DetachJoint for the authored dock. Keep that delivery policy in Rhai, not in a vehicle-specific Rust port backend. The path is relative to the vessel file (@../../control_profiles.usda@ one dir deeper, @../../vessels/control_profiles.usda@ from a scene).
  • Override one intent by redefining that child locally over the reference: def "Controls" (references=…) { def "action" { uniform string lunco:port = "handbrake" } }.
  • A new control scheme = new intents in the referenced profile (or authored inline) — data, not Rust. The key→intent half is the shared leafwing UserIntent map, so a saved keymap rebinds every vessel; you only choose what each intent actuates here.
  • The default P binding is the shared pause intent. The avatar hotkey toggles SetTimeTransport from that intent; it is not a vehicle port or a raw-key controller special case.
  • Make an entity drivable at RUNTIME: author the Controls child (and give it an actuation surface) via the USD-op API on the new prim — it composes immediately and the possessing avatar can drive it. No Rust, no restart. This is how you "build a new entity and teach the avatar to control it."

For discrete controls, use intent_pulse(target, "release") or intent_edge(target, intent, edge) from the control prelude. The runtime publishes one target-scoped intent.edge event for pressed, released, or pulse; consume it in the authored Rhai supervisor and let that policy drive the appropriate Modelica/port behavior. Do not emulate a pulse with two ordered held commands, and do not add a vehicle-specific Rust action path.

The helper returns the edge command id. Use it with query("CausalTrace", #{target: target, correlation_id: edge.id}) to inspect the current authored binding, selected public port owner, connection/native joint admission, measured channels, and the edge's classified producer origin. Rhai-origin records include the owner cycle, generation, logical sequence, and the stable actor id when issued by a Twin scenario. Twin scenario helper calls omit producer_id; actorless application Rhai and API/direct typed callers supply a stable nonzero ID. External discrete edges include their committed scene generation, effective tick, and per-tick sequence; deterministic Rhai simulation edges have no external admission stamp. This is a diagnostic snapshot; an empty or pending stage means the path is incomplete. The bounded trace is not a session replay log.

The recipe (checklist)

  1. Complete the exemplar audit above and identify the actual controller, vehicle, scene, and test owner before creating files.
  2. Write or reuse the control law as a .mo model: sensed inputs → force/torque; min/max clamps; DIRECT control path; a piloted gate. Der-feed any tunable gain you want Inspector-editable at sim-rate.
  3. Reference the sensors it needs from assets/vessels/sensors/ and mount them.
  4. On the vessel prim: apply LunCoProgramAPI, name the model (uniform asset info:sourceAsset = @models/MyController.mo@), promise uniform bool lunco:program:realtimeSafe = true, author the connections (sensor + body ports → model inputs:, incl. inputs:piloted, and model force/torque → the body), and add a Controls child that references a profile (</LanderControls>) so the pilot's intents reach the stick ports.
  5. Add a Scope applying LunCoProgramAPI child prim naming a .rhai supervisor for events/sequencing (no control loop), with connected LunCoEvent children for model conditions.
  6. Verify: unpossessed → the GNC flies it; possess → the pilot drives (gate flips via piloted); release → GNC resumes. Tune live via the Inspector or set().

Anti-patterns

  • ❌ Control math in rhai — belongs in Modelica.
  • ❌ Per-tick rhai routing / an unconditional self-wire — clobbers the pilot; use the piloted gate instead.
  • ❌ An in-model manual flag toggled at runtime — folds unless der-fed; and it's per-model. piloted is the general, wired, first-class signal.
  • ❌ Reading the god-view body pose — read sensors (altimeter, IMU) so it's a real GNC.
  • ❌ Magic constants (torque, mass) — wire them from the body's ports (inertia, mass).
  • ❌ Starting a new controller from a mission report or tutorial snippet without reading the closest shipped production exemplar and its runtime test.
  • ❌ Forking a production controller only to rename the vehicle — keep reusable equations and put vehicle-specific facts in USD-authorized parameters.

© LunCoSim, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/authoring-vessel-controllers of LunCoSim/lunco-sim.

Open the folder on GitHubat commit 43f1301

Compare with similar skills

Authoring Vessel Controllers next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Authoring Vessel Controllers compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Authoring Vessel Controllers this skillLunCoSim/lunco-sim107—~5.8kAutomated safety check: PassApache-2.0
Vercel Composition Patternssupabase/supabase111k58 repos~726Automated safety check: PassMIT
Finishing a Development Branchobra/superpowers297k5 repos~1.9kAutomated safety check: PassMIT
Typescript Advanced Typesrolling-scopes/rsschool-app10k25 repos~4.2kAutomated safety check: PassMPL-2.0
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Code Review ChecklistshareAI-lab/learn-claude-code78k4 repos~1.1kAutomated safety check: PassMIT

Similar skills

  • Official

    React composition patterns that scale. An agent skill from supabase/supabase.

    111k GitHub starsUsed in 58 repos~726 tokens
    DevelopmentAuto-check passed
  • Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.

    297k GitHub starsUsed in 5 repos~1.9k tokens
    DevelopmentAuto-check passed
  • Typescript Advanced Types

    rolling-scopes/rsschool-app

    Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.

    10k GitHub starsUsed in 25 repos~4.2k tokens
    DevelopmentAuto-check passed
  • PR Babysitter

    openinterpreter/openinterpreter

    Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.

    69k GitHub starsUsed in 3 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Code Review Checklist

    shareAI-lab/learn-claude-code

    Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.

    78k GitHub starsUsed in 4 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Greploop

    onyx-dot-app/onyx

    Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.

    32k GitHub starsUsed in 4 repos~3.3k tokens
    DevelopmentAuto-check passed

More from LunCoSim/lunco-sim

All 40 skills in this repo
  • Nightly Changelog

    LunCoSim/lunco-sim

    Generate concise LunCoSim nightly GitHub release notes with platform downloads, installation guidance, an AI-agent mission prompt, and a changelog link.

    107 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Build or repair a reusable scene component through a live LunCoSim Editor session.

    107 GitHub stars~4.4k tokensUpdated today
    Auto-check passed
  • Assembly Quality

    LunCoSim/lunco-sim

    Build or review a componentized LunCoSim USD assembly with a realistic, dimensionally checkable presentation.

    107 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Author Rhai Tests

    LunCoSim/lunco-sim

    Author and review LunCoSim behavioral, asset-backed, component, mission, visual, and requirements-verification tests.

    107 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Author Rhai Tool

    LunCoSim/lunco-sim

    Create, extend, register, or debug a reusable LunCoSim Rhai tool library for live USD authoring, component linting, inspection, or test support.

    107 GitHub stars~5.2k tokensUpdated today
    Auto-check passed
  • Author Tutorial

    LunCoSim/lunco-sim

    Author an interactive tutorial, guided lesson, onboarding flow, coach-mark tour, or objectives checklist in LunCoSim.

    107 GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Categories

Questions about Authoring Vessel Controllers

What does Authoring Vessel Controllers do?

Author vehicle controllers in LunCoSim so spacecraft, landers, rovers, and drones can move, fly, drive, land, or accept pilot control. Authoring Vessel Controllers is an agent skill from LunCoSim/lunco-sim. Author vehicle controllers in LunCoSim so spacecraft, landers, rovers, and drones can move, fly, drive, land, or accept pilot control.

When should I use Authoring Vessel Controllers?

Authoring Vessel Controllers fits situations like: debugging autopilot; waypoint following; thruster response; manual takeover.

How do I install Authoring Vessel Controllers in Claude Code?

Run `npx skills add LunCoSim/lunco-sim --skill authoring-vessel-controllers -a claude-code`. Or copy the skill folder (skills/authoring-vessel-controllers in LunCoSim/lunco-sim) into .claude/skills/authoring-vessel-controllers in your project. Claude Code loads it when a task matches its description.

How do I install Authoring Vessel Controllers in Codex?

Run `npx skills add LunCoSim/lunco-sim --skill authoring-vessel-controllers -a codex`. Or copy the skill folder (skills/authoring-vessel-controllers in LunCoSim/lunco-sim) into .agents/skills/authoring-vessel-controllers in your project. Codex loads it when a task matches its description.

Can I use Authoring Vessel Controllers in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LunCoSim/lunco-sim --skill authoring-vessel-controllers -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/authoring-vessel-controllers, .gemini/skills/authoring-vessel-controllers, .github/skills/authoring-vessel-controllers and .opencode/skills/authoring-vessel-controllers in your project.

What does Authoring Vessel Controllers need to run?

SKILL.md names no scripts, command-line tools or credentials: Authoring Vessel Controllers is instructions for the agent only.

Does Authoring Vessel Controllers access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Authoring Vessel Controllers safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Authoring Vessel Controllers use?

Authoring Vessel Controllers is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Authoring Vessel Controllers use?

About 5.8k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Authoring Vessel Controllers?

Skills that share tags, products or a category with Authoring Vessel Controllers: Vercel Composition Patterns (supabase/supabase, 111k stars), Finishing a Development Branch (obra/superpowers, 297k stars), Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Authoring Vessel Controllers?

LunCoSim (a GitHub organization) maintains it in LunCoSim/lunco-sim, which has 107 GitHub stars. The repository holds 40 skills in this directory. The repository was last updated on October 10, 2026.

Source: LunCoSim/lunco-sim on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.