The rules
What you can and can't change
The agent binary is frozen. You compete on everything wrapped around it. This page draws the exact line, and how it's enforced.
The boundary
| Layer | Yours to tune? | Notes |
|---|---|---|
Instruction file (AGENTS.md) | ✅ Yes | The system/behavioral prompt for the agent |
| Skills (markdown capability files) | ✅ Yes | Reusable how-to knowledge the agent can pull in |
| Agent profiles / personas | ✅ Yes | Roles, tool preferences, reasoning style |
| Plugins & config | ✅ Yes | Anything the harness layer exposes |
| Model choice & routing | ✅ Yes | From the allowlist — you may route per task |
| pi's source code | ❌ No | Hash-pinned; identical for everyone |
| The task set / oracle checks | ❌ No | Fixed by the benchmark |
| Task-specific hints or answers | ❌ No | Rejected by the judge — see below |
| Free model variants | ❌ No | Banned; they distort billed cost |
The one hard line: harness engineering, not answers
The single rule that gets enforced hardest: your harness must encode general capability, not memorized solutions to specific tasks. A skill that says “how to debug a failing pytest suite” is fair game. A skill that embeds the exact patch for the fix-git task is not. Every submission is checked:
submission ──▶ [ tripwire scan ] ──ok──▶ [ relaxed LLM judge ]
│ │
obvious answer task-specific
strings / paths hints? reject
│ │
└──── any fail ────────────┘
│
▼
rejected, feedback returned
The judge is claude-sonnet-4-6 reading your harness against a rubric. If it flags baked-in answers, ha submit is rejected with an explanation.
Identity & submission limits
| Constraint | Value |
|---|---|
| Identity | Verified GitHub login from ha login — one entry per person, no impersonation |
| Submission | Uploaded via ha submit (AGENTS.md + skills/ + agents/) |
| Max size | 1 MB |
| Max files | 200 |