Files
Kao/CLAUDE.md
Spencer Grimes 53e6f0bcdd Add sleep mode and documentation
- Sleep/wake endpoints for Home Assistant webhooks
- Sleep state: dim ( -_-)zzZ with slow breathing animation
- Updated CLAUDE.md with full technical reference
- Added README.md with user guide and HA integration examples

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 21:43:25 -06:00

4.3 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Project Overview

Sentry-Emote is a minimalist system status monitor designed for an old Pixel phone used as an ambient display. It uses ASCII "emotes" to represent system health instead of complex graphs.

Architecture

Publisher/Subscriber model:

┌─────────────┐     POST /event      ┌─────────────┐     GET /status     ┌─────────────┐
│  Detectors  │ ──────────────────▶  │  Aggregator │ ◀────────────────── │   Emote-UI  │
│  (sensors)  │                      │   (broker)  │                     │  (display)  │
└─────────────┘                      └─────────────┘                     └─────────────┘
  • Aggregator (aggregator.py) — Flask service managing the event queue and priority logic
  • Detectors (detectors/*.py) — Independent scripts monitoring system metrics
  • Emote-UI (index.html) — OLED-optimized web frontend
  • Sentry (sentry.py) — Unified entry point managing all processes

Quick Start

python -m venv venv
source venv/bin/activate  # or .\venv\Scripts\activate on Windows
pip install -r requirements.txt
python sentry.py

UI available at http://localhost:5000

Configuration

Edit config.json to configure detectors:

{
  "aggregator_url": "http://localhost:5000",
  "aggregator": { "script": "aggregator.py" },
  "detectors": [
    {
      "name": "cpu",
      "enabled": true,
      "script": "detectors/cpu.py",
      "env": { "CHECK_INTERVAL": "30", "THRESHOLD_WARNING": "85", "THRESHOLD_CRITICAL": "95" }
    }
  ]
}

Detectors

Detector Script Required Env Vars
Disk Space detectors/disk_space.py
CPU detectors/cpu.py
Memory detectors/memory.py
Service detectors/service.py SERVICES (comma-separated process names)
Network detectors/network.py HOSTS (comma-separated hostnames/IPs)

All detectors support: AGGREGATOR_URL, CHECK_INTERVAL, THRESHOLD_WARNING, THRESHOLD_CRITICAL

API Endpoints

Endpoint Method Description
/event POST Register event: {"id": "name", "priority": 1-4, "message": "optional", "ttl": seconds}
/clear POST Clear event: {"id": "name"}
/sleep POST Enter sleep mode (for Home Assistant)
/wake POST Exit sleep mode
/status GET Current state JSON
/events GET List active events

Priority System

Lower number = higher priority. Events with a ttl auto-expire (heartbeat pattern).

Priority State Emote Color Animation
1 Critical ( x_x) Red shaking
2 Warning ( o_o) Yellow breathing
3 Notify ( 'o') Blue popping
4 Optimal varies Green varies

Personality System

The optimal state cycles through emotes with paired animations every 5 minutes:

Emote Animation Vibe
( ^_^) breathing calm
( ᵔᴥᵔ) floating dreamy
(◕‿◕) bouncing cheerful
( ・ω・) swaying curious
( ˘▽˘) breathing cozy

Additional states:

  • Idle expressions (15% chance): ( -_^), ( ^_~), ( ᵕ.ᵕ) with blink animation
  • Recovery celebration: \(^o^)/ with bounce for 5 seconds after issues resolve
  • Connection lost: ( ?.?) gray, searching animation
  • Sleep mode: ( -_-)zzZ dim, very slow breathing

File Structure

├── sentry.py           # Unified entry point
├── aggregator.py       # Event broker/API server
├── index.html          # OLED-optimized frontend
├── config.json         # Runtime configuration
├── detectors/
│   ├── disk_space.py
│   ├── cpu.py
│   ├── memory.py
│   ├── service.py
│   └── network.py
├── requirements.txt
└── SPEC.md             # Original project specification