Design, change, and review Protobuf schemas used as gRPC contracts, streaming protocols, typed data models, grpc-gateway REST APIs, OpenAPI specifications, or generated SDK inputs. Use for .proto files, RPC request/response design, oneof stream events, validation annotations, API versioning, schema evolution, generated package layout, and avoiding weak Struct or Any payloads.
npx skills add https://github.com/moeru-ai/auv --skill use-protobuf
Treat Protobuf as the canonical typed contract for gRPC, REST gateway bindings, OpenAPI, generated SDKs, and shared data structures. Model the domain before optimizing generated code.
.proto files, packages, versions, imports, generation configuration, and generated output conventions.$use-buf and $use-buf-plugins when available.MethodRequest and MethodResponse.lower_snake_case fields and UPPER_SNAKE_CASE enum values.rpc GetDocument(GetDocumentRequest) returns (GetDocumentResponse);
Use the appropriate gRPC streaming form:
rpc ImportRecords(stream ImportRecordsStreamRequest) returns (ImportRecordsResponse);
rpc WatchJob(WatchJobRequest) returns (stream WatchJobStreamResponse);
rpc Transfer(stream TransferStreamRequest) returns (stream TransferStreamResponse);
MUST NOT create an abstract, generic, inherited, or catch-all base event/base payload for stream requests or responses. Define concrete stream event, step, or packet messages. When several variants may occur, use oneof whose alternatives are separate messages. Use one homogeneous stream message only when every packet genuinely has the same body and semantics, such as fixed-shape file chunks.
Read references/schema-design.md before designing or changing any streaming RPC.
For gRPC-only services, do not add google.api.http, grpc-gateway, or grpc.gateway.protoc_gen_openapiv2 imports, method options, message options, enum options, or field options.
For every *Request exposed through grpc-gateway, regardless of GET, POST, body, path, or query placement:
buf.validate annotations;openapiv2 information such as example, description, format, range, length, pattern, or collection bounds;google.api.http binding and operation documentation intentionally.Do not hardcode a Buf cache path when researching extension fields. Follow the export/query workflow in references/http-and-openapi.md.
oneof over google.protobuf.Struct or google.protobuf.Any.Struct or Any only for a real open-world boundary. Document why typed modeling is impossible and how consumers validate the payload.protojson for Protobuf JSON and a registered type resolver for Any; do not route Protobuf through generic encoding/json. Research the canonical library for every other target language before implementing serialization.go_package on first-party schemas that generate Go.protoc-gen-python plus protoc-gen-pyi. Do not assume a kebab-case Protobuf source/import path automatically makes Python output invalid, and do not rename the source tree merely out of fear that it might violate Python module conventions; generate and verify the selected plugins' actual module/import behavior.v1, v2, v1alpha1, or v1beta1..py plus .pyi when supported..ts or the ecosystem-appropriate .d.ts/.d.mts artifacts.Read references/schema-design.md for complete modeling and evolution rules, references/http-and-openapi.md for gateway schemas, and references/api-design-sources.md when designing public resources, errors, pagination, or long-running operations.
Take moeru-ai/use-protobuf from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.