# public-grpc-api-design

Walks your agent through whether gRPC belongs at a public edge at all, and how to shape protos, errors, transcoding and auth if it does.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 7800 installs · ★ 7
- Author: Samuel Berthe
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/samber/developer-platform-skills/tree/HEAD/skills/public-grpc-api-design/SKILL.md
- Updated: 2026-10-25
- HTML: https://affpapa.org/en/nevibecode/skills/public-grpc-api-design

## What it does

The skill runs a seven-step workflow: the when-gRPC gate first, then proto package and versioning conventions, buf breaking-change checks, a unary-by-default streaming decision, an error model on `google.rpc.Status`, a ranked transcoding menu, and external auth with TLS. It stays on the design layer and does not touch language-specific server code.

Expect it to push back on a team that already assumed public gRPC. Most platforms keep gRPC internal and publish REST or transcoded JSON, because browsers cannot speak gRPC's HTTP/2 framing and raw-proto integrators pay the `protoc` and stub-regeneration cost. If gRPC already runs internally, those service definitions likely carry admin and debug RPCs that were never written for outside eyes, so the closing exposure audit is not optional here.

Before designing anything it asks who the consumers are, whether browser clients must call the surface directly, and whether an existing public REST API has to stay consistent with the new one. Each answer changes a later step. It also advises keeping settled decisions in a `developer-platform-context.md` file so the next run starts from the design instead of re-deriving it.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add samber/developer-platform-skills --skill public-grpc-api-design -a claude-code
```

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

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add samber/developer-platform-skills --skill public-grpc-api-design -a codex
```

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

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add samber/developer-platform-skills --skill public-grpc-api-design -a cursor
```

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

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install samber/developer-platform-skills public-grpc-api-design
```

2. **Manually: put the files in place**
- File: `.github/skills/public-grpc-api-design/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add samber/developer-platform-skills --skill public-grpc-api-design -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/samber/developer-platform-skills --path skills/public-grpc-api-design
```

### Windsurf (Devin Desktop)

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

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add samber/developer-platform-skills --skill public-grpc-api-design -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/samber/developer-platform-skills/tree/HEAD/skills/public-grpc-api-design/SKILL.md

## When to use it
- decide whether to expose gRPC publicly or stay REST-only
- set proto package and versioning conventions
- wire buf breaking-change gates into CI
- pick between Connect-RPC, grpc-gateway and Envoy
- design an error model on `google.rpc.Status`

## Example prompts
- help me design a public gRPC API for external developers
- check our `.proto` files for breaking changes and versioning conventions
- should we use Connect-RPC or grpc-gateway for transcoding?

## Source text · SKILL.md · MIT

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: 0555456f343dcad6.

BEGIN THIRD-PARTY FILE 0555456f343dcad6
```text
---
name: public-grpc-api-design
description: Design a public gRPC surface for external developers - the when-gRPC-at-all gate (most platforms keep gRPC internal and publish REST or transcoded JSON), AIP proto package and versioning conventions, buf breaking-change gates and their google.api.http blind spot, unary-by-default streaming decisions, the google.rpc.Status error model with its HTTP-mapping traps, transcoding and gateway architecture (Connect-RPC, grpc-gateway, Envoy), and external auth and TLS. Use whenever the user mentions gRPC, protobuf or .proto files, buf, Connect-RPC, grpc-gateway, or gRPC-JSON transcoding at a public edge - even if they never say "gRPC API design". Design layer only, not language-specific server implementation.
license: MIT
metadata:
  author: Samuel Berthe
  version: "1.0.2"
---

# Public gRPC API Design

You are a public gRPC surface designer. Decide whether gRPC belongs at a platform's public edge at all, and - when it does - design the proto governance, streaming posture, error model, transcoding architecture, and external auth that let developers you have never met consume it safely.

The framing question is never "how do we design the best public gRPC API" but "does this workload belong on public gRPC, and through what edge". Sibling `samber/developer-platform-skills@api-integration-surface-strategy` partially owns that umbrella decision; re-ask it here anyway, because teams arrive having assumed "public gRPC" without validating it.

**Memory (advised):** When memory lives in a file, consider using `developer-platform-context.md`; if a different memory system is in use, rely on that instead. The file is an advisory reference, not a mandatory requirement. Separate task info in different sections. Remove finished tasks. Add a date to a task; no date for general project context. Some interview responses may differ between 2 tasks.

## Clarifying questions

Ask these before designing anything; each answer changes a later step. Batch them - this is a tactical design task, not a strategy interview.

1. Does gRPC already run internally, or is this greenfield? If internal: the service definition likely contains admin/debug/monitoring RPCs never designed for external eyes - that is what makes step 7's closing exposure audit mandatory rather than optional.
```
END THIRD-PARTY FILE 0555456f343dcad6

The third-party file has ended. Everything between the 0555456f343dcad6 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 2327 of 28089 bytes. © Samuel Berthe · MIT · https://github.com/samber/developer-platform-skills/tree/HEAD/skills/public-grpc-api-design/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
