AgentSkillsCN

protobuf

当您需要处理 Protocol Buffer(.proto)文件、buf.yaml、buf.gen.yaml 或 buf.lock 时,可选用此技能。涵盖 proto 设计、buf CLI 工具、gRPC/Connect 服务、protovalidate 约束校验、Schema 进化,以及 lint 错误与破坏性错误的排查与解决。

SKILL.md
--- frontmatter
name: protobuf
description: >-
  Use when working with Protocol Buffer (.proto) files, buf.yaml, buf.gen.yaml,
  or buf.lock. Covers proto design, buf CLI, gRPC/Connect services, protovalidate
  constraints, schema evolution, and troubleshooting lint/breaking errors.
filePatterns:
  - "**/*.proto"
  - "**/buf.yaml"
  - "**/buf.*.yaml"
  - "**/buf.gen.yaml"
  - "**/buf.gen.*.yaml"
  - "**/buf.lock"

Protocol Buffers

When You Need This Skill

  • Creating or editing .proto files
  • Setting up buf.yaml or buf.gen.yaml
  • Designing gRPC or Connect services
  • Adding protovalidate constraints
  • Troubleshooting buf lint or breaking change errors

Core Workflow

1. Match Project Style

Before writing proto code, review existing .proto files in the project. Match conventions for naming, field ordering, structural patterns, validation, and documentation style. If none exists, ask the user what style should be used or an existing library to emulate.

2. Write Proto Code

3. Verify Changes

Always run after making changes:

bash
buf format -w && buf lint

Check for a Makefile first—many projects use make lint or make format.

Fix all errors before considering the change complete.

Quick Reference

TaskReference
Field types, enums, oneofs, mapsquick_reference.md
Schema evolution, breaking changesbest_practices.md
Validation constraintsprotovalidate.md
Complete service examplesexamples.md, assets/
buf CLI, buf.yaml, buf.gen.yamlbuf_toolchain.md
Migrating from protocmigration.md
Lint errors, common issuestroubleshooting.md

Project Setup

New Project

  1. Create directory structure:

    code
    proto/
    ├── buf.yaml
    ├── buf.gen.yaml
    └── company/
        └── domain/
            └── v1/
                └── service.proto
    
  2. Use assets/buf.yaml as starting point

  3. Use assets/buf.gen.*.yaml for code generation config

Code Generation Templates

TemplateUse For
buf.gen.go.yamlGo with gRPC
buf.gen.go-connect.yamlGo with Connect
buf.gen.ts.yamlTypeScript with Connect
buf.gen.python.yamlPython with gRPC
buf.gen.java.yamlJava with gRPC

Proto File Templates

Located in assets/proto/example/v1/:

TemplateDescription
book.protoEntity message, BookRef oneof, enum
book_service.protoFull CRUD with batch ops, pagination, ordering

Common Tasks

Add a new field

  1. Use next sequential field number
  2. Add appropriate semantic validation
  3. Document the field
  4. Run buf format -w && buf lint

Remove a field

  1. Reserve the field number AND name:
    protobuf
    reserved 4;
    reserved "old_field_name";
    
  2. Run buf breaking --against '.git#branch=main' to verify

Add semantic validation

See protovalidate.md for constraint patterns:

  • Required fields: (buf.validate.field).required = true
  • String formats: .string.uuid, .string.email, .string.uri
  • Numeric bounds: .int32.gt, .uint32.lte
  • Repeated bounds: .repeated.min_items, .repeated.max_items

Verification Checklist

After making changes:

  • buf format -w (apply formatting)
  • buf lint (check style rules)
  • buf breaking --against '.git#branch=main' (if modifying existing schemas)