For AI coding assistants working on this codebase.
Calvin is a PromptOps compiler. It takes a .promptpack/ directory of Markdown files and compiles them into platform-specific outputs for Claude Code, Cursor, VSCode, Antigravity, Codex, and OpenCode.
Core command: calvin deploy - compiles and writes outputs to project.
Documentation: https://64andrewwalker.github.io/calvin/
cargo build # Build
cargo test # Test (must pass before committing)
cargo fmt # Format (required)
cargo clippy # LintCalvin uses Clean Architecture with 4 layers. See docs/architecture/layers.md for details.
Layer 0: Presentation → Layer 1: Application → Layer 2: Domain ← Layer 3: Infrastructure
Key principle: Domain defines traits (ports); Infrastructure implements them.
| Task | Location | Reference |
|---|---|---|
| Add CLI command | src/commands/, src/presentation/cli.rs |
|
| Add platform adapter | src/infrastructure/adapters/ |
docs/target-platforms.md |
| Modify deploy logic | src/application/deploy/use_case.rs |
|
| Change business rules | src/domain/services/, src/domain/policies/ |
|
| Add new port/trait | src/domain/ports/ |
docs/architecture/ports.md |
For complete directory structure, see docs/architecture/directory.md.
5 adapters in infrastructure/adapters/: Antigravity, Claude Code, Codex, Cursor, VS Code.
Each implements TargetAdapter trait from domain/ports/.
- TDD always - Write tests first. All features need tests before merging.
- No god objects - Keep files under 400 lines.
- Domain purity -
domain/never importsinfrastructure/orapplication/. - Security by default - Never weaken security. Deny lists are mandatory.
- Never fail silently - Invalid input should warn, not silently misbehave.
- Minimal changes - Solve the problem at hand. Don't add unrequested features.
- Create
src/infrastructure/adapters/<platform>.rs - Implement
TargetAdaptertrait - Register in
src/infrastructure/adapters/mod.rs - Add
Targetvariant insrc/domain/value_objects/target.rs - Add tests
See docs/target-platforms.md for format specifications.
- Read
src/application/deploy/use_case.rs - Check
src/domain/services/planner.rsfor conflict detection - Check
src/domain/services/compiler.rsfor output generation - Run
cargo test deployafter changes
| Document | Content |
|---|---|
docs/architecture/layers.md |
Layer responsibilities and dependencies |
docs/architecture/directory.md |
Complete directory structure |
docs/architecture/ports.md |
Port (trait) definitions |
docs/testing/testing-philosophy.md |
Contract-first testing principles |
docs/testing/contract-registry.md |
All contracts Calvin guarantees |
docs/target-platforms.md |
Platform output formats |
docs/configuration.md |
Config file options |
docs/command-reference.md |
CLI commands |
cargo fmtcargo clippy- no warningscargo test- all pass
RULE: If you add a feature or introduce a breaking change, you MUST update the documentation in the same PR.
| Change Type | Update Locations (Dev & User) |
|---|---|
| CLI option | docs/command-reference.md AND docs-content/docs/api/index.mdx |
| Config | docs/configuration.md AND docs-content/docs/guides/configuration.mdx |
| Adapter | docs/target-platforms.md AND docs-content/docs/api/frontmatter.mdx |
| Architecture | docs/architecture/*.md |
| New Feature | Relevant guide in docs-content/docs/guides/ |