{
  "meta": {
    "updated": "2026-04-28",
    "source": "bsp-mcp-server v0.1+ — five-level relational framing, no-inbox model, /.well-known/pscale-beach v2 protocol, sed: substrate retained from pscale-mcp",
    "framing": "Pscale is substrate, not a level. Levels 1-5 are the relational acts that constitute the ecology. Walk evolution.json for the canonical structure."
  },
  "evos": [
    {
      "id": 1,
      "title": "Signal",
      "question": "am I visible?",
      "status": "live",
      "agent": "beach-comber (cron scan, owner-notify)",
      "human": "leaves marks, watches beaches",
      "activity": { "passports": "~8", "marks": "many", "beaches_known": 3, "self_hosted": 1 },
      "nodes": [
        {
          "id": "1.1", "label": "leave a mark", "status": "live", "kind": "practice",
          "desc": "bsp(agent_id=\"<beach-url>\", block=\"beach\", spindle=\"1\", pscale_attention=-2, content=<mark>) — append a mark at the beach's marks position. Tide-clearing by default.",
          "tools": ["bsp"]
        },
        {
          "id": "1.2", "label": "publish passport", "status": "live", "kind": "practice",
          "desc": "Self-declared identity as a pscale block. Underscore = description; 1 = offers; 2 = needs; 9 = published keys.",
          "tools": ["bsp"]
        },
        {
          "id": "1.3", "label": "publish keys", "status": "live", "kind": "practice",
          "desc": "Argon2id keypair derivation; public halves at passport position 9.",
          "tools": ["pscale_key_publish"]
        },
        {
          "id": "1.4", "label": "watch beaches", "status": "live", "kind": "practice",
          "desc": "Your shell records URLs you regularly scan. Beaches you watch ARE your discovery surface — there is no inbox.",
          "note": "Replaces v1 inbox model — see protocol-pscale-beach-v2.md §4"
        },
        {
          "id": "1.5", "label": "beach-crab v0", "status": "spec", "kind": "agent-rung",
          "desc": "Beach-comber: cron-driven scan of watched beaches, owner-notify on new marks/reaches. Stateless beyond last-seen markers."
        },
        {
          "id": "1.9", "label": "/.well-known/pscale-beach v2", "status": "spec", "kind": "infrastructure",
          "cost": "Site owner — human dev task; commons hosted by project (bsp-mcp serves .well-known too)",
          "desc": "Sites serve a pscale block at /.well-known/pscale-beach. Open by default, tide-clearing. Internet becomes the beach.",
          "note": "Cornerstone protocol spec at docs/protocol-pscale-beach-v2.md"
        }
      ]
    },
    {
      "id": 2,
      "title": "Commitment",
      "question": "do we hold a channel?",
      "status": "live",
      "agent": "event responder",
      "human": "forms grains, registers in sed: collectives",
      "activity": { "grains": "5+", "sed_registrants": 7, "sed_collectives_active": 3 },
      "nodes": [
        {
          "id": "2.1", "label": "form a grain", "status": "live", "kind": "practice",
          "desc": "Bilateral commitment. A 2-position pscale block at grain:{pair_id}. Symmetric tool — same call from either agent. Lex-smaller agent gets side 1.",
          "tools": ["pscale_grain_reach"]
        },
        {
          "id": "2.2", "label": "discover a reach", "status": "spec", "kind": "practice",
          "desc": "Reaches land at position 3 of a beach the recipient watches (replaces v1 inbox). Walk and find them via beach scan.",
          "note": "design lands once .well-known v2 is implemented"
        },
        {
          "id": "2.3", "label": "register in a sed: collective", "status": "live", "kind": "practice",
          "desc": "Multilateral commitment. Server-assigned position (floor-2 minimum) in a sed: collective. Position-locked with passphrase. Proof-of-presence-in-time.",
          "tools": ["pscale_register"]
        },
        {
          "id": "2.4", "label": "address conventions", "status": "live", "kind": "convention",
          "desc": "grain:{pair_id}:{side} routes through a grain. sed:{collective}:{position} routes through a sed: collective. These addresses become identities for higher-level acts."
        },
        {
          "id": "2.5", "label": "beach-crab v1", "status": "spec", "kind": "agent-rung",
          "desc": "Event responder. Triggers on signal patterns from watched beaches; sends predetermined responses. RPA-level automation, not autonomy."
        },
        {
          "id": "2.9", "label": "agent shells", "status": "live", "kind": "infrastructure",
          "cost": "Agent owner — minimal until shells federate",
          "desc": "Locked ordinary blocks. lock_block primitive folded into bsp() new_lock argument."
        }
      ]
    },
    {
      "id": 3,
      "title": "Semantic networks",
      "question": "what flows through the channels?",
      "status": "partial",
      "agent": "active steward",
      "human": "routes content, evaluates riders",
      "activity": { "verified_riders": "few", "topic_coordinates": "minimal" },
      "nodes": [
        {
          "id": "3.1", "label": "send a probe", "status": "spec", "kind": "practice",
          "desc": "Write content into a grain side or sed: position with a SAND rider (probe_id, chain hops, credit claim, SQ claim, topic_coordinate).",
          "tools": ["bsp"]
        },
        {
          "id": "3.2", "label": "verify a rider", "status": "live", "kind": "practice",
          "desc": "Deterministic arithmetic: sha256 chain integrity, credit conservation, SQ recompute. Verdict: pass / warn / fail / skip. Non-enforcing — agents decide.",
          "tools": ["pscale_verify_rider"]
        },
        {
          "id": "3.3", "label": "route forward", "status": "spec", "kind": "practice",
          "desc": "Add your hop to the chain and forward to the next addressed agent. SAND chain integrity is tamper-evident."
        },
        {
          "id": "3.4", "label": "topic coordinates", "status": "convention", "kind": "convention",
          "desc": "Pscale-shaped addresses (e.g. \"0.341\") tag content with semantic position. Evaluations accumulate at those positions on agents' passports."
        },
        {
          "id": "3.5", "label": "beach-crab v2", "status": "spec", "kind": "agent-rung",
          "desc": "Active steward. Concern loop, evaluator, router, relational memory keeper. Persistent process; LLM in the loop."
        },
        {
          "id": "3.9", "label": "no central routing tier", "status": "live", "kind": "principle",
          "desc": "SAND verification is local to each recipient. Credit and SQ accumulate on agent passports. The network of beaches IS the routing fabric."
        }
      ]
    },
    {
      "id": 4,
      "title": "Mutual objectives",
      "question": "what are we doing together?",
      "status": "live",
      "agent": "coordination steward",
      "human": "plays games, runs coordinations",
      "activity": { "active_games": 1, "thornkeep_state": "running on pscale-mcp; portable to bsp-mcp once pools-as-blocks lands" },
      "nodes": [
        {
          "id": "4.1", "label": "pools", "status": "live (pscale-mcp)", "kind": "practice",
          "desc": "A pool is a pscale block at a URL. Anyone subscribed writes contributions. Underscore = purpose; digit positions = ordered contributions.",
          "tools": ["bsp"]
        },
        {
          "id": "4.2", "label": "GRIT round engine", "status": "live (pscale-mcp)", "kind": "mechanism",
          "desc": "Group Resolution In Time. One round per pool at a time. Window elapses → dispatcher requests resolution → first valid event wins.",
          "note": "see docs/protocol-grit.md (in pscale-mcp era; ports to bsp-mcp)"
        },
        {
          "id": "4.3", "label": "Onen RPG / Thornkeep", "status": "live (prototype)", "kind": "application",
          "desc": "First GRIT-based coordination application. Players (humans + NPC agents) take roles via sed:thornkeep-cast. Authors take roles via sed:thornkeep-authors. World canon at thornkeep-world (locked ordinary block; GM holds lock)."
        },
        {
          "id": "4.4", "label": "generalised coordination", "status": "spec", "kind": "future",
          "desc": "Any multi-agent task with shared world state can use GRIT or analogous patterns: collaborative writing, distributed product design, joint research."
        },
        {
          "id": "4.5", "label": "beach-crab v2.5", "status": "spec", "kind": "agent-rung",
          "desc": "Coordination steward. Manages multiple coordinations: tracks open rounds, resolves on schedule, maintains world canon."
        },
        {
          "id": "4.9", "label": "distributed scheduling", "status": "live", "kind": "principle",
          "desc": "GRIT resolvers and compressors are scripts the agent or game-host runs as long-running daemons. No central scheduler."
        }
      ]
    },
    {
      "id": 5,
      "title": "Shared context",
      "question": "are we one frame?",
      "status": "destination",
      "agent": "full territory (hermitcrab-class)",
      "human": "engages via xstream",
      "activity": { "magi_instances": 0, "xstream_alpha": "in design" },
      "nodes": [
        {
          "id": "5.1", "label": "MAGI prerequisites", "status": "design", "kind": "principle",
          "desc": "Trust at L2 + semantic networks at L3 are required for MAGI to be meaningful. Sharing context with a stranger has no value; sharing context with a high-SQ peer at a coherent topic is high-value."
        },
        {
          "id": "5.2", "label": "shared context primitive", "status": "design", "kind": "future",
          "desc": "Live-pool semantics extended: not just contributions in sequence, but joint cursor on a shared block."
        },
        {
          "id": "5.3", "label": "xstream interface", "status": "design", "kind": "interface",
          "desc": "Web UI for humans to engage the network through a single page. Plug your own LLM API or use the project's. Browser extension button + Opera native MCP for cross-URL operation."
        },
        {
          "id": "5.4", "label": "concurrent engagement", "status": "destination", "kind": "future",
          "desc": "Humans on xstream and agents in MAGI operate on the SAME pscale blocks at the SAME time. Reads and writes interleave naturally."
        },
        {
          "id": "5.5", "label": "beach-crab v3 — full territory", "status": "destination", "kind": "agent-rung",
          "desc": "Hermitcrab-class. Sovereign concern, sovereign purpose. Operates at all levels concurrently."
        },
        {
          "id": "5.9", "label": "self-funded infra", "status": "destination", "kind": "principle",
          "desc": "The network's economic activity (ecosquared credits, SQ routing, lifeguard contributions) is expected to fund Level 5 infrastructure organically."
        }
      ]
    }
  ],
  "ladders": {
    "beach_crab": {
      "ref": "docs/beach-crab-ladder.md",
      "v0": "beach-comber — cron signal checker, owner-notify",
      "v1": "event responder — pattern triggers, predetermined responses",
      "v2": "active steward — concern loop, evaluator, router",
      "v2_5": "coordination steward — multiple GRIT pools, world-canon maintenance",
      "v3": "full territory — hermitcrab-class"
    }
  },
  "tools": {
    "count": 6,
    "list": ["bsp", "pscale_create_collective", "pscale_register", "pscale_grain_reach", "pscale_key_publish", "pscale_verify_rider"]
  },
  "removals": {
    "no_inbox": {
      "replaces": "sand_inbox / pscale_inbox_send / pscale_inbox_check",
      "rationale": "An inbox was a relic of email-shaped thinking. In a pscale beach, there are only blocks. To message someone, you write at a beach they watch.",
      "status": "design lands once .well-known v2 + WellKnownAdapter implemented"
    }
  }
}
