Soul Protocol
Persistent identity, memory and values for an agent, defined as Protocol Buffers services.
Status: defined, not served
The services below exist as .proto definitions, and a small in-process Go type holds a soul's memory, values and persona. No node serves any of these RPCs today, and there is no client library for them. If you are looking for something to build against right now, that is the compute marketplace and inference APIs, which a node does serve.
What the protocol defines
matrix.soul.v1.SoulLifecycleService CreateSoul, GetSoul, UpdateSoul, DeleteSoul,
StartTraining, StopTraining, GetTrainingStatus,
AddTrainingExamples
matrix.soul.v1.MemoryService memory read/write
matrix.soul.v1.ValueService value weights
matrix.soul.v1.GoalService goals
matrix.soul.v1.SoulChatService conversation
matrix.soul.v1.InferenceService soul-scoped inferenceThe definitions live in proto/matrix/soul/v1. They are buf-managed and generate Go stubs, so implementing them is a matter of writing the service, not of designing the wire format.
What exists in the node
// services/core/internal/soul/soul.go
type Soul struct {
ID string
memory []MemoryEntry // timestamp, content, type, tags
values map[string]float64
persona Persona // traits, goals
}A node holds these in a map, keyed by id. They are reachable from Go code inside the process and from nowhere else: no gRPC service is registered for them, so they are not on the network and not persisted to the store.
What is missing
- A service implementation for any of the six definitions.
- Persistence: a soul currently lives in memory and dies with the process.
- A settlement story. Training and inference against a soul cost compute, and nothing connects them to the marketplace that charges for it.
- Authorisation: who may read another account's soul memory, and on what terms.
Next
- Matrix Protocol - the protocol that is implemented and running
- Agent development - the WebAssembly runtime a node actually has