Agent skill

Equipment

by Touch-N-Stars in Touch-N-Stars/Touch-N-Stars

Work on equipment devices — INDI driver selection, device lists, connect/disconnect, and the NINA profile values behind them (camera, mount, focuser, filter wheel, rotator, switch, weather, flat…

GPL-3.0Auto-check passed

Install Equipment

skills CLI
$ npx skills add Touch-N-Stars/Touch-N-Stars --skill equipment -a claude-code

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

GitHub CLI
$ gh skill install Touch-N-Stars/Touch-N-Stars equipment --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/Touch-N-Stars/Touch-N-Stars.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/equipment .claude/skills/equipment && 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
equipment
GitHub stars
124
Token cost
~1.5k tokens
SKILL.md length
661 words
Files
1
Skills in repo
7
Repo updated
First seen
Licence
GPL-3.0

At a glance

Work on equipment devices — INDI driver selection, device lists, connect/disconnect, and the NINA profile values behind them (camera, mount, focuser, filter wheel, rotator, switch, weather, flat…

  • Works in 5 steps: If a switch exists, connect it first and… → reloadOfflineIndiDrivers() — recover… → Then iterate store.existingEquipmentList… → …
  • Device dropdowns
  • SKILL.md covers The device map is code, not…, Changing an INDI driver:…, Selecting a device and OFFLINE devices and driver…, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Equipment is an agent skill from Touch-N-Stars/Touch-N-Stars. Work on equipment devices — INDI driver selection, device lists, connect/disconnect, and the NINA profile values behind them (camera, mount, focuser, filter wheel, rotator, switch, weather, flat device, dome, safety monitor, guider). Use for device dropdowns, driver changes, OFFLINE devices, connection ordering, and any <XSettings-… profile write.

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

The repository describes itself as: a WebApp to controll NINA. The licence is GPL-3.0.

When your agent uses it

  • Device dropdowns
  • OFFLINE devices
  • Connection ordering
  • Any <XSettings-… profile write

Example prompts

  • “/equipment”

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. If a switch exists, connect it first and wait a hard-coded 5 s — power
  2. reloadOfflineIndiDrivers() — recover OFFLINE entries before connecting.
  3. Then iterate store.existingEquipmentList in its order (not a fixed
  4. The mount asks checkMountConnectionPermission() first (location sync) and
  5. In PINS mode the guider is skipped unless store.mountInfo.Connected and

What it can do on your machine

Read from SKILL.md and the folder at commit c7af082. 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.

    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

Equipment loads about 1.5k tokens when it runs. Until then it costs about 91 tokens; SKILL.md has 661 words of instructions outside code blocks.

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

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 Touch-N-Stars/Touch-N-Stars at commit c7af082, republished under its GPL-3.0 licence (© Touch-N-Stars). 661 words, ~1,504 tokens.

Download SKILL.mdSave it as .claude/skills/equipment/SKILL.md (or your agent's skills folder).
name
equipment
description
Work on equipment devices — INDI driver selection, device lists, connect/disconnect, and the NINA profile values behind them (camera, mount, focuser, filter wheel, rotator, switch, weather, flat device, dome, safety monitor, guider). Use for device dropdowns, driver changes, OFFLINE devices, connection ordering, and any `<X>Settings-…` profile write.

Equipment and device handling

The device map is code, not documentation

src/utils/equipmentDevices.js holds DEVICE_MAP — the single source of truth that maps an apiAction onto its profile section, its rescan key, the profile field carrying the selection, and whether the device can be INDI-driven. Read it instead of copying a table; when a device changes, that file changes.

Two things it encodes that are easy to get wrong:

  • The guider is the exception: its selection lives under GuiderSettings-GuiderName, every other device under <Section>-Id.
  • existingEquipmentList names the focuser focuser, the rescan key is focus. That is why API_NAME_TO_ACTION exists and cannot be derived from DEVICE_MAP.

INDI device types for apiPinsService.getINDIDeviceList() are named differently again: camera, focuser, filterwheel, rotator, telescope, weather, switches, flatpanel, dome, safetymonitor.

Changing an INDI driver: always four steps

profileChangeValue('<Section>-IndiDriver', name)
  → apiService.<x>Action('list-devices')
  → equipmentStore.triggerRescan('<key>')
  → store.fetchProfilInfos()

Implemented generically in src/components/setupWizard/IndiDriverSelect.vue (applyDriver, line 89). src/components/equipment/selectIndi.vue predates it and repeats the same body ten times, once per device — when you touch the flow, check whether both need the change.

equipmentStore.triggerRescan(key) just writes Date.now() into rescanTrigger[key]; consumers watch that value. It is a signal, not a request, so it must be paired with the list-devices call that actually refreshes.

Selecting a device

Use setProfileDevice(apiAction, deviceId) from equipmentDevices.js. Writing the selection only into component state does not survive the next device-list refresh — that was the bug that made "No device" impossible to choose (37b4a51d).

OFFLINE devices and driver reload

INDI drivers enumerate hardware once, at driver start. A device powered up afterwards — the normal case when a power box switches its ports — stays invisible, and PINS lists it from the profile cache with Category: 'OFFLINE'. Connecting to such an entry always fails.

  • isOfflineDevice(device) detects it (category, plus a (OFFLINE) suffix fallback).
  • reloadIndiDriver(apiAction) restarts the driver by setting it to 'None' and back, with a list-devices call after each write.
  • resolveReloadedDevice(offlineEntry, devices) finds the real device afterwards. The Id changes across a reload — the placeholder Id came from the profile, the restarted driver derives it from the INDI device name. Match by Id, then by DisplayName minus the marker; never fall back to "the only INDI device in the list", which would silently connect the wrong one of two same-type devices.
  • reloadIndiDriver deliberately does not call triggerRescan() — that would collide with the calling selectDevices instance's own fetch generation. Callers refresh their own list.

Covered by src/utils/__tests__/equipmentDevices.test.js; extend it rather than testing through the component.

Show full SKILL.md (269 more words)Show less

Connection ordering

connectAll() in src/components/equipment/connectEquipment.vue:642:

  1. If a switch exists, connect it first and wait a hard-coded 5 s — power box ports need to come up before anything downstream.
  2. reloadOfflineIndiDrivers() — recover OFFLINE entries before connecting.
  3. Then iterate store.existingEquipmentList in its order (not a fixed list). The switch case is a no-op there because step 1 handled it.
  4. The mount asks checkMountConnectionPermission() first (location sync) and then waitForMountConnected() — so the mount is connected before the guider is reached.
  5. In PINS mode the guider is skipped unless store.mountInfo.Connected and guiderStore.guidecamOk.

Profile settings: the traps

Every write goes through apiService.profileChangeValue('<Section>-<Key>', value).

  • Camera chip size in pixels lives under FramingAssistantSettings-CameraWidth / -CameraHeight, not under CameraSettings.
  • Camera pixel size (CameraSettings-PixelSize) is never reported at runtime. store.cameraInfo carries XSize/YSize but no pixel size — it is always a manual entry.
  • XSize/YSize ≤ 0 means the driver reports no sensor size. That is the de-facto DSLR detection (src/components/camera/CenterHere.vue).
  • Two different slew rates. TelescopeSettings-IndiMaxSlewRateDps is the profile-side driver limit. The manual jog rate in src/components/mount/setSlewRatePins.vue comes from GET indi/mount/slew-rates (driver capabilities) and is deliberately decoupled from it.
  • Several settings components seed from the profile in onMounted only and then keep showing their defaults when the 2 s poll delivers late (settingsSensor.vue, settingsMount.vue, settingsTelescope.vue). In new components watch store.profileInfo instead, and guard user edits with a "touched" flag.

Device quirks

Extra settings panels live in src/components/equipment/: filter wheel slot count (SettingsFilterWheelSlotNum.vue), Switch SV241 Pro (SettingsSwitchSV241Pro.vue), weather API keys (SettingsWeather.vue). The focuser indi_myfocuserpro2_focus is renamed to "Gemini / MyFocuserPro2", and indi_gemini_focus is filtered out.

Cameras have no SettingsSerialConnection fallback — only SettingsAlpacaDirect when Category === 'ASCOM Alpaca', otherwise the components.alpacaDirect.cameraNoSettings note.

© Touch-N-Stars, GPL-3.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 .claude/skills/equipment of Touch-N-Stars/Touch-N-Stars.

Open the folder on GitHubat commit c7af082

Compare with similar skills

Equipment 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.

Equipment compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Equipment this skillTouch-N-Stars/Touch-N-Stars124—~1.5kAutomated safety check: PassGPL-3.0
Device Driversmohitmishra786/low-level-dev-skills252—~1.9kAutomated safety check: NotesMIT
Music Listruvnet/ruflo74k—~332Automated safety check: PassMIT
Foundation Models On Deviceaffaan-m/ECC277k4 repos~2.1kAutomated safety check: PassMIT
Semantic Liststhedaviddias/Front-End-Checklist74k—~504Automated safety check: PassMIT
List Structurethedaviddias/Front-End-Checklist74k—~438Automated safety check: PassMIT

Similar skills

  • Device Drivers

    mohitmishra786/low-level-dev-skills

    Linux device driver skill for kernel driver development. An agent skill from mohitmishra786/low-level-dev-skills.

    252 GitHub stars~1.9k tokensUpdated 3 mo ago
    Auto-check: notes
  • Music List

    ruvnet/ruflo

    List the account's saved music productions with metadata and audiourl

    74k GitHub stars~332 tokensUpdated yesterday
    Auto-check passed
  • Apple FoundationModels framework for on-device LLM — text generation, guided generation with @Generable, tool calling, and snapshot streaming in iOS 26+.

    277k GitHub starsUsed in 4 repos~2.1k tokens
    AI & LLM EngineeringAuto-check passed
  • Semantic Lists

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing rendered HTML, interactive components, or design-system patterns related to Use semantic list elements.

    74k GitHub stars~504 tokensUpdated 4 days ago
    Frontend & DesignAuto-check passed
  • List Structure

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing rendered HTML, interactive components, or design-system patterns related to Use correct list structure.

    74k GitHub stars~438 tokensUpdated 4 days ago
    Frontend & DesignAuto-check passed
  • Definition List

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing rendered HTML, interactive components, or design-system patterns related to Use correct definition list structure.

    74k GitHub stars~449 tokensUpdated 4 days ago
    Frontend & DesignAuto-check passed

More from Touch-N-Stars/Touch-N-Stars

  • API Endpoint

    Touch-N-Stars/Touch-N-Stars

    Add or change an API call between the app and its backends — the Touch'N'Stars plugin server (C), the NINA Advanced API, or the PINS daemon.

    124 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Changelog

    Touch-N-Stars/Touch-N-Stars

    Write or fix a CHANGELOG.md release entry. An agent skill from Touch-N-Stars/Touch-N-Stars.

    124 GitHub stars~725 tokensUpdated yesterday
    Auto-check passed
  • Feature Kickoff

    Touch-N-Stars/Touch-N-Stars

    Turn a rough feature idea into a written goal and testable acceptance criteria before any code is written.

    124 GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • I18n

    Touch-N-Stars/Touch-N-Stars

    Add, rename, or remove user-facing strings in src/locales. An agent skill from Touch-N-Stars/Touch-N-Stars.

    124 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Setup Wizard

    Touch-N-Stars/Touch-N-Stars

    Work on the first-run / equipment setup wizard (src/components/setupWizard/) or on location and coordinate handling.

    124 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Tns Review

    Touch-N-Stars/Touch-N-Stars

    Review changed Touch'N'Stars code with three parallel agents, one each for functionality, UI and maintainability, against this project's own rules (NINA/PINS dual mode, polling contract…

    124 GitHub stars~1.7k tokensUpdated yesterday
    Auto-check passed

Questions about Equipment

What does Equipment do?

Work on equipment devices — INDI driver selection, device lists, connect/disconnect, and the NINA profile values behind them (camera, mount, focuser, filter wheel, rotator, switch, weather, flat…. Equipment is an agent skill from Touch-N-Stars/Touch-N-Stars. Work on equipment devices — INDI driver selection, device lists, connect/disconnect, and the NINA profile values behind them (camera, mount, focuser, filter wheel, rotator, switch, weather, flat device, dome, safety monitor, guider).

When should I use Equipment?

Equipment fits situations like: device dropdowns; OFFLINE devices; connection ordering; any <XSettings-… profile write.

How do I install Equipment in Claude Code?

Run `npx skills add Touch-N-Stars/Touch-N-Stars --skill equipment -a claude-code`. Or copy the skill folder (.claude/skills/equipment in Touch-N-Stars/Touch-N-Stars) into .claude/skills/equipment in your project. Claude Code loads it when a task matches its description.

How do I install Equipment in Codex?

Run `npx skills add Touch-N-Stars/Touch-N-Stars --skill equipment -a codex`. Or copy the skill folder (.claude/skills/equipment in Touch-N-Stars/Touch-N-Stars) into .agents/skills/equipment in your project. Codex loads it when a task matches its description.

Can I use Equipment 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 Touch-N-Stars/Touch-N-Stars --skill equipment -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/equipment, .gemini/skills/equipment, .github/skills/equipment and .opencode/skills/equipment in your project.

What does Equipment need to run?

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

Does Equipment 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 Equipment 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 Equipment use?

Equipment is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Equipment use?

About 1.5k tokens (SKILL.md is roughly 6k 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 Equipment?

Skills that share tags, products or a category with Equipment: Device Drivers (mohitmishra786/low-level-dev-skills, 252 stars), Music List (ruvnet/ruflo, 74k stars), Foundation Models On Device (affaan-m/ECC, 277k stars) and Semantic Lists (thedaviddias/Front-End-Checklist, 74k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Equipment?

Touch-N-Stars (a GitHub organization) maintains it in Touch-N-Stars/Touch-N-Stars, which has 124 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 10, 2026.

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