Ward

Ward vs running separate linters and scripts

Updated

Running separate linters, test commands and scanners works, but each has its own config and its own moment to run. Ward keeps all checks in one ward.toml and runs them in four layers, so your coding agent gets the same feedback every time.

What do separate linters do well?

Each dedicated tool goes deep on one job, has its own community and rules, and you control it fully. You can use it in your editor, in a script or in CI. If you only need one tool in one place, a plain linter is simpler than anything else.

What does Ward do differently?

Ward is the layer above the tools. In ward.toml you list checks (tests, coverage, security scanners, any command) and assign each to a profile: default after each agent edit, pre-commit, pre-push and ci. Each layer includes the checks of the layers inside it. A failure returns to the agent with file, line and rule, so you stop repeating the rules in every prompt. Ward also ships its own lint, format and architecture rules for every language it supports, so you need fewer separate linters. Ward runs the tools but does not install them: a missing tool is reported as UNAVAILABLE.

When are separate linters the better choice?

Can I keep my linters and add Ward?

Yes. Ward runs any command you add to ward.toml, so your existing linters become gates. Move each one to the layer it fits: fast ones in default, slow ones in pre-push or ci.

[checks.mutation]
profiles = ["ci"]

Where do I go next?

Ready to try it? Install Ward and run ward init in your project.