โ† Back to Skills Marketplace
oloapiu

AirShell ๐Ÿข

by oloapiu ยท GitHub โ†— ยท v1.1.1
cross-platform โš  suspicious
354
Downloads
0
Stars
0
Active Installs
4
Versions
Install in OpenClaw
/install airshell
Description
Agent playbook for the AirShell open-source air quality sensor (github.com/oloapiu/airshell). Gives your agent domain knowledge about COโ‚‚, PM2.5, temperature...
README (SKILL.md)

AirShell Skill ๐Ÿข

Agent playbook for the AirShell air quality sensor.

Trigger: Any message containing Use skill:airshell or mentioning AirShell.

Read this skill, then act. Don't summarize it back to the user.


Setup check

Before handling any message, check if references/deployment.md exists and is filled in.

  • If not: run the Setup Flow below.
  • If yes: read it to understand the deployment context, then handle the message.

Setup Flow โ€” "AirShell awaiting setup" or first run

The sensor has no deployment context yet. Interview the user to configure it properly.

Read all reference docs first, then ask these questions one at a time (don't dump them all at once):

  1. Room โ€” What room is the sensor in? (nursery, bedroom, home office, living room, classroom, etc.)
  2. Occupants โ€” Who uses this room? (infant, young child, elderly person, adult with respiratory issues, general adult)
  3. Location โ€” What city / climate is this? (this helps with ventilation advice โ€” we'll check outdoor conditions before suggesting opening windows)
  4. Priorities โ€” What matters most to you? (sleep quality, air quality, temperature comfort, all of the above)
  5. Notifications โ€” How alert-happy should I be? (only urgent issues / also borderline readings / everything)

Based on the answers:

  1. Suggest appropriate alarm thresholds with reasoning (reference the docs for the standards that apply to their occupant type)
  2. Ask them to confirm or adjust
  3. Write references/deployment.md with the deployment context and agreed thresholds
  4. Determine your webhook URL and token โ€” check your own agent/gateway configuration. Do not ask the user to provide these. If you cannot determine them, tell the user: "I need my webhook URL and token to connect to the sensor โ€” this is how the sensor reaches me when an alarm fires. I couldn't find these automatically. You may need to check your agent's gateway config (for OpenClaw: openclaw gateway status)."
  5. POST the config to the device (see Pushing Config below)
  6. Confirm: "AirShell is configured for [room]. Watching COโ‚‚, PM2.5, temperature, and humidity."

Deployment Context

After setup, references/deployment.md contains:

  • Room type and occupants
  • Location (lat/lon + description)
  • Climate notes
  • Agreed alarm thresholds and reasoning
  • Any special sensitivities or preferences

Always read this file before interpreting readings or giving advice.


Weather Context

Before giving ventilation advice (for any alarm โ€” including COโ‚‚), check outdoor conditions:

GET https://api.open-meteo.com/v1/forecast
  ?latitude={lat}&longitude={lon}
  &current=temperature_2m,relative_humidity_2m,pm2p5
  &timezone=auto

Get lat/lon from references/deployment.md โ†’ location.

Decision logic:

  • Temp high: outdoor temp \x3C indoor by 2ยฐC+ โ†’ "open a window"; otherwise โ†’ "try a fan or AC"
  • Humidity high: outdoor humidity \x3C indoor by 5%+ โ†’ "ventilate"; otherwise โ†’ "try a dehumidifier"
  • PM2.5 high: check outdoor PM2.5 first โ€” never suggest opening windows if outdoor air is worse

Never suggest opening a window if outdoor conditions are worse than indoor.


Reference Docs

Read these before interpreting readings or recommending thresholds:

  • references/co2.md โ€” COโ‚‚ thresholds, causes, advice
  • references/pm25.md โ€” PM2.5 thresholds, causes, advice
  • references/temp_humidity.md โ€” Temperature and humidity standards
  • references/deployment.md โ€” This specific installation (created during setup)

Message Types

1. "AirShell alarm RAISED: \x3Calarm>"

  1. Read references/deployment.md for context
  2. Read the relevant reference doc for the measurand
  3. Fetch current readings: GET {device_url}/status
  4. Optionally pull recent trend: GET {device_url}/api/readings?last=30m
  5. For temp or humidity alarms: check outdoor weather first (see Weather Context above)
  6. Decide: is this worth alerting right now?
    • Yes: value is meaningfully above threshold, trend is worsening, or first raise
    • Maybe not: barely above threshold and already declining
  7. If yes โ†’ reply with a short plain-language message:
    • Lead with what's happening: "COโ‚‚ in the nursery is at 850 ppm"
    • Add the so-what based on occupant type (more urgent for infants, elderly, respiratory issues)
    • Give context-aware advice โ€” check outdoor conditions first
    • Keep it under 3 sentences

2. "AirShell alarm REPEAT: \x3Calarm>"

Same as RAISED but more direct โ€” the user may not have acted yet. Include how long it's been raised.

3. "AirShell alarm CLEARED: \x3Calarm>"

Usually no notification needed. Exceptions:

  • Was raised for >30 min โ†’ brief "all clear" is reassuring
  • User asked to be notified on clear

4. "AirShell rebooted"

Acknowledge quietly. No notification needed unless something looks wrong.

5. User asks about air quality / AirShell

Query the sensor:

GET {device_url}/status                       โ†’ current values + alarm state
GET {device_url}/api/readings?last=2h         โ†’ recent trend
GET {device_url}/readings?limit=60            โ†’ last 60 readings

Report key metrics in plain language. Reference docs for interpretation if a value is borderline.

6. User asks to adjust thresholds

  • Discuss the change with reference to the standards in the relevant doc
  • Confirm with the user
  • Update references/deployment.md
  • POST updated config to the device

Pushing Config

Config is pushed via POST {device_url}/config.

Get device_url from references/deployment.md. Always include the gateway section.

{
  "skill": "airshell",
  "device_id": "{device_id}",
  "alarms": {
    "co2_high": {
      "measurand": "co2",
      "operator": ">",
      "raise": 800,
      "clear": 700,
      "smoothing_min": 5
    },
    "pm25_high": {
      "measurand": "pm25",
      "operator": ">",
      "raise": 50,
      "clear": 35,
      "smoothing_min": 3
    },
    "temp_high": {
      "measurand": "temp",
      "operator": ">",
      "raise": 24,
      "clear": 22,
      "smoothing_min": 10
    },
    "temp_low": {
      "measurand": "temp",
      "operator": "\x3C",
      "raise": 18,
      "clear": 20,
      "smoothing_min": 10
    },
    "humidity_high": {
      "measurand": "humidity",
      "operator": ">",
      "raise": 65,
      "clear": 60,
      "smoothing_min": 10
    },
    "humidity_low": {
      "measurand": "humidity",
      "operator": "\x3C",
      "raise": 30,
      "clear": 35,
      "smoothing_min": 10
    }
  },
  "notifications": {
    "default": {
      "on_raise": true,
      "on_clear": false,
      "repeat": {
        "enabled": true,
        "mode": "escalating",
        "intervals_min": [30, 20, 10]
      }
    }
  },
  "location": {
    "latitude": "{lat}",
    "longitude": "{lon}",
    "description": "{city}"
  },
  "gateway": {
    "webhook_url": "{your_webhook_url}",
    "token": "{your_webhook_token}",
    "channel": "{channel}",
    "to": "{recipient_id}"
  }
}

Fill in values from references/deployment.md. Adjust thresholds per occupant type โ€” the reference docs explain what's appropriate for infants, elderly, general adults, etc.


Purifier Control (optional)

If references/deployment.md has a ## Purifier Control section with script and python paths:

  • On PM2.5 alarm RAISED: run {python} {script} {speed_high} to ramp up the purifier
  • On PM2.5 alarm CLEARED: run {python} {script} {speed_low} to drop it back to quiet

Run silently in the background โ€” don't mention it to the user unless it fails. If the script fails (non-zero exit), note it briefly: "Tried to adjust the purifier but hit an error โ€” you may need to set it manually."

If no purifier config in deployment.md, skip this entirely.


Tone

  • Direct and calm. No alarm unless the situation warrants it.
  • Calibrate urgency to occupant: infant/elderly = act fast; healthy adult = informative but relaxed
  • For borderline readings: informative, not panicky
  • Never just forward numbers โ€” interpret them
Usage Guidance
This skill appears to do what it says: monitor a local AirShell sensor, advise on COโ‚‚/PM2.5/temp/humidity, and optionally push config and control a purifier. Before installing, consider: (1) Source is unknown โ€” review files yourself if you need higher assurance. (2) Webhook token exposure: the skill asks the agent to find its gateway webhook URL and token and POST that to the device so the sensor can call back. Only use this with devices you trust on your network (untrusted devices could capture that token). If possible create a scoped/dedicated webhook or token for the sensor. (3) Purifier control is optional but requires storing VeSync credentials in environment variables โ€” follow the docs and avoid hardcoding secrets. (4) The skill will call the local device_url and open-meteo; ensure device_url points to a trusted local IP/Tailscale host. If you want to reduce risk, run the setup interview and push config manually rather than letting the agent discover and post secrets automatically.
Capability Analysis
Type: OpenClaw Skill Name: airshell Version: 1.1.1 The skill bundle facilitates air quality monitoring but includes high-risk capabilities such as local Python script execution (scripts/vesync_example.py) and instructions for the agent to retrieve its own gateway webhook token to send to a remote device (SKILL.md). While these actions are aligned with the stated purpose of connecting a sensor and controlling a purifier, the automated handling of sensitive credentials and the ability to run local code represent a significant attack surface. The skill also performs external network requests to api.open-meteo.com and user-defined device endpoints.
Capability Assessment
โœ“ Purpose & Capability
The name/description (air quality sensor playbook) matches what the files do: reading docs, polling a local device_url, posting device config, and optional purifier control. The included vesync example aligns with the documented optional purifier control in references/deployment.example.md.
โ„น Instruction Scope
Runtime instructions tell the agent to read local reference docs, call local device endpoints (GET {device_url}/status, POST {device_url}/config), and to determine the agent's webhook URL/token from the agent/gateway configuration. That gateway/token lookup is necessary for webhook-based operation but does require the agent to access its gateway config (potentially secrets). Instructions do not ask the agent to read unrelated user files or exfiltrate data to third-party endpoints; the only external web API is open-meteo for weather checks.
โœ“ Install Mechanism
No install spec is provided (instruction-only), and the only code file is an optional example script. Nothing is downloaded or written to disk by an installer in the skill metadata.
โ„น Credentials
The skill declares no required env vars. The optional vesync example script does expect VESYNC_EMAIL / VESYNC_PASSWORD / VESYNC_DEVICE if the user chooses automatic purifier control; these are documented in the example but not mandatory. The agent will need access to its own webhook token or gateway config to configure the sensor, which is proportionate to the stated webhook-based design but is a sensitive capability the user should understand.
โœ“ Persistence & Privilege
always:false and normal autonomous invocation. The skill writes and reads its own references/deployment.md as part of setup (expected). It does not request persistent system-wide privileges or modify other skills' configs.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install airshell
  3. After installation, invoke the skill by name or use /airshell
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.1.1
Fix: vesync credentials via environment variables, never hardcoded
v1.1.0
Optional purifier control via pyvesync โ€” agent ramps purifier speed on PM2.5 alarms, drops back on clear
v1.0.1
Fix: always check outdoor PM2.5 before suggesting ventilation, including for COโ‚‚ alarms
v1.0.0
Initial release โ€” agent skill for the AirShell open-source air quality sensor
Metadata
Slug airshell
Version 1.1.1
License โ€”
All-time Installs 0
Active Installs 0
Total Versions 4
Frequently Asked Questions

What is AirShell ๐Ÿข?

Agent playbook for the AirShell open-source air quality sensor (github.com/oloapiu/airshell). Gives your agent domain knowledge about COโ‚‚, PM2.5, temperature... It is an AI Agent Skill for Claude Code / OpenClaw, with 354 downloads so far.

How do I install AirShell ๐Ÿข?

Run "/install airshell" in the OpenClaw or Claude Code chat to install it in one step โ€” no extra setup required.

Is AirShell ๐Ÿข free?

Yes, AirShell ๐Ÿข is completely free (open-source). You can download, install and use it at no cost.

Which platforms does AirShell ๐Ÿข support?

AirShell ๐Ÿข is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created AirShell ๐Ÿข?

It is built and maintained by oloapiu (@oloapiu); the current version is v1.1.1.

๐Ÿ’ฌ Comments