This repository contains the code used for my 5th place finish out of 3,803 teams (gold medal) in the Kaggle competition CSIRO - Image2Biomass Prediction.
I participated by delegating almost all implementation work to Claude Code (Opus 4.5) and Codex (GPT-5.2 xhigh). I also wrote a blog post about that experience.
Blog post (Japanese): Claude Code / CodexでKaggle金メダルを取った話
This repository intentionally preserves the code, configs, and analysis outputs I actually used during the competition without over-cleaning everything. The goal is to show what collaboration with coding agents looked like in practice.
_CLAUDE.md / _AGENTS.md are instruction files I used for coding agents during the competition. They are prefixed with _ to avoid unintended behavior in other people's environments. Claude Code / Codex automatically read CLAUDE.md / AGENTS.md from the repository root and follow those instructions, so publishing them as-is could cause unexpected behavior when someone clones the repo. They are included here for reference only.To let coding agents (Claude Code / Codex) iterate on experiments quickly, I used the following setup.
EXP + child-exptrain.py, I created a new EXP directorychild-exp (YAML config) under the same EXPThis made it possible to give short, concrete instructions such as: "Create child-exp003 under EXP113 and change the loss to XX."
_CLAUDE.md: Instructions for Claude Code. It includes the correct evaluation function, common bug patterns, backward compatibility rules, and other guardrails. It grew to 430 lines as I kept adding lessons learned during the competition._AGENTS.md: Instructions for Codex. It is a slimmed-down version of CLAUDE.md with an emphasis on guardrails such as "these changes tend to hurt LB."EXP_SUMMARY.md (Experiment History)This file records CV, LB, success/failure, and notes for every experiment. I used it as a guardrail to prevent coding agents from repeatedly suggesting ideas that had already failed.
1. Ask the coding agent to write experiment code
-> Create EXP/{EXPNO}/config/child-{childexpno}.yaml
2. Run execute_train.ipynb on Google Colab
-> Results are written to EXP/{EXPNO}/outputs/child-{childexpno}/
|- oof_predictions.csv # Out-of-fold predictions
`- results.json # CV scores
3. Submit with palla-csiro-inferece.ipynb on Kaggle Notebook
-> Check the leaderboard score
4. Update EXP_SUMMARY.md
-> Add experiment name, changes, CV, LB, success/failure, and notes
.
|- _CLAUDE.md # Claude Code instruction file (reference only)
|- _AGENTS.md # Codex instruction file (reference only)
|- execute_train.ipynb # Notebook for training on Google Colab
|- EXECUTE_TRAIN_README.md # How to use execute_train.ipynb
|- palla-csiro-inferece.ipynb # Notebook for inference and submission on Kaggle
|
|- EXP/
| |- EXP_SUMMARY.md # Full experiment log (CV, LB, success/failure, notes)
| |- EXP060/ # Main experiment line (EVA02-CLIP -> DINOv3)
| | |- train.py # Training script
| | |- infer.py # Inference script
| | |- config/ # Two representative child-exp configs
| | `- outputs/ # Experiment outputs (oof, results.json)
| `- EXP113/ # Final submission experiment (Private best: child-exp020)
| |- train.py
| |- infer.py
| |- config/ # Six child-exp configs including the final submission setup
| `- outputs/
|
|- docs/ # Intentionally messy in places to preserve the real workflow
| |- OVERVIEW.md # Competition overview
| |- DATASET.md # Dataset description
| |- Idea_Research/ # Idea notes, Gemini Deep Research results, etc.
| `- papers/ # Notes on reference papers
|
`- output/
`- CV_LB/STATE_SEASON/ # CV-LB correlation analysis outputs generated by agents
| File | Description |
|---|---|
EXP/EXP_SUMMARY.md |
Full log of experiments, including both successes and failures. It functioned as the coding agent's "memory." |
_CLAUDE.md |
A 430-line instruction file that grew from repeated painful lessons during the competition. |
docs/Idea_Research/ |
Raw idea notes, ranging from rough memos to Gemini Deep Research outputs. |
execute_train.ipynb |
Colab notebook for running training. You can launch an experiment by changing only the EXP name and child-exp name. |
palla-csiro-inferece.ipynb |
Kaggle notebook for inference and submission. |
output/CV_LB/STATE_SEASON/ |
Example outputs from CV-LB correlation analysis. I intentionally left some of these analysis artifacts to show how I used coding agents for OOF analysis. |
My best Private LB setup was EXP/EXP113/config/child-exp020.yaml (DINOv3 Large, 864px, Private 0.66).
See:
EXP/EXP113/train.py for trainingEXP/EXP113/infer.py for inference$ claude mcp add csiro-biomass-agentic-solution \
-- python -m otcore.mcp_server <graph>