This file gives coding agents the product and engineering context needed to work on dygo.
dygo is an opinionated Go framework for building serious business software.
It is designed for business processes, internal operating systems, enterprise apps, workflow-heavy products, and analytics-ready operational systems.
dygo embraces agentic development, but it must protect business software from the mess that agentic coding can create.
The goal is speed with structure.
Builders should focus on business logic.
dygo should handle the foundation:
- app structure
- entities and records
- permissions
- jobs
- metadata schema sync
- app-owned patches
- logging
- auditing
- observability
- credentials
- site configuration
- maintenance mode
- consistent Studio UI
- secure APIs
- analytics-ready data patterns
Do not make implementers rebuild these pieces in every app.
dygo is not an AI slop generator.
dygo is not a vibe-coding playground.
dygo is not a generic admin template.
dygo is not a loose collection of helpers.
dygo is a framework with strong opinions and safe boundaries.
dygo should praise and support agentic coding.
Agents should be able to build apps on top of dygo quickly by following strong conventions, clear docs, predictable file structure, and well-documented CLI commands.
But agents should not invent architecture casually.
When implementing features, prefer:
- explicit entity definitions
- clear manifests
- small focused files
- predictable naming
- secure defaults
- observable behavior
- testable boundaries
- boring reliability over cleverness
Framework code should provide reusable platform capability.
Business-specific behavior should live in apps built on top of dygo.
Use internal/ for dygo implementation details.
Only expose stable public APIs through pkg/sdk/.
When adding runtime behavior, consider:
- logs
- audit events
- metrics
- traces
- failure states
- admin visibility
Silent behavior is usually bad behavior.
Business apps need permissions from the start.
Any record, API, job, file, report, or view that exposes business data must respect dygo's permission model.
dygo is metadata-driven, but metadata should not become mystery behavior.
Entity definitions, views, permissions, fixtures, app manifests, and jobs should be readable, diffable, and easy for humans and agents to understand.
Studio should feel like one coherent product.
Do not create one-off UI patterns unless the framework needs a new reusable pattern.
Prefer metadata-driven views, shared components, and consistent interaction models.
dygo should feel simple to use, but serious underneath.
Avoid unnecessary abstractions. Build strong primitives.
Backend:
- Go
- PostgreSQL
- CLI-first workflows
- explicit config
- encrypted credentials
- app manifests
- schema-driven entities and records
- background jobs
- observability and auditability
Follow docs/nomenclature.md.
Use Studio for the main operational and builder UI. Use Space for a page or group inside Studio. Use Entity for business object definitions. Use Record for saved business data.
Core is the required system App. Studio is the first-party UI App. Business Apps define Entities, Permissions, Hooks, Fixtures, and Patches.
Entity metadata uses singular names only. Do not add required display plural or storage plural metadata; storage naming comes from the Entity name converted from kebab-case to snake_case.
Use field-level index and unique only for single-field shorthands. Use top-level Entity indexes and constraints for composite indexes, composite uniqueness, and structured check constraints.
When adding a feature, ask:
- Is this framework capability or app-specific business logic?
- Does this need permissions?
- Does this need audit logging?
- Does this need observability?
- Does this need CLI support?
- Does this need documentation?
- Will an agent understand this structure later?
- Is this safe for serious business software?
If the answer is unclear, choose the simpler and more explicit design.
For Go CLI work, use .agents/skills/go-cli-cobra-viper/SKILL.md. It captures dygo's Cobra command patterns, when to introduce Viper-style config precedence, CLI output rules, and test expectations.
dygo should feel:
- opinionated
- boring where it matters
- fast where it helps
- secure by default
- observable by default
- friendly to agents
- clean enough for enterprise systems
- simple enough for small business teams
Use agentic coding for speed.
Use dygo for structure.
Build business software that is fast to create, safe to run, and clean enough to scale.