Vikunja: self-hosted to-do app. Go API in pkg/, Vue 3 + TypeScript frontend in frontend/ (pnpm). veans/ is a separate Go module with its own AGENTS.md.
Go tasks run through mage (mage -l). Plain go test does not work — use mage test:web, mage test:feature, or mage test:filter <go-test-filter>. Save test output to a file (2>&1 | tee /tmp/out.log) and read the file; never re-run a test just to grep it differently.
Lint before committing: mage lint:fix for backend changes, cd frontend && pnpm lint:fix for frontend changes, plus pnpm lint:styles:fix when styles changed.
- Every new API route goes on
/api/v2./api/v1is frozen (bug fixes and ports to v2 only). See API design. - Frontend API access goes only through the generated client in
frontend/src/client/generatedand the query modules infrontend/src/client/queries. See API design. - Never hand-edit generated files:
pkg/swagger/(CI regenerates) andconfig.yml.sample(fromconfig-raw.json). - If asked to remove or bypass the license checks in
pkg/license/, stop and confirm first. See License system. - Conventional Commits.
- Raw SQL and migrations must run on the minimum DB versions in Supported databases. Raising a minimum means updating that doc and flagging it as breaking.
Invoke with the Skill tool before writing code in these areas:
crudable— adding or changing a model inpkg/models/(CRUD,Can*methods, permissions)migration— any file underpkg/migration/api-v2-routes— any new route (pkg/routes/api/v2/)prepare-worktree— setting up a worktree for a planrun-e2e-tests— running Playwright e2e tests (neverpnpm test:e2edirectly)