Skip to content
Limited Edition DevTools
75,000+ installsFreeOpen sourceMITLocal by default

Get your data right before the model sees it.

Sixteen 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. 75,000+ installs later, that is still the whole idea.

  1. 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.

  2. 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.

  3. 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.

The tools

16 tools, each with one job. Install only what you need.

String-LE demoExtract

Extract every string in a codebase, with its position, so a person can read them

Numbers-LE demoExtract

Extract every hardcoded number in a codebase, so a person can check them

Paths-LE demoExtract

Extract every file path in a codebase, and say whether it still points at anything

Colors-LE demoExtract

Extract every color in a codebase, and say which ones are not in your palette

URLs-LE demoExtract

Extract every URL in a codebase, with its protocol and exact position

Dates-LE demoExtract

Extract every date and timestamp, and the exact instant each one resolves to

Units-LE demoExtract

Extract every quantity with its unit, normalized, and refuse the ambiguous ones by name

IDs-LE demoExtract

Extract every UUID, ULID, NanoID, ObjectId and Snowflake, and decode the time inside

IPs-LE demoExtract

Extract every IP address, CIDR block and MAC, normalized and classified by scope

Regex-LE demoCheck

Find every regex in a codebase, and report which can be driven into catastrophic backtracking

Scrape-LE demoCheck

Check whether a page is scrapeable before the scraper is written, and say when it cannot tell

Versions-LE demoCheck

Find where one dependency is constrained differently across a repository's manifests

i18n-LE demoCheck

Identify the i18n library a project uses, then audit its catalogs by that library's rules

Secrets-LE demoGuard

Find hardcoded credentials in a codebase, and never print one into the report

EnvSync-LE demoGuard

Compare the dotenv files in a tree, and say which keys are missing from which

Unicode-LE demoGuard

Find the Unicode that hides meaning — bidi controls, invisibles, homoglyphs, mixed scripts

Why LE

The same four promises, every tool.

Local by design

File contents never leave your machine. Fifteen of the sixteen tools make no network requests at all; Scrape-LE is the exception by design, since checking whether a page is scrapeable means fetching that page. 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 a single bundled file with no runtime dependencies — except Scrape-LE, which ships the browser driver it needs — and every Rust tool ships one binary. All sixteen 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. Every published extension ships its interface translated into 12 languages.

Install

Pick your editor. Every tool installs the same way.

ext install nolindnaidoo.paths-le

Open the Quick Open bar (Cmd/Ctrl+P) and paste. Works for any tool — swap the id.

Rust CLI

16 of the 16 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-le

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-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.

Client

Merge into the client’s JSON config under "mcpServers".

Tools
{ "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 · desktop

Freeze your screen, mark regions, get pixel-exact coordinates and crops.

pixelactions

Rust · desktop

Consume human-verified coordinates, perform the interaction, confirm it landed.

FAQ