Run it locally
That is not modesty about our infrastructure: there is none doing this yet. Analysing code can mean executing it, so scanning somebody else’s repository on our machines needs a sandbox we have specified and not yet built. Until it exists, this is the only path that analyses on a runner, and it is the safer one.
in a terminal
npx mlreps scan .
npx mlreps check . --dry-run--dry-run prints the check run it would post instead of posting it, so you can read what your team would see.
.github/workflows/. The two lines people usually leave out are already in it — the permissions block, without which the job cannot write a check run, and the head commit, without which the check attaches to a merge commit that exists nowhere and the pull request shows nothing..github/workflows/codebase.yml
name: Codebase intelligence
on:
pull_request:
# Without this, GITHUB_TOKEN cannot write a check run and every run ends in a 403.
permissions:
contents: read
checks: write
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npx mlreps check .
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# On a pull request, GITHUB_SHA is a merge commit that exists nowhere in
# the repository — a check run posted against it is invisible.
PLATFORM_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
Counts, paths and modules, with the worst findings annotated on the lines they are on. It never fails a pull request. The conclusion is always neutral — what to do about a finding is yours to decide.
mlreps scan . writes a report locally. It shows the architecture, what depends on what, and what a change would touch. Nothing has been scanned here yet, so the dashboard will say so rather than show an empty one.
Want it on a dashboard your team can open? Publish it instead.
Not this path
The GitHub App is not this