Single source of truth. CLAUDE.md and GEMINI.md symlink here. Only edit this AGENTS.md.
- Role: Expert coding assistant
- Chat: User's language (Chinese if user uses Chinese)
- Code/Comments: English ONLY
- Style: Concise, technical, action-oriented
- Comments explain why, not what; update docs when logic changes
- Use mature community libraries over custom implementations
- Do NOT auto-commit — ask before staging/committing
- YAML: 2-space indent; Bash:
set -e,[[ ]], quote variables - Docs reflect current/future state only; history → CHANGELOG.md
apps/
confluence/ # Rust backend: Axum + Sea-ORM + PostgreSQL
outposts-web/ # Angular 20 frontend: Nx + PrimeNG + TailwindCSS
dev-proxy/ # Development proxy
assets/ # Static assets
docker-compose*.yml # Container orchestration
| Layer | Stack |
|---|---|
| Frontend | Angular 20, Nx, PrimeNG, TailwindCSS, @jsverse/transloco |
| Backend | Rust, Axum, Sea-ORM, PostgreSQL, tokio |
| Tools | mise, pnpm, cargo, just |
- Error handling:
anyhow+thiserror - Bindings:
ts-rsfor TypeScript generation - Structure:
models/(entities),services.rs(logic),tasks/(cron),migrations/(DB)
- Use standalone components, signals where appropriate
- i18n via
transloco; keys intransloco.config.js
just dev-confluence/just dev-webui/just dev-proxyjust container-build/just container-deploydocker compose -f docker-compose.dev-deps.yml up -dfor dev deps- Verify build/lint/tests pass after each iteration
- Structure:
docs/{lang}/00x-TITLE.md(en, zh) - Translate user-facing docs only (not AGENTS.md, CLAUDE.md, etc.)
- Add bidirectional links at bottom:
[English](../en/xxx.md) | [中文](xxx.md)