This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
A GitHub Action that automates testing of educational coding projects on Hexlet. It pulls a Docker image, extracts project source, runs tests via Docker Compose, and reports results back to the Hexlet API.
make setup # Install dependencies and pull Docker images
make install # npm install only
make build # Bundle both entry points into dist/ using ncc
make test # Run Jest tests (with ACTIONS_RUNNER_DEBUG=1)
make lint # Biome lint check
make lint-fix # Biome lint auto-fixTo run a single test file:
npx jest __tests__/packageChecker.test.jsTwo entry points in bin/ correspond to two GitHub Actions phases:
bin/run-tests.js→ main phase: reads action inputs, callsrunTests()bin/run-post-actions.js→ post phase: callsrunPostActions()to finalize check status and upload artifacts
Both are bundled by @vercel/ncc into dist/run-tests/index.js and dist/run-post-actions/index.js (referenced in action.yml). Always run make build before committing changes.
Core logic lives in src/:
src/index.js— orchestration:prepareProject()pulls Docker image and extracts project source,check()runs Docker Compose,runTests()andrunPostActions()tie everything together and communicate with the Hexlet APIsrc/routes.js— builds Hexlet API URLs (projectMemberPath,projectMemberCheckPath)src/packageChecker.js— validates that the project's package name matches language conventions; readspyproject.toml,composer.json, orpackage.jsondepending on language
Tests use a local Fastify mock server (server.js) to stub Hexlet API responses. Fixtures are in __fixtures__/.
- ES modules (
"type": "module"in package.json) — useimport/export, notrequire - Biome enforces single quotes and no unused imports/variables
- The
dist/directory is committed — regenerate it withmake buildafter any source change
Always prefix commands with rtk. If RTK has a dedicated filter, it uses it. If not, it passes through unchanged. This means RTK is always safe to use.
Important: Even in command chains with &&, use rtk:
# ❌ Wrong
git add . && git commit -m "msg" && git push
# ✅ Correct
rtk git add . && rtk git commit -m "msg" && rtk git pushrtk cargo build # Cargo build output
rtk cargo check # Cargo check output
rtk cargo clippy # Clippy warnings grouped by file (80%)
rtk tsc # TypeScript errors grouped by file/code (83%)
rtk lint # ESLint/Biome violations grouped (84%)
rtk prettier --check # Files needing format only (70%)
rtk next build # Next.js build with route metrics (87%)rtk cargo test # Cargo test failures only (90%)
rtk go test # Go test failures only (90%)
rtk jest # Jest failures only (99.5%)
rtk vitest # Vitest failures only (99.5%)
rtk playwright test # Playwright failures only (94%)
rtk pytest # Python test failures only (90%)
rtk rake test # Ruby test failures only (90%)
rtk rspec # RSpec test failures only (60%)
rtk test <cmd> # Generic test wrapper - failures onlyrtk git status # Compact status
rtk git log # Compact log (works with all git flags)
rtk git diff # Compact diff (80%)
rtk git show # Compact show (80%)
rtk git add # Ultra-compact confirmations (59%)
rtk git commit # Ultra-compact confirmations (59%)
rtk git push # Ultra-compact confirmations
rtk git pull # Ultra-compact confirmations
rtk git branch # Compact branch list
rtk git fetch # Compact fetch
rtk git stash # Compact stash
rtk git worktree # Compact worktreeNote: Git passthrough works for ALL subcommands, even those not explicitly listed.
rtk gh pr view <num> # Compact PR view (87%)
rtk gh pr checks # Compact PR checks (79%)
rtk gh run list # Compact workflow runs (82%)
rtk gh issue list # Compact issue list (80%)
rtk gh api # Compact API responses (26%)rtk pnpm list # Compact dependency tree (70%)
rtk pnpm outdated # Compact outdated packages (80%)
rtk pnpm install # Compact install output (90%)
rtk npm run <script> # Compact npm script output
rtk npx <cmd> # Compact npx command output
rtk prisma # Prisma without ASCII art (88%)rtk ls <path> # Tree format, compact (65%)
rtk read <file> # Code reading with filtering (60%)
rtk grep <pattern> # Search grouped by file (75%)
rtk find <pattern> # Find grouped by directory (70%)rtk err <cmd> # Filter errors only from any command
rtk log <file> # Deduplicated logs with counts
rtk json <file> # JSON structure without values
rtk deps # Dependency overview
rtk env # Environment variables compact
rtk summary <cmd> # Smart summary of command output
rtk diff # Ultra-compact diffsrtk docker ps # Compact container list
rtk docker images # Compact image list
rtk docker logs <c> # Deduplicated logs
rtk kubectl get # Compact resource list
rtk kubectl logs # Deduplicated pod logsrtk curl <url> # Compact HTTP responses (70%)
rtk wget <url> # Compact download output (65%)rtk gain # View token savings statistics
rtk gain --history # View command history with savings
rtk discover # Analyze Claude Code sessions for missed RTK usage
rtk proxy <cmd> # Run command without filtering (for debugging)
rtk init # Add RTK instructions to CLAUDE.md
rtk init --global # Add RTK to ~/.claude/CLAUDE.md| Category | Commands | Typical Savings |
|---|---|---|
| Tests | vitest, playwright, cargo test | 90-99% |
| Build | next, tsc, lint, prettier | 70-87% |
| Git | status, log, diff, add, commit | 59-80% |
| GitHub | gh pr, gh run, gh issue | 26-87% |
| Package Managers | pnpm, npm, npx | 70-90% |
| Files | ls, read, grep, find | 60-75% |
| Infrastructure | docker, kubectl | 85% |
| Network | curl, wget | 65-70% |
Overall average: 60-90% token reduction on common development operations.