AGENTS.mdis the canonical repo-wide instruction file for agentic tools.CLAUDE.mdimports this file for Claude Code compatibility.- Per-component guides live in
library/AGENTS.md,application/backend/AGENTS.md, andapplication/ui/AGENTS.md; read the matching one before working in that area. - Canonical task skills live in
skills/, grouped intoskills/library/andskills/application/buckets. .agents/skills/and.claude/skills/are committed symlink adapters pointing back atskills/<bucket>/<name>; do not edit them directly. Runpython3 .github/scripts/skills/agent_skills.py syncafter adding or renaming a skill (each skill directory must contain aSKILL.md). Adapters and layout are CI-enforced via.github/workflows/skills.yaml; verify locally withpython3 .github/scripts/skills/agent_skills.py validate.- Keep always-on repository rules here; keep task-specific workflows in skills.
library/:getitunePython package (the Geti training library; source insrc/getitune/), recipes, and tests. Seelibrary/AGENTS.md.application/backend/: FastAPI backend namedgeti; consumes../../libraryas an editableuvsource. Seeapplication/backend/AGENTS.md.application/ui/: React 19 + TypeScript + RSBuild frontend. Seeapplication/ui/AGENTS.md.application/README.md: overview and entry point for the application; links to the installation guide.application/docs/: Markdown docs for the application (installation, upgrade, API, pipeline, jobs, dataset import/export, models, quantization).library/README.md: overview and quick-start for thegetitunelibrary.library/docs/design/: design notes for the library; user-facing library docs live on the external documentation website.README.md: root-level project overview..github/workflows/: CI source of truth for path-based checks and required jobs.
- The backend stores persistent data under
application/backend/data/by default (i.e.,data/when running fromapplication/backend/); override via theDATA_DIRsetting. The directory is git-ignored and may not exist until the server runs. - This includes:
- the SQLite database (
geti.db) - datasets with media artifacts (images, videos) + trained models with logs under
projects/ - job outputs (e.g. dataset exports) under
output/and in-progress imports understaged_datasets/ - SSL certificates under
certs/ - pretrained weights downloaded as per manifest urls under
pretrained_weights/
- the SQLite database (
Keep documentation close to the code and update it in the same PR as the behavior
it describes. Use the geti-docs-update skill for documentation changes.
Where each kind of documentation lives:
README.md(root): project overview and the shortest possible quick-start. It lists the available install options and documents only the most basic case, then links toapplication/docs/install.mdfor anything more advanced. Do not duplicate detailed steps here.application/README.md: application overview and entry point. It summarises the install options and links to the installation guide; it does not repeat the detailed steps.application/docs/install.md: the single source of truth for installing and running the application. It covers every scenario (Windows MSIX app, Docker with pre-built or self-built images, install script, and run-from-source for development), plus prerequisites, accelerator support, TLS/TURN, and air-gapped setup. Add or change installation steps here first.application/docs/upgrade.md: upgrading an existing installation (Docker or Windows MSIX), data migration, and rollback.library/README.md: overview and quick-start for thegetitunetraining library. Detailed library guides live on the external documentation website (https://docs.geti.intel.com/docs/user-guide/library/), not in this repo.library/docs/design/: design notes for the library.application/docs/: Markdown docs for the application (API, pipeline, jobs, dataset import/export, models, quantization).
Installation docs follow an install-guide-first model:
application/docs/install.md is authoritative and detailed, while the root
README.md, application/README.md, and the public docs website
(https://docs.geti.intel.com) show only the basic case and link to it for
advanced scenarios. When you change how Geti is installed or run, update
application/docs/install.md first, then reconcile the two READMEs so they do
not drift; the docs website lives outside this repo and may also need updating.
Contributor/development skills (changing the codebase):
- Use the
libraryworkflow for changes underlibrary/src,library/tests, or model, training, export, and CLI logic. - Use the
backendworkflow for changes underapplication/backend/app, backend tests, backend packaging, or backend API schemas. - Use the
uiworkflow for changes underapplication/ui/src, frontend tests, build config, or generated API client types. - Use the OpenAPI sync workflow whenever backend API contracts change and the UI consumes those changes.
- Use the documentation update workflow to keep
README.md,application/README.md,application/docs/, orlibrary/README.mdin sync with code changes.
User-facing skills (using Geti, not changing it):
- Use
getitune-discovering-modelsto list available models, recipes, and tasks before training. - Use
getitune-preparing-datasetsto lay out and point a dataset at the library (COCO/YOLO/VOC/native). - Use
getitune-training-a-modelto train or evaluate a model withcreate_engine/ thegetituneCLI. - Use
getitune-exporting-a-modelto export a trained model to OpenVINO IR or ONNX. - Use
getitune-optimizing-a-modelto quantize an exported model to INT8 with NNCF. - Use
getitune-running-inferenceto run predictions/evaluation with PyTorch, OpenVINO, or ONNX models. - Use
geti-using-the-pipelineto drive the Geti application end to end (project → dataset → train → deploy) via its REST API.
- Work from
library/. - Create or refresh the environment with
just venv --device cpu,just venv --device cuda, orjust venv --device xpu. - Run lint and type checks with
just lint. - Run unit tests with
just test-unit -- <pytest args>. - Run backend-focused unit tests with
just test-unit-lightning -- <pytest args>(Lightning models),just test-unit-ultralytics -- <pytest args>(Ultralytics/YOLO models), orjust test-unit-openvino -- <pytest args>(OpenVINO). - Run integration tests with
just test-integration -- <pytest args>.
- Work from
application/backend/. - Create or refresh the environment with
just venv --accelerator cpu,just venv --accelerator cuda, orjust venv --accelerator xpu. - Run lint and type checks with
just lint. - Run unit tests with
just test-unit -- <pytest args>. - Run integration tests with
just test-integration -- <pytest args>. - Run BDD tests with
just test-bdd -- <behave args>. - Generate an OpenAPI spec with
just gen-api-spec --output-path openapi-spec.json. - Start the local server with
just run-server. - Seed demo projects/sources/sinks on startup with
just run-server --setup-demo(add--force-importto bypass schema-version checks). - Treat
_clean_dataandrun-server --cleanas destructive operations; use them only when the task explicitly calls for data reset.
- Work from
application/ui/. - Use Node
>=24.2.0and npm>=11.14.0. - Install dependencies with
npm ci. - Build with
npm run build. - Run formatting checks with
npm run format:check. - Run lint with
npm run lint. - Check cyclic imports with
npm run cyclic-deps-check. - Run the TypeScript checker with
npm run type-check. - Run unit tests with
npm run test:unitornpm run test:unit:coverage. - Use
npm run test:componentandnpm run test:e2eonly when the change actually affects those layers. - Build API typings from an existing spec with
npm run build:api. - Pull a spec from a running backend with
npm run update-specwhenhttps://localhost:7860is available (the backend serves self-signed TLS).
- Do not assume commands from one area apply to another;
library,application/backend, andapplication/uiuse different runtimes and toolchains. - Backend changes can require validating
library/becauseapplication/backenddepends on the local editable package. - Do not hand-edit generated UI OpenAPI typings when regeneration is possible.
- When backend request or response schemas change, regenerate the UI OpenAPI spec and TypeScript definitions in the same change set.
- Use
.github/workflows/lib-lint-and-test.yaml,.github/workflows/backend-lint-and-test.yaml, and.github/workflows/ui-lint-and-test.yamlas the source of truth for CI expectations if local commands are ambiguous.
- Prefer minimal, area-scoped edits.
- Follow existing Ruff, import-linter, ESLint, Prettier, and TypeScript configuration instead of introducing parallel style rules.
- Update tests or docs when behavior changes.
- When changing how Geti is installed or run, edit
application/docs/install.md(the source of truth) and reconcileREADME.mdandapplication/README.mdso they do not drift. - Run the narrowest relevant verification before finishing and state exactly what was not run.