Early preview · v0.1.0 · under construction Status & limitations

Sealmesh

Install

Sealmesh runs on macOS and Linux, on arm64 and x86_64. Windows isn't supported yet (see Status).

Homebrew

brew install sealmesh/tap/sealmesh            # CLI and daemon
brew install sealmesh/tap/sealmesh-mcp        # MCP server, for coding agents
brew install sealmesh/tap/sealmesh-server     # the router, if you run one

Shell installer

Downloads the prebuilt binary for your platform from the latest GitHub release:

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/SealMesh/sealmesh/releases/latest/download/sealmesh-installer.sh | sh

Every binary and its checksum is also on the releases page.

Cargo

cargo install --locked sealmesh sealmesh-mcp

--locked is required, not a precaution. Without it cargo ignores the lockfile and re-resolves every dependency, and that resolution fails: gix pulls in bisync, and every published version of bisync is yanked. If you see a resolution error naming a yanked crate, you left the flag off.

From source

With Rust 1.95 or newer (the repository pins 1.95.0):

git clone https://github.com/SealMesh/sealmesh.git
cd sealmesh
cargo install --locked --path crates/sealmesh
cargo install --locked --path crates/sealmesh-mcp

The path names the crate, not the workspace root, which is a virtual manifest with no binary.

Router image

docker pull ghcr.io/sealmesh/sealmesh-server:latest

A distroless, non-root image listening on 8787 with history in /data. See Run a router.

Keep it running

On macOS, a launchd agent at ~/Library/LaunchAgents/dev.sealmesh.daemon.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>dev.sealmesh.daemon</string>
  <key>ProgramArguments</key>
  <array><string>/opt/homebrew/bin/sealmesh</string><string>daemon</string></array>
  <key>EnvironmentVariables</key>
  <dict><key>PATH</key><string>/opt/homebrew/bin:/usr/bin:/bin</string></dict>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
  <key>StandardOutPath</key><string>/Users/YOU/Library/Logs/sealmesh.log</string>
  <key>StandardErrorPath</key><string>/Users/YOU/Library/Logs/sealmesh.log</string>
</dict>
</plist>
launchctl load -w ~/Library/LaunchAgents/dev.sealmesh.daemon.plist
tail -f ~/Library/Logs/sealmesh.log
  • PATH matters. The daemon reads its token by running gh, and launchd starts with an environment that doesn't include Homebrew.
  • Keep the log out of /tmp. It's world-writable, and launchd would create the file world-readable and follow a symlink already sitting there.

The daemon reconnects on its own after sleep, network changes or a router restart. On Linux, run sealmesh daemon as a systemd user service. No unit file ships yet.

Uninstall

launchctl unload -w ~/Library/LaunchAgents/dev.sealmesh.daemon.plist
rm ~/Library/LaunchAgents/dev.sealmesh.daemon.plist
rm -rf ~/.config/sealmesh ~/.cache/sealmesh ~/.local/state/sealmesh
brew uninstall sealmesh            # or: cargo uninstall sealmesh

There's nothing to ask anyone to delete: the router holds no snapshot of you.

Something wrong or unclear? Open an issue.