DOCX
rvdbreemen/OTGW-firmware
A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx files).
Agent skill
by MichielVanwelsenaere in MichielVanwelsenaere/HomeAutomation.CoDeSys3
Find out why a PFC200 stopped - an application that died, a building that went dead, an exception, a crash, or a restart nobody explained - by reading the runtime's own log and core dump on the…
$ npx skills add MichielVanwelsenaere/HomeAutomation.CoDeSys3 --skill troubleshoot-plc-exception -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install MichielVanwelsenaere/HomeAutomation.CoDeSys3 troubleshoot-plc-exception --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/MichielVanwelsenaere/HomeAutomation.CoDeSys3.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/troubleshoot-plc-exception .claude/skills/troubleshoot-plc-exception && 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 "troubleshoot-plc-exception" agent skill from https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3/tree/master/.claude/skills/troubleshoot-plc-exception into .claude/skills/troubleshoot-plc-exception/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "troubleshoot-plc-exception", 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/MichielVanwelsenaere/HomeAutomation.CoDeSys3/tree/master/.claude/skills/troubleshoot-plc-exceptionType 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 MichielVanwelsenaere/HomeAutomation.CoDeSys3 --skill troubleshoot-plc-exception -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install MichielVanwelsenaere/HomeAutomation.CoDeSys3 troubleshoot-plc-exception --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/troubleshoot-plc-exception .agents/skills/troubleshoot-plc-exception && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "troubleshoot-plc-exception" agent skill from https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3/tree/master/.claude/skills/troubleshoot-plc-exception into .agents/skills/troubleshoot-plc-exception/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "troubleshoot-plc-exception", 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 MichielVanwelsenaere/HomeAutomation.CoDeSys3 --skill troubleshoot-plc-exception -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install MichielVanwelsenaere/HomeAutomation.CoDeSys3 troubleshoot-plc-exception --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/troubleshoot-plc-exception .cursor/skills/troubleshoot-plc-exception && 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 "troubleshoot-plc-exception" agent skill from https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3/tree/master/.claude/skills/troubleshoot-plc-exception into .cursor/skills/troubleshoot-plc-exception/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "troubleshoot-plc-exception", 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/MichielVanwelsenaere/HomeAutomation.CoDeSys3.git --path .claude/skills/troubleshoot-plc-exception--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 MichielVanwelsenaere/HomeAutomation.CoDeSys3 --skill troubleshoot-plc-exception -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install MichielVanwelsenaere/HomeAutomation.CoDeSys3 troubleshoot-plc-exception --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/troubleshoot-plc-exception .gemini/skills/troubleshoot-plc-exception && 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 "troubleshoot-plc-exception" agent skill from https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3/tree/master/.claude/skills/troubleshoot-plc-exception into .gemini/skills/troubleshoot-plc-exception/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "troubleshoot-plc-exception", 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 MichielVanwelsenaere/HomeAutomation.CoDeSys3 troubleshoot-plc-exceptionInstalls 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 MichielVanwelsenaere/HomeAutomation.CoDeSys3 --skill troubleshoot-plc-exception -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/troubleshoot-plc-exception .github/skills/troubleshoot-plc-exception && 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 "troubleshoot-plc-exception" agent skill from https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3/tree/master/.claude/skills/troubleshoot-plc-exception into .github/skills/troubleshoot-plc-exception/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "troubleshoot-plc-exception", 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 MichielVanwelsenaere/HomeAutomation.CoDeSys3 --skill troubleshoot-plc-exception -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install MichielVanwelsenaere/HomeAutomation.CoDeSys3 troubleshoot-plc-exception --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/troubleshoot-plc-exception .opencode/skills/troubleshoot-plc-exception && 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 "troubleshoot-plc-exception" agent skill from https://github.com/MichielVanwelsenaere/HomeAutomation.CoDeSys3/tree/master/.claude/skills/troubleshoot-plc-exception into .opencode/skills/troubleshoot-plc-exception/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "troubleshoot-plc-exception", 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.
troubleshoot-plc-exceptionFind out why a PFC200 stopped - an application that died, a building that went dead, an exception, a crash, or a restart nobody explained - by reading the runtime's own log and core dump on the…
Troubleshoot Plc Exception is an agent skill from MichielVanwelsenaere/HomeAutomation.CoDeSys3. Find out why a PFC200 stopped - an application that died, a building that went dead, an exception, a crash, or a restart nobody explained - by reading the runtime's own log and core dump on the controller. Use when a PLC is unresponsive or was just restarted, when Home Assistant lost a whole controller at once, when the lights and pushbuttons stopped working, or when someone asks what a red LED on a cabinet means.
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with Home Assistant. The repository describes itself as: Home Automation system build in CoDeSys 3 with MQTT communication to any third party Home Automation software. The licence is MIT.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 924c3da. 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.
Shell commands in SKILL.md call:
sshFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use ssh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Troubleshoot Plc Exception loads about 3.6k tokens when it runs. Until then it costs about 111 tokens; SKILL.md has 1,951 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 MichielVanwelsenaere/HomeAutomation.CoDeSys3 at commit 924c3da, republished under its MIT licence (© MichielVanwelsenaere). 1,951 words, ~3,636 tokens.
.claude/skills/troubleshoot-plc-exception/SKILL.md (or your agent's skills folder).The runtime writes down exactly why it stopped, and the record survives a restart. Almost all the time lost to a failure like this goes on not reading it: the file is not where the CODESYS documentation implies, the controller's clock is years wrong so its timestamps look irrelevant, and the LEDs on the front invite a diagnosis they cannot support.
This page is the route to the evidence, in the order that gets there fastest.
Do this before touching the controller, because it decides which half of the system to investigate and the answers are all free:
| Check | Command | What a positive proves |
|---|---|---|
| Application publishing | mosquitto_sub -h <broker> -R -t 'Devices/PLC/<site>/availability' | The application is running now |
| Runtime process alive | ./tools/ai/codesys.ps1 scan | The runtime answers the gateway, whatever the application is doing |
| Runtime's own view | PLC Shell getprgstat | [Run] vs stopped, and whether an exception flag is set |
| Did the wall pushbuttons work during the outage? | ask the person | The single most useful question. Dead buttons mean the application was gone; working buttons with no Home Assistant mean only the MQTT path failed |
-R is not optional. It suppresses retained messages, and the retained value of
an availability topic is the last will from the previous disconnect — it
reads offline however healthy the PLC is. A snapshot without -R will tell you
a running controller is dead.
Three shapes, three different investigations:
bus is not communicating
in the log, and remember the DI process image reads zero while the bus is
down, which through a normally-closed loop is the tripped state.test-plc-logic.SSH, root. The vendor default password is wago on this generation; newer
WAGO firmware ships a per-device password printed on the label, and a
commissioned box may have had it changed — only WBM as admin can reset it.
Never factory-reset to recover a password: that wipes the runtime installation
and the boot application with it.
There is no sshpass or plink on the dev machine, so a password cannot be
piped in. Use OpenSSH's askpass instead:
printf '#!/bin/sh\necho "<password>"\n' > pw.sh && chmod +x pw.sh
SSH_ASKPASS="$PWD/pw.sh" SSH_ASKPASS_REQUIRE=force DISPLAY=:0 \
ssh -o StrictHostKeyChecking=no -o PubkeyAuthentication=no root@<ip> 'uptime'
rm -f pw.sh # do not leave it lying aroundSSH_ASKPASS_REQUIRE=force is the part that matters: without it OpenSSH only
consults askpass when it has no tty, which depends on how the shell was invoked.
No password at all? Two routes need none, because they go over the runtime connection rather than Linux: the device editor's Files tab browses the controller's filesystem and can download the log, and PLC Shell answers for runtime state (§6).
| What | Path | Survives reboot |
|---|---|---|
| Runtime log, current and rotated | /home/codesyscontrol/var/opt/codesys/codesyscontrol.log, codesyscontrol_0.log | yes |
| Core dump, written on every exception | /home/codesyscontrol/var/opt/codesys/PlcLogic/<app>/<app>.core | yes |
| WAGO's event log | /log/wagolog.log, .log.1 | yes |
| CODESYS audit log | /var/opt/codesys/.Audit*.log | yes |
| Logger and watchdog configuration | /etc/codesyscontrol/CODESYSControl.cfg, CODESYSControl_User.cfg | yes |
| Kernel, syslog, lighttpd | /var/log/* | no — tmpfs, 4 MB, cleared at boot |
Two traps here, both of which cost a run:
/var/opt/codesys is a decoy. It holds the licence container, the object
database and the audit logs, and it is where the configuration says the log
goes — but the runtime's live state is under /home/codesyscontrol/, on a
different mount. find / -xdev -name 'codesyscontrol*.log*' returns nothing
and looks like a definitive answer. Search without -xdev./var/log is RAM. Anything you want from the previous run is not there.
dmesg is equally gone, so an OOM kill cannot be confirmed after a reboot —
which is a reason to read the CODESYS log rather than hunt for one.Also: strings is not on PATH in this Git Bash. strings f | grep x
silently produces nothing, which reads exactly like "the file contains no such
text". Extract printable runs with Python instead.
Assume the controller's clock is wrong. Neither site controller runs NTP: on 7 Sep 2026 Bijbouw's clock read January 2023 and Stal's read June 2026. Timestamps are internally consistent, so the log is perfectly usable once anchored:
date on the controller, next to the real time, gives the offset.PlcLogic/<app>/<app>.app against the download you remember making, or an
Application ... loaded via [Download] line against a commit.Anchored to about ±15 minutes, which is ample. Do not skip this: an unanchored log makes a crash from an hour ago look like ancient history.
Then read it:
grep -inE "exception|fatal|abort|watchdog|out of memory" codesyscontrol.log| What you find | What it means |
|---|---|
Processorload watchdog: plcload=NN, maxplcload=95 followed by *EXCEPTION* [ProcessorLoadWatchdog] ... App=[all], Task=[all] | The runtime stopped everything over CPU load. See §5 |
*EXCEPTION* naming a task and an exception type | A real IEC fault. The core dump names the POU — load it in the IDE (Debug → Load core dump) against the matching project |
bus is not communicating: restarting | K-bus dropout; the I/O driver restarted it. Real, and separate from any application fault |
task_signalhandler_exit [X] lost cycles: N | Usually not a fault. It is emitted when a task is stopped, so it accompanies every download. Count these against loaded via [Download] lines before treating them as evidence of overload |
Create asymmetric key in progress on a daily cadence | A certificate that is not persisting. Harmless in itself, but it is tens of seconds of CPU per day on a controller that may not have it to spare |
Logger.0.Filter=0x0000000F (info, warning, error, exception) is the default and
lives in CODESYSControl_User.cfg so logsetfilter can change it. Check it
before concluding that a silent log means a clean run — but note that at 0x0F
exceptions are recorded, so a genuinely silent log means the application did
not fault.
WAGO arms this in the runtime configuration, and it is easy to be unaware of:
[CmpSchedule]
ProcessorLoad.Enable=1
ProcessorLoad.Maximum=95
ProcessorLoad.Interval=5000Every 5 seconds it samples PLC load; one sample above 95% raises an exception
against App=[all], Task=[all]. It stops every task in every application and
leaves them stopped — lights, pushbuttons, covers, MQTT, all of it — until
someone restarts the PLC. There is no automatic recovery, and because it acts on
a 5-second average it needs only a burst, not a sustained overload.
It matters here because a Freewheeling task consumes every spare cycle by definition, so a controller with one sits permanently near the ceiling.
CODESYS names its task threads after the IEC tasks, so per-task CPU is directly attributable — no guessing which task is expensive:
top -H -b -n 2 -d 3 | awk '/PID USER/{n++} n==2'Take the second sample. top's first iteration computes %CPU since boot and
is meaningless. For an honest average, divide a thread's TIME+ by the uptime
rather than trusting the instantaneous figure.
Measured 7 Sep 2026, as a baseline to compare a future reading against:
| Thread | Bijbouw | Stal |
|---|---|---|
MqttCommunication (Freewheeling, prio 5) | 27.8% inst., ~32% averaged | ~13% averaged |
MainTask (Cyclic 50 ms, prio 4) — the actual control logic | 1.5% | — |
Schedule (runtime) | 7.6% | 7.5% |
| CodeMeter comm (×2) | 7.5% | 5.2% |
| OPC UA server (×2) | 4.0% | — |
| Edge gateway (×2) | 4.4% | — |
| Load average (single core) | 2.87 / 3.64 / 3.29 | 2.00 / 1.79 / 1.86 |
| Watchdog trips in the log | 2 | 0 |
Note the shape of it: the house logic costs 1.5% and the MQTT task costs twenty times that, purely because it never sleeps.
plcload from the PLC Shell will not show you this. It read 51% on Bijbouw
and 44% on Stal — an average that hides exactly the bursts the watchdog samples.
A comfortable plcload is not evidence of headroom.
The strongest tool available: two controllers running the same runtime and the same project structure with different loads. If one trips and the other never has, the difference between them is the answer. Collect on both:
uptime · cat /proc/loadavg · top -H per-thread · trip count in the log ·
whether a .core file exists · rtsinfo · clock offset
That comparison is what turned "Bijbouw crashed twice" into "Bijbouw carries the Ducobox and runs hot, Stal carries less and has never tripped in 7 days".
It is the first thing everyone suspects, and in this project it is almost always wrong, because nothing in the IEC layer allocates:
grep -cE "__NEW|__DELETE|SysMemAllocData|SysMemFreeData|MemAlloc|MemFree|MALLOC" \
src/Exports/PLCopen.xmlZero in this project's own code, and zero in PRO_JSON 1.0.21.0 — whose only
VAR_GLOBAL is VAR_GLOBAL CONSTANT, so it holds no accumulating state either.
A .library is a ZIP, and its __shared_data_storage_string_table__
carries the ST source, so a vendored library can be audited this way without
opening the IDE.
If a leak is still worth measuring, measure the slope rather than waiting for a
recurrence: sample VmRSS from /proc/$(pidof codesyscontrol)/status an hour
apart. Exhausting ~200 MB over three days is ~2.7 MB/h, which is visible within
the hour.
What IEC code can do is consume stack: an FB instance declared in a method's
VAR block is stack-allocated and its FB_init runs per call, so a
STRUCT_TO_JSON local costs GPL_JSON.MAX_JSON_STRING bytes of stack every
call — 20 001 as configured here. Check the task stack size in
CODESYSControl.cfg before deciding whether that is merely wasteful.
| Safe, read-only | |
|---|---|
rtsinfo | runtime version |
applist, getprgstat | applications and their state |
plcload | PLC load average (see the caveat in §5) |
pinf | project info of the running boot application — empty unless the project fills in a Project Information object, which is worth doing |
getsramlayout | retain/persistent segments |
loggetfilter, channelinfo, sessinfo-list | logging and comms |
Never on a running house: stopprg, startprg, reload, resetprg,
resetprgcold, clearsram, restoresram, restoreretains — they stop the
application or destroy retained state. logsetfilter and logdelfilter write
runtime configuration; leave them until the diagnosis is finished.
Don't poll on a timer. Use the sibling controller's availability heartbeat as the clock: both publish about every 5 seconds, so counting the sibling's ticks while the suspect is silent measures the outage and gives a built-in control — if both go quiet, it is the broker or the network, not the PLC. Two processes, no timers, and it runs for days:
mosquitto_sub -h <broker> -v -R \
-t 'Devices/PLC/<suspect>/availability' \
-t 'Devices/PLC/<sibling>/availability' \
-t 'Devices/PLC/<suspect>/Out/RS485/BUS_COUNTERS' | awk '...'A first version of this spawned two mosquitto_sub per 30 s and was killed for
memory. One long-lived subscription is both cheaper and more responsive.
BUS_COUNTERS is a free time series while you wait, published every 30 s:
ok/steps rate falls when a task is being starved, drop= leaves zero when
the publish queue cannot keep up, exc= tracks the Modbus side.
Do not diagnose from the RUN LED. On 7 Sep 2026 Bijbouw showed a steady red
RUN while its application was verifiably in Run and driving the house, and
Stal — same runtime, same project — showed green. Whatever drives it is not the
application state. The only difference found between the two boxes was that
Bijbouw had a .core file present and Stal did not.
The one LED this project does drive is U1: steady green while the broker is
reachable and the MQTT session is up, blinking red otherwise
(docs/AdditionalFunctionality/User_leds_CODESYS3S_runtime.md). That one is
trustworthy because it is in the code.
A task's kind, period and priority are scaffold fields, so this class of fix
is a spec file rather than a GUI session:
./tools/ai/codesys.ps1 scaffold -Project .ai/sync/<Site>/<Site>.project \
-Scaffold tools/ai/scaffold/mqtt-task-cyclic.json -Forcetools/ai/scaffold/mqtt-task-cyclic.json is the worked example — Freewheeling to
Cyclic 20 ms on both controllers — and tools/ai/scaffold/g1-ping-priority.json
is the priority equivalent. Both run against a working copy made by
sync-implementation-project's Working-Copy.ps1, never against the building's
project directly, and scaffold builds before it saves.
Nothing here reaches a PLC. A download to a building is a deliberate, separate act and needs the owner's go-ahead.
© MichielVanwelsenaere, MIT. 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/troubleshoot-plc-exception of MichielVanwelsenaere/HomeAutomation.CoDeSys3.
Open the folder on GitHubat commit 924c3da
Troubleshoot Plc Exception 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 |
|---|---|---|---|---|---|---|
| Troubleshoot Plc Exception this skillMichielVanwelsenaere/HomeAutomation.CoDeSys3 | 148 | — | ~3.6k | Automated safety check: Pass | MIT | |
| DOCXrvdbreemen/OTGW-firmware | 207 | 33 repos | ~4.3k | Automated safety check: Pass | Proprietary | |
| PPTXrvdbreemen/OTGW-firmware | 207 | 34 repos | ~2.3k | Automated safety check: Pass | Proprietary | |
| XLSXrvdbreemen/OTGW-firmware | 207 | 35 repos | ~2.9k | Automated safety check: Pass | Proprietary | |
| Sap Extension Creatorheshengtao/super-agent-party | 2.7k | — | ~6k | Automated safety check: Pass | AGPL-3.0 | |
| Ha Frontend Componentshome-assistant/frontend | 5.7k | — | ~1.2k | Automated safety check: Pass | Apache-2.0 |
rvdbreemen/OTGW-firmware
A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx files).
rvdbreemen/OTGW-firmware
Use this skill any time a .pptx file is involved in any way — as input, output, or both.
rvdbreemen/OTGW-firmware
Use this skill any time a spreadsheet file is the primary input or output.
heshengtao/super-agent-party
Create Super Agent Party (SAP) extensions. An agent skill from heshengtao/super-agent-party.
home-assistant/frontend
Home Assistant frontend component patterns. An agent skill from home-assistant/frontend.
home-assistant/android
Home Assistant Android module and layer architecture. An agent skill from home-assistant/android.
MichielVanwelsenaere/HomeAutomation.CoDeSys3
Regenerate the machine-owned parts of the function block docs from the PLCopen export, scaffold a page for a new function block, and check whether the docs still match the code.
MichielVanwelsenaere/HomeAutomation.CoDeSys3
Bring an installation's CODESYS project up to date with this reference project's function blocks, without changing what that installation does.
MichielVanwelsenaere/HomeAutomation.CoDeSys3
Read, write and compile-check CODESYS code in this project without opening the GUI, by driving CODESYS headlessly through its ScriptEngine.
MichielVanwelsenaere/HomeAutomation.CoDeSys3
Exercise the PLC's actual behaviour on real hardware - lights, pushbuttons, covers, dimmers and the HVAC chain - by commanding it over MQTT and asserting the result on the broker and in the running…
Works with
Find out why a PFC200 stopped - an application that died, a building that went dead, an exception, a crash, or a restart nobody explained - by reading the runtime's own log and core dump on the…. CoDeSys3. Find out why a PFC200 stopped - an application that died, a building that went dead, an exception, a crash, or a restart nobody explained - by reading the runtime's own log and core dump on the controller.
Troubleshoot Plc Exception fits situations like: A PLC is unresponsive; was just restarted; home Assistant lost a whole controller at once; the lights and pushbuttons stopped working.
Run `npx skills add MichielVanwelsenaere/HomeAutomation.CoDeSys3 --skill troubleshoot-plc-exception -a claude-code`. Or copy the skill folder (.claude/skills/troubleshoot-plc-exception in MichielVanwelsenaere/HomeAutomation.CoDeSys3) into .claude/skills/troubleshoot-plc-exception in your project. Claude Code loads it when a task matches its description.
Run `npx skills add MichielVanwelsenaere/HomeAutomation.CoDeSys3 --skill troubleshoot-plc-exception -a codex`. Or copy the skill folder (.claude/skills/troubleshoot-plc-exception in MichielVanwelsenaere/HomeAutomation.CoDeSys3) into .agents/skills/troubleshoot-plc-exception 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 MichielVanwelsenaere/HomeAutomation.CoDeSys3 --skill troubleshoot-plc-exception -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/troubleshoot-plc-exception, .gemini/skills/troubleshoot-plc-exception, .github/skills/troubleshoot-plc-exception and .opencode/skills/troubleshoot-plc-exception in your project.
Going by SKILL.md and its folder, Troubleshoot Plc Exception needs the command-line tools its instructions call (ssh). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use ssh, which can reach the network depending on how they are called. 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.
Troubleshoot Plc Exception is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 15k 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 Troubleshoot Plc Exception: DOCX (rvdbreemen/OTGW-firmware, 207 stars), PPTX (rvdbreemen/OTGW-firmware, 207 stars), XLSX (rvdbreemen/OTGW-firmware, 207 stars) and Sap Extension Creator (heshengtao/super-agent-party, 2.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
MichielVanwelsenaere (a GitHub user) maintains it in MichielVanwelsenaere/HomeAutomation.CoDeSys3, which has 148 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 14, 2026.
Source: MichielVanwelsenaere/HomeAutomation.CoDeSys3 on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.