{"id":50445106,"url":"https://github.com/dobrotacreator/apex-ray","last_synced_at":"2026-05-31T21:00:38.238Z","repository":{"id":360965234,"uuid":"1252544804","full_name":"dobrotacreator/apex-ray","owner":"dobrotacreator","description":"Local CLI-first AI code review for TypeScript and JavaScript projects.","archived":false,"fork":false,"pushed_at":"2026-05-28T16:41:53.000Z","size":0,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T17:16:07.326Z","etag":null,"topics":["ai","ai-code-review","claude-code","cli","code-review","codex","javascript","llm","local-first","typescript"],"latest_commit_sha":null,"homepage":"https://github.com/dobrotacreator/apex-ray","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dobrotacreator.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-28T16:18:15.000Z","updated_at":"2026-05-28T16:27:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dobrotacreator/apex-ray","commit_stats":null,"previous_names":["dobrotacreator/apex-ray"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/dobrotacreator/apex-ray","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobrotacreator%2Fapex-ray","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobrotacreator%2Fapex-ray/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobrotacreator%2Fapex-ray/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobrotacreator%2Fapex-ray/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dobrotacreator","download_url":"https://codeload.github.com/dobrotacreator/apex-ray/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dobrotacreator%2Fapex-ray/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33748607,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-code-review","claude-code","cli","code-review","codex","javascript","llm","local-first","typescript"],"created_at":"2026-05-31T21:00:37.602Z","updated_at":"2026-05-31T21:00:38.232Z","avatar_url":"https://github.com/dobrotacreator.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/apex-ray-logo-animated.svg\" alt=\"Apex Ray logo animation\" width=\"240\"\u003e\n\u003c/p\u003e\n\n# Apex Ray\n\n[![CI](https://github.com/dobrotacreator/apex-ray/actions/workflows/ci.yml/badge.svg)](https://github.com/dobrotacreator/apex-ray/actions/workflows/ci.yml)\n[![PyPI](https://img.shields.io/pypi/v/apex-ray.svg)](https://pypi.org/project/apex-ray/)\n[![Python 3.14+](https://img.shields.io/badge/python-3.14%2B-blue.svg)](https://github.com/dobrotacreator/apex-ray/blob/main/pyproject.toml)\n[![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)\n\nLocal CLI-first AI code review for TypeScript and JavaScript projects.\n\nApex Ray reads a git diff, builds compact context packs around changed code, runs optional LLM review through a local CLI provider, verifies findings, and writes Markdown/JSON/HTML reports. It is designed for teams that want review intelligence locally, without depending on a hosted PR-review product.\n\n\u003e Apex Ray is pre-1.0. Report schemas and configuration can change while the project is prepared for production use.\n\n## What It Does\n\n- Builds TS/JS context packs from changed files, symbols, callers, callees, contracts, metadata, and related tests.\n- Supports project-specific rules and repo-committed review memory.\n- Runs without LLM calls, or with Codex CLI / Claude Code CLI when configured.\n- Routes cheap and strong models through profiles.\n- Tracks LLM coverage, skipped packs, partial severity, provider failures, cache usage, and continuation commands.\n- Replays historical GitHub PR review comments for local evals.\n- Writes local telemetry so teams can tune cost, latency, and coverage over time.\n\n## What It Does Not Do\n\nApex Ray does not replace CI, tests, linters, typecheck, dependency scanners, SAST, or human review. It focuses on diff-aware behavioral review.\n\n## Requirements\n\n- Python 3.14+\n- Node.js 24+\n- npm\n- git\n- uv for development\n- Codex CLI or Claude Code CLI for LLM review\n- GitHub CLI only for historical PR capture/eval commands\n\n## Install\n\nFor published releases:\n\nOne-off run without a persistent install:\n\n```bash\nuvx apex-ray --help\nuvx apex-ray doctor\n```\n\nUser-level CLI install:\n\n```bash\nuv tool install apex-ray\napex-ray --version\napex-ray doctor\n```\n\n`pipx install apex-ray` is also supported if you use pipx for isolated Python CLI tools.\n\nFor local development from source:\n\n```bash\ngit clone git@github.com:dobrotacreator/apex-ray.git\ncd apex-ray\nuv sync --all-groups\nnpm --prefix analyzers/typescript ci\nnpm --prefix analyzers/typescript run build\n```\n\nRun from the repository root:\n\n```bash\nuv run apex-ray --version\nuv run apex-ray doctor\n```\n\nThe shorter `apex-ray ...` commands below assume the console script is installed on your `PATH`. When working from a source checkout, either prefix commands with `uv run` or install the local checkout as an editable user tool:\n\n```bash\nuv tool install --editable .\napex-ray doctor\n```\n\n## Quickstart\n\nIn a project you want to review:\n\n```bash\napex-ray init\napex-ray doctor\ngit status --short\n```\n\nInspect and commit the setup files before using the first worktree review for application changes.\n\n`apex-ray init` creates `.apex-ray/config.yml`, rules/memory/report directories, gitignore entries, brief agent instruction pointers, project-local Apex Ray skills (`$apex-ray` and `$apex-ray-improve`), and a Lefthook pre-push gate command that follows shared and local config. Use `--hooks none`, `--agent-files none`, or `--no-agent-skill` for exceptional repositories.\n\nAfter the setup commit, run a deterministic local review:\n\n```bash\napex-ray review --worktree --no-llm --output .apex-ray/reports/review.md --json .apex-ray/reports/review.json\n```\n\nRun the configured LLM review explicitly:\n\n```bash\napex-ray review --worktree --llm --output .apex-ray/reports/review.md --json .apex-ray/reports/review.json --html .apex-ray/reports/review.html\n```\n\nReview a branch against the configured base:\n\n```bash\napex-ray review --base main --llm\n```\n\nContinue only unreviewed packs from a partial report:\n\n```bash\napex-ray review --continue-from .apex-ray/reports/review.json --residual-priority p0 --llm\napex-ray review --continue-from .apex-ray/reports/review.json --only-pack 'apps/api/src/payments.ts#capture:1' --llm\n```\n\nRun the same gate that `apex-ray init` wires into pre-push:\n\n```bash\napex-ray gate pre-push\n```\n\nThe gate reviews `review.base...HEAD`, writes `.apex-ray/reports/pre-push.md` and `.apex-ray/reports/pre-push.json`, prints an agent-friendly blocking summary, and exits non-zero when the configured policy fails.\n\n## Configuration\n\nProject configuration lives in `.apex-ray/config.yml`:\n\n```yaml\nreview:\n  base: main\n  ignore:\n    - \"**/*.lock\"\n    - \"**/generated/**\"\n  rule_paths:\n    - .apex-ray/rules\n  memory:\n    enabled: true\n    paths:\n      - .apex-ray/memory\n  llm:\n    enabled: true\n    provider: codex_cli\n    coverage_mode: balanced\n    max_packs: 64\n    max_deep_packs: 48\n    max_input_tokens: 300000\n    verify: true\n  telemetry:\n    enabled: false\n    path: .apex-ray/telemetry/review-runs.jsonl\n  gates:\n    pre_push:\n      enabled: true\n      min_finding_severity: high\n      require_verified_findings: true\n      fail_on_quality_gate: true\n      fail_on_partial_severity: critical\n```\n\nMachine-specific overrides can live in `.apex-ray/config.local.yml`. Apex Ray merges built-in defaults, shared config, local config, and CLI flags in that order. Local config is gitignored by default and is intended for provider/model/cost differences between contributors.\n\nSee [docs/configuration.md](docs/configuration.md) for configuration details.\n\n## Rules And Memory\n\nRules are Markdown files with YAML frontmatter under `.apex-ray/rules/`. They are matched to context packs and injected only when relevant.\n\nMemory cards are Markdown files under `.apex-ray/memory/`. They keep concise team learning, false-positive calibration, and domain review hints close to the codebase.\n\nSee [docs/memory.md](docs/memory.md) for memory-card details.\n\n## LLM Providers\n\nApex Ray supports Codex CLI and Claude Code CLI. Profiles let a project combine cheaper broad review with stronger verification/escalation, including mixed providers:\n\n```yaml\nreview:\n  llm:\n    profiles:\n      cheap:\n        provider: codex_cli\n        model: \"\u003ccheap-codex-model\u003e\"\n      strong:\n        provider: claude_code_cli\n        model: \"\u003cstrong-claude-model-or-alias\u003e\"\n    routing:\n      review_profile: cheap\n      verify_profile: strong\n      escalated_review_profile: strong\n      escalate_review_when:\n        risk: [auth, external_io, persistence]\n        rule_severity: [high, critical]\n        strict_rule: true\n        pack_truncated: true\n```\n\nAvoid near-sunset model IDs in shared defaults. Team members can use `.apex-ray/config.local.yml` for personal provider/model/path/cost overrides.\n\nSee [docs/providers.md](docs/providers.md).\n\n## Architecture\n\nFor a high-level implementation map, review flow, init artifacts, telemetry/eval flow, and test fixture explanation, see [docs/architecture.md](docs/architecture.md).\n\n## Coverage And Continuation\n\nLLM coverage modes:\n\n- `fast`: capped deep review.\n- `balanced`: deep review for high-value packs plus shallow breadth under token budget.\n- `exhaustive`: review every reviewable pack when budget allows.\n\nReports include reviewed/unreviewed pack IDs, partial severity, residual P0/P1 packs, skipped reasons, provider failures, cache metrics, and suggested continuation commands.\n\n## Telemetry\n\nLocal review telemetry is append-only JSONL. It is intended for tuning cost, latency, model routing, and coverage:\n\n```bash\napex-ray review --worktree --llm --telemetry\napex-ray telemetry-summary --telemetry-path .apex-ray/telemetry/review-runs.jsonl\n```\n\nTelemetry is measurement-only and is not injected into review prompts automatically. See [docs/telemetry.md](docs/telemetry.md).\n\n## Historical PR Evals\n\nApex Ray can capture prior GitHub PR comments and replay local review on historical diffs:\n\n```bash\napex-ray eval capture-prs --repo /path/to/project --output /path/to/project/.apex-ray/evals/cases --limit 10\napex-ray eval run-prs --repo /path/to/project --cases /path/to/project/.apex-ray/evals/cases --output /path/to/project/.apex-ray/evals/runs/latest --llm\n```\n\nSee [docs/pr-eval.md](docs/pr-eval.md).\n\n## Privacy\n\nWhen LLM review is enabled, Apex Ray sends selected diff and context-pack content to the configured local CLI provider. Review that provider's privacy and retention policy before using Apex Ray on private code.\n\nCaches and telemetry are local files. They may include repository paths, model names, finding counts, coverage metadata, and token estimates. Keep them ignored unless a team intentionally curates a shared artifact.\n\n## Development\n\n```bash\nuv run coverage run -m pytest -q\nuv run coverage report -m\nnpm --prefix analyzers/typescript run typecheck\nnpm --prefix analyzers/typescript test\nnpm --prefix analyzers/typescript run coverage\ngit diff --check\n```\n\nSee [docs/development.md](docs/development.md) and [CONTRIBUTING.md](CONTRIBUTING.md).\n\nMaintainers: release automation is documented in [docs/development.md](docs/development.md#release-hygiene).\n\n## License\n\nApache-2.0. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdobrotacreator%2Fapex-ray","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdobrotacreator%2Fapex-ray","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdobrotacreator%2Fapex-ray/lists"}