AI Setup
AI-first development with Cursor and coding assistants
Zeno embraces AI-assisted development. The codebase is designed to work seamlessly with Cursor and other AI coding tools.
AI assistants work best when they understand your project's conventions. Zeno ships with AGENTS.md, Cursor rules, and auto-formatting hooks so that AI-generated code follows the same standards as hand-written code — no manual cleanup needed.
AGENTS.md
The root AGENTS.md file is automatically picked up by Cursor and other AI assistants. It provides:
- Project overview and structure
- Development commands
- TypeScript and React/Next.js conventions
- Testing guidelines
- Package management rules
This file ensures AI-generated code follows the project's conventions out of the box.
Cursor Configuration
The .cursor/ directory contains Cursor-specific configuration:
.cursor/
├── rules/
│ └── ultracite.mdc # Code quality standards (applied to *.ts, *.tsx, *.js, *.jsx)
└── hooks.json # Auto-fix after file editsRules
The Ultracite rule is scoped to source files and automatically loaded when working with matching files. It covers type safety, modern JS/TS patterns, React best practices, error handling, security, and performance.
Hooks
The .cursor/hooks.json configures an afterFileEdit hook that automatically runs Ultracite formatting after every AI-generated file edit:
{
"hooks": {
"afterFileEdit": [
{
"command": "pnpm dlx ultracite fix"
}
]
}
}This ensures AI-generated code is always formatted and linted before you even review it.
AI-Friendly Patterns
Zeno follows patterns that help AI understand and generate better code:
Explicit Types
Use interfaces for props and function signatures so AI understands the contract:
interface UserProps {
id: string
name: string
email: string
}
function UserCard({ id, name, email }: UserProps) {
// ...
}Descriptive Names
Use auxiliary verbs and clear naming for self-documenting code:
// Good
const isUserAuthenticated = checkAuth()
const hasAdminPermissions = user.role === "admin"
// Avoid
const auth = checkAuth()
const admin = user.role === "admin"Co-located Types
Keep types near their usage for better AI context:
interface CreateUserInput {
name: string
email: string
}
async function createUser(input: CreateUserInput) {
// AI has full context
}LLM Documentation
Zeno docs support LLM-friendly formats via Fumadocs:
- Any doc page is available as Markdown at
/docs/<path>.mdx(e.g./docs/foundation/getting-started/installation.mdx)
This allows AI assistants to fetch and reference documentation directly.