plato-core
Plato Engine Block — a sub-400-line room runtime for agent-space interaction.
Foundation types and mesh registry for the PLATO (Protocol for Layered Agent Tile Orchestration) ecosystem. Zero external dependencies — everything else builds on top.
Install
pip install plato-core
Quick Start
from plato_core import TrainingTile, TileType, content_hash, LamportClock
# Create a tile — the atomic unit of work in PLATO
tile = TrainingTile(
tile_id="chk-001",
tile_type=TileType.CHECKPOINT,
name="my-model-v1",
)
# Lamport clock for causal ordering across distributed rooms
clock = LamportClock()
tile.lamport = clock.tick()
# Content-addressable hash (SHA-256)
h = content_hash(b"some weights data")
print(h) # 64-char hex string
The Mesh Registry
PLATO rooms auto-discover each other through the mesh registry. Any installed package that declares an entry point is found automatically:
from plato_core import MeshRegistry
registry = MeshRegistry()
matchers = registry.get_matchers() # from plato-matcher
compressors = registry.get_compressors() # from plato-compress
trainers = registry.get_trainers() # from plato-training
Registering a Plugin
- Add
plato-coreas a dependency - Declare an entry point in
pyproject.toml:
[project.entry-points."superinstance.plugins"]
my-plugin = "my_package._mesh:register"
- Implement the register function:
# my_package/_mesh.py
def register(registry):
registry.register("matchers", "my_matcher", lambda: MyMatcher)
That's it. The mesh finds it automatically.
Key Concepts
Tiles are the atomic unit of work — signed, content-addressed artifacts that flow between rooms. Every tile has a lifecycle (Active → Superseded → Retracted) and a Lamport timestamp for ordering.
Rooms are agents. Each agent is a PLATO room that produces and consumes tiles. Rooms discover each other through the mesh registry.
Lamport clocks provide causal ordering without a central coordinator. When two rooms exchange tiles, they merge clocks — enabling distributed ordering.
What's Provided
TrainingTile,TileType— tile data modelTileLifecycle— Active / Superseded / RetractedLamportClock— distributed causal orderingTrainingConfig,AdapterConfig,TrainingMetrics— ML config typescontent_hash()— SHA-256 content addressingMeshRegistry— auto-discovery of ecosystem packages
Architecture
plato-core (this) ← base types + mesh registry
├── plato-types ← protocol-level type definitions
├── plato-training ← training rooms, micro models
├── plato-mcp ← MCP server (expose rooms as tools)
├── plato-matcher ← semantic matching
├── plato-compress ← compression / quantization
└── ... ← any future PLATO package
Documentation
- Mesh Architecture — how the registry and auto-discovery work
- docs/README.md — full documentation index
PLATO Engine Block Family
Plato Core is the Python foundation layer of the broader PLATO ecosystem:
| Component | Language | Repo | Focus |
|---|---|---|---|
| Python Core ← you are here | Python | plato-core | Foundation types, mesh registry, training tiles |
| C Reference | C99 | plato-engine-block-c | Embedded, bare-metal, zero heap alloc |
| Rust (Original) | Rust | plato-engine-block | no_std + alloc, builder pattern, tokio server |
| Elixir/OTP | Elixir | plato-engine-block-elixir | BEAM supervision trees, fault tolerance, hot reload |
| Zig | Zig | plato-engine-block-zig | Comptime ternary packing, cross-compile |
| Runtime Kernel | Rust | plato-runtime-kernel | Spatial model: tensor grid, batons, assertion traps |
| Server | Python | plato-server | Knowledge tiles, fleet sync via Matrix, HTTP API |
Specs & Guides:
Related Repos
- plato-types — Core tile protocol types (this package re-exports them)
- plato-training — Training rooms and micro models
- plato-mcp — Expose PLATO rooms as MCP tools
- cocapn-plato — Full Cocapn PLATO integration (SDK + server)
- plato-room-musician — Sonify fleet activity via MIDI
- cocapn-glue-core — Binary wire protocol for fleet communication
- penrose-memory — Aperiodic memory palace for AI agents
Metadata
Release files for plato-core 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| plato_core-0.2.0.tar.gz | 11.6 kB | Without provenance | Details for plato_core-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| plato_core-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for plato_core-0.2.0-py3-none-any.whl |
Total release size: 20.0 kB
Release files / plato_core-0.2.0.tar.gz
| Download URL | plato_core-0.2.0.tar.gz |
|---|---|
| Size | 11.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b011a4551579d4866e965af463fe5a203b5ec5d8f5ae6bc9799369cbeccc6d9b
|
|
BLAKE2b-256 checksum How to use checksums |
44f0dbf53dc6d7e9b37acc677faf4e9d6e8f70700e96c1ccdfd4c1f80560f1ff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Release files / plato_core-0.2.0-py3-none-any.whl
| Download URL | plato_core-0.2.0-py3-none-any.whl |
|---|---|
| Size | 8.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
14a2dcfbf653d0bcabfdb30fb2d34dc8d5d1179b2d6eb03986d1f428ffd1cf53
|
|
BLAKE2b-256 checksum How to use checksums |
3d98a4872ba1d12b78e776b3dac833eadc70573193068c5dfccad303d3f7ef1d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Security for plato-core 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.