Contributing#
If you want to use Serena — connect it to a coding agent, configure languages, work with projects — Usage is where to start. Nothing in this section is needed for that.
This section is for working on Serena itself — and if that is why you are here, welcome. The learning curve used to be real; these pages exist to flatten it.
The policy for a contribution — what can go straight to a pull request and what wants an issue first — is set by CONTRIBUTING.md at the repository root; that file is the authority, and this section defers to it wherever they touch the same ground. What this section carries is everything a policy file cannot: the day-to-day mechanics, the conventions the code holds itself to, and a guided way into the source.
The pages, in the order a new contributor meets them:
Set Up and Make a Change#
Getting Started — from a fresh clone to a verified change: the environment, the four commands that gate every commit, how the tests are selected and skipped, what CI runs against a pull request, and the files that are generated rather than edited.
Serena for Serena — keep your daily server on current
main, run a specific branch when testing calls for it, and let the diagnostics tools tell you what each edit did.
The House Conventions#
House Style — the design, testing and docstring conventions, rendered from the project’s own checked-in doctrine.
The Common Contributions#
Adding Language Support — the most common substantial contribution, mapped end to end.
Scripts — the map of
scripts/: demos that run tools without an agent attached, the generators, and the introspection utilities.
When Questions Come Up#
FAQ — the questions that keep arriving on the tracker, answered the way the maintainers answered them, with the threads linked.
The CI Matrix — five batches, three operating systems, and the reasons behind both; what the matrix means for your pull request.
Under the Hood#
SolidLSP — the language-server library under everything: its shape, how Serena uses it, and the etiquette of changing it.
Code Reference — generated from the docstrings in
src/serena, ordered the way you meet the package rather than alphabetically: readable forwards on a first pass, a lookup afterwards.