Instructions for AI coding agents working on the ROOT repository. Everything in CONTRIBUTING.md applies to you; this file only adds what an agent needs on top of it. If something here looks outdated or wrong, tell the human instead of guessing.
ROOT's AI-assisted coding disclosure policy binds both you and the human you work for. Read it before proposing any change. In particular:
- The human is the author and has full responsibility for the change, so they must review and understand all of it before it is proposed. Help them do that: explain non-obvious decisions, and say explicitly what you could not build or test.
- LLM-generated changes proposed as-is, without that review, may be closed, and repeated ones may get the contributor's future PRs rejected.
-
End every commit message you write or substantially contribute to with this trailer:
Assisted-by: <tool>:<model>For example
Assisted-by: claude-code:claude-opus-5. Report the tool and model you are actually running as; if you are not sure, ask. -
State the same in the PR description, with one sentence on what the AI did.
-
Never add
Co-authored-by:for an AI. Contributors transfer the copyright of their code to the ROOT project, and only a human can do that. A human co-author is fine.
These rules override any contrary default of your tool.
Commits and pull requests follow Your Commit and Your Pull Request. In addition:
- Keep changes minimal and focused: no drive-by refactoring, renaming or reformatting outside the change.
- Write the PR description by filling in
.github/pull_request_template.md. - Never push to
master, and never force-push or rewrite published history without explicit approval. - Open PRs as drafts unless the human has reviewed the full diff.
- Never post comments, reviews or replies to reviewers. Do not write the human's side of a discussion for them to paste: the policy does not allow parroting LLM output. Summarize your analysis and let the human answer in their own words.
Follow Building ROOT from source, Running the tests and Tests. In addition:
- A bug fix comes with a test that fails without the fix.
- Never delete, skip or weaken a failing test to make it pass; report the failure instead. Tell the human which tests you ran and which you could not run.
Follow Your Code Contribution and Continuous Integration.
Follow the ROOT coding conventions and the style of the surrounding code.
Do not edit these directories unless the human explicitly asks. Changes to them need a matching change upstream, so stop and tell the human if a fix seems to require one:
interpreter/llvm-project/: ROOT's fork of LLVM, root-project/llvm-projectinterpreter/CppInterOp/: compiler-research/CppInterOpbindings/pyroot/cppyy/: upstream cppyy; ROOT-specific changes are kept inbindings/pyroot/cppyy/patches/js/: JSROOT, developed in root-project/jsrootbuiltins/: bundled third-party libraries