Agent skill

Siot Add Node

by simpleiot in simpleiot/simpleiot

A skill your agent uses when adding or changing nodes in a Simple IoT instance — a Modbus bus, a signal generator, a database client, a rule, a user, a group, or any other node type.

Apache-2.0Auto-check passed

Install Siot Add Node

skills CLI
$ npx skills add simpleiot/simpleiot --skill siot-add-node -a claude-code

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

GitHub CLI
$ gh skill install simpleiot/simpleiot siot-add-node --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/simpleiot/simpleiot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/siot-add-node .claude/skills/siot-add-node && 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
siot-add-node
GitHub stars
219
Token cost
~2.5k tokens
SKILL.md length
1,033 words
Files
1
Skills in repo
3
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses when adding or changing nodes in a Simple IoT instance — a Modbus bus, a signal generator, a database client, a rule, a user, a group, or any other node type.

  • Works in 3 steps: Find the schema → Write the file → Verify
  • Changing nodes in a Simple IoT instance — a Modbus bus
  • SKILL.md covers 1. Find the schema, 2. Write the file, 3a. Import (the default) and 3b. Provisioning (only when…, plus 3 more sections
  • Needs SIOT_AUTH_TOKEN

What it does

Siot Add Node is an agent skill from simpleiot/simpleiot. Use when adding or changing nodes in a Simple IoT instance — a Modbus bus, a signal generator, a database client, a rule, a user, a group, or any other node type. Triggers on requests like "add a modbus node", "create a signal generator writing to X", "set up a db node pointing at Victoria Metrics", "add a rule that ...", "configure an upstream sync", or "provision these nodes on the device". Writes the node file, dry runs it, and applies it with siot import; use the provisioning directory only when the request…

Its SKILL.md is about 2.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: Simple IoT cloud/edge application/framework. The licence is Apache-2.0.

When your agent uses it

  • Changing nodes in a Simple IoT instance — a Modbus bus
  • A signal generator
  • A database client
  • Any other node type

Example prompts

  • “add a modbus node”
  • “create a signal generator writing to X”
  • “set up a db node pointing at Victoria Metrics”
  • “/siot-add-node”

Requirements

  • A credential in SIOT_AUTH_TOKEN

Workflow steps

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

  1. Find the schema
  2. Write the file
  3. Verify

What it can do on your machine

Read from SKILL.md and the folder at commit 822524b. 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 bash and yaml).

    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 these keys or tokens, usually read from environment variables:

    • SIOT_AUTH_TOKEN

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

Context cost

Siot Add Node loads about 2.5k tokens when it runs. Until then it costs about 137 tokens; SKILL.md has 1,033 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~137
When it runs · the whole SKILL.md, loaded when a task matches
~2.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 simpleiot/simpleiot at commit 822524b, republished under its Apache-2.0 licence (© simpleiot). 1,033 words, ~2,495 tokens.

Download SKILL.mdSave it as .claude/skills/siot-add-node/SKILL.md (or your agent's skills folder).
name
siot-add-node
description
Use when adding or changing nodes in a Simple IoT instance — a Modbus bus, a signal generator, a database client, a rule, a user, a group, or any other node type. Triggers on requests like "add a modbus node", "create a signal generator writing to X", "set up a db node pointing at Victoria Metrics", "add a rule that ...", "configure an upstream sync", or "provision these nodes on the device". Writes the node file, dry runs it, and applies it with `siot import`; use the provisioning directory only when the request says provision.

Adding nodes to a SIOT instance

Nodes are added by writing a YAML node file and applying it, rather than by clicking through the UI. The same file format serves siot import, siot export, and provisioning, so a file that works one way works the others.

Default to siot import. It applies to a running instance immediately and is what almost every request means. Reach for the provisioning directory only when the request says provision, or asks for configuration that survives a reflash and comes up on its own.

PathWhenApplied
siot importThe defaultOnce, immediately, to a running instance
Provisioning directoryAsked for by name, or config that must come up on its ownAt start-up and whenever a file changes

1. Find the schema

Every client doc has a ## Schema section showing an export of that node type with its point types, value forms, and enumerations. Read it before writing anything — point types are exact strings, and a wrong one is accepted silently as a point nothing reads.

Node typeDoc
browserdocs/user/browser.md
canBusdocs/user/can.md
dbdocs/user/database.md
filedocs/user/file.md
gpsdocs/user/gps.md
group, userdocs/user/users-groups.md
metricsdocs/user/metrics.md
modbus, modbusIodocs/user/modbus.md
msgServicedocs/user/messaging.md
oneWire, oneWireIOdocs/user/onewire.md
particledocs/user/particle.md
rule, condition, action, actionInactivedocs/user/rules.md
serialDevdocs/user/mcu.md
shelly, shellyIodocs/user/shelly.md
signalGeneratordocs/user/signal-generator.md
syncdocs/user/sync.md
updatedocs/user/update.md

docs/user/configuration.md is the reference for the format itself.

Node types with no user doc — variable, ntp, networkManager, networkManagerConn, networkManagerDevice — take their point types from the point:"..." struct tags in the matching client/*.go. Reading an existing node of that type with siot export also works and shows real values.

2. Write the file

The node type is the key and each point type is a key under it:

yaml
nodes:
  - group:
      description: Tank farm
  - modbus:
      parent: Tank farm
      description: Sensor bus
      clientServer: client
      protocol: RTU
      port: /dev/ttyUSB0
      baud: "9600"
      pollPeriod: 500
      children:
        - modbusIo:
            description: Tank level
            id: 1
            address: 3
            modbusIoType: modbusHoldingRegister
            dataFormat: uint16
            scale: 0.1

What decides the outcome:

  • How a value is written decides what it becomes. 9600 is numeric, "9600" is text. A client expecting text reads an empty value when given a number, so quote anything the schema shows quoted — port, baud, phone numbers, times.
  • Descriptions are the match key. A node in a file matches an existing node when the parent and the description agree, which is what makes applying twice the same as applying once. Choose descriptions meant to last.
  • Three keys are reserved: parent, children, edgePoints. Everything else is a point type, id included — on a Modbus or 1-wire node id is a device address, not the node's own ID, which never appears in a file.
  • parent names a node by description and only applies to a top level entry. Entries apply in order, so a parent naming a node the same file creates has to come after it.
  • A nodeID point names its target by description too, and resolves after the whole file is read, so it may point forward.
  • Edge points go under edgePoints — a user's role is the one in common use.
  • An entry with no description matches the single node of its type, which is how a metrics or serial node is addressed. A user has no description, so it is found by email, and by name when there is no email.
  • apiVersion: 1 is optional. Adding it costs nothing and says which format the file is in.

Write files under the scratchpad directory unless they are going into the repo or a provisioning directory.

3a. Import (the default)

bash
./siot import -dryRun < config.yaml     # prints the plan, applies nothing
./siot import < config.yaml

Read the dry run before applying. It prints one line per node — create modbus Sensor bus (7 point(s)), update ..., delete ... — so create where you expected update means the description did not match an existing node and a second node is about to appear beside it.

import reads STDIN and gives up after two seconds, so always redirect a file into it. Add -natsServer nats://127.0.0.1:4222 for an instance that is not on the default port and -token (or SIOT_AUTH_TOKEN) when it requires authentication.

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

3b. Provisioning (only when asked)

Provisioning applies the same files at start-up and whenever they change, so a unit built from an image comes up configured with no import step.

bash
./siot provision -dir ./provisioning -check   # parse only, no instance needed
./siot provision -dir ./provisioning          # what it would do, applying nothing

Where the files go:

  • -provisioningDir or SIOT_PROVISIONING_DIR, falling back to <SIOT_DATA>/provisioning when that directory exists.
  • Files are .yaml or .yml, applied in lexical order, so use the familiar 10-, 20- prefixes to express which goes first. Dotfiles and subdirectories are skipped.
  • Files uploaded through the UI are file nodes under the provisioning node and are layered on top of the ones on disk.

A file is applied when its contents change, which is what leaves a value edited in the UI alone until the file describing it changes. Check the provisioning node afterwards: each file gets a provisioningFile child carrying its name, the checksum applied, and the last error.

4. Verify

bash
./siot export | grep -A20 'Sensor bus'

Export the tree and confirm the node reads back the way the file described it. A point that came out empty where text was expected is the quoting rule; a point that is missing entirely is a point type that does not match what the client reads.

Removing nodes

Applying a file never removes anything for going unmentioned. A delete list removes nodes, matched the way nodes entries are:

yaml
delete:
  - modbus:
      parent: Tank farm
      description: Old sensors

Deleting what is already gone does nothing.

Pitfalls

SymptomCause
A second node appears beside the firstThe description no longer matches, usually because one side was renamed
2 nodes here match "..."Two nodes share a parent and a description; make them distinct
is a group node here and a modbus node in the fileThe description names a node of another type; delete it first if the type is meant to change
A text setting reads as emptyThe value was written bare and became numeric — quote it
this looks like the old export formatThe file names its type in a type: field; re-export to get the current one
A user is not foundA user is matched by email, or by name when there is no email
A provisioning file was edited but nothing changedProvisioning applies on a content change; check the checksum on the provisioningFile node

Files carry secrets in the clear: authToken on db, sync, particle, and msgService nodes, and pass on a user. Treat a node file the way you would treat the credentials inside it, and keep exports of a live tree out of the repo.

© simpleiot, 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 .claude/skills/siot-add-node of simpleiot/simpleiot.

Open the folder on GitHubat commit 822524b

Compare with similar skills

Siot Add Node 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.

Siot Add Node compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Siot Add Node this skillsimpleiot/simpleiot219—~2.5kAutomated safety check: PassApache-2.0
Node Connectopenclaw/openclaw392k—~1.6kAutomated safety check: PassMIT
Node Inspect Debuggeropenclaw/openclaw392k1 repos~894Automated safety check: PassMIT
Instance Awarenessn8n-io/n8n207k—~1.4kAutomated safety check: PassCustom licence
Make Changesremix-run/remix33k—~2.4kAutomated safety check: PassMIT
Orch Change Featureaffaan-m/ECC276k1 repos~420Automated safety check: PassMIT

Similar skills

  • Node Connect

    openclaw/openclaw

    Diagnose OpenClaw Control UI browser and native Android, iOS, or macOS node connection failures across route, auth, pairing, QR/setup-code, and reconnect states.

    392k GitHub stars~1.6k tokensUpdated today
    MobileAuto-check passed
  • Node Inspect Debugger

    openclaw/openclaw

    Debug Node.js with node inspect, --inspect, breakpoints, CDP, heap, and CPU profiles.

    392k GitHub starsUsed in 1 repo~894 tokens
    Frontend & DesignAuto-check passed
  • Official

    Load when the request depends on what is already on this instance rather than on what the user just typed: a short or ambiguous opener ("fix it", "carry on", "what should I look at"), a reference to…

    207k GitHub stars~1.4k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Make Changes

    remix-run/remix

    Create or update Remix repo change files under packages//.changes.

    33k GitHub stars~2.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Orchestrate altering an existing, working feature to new desired behavior — update its tests to the new spec, change the implementation to match, review, and gated commit.

    276k GitHub starsUsed in 1 repo~420 tokens
    Auto-check passed
  • Change Management

    sickn33/agentic-awesome-skills

    Implement change management processes. An agent skill from sickn33/agentic-awesome-skills.

    47k GitHub starsUsed in 2 repos~3.5k tokens
    DevOps & CloudAuto-check passed

More from simpleiot/simpleiot

  • Siot Debug

    simpleiot/simpleiot

    A skill your agent uses when inspecting or troubleshooting a running Simple IoT instance — checking what a node's current values are, whether points are flowing, whether sync is replicating, or what…

    219 GitHub stars~3.5k tokensUpdated 18 days ago
    Auto-check passed
  • Siot Security Audit

    simpleiot/simpleiot

    A skill your agent uses when auditing Simple IoT for security issues, reviewing a change that touches authentication, authorization, enrollment, sync, or a network-facing parser, or checking whether…

    219 GitHub stars~3k tokensUpdated 18 days ago
    Auto-check passed

Questions about Siot Add Node

What does Siot Add Node do?

A skill your agent uses when adding or changing nodes in a Simple IoT instance — a Modbus bus, a signal generator, a database client, a rule, a user, a group, or any other node type. Siot Add Node is an agent skill from simpleiot/simpleiot. Use when adding or changing nodes in a Simple IoT instance — a Modbus bus, a signal generator, a database client, a rule, a user, a group, or any other node type.

When should I use Siot Add Node?

Siot Add Node fits situations like: changing nodes in a Simple IoT instance — a Modbus bus; A signal generator; A database client; any other node type.

How do I install Siot Add Node in Claude Code?

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

How do I install Siot Add Node in Codex?

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

Can I use Siot Add Node 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 simpleiot/simpleiot --skill siot-add-node -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/siot-add-node, .gemini/skills/siot-add-node, .github/skills/siot-add-node and .opencode/skills/siot-add-node in your project.

What does Siot Add Node need to run?

Going by SKILL.md and its folder, Siot Add Node needs credentials named SIOT_AUTH_TOKEN. Our summary lists: A credential in SIOT_AUTH_TOKEN.

Does Siot Add Node 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 Siot Add Node 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 Siot Add Node use?

Siot Add Node 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 Siot Add Node use?

About 2.5k tokens (SKILL.md is roughly 10k 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 Siot Add Node?

Skills that share tags, products or a category with Siot Add Node: Node Connect (openclaw/openclaw, 392k stars), Node Inspect Debugger (openclaw/openclaw, 392k stars), Instance Awareness (n8n-io/n8n, 207k stars) and Make Changes (remix-run/remix, 33k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Siot Add Node?

simpleiot (a GitHub organization) maintains it in simpleiot/simpleiot, which has 219 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on September 21, 2026.

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