Agent Skills

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.

Install

npx skills add https://github.com/bufbuild/claude-plugins --skill protobuf
SKILL.md

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:

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

Task Reference
Field types, enums, oneofs, maps quick_reference.md
Schema evolution, breaking changes best_practices.md
Validation constraints protovalidate.md
Complete service examples examples.md, assets/
buf CLI, buf.yaml, buf.gen.yaml buf_toolchain.md
Migrating from protoc migration.md
Lint errors, common issues troubleshooting.md
Proto API review checklist review_checklist.md

Project Setup

New Project

  1. Create directory structure:

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

  3. Add buf.build/bufbuild/protovalidate as a dependency in buf.yaml and run buf dep update

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

Code Generation Templates

Template Use For
buf.gen.go.yaml Go with gRPC
buf.gen.go-connect.yaml Go with Connect
buf.gen.ts.yaml TypeScript with Connect
buf.gen.python.yaml Python with gRPC
buf.gen.java.yaml Java with gRPC

Proto File Templates

Located in assets/proto/example/v1/:

Template Description
book.proto Entity message, BookRef oneof, enum
book_service.proto Full CRUD with batch ops, pagination, ordering

Common Tasks

Add a new field

  1. Use next sequential field number
  2. Add protovalidate constraints: every field should have validation appropriate to its type (format validators, length bounds, numeric ranges, enum constraints, etc.)
  3. Document the field
  4. Run buf format -w && buf lint

Remove a field

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

Add protovalidate constraints

Every field in a production API should have appropriate validation. See protovalidate.md for the full reference.

Common constraints:

  • String formats: .string.uuid, .string.email, .string.uri, .string.pattern
  • String bounds: .string.min_len, .string.max_len
  • Numeric bounds: .int32.gte, .uint32.lte
  • Enum validation: .enum.defined_only, .enum.not_in = 0
  • Repeated bounds: .repeated.min_items, .repeated.max_items
  • Required fields: (buf.validate.field).required = true
  • Oneof required: (buf.validate.oneof).required = true

Verification Checklist

After making changes:

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

Related skills

entra-app-registrationmicrosoft606KGuides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.azure-messagingmicrosoft595KTroubleshoot and resolve issues with Azure Messaging SDKs for Event Hubs and Service Bus. Covers connection failures, authentication errors, message processing issues, and SDK configuration problems. WHEN: event hub SDK error, service bus SDK issue, messaging connection failure, AMQP error, event processor host issue, message lock lost, message lock expired, lock renewal, lock renewal batch, send timeout, receiver disconnected, SDK troubleshooting, azure messaging SDK, event hub consumer, servicentra-agent-idmicrosoft328KProvision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmi_path, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmi_path token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registsupabasesupabase298KUse when doing ANY task involving Supabase. Triggers: Supabase products (Database, Auth, Edge Functions, Realtime, Storage, Vectors, Cron, Queues); client libraries and SSR integrations (supabase-js, @supabase/ssr) in Next.js, React, SvelteKit, Astro, Remix; auth issues (login, logout, sessions, JWT, cookies, getSession, getUser, getClaims, RLS); Supabase CLI or MCP server; schema changes, migrations, declarative schemas, security audits, Postgres extensions (pg_graphql, pg_cron, pg_vector); deb

Search skills and MCP servers

Fuzzy search across 23,137 skills and servers