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.2-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
- 🤗 HuggingFace Space (canonical): https://huggingface.co/spaces/acecalisto3/SignalMesh
- Live app (API endpoints): https://acecalisto3-signalmesh.hf.space
- Interactive lander: https://hyperagent.com/s/VpnZ7xsnstxjTfHNoYnoag
- Protocol docs: see the Space's
/api/submesh/*routes (device/pair,device/{id}/revoke,devices,edge,call)
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file signalmesh_meshd-0.1.2.tar.gz.
File metadata
- Download URL: signalmesh_meshd-0.1.2.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c136bb65f657e9841a92397a4a0e9df9cc1cdf5f94c9efc980bc026f3d2e53ca
|
|
| MD5 |
85205e3c1c500656c9ca0f3b5f0869b3
|
|
| BLAKE2b-256 |
a9e572cd0eda61cce15804e462da90871c5746650542134de37a83d4fabef3db
|
File details
Details for the file signalmesh_meshd-0.1.2-py3-none-any.whl.
File metadata
- Download URL: signalmesh_meshd-0.1.2-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c787ea7c25a923c8b4d1d48aa7c74ff46308b774b1df7d09b6f4696a62368c59
|
|
| MD5 |
498842f750cb8e25b5af949d17a247df
|
|
| BLAKE2b-256 |
e1a1b1cee5c5a4bf314145c589840df3273d7c7269829954c096fdf14dd89340
|