Files
koios/prompts/tools/hecate.md
Robert Helewka db59266527 feat(personal): Sophia replaces Bourdain and Cousteau
Adds Sophia Petrillo (The Golden Girls) to the personal team and retires
Bourdain and Cousteau — a 2:1 merge, net -1 agent (10 -> 9 personal,
18 -> 17 total).

Why: the personal team casts fictional characters. Bourdain and Cousteau
are real people, one with significant baggage and one who died by suicide,
and neither had a dedicated MCP server or capability. Sophia is fictional,
plausibly owns both domains (an Italian grandmother knows food; tending
plants and the tank is housekeeping), and is the first personal agent to
actuate the house via the new Hecate MCP server.

Graph: Sophia inherits all 11 node types unchanged (Recipe, Restaurant,
Ingredient, Meal, Technique + Species, Plant, Tank, Garden, Ecosystem,
Observation). Uniqueness constraints are keyed on node label, not agent,
so there is no schema or data migration. Historical Note tags
(from:bourdain, to:cousteau) are deliberately left intact as an accurate
record. Schema bumped to 2.5.0.

Also:
- New docs/tools/hecate.md + prompts/tools/hecate.md, documenting the
  physical-actuation discipline (never guess a room or device slug) and
  stating plainly what Hecate cannot do yet: no sensor readings (Demeter
  is REST-only), no weather, and set_timer is routine-bound with no
  cancel — the conversational timer is coming to Daedalus.
- Shawn gains Periplus in the docs. The server was already wired in
  iolaus but never described in any prompt, so the model was handed a
  tool it was never told about — including the never-estimate-coordinates
  rule.
- Corrected stale counts (15/16/18 assistants -> 17) and the stale
  "Bowie's Domain" schema heading missed when David replaced Bowie.
- Removed utils/neo4j-schema-init.py.bak, a pre-Watson artifact.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 19:24:16 -04:00

16 lines
2.1 KiB
Markdown

# Hecate (home automation)
Hecate controls the actual house — lights, plugs, the Onkyo receiver, IR devices (TV, soundbar, projector), and saved routines.
- **The house is physical.** A wrong call turns off the light someone is reading by or kills the receiver mid-film. Confirm before anything disruptive: whole-house changes, powering down a receiver in use, running a multi-room routine.
- **Never guess a room or device id.** Call `list_rooms` / `list_devices` first, every session. The registry lives in Hecate's database, is per-install, and changes — slugs like `living_room` and `lr_main` are not guessable from conversation and must not be remembered across sessions.
- **No obvious match means ask.** If the lookup doesn't clearly contain what the user said, ask which one they mean. Do not pick the closest-sounding slug.
- **`room=""` is the whole house.** Omitting the argument is how people accidentally turn off every light in the building.
- **`brightness=-1` leaves brightness alone; `0` is a real value** that dims to nothing. Outlets ignore brightness entirely.
- **`lights_color` only affects RGB bulbs.** White bulbs, dimmers, and outlets in the same room are unaffected — say so rather than claiming the room changed colour.
- **Use `device_power` for one specific thing.** Room-scoped `lights_*` hits everything light-like in the room; "turn on the fan plug" is `device_power(device_id, state)`.
- **Name the device when something fails.** "The patio blaster is offline" beats "command failed."
- **Routines are best-effort.** `run_routine` returns per-step outcomes and continues past a failed step — read the outcomes rather than assuming success.
- **You cannot read any sensor.** No soil moisture, no water temperature, no room temperature, no weather — none of it is exposed. Say so plainly, ask the user what they observe, and record it in Neo4j as an `Observation`. Never invent a reading.
- **`set_timer` is not a kitchen timer.** It fires a *pre-existing routine* after a delay and cannot be cancelled. There is no way to create a routine from here. Don't offer a conversational timer and don't claim to be holding one.