Documentation menu
Quickstart

From zero to a private swarm.

ProgressPals lets a small team pool their hardware to run a large open-source model together — privately, on machines you control, no GPU rental, no API fees. This page is the shortest functional path.

Install

ProgressPals is a single Python package that installs a CLI called pals. Python 3.10 or 3.11 is required. Both paths below start from a successful install.

install
$pip install progresspals
resolving dependencies...
✓ Successfully installed progresspals
$pals --help
Usage: pals [OPTIONS] COMMAND [ARGS]...

Operator path — start a swarm

You’re the person hosting the cluster. You’ll register the swarm, mint an invite, and bring up the first server. Most teams have exactly one operator.

1

Initialize your local config

Creates ~/.config/progresspals/config.json with mode 0600. Your libp2p identity key gets generated on the first server start (pals create / pals join / pals serve). Nothing leaves your machine yet.

pals init
$pals init
✓ config written to ~/.config/progresspals/config.json
identity.key will be created on first server start
2

Register the swarm

Records the swarm so you can mint invites and manage members. You only do this once per swarm.

pals swarm create
$pals swarm create --name "my-team"
✓ swarm registered · swarm_id stored in config
3

Mint an invite

Generates a single-use token (override with --max-uses). Hand it to your teammate over a secure channel — Signal, an encrypted email, whatever you trust. The token is printed only once; save it.

pals invite create
$pals invite create --max-uses 5 --expires-hours 24
⟶ Invite token (shown once — save it now):
pp_inv_a8c4f2e9b1d6a7c3...
4

Start hosting layers

Brings up a server that holds a slice of the model. The CLI logs your multiaddr — share that with joiners along with the invite token.

pals create
$pals create meta-llama/Llama-3.1-8B
✓ starting NEW swarm
multiaddr: /ip4/HOST/tcp/PORT/p2p/PEER_ID
hosting layers 0–14 of 32
Heads up. By default the server binds to loopback only. To accept off-machine peers, add --public.
5

(Optional) expose an OpenAI endpoint

Once enough pals are online to cover the full model, run a local HTTP server that speaks the OpenAI wire format. Cursor, Aider, Continue, the openai Python SDK — anything OpenAI-shaped works unchanged.

pals serve
$pals serve meta-llama/Llama-3.1-8B
✓ listening on http://127.0.0.1:8080/v1
Public endpoints need a key. If you pass --host 0.0.0.0, you must also pass --api-key. pals serve refuses to bind a non-loopback interface without one.

Joiner path — you got an invite

Someone gave you an invite token (looks like pp_inv_...) and a multiaddr (looks like /ip4/.../tcp/.../p2p/...). Here’s how you bring your machine to their cluster.

1

Initialize your local config

Same step as the operator.

pals init
$pals init
✓ config written to ~/.config/progresspals/config.json
2

Redeem the invite

Sends your peer identity, checks the token, and adds your machine to the swarm’s allow-list. Pass the token via env var so it stays out of your shell history.

pals login
$export PROGRESSPALS_INVITE_TOKEN=pp_inv_...
$pals login
✓ peer credential stored
3

Join the swarm

Use the multiaddr from the operator. Your machine will download only its assigned slice of the model and start serving its layers.

pals join
$pals join meta-llama/Llama-3.1-8B \
--peer /ip4/HOST/tcp/PORT/p2p/PEER_ID
✓ joined swarm · holding layers 15–47
4

(Optional) watch the swarm live

A read-only TUI that polls every 30 seconds: peers, invites, status. Press Ctrl-C to exit.

pals dash
$pals dash

Next steps