protobuf — Claude Code skill for proto, buf and gRPC
Writes and checks .proto files, sets up buf configs and explains lint or breaking-change errors. Useful when your project already speaks Protocol Buffers.
npx skills add bufbuild/claude-plugins --skill protobuf -a claude-codeWhat protobuf does
The skill activates on .proto, buf.yaml, buf.gen.yaml and buf.lock files. It covers schema design, gRPC and Connect services, protovalidate constraints, schema evolution and troubleshooting of buf lint and breaking errors.
What sits inside: a quick reference for field types, enums, oneofs and maps, best practices for schema evolution, code generation templates for Go, TypeScript, Python and Java, full service examples and a proto API review checklist. Before writing code the skill tells the agent to read existing .proto files and match their conventions. No files around? It asks you which style or library to follow.
Every change ends with buf format -w && buf lint, and edits to an existing schema add buf breaking --against '.git#branch=main'. Check for a Makefile first, since many projects expose make lint or make format instead. For production APIs the skill treats protovalidate constraints on every field as mandatory, so a change without them is not finished.
What it helps with
- write
.protofiles that match the project's conventions - set up
buf.yamlandbuf.gen.yamlfrom scratch - attach protovalidate constraints to fields
- debug
buf lintand breaking-change errors - remove a field without breaking schema compatibility
Example prompts for the agent
- add a field to
service.protowith protovalidate constraints - why is
buf lintfailing on this file - generate a Go codegen config for Connect
How to install protobuf
1Skills CLI (Vercel)
npx skills add bufbuild/claude-plugins --skill protobuf -a claude-code2Manually: put the files in place
~/.claude/skills/protobuf/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/protobuf/
1Skills CLI (Vercel)
npx skills add bufbuild/claude-plugins --skill protobuf -a codex2Manually: put the files in place
.agents/skills/protobuf/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add bufbuild/claude-plugins --skill protobuf -a cursor2Manually: put the files in place
.cursor/skills/protobuf/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install bufbuild/claude-plugins protobuf2Manually: put the files in place
.github/skills/protobuf/SKILL.md1Skills CLI (Vercel)
npx skills add bufbuild/claude-plugins --skill protobuf -a gemini-cli2Platform CLI
gemini skills install https://github.com/bufbuild/claude-plugins --path plugins/protobuf/skills/protobufManually: put the files in place
.devin/skills/protobuf/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add bufbuild/claude-plugins --skill protobuf -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about protobuf
How do I install the protobuf skill in Claude?
Run npx skills add bufbuild/claude-plugins --skill protobuf -a claude-code. The skill lands in ~/.claude/skills/protobuf/SKILL.md.
What does the protobuf skill do?
It helps design .proto schemas, configure buf, add protovalidate constraints and fix lint or breaking-change errors.
What tooling does the skill rely on?
The buf CLI: buf format, buf lint, buf breaking and buf dep update. Code generation uses the bundled buf.gen.*.yaml templates.
Source text
SKILL.md · Apache-2.0
---
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
- Apply universal best practices from [best_practices.md](references/best_practices.md)
- Add [protovalidate](references/protovalidate.md) constraints to every field—this is not optional for production APIs
- For service templates, see [assets/](assets/)
### 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
| Task | Reference |
|------|-----------|
| Field types, enums, oneofs, maps | [quick_reference.md](references/quick_reference.md) |
| Schema evolution, breaking changes | [best_practices.md](references/best_practices.md) |
| Validation constraints | [protovalidate.md](references/protovalidate.md) |
| Complete service examples | [examples.md](references/examples.md), [assets/](assets/) |
| buf CLI, buf.yaml, buf.gen.yaml | [buf_toolchain.md](references/buf_toolchain.md) |
| Migrating from protoc | [migration.md](references/migration.md) |
| Lint errors, common issues | [troubleshooting.md](references/troubleshooting.md) |
| Proto API review checklist | [review_checklist.md](references/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](references/protovalidate.md) 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:
```protobuf
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](references/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)
© bufbuild · Apache-2.0 · bufbuild/claude-plugins