All software
MeshCore Bot

MeshCore Bot

Bot Stable

agessaman bot

Extensible Python MeshCore service bot with keyword and plugin commands, weather and alert services, scheduling, rate limits, web administration and optional Discord, Telegram, MQTT, webhook and map integrations.

Maintainer
agessaman ↗
Kind
Bots
Maturity
Stable
Languages
Python JavaScript HTML
Licensing
Source available
Latest version
1.0.0 · 2026-08-07
Platforms
Linux Docker NixOS Web

Capabilities

Interfaces

  • Web
  • TUI
  • API
  • Headless

Connections

  • BLE
  • Serial
  • USB
  • TCP
  • MQTT
  • HTTP
  • WebSocket

Capabilities

  • Messaging
  • Contacts
  • Channels
  • Remote administration
  • Monitoring
  • Telemetry
  • Packet analysis
  • Automation
  • Notifications
  • Bridging

Node role

  • Companion
  • Repeater

Install

  • Docker Compose docker compose up -d --build Open ↗
  • NixOS Flake meshcore-bot Open ↗
  • Bare metal Python / systemd sudo ./install-service.sh Open ↗
  • Source Open ↗

Releases

from GitHub · updated 2026-08-07
  1. v1.0.0 # Latest 9 hours ago · 2026-08-07 21:07 UTC

    v1.0.0 marks the first stable release. Major highlights include zero-hop neighbor discovery, a rebuilt snapshot-backed web-viewer dashboard, improved transport recovery, location and rain features, World Cup support, safer feed and outbound HTTP handling, command-prefix enhancements, and significant performance and security work on the web-viewer.

    The configuration format, command syntax, service layout, and web-viewer API are now considered stable; breaking changes to these will only occur with a major version bump.

    Added

    • Zero-hop neighbor discovery in the packet capture service, ported from meshcore-packet-capture (itself a port of the observer firmware’s neighbors feature). At a configurable interval (12–336 h, default 24), the bot discovers which repeaters it hears directly and logs confirmed links with measured SNR. [PacketCapture] neighbors_enabled toggles the feature (off by default); each enabled broker publishes the snapshot once this is on (mqttN_neighbors defaults true, so set false to exclude a broker). The neighbors topic is formed by swapping the last segment of each broker’s packets topic (templated as meshcore/{IATA}/{PUBLIC_KEY}/neighbors, matching firmware). If no iata is set, location-routed topics are skipped with warning, preventing publishing to meshcore/XYZ/.... Snapshots are not retained, since heard_secs_ago is relative.
    • Confirmed direct links now form the strongest evidence class in the database: both public keys (32 bytes each) plus a first-party RF measurement, as compared to path inference, which has only prefixes and no keys. Links are stored in neighbor_links (adjacency, migration 22) and neighbor_observations (per-cycle history, pruned by neighbor_observations_retention_days, default 365).
    • Mesh graph integration: a Neighbors Only evidence mode on the mesh page and in GET /api/mesh/edges?evidence=neighbors, deriving edges solely from neighbor_links. These edges carry complete public keys and real SNR, and render as heavier lines; confirmed neighbors are annotated and treated as provenance-trusted when initializing the map. If neighbors_feed_mesh_graph (default on) is enabled, these are also written to mesh_connections.
    • The neighbors DM command lets admins run discovery cycles on demand (the scheduled interval has a 12h floor, making testing impractical otherwise). The command acknowledges immediately and follows with a report DM after the listen window. Useful to add to [Admin_ACL] admin_commands, as each invocation spends airtime.
    • Optional region-scope collection (neighbors_collect_scopes, off by default): each request can lock the bot’s radio command for up to ~25s. For repeaters lacking a stored path, the library temporarily rewrites their contact path to reach zero-hop. The default cycle uses a single radio command plus a passive listen window, keeping the bot responsive.
    • Automatic reconnects for serial, BLE, and TCP transport, including plugin re-subscription after reconnect.
    • Minute-level rain/precipitation nowcasts, with optional proactive notifications.
    • World Cup command and live event announcement service.
    • Opt-in sender-language detection for greeting replies, using keyword-first detection; a langdetect extra is available for longer inputs.
    • Centralized location/geocoding helpers, now shared across weather, AQI, path, and related commands.
    • New web-viewer plugin settings, node settings, multi-byte evidence views, and paginated contacts APIs.
    • Database restore utilities and hardened migrations for config, state, logs, and local plugins.
    • Flexible command prefixes: support for single, multiple, or decorative prefixes; permissive/strict matching modes; and optional support for bare commands.
    • Per-channel flood scope configuration for granular message routing control.
    • Optional packet-capture payload decoding: GRP_TXT channel messages are decrypted and ADVERTs are parsed into a nested decoded
  2. v0.9.3 # 2 months ago · 2026-05-31 00:34 UTC

    It was discovered that if the bot webhook was feeding a Discord channel via a webhook, sending messages to @everyone, @here, etc. would tag all users in the Discord. This is fixed.

    Full Changelog: https://github.com/agessaman/meshcore-bot/compare/v0.9.2...v0.9.3

  3. v0.9.2 # 3 months ago · 2026-05-17 21:44 UTC

    What's Changed

    Full Changelog: https://github.com/agessaman/meshcore-bot/compare/v0.9.1...v0.9.2

Show all 19 releases →

Project signals

popularity 2026-08-08 verification 2026-08-08
GitHub stars
181
Forks
71
Watchers
7
Open issues
21
Contributors
19
Release downloads
0
Latest downloads
0
Source available
Yes
Releases available
Yes
Signed releases
No
CI builds
Yes
Documentation
Yes
  • The project warns operators to avoid duplicate bots and constrain response scope to protect mesh airtime.
  • The repository does not currently declare an SPDX license.

Tags