# Dev tools ## Code style All DBnomics fetchers use [ruff](https://docs.astral.sh/ruff/) for linting and formatting. ### Shared ruff configuration The package [`dbnomics-fetcher-template`](https://pypi.org/project/dbnomics-fetcher-template) is published on PyPI and ships a shared `ruff.toml` that factorizes the ruff configuration across all fetchers. It is installed as wheel data. Fetchers generated from the [fetcher template](initialize-a-new-fetcher.md) include an inline `[tool.ruff]` section that mirrors this shared configuration. Each fetcher can extend or override individual settings as needed using ruff's `extend-*` keys (e.g. [`extend-exclude`](https://docs.astral.sh/ruff/settings/#extend-exclude), [`extend-select`](https://docs.astral.sh/ruff/settings/#lint_extend-select), [`extend-per-file-ignores`](https://docs.astral.sh/ruff/settings/#lint_extend-per-file-ignores)) without duplicating the whole base configuration: ```toml [tool.ruff.lint] # Add project-specific rules on top of the shared selection extend-select = ["RUF022"] # Add project-specific exceptions on top of the shared ignores extend-per-file-ignores = { "__init__.py" = ["F403"] } ``` :::{seealso} The complete shared `ruff.toml` can be inspected in the [dbnomics-fetcher-template repository](https://git.nomics.world/dbnomics/dbnomics-fetcher-template/-/blob/main/code-style/ruff.toml). ::: ## AI tools The DBnomics team maintains a [repository](https://git.nomics.world/dbnomics/ai-tools) that extend the capabilities of AI coding agents with domain-specific knowledge about the DBnomics ecosystem. These skills are compatible with most agents (Copilot, Claude Code, etc.). Please read the [README](https://git.nomics.world/dbnomics/ai-tools) of the repository for instructions on how to use it.