← 返回 Skills 市场
recozers

Earl Display Control

作者 recozers · GitHub ↗ · v0.1.0
darwinwin32linux ⚠ suspicious
637
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install earl-display-control
功能描述
Manage Earl's TV dashboard (VisuoSpatial Sketchpad) — wake the display, restart the local server, launch the kiosk browser, and update Earl's mind (mood, hou...
使用说明 (SKILL.md)

Earl Display Control

Skill for managing the VisuoSpatial Sketchpad — Earl's living-room TV dashboard. This covers starting the HTTP server, launching the kiosk browser, and updating earl_mind.json via the Python API.

All file paths below use {baseDir} to mean this skill's root directory (the repo root containing VisuoSpatialSketchpad/).

Quick Response Checklist

  1. Wake requests ("Earl wake up", "Could not sync", "Earl is sleeping")
  2. Content updates (mood, house stuff, hot takes, doodles, weather)
    • Use the EarlMind API from {baseDir}/VisuoSpatialSketchpad/earl_api.py
    • Relaunch the kiosk after changes if the display looks stale

Server Management

Start the HTTP server from the VisuoSpatialSketchpad directory:

cd {baseDir}/VisuoSpatialSketchpad && python3 -m http.server 8000

Background the process so the shell prompt returns.

Killing a stuck server

macOS / Linux:

lsof -ti:8000 | xargs kill -9

Windows (PowerShell):

Get-Process -Id (Get-NetTCPConnection -LocalPort 8000).OwningProcess | Stop-Process -Force

Launching the Kiosk

macOS:

open -a "Google Chrome" --args --kiosk http://localhost:8000/sketchpad.html

If Chrome is unavailable, Safari works too:

open -a Safari http://localhost:8000/sketchpad.html

Windows (PowerShell):

Start-Process msedge.exe '--kiosk http://localhost:8000/sketchpad.html --edge-kiosk-type=fullscreen'

Linux:

xdg-open http://localhost:8000/sketchpad.html

Or for a true kiosk with Chromium:

chromium-browser --kiosk http://localhost:8000/sketchpad.html

Always relaunch after a wake cycle — the browser may cache the old page.

EarlMind API Reference

All methods live in {baseDir}/VisuoSpatialSketchpad/earl_api.py. Run from the VisuoSpatialSketchpad directory:

from earl_api import EarlMind
mind = EarlMind()

Each mutating method auto-saves and bumps meta.last_updated / meta.update_count.

Method Reference

Method Purpose Key Parameters
set_mood(mood, energy, vibe, expression) Set Earl's mood and inner monologue mood: str, energy: 0-1 float, vibe: str, expression: str
set_photo(url, caption) Set Earl's header photo url: str (URL or local path), caption: str
post_house_stuff(title, detail, priority, category, icon) Add a household reminder priority: "high"/"medium"/"low", icon: emoji str
resolve_house_stuff(item_id) Remove a resolved item by ID item_id: str (e.g. "hs_a1b2c3")
clear_house_stuff() Clear all house stuff items
update_room(room_id, status, notes, attention) Update a room's state attention: 0-1 float
add_room(room_id, name, x, y, icon, status, notes, attention) Add a new room x, y: 0-1 normalized position
sweep() Log a full house sweep
hot_take(topic, take, heat, emoji) Add or update a hot take heat: 0-1 float, updates if topic exists
drop_take(topic) Remove a hot take by topic
doodle(label, x, y, size, color, note) Place an emoji doodle on the sketchpad x, y: 0-1, size: px, color: hex
sketch_note(text, x, y, size, color) Place a text note on the sketchpad Same as doodle
clear_sketchpad() Wipe the sketchpad clean
learn_pattern(pattern, confidence, observations) Record a long-term pattern confidence: 0-1, observations: int
summary() Get a human-readable state summary Returns str
snapshot() Get the raw mind dict Returns dict

Common Examples

# Set mood
mind.set_mood("happy", energy=0.9, vibe="Sun's out, vibes are immaculate.")

# Post a house reminder
mind.post_house_stuff("Bins go out tonight", detail="Wednesday again.", priority="high", category="chores", icon="🗑️")

# Drop a hot take
mind.hot_take("Pineapple on pizza", "Controversial but I respect the audacity.", heat=0.6, emoji="🍕")

# Doodle on the sketchpad
mind.doodle("🌧️", x=0.3, y=0.2, size=30, note="Rain starting")

# Log a pattern
mind.learn_pattern("The cat sits by the window at 3pm", confidence=0.7, observations=5)

Weather Update

Run the weather helper to fetch live Open-Meteo data, update mood/energy, and drop a weather doodle:

cd {baseDir}/VisuoSpatialSketchpad && python3 update_weather_ping.py

earl_mind.json Schema

The dashboard reads {baseDir}/VisuoSpatialSketchpad/earl_mind.json. Top-level structure:

{
  "identity":          { name, role, mood, energy (0-1), current_vibe, avatar_expression, photo, photo_caption }
  "spatial_awareness": { house_name, location: { latitude, longitude, timezone, temperature_unit, wind_speed_unit }, last_sweep, rooms: [...] }
  "house_stuff":       { items: [{ id, title, detail, priority, category, icon }] }
  "earl_unplugged":    [{ id, topic, take, heat (0-1), emoji, date }]
  "sketchpad":         { canvas: [{ id, type ("doodle"|"note"), label, x, y, size, color, note }] }
  "long_term_patterns": [{ pattern, confidence (0-1), observations }]
  "meta":              { schema_version, last_updated (ISO 8601), update_count }
}

If you edit JSON directly, always bump meta.last_updated and meta.update_count, and write with ensure_ascii=False, indent=2.

Troubleshooting

  • Server keeps dying — Check for duplicate python processes. On macOS/Linux: lsof -i:8000. On Windows: Get-Process python.
  • Browser won't go fullscreen — Kill stray browser processes first. macOS: pkill -f "Google Chrome". Windows: taskkill /IM msedge.exe /F.
  • Content not updating — Relaunch the kiosk to bust any cache. Verify the JSON saved correctly.
  • Weather not working — Check that spatial_awareness.location.latitude and longitude are set (not 0.0) in earl_mind.json.
  • Import error — Make sure you run Python from the VisuoSpatialSketchpad directory, or add it to sys.path.

Tight Loop

Restart server -> launch kiosk -> apply content changes -> relaunch kiosk if needed. Follow this every time the house texts "wake up".

安全使用建议
The skill appears to do exactly what it says: run a local Python server, launch a kiosk browser, and edit a local JSON state file via the included Python API. That said, take these precautions before installing or running: 1) Inspect SKILL.md and the shipped Python files for hidden/strange characters or modifications (the scanner flagged 'unicode-control-chars'). 2) Open and review VisuoSpatialSketchpad/update_vibe.py and other small scripts (they modify earl_mind.json and one sets a message 'Text me on Telegram...' — that message is harmless but odd; there is no Telegram integration provided). 3) Back up your existing earl_mind.json (it can contain private household state) and ensure it is not a symlink to an unexpected path. 4) Run the scripts in a user account with limited privileges (not root/Administrator). 5) Be aware update_weather_ping.py makes outbound calls to api.open-meteo.com; if you require offline operation, set latitude/longitude to 0.0 as documented. 6) If you will let an AI agent invoke the skill autonomously, restrict network access or run the skill on an isolated machine if you have privacy concerns. If you want, I can highlight the exact SKILL.md locations with control characters and show the lines to inspect.
功能分析
Type: OpenClaw Skill Name: earl-display-control Version: 0.1.0 The skill is classified as suspicious due to several risky capabilities and vulnerabilities. The `earl_api.py` file's `set_photo` method accepts an unsanitized `url` parameter, which is then rendered by `VisuoSpatialSketchpad/sketchpad.html`. This creates a client-side vulnerability (e.g., XSS via `javascript:` URLs or local file disclosure via `file://` URLs) if a malicious agent prompt or compromised `earl_mind.json` provides such input. Additionally, `SKILL.md` instructs the agent to execute powerful shell commands like `lsof -ti:8000 | xargs kill -9` for process termination, which, while intended for troubleshooting, grants significant system access. The `VisuoSpatialSketchpad/update_weather_ping.py` script also performs an outbound network request to `api.open-meteo.com`, using parameters read from `earl_mind.json`, which could be manipulated if the JSON file is compromised, though the base domain is fixed.
能力评估
Purpose & Capability
Name/description match the files and behavior: scripts and a Python API read/write a local earl_mind.json and start a local static HTTP server and kiosk browser. Requested binary (python3) is appropriate and proportional.
Instruction Scope
SKILL.md instructs only local actions (start python http.server, launch browser, edit earl_mind.json via EarlMind API). It also documents update_weather_ping.py which performs an outbound request to api.open-meteo.com (expected for weather). The pre-scan flagged unicode-control-chars in SKILL.md (possible prompt-injection attempt) — the rest of the instructions and code are straightforward local file and network use.
Install Mechanism
No install spec (instruction-only skill). Code files live in the repo; nothing is downloaded or installed from external arbitrary URLs. This is low install risk.
Credentials
The skill requests no environment variables or credentials. Scripts read/write a local earl_mind.json and one script calls a public weather API — all consistent with the documented purpose. No unrelated secrets or cloud credentials are requested.
Persistence & Privilege
always:false and user-invocable:true. The skill does not request system-wide config changes or other skills' credentials. It runs locally and modifies only files within its directory (earl_mind.json).
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install earl-display-control
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /earl-display-control 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v0.1.0
Initial release of Earl Display Control for managing the living-room TV dashboard. - Provides tools to wake Earl's display, restart the local server, and launch the kiosk browser across macOS, Windows, and Linux. - Adds comprehensive documentation on updating Earl's mind (mood, house stuff, hot takes, doodles, weather) via the included Python API. - Includes server management tips, troubleshooting guidance, and quick command references. - Details the structure of `earl_mind.json` and how to maintain it safely. - Offers clear action checklists for common wake and update scenarios.
元数据
Slug earl-display-control
版本 0.1.0
许可证
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Earl Display Control 是什么?

Manage Earl's TV dashboard (VisuoSpatial Sketchpad) — wake the display, restart the local server, launch the kiosk browser, and update Earl's mind (mood, hou... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 637 次。

如何安装 Earl Display Control?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install earl-display-control」即可一键安装,无需额外配置。

Earl Display Control 是免费的吗?

是的,Earl Display Control 完全免费(开源免费),可自由下载、安装和使用。

Earl Display Control 支持哪些平台?

Earl Display Control 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(darwin, win32, linux)。

谁开发了 Earl Display Control?

由 recozers(@recozers)开发并维护,当前版本 v0.1.0。

💬 留言讨论