competitive-programming is the harness for timed contests: a problem scored by an official scorer on a seed list (heuristic-optimisation rounds in the AtCoder style) or by a leaderboard (Kaggle code competitions, olympiad-style machine-learning tasks). The time limit is the budget, the first valid submission goes out early and is improved from there under a submission quota, and the scorer or the board is the only score a session may claim. It ships inside the package and loads by name.
What it holds is the discipline, not the contest: the problem, the scorer or the competition, the seeds or the data and the rules are the task’s. The domain stops at the candidate.
Where it came from
The harness was written from the benchmarks the engine was measured on: first ALE-Bench (the scorer discipline, the heuristic toolbox, the time-limit ladder), then the IOAI campaigns on Kaggle (the contest economics, the olympiad playbook, the submission ledger and the ticket office that meters a shared quota). Every rule is stated as a thing to measure on the contest at hand, never as a benchmark’s constant: the package’s gate runscheck over each bundled harness at the packaged page budget and scans it for a benchmark constant. The results on those benchmarks, with who ran them and when, are on ALE-Bench and IOAI 2026.
What it ships
instructions/guardrails.md, the standing rules (the task statement before anything else, the problem and its scorer, validity before score), and the module’s own page, one each for setup, ideation, implementation, verification, feedback and learning. The skills, the delegates and the hooks are defined once and listed per module:
The skills
The delegates
score-auditorreads the scorer’s output across every seed of an attempt and reports whether the scores are the scorer’s, which category of inputs the solution loses on, and whether the loss is a bug or the method, with evidence.submission-auditoraudits one contest submission before it is spent, a kernel or a file by the task’s modality, for the organizers’ rules, external resources, leakage into the validation and the output’s format, and reports pass, fail or inconclusive.
The hooks
require-scorer-run, a stop hook on implementation: a finish with no scorer run over every seed of the task’s list (kapso_datasets/seeds.txtin the task root) is sent back once with the reason. The hook asks once (a session already continuing because of a stop hook passes), so a broken scorer cannot trap a session; the verifier’s reproduction of the numbers is the check.require-insurance, a stop hook on implementation of a leaderboard task: a finish before a submission the site holds (pending its score, or scored) is in the ledger is sent back once with the reason; one the CLI refused or the site failed to score is no insurance. The hook asks once, as above; the verifier reads the submission on the site.deny-shell-submit, on the shell: a raw contest submission typed in the shell is denied where the task root names a submission procedure, since a submission spends shared quota and must leave a record in the ledger.
requirements.txt: the scorer, the compiler and the contest’s command-line tool are the task’s and the machine’s. kapso harness check checks what the manifest declares (its structure and its environment), which here names none of them; the setup session and the contest preflight are where their presence is established.
Run a task on it
contest-preflight skill describes: the problem statement, and under kapso_datasets/ either the seed list and the official scorer (a scored contest) or the contest descriptor, the submission procedure and the organizers’ rules pinned verbatim (a leaderboard contest), so that no session has to visit the contest’s site. With --experience naming a bank, the olympiad playbook pulls the cards that match the task’s twists.
The benchmark runners build the task root and run on it by default; --harness names another:
pip install leeroo-kapso · Every page as plain text: llms.txt.