Welcome! We're building the safety layer for AI-native software. We believe in keeping things simple and letting automation handle the boring stuff.
We embrace AI agents (like Cursor, Claude, Windsurf) as first-class contributors. Our repo is designed to be easily understood and modified by AI.
- Context is King: We maintain
AGENTS.md- READ THIS FILE FIRST. It contains the definitive map of the repository, architecture rules, and dependency flows. - Agent Configuration Sync: We use
agentpacksto generate agent configurations.- Do not edit generated tool files directly (
.claude/,.github/copilot/,.gemini/, etc.). - Edit canonical pack sources in
packs/workspace-specific,packs/software-best-practices, andpacks/contractspec-rules. - Treat
packs/vibecoding-*as imported reference material unless explicitly enabled. - Run the relevant
agentpacks:*script to regenerate tool targets when needed.
- Do not edit generated tool files directly (
- Validation: We rely on
contractspec cito enforce rules, rather than human nitpicking.
If you are using an AI agent (Cursor, Windsurf, etc.), you can configure it to use our helper MCP server:
- ContractSpec Docs MCP:
https://api.contractspec.io/api/mcp/docs- Provides direct access to system documentation and specs.
This monorepo follows a strict layered architecture. See AGENTS.md for the detailed map and dependency rules.
Entry points and platform adapters. No business logic allowed. (e.g., web-landing, cli-contractspec).
Domain specific logic, features, and UI. 90% of code goes here. Organized by domain (e.g., studio, marketing).
Reusable utilities, contracts, and the design system. (e.g., contracts, design-system).
-
Install dependencies:
bun install
-
Start development server:
bun dev
(This starts all apps. To start a specific app, use
bun dev --filter=@contractspec/app.web-landing)
- Run
bunx contractspec cifor contract validation and rules. - Run
bun run lintfor linting. - Run
bun run testfor unit tests (when touching modules with tests). - When a change affects published packages, run
contractspec release prepare. It will guide the release draft, write both.changeset/<slug>.mdand.changeset/<slug>.release.yaml, rebuildgenerated/releases/*, and run the strict release checks for you.
-
Find your place:
- Frontend UI/Content: Go to
packages/bundles/marketingorpackages/bundles/library. - Core Logic: Go to
packages/bundles/*. - Infrastructure/Tools: Go to
packages/libs/*orpackages/tools/*.
- Frontend UI/Content: Go to
-
Make changes:
- Keep files small.
- Follow the "One Concept per File" rule.
- Use our Design System components; avoid raw HTML/CSS.
-
Validate:
- Run
bunx contractspec cito run validation checks locally. - If published packages changed, use
contractspec release prepareand confirm the generated release artifacts look correct.
- Run
-
Pull Request:
- Open a PR.
- Our
action-validationwill check your code. - Our
action-versionwill analyze versioning impact. - Pull requests that touch published-package release work must keep each
.changeset/*.mdfile paired with a sibling.release.yamlfile and include the updatedgenerated/releases/*artifacts. - See Canonical release workflow for the exact contributor path.
- Wait for the bots to report status.
- Package Manager:
bun - Formatting:
biome(handled by CI) - Linting:
biome(handled by CI) - Commits: Conventional Commits (e.g.,
feat: ...,fix: ...)
- Check Discussions for Q&A.
- Open a Docs issue if a guide is unclear or outdated.
- Open a Bug report for incorrect behavior or crashes.
- Open a Feature request for problem-first ideas.