Skip to content
sindresorhus/slugify (opens in a new tab)

A clean, highly readable utility held back only by loose dependencies and a missing lockfile.

JavaScript★ 2,7042 open issuesMIT License
Overall score: 75 out of 100
Holding

last scored 2026-09-28 · both lenses

Readiness lenses

The same repo, two ways: how ready it is for an AI coding agent, and for a human newcomer. Switch lenses to see each one's score and checks.

How ready the repo is for an AI coding agent to read, build, and operate it.

75 / 100

67 of 135 checks passed across 6 categories.

  • Machine Orientation

    55

    Standard Node package structure exists via package.json, but explicit machine-readable agent guidance is absent.

    The repository lacks an AGENTS.md or CLAUDE.md file and does not document setup or test commands directly in the README, placing it in the Workable band because package.json provides the standard `npm test` script. An agent can discover how to verify changes via `package.json`, but lacks dedicated machine guidance.

  • Reproducible Setup

    60

    Workable setup hampered by lack of a lockfile and unpinned dependency ranges.

    While CI and scripts are present, the project lacks a lockfile (npm lockfiles=[none]), pinned dependency versions use loose semver ranges (e.g., ^2.0.0, ^6.4.1), and node engine specification is floating (>=20), landing it in the Workable band.

  • Code Navigability

    85

    Clean, compact, and extremely navigable structure that an agent can easily navigate and modify.

    Code navigability in this repository is solid. With only 13 compact files, a flat and standard module structure (index.js, index.d.ts, overridable-replacements.js, test.js), and clean, well-typed exports (`index.d.ts`), an agent can easily localize and modify the exact code without getting lost. Minor gaps such as missing strict TypeScript configuration files keep it from exemplary status, easily clearing the 70-89 Solid band.

  • Verification Surface

    85

    Solid test suite with CI and linting, easily runnable by agents via npm test.

    The repository features a robust test suite using AVA (`test.js`), linting via XO configured in `package.json`, and an active GitHub Actions workflow (`.github/workflows/main.yml`) that runs `npm test` across Node versions. This clears the solid 70–89 band for verification surface.

  • Agent Safety

    85

    Safe and clean with minor structural omissions for standard safety paths.

    Agent Safety is solid here: secretShapedHits=0, no committed credentials, and a security policy exists at .github/security.md. While .gitignore does not explicitly cover .env and no .env.example template is provided, the repository has no configuration secrets or environment variables needed for operation. Minor gaps like missing SECURITY.md in the root (though present in .github/) keep it from exemplary status, clearing the Solid band.

  • Context Economy

    80

    Lean, signal-dense repository with no junk or vendored bulk clutter.

    Solid 80 score cleared: the repository has a minimal, clean 13-file layout with zero built/vendored bulk noise and clear separation of source, tests, and types. Minor gaps include the lack of an orientation llms.txt or architectural guide, but the signal-to-noise ratio is exceptionally high.

  • Machine Orientation

    12 checks passed13 problems found

    • mediumAgent instructions file

      AGENTS.md / CLAUDE.md is the direct, machine-read channel for entry points and conventions.

      Fix: Add an AGENTS.md naming the entry points, the build/test commands, and the house conventions.

    • mediumProject layout is explained

      A map of the tree lets an agent localise a change without reading every folder.

      Nothing in the snapshot shows this.

      Fix: Add a 'Project layout' section listing the top-level directories and their responsibilities.

    • mediumAgent-specific guidance exists

      General docs are written for humans; an agent benefits from its own orientation file.

      Nothing in the snapshot shows this.

      Fix: Add an AGENTS.md covering the rules, off-limits paths, and how to verify changes.

    • mediumRuntime versions are pinned precisely

      An agent running the wrong runtime version hits failures it cannot diagnose.

      Checked file tree: package.json; it does not show this.

      Fix: Pin the exact runtime/language version in a .nvmrc, .python-version, or engines field.

    • lowllms.txt present

      An llms.txt is the emerging machine-orientation standard — a curated map for LLMs.

      Fix: Add an llms.txt pointing at the key docs and entry points.

    • lowArchitecture doc

      An ARCHITECTURE doc hands an agent the module map instead of making it infer one.

      Fix: Add an ARCHITECTURE.md describing the major components and how they fit.

    • lowExamples directory

      An examples/ directory gives an agent runnable, copyable references for the API.

      Fix: Add an examples/ directory with small, runnable usage samples.

    • lowContribution conventions are written down

      A contributor guide is where an agent learns the branch, commit, and review conventions it must follow.

      Fix: Add a CONTRIBUTING.md stating the branch naming, commit format, and how a change gets reviewed.

    • lowScope and non-goals are clear

      Knowing the boundary stops an agent from building features that were deliberately excluded.

      Nothing in the snapshot shows this.

      Fix: Add a short 'Scope' or 'Non-goals' note so the project's boundaries are explicit.

    • lowDocumentation links resolve

      A dead link is a dead end an agent follows before discovering it leads nowhere.

      Checked README § Related; it does not show this.

      Fix: Fix or remove broken links and references so every pointer in the docs resolves.

    • lowKey technical decisions are explained

      An agent that doesn't know the reasoning behind a choice will cheerfully undo it.

      Nothing in the snapshot shows this.

      Fix: Note the reasoning behind major technical decisions in the docs or an ADR directory.

    • lowA change history is accessible

      An agent reading a project cold can't tell what is fresh versus legacy without a change trail.

      Nothing in the snapshot shows this.

      Fix: Keep a CHANGELOG.md noting what changed in each version or at each notable milestone.

    • lowProject maturity is stated

      Maturity tells an agent how conservative its changes must be and whether breaking an API is acceptable.

      Nothing in the snapshot shows this.

      Fix: Add a one-line status to the README: experimental, stable, maintenance-only or archived.

    • README present — An agent reconstructs what the repo is and how to work in it from the README first.
    • Repository description set — The one-line description is the fastest orientation signal an agent reads.
    • Topics set — GitHub topics situate the repo's domain and stack for an agent at a glance.
    • README shows usage — A usage/example section tells an agent how the project is actually invoked.
    • README states the purpose, not just the name — An agent that can't tell what a repo is for will optimise the wrong thing. Evidence: README introduction.
    • Entry points are named — Knowing where execution begins saves an agent from guessing across the tree. Evidence: README § Usage.
    • Domain terms are defined — Undefined jargon forces an agent to infer meaning, and it infers wrong. Evidence: README § API.
    • Documentation looks current — Stale docs are worse than none — an agent trusts them and acts on fiction. Evidence: file tree: readme.md.
    • The intended audience is clear — Knowing the intended use frames every decision an agent makes about the repo. Evidence: README introduction.
    • The stack is identifiable — An agent must know the stack before it can reason about how to change the code. Evidence: manifest: package.json.
    • An example shows the expected result — An example with its expected output is the cheapest way for an agent to confirm it understood the project. Evidence: README § Usage.
    • Supported platforms are stated — An agent that doesn't know the supported targets can't tell a real bug from an unsupported setup. Evidence: file tree: package.json.
  • Reproducible Setup

    7 checks passed13 problems found

    • highLockfile committed

      Without a lockfile two clones can resolve different dependency trees — the build isn't reproducible.

      Fix: Commit your lockfile (package-lock.json / pnpm-lock.yaml / Cargo.lock / …).

    • highSetup works from a clean clone

      Hidden setup steps are where an autonomous run silently stalls.

      Checked README § Install; it does not show this.

      Fix: Walk the setup yourself on a clean machine and document every prerequisite and command you actually needed.

    • mediumContainer or dev-container

      A Dockerfile / compose / devcontainer removes 'works on my machine' from setup.

      Fix: Add a Dockerfile, a compose file, or a .devcontainer so the environment is declared, not assumed.

    • mediumCommands are exact and copyable

      An agent runs commands verbatim — a described command is a command it has to reconstruct.

      Checked README § Install; it does not show this.

      Fix: Put the real commands in fenced code blocks, exactly as they should be typed.

    • mediumExternal prerequisites are listed

      An agent can't install what the docs never mention it needs.

      Checked file tree: package.json; it does not show this.

      Fix: List every external dependency (runtimes, databases, system packages) and how to obtain it.

    • mediumA dependency lockfile is committed

      Without a lockfile the same install command resolves to different versions on different runs.

      Nothing in the snapshot shows this.

      Fix: Commit the lockfile your package manager generates so dependency resolution is frozen.

    • lowVersion pins are exact

      A floating pin (a bare major, or a range) still drifts between installs.

      Fix: Pin to an exact or minor version, not a floating range.

    • lowEnv template present

      A .env.example tells an agent which configuration keys it must supply to run.

      Fix: Ship a .env.example listing every required key with placeholder values.

    • lowDev container

      A .devcontainer gives an agent a one-command, fully-declared environment.

      Fix: Add a .devcontainer so the toolchain is declared, not assumed.

    • lowThe build looks deterministic

      A build that drifts means an agent's green run today is a red run tomorrow.

      Checked README § Install; it does not show this.

      Fix: Pin versions and vendor or checksum external downloads so the build is reproducible.

    • lowSetup includes a validation step

      A setup that ends with no verification leaves an agent unsure whether to proceed.

      Checked README § Install; it does not show this.

      Fix: Add a validation command after setup so the agent can confirm the environment is ready.

    • lowNon-idempotent steps are flagged

      An agent that reruns a non-idempotent step can silently corrupt state it relied on.

      Nothing in the snapshot shows this.

      Fix: Mark setup steps that aren't safe to rerun, or make them idempotent and say so.

    • lowTest fixtures are committed

      Tests that need data they can't get from the repo can't run in a network-isolated agent environment.

      Nothing in the snapshot shows this.

      Fix: Commit test fixtures and seed data so the suite runs without external data sources.

    • Runtime / toolchain pinned — An unpinned runtime makes an agent guess the version a clean environment needs.
    • README documents setup — Explicit install/setup steps are what let an agent go from clone to running.
    • Setup avoids manual GUI steps — A click-only step is a wall an autonomous agent simply cannot get past. Evidence: README § Install.
    • It runs on sensible defaults — If nothing works until everything is configured, an agent can't get a first foothold. Evidence: README § Usage.
    • The build is self-contained — A build that reaches out to something mutable isn't reproducible across runs. Evidence: file tree: package.json.
    • Setup is reasonably bounded — A sprawling setup multiplies the places an agent's run can stall. Evidence: README § Install.
    • The package manager is unambiguous — Competing lockfiles make an agent pick a tool at random and produce a dependency tree nobody else has. Evidence: file tree: package.json.
  • Code Navigability

    12 checks passed9 problems found

    • mediumConventional source layout

      A recognised src/ · lib/ · app/ layout lets an agent localise code without spelunking.

      Fix: Group source under a conventional top-level directory (src/, lib/, app/, …).

    • mediumModules have clear boundaries

      Clear seams let an agent change one thing without reading everything.

      Checked file tree: index.js; it does not show this.

      Fix: Split grab-bag modules so each has one clear responsibility reflected in its name.

    • mediumThe data model is documented or inferrable

      An agent editing a system whose data shapes are opaque will make changes that contradict the model.

      Checked README § options; it does not show this.

      Fix: Document the core data model or make it inferrable from schemas or types committed to the repo.

    • lowFormatter configured

      A formatter config (Prettier/Biome/rustfmt/…) keeps style uniform across the tree.

      Fix: Add a formatter (Prettier, Biome, rustfmt, …) and commit its config.

    • lowTyped public API

      A declared `types` entry gives an agent typed signatures to anchor an edit on.

      Fix: Ship type declarations and point package.json `types`/`typings` at them.

    • lowComments explain the non-obvious

      An agent can read what code does; it can't recover the reasoning that isn't written down.

      Checked file tree: index.js; it does not show this.

      Fix: Comment the non-obvious decisions and constraints — the context that isn't in the code itself.

    • lowError handling is consistent

      Predictable error handling lets an agent reason about failure paths without surprises.

      Nothing in the snapshot shows this.

      Fix: Adopt one error-handling pattern and apply it consistently.

    • lowFew unexplained magic values

      A magic value with no name is intent an agent has to infer and may get wrong.

      Checked file tree: index.js; it does not show this.

      Fix: Name magic values as named constants with a brief explanation.

    • lowCross-cutting concerns are isolated

      Scattered cross-cutting logic is expensive for an agent to refactor without unintended side effects.

      Nothing in the snapshot shows this.

      Fix: Centralize cross-cutting concerns in dedicated modules rather than sprinkling them everywhere.

    • .editorconfig present — An .editorconfig keeps whitespace and encoding consistent, so diffs stay legible.
    • Naming is consistent — Consistent naming lets an agent guess where things are instead of searching. Judged from the snapshot as a whole; no single section settles it.
    • Little obvious dead or commented-out code — Dead code is a trap an agent wastes context understanding before discarding. Evidence: file tree: index.js.
    • Structure isn't pathologically nested — Deeply nested trees make an agent traverse more to find less. Evidence: file tree: .github/.
    • Files have a single responsibility — A focused file is one an agent can change confidently without unrelated fallout. Evidence: file tree: index.js.
    • Public boundaries are typed — Typed boundaries give an agent ground truth instead of guesses about shapes. Evidence: file tree: index.d.ts.
    • The dependency structure is legible — A tangled dependency graph makes an agent's change ripple unpredictably. Evidence: file tree: package.json.
    • The public API surface is explicit — Without a clear public surface an agent can't tell what it's safe to change versus what others depend on. Evidence: file tree: package.json.
    • Formatting is automated and enforced — Manual formatting is noise an agent generates and a human has to clean up. Evidence: file tree: .github/workflows/main.yml.
    • Tests are near the code they cover — Tests an agent has to hunt for are tests it won't update when it changes the source. Evidence: file tree: test.js.
    • Code for a feature lives together — When a feature lives in one place, an agent's change touches one area instead of a dozen folders. Judged from the snapshot as a whole; no single section settles it.
    • Each language keeps to its own area — Interleaved languages make an agent apply the wrong toolchain and conventions to a file. Judged from the snapshot as a whole; no single section settles it.
  • Verification Surface

    7 checks passed17 problems found

    • highTests present

      Runnable tests are the ground truth an agent checks its own edits against.

      Fix: Add a test suite an agent can run to verify a change.

    • highTests look like they cover the core

      An agent trusts a green suite — a green suite that tests nothing real is a false signal.

      Checked file tree: test.js; it does not show this.

      Fix: Add tests over the main behaviour so a passing suite actually means the code works.

    • mediumHow to run the tests is documented

      An agent can't check its own work if the way to verify is undocumented.

      Nothing in the snapshot shows this.

      Fix: Document the exact command to run the test suite (and any setup it needs).

    • mediumTests assert behaviour

      A test that asserts nothing turns green no matter how broken the code is.

      Checked file tree: test.js; it does not show this.

      Fix: Make tests assert expected outcomes, not just that code runs without throwing.

    • lowLint command defined

      A linter an agent can run catches a class of mistakes before they ship.

      Fix: Add a `lint` script and a linter config.

    • lowTask runner present

      A Makefile / Taskfile / justfile gives an agent a single index of the project's commands.

      Fix: Add a Makefile / Taskfile / justfile collecting the common commands.

    • lowTypecheck command

      A typecheck script lets an agent catch type errors before they ship.

      Fix: Add a `typecheck` script (e.g. `tsc --noEmit`).

    • lowBuild command

      A documented build command is the discoverable way for an agent to produce artifacts.

      Fix: Add a `build` script that produces the distributable.

    • lowThe feedback loop is reasonable

      If the only check takes forever, an agent's iteration loop grinds to a halt.

      Checked manifest: package.json; it does not show this.

      Fix: Expose a way to run a focused subset of tests/checks for quick iteration.

    • lowNo obviously broken tests committed

      A baseline that's already red gives an agent no trustworthy signal to check against.

      Checked file tree: test.js; it does not show this.

      Fix: Fix or remove broken/skipped tests so a green suite is meaningful.

    • lowEdge cases get some coverage

      Untested edge cases are where an agent's change silently breaks something.

      Checked file tree: test.js; it does not show this.

      Fix: Add tests for error paths and boundary conditions, not just the success case.

    • lowCI status is visible from the README

      An agent targeting a red codebase should know it's red before it starts.

      Checked file tree: readme.md; it does not show this.

      Fix: Add a CI status badge to the README linked to the latest pipeline run.

    • lowCoverage goes beyond example-driven tests

      An agent's generated code passes exactly the examples it was written to; property tests probe the edges it missed.

      Nothing in the snapshot shows this.

      Fix: Add property-based or mutation tests to at least the most critical subsystems.

    • lowTest names describe what they test

      A test named 'test_1' forces an agent to read the implementation to understand what failed.

      Checked file tree: test.js; it does not show this.

      Fix: Name tests to describe what they assert — 'given X, when Y, then Z' is a reliable pattern.

    • lowTest coverage is measured

      Measured coverage shows an agent which code has no safety net before it changes it.

      Checked manifest: package.json; it does not show this.

      Fix: Add a coverage script or coverage configuration.

    • lowChecks run before a commit leaves

      Local hooks catch an agent's mistakes before they cost a CI run.

      Nothing in the snapshot shows this.

      Fix: Add pre-commit or git-hook configuration.

    • lowCI tests what the project supports

      Supported-but-untested platforms are where an agent's change breaks without any signal.

      Checked file tree: .github/workflows/main.yml; it does not show this.

      Fix: Add a CI matrix covering each supported runtime or platform.

    • Test command defined — A `test` script is the documented, discoverable way to run the suite.
    • CI configured — Readable CI is the feedback loop an agent reads to know what 'green' means here.
    • Verification feedback is legible — A noisy or flaky signal is one an agent can't tell apart from a real failure. Evidence: file tree: .github/workflows/main.yml.
    • Static checks are meaningful — A linter set to pass everything gives an agent false confidence. Evidence: manifest: package.json.
    • Tests run without elaborate setup — Tests an agent can't actually run are no feedback loop at all. Evidence: manifest: package.json.
    • CI mirrors the local checks — If CI checks differ from local ones, an agent's local green is a false signal. Evidence: file tree: .github/workflows/main.yml.
    • Examples are exercised — Untested examples rot, and an agent that copies them copies the rot. Evidence: file tree: test.js.
  • Agent Safety

    11 checks passed15 problems found

    • highDestructive operations are flagged

      An agent will run an unmarked destructive command the same as any other.

      Nothing in the snapshot shows this.

      Fix: Clearly label destructive/irreversible commands and gate them behind an explicit confirmation.

    • medium.gitignore covers env files

      An ignore rule for .env is what keeps the next careless commit from leaking secrets.

      Fix: Add `.env` (and `.env.*`) to .gitignore.

    • mediumSecurity policy

      A SECURITY.md is where an autonomous security agent reads this repo's rules before acting on it.

      Fix: Add a SECURITY.md stating the disclosure channel and the repo's security rules.

    • medium"Don't touch" zones are stated

      Without a no-go list an agent will happily edit the one file it shouldn't.

      Checked file tree: .gitignore; it does not show this.

      Fix: Document the off-limits paths (generated, vendored, security-sensitive) in an AGENTS.md or CODEOWNERS.

    • mediumSecret handling is explained

      If the safe path for secrets is unstated, an agent invents an unsafe one.

      Nothing in the snapshot shows this.

      Fix: Document how secrets are provided (env/secret store) and state that none belong in the repo.

    • mediumSecrets aren't printed or logged

      A secret echoed into logs is a leak an agent will faithfully propagate.

      Nothing in the snapshot shows this.

      Fix: Ensure secrets are never logged or printed; redact them in any diagnostic output.

    • mediumThe security policy describes this system

      A scanning agent inherits its threat model from this file; boilerplate aims it at nothing in particular.

      Checked file tree: .github/security.md; it does not show this.

      Fix: Rewrite SECURITY.md around this system's real assets, entry points and trust boundaries.

    • mediumUntrusted input is identified

      An agent that cannot tell trusted data from untrusted input will either miss real paths or invent them.

      Nothing in the snapshot shows this.

      Fix: Name the untrusted inputs (user uploads, webhooks, fetched content) and the boundary each one crosses.

    • mediumReleasing is restricted

      If any checkout can publish, an agent with credentials in its environment can ship a broken release.

      Checked file tree: .github/workflows/main.yml; it does not show this.

      Fix: Publish only from CI on tags or through a documented maintainer-only process.

    • lowCODEOWNERS present

      CODEOWNERS marks the 'don't touch without review' zones an agent should respect.

      Fix: Add a CODEOWNERS file marking the sensitive paths.

    • lowAutomated dependency updates

      Dependabot / Renovate keeps dependencies patched without a human in the loop.

      Fix: Enable Dependabot or Renovate.

    • lowCode ownership is marked

      An agent proposing changes to an owned area needs to know who to route the review to.

      Nothing in the snapshot shows this.

      Fix: Add a CODEOWNERS file mapping paths to responsible maintainers.

    • lowThe merge gate is documented

      Without a stated gate an agent doesn't know what its change must clear to be safe to land.

      Checked file tree: .github/workflows/main.yml; it does not show this.

      Fix: Document the required checks and reviewer rules that gate a merge, in CONTRIBUTING or the README.

    • lowDependency auditing is practiced

      An agent adding a dependency needs to know audit failures will be caught before they ship.

      Checked file tree: .github/workflows/main.yml; it does not show this.

      Fix: Add automated dependency auditing to CI and document the command to run it locally.

    • lowCI actions are pinned to a version

      A floating action tag means a supply-chain change can silently alter what runs in CI.

      Checked file tree: .github/workflows/main.yml; it does not show this.

      Fix: Pin CI actions to a specific version or digest — not a floating tag like `@main` or `@latest`.

    • No committed .env — A tracked real .env hands secrets to anything — including an agent — that reads the repo.
    • No exposed secrets — Secret-shaped literals in tracked files are a live credential leak.
    • .gitignore present — A .gitignore is the first guard against an agent committing secrets or build junk.
    • License makes the code reusable — Without a license an agent cannot safely copy, redistribute, or vendor any of this code.
    • Side effects are bounded — A command that reaches outside the repo can do damage an agent never anticipated. Evidence: README § Install.
    • No untrusted code executed at build — Build-time execution of remote code is a supply-chain hole an agent would walk straight into. Evidence: file tree: package.json.
    • It can run sandboxed — An agent operating safely runs sandboxed; broad host access defeats that. Evidence: README § API.
    • Findings can be validated by running the code — A security agent that cannot exercise the code has to speculate, which is how false positives get filed. Evidence: file tree: package.json.
    • No hardcoded credentials in the code — Hardcoded credentials in the tree are a breach waiting for an agent to widen the exposure. Judged from the snapshot as a whole; no single section settles it.
    • Dependencies come from standard registries — Unregistered sources bypass the review and yanking that registries provide, and an agent installs them without a second look. Evidence: file tree: package.json.
    • No prompt-injection in repo text — Repo text is untrusted input; injected instructions are an attack surface, not guidance. No repository text (README, docs, description, file names) addresses automated reviewers or tries to steer a verdict.
  • Context Economy

    18 checks passed1 problem found

    • lowGenerated / vendored files marked

      A .gitattributes linguist marker tells tools (and agents) what to skip.

      Fix: Mark generated/vendored paths in .gitattributes (linguist-generated / linguist-vendored).

    • Dependencies not vendored in — A committed node_modules / vendor tree drowns the real signal an agent needs.
    • Build output not committed — Generated dist/ · build/ output is noise an agent has to read past.
    • No oversized source file — A single file in the hundreds of KB blows past an agent's effective context window.
    • Documentation is signal-dense — Every token of filler is context an agent spends without getting closer to the task. Evidence: README introduction.
    • The tree isn't drowning in noise — A tree full of noise makes an agent work to find the few files that matter. Evidence: file tree: index.js.
    • The repository is focused — A grab-bag repo forces an agent to hold far more context than the task needs. Evidence: Repository description.
    • The files that matter are easy to find — If the important files are buried, an agent spends its budget locating them instead of editing them. Evidence: file tree: index.js.
    • The README is appropriately sized — An overlong README spends an agent's context before it reaches the task. Evidence: file tree: readme.md.
    • Docs aren't duplicated or contradictory — Conflicting docs force an agent to guess which version is true. Evidence: file tree: readme.md.
    • Old versions aren't kept in the tree — Stale duplicates in the tree are noise an agent reads and must rule out. Evidence: file tree: .gitignore.
    • The dependency list is lean — Every dependency is more surface an agent must account for when reasoning about the repo. Evidence: manifest: package.json.
    • Large assets don't bloat the repo — Bulky assets inflate what an agent has to clone and scan for no signal gain. Judged from the snapshot as a whole; no single section settles it.
    • There is one canonical home for the docs — Multiple doc homes force an agent to reconcile conflicting versions of the truth. Evidence: file tree: readme.md.
    • CI configuration is readable — An unreadable CI config is one an agent can't reliably reason about or safely update. Evidence: file tree: .github/workflows/main.yml.
    • Code comments don't double as an issue tracker — Inline design debates are noise an agent reads through to find the actual code logic. Judged from the snapshot as a whole; no single section settles it.
    • Reference docs live outside the code — Docs embedded only in code require an agent to read the source to answer questions that belong in a doc. Evidence: file tree: readme.md.
    • Each tool is configured once — Overlapping configs make an agent guess which one wins. Evidence: file tree: package.json.
    • The root is concise — A crowded root is the first thing an agent reads and the least useful. Evidence: file tree: .github/.

Where the grip slips

  1. mediumReproducible Setup+5 pts if fixed

    Missing package lockfile

    No package manager lockfile (package-lock.json) is committed, leading to non-deterministic dependency resolution.

    Fix: Run npm install to generate and commit package-lock.json.

  2. mediumMachine Orientation+4 pts if fixed

    Missing AGENTS.md / CLAUDE.md file

    No AGENTS.md or CLAUDE.md file providing instructions for AI agents.

    Fix: Add an AGENTS.md file detailing build, test, and run instructions.

  3. lowReproducible Setup+3 pts if fixed

    Unpinned dependencies and engine constraints

    Dependencies and node engine use floating or range semver (^2.0.0, >=20).

    Fix: Pin exact dependency versions or ensure reproducible install flags are documented.

  4. lowVerification Surface+3 pts if fixed

    Absence of dedicated task runner

    No local task runner or Makefile provided to abstract test execution commands for agents.

    Fix: Add a Makefile or task runner configuration if needed, though npm scripts are standard.

  5. lowMachine Orientation+2 pts if fixed

    Undocumented development workflow in README

    README does not document development installation or test instructions.

    Fix: Add a Development or Testing section to the README.

  6. lowCode Navigability+2 pts if fixed

    Missing tsconfig.json

    TypeScript definitions are provided via index.d.ts rather than native TypeScript source or tsconfig.json.

    Fix: Provide a tsconfig.json to make type boundaries explicit for static analysis tools.

  7. lowContext Economy+2 pts if fixed

    Missing agent orientation file (llms.txt)

    The repository lacks an llms.txt or architectural overview document to guide agent orientation.

    Fix: Add an llms.txt or concise architecture guide at the root.

  8. lowAgent Safety+1 pts if fixed

    Security policy not in root directory

    Security policy is located at .github/security.md rather than the repository root or docs folder, which some standard checkers expect.

    Fix: Symlink or move .github/security.md to SECURITY.md in the root directory.

  9. lowAgent Safety+1 pts if fixed

    .gitignore lacks .env patterns

    .gitignore does not cover standard environment files like .env.

    Fix: Add .env and related local environment patterns to .gitignore.

Show your score

Latch badge
[![Latch score](https://latch.fyi/api/badge/6827f993-7bdf-45bd-8c86-f9d8c9f0f8fc)](https://latch.fyi/sindresorhus/slugify)

Share this analysis

https://latch.fyi/sindresorhus/slugify

Fixed some issues? Re-analyze to measure your progress →

Copy the whole report

Grab the entire verdict in one go — a Markdown block for a README or an issue, plain text, or a prompt you can paste straight into an LLM.

Was this verdict fair?

One tap helps — or tell us more.