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

LayerYours to tune?Notes
Instruction file (AGENTS.md)✅ YesThe system/behavioral prompt for the agent
Skills (markdown capability files)✅ YesReusable how-to knowledge the agent can pull in
Agent profiles / personas✅ YesRoles, tool preferences, reasoning style
Plugins & config✅ YesAnything the harness layer exposes
Model choice & routing✅ YesFrom the allowlist — you may route per task
pi's source code❌ NoHash-pinned; identical for everyone
The task set / oracle checks❌ NoFixed by the benchmark
Task-specific hints or answers❌ NoRejected by the judge — see below
Free model variants❌ NoBanned; 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

ConstraintValue
IdentityVerified GitHub login from ha login — one entry per person, no impersonation
SubmissionUploaded via ha submit (AGENTS.md + skills/ + agents/)
Max size1 MB
Max files200