jzero Skills for AI Agents
Structured knowledge base optimized for AI agents to help developers work effectively with the jzero framework (enhanced go-zero).
Overview
This skill provides AI agents with comprehensive jzero knowledge to:
- •Generate accurate code following jzero conventions
- •Understand the three-layer architecture (Handler → Logic → Model)
- •Apply best practices for microservices development
- •Use jzero-specific features
- •Build production-ready applications
Quick Start
When helping with jzero development:
- •For new projects: Start with Development Workflows
- •For REST APIs: Check REST API File Structure - ⚠️ Critical rules
- •For RPC services: Review Proto File Structure - Proto standards & multi-proto support
- •For databases: Review Database Best Practices - ⚠️ Must read
- •For SQL changes: Check SQL Migration Guide - ⚠️ Schema changes
- •For specific operations: Reference the appropriate pattern guide below
Core Patterns
REST API Development
Reference: references/rest-api-patterns/api-file-structure.md
- •API file structure with required settings (
go_package,group,compact_handler) - •Three-layer architecture (Handler → Logic → Model)
- •Request/response type definitions with validation
- •Handler patterns and HTTP concerns
- •Logic patterns and business implementation
- •✅ Correct vs ❌ incorrect patterns with examples
When to use: Creating or modifying REST API services, implementing HTTP endpoints
RPC Services
- •Proto File Structure: Proto standards, multi-proto support, file structure, HTTP gateway, OpenAPI docs
- •Proto Field Validation: Field validation with protovalidate, CEL expressions, built-in constraints
- •Proto Middleware: HTTP/RPC middleware at service and method levels
When to use: Creating or modifying RPC services, working with proto files, adding validation or middleware
Database Operations
- •Best Practices: Model import rules, condition chain usage, error handling, field constants ⚠️🚨
- •SQL Migration Guide: Managing schema changes with up/down migrations ⚠️
- •Model Generation: From SQL files or remote datasource
- •Database Connection: MySQL, PostgreSQL, SQLite, Redis configuration
- •CRUD Operations: Generated methods (Insert, FindOne, Update, Delete, etc.)
⚠️ CRITICAL REMINDER: ALWAYS use condition.NewChain() - NEVER use condition.New()
When to use: Implementing data persistence, queries, or database operations
Development Workflows
Reference: Project Structure
Creating a New REST API Endpoint
- •Define API specification in
.apifile with required settings: - •Generate api code:
jzero gen --desc desc/api/user.api - •Implement logic in
internal/logic/following three-layer architecture
See detailed patterns: REST API File Structure
Implementing Database Operations
Choose your schema mode first:
Local SQL Mode (schema files in desc/sql/):
- •Create/update SQL schema in
desc/sql/*.sql - •Create migration files in
desc/sql_migration/(xx.up.sql & xx.down.sql) ⚠️ - •Apply migrations (development:
jzero migrate up, production: auto incmd/server.go) - •Generate model:
jzero gen --desc desc/sql/users.sql
Remote Datasource Mode (schema from live database):
- •Create migration files in
desc/sql_migration/(xx.up.sql & xx.down.sql) ⚠️ - •Apply migrations (development:
jzero migrate up, production: auto incmd/server.go) - •Generate model:
jzero gen
Common steps (both modes):
- •Inject model into ServiceContext
- •Use condition builder in logic layer
- •Handle errors properly
⚠️ Migration rules: Always create both up/down files, use consecutive numbering (1, 2, 3...)
See detailed patterns: SQL Migration Guide | Database Best Practices
Setting Up Database Connection
- •Configure in
etc/etc.yaml: - •Initialize in ServiceContext with modelx.MustNewConn
- •Register models in Model struct
See detailed guide: Database Connection
Project Structure
jzero-skills/ ├── SKILL.md # This file - skill entry point ├── references/ # Detailed pattern documentation │ ├── rest-api-patterns/ # REST API guides │ │ └── api-file-structure.md # ⚠️ Critical rules for .api files │ ├── rpc-patterns/ # RPC/Proto service guides │ │ ├── proto-file-structure.md # Proto standards & multi-proto │ │ ├── proto-validation.md # Field validation guide │ │ └── proto-middleware.md # Middleware patterns │ └── database-patterns/ # Database operation guides │ ├── best-practices.md # ⚠️ Critical rules with examples │ ├── sql-migration.md # ⚠️ Schema changes & migrations │ ├── database-connection.md # DB & Redis setup │ ├── model-generation.md # Generate models from SQL │ └── crud-operations.md # CRUD methods reference
Typical jzero project structure:
myproject/ ├── .jzero.yaml # CLI config: code generation, ⚠️ migrate settings ├── desc/ │ ├── api/ # .api files → generates handlers │ ├── sql/ # .sql files → generates models (local SQL mode) │ ├── sql_migration/ # xx.up.sql & xx.down.sql for schema changes ⚠️ │ └── proto/ # .proto files → generates RPC code ├── internal/ │ ├── handler/ # HTTP handlers (generated) │ ├── logic/ # Business logic (implement here) │ ├── model/ # Data models (generated) │ ├── svc/ # Service context (dependencies) │ ├── config/ # Config structs │ └── middleware/ # Custom middleware ├── etc/ │ └── etc.yaml # Configuration └── .jzero.yaml # jzero CLI config
Key Principles
✅ Always Follow
- •🚨 Condition builder: ALWAYS use
condition.NewChain(), NEVER usecondition.New()- THIS IS CRITICAL 🚨 - •Three-layer architecture: Handler → Logic → Model separation
- •API file requirements: Set
go_package,group,compact_handler: true - •Model imports: Use alias
xxmodel "project/internal/model/xx" - •Error handling: Use
errors.Is(err, model.ErrNotFound)fromgithub.com/pkg/errors - •Code generation: Run
jzero gen --descbefore implementing logic - •Type safety: Use generated field constants (e.g.,
usersmodel.Id)
❌ Never Do
- •🚫 NEVER use
condition.New()- This is error-prone and deprecated. ALWAYS usecondition.NewChain() - •Put business logic in handlers (belongs in logic layer)
- •Skip
go_package,group, orcompact_handlerin.apifiles - •Import models without alias:
"project/internal/model/users"(wrong) - •Use
==for error comparison:if err == ErrNotFound(wrong) - •Hard-code configuration values
- •Implement logic before generating code
Progressive Learning
New to jzero?
- •Read this file (SKILL.md) for overview
- •Create a project:
jzero new myapi --frame api - •Follow Development Workflows
- •Study REST API File Structure
Building REST APIs?
- •Master API file requirements (critical for avoiding regeneration issues)
- •Learn three-layer architecture patterns
- •Study Database Best Practices
Creating RPC services?
- •Learn proto file structure: Proto File Structure
- •Add validation: Proto Field Validation
- •Implement middleware: Proto Middleware
Working with databases?
- •⚠️ Must read: Database Best Practices
- •⚠️ Must read: SQL Migration Guide - Schema changes
- •Set up connection: Database Connection
- •Generate models: Model Generation
- •Learn CRUD operations: CRUD Operations
Production deployment?
- •Review all best practices in reference guides
- •Configure proper error handling and logging
- •Set up caching strategies with Redis
- •Implement resilience patterns (circuit breaker, rate limiting)
Resources
- •Official documentation: docs.jzero.io
- •GitHub repository: jzero-io/jzero
- •Examples: jzero-io/examples
- •Base framework: zeromicro/go-zero