Get your data right before the model sees it.
Seventeen single-purpose tools for the manual work in front of every model: pull the values out, check they are what you think, and catch what should not travel. In your editor, in a terminal, or callable by an agent over MCP.
The work before the work
Building anything real on top of a model starts with getting data into shape: pulling it out, checking it, and making sure nothing sensitive came along. That part is manual, repetitive, and almost never shown — so it gets done by hand, in a hurry, and the output is trusted because nobody has time to verify it.
These are the steps, each one command, each one engineered rather than improvised: deterministic output, large files streamed rather than loaded whole, and behaviour pinned by tests so the result is the same tomorrow. 100,000+ installs later, that is still the whole idea.
- 01
Get it out
Values are buried in structure — JSON, YAML, CSV, TOML, INI, .env. Pulling the ones you need is tedious enough that people write a throwaway script, or do it by hand and hope.
- 02
Check it
Are the dates real dates? Do the URLs resolve? Is that a valid colour, a valid path, a regex that matches what you think it matches? This is the step that gets skipped.
- 03
Guard it
Nothing sensitive should be in the pile you are about to hand to a model or commit to a repo. Finding out afterwards is the expensive version.
JevLint-LE
Lint the questions you send to TypeSafe's Jev model as you type, with no API key and no network calls. An optional command asks Jev itself to check a file.
- Catch it while typing. Findings appear in the editor as a question is written, with a quick fix where the fix is not a guess.
- Check a pull request. The same checks run from the command line, with output for a terminal, as JSON, or as GitHub annotations.
- Hand it to an agent. The MCP server offers lint_text, lint_paths and list_rules, so an agent can check the questions it writes.

The tools
17 tools, each with one job. Install only what you need.
ExtractExtract every quantity with its unit, normalized, and refuse the ambiguous ones by name
CheckFind every regex in a codebase, and report which can be driven into catastrophic backtracking
CheckCheck whether a page is scrapeable before the scraper is written, and say when it cannot tell
CheckFind where one dependency is constrained differently across a repository's manifests
CheckIdentify the i18n library a project uses, then audit its catalogs by that library's rules
CheckLint the questions you send to TypeSafe's Jev model as you type, with no API key and no network calls. An optional command asks Jev itself to check a file
GuardFind the Unicode that hides meaning — bidi controls, invisibles, homoglyphs, mixed scripts
Why LE
The same four promises, every tool.
Local by design
Nothing leaves your machine unless you send it. Fifteen of the seventeen tools make no network requests at all. Scrape-LE fetches the page it is checking, because that is the job. JevLint-LE lints offline, and has one command, run by you with your own key, that sends the questions in a file to TypeSafe. Telemetry is off by default and only ever writes to a local output channel you can read.
One job each
No suites, no kitchen sinks. Each tool does one thing, activates fast, and gets out of the way.
Held to the same bar
Every extension ships bundled, with no runtime dependencies — except Scrape-LE, which ships the browser driver it needs — and every Rust tool ships one binary. All seventeen run CI on Linux, macOS, and Windows: the extensions against a real extension host and an installed VSIX, the crates against a fixture corpus that ships inside the crate so anyone can rerun it.
Yours to read
MIT licensed with every repo public. Sixteen of the seventeen extensions ship their interface translated into 12 languages.
Install
Pick your editor. Every tool installs the same way.
ext install nolindnaidoo.paths-leOpen the Quick Open bar (Cmd/Ctrl+P) and paste. Works for any tool — swap the id.
Rust CLI
16 of the 17 also ship a standalone binary — the same engine over a whole repository, with no editor and no Node, and an MCP server in the same file. 16 of them are on crates.io today; the rest build from their repository until they publish.
cargo install string-le numbers-le paths-le colors-le urls-le dates-le units-le ids-le ips-le regex-le scrape-le versions-le i18n-le secrets-le envsync-le unicode-lestring-le · numbers-le · paths-le · colors-le · urls-le · dates-le · units-le · ids-le · ips-le · regex-le · scrape-le · versions-le · i18n-le · secrets-le · envsync-le · unicode-le
Wire them into your agent
Every tool ships the same engine as an MCP server. Pick your client and the tools you want; copy what comes out.
{
"mcpServers": {
"string-le": {
"command": "npx",
"args": [
"-y",
"string-le-mcp"
]
}
}
}Beyond the editor
Same maker, different surface: two Rust desktop tools that turn screen pixels into machine-usable automation — each with its own site.
pixelcoords
Rust · desktopFreeze your screen, mark regions, get pixel-exact coordinates and crops.
pixelactions
Rust · desktopConsume human-verified coordinates, perform the interaction, confirm it landed.









