# Send Off-grid radio for sovereign AI. LoRa mesh comms via Meshtastic — no internet required. to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "meshtastic-skill",
    "name": "Off-grid radio for sovereign AI. LoRa mesh comms via Meshtastic — no internet required.",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/lukevr/meshtastic-skill",
    "canonicalUrl": "https://clawhub.ai/lukevr/meshtastic-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/meshtastic-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=meshtastic-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "CONFIG.md",
      "README.md",
      "SKILL.md",
      "references/SETUP.md",
      "references/claude_desktop_config.json",
      "scripts/mcp_server.py"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "meshtastic-skill",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T20:11:52.954Z",
      "expiresAt": "2026-05-07T20:11:52.954Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=meshtastic-skill",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=meshtastic-skill",
        "contentDisposition": "attachment; filename=\"meshtastic-skill-0.1.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "meshtastic-skill"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/meshtastic-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/meshtastic-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/meshtastic-skill",
    "agentUrl": "https://openagent3.xyz/skills/meshtastic-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/meshtastic-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/meshtastic-skill/agent.md"
  }
}
```
## Documentation

### Meshtastic Skill

Control a Meshtastic node via USB for off-grid LoRa mesh communication.

### Prerequisites

Meshtastic-compatible hardware (RAK4631, T-Beam, Heltec, LilyGo, etc.)
USB connection to host machine
Python 3.9+ with meshtastic and paho-mqtt packages
See references/SETUP.md for full installation guide

### Configuration

Edit CONFIG.md with your node details, MQTT settings, and alert destinations.

### Architecture

┌─────────────────────────────────────────────────────────────┐
│                    MQTT Bridge                               │
├─────────────────────────────────────────────────────────────┤
│  RECEIVE: mqtt.meshtastic.org (global JSON traffic)         │
│  PUBLISH: optional map broker (protobuf)                    │
│  SOCKET:  localhost:7331 (commands: send, status, toggle)   │
├─────────────────────────────────────────────────────────────┤
│  Files:                                                      │
│  • /tmp/mesh_messages.txt - received messages log           │
│  • /tmp/mesh_nodes.json   - cached node positions           │
└─────────────────────────────────────────────────────────────┘

┌─────────────┐     USB      ┌─────────────┐
│  LoRa Node  │◄────────────►│ Bridge.py   │
│  (Radio)    │              │  - Serial   │
└─────────────┘              │  - Socket   │
                             │  - MQTT     │
                             └──────┬──────┘
                                    │
           ┌────────────────────────┼────────────────────────┐
           │                        │                        │
           ▼                        ▼                        ▼
    localhost:7331           /tmp/mesh_*            MQTT Broker
    (send commands)          (message logs)         (mesh traffic)

### Send Messages

# Via socket (preferred - works while bridge running)
echo '{"cmd":"send","text":"Hello mesh!"}' | nc -w 2 127.0.0.1 7331

# Direct message to specific node
echo '{"cmd":"send","text":"Hey!","to":"!abcd1234"}' | nc -w 2 127.0.0.1 7331

# Check status
echo '{"cmd":"status"}' | nc -w 2 127.0.0.1 7331

# List RF nodes (seen via radio)
echo '{"cmd":"nodes"}' | nc -w 2 127.0.0.1 7331

### Map Visibility (if configured)

# Toggle map publishing on/off
echo '{"cmd":"map"}' | nc -w 2 127.0.0.1 7331

# Explicitly enable/disable
echo '{"cmd":"map","enable":true}' | nc -w 2 127.0.0.1 7331
echo '{"cmd":"map","enable":false}' | nc -w 2 127.0.0.1 7331

# Force immediate position report
echo '{"cmd":"map_now"}' | nc -w 2 127.0.0.1 7331

### Read Messages

# Recent messages (last 20)
tail -20 /tmp/mesh_messages.txt

# Filter common noise
tail -50 /tmp/mesh_messages.txt | grep -v -E "(Hello!|hey|mqtt-test)"

### Message Log Format

TIMESTAMP|CHANNEL|SENDER|DISTANCE|TEXT
2026-02-02T12:43:59|LongFast|!433bf114|1572km|Moin moin!

### Bridge Service

# Status
sudo systemctl status meshtastic-bridge

# Restart
sudo systemctl restart meshtastic-bridge

# View logs
sudo journalctl -u meshtastic-bridge -f

# Stop (needed for direct CLI access)
sudo systemctl stop meshtastic-bridge

### Option 1: Cron Job (Recommended)

cron.add({
  name: "mesh-monitor",
  schedule: { kind: "every", everyMs: 300000 },  // 5 min
  sessionTarget: "isolated",
  payload: {
    kind: "agentTurn",
    message: "Check /tmp/mesh_messages.txt for new messages. Filter out noise (test messages, 'Hello!', 'hey'). Alert me of interesting ones with translations if non-English.",
    timeoutSeconds: 60,
    deliver: true,
    channel: "telegram"  // or your channel
  }
})

### Option 2: Digest Summary

cron.add({
  name: "mesh-digest",
  schedule: { kind: "cron", expr: "0 8,14,20 * * *", tz: "Europe/Madrid" },
  sessionTarget: "isolated",
  payload: {
    kind: "agentTurn",
    message: "Read /tmp/mesh_messages.txt. Create a digest of interesting messages from the last 6 hours. Translate non-English, guess country from distance. Post summary.",
    timeoutSeconds: 120,
    deliver: true,
    channel: "telegram"
  }
})

### Option 3: Spawned Monitor Agent

sessions_spawn({
  task: "Monitor /tmp/mesh_messages.txt every 30 seconds. Alert me for interesting messages (not noise). Run for 1 hour.",
  label: "mesh-monitor",
  runTimeoutSeconds: 3600
})

### Distance Reference

Approximate distances for country guessing (adjust for your location):

DistanceTypical Regions<500kmNeighboring countries/regions500-1000kmMedium range1000-1500kmLong range1500-2000kmVery long range (likely MQTT relay)>2000kmMQTT-bridged traffic

### Privacy Notes

Map reports can use fuzzy positioning (~2km precision)
Position publishing can be toggled off entirely
Local RF messages are logged but not shared externally by default
Never broadcast precise location in messages

### Supported Hardware

DeviceNotesRAK4631Recommended, reliable USBT-BeamPopular, has GPSHeltec V3Budget optionLilyGo T-EchoE-paper display

See references/SETUP.md for hardware-specific setup.

### Regional Frequencies

RegionFrequencyTopic RootEurope868 MHzmsh/EU_868/2/jsonAmericas915 MHzmsh/US/2/jsonAustralia/NZ915 MHzmsh/ANZ/2/json

### Files

~/.openclaw/skills/meshtastic/
├── SKILL.md           # This file
├── CONFIG.md          # Your configuration
├── scripts/
│   └── mesh.py        # CLI wrapper
└── references/
    └── SETUP.md       # Installation guide

### Troubleshooting

"Resource temporarily unavailable"

Only one process can use serial port at a time
Stop bridge before direct CLI: sudo systemctl stop meshtastic-bridge

No messages appearing

Check MQTT subscription topic matches your region
Verify firewall allows outbound port 1883
Check journalctl -u meshtastic-bridge for errors

Can't send messages

Ensure bridge is running (socket server)
Check serial port path in config
Try: echo '{"cmd":"status"}' | nc -w 2 127.0.0.1 7331

Considering BLE instead of USB?

Don't. USB is far more reliable on Linux.
BLE on Linux (BlueZ/bleak) has notification bugs, pairing inconsistencies, and random disconnects.
See references/SETUP.md for detailed findings.

### Further Reading

Meshtastic Docs
MQTT Integration
Hardware Options
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: lukevr
- Version: 0.1.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-04-30T20:11:52.954Z
- Expires at: 2026-05-07T20:11:52.954Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/meshtastic-skill)
- [Send to Agent page](https://openagent3.xyz/skills/meshtastic-skill/agent)
- [JSON manifest](https://openagent3.xyz/skills/meshtastic-skill/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/meshtastic-skill/agent.md)
- [Download page](https://openagent3.xyz/downloads/meshtastic-skill)