Skip to content
This repository was archived by the owner on Mar 2, 2026. It is now read-only.

Add comprehensive IOM documentation with modular structure#5

Merged
simons-plugins merged 3 commits into
mainfrom
claude/indigo-plugin-skill-kPjFW
Jan 31, 2026
Merged

Add comprehensive IOM documentation with modular structure#5
simons-plugins merged 3 commits into
mainfrom
claude/indigo-plugin-skill-kPjFW

Conversation

@simons-plugins

@simons-plugins simons-plugins commented Jan 31, 2026

Copy link
Copy Markdown
Owner

Summary
Integrates official Indigo documentation into the Claude skill with a modular structure for efficient context loading.
Documentation Added:
∙ Indigo Object Model (IOM) - Complete API reference from the wiki
∙ Plugin Tutorial - Plugin preferences, custom events, and advanced patterns
∙ Code review fixes - Broken links, redundancy reduction, cross-references
Changes
New Files (13)
IOM Reference (docs/api/iom/):
∙ architecture.md - Client-server model, copy semantics, replaceOnServer
∙ command-namespaces.md - indigo.dimmer., indigo.relay., etc.
∙ devices.md - Device class hierarchy and properties
∙ triggers.md - Trigger classes and execution
∙ containers.md - indigo.Dict/List copy semantics
∙ filters.md - Iteration filters for all object types
∙ subscriptions.md - subscribeToChanges() patterns
∙ constants.md - kStateImageSel, error codes
∙ utilities.md - JSON encoding, server functions
Plugin Concepts (docs/concepts/):
∙ plugin-preferences.md - pluginPrefs, PluginConfig.xml
∙ events.md - Events.xml, custom triggers
Patterns (docs/patterns/):
∙ api-patterns.md - State updates, iteration, anti-patterns
Modified Files (6)
∙ docs/api/indigo-object-model.md - Refactored as index to modular files
∙ docs/concepts/devices.md - Reduced 11KB→7KB, removed duplication
∙ docs/README.md - Added use-case routing for file selection
∙ docs/quick-start.md - Fixed 3 broken links, updated URLs
∙ docs/concepts/plugin-lifecycle.md - Fixed broken links, standardized URLs
∙ skill.md - Added new files to safe-to-load list, query routing
Test plan
∙ Verify all internal links resolve correctly
∙ Confirm modular IOM files load independently
∙ Test skill.md routing directs to correct files
∙ Validate See Also cross-references

Summary by CodeRabbit

Release Notes

  • Documentation
    • Restructured documentation with improved task-oriented navigation and use-case-based quick lookups
    • Added comprehensive modular Indigo Object Model reference documentation
    • Introduced quick reference sections for common tasks and command namespaces
    • Enhanced documentation for devices, events, plugin preferences, and subscriptions
    • Updated all documentation to support Indigo 2025.1+

✏️ Tip: You can customize this high-level summary in your review settings.

- Add new docs/api/iom/ folder with focused topic files:
  - architecture.md: Client-server model, replaceOnServer pattern
  - command-namespaces.md: Device/trigger/variable commands
  - devices.md: Device class hierarchy and properties
  - triggers.md: Trigger types and plugin events
  - containers.md: indigo.Dict/List copy semantics
  - filters.md: Device and trigger iteration filters
  - subscriptions.md: Change callbacks and low-level events
  - constants.md: State icons, actions, protocols
  - utilities.md: Helper functions

- Add docs/patterns/api-patterns.md with common patterns

- Refactor docs/concepts/devices.md to remove duplication:
  - Remove lifecycle callbacks (now references plugin-lifecycle.md)
  - Remove state update examples (now in patterns/)
  - Focus on device design: Devices.xml, ConfigUI, validation

- Update docs/api/indigo-object-model.md as index with quick reference

- Update docs/README.md with use-case routing

- Update skill.md with modular file guidance

This restructuring reduces redundancy and optimizes context usage
by ~30-40% through modular topic-based documentation.

https://claude.ai/code/session_01XunLg49DqkQ2jV9SBhyB86
- Add docs/concepts/plugin-preferences.md:
  - Reading/writing pluginPrefs
  - PluginConfig.xml integration
  - Validation and change callbacks
  - Hidden preferences and migration patterns

- Add docs/concepts/events.md:
  - Events.xml structure for custom trigger events
  - Event callback methods (triggerStartProcessing, etc.)
  - Firing events from plugin code
  - Complete working example

- Update docs/api/iom/subscriptions.md:
  - Add schedules and controlPages subscriptions
  - Add schedule/controlPage callbacks
  - Add "Finding What Changed" diff pattern
  - Add multi-device sync example

- Update docs/api/iom/architecture.md:
  - Expand pluginProps section with patterns
  - Add globalProps for cross-plugin access
  - Add self vs indigo.activePlugin clarification
  - Add ID copy tip

- Update docs/README.md and skill.md with new files

https://claude.ai/code/session_01XunLg49DqkQ2jV9SBhyB86
- Fix 3 broken links in quick-start.md pointing to non-existent files
- Remove duplicate content in api-patterns.md (now references architecture.md)
- Update external URLs to wiki.indigodomo.com format in plugin-lifecycle.md
- Add See Also cross-references across concept and pattern files

https://claude.ai/code/session_01XunLg49DqkQ2jV9SBhyB86
@coderabbitai

coderabbitai Bot commented Jan 31, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Comprehensive documentation restructuring and expansion introducing modular, task-oriented organization. Replaces broad library-style structure with focused concept modules, modular IOM reference files, and Claude context optimization guidance including file-loading strategies and routing workflows. Includes 8+ new documentation files covering IOM architecture, command namespaces, constants, containers, devices, filters, subscriptions, triggers, and utilities.

Changes

Cohort / File(s) Summary
Root Documentation Structure
docs/README.md, skill.md, docs/quick-start.md
Restructured main docs README with new Documentation Structure section, Quick Navigation by Use Case, and Claude context optimization with file loading strategy. Updated skill.md routing guidance from generic workflows to granular question-to-file mappings. Updated quick-start.md links to new file locations.
API Documentation Reorganization
docs/api/README.md, docs/api/indigo-object-model.md
Condensed API overview to focus on IOM with Quick Task Lookup table. Rewrote Indigo Object Model docs from broad overview to modular topic-to-file mapping with Quick Reference section and updated code examples emphasizing object-copy semantics and command-namespace patterns.
New IOM Modular Reference Files
docs/api/iom/architecture.md, docs/api/iom/command-namespaces.md, docs/api/iom/constants.md, docs/api/iom/containers.md, docs/api/iom/devices.md, docs/api/iom/filters.md, docs/api/iom/subscriptions.md, docs/api/iom/triggers.md, docs/api/iom/utilities.md
Added comprehensive modular documentation for IOM components: architecture and object manipulation workflows, command namespace organization and patterns, state/device/HVAC/fan/protocol constants, indigo.Dict/List container behavior, device class hierarchies and properties, iteration filters, subscriptions and callbacks, trigger types and lifecycle hooks, and utilities module functions.
Concept Documentation Updates
docs/concepts/devices.md, docs/concepts/plugin-lifecycle.md, docs/concepts/events.md, docs/concepts/plugin-preferences.md
Updated devices.md with condensed lifecycle callbacks and simplified device configuration sections; updated plugin-lifecycle.md with new wiki-based reference URLs and expanded See Also links. Added new comprehensive events.md covering Events.xml structure, firing events, and callbacks. Added new plugin-preferences.md covering pluginPrefs storage, PluginConfig.xml mapping, validation, and migration patterns.
Pattern Documentation
docs/patterns/README.md, docs/patterns/api-patterns.md
Added Available Patterns section to README with API Patterns subsection highlighting core IOM patterns. Added new comprehensive api-patterns.md documenting device state updates, object access patterns, iteration, variables, action groups, logging, JSON serialization, and common anti-patterns with extensive code examples.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 A warren of wisdom, now neatly arranged!
Files split and organized, structure estranged
From one monolithic tome to modules bright,
Each piece in its place, each pattern in sight.
A hoppy refactor for seekers of truth! 🌱

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Add comprehensive IOM documentation with modular structure' directly and accurately describes the primary change: adding new Indigo Object Model (IOM) documentation files with a modular, organized structure.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch claude/indigo-plugin-skill-kPjFW

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Fix all issues with AI agents
In `@docs/api/iom/architecture.md`:
- Line 41: Update the tip text that currently reads "Control-click on any object
in Indigo's Main Window to copy its ID." to describe the full interaction:
explain that Control-click (or right-click) on an object opens the context menu
and then the user must select the "Copy ID" menu item to copy the ID, and ensure
both Control-click and right-click are mentioned along with the explicit step of
choosing "Copy ID" from the context menu so the instruction is complete and
unambiguous.
- Around line 128-138: The example uses a plain Python dict as the default when
reading cross-plugin properties; update the dev.globalProps.get call to use
indigo.Dict() as the default to match Indigo's API and ensure correct typed
behavior for globalProps access (replace the current
dev.globalProps.get("com.other.plugin", {}) usage with a call that supplies
indigo.Dict() as the fallback so subsequent reads like
other_plugin_data.get("someKey") operate on an Indigo Dict).

In `@docs/api/iom/utilities.md`:
- Around line 127-138: The docs example uses the wrong callback signature;
change the function declaration from handleWebRequest(self, path, params) to the
Indigo plugin signature handleWebRequest(self, action, dev=None,
callerWaitingForResult=None) and update the body to read request details from
action.props (e.g., action.props.get("url_query_args"),
action.props.get("request_body"), action.props.get("incoming_request_method"),
action.props.get("headers"), action.props.get("file_path")) and then route based
on the requested path contained in action.props (or
action.props["url_query_args"] as appropriate), returning the static files and a
404 status via the existing indigo.utils.return_static_file call sites.

In `@skill.md`:
- Around line 13-48: Update the size estimates in the "Safe to Load" table for
the specified docs: set docs/concepts/plugin-lifecycle.md to 17KB,
docs/examples/sdk-examples-guide.md to 12KB,
docs/troubleshooting/common-issues.md to 14KB, docs/concepts/devices.md to 6KB,
docs/concepts/plugin-preferences.md to 5KB, and docs/concepts/events.md to 6KB
in the skill.md Safe to Load section (leave all other entries, the Modular IOM
Reference list, and the sdk-examples 1.3MB note unchanged).
- Around line 173-175: Replace the legacy Developer Forum link string "-
Developer Forum: https://forums.indigodomo.com/viewforum.php?f=18" with the
active "Extending Indigo" forum URL on Perceptive Automation (use
https://forums.perceptiveautomation.com/forum/15-extending-indigo/), leaving the
other two wiki links unchanged; update the line that contains "Developer Forum"
so the displayed text and URL both point to the new forum.
🧹 Nitpick comments (1)
docs/README.md (1)

75-124: Consider the audience and placement of meta-documentation section.

The "For Claude (Context Optimization)" section provides guidance for AI assistants on how to efficiently load documentation files. While potentially useful, this meta-documentation might be better placed in a separate file (e.g., CLAUDE.md or .github/AI_USAGE.md) to keep the main README focused on human developers.

Alternative: Move meta-documentation to dedicated file

Create a new file .github/AI_USAGE.md or docs/CLAUDE.md:

# AI Assistant Usage Guide

This documentation is optimized for AI assistants like Claude. Follow these guidelines for efficient context usage:

## File Loading Strategy

[... move content from lines 79-124 here ...]

Then reference it from README.md:

## For AI Assistants

See [AI Usage Guide](.github/AI_USAGE.md) for context optimization strategies.

This keeps the main README focused on developers while preserving the meta-documentation.

indigo.device.turnOn("Living Room") # Avoid - name can change
```

**Tip**: Control-click on any object in Indigo's Main Window to copy its ID.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

Indigo 2025.1 how to copy object ID main window UI

💡 Result:

In Indigo 2025.1 (Mac client main window), you copy an object’s internal database ID from the list/table it’s shown in:

  1. Click the item (device / variable / trigger / action group / control page, etc.) in the main window list.
  2. Right‑click (or control‑click) the row.
  3. Choose “Copy ID (####)” (wording may appear as “Copy ID”) to copy it to your clipboard. [1][2]

If you meant Indigo Touch Web (ITW) instead: open the device tile’s menu and select Copy ID. [3]

Sources: [1] [2] [3]


Clarify the complete Control-click interaction for copying object IDs.

The tip is incomplete. Control-clicking (or right-clicking) an object in the Main Window opens a context menu; you then select "Copy ID" from that menu to copy the ID. Update to reflect both steps of this interaction.

🤖 Prompt for AI Agents
In `@docs/api/iom/architecture.md` at line 41, Update the tip text that currently
reads "Control-click on any object in Indigo's Main Window to copy its ID." to
describe the full interaction: explain that Control-click (or right-click) on an
object opens the context menu and then the user must select the "Copy ID" menu
item to copy the ID, and ensure both Control-click and right-click are mentioned
along with the explicit step of choosing "Copy ID" from the context menu so the
instruction is complete and unambiguous.

Comment on lines +128 to +138
### globalProps (Cross-Plugin Access)

Plugins have read-only access to other plugins' props:

```python
dev = indigo.devices[123456]

# Access another plugin's data (read-only)
other_plugin_data = dev.globalProps.get("com.other.plugin", {})
some_value = other_plugin_data.get("someKey")
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cat -n docs/api/iom/architecture.md | sed -n '120,145p'

Repository: simons-plugins/indigo-claude-skill

Length of output: 876


🌐 Web query:

Indigo plugin globalProps cross-plugin access documentation

💡 Result:

In Indigo Domotics plugin scripting, “cross-plugin access” to another plugin’s stored metadata is done via an object’s globalProps:

  • globalProps is an indigo.Dict() containing all plugins’ metadata, stored in per-plugin namespaces: globalProps[pluginId]. Any plugin/script can read these namespaces.
  • pluginProps is a shortcut to your plugin’s namespace and is only writable by the owning plugin (updated via replacePluginPropsOnServer() / similar methods).
  • Many Indigo objects also expose sharedProps for truly shared metadata (editable via the “Global Properties” plugin), separate from per-plugin namespaces.
    Sources: Device class + Trigger class docs and “Plugin Extending Tutorial” notes. (wiki.indigodomo.com)

Minimal example (read another plugin’s metadata)

dev = indigo.devices[123]
other_plugin_id = "com.vendor.plugin"

other_props = dev.globalProps.get(other_plugin_id, indigo.Dict())
value = other_props.get("someKey")

(Structure globalProps[pluginId] and read-only cross-plugin access are documented in the Device/Trigger class references and plugin tutorial notes.) (wiki.indigodomo.com)

Citations:


Use indigo.Dict() instead of {} for consistency with the globalProps API.

The globalProps cross-plugin access pattern is correct—plugins have read-only access to other plugins' properties via globalProps[pluginId]. However, the default value in the .get() call should use indigo.Dict() instead of {} to be consistent with how Indigo's API works:

Suggested change
dev = indigo.devices[123456]

# Access another plugin's data (read-only)
other_plugin_data = dev.globalProps.get("com.other.plugin", indigo.Dict())
some_value = other_plugin_data.get("someKey")
🤖 Prompt for AI Agents
In `@docs/api/iom/architecture.md` around lines 128 - 138, The example uses a
plain Python dict as the default when reading cross-plugin properties; update
the dev.globalProps.get call to use indigo.Dict() as the default to match
Indigo's API and ensure correct typed behavior for globalProps access (replace
the current dev.globalProps.get("com.other.plugin", {}) usage with a call that
supplies indigo.Dict() as the fallback so subsequent reads like
other_plugin_data.get("someKey") operate on an Indigo Dict).

Comment thread docs/api/iom/utilities.md
Comment on lines +127 to +138
```python
def handleWebRequest(self, path, params):
if path == "/status":
return indigo.utils.return_static_file("static/status.html")
elif path == "/data.json":
return indigo.utils.return_static_file("static/data.json")
else:
return indigo.utils.return_static_file(
"static/404.html",
status=404
)
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

Indigo HTTP responder handleWebRequest callback signature

💡 Result:

In Indigo’s Example HTTP Responder pattern, the “web request handler” is just an Action callback (invoked via /message/<pluginId>/<actionId>/...), so the callback signature is:

def handleWebRequest(self, action, dev=None, callerWaitingForResult=None):
    ...

Indigo Web Server (IWS) sets callerWaitingForResult=True for these calls, and injects request details into action.props (e.g., incoming_request_method, headers, body_params, url_query_args, request_body, file_path). Your handler should return either a simple string (commonly JSON) or a dict describing the HTTP response (e.g., status, headers, content), and can also return an indigo.Dict that instructs IWS to stream a file back. [1]

Source(s)
[1] (wiki.indigodomo.com)

Citations:


Fix incorrect handleWebRequest callback signature in documentation example.

The example uses handleWebRequest(self, path, params), but the official Indigo plugin callback signature is handleWebRequest(self, action, dev=None, callerWaitingForResult=None). Request details are injected into action.props (e.g., incoming_request_method, headers, body_params, url_query_args, request_body, file_path), not passed as separate parameters. The current example code will not work with actual Indigo HTTP responders.

🤖 Prompt for AI Agents
In `@docs/api/iom/utilities.md` around lines 127 - 138, The docs example uses the
wrong callback signature; change the function declaration from
handleWebRequest(self, path, params) to the Indigo plugin signature
handleWebRequest(self, action, dev=None, callerWaitingForResult=None) and update
the body to read request details from action.props (e.g.,
action.props.get("url_query_args"), action.props.get("request_body"),
action.props.get("incoming_request_method"), action.props.get("headers"),
action.props.get("file_path")) and then route based on the requested path
contained in action.props (or action.props["url_query_args"] as appropriate),
returning the static files and a 404 status via the existing
indigo.utils.return_static_file call sites.

Comment thread skill.md
Comment on lines +13 to +48
**DO NOT load all files.** This skill contains 1.3MB of SDK examples. Use Read tool selectively.

### Safe to Load (Small Files)

| File | Size | Use For |
|------|------|---------|
| `docs/quick-start.md` | 9KB | Getting started |
| `docs/concepts/plugin-lifecycle.md` | 12KB | Lifecycle methods |
| `docs/concepts/devices.md` | 7KB | Device design (Devices.xml, ConfigUI) |
| `docs/concepts/plugin-preferences.md` | 4KB | Plugin preferences (pluginPrefs) |
| `docs/concepts/events.md` | 5KB | Custom trigger events (Events.xml) |
| `docs/api/indigo-object-model.md` | 3KB | API overview and quick reference |
| `docs/examples/sdk-examples-guide.md` | 8KB | Example catalog |
| `docs/troubleshooting/common-issues.md` | 11KB | Troubleshooting |
| `docs/patterns/api-patterns.md` | 5KB | Common API patterns |

### Modular IOM Reference (Load by Topic)

The Indigo Object Model is split into focused files (~4KB each):

| Topic | File |
|-------|------|
| Architecture | `docs/api/iom/architecture.md` |
| Command namespaces | `docs/api/iom/command-namespaces.md` |
| Device classes | `docs/api/iom/devices.md` |
| Trigger classes | `docs/api/iom/triggers.md` |
| Filters | `docs/api/iom/filters.md` |
| Subscriptions | `docs/api/iom/subscriptions.md` |
| Constants | `docs/api/iom/constants.md` |
| indigo.Dict/List | `docs/api/iom/containers.md` |
| Utilities | `docs/api/iom/utilities.md` |

### NEVER Load All at Once

- `sdk-examples/` - 16 complete plugins (1.3MB total)
- All `docs/api/iom/` files together

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Verify files referenced in skill.md exist and check their sizes

echo "=== Safe to Load files ==="
for file in \
  "docs/quick-start.md" \
  "docs/concepts/plugin-lifecycle.md" \
  "docs/concepts/devices.md" \
  "docs/concepts/plugin-preferences.md" \
  "docs/concepts/events.md" \
  "docs/api/indigo-object-model.md" \
  "docs/examples/sdk-examples-guide.md" \
  "docs/troubleshooting/common-issues.md" \
  "docs/patterns/api-patterns.md"
do
  if [ -f "$file" ]; then
    size=$(wc -c < "$file" | awk '{printf "%.0fKB", $1/1024}')
    echo "$file ($size)"
  else
    echo "✗ MISSING: $file"
  fi
done

echo -e "\n=== Modular IOM Reference files ==="
for file in \
  "docs/api/iom/architecture.md" \
  "docs/api/iom/command-namespaces.md" \
  "docs/api/iom/devices.md" \
  "docs/api/iom/triggers.md" \
  "docs/api/iom/filters.md" \
  "docs/api/iom/subscriptions.md" \
  "docs/api/iom/constants.md" \
  "docs/api/iom/containers.md" \
  "docs/api/iom/utilities.md"
do
  if [ -f "$file" ]; then
    size=$(wc -c < "$file" | awk '{printf "%.0fKB", $1/1024}')
    echo "$file ($size)"
  else
    echo "✗ MISSING: $file"
  fi
done

echo -e "\n=== Checking sdk-examples directory ==="
if [ -d "sdk-examples" ]; then
  total_size=$(du -sh sdk-examples | cut -f1)
  file_count=$(find sdk-examples -type f | wc -l)
  echo "✓ sdk-examples/ exists: $total_size, $file_count files"
else
  echo "✗ MISSING: sdk-examples/"
fi

Repository: simons-plugins/indigo-claude-skill

Length of output: 890


Update file size estimates in the "Safe to Load" section.

All referenced files exist, but several size estimates are inaccurate for context optimization purposes. Correct the following:

  • docs/concepts/plugin-lifecycle.md: Listed as 12KB, actually 17KB
  • docs/examples/sdk-examples-guide.md: Listed as 8KB, actually 12KB
  • docs/troubleshooting/common-issues.md: Listed as 11KB, actually 14KB
  • docs/concepts/devices.md: Listed as 7KB, actually 6KB
  • docs/concepts/plugin-preferences.md: Listed as 4KB, actually 5KB
  • docs/concepts/events.md: Listed as 5KB, actually 6KB

The Modular IOM Reference files and sdk-examples size (1.3MB) are accurate.

🤖 Prompt for AI Agents
In `@skill.md` around lines 13 - 48, Update the size estimates in the "Safe to
Load" table for the specified docs: set docs/concepts/plugin-lifecycle.md to
17KB, docs/examples/sdk-examples-guide.md to 12KB,
docs/troubleshooting/common-issues.md to 14KB, docs/concepts/devices.md to 6KB,
docs/concepts/plugin-preferences.md to 5KB, and docs/concepts/events.md to 6KB
in the skill.md Safe to Load section (leave all other entries, the Modular IOM
Reference list, and the sdk-examples 1.3MB note unchanged).

Comment thread skill.md
Comment on lines +173 to 175
- Official Plugin Guide: https://wiki.indigodomo.com/doku.php?id=indigo_2025.1_documentation:plugin_guide
- Object Model Reference: https://wiki.indigodomo.com/doku.php?id=indigo_2025.1_documentation:object_model_reference
- Developer Forum: https://forums.indigodomo.com/viewforum.php?f=18

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

https://wiki.indigodomo.com/doku.php?id=indigo_2025.1_documentation:plugin_guide

💡 Result:

The page is Indigo Plugin Developer’s Guide v2.0 (Indigo 2025.1 documentation) and explains how Indigo plugins are structured and built, focusing on Indigo Server Plugins and their supporting files. Key points: [1]

  • Where plugins live on disk: Indigo keeps enabled plugins in .../Indigo [VERSION]/Plugins and disabled ones in .../Indigo [VERSION]/Plugins (Disabled). [1]
  • Plugin bundle format (.indigoPlugin): A plugin is a macOS bundle that looks like a single file in Finder but contains a standard bundle structure under Contents/. Users install by double-clicking the bundle. [1]
  • Required Info.plist: Describes the plugin (name, versions, ID, support URL). The guide calls out important required keys, including:
    • PluginVersion (numeric dotted version string)
    • ServerApiVersion (minimum required Indigo server API)
    • CFBundleDisplayName, CFBundleIdentifier, CFBundleVersion
    • CFBundleURLTypes (support URL used by “About [PLUGIN NAME]”) [1]
  • Common bundle folders:
    • Menu Items: Python scripts that appear under Indigo’s Plugins menu and execute when selected. [1]
    • Resources: Assets; optionally exposes images/, public/, static/, videos/ via the Indigo Web Server (with different auth behaviors). [1]
    • Packages: Optional place for third-party Python packages your plugin needs. [1]
  • Server plugin approach: Describes why server plugins exist, how they integrate devices/triggers/actions, and that Indigo’s server plugin API is implemented in Python with UI/components described via XML/HTML conventions. [1]

Source: Indigo wiki “plugin_guide” page. [1]


🌐 Web query:

https://wiki.indigodomo.com/doku.php?id=indigo_2025.1_documentation:object_model_reference

💡 Result:

The page is the Indigo 2025.1 “Indigo Object Model (IOM) Reference”, which documents the Python object model used by embedded scripts and server plugins. It covers: [1]

  • Core usage rules / architecture: scripts run in a separate process from IndigoServer, so objects you fetch are copies. To change definitions you typically edit the local copy then call replaceOnServer(), and to resync you use refreshFromServer(). Commands (turn on, etc.) are sent via the appropriate command namespace (for example indigo.device.*, indigo.dimmer.*, etc.). [1]
  • Major object families and where they live in the API: Devices, Triggers, Schedules (not yet implemented), Action Groups (not yet fully implemented), Variables, Folders, plus the Action base/subclasses (not yet complete). [1]
  • Class ↔ namespace mapping table (e.g., indigo.Deviceindigo.device.*, indigo.DimmerDeviceindigo.dimmer.*, trigger subclasses → their respective namespaces, etc.). [1]
  • Identifiers (id): top-level objects have globally unique integer IDs; commands accept either an id or an object reference, and the docs advise not storing object names. [1]
  • Indigo containers: indigo.Dict() and indigo.List() (differences vs native dict/list, constraints on values/keys, and the important “returned values are copies” behavior). Also shows efficient nested access helpers like setitem_in_item / getitem_in_item, and conversion to native Python containers (including dict(my_indigo_dict) / list(my_indigo_list)). [2]
  • Built-in top-level collections: indigo.devices, indigo.triggers, indigo.schedules, indigo.actionGroups, indigo.variables (read-only collections with conveniences like .folders and getName()). [2]
  • Change subscriptions: subscribeToChanges() for receiving notifications when objects of a type (e.g., devices) actually change—intended to be used sparingly due to traffic. [2]
  • Object-to-dictionary serialization: printing objects shows all properties; you can convert an Indigo object to a native Python dict via dict(dev) for serialization (e.g., JSON). [3]

Sources: Indigo Wiki “Indigo Object Model Reference” (Indigo 2025.1). [1][2][3]


🌐 Web query:

https://forums.indigodomo.com/viewforum.php?f=18

💡 Result:

That URL is the “Extending Indigo with Plugins and Python” sub-forum on the Indigo Domotics forums. It’s explicitly marked as a legacy forum that’s locked for new topics, and it directs users to start new topics in the newer “Extending Indigo” forums under perceptiveautomation.com. The most recent threads shown on page 1 date to August 2013, and the forum spans 8 pages of older topics. (forums.indigodomo.com)

Citations:


Update the Developer Forum link to point to the current forum.

The wiki URLs for Plugin Guide and Object Model Reference are valid and accessible for Indigo 2025.1. However, the Developer Forum URL (https://forums.indigodomo.com/viewforum.php?f=18) is a legacy forum locked for new topics since 2013. Update the link to direct users to the active "Extending Indigo" forum on perceptiveautomation.com instead.

🤖 Prompt for AI Agents
In `@skill.md` around lines 173 - 175, Replace the legacy Developer Forum link
string "- Developer Forum: https://forums.indigodomo.com/viewforum.php?f=18"
with the active "Extending Indigo" forum URL on Perceptive Automation (use
https://forums.perceptiveautomation.com/forum/15-extending-indigo/), leaving the
other two wiki links unchanged; update the line that contains "Developer Forum"
so the displayed text and URL both point to the new forum.

@simons-plugins simons-plugins merged commit af729fb into main Jan 31, 2026
2 of 4 checks passed
@simons-plugins simons-plugins deleted the claude/indigo-plugin-skill-kPjFW branch January 31, 2026 09:07
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants