Multi-language code checker — lint Bash, Python, JavaScript, JSON, YAML, Markdown + system processes.
Zero dependencies. Zero API costs. Runs locally in seconds.
Features · Installation · Usage · Configuration · Modes
AI code assistants like Claude Code or Codex are great, but they have a problem: every syntax check costs tokens — and when they timeout (45s), you get nothing.
MULTI REP SET solves this. It checks your code using local tools only:
- Bash →
bash -n+shellcheck - Python →
py_compile+ruff - JavaScript →
node --check - JSON →
json.loads() - YAML →
yaml.safe_load() - Markdown → Regex link validation
- System → process health, CDP connection, gateway status
All without a single API call. ~250 files in 7 seconds. Zero token cost.
| Feature | Detail |
|---|---|
| Languages | Bash, Python, JavaScript, JSON, YAML, Markdown |
| System checks | Process health (pgrep), CDP connection (curl :9222), gateway status (systemctl) |
| Speed | ~258 files in 7 seconds |
| Dependencies | Zero (stdlib only — ruff and shellcheck optional) |
| Token cost | $0 — no API calls |
| Exit code | 0 = all passed, N = number of failures (CI-friendly) |
git clone https://github.com/nessos666/multi-rep-set.git
cd multi-rep-set
ln -sf $(pwd)/src/multi_rep_set.py ~/bin/check
# Run
checkOr via pip:
pip install .
multi-rep-setcheck # Scan all configured directories
check /path/to/project # Scan a specific directory
check --fix # Auto-fix what's fixable (ruff, shellcheck)
check --watch # Watch mode — re-check on file changes
check --ci # CI mode — JSON output, exit code = failures
check --deep # Deep analysis — unused vars, empty except, hardcoded paths
check --no-color # Plain text output (for logs)Scans all configured directories and reports:
── Bash (.sh) ──
OK script.sh
WARN kein set -e: deploy.sh
── Python (.py) ──
OK module.py
FAIL broken.py
SyntaxError: invalid syntax at line 42
── JSON (.json) ──
OK config.json
FAIL data.json
Expecting ',' delimiter at line 12
── Markdown (.md) ──
OK README.md
WARN Broken link: https://example.com/broken
── System ──
OK Chrome CDP (port 9222)
OK Gateway (hermes-gateway.service)
WARN Service 'nq-scanner' not running
Results: 258 files, 278 passed, 1 failed, 53 warnings (6.7s)
- Checks all files
- Auto-fixes what's fixable (
ruff --fix, shellcheck recommendations) - Lists what couldn't be auto-fixed
- Shows summary: "12 of 15 errors auto-fixed"
Watches all files in scan_dirs using inotify (Linux) with polling fallback (5s). On change: re-checks only the changed file. Ctrl+C to stop.
For CI/CD pipelines (GitHub Actions, GitLab CI, pre-commit hooks):
- Exit code = number of failures (0 = all good)
- JSON output:
{"files":258,"passed":278,"failed":1,"warnings":53,"duration_seconds":6.7} - No color codes, no ANSI
- 30s timeout
Additional analysis beyond syntax:
- Empty
except: passblocks while True:withoutbreak- Hardcoded paths that don't exist
print()instead of proper logging- TODO / FIXME / XXX comments
Create ~/.multi-rep-set.yaml to control which directories are scanned:
scan_dirs:
- ~/projects/my-project
- ~/projects/another-project
max_per_type: 50
ignore_patterns:
- node_modules
- .git
- __pycache__
- .venv
- dist
- buildWithout config, the tool scans from the current directory.
multi-rep-set/
├── src/
│ └── multi_rep_set.py # Single-file checker (470 lines)
├── tests/ # Test suite
├── examples/ # Example configs
├── pyproject.toml # Package metadata + CLI entrypoint
├── LICENSE # MIT
└── README.md
| Tool | Required? | Used for |
|---|---|---|
| Python 3.11+ | ✅ Required | Core checker |
ruff |
❌ Optional | Python linting (auto-detected) |
shellcheck |
❌ Optional | Advanced Bash linting (auto-detected) |
node |
❌ Optional | JavaScript syntax check (auto-detected) |
Without optional tools, the checker still works — it just skips the deeper checks.
Part of the development tooling ecosystem:
- nq-strategy-builder — Uses this checker for CI validation
MIT — do whatever you want with it.
Zero dependencies. Zero token costs. Runs locally in seconds.
github.com/nessos666