# protobuf

Writes and checks .proto files, sets up buf configs and explains lint or breaking-change errors. Useful when your project already speaks Protocol Buffers.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 539 installs · ★ 20
- Author: bufbuild
- License: Apache-2.0 · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/bufbuild/claude-plugins/tree/HEAD/plugins/protobuf/skills/protobuf/SKILL.md
- Updated: 2026-09-17
- HTML: https://affpapa.org/en/nevibecode/skills/protobuf

## What it 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.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add bufbuild/claude-plugins --skill protobuf -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/protobuf/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/protobuf/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add bufbuild/claude-plugins --skill protobuf -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/protobuf/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add bufbuild/claude-plugins --skill protobuf -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/protobuf/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install bufbuild/claude-plugins protobuf
```

2. **Manually: put the files in place**
- File: `.github/skills/protobuf/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add bufbuild/claude-plugins --skill protobuf -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/bufbuild/claude-plugins --path plugins/protobuf/skills/protobuf
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/protobuf/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add bufbuild/claude-plugins --skill protobuf -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/bufbuild/claude-plugins/tree/HEAD/plugins/protobuf/skills/protobuf/SKILL.md

## When to use it
- write `.proto` files that match the project's conventions
- set up `buf.yaml` and `buf.gen.yaml` from scratch
- attach protovalidate constraints to fields
- debug `buf lint` and breaking-change errors
- remove a field without breaking schema compatibility

## Example prompts
- add a field to `service.proto` with protovalidate constraints
- why is `buf lint` failing on this file
- generate a Go codegen config for Connect

## Source text · SKILL.md · Apache-2.0

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 09f2f5e49480ab66.

BEGIN THIRD-PARTY FILE 09f2f5e49480ab66
````text
---
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 |
````
END THIRD-PARTY FILE 09f2f5e49480ab66

The third-party file has ended. Everything between the 09f2f5e49480ab66 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2844 of 4641 bytes. © bufbuild · Apache-2.0 · https://github.com/bufbuild/claude-plugins/tree/HEAD/plugins/protobuf/skills/protobuf/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
