What problem does it solve? Defining RPC contracts that both client and server packages can share is error-prone: payload, success, error, and defect schemas drift apart, streaming endpoints are typed inconsistently, and middleware requirements surface only at runtime. This Skill guides an agent to declare shared, type-safe RPC contracts using effect/unstable/rpc so contract changes become compile errors on both sides. ## Core Features & Use Cases - Procedure definition with Rpc.make: Declare payload, success, error, and defect schemas per procedure, with struct-field or Schema.Class payloads, primaryKey identity, and custom defect serialization. - Streaming and composition: Model streaming endpoints with stream: true / RpcSchema.Stream, and compose contracts with RpcGroup combinators (add, merge, omit, prefix, annotate, middleware). - Middleware contracts: Define RpcMiddleware.Service classes with provides/requires/clientError type parameters, wire error schemas, and layerClient client-side implementations. - Use Case: Build a shared contract package where UsersGroup = RpcGroup.make(GetUser, CreateUser, WatchUsers).middleware(AuthMiddleware) is imported by both the server (which implements handlers via toLayer) and the client (which builds RpcClient.make(UsersGroup)), keeping both sides type-checked against one source of truth. ## Quick Start Ask the agent to define a shared Effect RPC contract with a GetUser procedure, a streaming WatchUsers endpoint, and an auth middleware using the effect-rpc-api skill.