encore-go-service — скилл для Claude Code: сервисы и установка
Скилл помогает создавать сервисы Encore.go, раскладывать Go-пакеты и вызывать один сервис из другого. Пригодится для новых и уже спроектированных приложений.
npx skills add encoredev/skills --skill encore-go-service -a claude-code
npx skills add encoredev/skills --skill go-service -a claude-codeЧто делает encore-go-service
Скилл объясняет, как устроить приложение на Encore.go: вынести API в сервисные пакеты, добавить базы и миграции, сгруппировать связанные сервисы по системам. Он также задаёт правила для одиночной, многосервисной и крупной системной структуры.
Вызов другого сервиса выглядит как обычный импорт и вызов функции, а Encore превращает его в RPC. Для общих хелперов используются пакеты без //encore:api; пакет без такого endpoint не становится сервисом. Сервисные границы ещё не выбраны — для этого скилл отсылает к encore-architecture.
Какие задачи решает
- создать Go-сервис с API Encore.go
- разложить приложение по сервисным пакетам
- сгруппировать сервисы в системы
- организовать внутренние пакеты для общих хелперов
- вызвать один сервис из другого через типизированную функцию
Примеры запросов агенту
- Создай сервис Encore.go для пользователей с endpoint
GetUserи пакетомuser. - Разложи это приложение по системам
commerceиidentity, сохранив отдельные сервисы. - Добавь вызов сервиса
userизorderчерез типизированную функцию Encore.go.
Как установить encore-go-service
1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill encore-go-service -a claude-codenpx skills add encoredev/skills --skill go-service -a claude-code2Вручную: положить файлы
~/.claude/skills/go-service/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/go-service/
1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-service -a codex2Вручную: положить файлы
.agents/skills/go-service/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-service -a cursor2Вручную: положить файлы
.cursor/skills/go-service/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install encoredev/skills go-service2Вручную: положить файлы
.github/skills/go-service/SKILL.md1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-service -a gemini-cli2Командой платформы
gemini skills install https://github.com/encoredev/skills --path encore/go-serviceВручную: положить файлы
.devin/skills/go-service/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-service -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о encore-go-service
Как установить encore-go-service в Claude Code?
Выполните npx skills add encoredev/skills --skill encore-go-service -a claude-code, затем npx skills add encoredev/skills --skill go-service -a claude-code. После установки проверьте файл ~/.claude/skills/go-service/SKILL.md.
Что делает encore-go-service?
Скилл помогает создавать и раскладывать сервисы Encore.go, организовывать системы и внутренние пакеты, а также вызывать сервисы друг из друга.
Когда пакет Encore.go становится сервисом?
Пакет становится сервисом, если в нём есть хотя бы один endpoint с аннотацией //encore:api. Пакеты без неё подходят для общих хелперов.
Исходный текст
SKILL.md · Apache-2.0
---
name: encore-go-service
description: Implement Encore.go services and lay out an application using service packages, internal subpackages, systems, and typed service calls. For service boundaries and architecture decisions, use `encore-architecture`.
when_to_use: >-
User wants to add or modify an Encore.go service or microservice, implement an already-chosen service layout, organize packages and directories, group services into system folders, or call another service. Trigger phrases: "add a Go service", "create a Go service", "add a microservice", "service package", "lay out these services", "Go package layout", "internal package", "call another service".
---
# Encore.go Service Structure
## Instructions
In Encore.go, **each package with an API endpoint is automatically a service**. No special configuration needed.
### Creating a Service
Simply create a package with at least one `//encore:api` endpoint:
```go
// user/user.go
package user
import "context"
type User struct {
ID string `json:"id"`
Email string `json:"email"`
Name string `json:"name"`
}
//encore:api public method=GET path=/users/:id
func GetUser(ctx context.Context, params *GetUserParams) (*User, error) {
// This makes "user" a service
}
```
### Minimal Service Structure
```
user/
├── user.go # API endpoints
├── db.go # Database (if needed)
└── migrations/ # SQL migrations
└── 1_create_users.up.sql
```
## Application Patterns
### Single Service
An application can define its APIs in one root service package:
```
my-app/
├── encore.app
├── go.mod
├── api.go # All endpoints
├── db.go # Database
└── migrations/
└── 1_initial.up.sql
```
### Multi-Service
Each service lives in its own package:
```
my-app/
├── encore.app
├── go.mod
├── user/
│ ├── user.go
│ ├── db.go
│ └── migrations/
├── order/
│ ├── order.go
│ ├── db.go
│ └── migrations/
└── notification/
└── notification.go
```
### Large Application (System-based)
Group related services into systems:
```
my-app/
├── encore.app
├── go.mod
├── commerce/
│ ├── order/
│ │ └── order.go
│ ├── cart/
│ │ └── cart.go
│ └── payment/
│ └── payment.go
├── identity/
│ ├── user/
│ │ └── user.go
│ └── auth/
│ └── auth.go
└── comms/
├── email/
│ └── email.go
└── push/
└── push.go
```
## Service-to-Service Calls
Just import and call the function directly - Encore handles the RPC:
```go
package order
import (
"context"
"encore.app/user" // Import the user service
)
//encore:api auth method=GET path=/orders/:id
func GetOrderWithUser(ctx context.Context, params *GetOrderParams) (*OrderWithUser, error) {
order, err := getOrder(ctx, params.ID)
if err != nil {
return nil, err
}
// This becomes an RPC call - Encore handles it
orderUser, err := user.GetUser(ctx, &user.GetUserParams{ID: order.UserID})
if err != nil {
return nil, err
}
return &OrderWithUser{Order: order, User: orderUser}, nil
}
```
## Internal Helpers (Non-Service Packages)
Create packages without `//encore:api` endpoints for shared code:
```
my-app/
├── user/
│ └── user.go # Service (has API)
├── order/
│ └── order.go # Service (has API)
└── internal/
├── util/
│ └── util.go # Not a service (no API)
└── validation/
└── validate.go
```
## Guidelines
- A package becomes a service when it has `//encore:api` endpoints
- Services cannot be nested within other services
- Cross-service calls look like regular function calls
- Each service can have its own database
- Package names should be lowercase, descriptive
- Don't create services just for code organization - use sub-packages instead
- Use `encore-architecture` when the service boundaries have not been decided
© encoredev · Apache-2.0 · encoredev/skills