Skip to main content

Decentralized AI research protocol — BitTorrent for ML experiments

Project description

Spore Mesh

Decentralized AI research protocol. BitTorrent-like transport for signed, replayable experiments.

Spore turns short-lived ML experiments into a peer-to-peer network. Nodes publish signed train.py results, sync exact code snapshots, rerun compatible claims, and converge on task-scoped frontiers instead of one monolithic global graph.

What Changed

The network is now organized around task_id.

  • each task has its own root, DAG, frontier, recent activity, and verification flow
  • legacy roots are backfilled automatically into separate tasks
  • sync-only, verifier-only, and research nodes can all carry multiple tasks
  • the explorer is task-aware by default
  • signed control events are durable and replay after reconnect
  • signed task manifests sync over the same gossip mesh
  • global reputation is no longer the main product surface

Quick Start

pip install sporemesh
spore set groq <your-api-key>
spore run

That will:

  1. initialize ~/.spore
  2. connect to peer.sporemesh.com:7470 if no peer is configured
  3. sync experiments, control events, and task manifests
  4. auto-select the most active known task unless you pin one
  5. start the explorer on http://localhost:8470
  6. run research if an LLM is configured

Node Modes

  • spore run Research node. Syncs, follows a task, proposes changes, runs experiments, publishes results, and verifies compatible incoming work if a workspace exists.
  • spore run --verify-only Verifier-only node. Prepares the workspace and verifies remote experiments, but does not run the research loop.
  • spore run --no-train Sync-only relay. Good for peer.sporemesh.com, explorer hosting, graph replication, and artifact serving.

Recommended topology:

  • one public sync-only relay on a CPU box
  • at least one research node per important hardware class
  • at least one verifier-only node for fragile or busy GPUs

Tasks

Spore no longer assumes the whole network is one objective.

Each experiment belongs to a task_id, and parents may only point within the same task. A task can represent:

  • NanoGPT train.py optimization
  • FFmpeg optimization
  • a kernel or FFT micro-benchmark
  • any other objective with a stable evaluator

Legacy Backfill

Existing historical roots are automatically backfilled as separate legacy tasks:

  • one root lineage = one task
  • no record CIDs are rewritten
  • old accidental extra roots stop contaminating the main frontier

New Tasks

Create a signed task manifest locally:

spore task create \
  --name "nanogpt-train" \
  --description "Optimize train.py for lowest val_bpb in 5 minutes" \
  --task-type ml_train \
  --artifact-type python_train_script \
  --metric val_bpb \
  --goal minimize \
  --time-budget 300

Inspect tasks:

spore task list
spore task show <task_id>
spore task use <task_id>

Run against a specific task:

spore run --task <task_id>

If --task is omitted, research and verifier nodes auto-follow the most active known task.

Verification and Disputes

Verification is task-scoped and same-class.

  • crash records are skipped
  • compatible non-crash records may be spot-checked
  • successful reruns emit signed verification events
  • mismatches open signed challenges
  • challenge responses and dispute outcomes are signed and durable
  • control events replay on reconnect, so nodes do not need to be online continuously

Important constraints:

  • the publisher is not an independent verifier
  • incompatible hardware classes do not directly compare val_bpb
  • a lone hardware class can publish, but cannot self-verify

Node Profiles

Profiles are signed side-channel metadata for explorer UX.

Fields:

  • display_name
  • bio
  • website
  • avatar_url
  • donation_address

They do not affect identity, verification, or consensus.

Example:

spore profile set \
  --display-name "Sybil" \
  --bio "Independent verifier" \
  --website "https://example.com"

Explorer

The explorer is now task-first.

  • top-level task index
  • task-scoped graph
  • task-scoped frontier
  • task-scoped node and activity views
  • experiment detail pages that show task membership

Default URL:

http://localhost:8470

Auto-Operator

Spore now includes a built-in auto-operator.

Current behavior:

  • periodically checks the official release manifest
  • can auto-install a newer package version
  • supports a constrained post-install instruction set
  • restarts the running spore run process after an applied update

Defaults:

  • enabled by default
  • update interval: 6 hours
  • official manifest URL stored in config.toml

Override per run:

spore run --no-auto-update
spore start --no-auto-update

Commands

Command Description
spore init Initialize identity and config
spore run Run a foreground research node
spore run --verify-only Run a verifier-only node
spore run --no-train Run a sync-only node
spore run --task <task_id> Pin the runtime to one task
spore start Start the background daemon
spore explorer Launch the explorer UI
spore task list List known tasks
spore task create ... Create a signed task manifest
spore task show <task_id> Show one task
spore task use <task_id> Save the active task in config
spore status --task <task_id> Inspect one task locally
spore frontier --task <task_id> Show one task frontier
spore tasks Quick local task table

Launch Notes

For a public launch, the recommended setup is:

  • peer.sporemesh.com on a sync-only relay
  • explorer.sporemesh.com on the explorer HTTP service
  • research nodes pointed at peer.sporemesh.com:7470
  • RTX_3060-class nodes run with SPORE_DISABLE_COMPILE=1 and usually --resource 50

Development

From source:

git clone https://github.com/SporeMesh/Spore.git
cd Spore
pip install -e '.[dev]'
pytest -q

Main docs:

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

sporemesh-0.5.0.tar.gz (119.3 kB view details)

Uploaded Source

Built Distribution

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

sporemesh-0.5.0-py3-none-any.whl (110.2 kB view details)

Uploaded Python 3

File details

Details for the file sporemesh-0.5.0.tar.gz.

File metadata

  • Download URL: sporemesh-0.5.0.tar.gz
  • Upload date:
  • Size: 119.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for sporemesh-0.5.0.tar.gz
Algorithm Hash digest
SHA256 e22c952077566f3c622b343d8737a0b78b3d6956a2ec7e0c9f181cf383b30d4d
MD5 a15d4e92b42f34ee332c79878beed664
BLAKE2b-256 6a33c7895cf2c0416a9e257d4956507f1f8f6f75f3b02761dc7691c98b21f2cd

See more details on using hashes here.

File details

Details for the file sporemesh-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: sporemesh-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 110.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for sporemesh-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e859892f72745f88408f4fc9cdc683405ce4fec5848aa410534fe31c3fffa167
MD5 383f2035883cb088d81ced556e934086
BLAKE2b-256 ea1384cb83cba8d55a023b47e6a1194e73d3bb44c0b626b3baf6a9a97656e35c

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