Skip to main content
Glama

Rynmesh

Development branch feature/personal-ai-workspace: the September 20–24 personal-device, AI workspace, local-model, NAS and desktop redesign is documented in the requirements, implementation and acceptance report. This is a development snapshot, not a new public release; older release notes below do not describe every feature in this branch.

CI License: MIT GitHub release

Rynmesh is an open-source, local-first personal AI assistant and verifiable content mesh. A Ryn node can discover and rank public content, learn from local feedback, publish signed content, discover peers, and exchange content with provenance and safety receipts.

Visit rynmesh.ai for the product overview, verified downloads, current milestone status, and the live contribution center.

The node, web interface, recommendation agent, peer protocol, registry, and command-line tools are all included under the MIT license. No account, API key, proprietary service, or preference setup is required for the default experience.

What works today

  • Proactive recommendations from a built-in public catalog, including video, articles, research, podcasts, audiobooks, and visual content

  • Local recommendation profiles that learn from More, Less, Hide, Open, topics, platforms, and written direction

  • A self-hosted web interface served by the node daemon

  • Signed content manifests, provenance chains, and safety receipts

  • Direct peer HTTP transport with registry-assisted discovery and NAT-safe relay jobs

  • Direct ICE/UDP file transfer with automatic ordinary-peer transit fallback; TURN is not used

  • Content publishing for video, images, audio, documents, slides, datasets, and other files

  • MCP tools for Codex-, Claude-, and other MCP-compatible AI operators

  • Friend invite/QR pairing, encrypted messages, follow feed and owned-device sync

  • Reading history, bookmarks, offline reading and unified Ask Ryn

  • On current main: shared reading lists, friend content in For You, mesh/device diagnostics, reviewed device cleanup and direct Private AI streaming

  • On current main: an opt-in digital-service Exchange with free offers/requests, negotiated agreements, an internal Ryncoin wallet, encrypted delivery, refunds, immutable AI dispute/appeal cases and reviewed deadline settlement in a configured v2 alpha network

  • Non-transferable Rynmesh Credits for distribution reputation

Rynmesh is alpha software. APIs and storage formats may change before 1.0.

Related MCP server: weid.ai MCP Server

Current boundaries

  • Desktop installers are currently available for macOS on Apple Silicon and Intel. Windows and Linux packaging is planned.

  • macOS community builds are not yet Apple-notarized.

  • Public-source recommendations work without peers, accounts, preferences, or a model. AI-generated briefings and Search & Ask require a reachable local Ollama model or explicit opt-in to a configured cloud provider.

  • The latest published release is v0.7.0; newer main-branch features are listed separately in Product milestones.

  • Friend invitations and friend-attributed For You content are implemented. Multi-user egress hardening, broader physical acceptance and budgeted agent execution remain work.

  • The first digital-value exchange milestone is implemented for configured alpha groups; see Exchange alpha. Registry issuance is finite and one-time per identity. v1 histories remain read-only; there is no automatic balance migration. See protocol hardening for deadline outcomes and limits. The fixed-roster approval log and model adapters do not prove permissionless security or impartial AI. Broad commerce, hiring, paid media and public rewards remain in the Network economy roadmap. Fiat conversion remains a much later stage.

  • The safety scanner is an alpha implementation; operating an unrestricted network of untrusted peers requires the additional hardening described in Product milestones.

For an implementation inventory and clearly separated contribution areas, see Product milestones. Work that is ready to be claimed is tracked in GitHub Issues, not inferred from aspirational design documents. The current accepted backlog is grouped in the P1 hardening milestone.

Install from GitHub

macOS desktop

Download the Apple Silicon (aarch64) or Intel (x86_64) DMG from the latest release, open it, and drag Ryn to Applications. The app contains its own node daemon and web interface; Python, Node.js, Ollama, an account, and source configuration are not required. Because community builds are not Apple notarized yet, the first launch may require Control-clicking Ryn and choosing Open.

Python package

Python 3.10 or newer is required.

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
curl -fsSL https://github.com/yeogirlyun/rynmesh/releases/latest/download/install.sh | sh

Or install the current wheel into an existing Python environment:

python -m pip install https://github.com/yeogirlyun/rynmesh/releases/download/v0.7.0/rynmesh-0.7.0-py3-none-any.whl
rynmesh-peer

Open http://127.0.0.1:8791. Ryn starts its recommendation agent automatically. Adding a YouTube channel, subreddit, or RSS feed is optional.

Versioned wheels, checksums, installer scripts, and source archives are available from GitHub Releases. Release wheels include the built web interface; editable source installs use the Vite development server described below.

Develop from source

git clone https://github.com/yeogirlyun/rynmesh.git
cd rynmesh
./scripts/dev_setup.sh

For hot-reloading development, run the node and web app in separate terminals:

./.venv/bin/rynmesh-peer
cd webapp
npm run dev

The local API runs on port 8791; Vite serves the development UI on port 5173.

Run a registry

Peer discovery can use a registry, but a registry is not required for the local personal-assistant experience.

export RYNMESH_REGISTRY_HOST="0.0.0.0"
export RYNMESH_REGISTRY_PORT="8790"
export RYNMESH_REGISTRY_DIR="$HOME/.rynmesh/registry"
rynmesh-registry

The registry stores signed peer records, work-order mailbox messages, and optional relay blobs. Nodes verify signatures and content hashes locally.

Three-node P2P peer transit

rynmesh-transit sends directly over ICE/UDP when possible and can use another ordinary Rynmesh peer as a single encrypted transit hop when the direct route is unavailable or degraded. Both legs are host/server-reflexive P2P connections; the registry carries signed signaling only, and TURN candidates fail closed.

# Peer 3
rynmesh-transit worker --role target --network-id my-network
# Peer 2
rynmesh-transit worker --role transit --network-id my-network
# Peer 1: direct first, peer 2 on hard failure
rynmesh-transit send-file-adaptive artifact.bin \
  --target-peer "<peer-3-id>" --relay-peer "<peer-2-id>" \
  --network-id my-network

See the design and acceptance contract and operator runbook.

MCP server

rynmesh-mcp

See Architecture, Product milestones, and Contributing for deeper project context.

Optional local LLM provider packages

The desktop node and recommendation assistant do not require Docker or a local model. Operators who choose to provide private inference can connect an existing loopback OpenAI-compatible or Ollama service, or let Rynmesh manage one: managed mode downloads a verified GGUF model and runs it with the bundled llama.cpp runtime built into the desktop app, or a managed download of the pinned release on a pip-installed node. Docker is an opt-in runtime for server operators who prefer container isolation, selected with --runtime docker:

rynmesh-llm detect
rynmesh-llm setup --mode openai-compatible --base-url http://127.0.0.1:8080
# Managed local model, bundled/downloaded native runtime (default):
rynmesh-llm setup --mode managed --profile balanced --yes
# Managed local model, opt-in Docker runtime (server nodes):
rynmesh-llm setup --mode managed --runtime docker --yes

Provider/Consumer task bodies travel as signed end-to-end ciphertext directly between Ryn nodes, with a dedicated ciphertext-only relay fallback. The registry receives discovery and body-free coordination only. Rynmesh Credits remain non-transferable reputation; development Task Balance is a separate simulated ledger and is not real money or a production payment system.

Run the isolated two-node automated demonstration with:

python scripts/llm_e2e.py run
python scripts/llm_e2e.py down

See Local LLM runbook, design and boundaries, and P0 evidence. Developers and AI agents should start with the current development handoff before continuing this feature. The user-facing catalog, typed service routes, local conversation storage, and extension rules are documented in the Services UI architecture.

Verify a checkout

python -m pytest -q
python -m ruff check rynmesh tests qa
cd webapp && npm ci && npm run build

CI also verifies that a packaged node serves its own UI without a development server.

Security and privacy

Node identity, preferences, feedback, and fetched content are stored locally under RYNMESH_HOME (by default beneath ~/.rynmesh). Network access is used for sources or peers the node contacts; model integrations are optional.

Please report vulnerabilities privately as described in SECURITY.md. Do not include secrets or personal data in public issues.

Community

License

Rynmesh is licensed under the MIT License.

Available Tools

39 tools
rynmesh_credit_scoreboardC

Return visible Rynmesh Credit accounts ranked by distribution weight.

Inputs: category.

rynmesh_credit_summaryB

Return credit score and distribution weight for a Rynmesh peer.

Inputs: peer_id, category.

rynmesh_digest_add_sourceA

Add a content source to the owner's digest: an RSS/Atom URL, a YouTube channel URL or @handle, or a subreddit like r/selfhosted.

Inputs: url (required), tags.

rynmesh_digest_feedbackA

Record the owner's reaction to a digest item (up/down/opened); tunes future ranking and suppresses seen items.

Inputs: action (required), item_id (required).

rynmesh_digest_getC

Get the owner's current Daily Digest: ranked items from their chosen sources (RSS/YouTube/Reddit feeds, read-later saves, page watchers) with reasons per pick.

Inputs: limit.

rynmesh_digest_refreshA

Re-fetch all of the owner's digest sources and watched pages, then rebuild and return the ranked digest.

Inputs: no named parameters.

rynmesh_discover_peersC

Read signed peer records from the configured registry.

Inputs: network_id, include_self, max_age_hours, use_cache_on_error.

rynmesh_download_relay_artifactA

Download and hash-verify a relay artifact by content hash.

Inputs: destination (required), content_hash (required), relay_url.

rynmesh_fetch_content_fullA

Fetch and locally cache full content after validating its receipts and hash.

Inputs: content_id (required).

rynmesh_fetch_content_previewC

Fetch and locally cache a content preview after validating its receipts.

Inputs: content_id (required).

rynmesh_fetch_fullC

Compatibility tool: fetch and locally cache full content by clip ID.

Inputs: clip_id (required).

rynmesh_fetch_peer_content_fullB

Fetch full content directly from a peer endpoint after local hash validation.

Inputs: endpoint (required), content_id (required), expected_peer_id.

rynmesh_fetch_peer_content_previewC

Fetch a content preview directly from a peer endpoint after local manifest validation.

Inputs: endpoint (required), content_id (required), expected_peer_id.

rynmesh_fetch_peer_fullC

Compatibility tool: fetch full content directly from a peer endpoint by clip ID.

Inputs: clip_id (required), endpoint (required), expected_peer_id.

rynmesh_fetch_peer_previewC

Compatibility tool: fetch a preview directly from a peer endpoint by clip ID.

Inputs: clip_id (required), endpoint (required), expected_peer_id.

rynmesh_fetch_previewB

Compatibility tool: fetch and locally cache a content preview by clip ID.

Inputs: clip_id (required).

rynmesh_list_clipsC

Compatibility tool: list signed clip announcements visible to this node.

Inputs: include_invalid.

rynmesh_list_contentB

List signed content announcements visible to this node.

Inputs: include_invalid.

rynmesh_list_job_capacitiesB

List signed polling job capacity records from the configured registry.

Inputs: capability, network_id, max_age_hours.

rynmesh_list_peer_clipsA

Compatibility tool: list clips advertised directly by a peer HTTP endpoint.

Inputs: endpoint (required).

rynmesh_list_peer_contentB

List content advertised directly by a peer HTTP endpoint.

Inputs: endpoint (required).

rynmesh_list_work_resultsC

List signed provider work-result messages visible in the registry mailbox.

Inputs: status, network_id, work_order_id, provider_peer_id, +1 more.

rynmesh_node_infoA

Return this local Rynmesh node identity and storage configuration.

Inputs: no named parameters.

rynmesh_poll_work_ordersC

Poll this node's provider mailbox for open, accepted, running, completed, failed, or cancelled work orders.

Inputs: status, capability, network_id, max_age_hours.

rynmesh_publish_clipC

Compatibility tool: publish a local AI-generated video into Rynmesh.

Inputs: media_path (required), title, run_id, work_id, +7 more.

rynmesh_publish_contentC

Publish AI-generated or AI-curated content into Rynmesh with signed run and safety receipts.

Inputs: content_path (required), tags, title, run_id, +9 more.

rynmesh_publish_work_resultC

Publish a signed provider result or status update for a work order.

Inputs: status (required), work_order_id (required), requester_peer_id (required), message, +4 more.

rynmesh_rank_clipsC

Compatibility tool: rank visible clips by Rynmesh Credit distribution weight.

Inputs: category, include_invalid.

rynmesh_rank_contentC

Rank visible content by Rynmesh Credit distribution weight.

Inputs: category, include_invalid.

rynmesh_readlater_saveA

Save a URL to the owner's read-later queue; the node fetches it and surfaces it in the next digest.

Inputs: url (required).

rynmesh_read_messagesC

Read the message history with a peer (requires the local node daemon to be running).

Inputs: peer_id (required), limit.

rynmesh_record_credit_eventC

Append a signed Rynmesh Credit event for useful work or protocol penalties.

Inputs: kind (required), role, amount, reason, +6 more.

rynmesh_register_job_capacityC

Advertise this node as a polling work-order provider for bounded job capabilities.

Inputs: capabilities (required), metadata, network_id, price_credits, +3 more.

rynmesh_register_nodeB

Publish this node's self-signed peer record to the configured registry.

Inputs: endpoints, network_id, capabilities.

rynmesh_relay_artifact_infoC

Read relay metadata for a content-addressed artifact.

Inputs: content_hash (required), relay_url.

rynmesh_send_messageA

Send an end-to-end encrypted message to a peer's node over the mesh (requires the local node daemon to be running).

Inputs: text (required), peer_id (required).

rynmesh_submit_work_orderC

Submit a signed polling work order to a provider node through the registry mailbox.

Inputs: operation (required), capability (required), provider_peer_id (required), params, +7 more.

rynmesh_upload_relay_artifactB

Upload a local artifact to the configured relay as content-addressed bytes.

Inputs: path (required), filename, relay_url, media_type, +1 more.

rynmesh_watcher_addB

Watch a web page for changes (price, stock, release, edits). Changes surface as digest items on refresh.

Inputs: url (required), note.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.6/5.0

    Scored across 39 tools

    Disambiguation2/5

    Many tools have overlapping purposes, especially the compatibility tools: fetch_preview/fetch_content_preview/fetch_peer_preview/fetch_peer_content_preview, and the corresponding full-content variants, are nearly indistinguishable at a glance. list_clips/list_content, rank_clips/rank_content, and publish_clip/publish_content further blur the boundary between legacy and current workflows.

    Naming Consistency2/5

    Tool names are heavily inconsistent: rynmesh_digest_get uses 'get' while rynmesh_node_info uses 'info' and rynmesh_read_messages uses 'read'. Fetch, list, rank, publish, and compatibility variants follow no predictable verb/object pattern, so it is difficult to anticipate the correct tool name.

    Tool Count2/5

    With 39 tools, the server exceeds the reasonable range for a single MCP server, and a large portion are redundant compatibility wrappers rather than distinct capabilities. The underlying feature set could likely be served by fewer than half these tools without losing functionality.

    Completeness3/5

    Core workflows are present: digest sources/feedback, content publishing/fetching, peer discovery, credit events, relay artifacts, and work orders. However, there are notable gaps such as no tool to remove a digest source or watcher, no read-later queue listing/removal, and no update/delete operations for published content.

    Maintenance

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to network on behalf of users, handling profile management, intent-based matching, and secure messaging through the Model Context Protocol.
      11 npm
      1
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides AI agents with persistent identities (Weid numbers) and a friend-based messaging system, enabling cross-platform AI-to-AI communication through 11 MCP tools.
      1
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants such as Claude and Cursor to discover and verify agents, negotiate offers, execute conditional settlements, and verify receipts and complete multi-agent workflows through eight MCP tools.
      17 PyPI
      1
      MIT