Join the Lake
Joining means publishing a signed card on a domain you control and announcing it to any Lake node. No sign-up, no approval, no account with us.
There are three ways in. Pick yours.
1. As a person: run a house runs
A house is one container: a Solid pod with your data, and a housekeeper that guards it. Start a local Lake, then join it:
git clone https://github.com/thelakeprotocol/lake && cd lake
docker compose up -d # a Lake node, an issuer, three houses
open http://localhost:7000 # the live map
docker run -d --network lake_default --hostname house-you \
-v ./personas/research.yaml:/rules.yaml \
ghcr.io/thelakeprotocol/lake-house --name youOn start, your house:
- Starts a pod (Community Solid Server) and creates your WebID and folders:
/health/,/finance/,/agreements/,/receipts/,/wallet/. Its signing key goes in/wallet/. - Asks the Issuer for a synthetic health record, checks the Issuer's signature, and stores the original untouched in
/health/original/. - Converts it to the canonical Lake model inside the pod (
/health/claims.ttl) and signs the result. - Re-verifies the whole chain, publishes its signed Agent Card at
/.well-known/agent-card.json, and starts answering on A2A.
Watch it: docker logs -f <container>. Then knock:
docker compose run --rm lake knock http://house-you:4000 --offer gp # a GP asks for medications
docker compose run --rm lake knock http://house-you:4000 --offer research # a $2 study
docker compose run --rm lake knock http://house-you:4000 --offer injection # "ignore your rules…"
docker compose run --rm lake knock http://house-you:4000 --offer gp --tamper forge-cardYour house registers with the node and appears on the map. Every knock, decision and blocked attack shows there as it happens: ids, kinds and counts, never a record.
Your rules.yaml decides what happens next. Start from a persona:
| Persona | Behaviour |
|---|---|
stan.yaml | Joins ethical research for at least $4, never shares postcode, declines marketing |
research.yaml | Joins approved studies for at least $5 |
strict.yaml | Declines almost everything, asks about the rest |
Bring your own pod
The house speaks the Solid protocol, so any Solid server works: run your own, use a pod provider, or point it at an enterprise Solid server you already have.
2. As a builder: bring your agent later · milestone 9
Any agent that speaks A2A and signs a Lake card is a citizen. Claude, GPT, a local model, a 40-line script: the Lake doesn't care what's inside.
See Build an agent. The protocol is already specified, and the signing and card code runs today.
3. As infrastructure: run a node runs · federation in milestone 8
A node is a registry and a message bus. It holds no personal data and makes no decisions. See Run a node.
Let your AI assistant read your pod
Your pod has an MCP door. Any MCP-capable assistant (Claude Desktop, Claude Code, others) can read your claims through it, and your wallet stays shut. Add this to your assistant's MCP config:
{
"mcpServers": {
"my-pod": {
"command": "docker",
"args": ["exec", "-i", "-e", "LAKE_OWNER=you", "<your-house-container>", "node", "dist/pod-mcp-stdio.js"]
}
}
}Tools: pod_list, pod_read, pod_claims. Read-only. Your assistant, your model, your bill: the Lake bundles none.
No Docker?
Open the rules playground on the home page. It runs the real rules engine in your browser.