A code quality and compliance platform with integrated case file management, evidence ingestion, verdict determination, and project tracking. Provides REST API and CLI interfaces for continuous compliance monitoring.
Gavel is an HTTP-based code quality evaluation platform with 20 tools covering case file management, project administration, IAM, and evidence ingestion. Tool definitions are generally present with descriptions and input schemas, but lack depth in several critical areas: parameter descriptions are minimal or generic, output schemas are not documented, error handling guidance is absent, and several tools expose security-sensitive operations without clear permission boundaries or confirmation patterns. Naming follows verb_noun convention consistently (CreateCaseFile, ListCaseFiles, GetProject), which is good. However, many parameter descriptions are single-word or placeholder-like ('evidence data'), and there is no evidence of input validation rules, format constraints, or enumerated options. The server uses oapi-codegen with OpenAPI specs, suggesting structured schemas exist, but the visible source does not show schema details or output type documentation.
Changes the password for the authenticated user
Creates a new case file for a project with commit SHA and branch information
Creates a new project with key, name, and target pattern
Creates a new user account with email, name, and role
Files a pleading (issue/pull request) linking code changes to case file evidence
Finalizes a case file with verdict and classification information
Retrieves the baseline case file for a project to track finding deltas
Output schemas not documented. Tool descriptions state what the tool does but do not describe the structure of returned data. LLMs cannot plan downstream tool calls or extract specific fields without knowing the response shape.
Parameter descriptions are too generic or minimal. Examples: 'Evidence data (findings, coverage, or tool execution)' in IngestCaseFileEvidence is a placeholder; 'Verdict object with outcome and rulings' in FinalizeCaseFile lacks format/constraint detail. LLMs need explicit format, valid values, and format constraints to avoid hallucinated input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Retrieves detailed information about a specific case file including verdict, findings, and coverage
Retrieves detailed information about a specific project
Health check endpoint for server readiness
Ingests evidence (findings, coverage data, tool execution results) into a case file
Issues an API token for the authenticated user with specified scopes
Lists case files for a specific project with pagination
Lists findings across case files with filtering and pagination
Lists all API tokens issued to the authenticated user
Lists all projects with pagination
Authenticates a user with email and password, returns session cookie
Revokes an existing API token
Searches findings across projects with filters
Uploads source code files for a project commit to aid in finding analysis
No enum constraints on categorical parameters. 'role' in CreateUser and 'scopes' in IssueToken appear to accept strings but do not define valid values. This invites hallucinated input (e.g., role='superuser' when only 'admin', 'member', 'viewer' are valid).
Sensitive operations lack confirmation/dry-run patterns. Login, ChangePassword, RevokeToken, and DeleteUser are destructive but have no confirmation step or dry-run mode. Agents can accidentally authenticate as the wrong user or revoke tokens without verification.
No error guidance for LLMs. Tool descriptions do not include recovery hints (e.g., 'If case file not found, call ListCaseFiles to find the correct ID'). Error responses are not documented; agents have no guidance on retryability, user-fixable vs. fatal errors, or next steps on failure.
Password and credentials appear as tool parameters. Login accepts 'password' and ChangePassword accepts 'current_password' and 'new_password' as input params. These should never be exposed in tool signatures, use server-side session management or environment-injected secrets instead. Parameters are logged and echoed in traces.
No permission declaration or scope boundaries. Tools like CreateUser, RevokeToken, and FinalizeCaseFile lack explicit permission requirements (e.g., 'requires write:iam', 'admin only'). Without clear permission models, agents cannot be configured with least-privilege access.
Pagination support is inconsistent. ListCaseFiles and ListProjects expose 'limit' and 'offset' but do not document max values, total counts, or whether a 'hasMore' flag is returned. ListFindings and SearchFindings similarly lack pagination metadata documentation.
Complex object parameters lack structure documentation. 'evidence' in IngestCaseFileEvidence and 'verdict' in FinalizeCaseFile are typed as 'object' with only a brief description. No schema shows nested fields, required subfields, or nesting depth. LLMs cannot construct valid payloads.
No idempotency guarantees. CreateCaseFile, CreateProject, and CreateUser do not declare whether repeated calls with identical inputs produce the same result or duplicate records. Agents retry on ambiguous failures, non-idempotent tools risk duplicate side effects.