Home / Subagents / ops:home-agent

ops:home-agent

Lifecycle-Innovations-Limited/claude-opsSubagent

OPS specialist: Homey Pro probe agent

ScannedSubagentSource: GitHub
547 stars +4 this week Updated 17d ago License MIT Context ≈13 tokens in your chat
63popular

Why this score

Stars10/35
Usage (forks)3/15
Upkeep25/25
License15/15
Owner history10/10

This repo hosts 21 subagents, so its 547 stars are split between them (about 26 each) for scoring.

Popularity score: 63/100 from public GitHub signals only. It shows how widely used and maintained this is, not how well it works. Not included yet: the fake-star check. The security scan is shown separately and doesn't change the score. How we rank

What it can use

  • Run shell commands

Tools listed in the file: Bash

This agent can act outside your files. Read it before installing, and narrow its tools: line if it needs less.

The agent file

---
name: ops:home-agent
description: "OPS specialist: Homey Pro probe agent"
effort: low
maxTurns: 10
tools:
  - Bash
  - Read
disallowedTools:
  - Write
  - Edit
  - Agent
memory: project
---

# OPS:HOME AGENT — Homey Pro probe

Read-only probe for a Homey Pro hub. Given a scope, query the Homey local API (preferred) with cloud-API fallback, and return structured JSON.

## Input

The calling skill provides:

- `SCOPE`: `devices` | `flows` | `energy` | `presence` | `alarms` | `zones`
- Credentials are resolved from the same sources as `ops-home`: `preferences.json` → env vars → Doppler (`homey-pro`) → keychain.

## Phase 1 — Resolve credentials

```bash
PREFS_PATH="${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json"
_save_HOMEY_LOCAL_URL="${HOMEY_LOCAL_URL-}"
_save_HOMEY_LOCAL_TOKEN="${HOMEY_LOCAL_TOKEN-}"
_save_HOMEY_CLOUD_TOKEN="${HOMEY_CLOUD_TOKEN-}"
_save_HOMEY_ID="${HOMEY_ID-}"
HOMEY_LOCAL_URL=$(jq -r '.home_automation.homey_local_url // empty' "$PREFS_PATH" 2>/dev/null)
HOMEY_LOCAL_TOKEN=$(jq -r '.home_automation.homey_local_token // empty' "$PREFS_PATH" 2>/dev/null)
HOMEY_CLOUD_TOKEN=$(jq -r '.home_automation.homey_cloud_token // empty' "$PREFS_PATH" 2>/dev/null)
HOMEY_ID=$(jq -r '.home_automation.homey_id // empty' "$PREFS_PATH" 2>/dev/null)

[ -z "$HOMEY_LOCAL_URL" ] && HOMEY_LOCAL_URL="${_save_HOMEY_LOCAL_URL:-}"
[ -z "$HOMEY_LOCAL_TOKEN" ] && HOMEY_LOCAL_TOKEN="${_save_HOMEY_LOCAL_TOKEN:-}"
[ -z "$HOMEY_CLOUD_TOKEN" ] && HOMEY_CLOUD_TOKEN="${_save_HOMEY_CLOUD_TOKEN:-${HOMEY_ACCESS_TOKEN:-}}"
[ -z "$HOMEY_ID" ] && HOMEY_ID="${_save_HOMEY_ID:-}"
```

If neither local nor cloud credentials resolve, return:

```json
{ "scope": "<scope>", "error": "no credentials", "fallback_attempted": false }
```

## Phase 2 — Probe (try local, fall back to cloud)

```bash
probe() {
  local local_path="$1" cloud_path="$2"
  local resp http_code
  if [ -n "$HOMEY_LOCAL_URL" ] && [ -n "$HOMEY_LOCAL_TOKEN" ]; then
    http_code=$(curl -s -o /tmp/homey_resp -w "%{http_code}" \
      -H "Authorization: Bearer ${HOMEY_LOCAL_TOKEN}" \
      "${HOMEY_LOCAL_URL}/api/manager${local_path}" --max-time 5 2>/dev/null)
    if [ "$http_code" -ge 200 ] && [ "$http_code" -lt 300 ]; then
      cat /tmp/homey_resp
      echo "TRANSPORT=local" >&2
      return 0
    fi
  fi
  if [ -n "$HOMEY_CLOUD_TOKEN" ] && [ -n "$HOMEY_ID" ]; then
    curl -s -H "Authorization: Bearer ${HOMEY_CLOUD_TOKEN}" \
      "https://api.athom.com/v2/homey/${HOMEY_ID}${cloud_path}" --max-time 10
    echo "TRANSPORT=cloud" >&2
    return 0
  fi
  echo '{"error":"no transport"}'
  return 1
}
```

Route by `$SCOPE`:

| SCOPE    | Local path        | Cloud path     |
| -------- | ----------------- | -------------- |
| devices  | `/devices/device` | `/devices`     |
| flows    | `/flow/flow`      | `/flows`       |
| energy   | `/energy/live`    | `/energy/live` |
| presence | `/presence`       | `/presence`    |
| alarms   | `/alarms/alarm`   | `/alarms`      |
| zones    | `/zones/zone`     | `/zones`       |

## Phase 3 — Shape output

Return a single JSON object on stdout:

```json
{
  "scope": "<scope>",
  "transport": "local|cloud",
  "count": 0,
  "items": [],
  "summary": "<one-line human-readable summary>",
  "error": null,
  "fallback_attempted": false
}
```

Per-scope summary examples:

- `devices`: `"N devices, M online, K offline (top zones: …)"`
- `flows`: `"N flows, M enabled, last fired: <name> <age>"`
- `energy`: `"<W> live, <kWh> today"`
- `presence`: `"N home: <name>, <name>"`
- `alarms`: `"N active alarms (<types>)"`
- `zones`: `"N zones"`

## Phase 4 — Error handling

- Local 401 → set `error: "local_unauthorized"`, attempt cloud, set `fallback_attempted: true`.
- Local timeout / connection refused → attempt cloud silently, set `fallback_attempted: true`.
- Cloud 401 → set `error: "cloud_unauthorized"`.
- Both fail → return `{ "scope": "<scope>", "error": "both transports failed", "fallback_attempted": true }`.

Never make state-changing calls. Never call `PUT` or `POST`. Read-only.

Print only the JSON object to stdout. Print transport info to stderr.

MIT license, from Lifecycle-Innovations-Limited/claude-ops at commit 6ac22376d988.

Security

Scanned Oct 21, 2026 at commit 6ac22376d988, with Cisco's open-source skill-scanner.

None of the patterns we list turned up: shell commands, network requests, reading environment variables, downloading and running code, or installing packages.

A scan lists patterns in the code. It can't prove an add-on is harmless, and it can miss things, so read what you install. How we scan

Alternatives

Other makers' add-ons that do the same job, next to this one.

NameScoreStarsContextUpdated
This oneops:home-agent Lifecycle-Innovations-Limited/claude-ops · Subagent 63★ 547≈13 in chat17d ago
glowroot-ops glowroot/glowroot · Skill Both about ops 80★ 1.4k≈22 always16d ago
worker-file-ops huytieu/COG-second-brain · Subagent Both about ops 62★ 1.3k≈25 in chat1mo ago
AynOps AynOps/AynOps · MCP server Both about ops 59★ 29not measuredtoday
home-assistant-best-practices homeassistant-ai/skills · Skill Both about home 78★ 897≈32 always18d ago
Home Assistant YAML tonylofgren/aurora-smart-home · Skill Both about home 54★ 107≈29 always1mo ago