gRPC Contracts
All ContextUnity services communicate via gRPC using a universal ContextUnit envelope — every RPC accepts and returns contextunity.core.ContextUnit. Domain-specific data flows through the payload dict.
ContextUnit Envelope Pattern
// Every service uses ContextUnit as input and outputrpc Search(contextunity.core.ContextUnit) returns (stream contextunity.core.ContextUnit);rpc Upsert(contextunity.core.ContextUnit) returns (contextunity.core.ContextUnit);This pattern unifies security (token travels with every call), provenance tracking, and error handling across the entire mesh.
Proto Definitions
All proto files live in packages/core/protos/:
brain.proto — 18 RPCs
service BrainService { // Knowledge rpc Search(ContextUnit) returns (stream ContextUnit); rpc GraphSearch(ContextUnit) returns (ContextUnit); rpc CreateKGRelation(ContextUnit) returns (ContextUnit); rpc Upsert(ContextUnit) returns (ContextUnit);
// Memory rpc QueryMemory(ContextUnit) returns (stream ContextUnit); rpc AddEpisode(ContextUnit) returns (ContextUnit); rpc GetRecentEpisodes(ContextUnit) returns (stream ContextUnit); rpc UpsertFact(ContextUnit) returns (ContextUnit); rpc GetUserFacts(ContextUnit) returns (stream ContextUnit); rpc GetEpisodeStats(ContextUnit) returns (ContextUnit); rpc RetentionCleanup(ContextUnit) returns (ContextUnit);
// Traces rpc LogTrace(ContextUnit) returns (ContextUnit); rpc GetTraces(ContextUnit) returns (stream ContextUnit);
// Taxonomy rpc UpsertTaxonomy(ContextUnit) returns (ContextUnit); rpc GetTaxonomy(ContextUnit) returns (stream ContextUnit);
// Shared State rpc WriteBlackboard(ContextUnit) returns (ContextUnit); rpc ReadBlackboard(ContextUnit) returns (ContextUnit);
// Commerce (mixin) rpc MatchDuckDB(ContextUnit) returns (ContextUnit);}router.proto — 8 RPCs
service RouterService { rpc ExecuteAgent(ContextUnit) returns (ContextUnit); rpc StreamAgent(ContextUnit) returns (stream ContextUnit); rpc ExecuteDispatcher(ContextUnit) returns (ContextUnit); rpc StreamDispatcher(ContextUnit) returns (stream ContextUnit); rpc RegisterManifest(ContextUnit) returns (ContextUnit); rpc ToolExecutorStream(stream ContextUnit) returns (stream ContextUnit); rpc ExecuteNode(ContextUnit) returns (ContextUnit); rpc IntrospectRegistrations(ContextUnit) returns (ContextUnit);}worker.proto — 4 RPCs
service WorkerService { rpc StartWorkflow(ContextUnit) returns (ContextUnit); rpc GetTaskStatus(ContextUnit) returns (ContextUnit); rpc ExecuteCode(ContextUnit) returns (ContextUnit); rpc RegisterSchedules(ContextUnit) returns (ContextUnit);}shield.proto — 12 RPCs
service ShieldService { // Core security rpc Scan(ContextUnit) returns (ContextUnit); rpc EvaluatePolicy(ContextUnit) returns (ContextUnit); rpc CheckCompliance(ContextUnit) returns (ContextUnit); rpc RecordAudit(ContextUnit) returns (ContextUnit); rpc MintToken(ContextUnit) returns (ContextUnit); rpc VerifyToken(ContextUnit) returns (ContextUnit); rpc RevokeToken(ContextUnit) returns (ContextUnit); rpc GetStats(ContextUnit) returns (ContextUnit);
// Secrets management rpc GetSecret(ContextUnit) returns (ContextUnit); rpc PutSecret(ContextUnit) returns (ContextUnit); rpc ListSecrets(ContextUnit) returns (ContextUnit); rpc RotateSecret(ContextUnit) returns (ContextUnit);}admin.proto — 18 RPCs (ContextView)
service AdminService { // Health & Monitoring rpc GetServiceHealth(ContextUnit) returns (ContextUnit); rpc GetServiceMetrics(ContextUnit) returns (ContextUnit); rpc CheckServiceConnectivity(ContextUnit) returns (ContextUnit);
// Memory rpc GetMemoryStats(ContextUnit) returns (ContextUnit); rpc GetMemoryLayerStats(ContextUnit) returns (ContextUnit);
// Agent Management rpc ListAgents(ContextUnit) returns (ContextUnit); rpc GetAgentConfig(ContextUnit) returns (ContextUnit); rpc UpdateAgentPermissions(ContextUnit) returns (ContextUnit); rpc UpdateAgentTools(ContextUnit) returns (ContextUnit); rpc GetAgentActivity(ContextUnit) returns (ContextUnit);
// Traces & Debugging rpc GetTraceDetails(ContextUnit) returns (ContextUnit); rpc SearchTraces(ContextUnit) returns (ContextUnit); rpc GetTraceChainOfThought(ContextUnit) returns (ContextUnit);
// Analytics rpc GetSystemAnalytics(ContextUnit) returns (ContextUnit); rpc GetErrorAnalytics(ContextUnit) returns (ContextUnit);
// Self-Healing rpc DetectSystemErrors(ContextUnit) returns (ContextUnit); rpc TriggerSelfHealing(ContextUnit) returns (ContextUnit); rpc GetHealingStatus(ContextUnit) returns (ContextUnit);}Proto Compilation
After modifying any .proto file, regenerate stubs immediately:
cd packages/core./compile_protos.shThis generates *_pb2.py and *_pb2_grpc.py files for all 6 protos.
Importing Stubs
# Correct — always import from contextunity.corefrom contextunity.core import brain_pb2, brain_pb2_grpcfrom contextunity.core import contextunit_pb2
# Create clientchannel = grpc.aio.insecure_channel("localhost:50051")stub = brain_pb2_grpc.BrainServiceStub(channel)
# All RPCs use ContextUnitunit = ContextUnit(payload={"tenant_id": "my_app", "query": "..."})response = await stub.Upsert(unit.to_protobuf(contextunit_pb2))