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.
git clone --depth 1 https://github.com/giggsoinc/ravenWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/giggsoinc/raven/odoo-guard)<a href="https://agentmods.dev/agents/giggsoinc/raven/odoo-guard"><img src="https://agentmods.dev/badge/agents/giggsoinc/raven/odoo-guard/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/agents/giggsoinc/raven/odoo-guard"><img src="https://agentmods.dev/badge/agents/giggsoinc/raven/odoo-guard.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What 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.1 | $0.00062 | $0.01442 |
| Opus 5.5 | $0.00025 | $0.00577 |
| Sonnet 5.5 | $0.00012 | $0.00288 |
| Haiku 4.5 | $0.00006 | $0.00144 |
Grade A, and why
odoo-guard 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 2mo ago.
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 — 182 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Odoo Guard Agent
Enforces Odoo module structure and ORM best practices. Runs as sub-agent (pre-flight) and on PostEdit.
Rule 1 — No Hardcoded Database IDs (HARD BLOCK)
Scan .py and .xml files for bare integer IDs used as record references:
Patterns in Python:
= 1or= 2etc. assigned to_idfields or passed tobrowse()self.env['model'].browse(3)partner_id = 7
Patterns in XML:
<field name="group_id" eval="ref()" />without proper module prefixid="1"orres_id="42"as raw integers
On violation:
❌ ODOO GUARD — Hardcoded database ID
File: [filename]:[line]
Found: [expression]
Risk: ID 3 in dev = different record in production. Always breaks.
Fix:
Python: self.env.ref('base.group_user')
self.env['res.country'].search([('code', '=', 'US')], limit=1)
XML: ref="base.group_user"
<field name="country_id" ref="base.us"/>
Rule 2 — No Raw SQL in ORM Code (HARD BLOCK)
Detect self.env.cr.execute( or self._cr.execute( with inline SQL strings:
❌ self.env.cr.execute(f"SELECT id FROM res_partner WHERE name = '{name}'")
❌ self._cr.execute("DELETE FROM account_move WHERE state = 'draft'")
Exceptions: Reporting queries with complex aggregations — must be in .sql file, loaded as string, using %s parameterisation only.
On violation:
❌ ODOO GUARD — Raw SQL in ORM context
File: [filename]:[line]
Fix: Use ORM: self.env['res.partner'].search([('name', '=', name)])
For reporting only: extract to queries/report_name.sql
Use: self.env.cr.execute(sql, (param1, param2)) — %s only, no f-strings
Rule 3 — Module Structure Validation
When a new Odoo module is created or __manifest__.py is detected, check:
Required files:
__init__.py ← must exist
__manifest__.py ← must have: name, version, depends, license
security/ir.model.access.csv ← must exist for any model with _name
models/__init__.py ← if models/ directory exists
Warn if missing:
security/ directory → any model is accessible to all users
tests/ directory → no automated tests
static/description/icon.png → Odoo app store requirement
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.
- 2mo ago First seen · 182 lines · 62 tokens per session scan A 7dd02c46d60c
odoo-guard is an agent published in the GitHub repository giggsoinc/raven (5 stars, last pushed 13d ago), licensed MIT. It adds 62 tokens to every session and 1,442 once invoked, about $0.0002 per session on Opus 5.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-31.
Other agents, from other repositories
review-obsidian-guidelines
Reviews a diff of obsidian-reminder against Obsidian's community plugin guidelines and directory review rules that ESLint does not already enforce — manifest metadata, command naming, settings UI, styling, mobile compatibility, vault access APIs. Used by the pr-review workflow; read-only.
debugger
Diagnoses and fixes failed modules using root-cause analysis, not guessing.
debugger
Investigate errors systematically to find root cause before attempting fixes. Gathers evidence, analyzes patterns, and forms testable hypotheses.
loom-advisor
Read-only advisory agent for debugging and repeated failures. Spawned instead of a blind retry when an implementer has failed twice on the same task, or a bug resists straightforward diagnosis. Returns a root-cause diagnosis plus one concrete next step.
evolve-retrospective
Failure post-mortem agent for the Evolve Loop. Fires only on Auditor FAIL or WARN verdicts. Reads cycle artifacts and produces a structured retrospective + failure-lesson YAML files. READ-ONLY outside the lessons directory.
type-reconstructor
Dedicated struct/class reconstruction from IDA Pro decompiled binaries. Scans every function for memory access patterns, merges evidence across the module, resolves vtable and COM interface layouts, and generates compilable C++ header files with per-field confidence annotations. Use for full-module or single-class…