AI-powered GitHub PR code review bot with agentic tool calling and Corrective RAG
CodeSentinel has 3 tools with basic schemas and descriptions, but significant gaps prevent production use. All tools have descriptions (10-100 chars, below the 194-char baseline), and input schemas are present but minimal. Parameter descriptions are sparse or missing entirely. No output schemas documented. Error handling is absent, tools provide no recovery guidance. The server appears to be a GitHub PR review bot, but tool composition is unclear: run_linter operates on filenames, while tavily-search and tavily-extract are generic web tools. No clear chaining between tools. Naming is reasonable (verb_noun pattern), but descriptions lack context on WHEN to use each tool or WHAT the LLM should expect back.
Run ruff linter on Python files changed in this PR. Call this for any PR that touches .py files.
Extracts content from a specific URL when you have a direct link to documentation
Searches the web for documentation, CVEs, known issues, or API usage examples
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract structured data. run_linter should document what linting errors are returned; tavily-search should document result structure (title, url, snippet, etc.); tavily-extract should document extracted content format.
Parameter descriptions are minimal or absent. 'filenames' in run_linter has a description, but 'query' in tavily-search and 'url' in tavily-extract lack context on format, length, or constraints. LLMs cannot infer whether to pass a single word or a full sentence.
Tool descriptions are too brief (35-40 chars vs. 194-char baseline). 'Searches the web for documentation, CVEs, known issues, or API usage examples' is good, but lacks WHEN to call it vs. run_linter, or what the LLM should do with results. No guidance on multi-step workflows.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 35 | <=2025-11-25 | v2 |
No error handling or recovery guidance. If run_linter fails (file not found, syntax error), the tool provides no actionable error message. If tavily-search returns no results, the LLM has no fallback strategy.
Tool composition unclear. run_linter is domain-specific (Python linting), while tavily-search and tavily-extract are generic web tools. No documented workflow showing how these tools chain together in a PR review. LLM must infer the intent.