Home / Subagents / ops:home-agent
ops:home-agent
Lifecycle-Innovations-Limited/claude-opsSubagent
OPS specialist: Homey Pro probe agent
Why this score
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.
| Name | Score | Stars | Context | Updated |
|---|---|---|---|---|
| This oneops:home-agent Lifecycle-Innovations-Limited/claude-ops · Subagent | 63 | ★ 547 | ≈13 in chat | 17d ago |
| glowroot-ops glowroot/glowroot · Skill Both about ops | 80 | ★ 1.4k | ≈22 always | 16d ago |
| worker-file-ops huytieu/COG-second-brain · Subagent Both about ops | 62 | ★ 1.3k | ≈25 in chat | 1mo ago |
| AynOps AynOps/AynOps · MCP server Both about ops | 59 | ★ 29 | not measured | today |
| home-assistant-best-practices homeassistant-ai/skills · Skill Both about home | 78 | ★ 897 | ≈32 always | 18d ago |
| Home Assistant YAML tonylofgren/aurora-smart-home · Skill Both about home | 54 | ★ 107 | ≈29 always | 1mo ago |