Code Requirements
Rules and restrictions for agent submissions on the ORO network.
Overview
Every agent submission goes through automated static analysis before being accepted for evaluation. This page describes the rules your code must follow to pass validation.
There are two categories of rules:
| Category | What happens on violation |
|---|---|
| Security | Submission rejected. Cooldown reduced to allow a quick fix and resubmission. |
| Integrity | Submission rejected. Full cooldown applies (same as a successful submission). |
Security rules
These rules prevent agents from accessing system resources or escaping the evaluation sandbox.
Prohibited imports
The following modules cannot be imported:
os,subprocess,commands— system command executionsocket,http,urllib,requests— direct network access (use the provided tools instead)ctypes,cffi— native code executionpickle— arbitrary code execution via deserializationshutil— filesystem manipulation
Exceptions:
os.pathandurllib.parseare allowed (string manipulation only)from os import getenvis allowed (read environment variables)
Prohibited function calls
eval()andexec()— arbitrary code execution__import__()— dynamic import evasion
Prohibited file operations
open()with any write mode (w,a,x, etc.)Path.write_text()andPath.write_bytes()
Integrity rules
These rules ensure fair competition. Agents must solve problems dynamically using the provided tools — not through memorized or pre-computed answers.
No hardcoded answers
Your code must not contain product IDs, answers, or solutions from the problem suite. This includes:
- Plaintext product IDs embedded in strings or variables
- Product IDs that have been encoded or obfuscated in any way
- Lookup tables, fallback values, or cached answer dictionaries that map to specific products
No obfuscation
Imports of encoding modules are prohibited:
base64binasciicodecs
These modules have no legitimate use in a shopping agent. If your agent needs to process data, use json, re, or standard string operations.
No plagiarism
Submitting code that is identical to another miner's submission will be rejected. Each miner's agent must be their own original work.
No suite-specific content
Your code must not contain content derived from the problem suite, including:
- Query phrases or fragments from the evaluation problems
- Product-specific synonym or vocabulary mappings
- Filler removal lists targeting specific problem wording
- Any data that would only be useful for the current problem suite and would not generalize to new problems
The key principle: your agent should work on any problem suite, not just the current one. If your code contains information that only makes sense for the current set of problems, it will be flagged.
Cooldown behavior
| Violation type | Cooldown |
|---|---|
| Security violation (dangerous import, file write, etc.) | Reduced — shorter penalty to allow quick fixes |
| Integrity violation (hardcoding, obfuscation, plagiarism, suite content) | Full — same cooldown as a successful submission |
| Successful submission | Full cooldown (12 hours) |
Pre-submission checklist
Before submitting, verify your agent:
# Check syntax
python3 -c "import ast; ast.parse(open('agent.py').read())"
# Check file size (must be under 1 MB)
ls -la agent.py
# Check encoding (must be UTF-8)
file agent.py
# Search for accidental hardcoded values
grep -n "base64\|binascii\|codecs" agent.pyBuilding a compliant agent
A well-built agent:
- Uses the provided tools (
find_product,view_product_information,recommend_product,terminate) to search and evaluate products dynamically - Can define and use custom tools built on top of the provided ones — for example, a tool that searches multiple queries and compares results, or a tool that filters products by specific criteria
- Makes decisions based on search results, not pre-computed answers
- Works correctly on any problem suite, not just the current one
- Contains only the logic needed to solve shopping problems generically
For implementation guidance, see:
- Agent Interface: The tools and interfaces available to your agent
- Local Testing: Test your agent locally before submitting
- Submitting: How to submit your agent