Review new or updated Coral source manifests and source PRs for content, style, product fit, query ergonomics, documentation quality, and consistency with existing Coral sources. Use when Codex is asked to review a sources/core/name or sources/community/name source directory, a manifest.yaml, or a GitHub PR that adds or changes a Coral source.
67
80%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./plugins/coral/skills/coral-review-source-spec/SKILL.mdReview the source as product surface. Do not spend the review mainly restating CI, schema validation, or YAML lint results unless those failures are visible and relevant. Focus on whether the source will be understandable, useful, safe, and consistent for Coral users and agents.
manifest.yaml, any README, and related source docs or tests.sources/core/ or sources/community/. If the PR does not add or update a source, say the skill is not applicable and review normally.CONTRIBUTING.md, especially "Source contributions".AGENTS.md and any nearer AGENTS.md.sources/core/ and the community example in sources/community/hn/.These checks should be based on the authoritative API docs for the API the source exposes.
sources/community/ for community sources; new sources/core/ additions need prior discussion per CONTRIBUTING.md. PRs from external contributors should almost always be in sources/community.version when user-visible behavior, tables, columns, inputs, or semantics change.description says what a user can query, not just what vendor API is wrapped.inputs distinguish secrets from variables correctly, use clear environment-style names, and include enough hints for first success. Environment-style names are prefixed with a service-specific prefix (e.g. GITHUB_API_TOKEN, not API_TOKEN.)API_KEY, TOKEN, ACCESS_TOKEN, PASSWORD, SECRET, APPLICATION_KEY, READ_KEY, ADMIN_KEY, private keys, bearer values, or authorization header values must be kind: secret; endpoint/base URL/site/region/domain/org/account/user/email values may be kind: variable.credential.methods, each method matches the provider's supported setup path. OAuth methods use device-code, authorization-code, or client-credentials flow. Authorization-code methods need an explicit pkce value, loopback redirect URI, correct redirect port mode, and support for SSH, VM, and split-browser setups where the CLI accepts a pasted final localhost redirect URL while waiting for the loopback callback. Device-code methods need device_authorization_url, no redirect URI fields, and no static client secret. Client-credentials methods need token_url, client.id.input, client.secret.input, and client.secret.transport, with no redirect URI fields, authorization endpoints, device authorization endpoints, PKCE, or Dynamic Client Registration. All OAuth methods need correct endpoint URLs, appropriate client ID/default/input behavior, correct client-secret transport when applicable, and least-privilege scopes. For authorization-code or device-code Dynamic Client Registration, Coral always registers a native client, source specs cannot configure a web application type, and request_refresh_token_grant: true should appear only when the provider supports registering refresh-token grants. OAuth-protected Streamable HTTP MCP sources include oauth.resource when the provider requires resource indicators. OAuth URL templates may reference only declared kind: variable inputs for non-secret URL components.auth, request headers, query params, or body fields where the provider expects it.expires_in metadata; otherwise users must reconnect after the token expires. Other methods whose provider will not issue refresh tokens should also call out that users must reconnect when access tokens expire.source_config fallback second.fetch_limit_default values.description or guide.kind: search table functions with search_limits, stable result identifiers, and useful candidate metadata. Non-retrieval table functions keep the default kind for parameterized operations such as scoped child collections, time-range logs, metrics queries, or detail operations. Ordinary table filters are for exact lookup, scoping, or provider-side filtering; mode: contains is only substring matching. Flag provider-native search modeled as a filter and require a kind: search function.snake_case table names;
quoted SQL table names are valid for compatibility but should not leak odd
provider operation names unless the source is intentionally generated.base_url and input-derived URLs handle hosted, cloud, region, or enterprise variants without making the common case painful.ok_path, error_path, allow_404_empty, and rate-limit hints are present when the provider's API behavior needs them.Utf8; use numeric types for values users should compare or aggregate numerically.Timestamp columns are exposed for important times when Coral can reliably parse or derive them; keep raw provider timestamp fields only when useful.nullable matches provider reality. Do not mark fields non-null just because examples happened to contain them.guide blocks for usage advice; prefer that split.Lead with concrete findings. Use severity labels only when helpful, but do not bury issues under a summary. Prefer:
Findings
- High: `sources/community/foo/manifest.yaml:42` marks `created_at` non-null, but the provider omits it for imported records...
- Medium: `sources/community/foo/README.md:18` shows setup but never states the required token scope...
Open questions
- Is endpoint X intentionally omitted from the first version?
Review notes
- I treated CI lint/schema checks as out of scope unless visible in the diff.If no issues are found, say that directly and include any limits, such as not having live credentials or not inspecting CI logs.
When highlighting a discrepancy between the source and the API documentation, always include links to the exact API documentation page.
2c58881
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.