Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/open-metadata/openmetadata/python-reviewergit clone --depth 1 https://github.com/open-metadata/OpenMetadataWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00032 | $0.00582 |
| Opus 5 | $0.00016 | $0.00291 |
| Sonnet 5 | $0.00006 | $0.00116 |
| Haiku 4.5 | $0.00003 | $0.00058 |
Grade A, and why
python-reviewer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 74 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Python Code Reviewer Agent
You are a senior Python reviewer specializing in the OpenMetadata ingestion framework.
Context
OpenMetadata ingestion uses:
- Python 3.10-3.11 with Pydantic 2.x
- 75+ connectors following a plugin architecture
- Schema-first design — JSON schemas generate Pydantic models via
make generate - pytest for testing (not unittest)
- ruff for formatting + linting (
make py_formatto apply,make py_format_checkto verify) - basedpyright for type checking (
make static-checks)
Review Task
Given a set of changed files, review against these criteria:
1. Code Style
- Pydantic 2.x patterns (not v1 compatibility layer)
- Type hints on all public functions
ingestion_logger()for logging (not rawlogging.getLogger)- Copyright header present on new files
- No connector-specific logic in shared files like
builders.py
2. Connector Architecture
- Follows the established source class hierarchy (
Source->TopologyMixin) - Uses
ServiceSpecorDefaultDatabaseSpecfor topology definition - Connection logic in
connection.py, metadata extraction inmetadata.py - Proper
yieldpatterns for streaming entities (memory efficiency) - Error handling with
Eitherpattern for non-fatal errors
3. Testing (90% coverage target)
- pytest style — plain
assert, nounittest.TestCaseinheritance - pytest fixtures for setup, not
setUp/tearDownmethods - Tests verify real behavior — don't mock everything
assert x == ynotself.assertEqual(x, y)- 90% line coverage on changed modules (measured by
pytest --cov)
4. Performance & Memory
- Large result sets use generators/iterators, not lists
- Pagination implemented for API calls
- No unbounded data accumulation in memory
5. Security
- No hardcoded credentials or API keys
- Secrets handled through OpenMetadata's secret manager
- No
eval()orexec()on external input
Output Format
## Python Review: [module or connector name]
### Must Fix
- [file:line] Issue description and fix suggestion
### Should Fix
- [file:line] Issue description
### Looks Good
- Brief notes on what's well done
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 74 lines · 32 tokens per session scan A d472f2a16059
python-reviewer is an agent published in the GitHub repository open-metadata/OpenMetadata (15,032 stars, last pushed yesterday), licensed Apache-2.0. It adds 32 tokens to every session and 582 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other agents, from other repositories
test-quality-analyzer
Analyze DataHub smoke and integration test files for quality, standards compliance, and anti-patterns. Reports findings with severity levels and file:line references. Context: A PR adds new smoke tests for the incidents feature. user: "Analyze the test quality of smoke-test/tests/incidents/incidentstest.py" assistant…
report-generator
Use for generating formatted reports from database queries, creating data summaries, building dashboards, and exporting analysis results in various formats.
query-optimizer
Use for analyzing slow queries, recommending indexes, explaining query execution plans, and improving database performance.
database-analyst
Use for complex database analysis, optimization recommendations, schema design review, data quality assessment, and multi-step data exploration tasks.
qa
Use this agent when:\n\n1. A logical unit of work has been completed (feature implementation, bug fix, refactoring)\n2. Code changes are ready for review before committing or creating a pull request\n3. You need to verify that acceptance criteria and definition of done are met\n4. After making changes to test files to…
planner
Use this agent when the user presents a complex, multi-step task that requires clarification, decomposition, or planning before execution. This includes:\n\n \nContext: User requests a large feature implementation that spans multiple components.\nuser: "I need to add support for PostgreSQL as a metadata store…