Implement Next Task
rvdbreemen/OTGW-firmware
Drive the autonomous 2.0.0 ESP32-S3-only async + FreeRTOS migration (epic TASK-865).
Drives an M5Paper e-ink desk display from an agent: probes device state, guides first-time setup, and pushes widgets such as calendar, todos and weather.
$ npx skills add op7418/ai-desk-card --skill ai-desk-card -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install op7418/ai-desk-card ai-desk-card --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ai-desk-card" agent skill from https://github.com/op7418/ai-desk-card/tree/main into .claude/skills/ai-desk-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ai-desk-card", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add op7418/ai-desk-card --skill ai-desk-card -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install op7418/ai-desk-card ai-desk-card --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ai-desk-card" agent skill from https://github.com/op7418/ai-desk-card/tree/main into .agents/skills/ai-desk-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ai-desk-card", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add op7418/ai-desk-card --skill ai-desk-card -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install op7418/ai-desk-card ai-desk-card --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ai-desk-card" agent skill from https://github.com/op7418/ai-desk-card/tree/main into .cursor/skills/ai-desk-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ai-desk-card", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add op7418/ai-desk-card --skill ai-desk-card -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install op7418/ai-desk-card ai-desk-card --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ai-desk-card" agent skill from https://github.com/op7418/ai-desk-card/tree/main into .gemini/skills/ai-desk-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ai-desk-card", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install op7418/ai-desk-card ai-desk-cardInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add op7418/ai-desk-card --skill ai-desk-card -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ai-desk-card" agent skill from https://github.com/op7418/ai-desk-card/tree/main into .github/skills/ai-desk-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ai-desk-card", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add op7418/ai-desk-card --skill ai-desk-card -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install op7418/ai-desk-card ai-desk-card --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ai-desk-card" agent skill from https://github.com/op7418/ai-desk-card/tree/main into .opencode/skills/ai-desk-card/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ai-desk-card", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ai-desk-cardDrives an M5Paper e-ink desk display from an agent: probes device state, guides first-time setup, and pushes widgets such as calendar, todos and weather.
A small e-ink panel next to your monitor shows glanceable widgets that an agent pushes to it. A local daemon renders each frame on the computer and sends pixels to the device over Wi-Fi, USB or BLE. This skill is the single entry point: it begins by running scripts/state.sh, which reports hardware, firmware, daemon and device status as JSON, and it treats the device.alive field, meaning a status report arrived in roughly the last 90 seconds, as the real sign that the device is responding.
It supports two devices: the M5Paper V1.1, a 540×960 grayscale panel with touch, and the M5Paper Color, a 600×400 Spectra 6 panel with three physical buttons and a temperature and humidity sensor, which has its own flow and daemon. The two daemons cannot share a port, so you run the one that matches the device on your desk. From the probe results the skill routes to a detailed flow, such as first-time install and firmware flashing, Wi-Fi provisioning, widget selection, scheduled refreshes or putting the screen to sleep.
Widgets named in the skill include weather, todos, calendar, inbox, PR queue, AI status, focus, deadlines, messages, now-playing, git status, system status, next meeting, break reminders and AI tasks.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit dc3b498. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadWriteEditFrom allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
bashcurlpython3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
AI Desk Card loads about 2k tokens when it runs. Until then it costs about 231 tokens; SKILL.md has 756 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Write, EditAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from op7418/ai-desk-card at commit dc3b498, republished under its GPL-3.0 licence (© op7418). 756 words, ~2,038 tokens.
.claude/skills/ai-desk-card/SKILL.md (or your agent's skills folder). This skill also uses 84 other files; get the full folder from GitHub.A 540×960 e-ink panel sitting next to the user's monitor. AI agents push widgets to it; the daemon renders frames server-side and ships pixels over Wi-Fi / USB / BLE. This Skill is the only thing an agent needs to call — it auto-detects state and routes to the right flow.
Before doing anything, run the state probe. Do not ask the user "have you done X" — find out by checking.
bash $SKILL_DIR/scripts/state.sh($SKILL_DIR is wherever this Skill is installed. If your agent runtime
sets $CLAUDE_PLUGIN_ROOT, use that. Otherwise use the repo root.)
Output is JSON with this shape:
{
"hardware": { "pio_installed": bool, "m5paper_usb": str|null },
"firmware": { "flashed": bool, "ours": bool, "version": str|null },
"daemon": { "running": bool, "pid": int|null },
"transport": { "connected": bool, "type": "BLETransport|SerialTransport|WiFiTransport|null" },
"device": { "alive": bool, "last_seen_seconds": int|null,
"active_transport": "Wi-Fi|USB|BLE|null",
"battery_pct": int|null, "uptime": str|null },
"wifi": { "provisioned": bool, "ip": str|null },
"interests": { "configured": bool, "path": str|null }
}The most important field is device.alive. It tells you whether the
device has sent a status report in the last ~90 s. transport.connected
only says "daemon picked a transport class"; device.alive says "we're
actually hearing back from the device right now."
The Skill supports two devices with different panels + daemons:
If GET /heartbeat returns device_status.device == "M5PaperColor"
(via color_daemon.py running), use the Color path described in
flows/08_paper_color.md:
pio run -e paper-colorpython3 daemon/color_daemon.py --device-ip <IP>cmd:wifi_set (no BLE pairing UX)top-left / top-right / bottom-left / bottom-rightambient (SHT40 temp+humid)Otherwise (default) use the V1.1 path through the routing table below.
The two daemons can't run on the same port simultaneously — pick one based on which device is in front of the user. The Skill flows below work for V1.1 unless explicitly noted.
Walk the decision tree in this order. First mismatch wins; fix it, then re-probe.
| Condition | Next action | Detail flow |
|---|---|---|
firmware.flashed == false AND no device.alive | First-time hardware setup | flows/01_install.md |
daemon.running == false | Start the daemon | bash $SKILL_DIR/plugin/scripts/start.sh |
device.alive == false AND transport.connected == false | Device unreachable — could be asleep, off, BLE not paired. Tell user, suggest physical wake (tap rotary / plug USB) | flows/02_transport.md |
device.alive == false AND transport.connected == true (daemon connected something but no status_report in 90s) | Device transport up but not responding — restart daemon, then probe | flows/02_transport.md |
wifi.provisioned == false (and user wants always-on or battery mode) | Provision Wi-Fi | flows/03_wifi.md |
interests.configured == false AND user just asked for "auto-refresh" or "定时推送" | Ask about interests, write ~/.ai-desk-card/interests.yaml | flows/04_interests.md |
device.alive == true + user said "push X" | Build widget JSON, POST to daemon | flows/05_push.md |
device.alive == true + user said "schedule" / "每 N 分钟" / "auto" | Set up scheduled push | flows/06_schedule.md |
device.alive == true + user said "sleep" / "息屏" | Push business card + deep sleep | flows/07_sleep.md |
Always tell the user which step you're on. Don't operate silently.
When state is OK and user asks to show something:
curl -sf -X POST "${CARD_DAEMON_URL:-http://127.0.0.1:9877}/widget" \
-H 'Content-Type: application/json' \
-d @- <<'JSON'
{
"slot": "top-left",
"type": "weather",
"data": { "city": "Beijing", "temp_c": 22, "icon": "sun", "summary": "晴" }
}
JSONtop-left (270×280) · top-right (270×280) · middle (540×340) ·
bottom (540×280) · full (540×960, takes over the whole screen).plugin/skills/card-widget/schemas/ for full
JSON schemas with examples.Full per-widget schema + theme reference: plugin/skills/card-widget/SKILL.md
If the user's request implies recurrence ("keep my calendar updated", "check email every hour", "show me today's todos throughout the day"), don't just push once. Instead:
~/.ai-desk-card/interests.yaml (see flow 04)/loop 30m or ScheduleWakeupplugin/skills/card-refresh/scripts/refresh_loop.shThe Skill provides the what (interests + push) — your agent provides the when (loop primitive).
plugin/ directory is provided for
CLIs that consume slash commands, but this SKILL.md is the agent-agnostic
entry point.127.0.0.1:9877 by default) + the device's local Wi-Fi.© op7418, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 84 other files (scripts, assets) in the repository root of op7418/ai-desk-card.
Open the folder on GitHubat commit dc3b498
AI Desk Card next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| AI Desk Card this skillop7418/ai-desk-card | 151 | — | ~2k | Automated safety check: Notes | GPL-3.0 | |
| Implement Next Taskrvdbreemen/OTGW-firmware | 207 | — | ~2.1k | Automated safety check: Pass | GPL-3.0 | |
| RuView CLI, API and WASMruvnet/RuView | 97k | — | ~1.2k | Automated safety check: Notes | MIT | |
| RuView Hardware Setupruvnet/RuView | 97k | — | ~1.8k | Automated safety check: Notes | MIT | |
| Esp32 Firmware Engineeralxv2016/folloup-sticky | 117 | 1 repos | ~3.8k | Automated safety check: Pass | GPL-3.0 | |
| RuView mmWave Radar Setupruvnet/RuView | 97k | — | ~907 | Automated safety check: Notes | MIT |
rvdbreemen/OTGW-firmware
Drive the autonomous 2.0.0 ESP32-S3-only async + FreeRTOS migration (epic TASK-865).
ruvnet/RuView
Covers the RuView `wifi-densepose` command line binary, its Axum REST API and the WebAssembly builds for browsers and ESP32, for embedding or scripting RuView.
ruvnet/RuView
Brings a RuView CSI sensing node online by building ESP32-S3 or ESP32-C6 firmware, flashing the board, provisioning WiFi and checking the serial output.
alxv2016/folloup-sticky
ESP32 firmware engineering for ESP-IDF projects. An agent skill from alxv2016/folloup-sticky.
ruvnet/RuView
Sets up and runs 60 GHz and 24 GHz mmWave radar sensing on ESP32 boards in RuView, alone or fused with WiFi CSI.
FastLED/FastLED
Firmware crash analysis, stack trace decoder, and register dump interpreter for ESP32/ARM/AVR platforms.
op7418/ai-desk-card
Walks a user through first-time setup of an AI Desk Card e-ink device, probing daemon, USB, BLE, Wi-Fi and firmware state and fixing whatever is missing.
op7418/ai-desk-card
Pushes glanceable info such as todos, calendar, weather and AI status to an M5Paper e-ink desk card through a local daemon, picking slots and widget types.
op7418/ai-desk-card
Walks a user through putting an AI Desk Card e-ink device on home Wi-Fi so frames arrive in about 0.2 seconds instead of the 32 seconds USB takes.
Works with
Categories
Drives an M5Paper e-ink desk display from an agent: probes device state, guides first-time setup, and pushes widgets such as calendar, todos and weather. A small e-ink panel next to your monitor shows glanceable widgets that an agent pushes to it. A local daemon renders each frame on the computer and sends pixels to the device over Wi-Fi, USB or BLE.
AI Desk Card fits situations like: setting up an M5Paper e-ink card for the first time, including firmware and Wi-Fi; pushing a calendar, todo list or PR queue to the desk display; scheduling the card to refresh during working hours; troubleshooting a card that does not respond, or putting it to sleep.
Run `npx skills add op7418/ai-desk-card --skill ai-desk-card -a claude-code`. Or copy the skill folder (the op7418/ai-desk-card repository) into .claude/skills/ai-desk-card in your project. Claude Code loads it when a task matches its description.
Run `npx skills add op7418/ai-desk-card --skill ai-desk-card -a codex`. Or copy the skill folder (the op7418/ai-desk-card repository) into .agents/skills/ai-desk-card in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add op7418/ai-desk-card --skill ai-desk-card -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ai-desk-card, .gemini/skills/ai-desk-card, .github/skills/ai-desk-card and .opencode/skills/ai-desk-card in your project.
Going by SKILL.md and its folder, AI Desk Card needs Python for the scripts in its folder and the command-line tools its instructions call (bash, curl and python3). Our summary lists: An M5Paper V1.1 or M5Paper Color device; PlatformIO (pio) to flash firmware; Python 3 to run the daemon; A Wi-Fi network for the device. Its frontmatter pre-approves these tools: Bash, Read, Write, Edit.
SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
AI Desk Card is published under the GPL-3.0 licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with AI Desk Card: Implement Next Task (rvdbreemen/OTGW-firmware, 207 stars), RuView CLI, API and WASM (ruvnet/RuView, 97k stars), RuView Hardware Setup (ruvnet/RuView, 97k stars) and Esp32 Firmware Engineer (alxv2016/folloup-sticky, 117 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
op7418 (a GitHub user) maintains it in op7418/ai-desk-card, which has 151 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on May 22, 2026.
Source: op7418/ai-desk-card on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.