meshtastic-skillSend and receive messages via Meshtastic LoRa mesh network. Use for off-grid messaging, mesh network status, reading recent mesh messages, or sending texts via LoRa radio.
Install via ClawdBot CLI:
clawdbot install lukevr/meshtastic-skillControl a Meshtastic node via USB for off-grid LoRa mesh communication.
meshtastic and paho-mqtt packagesreferences/SETUP.md for full installation guideEdit CONFIG.md with your node details, MQTT settings, and alert destinations.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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)
# 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
# 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
# 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)"
TIMESTAMP|CHANNEL|SENDER|DISTANCE|TEXT
2026-02-02T12:43:59|LongFast|!433bf114|1572km|Moin moin!
# 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
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
}
})
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"
}
})
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
})
Approximate distances for country guessing (adjust for your location):
| Distance | Typical Regions |
|----------|-----------------|
| <500km | Neighboring countries/regions |
| 500-1000km | Medium range |
| 1000-1500km | Long range |
| 1500-2000km | Very long range (likely MQTT relay) |
| >2000km | MQTT-bridged traffic |
| Device | Notes |
|--------|-------|
| RAK4631 | Recommended, reliable USB |
| T-Beam | Popular, has GPS |
| Heltec V3 | Budget option |
| LilyGo T-Echo | E-paper display |
See references/SETUP.md for hardware-specific setup.
| Region | Frequency | Topic Root |
|--------|-----------|------------|
| Europe | 868 MHz | msh/EU_868/2/json |
| Americas | 915 MHz | msh/US/2/json |
| Australia/NZ | 915 MHz | msh/ANZ/2/json |
~/.openclaw/skills/meshtastic/
βββ SKILL.md # This file
βββ CONFIG.md # Your configuration
βββ scripts/
β βββ mesh.py # CLI wrapper
βββ references/
βββ SETUP.md # Installation guide
"Resource temporarily unavailable"
sudo systemctl stop meshtastic-bridgeNo messages appearing
journalctl -u meshtastic-bridge for errorsCan't send messages
echo '{"cmd":"status"}' | nc -w 2 127.0.0.1 7331Considering BLE instead of USB?
references/SETUP.md for detailed findings.AI Usage Analysis
Analysis is being generated⦠refresh in a few seconds.
Captures learnings, errors, and corrections to enable continuous improvement. Use when: (1) A command or operation fails unexpectedly, (2) User corrects Clau...
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
Search and analyze your own session logs (older/parent conversations) using jq.
Typed knowledge graph for structured agent memory and composable skills. Use when creating/querying entities (Person, Project, Task, Event, Document), linking related objects, enforcing constraints, planning multi-step actions as graph transformations, or when skills need to share state. Trigger on "remember", "what do I know about", "link X to Y", "show dependencies", entity CRUD, or cross-skill data access.
Ultimate AI agent memory system for Cursor, Claude, ChatGPT & Copilot. WAL protocol + vector search + git-notes + cloud backup. Never lose context again. Vibe-coding ready.
Headless browser automation CLI optimized for AI agents with accessibility tree snapshots and ref-based element selection