Documentation

Language support and the agent environment

Which languages Coroid supports, what is installed in the environment the agent operates in, and how a well-supported language differs from a weakly supported one.

Coroid's agents write code in the same way an engineer using a shell would. There is no per-language integration to wait for: if a competent developer can open your repository, read it, make changes and run its commands, the agent can do the same.

What varies by language is not whether Coroid can work in it. It is how much Coroid can independently prove about the change it made — navigate your code semantically, build it, run the test suite, start it in a container. This is the core of language support, and it is worth understanding before judging a result.

The agent environment

Every task runs in a clean, disposable Linux Workspace built from a Debian image, as an unprivileged user. Nothing persists between tasks: each task starts from a fresh clone with no cached data and no pre-installed tools beyond those in the image.

The image comes with a general-purpose toolchain, so most projects require no extra setup:

AreaAvailable
JavaScript / TypeScriptNode.js 22, npm, npx
PythonPython 3, pip, venv, Poetry, Pipenv
JavaJDK (headless), Maven, Gradle
GoGo toolchain
PHPPHP CLI, Composer
RubyRuby, Bundler
C / C++GCC, G++, Make, CMake
BrowserChromium, for browser tests and preview verification
Generalgit, curl, jq, ripgrep, grep, sed, awk, coreutils, PostgreSQL client

Anything not listed above — a less common runtime, a specific compiler version, or a native dependency — is not a barrier. It is a reason to bring your own container.

What varies by language

Three factors, ordered by their impact on quality.

Language servers

A language server gives the agent semantic understanding: go to definition, find references, identify real types. With one, the agent can ask precise questions about your code instead of inferring answers from text. Without one, it reads the code — which works fine for small and medium-sized codebases, but is less reliable as the codebase grows in size and complexity.

Coroid runs language servers for TypeScript and JavaScript, Python, Java and C#.

Other languages rely on reading the code instead. This is the biggest quality difference between languages, and it is a matter of degree, not kind.

Build and test commands

The agent needs to compile your project and run its test suite to verify its own work. Coroid detects these commands when a Project is created; detection works better for conventional layouts than for unusual ones.

This is configuration, not capability — see build and test configuration. A correct pair of commands for an obscure language outperforms a wrong pair for a popular one.

Containers

If your project can run in a container, Coroid can use that as the execution environment, eliminating environment drift and service dependencies in one step.

When your language has no language server

The practical workarounds, in order of effectiveness:

  • Configure build and test commands explicitly rather than relying on detection. This matters more than the presence of a language server.
  • Containerise. A working container closes most environment-related gaps.
  • Invest in project context. Good context partly compensates for what a language server would provide, by informing the agent about the project structure it would otherwise need to discover.

Bringing your own container

If your project builds and tests using a Dockerfile or Compose file that already works, that is the most reliable configuration available — better than a well-supported language on the default image, as the container precisely defines your toolchain, versions and service dependencies.

The test is simple: clone your repository into an empty directory and run install, build and test with no other setup. If that works, Coroid will work too.

Private registries and network access

Workspaces can access the network, so public package registries operate without any configuration. Private feeds – such as a private npm registry, an internal Maven repository, or a self-hosted PyPI – require credentials to be entered as part of the project configuration, as the clean workspace has no ambient credentials to inherit.

Mixed-language projects

Most real-world projects use more than one language. A TypeScript frontend paired with a Python service is common, and Coroid manages such setups seamlessly. The level of support depends on the specific language involved in the change; a change in a well-supported language receives full handling regardless of the other components' language.