Derived Modular Arch
Tooling

Tooling overview

Hybrid enforcement model: full graph in CLI, fast feedback in the editor.

DMA validates architecture hybridly: heavy graph audit in the CLI, lightweight per-file hints in linters.

Rules that cannot be checked by a machine eventually stop being followed. That is why the core is npx @derived-modular/cli check, not "set up ESLint and forget."

Two surfaces

ToolWhere to runRole
npx @derived-modular/cli checkCI, pre-pushHard gate: graph, cycles, inbound predicates
npx @derived-modular/cli doctorLocallySoft growth signals (exit 0)
Agent skill dmaCursor, Claude Code, …Placement algorithm and prohibitions for LLMs
ESLint / Oxlint / BiomeEditor, lint scriptFour file-scoped rules

Always run npx @derived-modular/cli check in CI. Linters are a speed supplement, not a replacement.

Coverage matrix

Ruledma checkdma doctorESLint / OxlintBiome
layer-directionheuristic
feature-to-featureheuristic
public-apiheuristic
no-barrelheuristic
no-cycle
inbound predicates
evolution signals

Cycles and "a feature with inbound edges must be a service" are graph properties. A linter sees one file at a time and cannot see the full graph, so these rules live only in the CLI.

Why linters alone are not enough → Why CLI, not linters only.

Packages

PackagePurpose
@derived-modular/clicheck + doctor
@derived-modular/eslint-pluginESLint flat config
@derived-modular/oxlint-pluginSame rules for Oxlint
@derived-modular/biome-pluginGritQL heuristics (weaker)
@derived-modular/boundariesShared path classification for CLI and ESLint
Skill dma (skills/dma)Agent skill — not an npm package; npx skills add … --skill dma
  1. Locally: ESLint (or Biome/Oxlint) on save — catches obvious imports
  2. Before push: npx @derived-modular/cli check .
  3. From time to time: npx @derived-modular/cli doctor . — see what to extract or promote
  4. In CI: npx @derived-modular/cli check . --format json (or SARIF for GitHub Code Scanning)

What to choose

SituationRecommendation
Already on ESLint 9+ flat config@derived-modular/eslint-plugin
Biome as unified linter/formatter@derived-modular/biome-plugin + still run dma check in CI
Oxlint for speed@derived-modular/oxlint-plugin (alpha)
CI only, no editor@derived-modular/cli is enough

What's next

On this page