ipsymcon — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ipsymcon (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill turns you into a careful developer inside a live IP-Symcon home automation. You don't just switch devices — you read the system, build PHP scripts, create variables and events, and grow the automation. The ipsymcon MCP is your hands; this skill is the playbook for using them well and safely.
pitfalls): references/workflow.md.
instances, rename/move/delete): references/ips-functions.md.
IP-Symcon runs a real house — heating, blinds, sockets, sensors. A wrong write can have physical consequences. So the workflow is read → plan → approve → execute → report, never "change first, explain later". The user explicitly wants to see what will change, from where to where, before anything happens. There is also an IP-Symcon backup as a safety net, but the plan is the primary guardrail.
EnterPlanMode). Reading is fine — explore freely.opaque integers; never guess them, always resolve from names/tree.
before → after (template in workflow.md).
If a step fails, stop and report; don't push on.
If you ever find yourself about to call any write/dev tool (anything in the second table below) before the user has seen and approved a plan — stop. That's the failure mode this skill exists to prevent.
Read tools (always available, safe to use during planning):
| Tool | What it gives you |
|---|---|
ips_list_children | direct children of an object (id/name/type). Start at object_id=0 for the top level. |
ips_get_object | metadata of any object: type, parent, children, ident. |
ips_get_object_tree | a whole nested subtree {id,name,type,children} at once (max_depth) — far fewer round-trips than walking level by level. |
ips_find_object_by_name | resolve an object ID from its exact name under a parent. |
ips_get_variable | variable metadata + current value (type, profile, timestamps). |
ips_get_value | just the current value of a variable. |
ips_get_variable_by_path | a variable's value by object path (Räume/Büro/Zustand) instead of its ID. |
ips_get_script_content | the full PHP source of a script. |
ips_snapshot_variables | capture the current values of several variables (keep it for an after-diff). |
ips_diff_variables | diff a previous snapshot against live values → what changed (verify the effect of a change). |
ips_export_subtree | serialize a subtree to rich JSON for backup/migration (variables type+profile+value, script content, event/instance/link detail). |
Write/dev tools (only after an approved plan; gated by IPS_ENABLE_WRITE):
| Tool | Effect |
|---|---|
ips_set_value | write a variable value directly (no device action). |
ips_request_action | actuate a device (runs the variable's action) — the correct way to control actuators. |
ips_run_script | execute a script (fire-and-confirm, no output). |
ips_run_script_capture | execute a script and capture its output — the build→run→inspect loop (see note). |
ips_set_script_content | overwrite a script's full PHP source. |
ips_create_script | create a new PHP script (parent + name + content). |
ips_create_category | create a category (structure the tree). |
ips_create_variable | create a typed variable (boolean/integer/float/string, optional profile). |
ips_create_event | create an event shell (triggered/cyclic/weekly); detailed config via ips_call. |
ips_import_subtree | mechanically recreate a subtree from ips_export_subtree JSON (categories/variables/scripts) under a target parent → old→new id_map; instances/events/links are skipped (handled by the ips-migration skill). |
ips_call | generic gateway to any IP-Symcon function for everything without a dedicated tool (instances, profiles, event triggers, rename, move, delete…). |
`ips_run_script_capture` captures the script's OUTPUT (what itecho/return(that comes back empty). Have the scriptechoits result.
If a write tool returns "Write/dev tools are disabled", IPS_ENABLE_WRITE is not set to true — tell the user, don't try to work around it.
If the server is configured with multiple named instances (IPS_INSTANCES_FILE), every tool takes an optional `instance` (e.g. home, linux); omit it for the default. This is how you read from one system and write to another — e.g. migrating a subtree from an old IP-Symcon to a new one. Single-instance setups ignore it.
Everything is one tree of objects, each with an integer ID (root = 0). Object types:
0 Boolean, 1 Integer, 2 Float, 3 String. Avariable may have a profile (formatting + range) and an action — if it has an action, control it with ips_request_action, not ips_set_value, so the device reacts.
GetValue, SetValue,RequestAction, IPS_*) is available inside scripts.
scheduled (weekly plan). Events run a script or contain their own action.
ips_list_children(0) lists the top level; descend with ips_list_children / ips_get_object_tree, or jump to a known name with ips_find_object_by_name. Read a variable's real value before reasoning about it.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.