{"id":15456587,"url":"https://github.com/aphelionz/lake-boone","last_synced_at":"2025-08-29T02:30:55.391Z","repository":{"id":49885382,"uuid":"317292331","full_name":"aphelionz/lake-boone","owner":"aphelionz","description":"A novel recruiting tool using GitHub events.","archived":false,"fork":false,"pushed_at":"2023-07-23T22:39:02.000Z","size":731,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-10-12T12:21:11.793Z","etag":null,"topics":["cerebro","docker","github-api","nextjs","nodejs","octokit-js","osint","plotly","react","recruiting","recruitment"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aphelionz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-30T17:08:46.000Z","updated_at":"2023-12-05T15:46:13.000Z","dependencies_parsed_at":"2024-06-11T19:15:57.265Z","dependency_job_id":"14008adb-faed-4d7c-825d-b6b1725cc619","html_url":"https://github.com/aphelionz/lake-boone","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/aphelionz/lake-boone","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphelionz%2Flake-boone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphelionz%2Flake-boone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphelionz%2Flake-boone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphelionz%2Flake-boone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aphelionz","download_url":"https://codeload.github.com/aphelionz/lake-boone/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aphelionz%2Flake-boone/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272611569,"owners_count":24964380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-29T02:00:10.610Z","response_time":87,"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":["cerebro","docker","github-api","nextjs","nodejs","octokit-js","osint","plotly","react","recruiting","recruitment"],"created_at":"2024-10-01T22:33:59.691Z","updated_at":"2025-08-29T02:30:55.075Z","avatar_url":"https://github.com/aphelionz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cerebro (cerebro-cli)\n\n\u003e A novel recruiting tool using GitHub events.\n\nFinding capable developers is challenging. This tool starts with a simple\nheuristic - the ability to get a pull request (PR) merged given a sufficient\namount of feedback, and filters from there. _Credit to\n[@sequoia](https://github.com/sequoia) for this heuristic._\n\nThe flow is currently as follows:\n\n1. Listen to the public GitHub events firehose for pull request\n_merge_ events on PRs that have a specified number of comments.\n2. Discard PRs made by bot users\n3. For each PR:\n    1. Check if the language is your target language\n    2. Check if the author of the PR is looking for a job\n\n## Table of Contents\n\n- [Prerequisites](#prerequisites)\n- [Usage](#usage)\n- [Contributing](#contributing)\n- [Future Work](#future-work)\n- [Maintainers](#maintainers)\n- [License](#license)\n\n### Prerequisites\n\n- [Node.js](https://nodejs.org). The [nvm](https://nvm.sh) tool works well for\nthis.\n- Optional, but highly recommended: A [GH personal token] with default\npermissions\n- Optional: [Docker] and [Docker Compose].\n\n[GH personal token]: https://github.com/settings/tokens\n[Docker]: https://docker.io\n[Docker Compose]: https://docs.docker.com/compose/\n\n## Usage\n\nCerebro can be run in a number of different ways, always configured by environment\nvariables.\n\n### Configuration\n\nThe following environment variables are available:\n\n- `LANGUAGES`: **Required.** Comma separated list of the target languages\nyou're looking for\n- `GH_TOKEN`: **Not required but highly recommended.** Your GitHub personal\nauthentication token.\n- `COMMENT_THRESHOLD`: _optional, default 3_. Show PRs with review comments\ngreater than or equal to this number\n- `SHOW_NON_HIREABLE`: _optional, default false_. Show applicants that are not\nexplicitly marked as hireable.\n- `CHANGESET_THRESHOLD`: _optional, default 5432_. Only match PRs that have a\ntotal changeset (additions + subtractions) under this number.\n\n### Using `npx`\n\nYou can skip the whole installation process altogether and just run Cerebro\nusing `npx`\n\n```bash\nGH_TOKEN=[insert GH token here] \\\nLANGUAGES=Solidity,Rust \\\nnpx cerebro-cli\n```\n\n### Using Docker and Docker Compose\n\nWith `docker`:\n\n```bash\ndocker run -ti \\\n  -e GH_TOKEN=XXXXX \\\n  -e LANGUAGES=c++,javascript \\\n  aphelionz/cerebro-cli:v0.3.0\n```\n\nOr in your `docker-compose` file:\n\n```yaml\nservices:\n  cerebro:\n    image: aphelionz/cerebro-cli:v0.3.0\n    environment:\n      GH_TOKEN: XXXXX\n      LANGUAGES: rust,solidity\n```\n\n### Prometheus\n\nBy default, the app will expose Prometheus-compatible metrics on port 9100.\nThese include all of the normal default nodejs metrics, as well as some custom\nmetrics for Cerebro:\n\n```prometheus\n# HELP unique_events_processed Number of unique events processed by Cerebro\n# TYPE unique_events_processed counter\nunique_events_processed{app=\"cerebro\"} 8811\n\n# HELP suitable_pull_requests_found Number of suitable pull requests by Cerebro\n# TYPE suitable_pull_requests_found counter\nsuitable_pull_requests_found{app=\"cerebro\"} 6\n\n# HELP candidates_found Count of candidates found by Cerebro so far\n# TYPE candidates_found counter\ncandidates_found{app=\"cerebro\"} 0\n```\n\n## Contributing\n\nIssues and PRs accepted. More info coming soon.\n\n### Installing from Source\n\n```bash\ngit clone https://github.com/aphelionz/cerebro\ncd cerebro\nnpm install\n```\n\nThen run `npm start` with the aforementioned environment variables\nto run, test, and develop!\n\n### Why doesn't this use GraphQL?\n\nGitHub API v4 does not support listening to the public event timeline.\n\n### Future Work\n\n1. Better bot detection\n    1. Bot detection really happens in two places, here and in the use of `review_comments`\n2. English proficiency\n    1. Really needs a manual overview until we find / create a good enough tool\n    for this\n    2. Ideally would be any proficiency in language\n3. \"Looking for a job\" false negatives, and false positives too\n    1. `hireable` is either null (false) or true. However null is the default\n    because GH jobs is opt-in. So we only make a note of this for now.\n4. IPFS + OrbitDB integration? Or at least _some_ database\n5. Readline and raw stdin integration to make a proper UI (or just make an\nAPI + website)\n6. Environment variable validation\n    1. Is it possible to get the full list of supported GH languages?\n\n## Maintainers\n\n[@aphelionz](https://github.com/aphelionz)\n\n## License\n\nAGPL © 2020 Mark Henderson\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faphelionz%2Flake-boone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faphelionz%2Flake-boone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faphelionz%2Flake-boone/lists"}