Skip to main content

Outbound-only edge daemon for the SignalMesh Submesh Protocol — wrap local software as callable mesh coords with zero inbound ports.

Project description

signalmesh-meshd

Outbound-only edge daemon for the SignalMesh Submesh Protocol. It holds one persistent WebSocket to the SignalMesh cloud, walks ~/.signalmesh/harnesses/*/SKILL.md for op manifests, and executes call_requests as local subprocesses — no inbound ports, ever.

Install

pipx install signalmesh-meshd

Not on PyPI yet? Install straight from the built wheel:

pipx install /path/to/signalmesh_meshd-0.1.3-py3-none-any.whl

Quick start

Pair once — exchanges your SignalMesh key for a device_id + device_token, written to ~/.signalmesh/meshd.yaml at mode 0600:

meshd pair --key=smesh-XXXXXX --name=my-desktop

Connect — opens the outbound WebSocket, advertises discovered ops, and blocks serving call_requests until you kill it:

meshd connect

Invoke a coord from the cloud (this is what the SignalMesh backend does on your behalf when a mesh caller routes to your device):

curl -X POST https://acecalisto3-signalmesh.hf.space/api/submesh/call \
  -H "Content-Type: application/json" \
  -H "X-SignalMesh-Key: smesh-XXXXXX" \
  -d '{"coord": "submesh.my_desktop.echo_test.say", "input": {"msg": "hello mesh"}}'

Writing a SKILL.md manifest

Drop a directory under ~/.signalmesh/harnesses/<harness-name>/ containing a SKILL.md with YAML frontmatter. meshd parses the frontmatter block, refuses any exec argv containing shell metacharacters, and advertises one coord per subcommand.

~/.signalmesh/harnesses/echo-test/SKILL.md:

---
binary: /bin/echo
subcommands:
  - op_id: say
    exec: ["{msg}"]
    summary: "Echo a string back through the mesh."
    params_schema:
      msg: string
    timeout_ms: 5000
---

# echo-test

Minimal harness proving the mesh call → subprocess → response round trip.

This advertises submesh.<device_name>.echo_test.say, callable with {"msg": "..."}.

Safety model

Every argv token is checked against a shell-metachar denylist twice: once at manifest-load time (before a coord is even advertised) and once again after {param} substitution (before the subprocess actually runs) — a manifest can't sneak a malicious literal past you, and a caller can't sneak one in through input params either. Subprocesses always run with shell=False. Path-typed params are additionally checked against each subcommand's allow_paths glob list; anything that resolves outside the allowlist is rejected before it ever reaches argv.

Links

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

signalmesh_meshd-0.1.3.tar.gz (12.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

signalmesh_meshd-0.1.3-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file signalmesh_meshd-0.1.3.tar.gz.

File metadata

  • Download URL: signalmesh_meshd-0.1.3.tar.gz
  • Upload date:
  • Size: 12.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for signalmesh_meshd-0.1.3.tar.gz
Algorithm Hash digest
SHA256 e04db27fe8cdcc3d9ffe67b71634ccc09c234dd9d0cd47c58713dfa4b15b9b58
MD5 94f5a413edfb2de353f19ec824765c2c
BLAKE2b-256 cf28f7eae5f7b06ba8dc2f5f0b61ba5789cb954557e258f82be724edc96e9c67

See more details on using hashes here.

File details

Details for the file signalmesh_meshd-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: signalmesh_meshd-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for signalmesh_meshd-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 fdd048134d8f5405a1663e59503a81744dac23191832dd839601d370d48e988a
MD5 1d912839ea5c3eeddac722917766996b
BLAKE2b-256 09e443f2c68b0322f5741c6dea51e6a0f207500686b7e6b922eb7bd29da5e191

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page