Sleep Channel

Data & APIs

Handle messages in a Discord sleep-tracking channel by grounding all sleep logging and summaries on the real sleep tracker and source Discord metadata. Use when working in a dedicated sleep channel, especially for adding sleep entries, correcting the latest entry, deleting the latest entry, or rendering the current sleep log without hallucinating timestamps, dates, or entries.

Install

openclaw skills install @cdmichaelb/sleep-channel

Sleep Channel

Deterministic sleep tracker for Discord channel-based sleep logging.

Configuration

Set the following environment variables before use:

VariableRequiredDescription
SLEEP_TIMEZONEYesIANA timezone string (e.g. America/Los_Angeles, Europe/Berlin)
WORKSPACENoWorkspace root path. Defaults to $HOME/.openclaw/workspace

Core Rules

  • Treat the configured channel as the dedicated sleep channel.
  • Prefer scripts/tracker.py for all log mutations and rendering.
  • Never write now as a logged time.
  • Never derive event time from the model turn time.
  • Use the source Discord message timestamp unless the user explicitly gives a different time.
  • Convert displayed times to the user's local timezone (SLEEP_TIMEZONE).
  • Never invent entries, dates, or file contents.
  • If showing the sleep log, render from the real tracker/file output.

Commands

Add a new sleep event

For messages like: going to bed, still awake, fell asleep, awake now, resting, nap, back to sleep.

python3 scripts/tracker.py add \
  "$MESSAGE_TEXT" \
  "$CHANNEL_ID" \
  "$MESSAGE_ID" \
  "$AUTHOR_ID" \
  "$TIMESTAMP_UTC"

Correct the latest entry

When the user is clearly correcting the previous sleep event.

python3 scripts/tracker.py correct-latest \
  "$MESSAGE_TEXT" \
  "$CHANNEL_ID" \
  "$MESSAGE_ID" \
  "$AUTHOR_ID" \
  "$TIMESTAMP_UTC"

Delete the latest entry

When the user explicitly wants the latest sleep entry removed.

python3 scripts/tracker.py delete-latest

Render the sleep log

Display the current sleep log/summary.

python3 scripts/tracker.py render

Classification Hints

The tracker handles common phrases: fell asleep, awake now, got up, still awake, laying in bed, going to bed, trying to sleep, going back to sleep. Pass raw text to the tracker instead of re-parsing.

If Uncertain

Ask a short clarifying question only when intent is ambiguous:

  • Correction vs new event?
  • Delete the latest entry?
  • Explicit time override?

Files

FilePurpose
scripts/tracker.pyCanonical sleep tracker (self-contained, stdlib only)
references/CHANNEL_RULES.mdChannel setup guide (optional)
references/README.mdSystem documentation (optional)