원클릭으로
protobuf-connect
Buf conventions, proto3 best practices, schema evolution rules, and Connect-ES v2 frontend patterns for Omega
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Buf conventions, proto3 best practices, schema evolution rules, and Connect-ES v2 frontend patterns for Omega
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use whenever the user wants to run, plan, kick off, iterate on, or close out a Victoria training version (e.g. "let's start V200", "next training run", "kick off the next iteration", "what should we try next for Victoria", "ship V###", "log this training run"). Codifies the continual-improvement loop — read the latest entry in omega/nodes/victoria/training_log/, propose the next version's hypothesis, run the gates, write the new V###.md entry, update the high-water table, commit, and push.
Structured research pipeline for Omega — takes an idea or hypothesis, searches for evidence, compares to existing Omega capabilities, and delivers a verdict with implementation recommendations. Use when asked to /research a topic, evaluate a new signal source, assess an external tool/library, or investigate trading strategies.
IterDRAG iterative retrieval-augmented generation pattern — search, summarize, reflect loop for deep research tasks
Go coding standards, error handling, concurrency, and Connect-RPC conventions for the Omega project
Go table-driven tests, Python pytest patterns, React Testing Library, property-based testing, and integration test conventions for Omega
| name | protobuf-connect |
| description | Buf conventions, proto3 best practices, schema evolution rules, and Connect-ES v2 frontend patterns for Omega |
| tags | ["protobuf","proto3","buf","connect-rpc","connect-es","schema-evolution","typescript"] |
All proto management uses Buf. Key files:
buf.yaml — module definition, lint config (STANDARD), breaking change detection (FILE mode)buf.gen.yaml — generates Go (gen/go/) and TypeScript (dashboard/src/gen/)# After any .proto change:
buf generate # regenerate all targets
buf lint # check style
buf breaking --against .git#branch=main # check backward compat
Never edit files in gen/ manually — they are always regenerated.
snake_case for all field names (Buf lint enforces this).CamelCase. Generated TypeScript: camelCase. Do not rename generated fields.is_ prefix (is_healthy, is_available).google.protobuf.Timestamp, not string.google.protobuf.Duration.Request (GetNodeRequest, not Request).Response (GetNodeResponse).oneof for mutually exclusive fields.reserved:
reserved 5, 6;
reserved "old_field_name", "removed_field";
Safe (backward compatible):
Breaking (never do):
proto/omega/v1/
├── types.proto # Shared types: Node, NodeState, BrainConfig, TraceSummary, …
├── node_service.proto # NodeService: Execute, Evaluate, Improve, GetState, GetCapabilities
└── omega_service.proto # OrchestratorService: 23+ RPCs for dashboard (health, nodes, traces, …)
When adding a capability:
types.proto (or new file for large additions)buf generateinternal/handlers/cmd/omega-api/main.gofunc (h *Handler) GetNode(
ctx context.Context,
req *connect.Request[omegav1.GetNodeRequest],
) (*connect.Response[omegav1.GetNodeResponse], error) {
if req.Msg.NodeId == "" {
return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("node_id required"))
}
node, err := h.store.GetNode(ctx, req.Msg.NodeId)
if errors.Is(err, ErrNotFound) {
return nil, connect.NewError(connect.CodeNotFound, err)
}
if err != nil {
return nil, connect.NewError(connect.CodeInternal, err)
}
return connect.NewResponse(&omegav1.GetNodeResponse{Node: node}), nil
}
import { createClient } from "@connectrpc/connect";
import { createConnectTransport } from "@connectrpc/connect-web";
import { OrchestratorService } from "../gen/omega/v1/omega_service_connect";
// One transport for the whole app
const transport = createConnectTransport({
baseUrl: import.meta.env.VITE_API_URL ?? "http://localhost:8080",
});
const client = createClient(OrchestratorService, transport);
// Unary RPC
const { node } = await client.getNode({ nodeId: "my-node" });
// Server streaming
for await (const event of client.streamEvents({ filter: "all" })) {
handleEvent(event);
}
Import generated types from dashboard/src/gen/ — never from proto/.
Use ConnectError for typed error handling:
import { ConnectError } from "@connectrpc/connect";
try {
await client.execute(req);
} catch (err) {
if (err instanceof ConnectError) {
console.error(err.code, err.message);
}
}