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.
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.
$ npx skills add simpleiot/simpleiot --skill siot-add-node -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install simpleiot/simpleiot siot-add-node --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "siot-add-node" agent skill from https://github.com/simpleiot/simpleiot/tree/master/.claude/skills/siot-add-node into .claude/skills/siot-add-node/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "siot-add-node", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/simpleiot/simpleiot/tree/master/.claude/skills/siot-add-nodeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add simpleiot/simpleiot --skill siot-add-node -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install simpleiot/simpleiot siot-add-node --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/simpleiot/simpleiot.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/siot-add-node .agents/skills/siot-add-node && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "siot-add-node" agent skill from https://github.com/simpleiot/simpleiot/tree/master/.claude/skills/siot-add-node into .agents/skills/siot-add-node/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "siot-add-node", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add simpleiot/simpleiot --skill siot-add-node -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install simpleiot/simpleiot siot-add-node --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/simpleiot/simpleiot.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/siot-add-node .cursor/skills/siot-add-node && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "siot-add-node" agent skill from https://github.com/simpleiot/simpleiot/tree/master/.claude/skills/siot-add-node into .cursor/skills/siot-add-node/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "siot-add-node", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/simpleiot/simpleiot.git --path .claude/skills/siot-add-node--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add simpleiot/simpleiot --skill siot-add-node -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install simpleiot/simpleiot siot-add-node --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/simpleiot/simpleiot.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/siot-add-node .gemini/skills/siot-add-node && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "siot-add-node" agent skill from https://github.com/simpleiot/simpleiot/tree/master/.claude/skills/siot-add-node into .gemini/skills/siot-add-node/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "siot-add-node", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install simpleiot/simpleiot siot-add-nodeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add simpleiot/simpleiot --skill siot-add-node -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/simpleiot/simpleiot.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/siot-add-node .github/skills/siot-add-node && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "siot-add-node" agent skill from https://github.com/simpleiot/simpleiot/tree/master/.claude/skills/siot-add-node into .github/skills/siot-add-node/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "siot-add-node", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add simpleiot/simpleiot --skill siot-add-node -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install simpleiot/simpleiot siot-add-node --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/simpleiot/simpleiot.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/siot-add-node .opencode/skills/siot-add-node && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "siot-add-node" agent skill from https://github.com/simpleiot/simpleiot/tree/master/.claude/skills/siot-add-node into .opencode/skills/siot-add-node/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "siot-add-node", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
siot-add-nodeA 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. 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.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 822524b. It shows what the files ask for, not the result of running them.
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.
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.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SIOT_AUTH_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from simpleiot/simpleiot at commit 822524b, republished under its Apache-2.0 licence (© simpleiot). 1,033 words, ~2,495 tokens.
.claude/skills/siot-add-node/SKILL.md (or your agent's skills folder).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.
| Path | When | Applied |
|---|---|---|
siot import | The default | Once, immediately, to a running instance |
| Provisioning directory | Asked for by name, or config that must come up on its own | At start-up and whenever a file changes |
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 type | Doc |
|---|---|
browser | docs/user/browser.md |
canBus | docs/user/can.md |
db | docs/user/database.md |
file | docs/user/file.md |
gps | docs/user/gps.md |
group, user | docs/user/users-groups.md |
metrics | docs/user/metrics.md |
modbus, modbusIo | docs/user/modbus.md |
msgService | docs/user/messaging.md |
oneWire, oneWireIO | docs/user/onewire.md |
particle | docs/user/particle.md |
rule, condition, action, actionInactive | docs/user/rules.md |
serialDev | docs/user/mcu.md |
shelly, shellyIo | docs/user/shelly.md |
signalGenerator | docs/user/signal-generator.md |
sync | docs/user/sync.md |
update | docs/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.
The node type is the key and each point type is a key under it:
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.1What decides the outcome:
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.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.nodeID point names its target by description too, and resolves after
the whole file is read, so it may point forward.edgePoints — a user's role is the one in common
use.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.
./siot import -dryRun < config.yaml # prints the plan, applies nothing
./siot import < config.yamlRead 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.
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.
./siot provision -dir ./provisioning -check # parse only, no instance needed
./siot provision -dir ./provisioning # what it would do, applying nothingWhere the files go:
-provisioningDir or SIOT_PROVISIONING_DIR, falling back to
<SIOT_DATA>/provisioning when that directory exists..yaml or .yml, applied in lexical order, so use the familiar
10-, 20- prefixes to express which goes first. Dotfiles and subdirectories
are skipped.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.
./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.
Applying a file never removes anything for going unmentioned. A delete list
removes nodes, matched the way nodes entries are:
delete:
- modbus:
parent: Tank farm
description: Old sensorsDeleting what is already gone does nothing.
| Symptom | Cause |
|---|---|
| A second node appears beside the first | The 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 file | The description names a node of another type; delete it first if the type is meant to change |
| A text setting reads as empty | The value was written bare and became numeric — quote it |
this looks like the old export format | The file names its type in a type: field; re-export to get the current one |
| A user is not found | A user is matched by email, or by name when there is no email |
| A provisioning file was edited but nothing changed | Provisioning 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
Just SKILL.md in .claude/skills/siot-add-node of simpleiot/simpleiot.
Open the folder on GitHubat commit 822524b
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Siot Add Node this skillsimpleiot/simpleiot | 219 | — | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| Node Connectopenclaw/openclaw | 392k | — | ~1.6k | Automated safety check: Pass | MIT | |
| Node Inspect Debuggeropenclaw/openclaw | 392k | 1 repos | ~894 | Automated safety check: Pass | MIT | |
| Instance Awarenessn8n-io/n8n | 207k | — | ~1.4k | Automated safety check: Pass | Custom licence | |
| Make Changesremix-run/remix | 33k | — | ~2.4k | Automated safety check: Pass | MIT | |
| Orch Change Featureaffaan-m/ECC | 276k | 1 repos | ~420 | Automated safety check: Pass | MIT |
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.
openclaw/openclaw
Debug Node.js with node inspect, --inspect, breakpoints, CDP, heap, and CPU profiles.
n8n-io/n8n
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…
remix-run/remix
Create or update Remix repo change files under packages//.changes.
affaan-m/ECC
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.
sickn33/agentic-awesome-skills
Implement change management processes. An agent skill from sickn33/agentic-awesome-skills.
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…
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…
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.