evocompiler.com

We know what year it is. Here’s the Markdown for your agent.

This is written for the agent, not for you. You do not have to read it — but you are about to point something at it, so here it is.

Hand it this line:

For your agent

Read https://evocompiler.com/agent.md and use Evo to optimize this project.

The raw file is at /agent.md, served as Markdown. What follows is the same bytes, set for reading.

Evo, for agents

You are a coding agent. This page is written for you, not for the person you are working with. They do not need to read it.

The canonical copy of this file is https://evocompiler.com/agent.md. Re-read it rather than remembering it; it changes when the product does.

Evo makes a program faster on the machine it will actually run on, by choosing compilation settings for one scope of one project and measuring each choice on that machine. It keeps what measured faster and discards what did not.

If you take one thing from this page: Evo never tells you something is faster. It tells you what it measured. Every number you get back came from running the user's code. Nothing here is a model's estimate.


1. Check that Evo is available

evolve --version        # the management CLI
evocc --version         # the compiler driver, gcc-shaped
evolve auth status      # who this machine is signed in as

If evolve is not found, the user has not installed Evo. Tell them to run:

curl -fsSL --proto '=https' --proto-redir '=https' https://api.evocompiler.com/install.sh | sh

That one command installs both binaries, signs them in, and connects Evo to the coding agents on the machine — including you. It is safe to run again.

If evolve auth status says the machine is not signed in, run evolve setup. It opens a browser. Do not try to authenticate on the user's behalf any other way, and never ask them to paste a token to you.


2. What you have

One tool, over HTTP MCP at https://mcp.evocompiler.com/mcp:

evo_region(action, project_id, arguments?, idempotency_key?)

account_id is derived from the credential, never from your arguments. You cannot name another account's project, because the field you would have to set is not one you supply.

Actions

ActionWhat it does
projectsList the projects on this account.
project_createCreate a project. Safe to call twice for the same repository — it returns the existing one.
scopesList the scopes in a project. A scope is a named part of the program you can tune independently.
controlsThe compilation control parameters you may set for a scope, with each one's legal values and what it emits. Fetch this before proposing anything — it is per compiler family, and guessing produces refusals.
policiesThe constraints in force for this project.
target_statusWhether a runner is connected and able to measure.
trialQueue one measured configuration. Returns a job id; it does not return a measurement.
trialsRead back what has been measured. This is where results appear.
diagnosticsWhy something refused.
freeze_versionFreeze what measured best into a versioned artifact.
versions / select_versionList and choose frozen versions.
query_reuseAsk whether existing work applies here.

The action set is closed. An action outside it is refused, not attempted.


3. The shape of a session

project  ->  scopes  ->  controls  ->  trial (queue)  ->  trials (read)  ->  freeze_version
  1. Find or make the project. Call projects. If none matches this repository, call project_create. Do not ask the user for a project id — you have the repository, which is what identifies it. A project is a reuse boundary, not a source tree: it does not own the user's checkout.
  2. Find the scope. Call scopes. If the part the user cares about is not listed, say so rather than tuning something adjacent.
  3. Read the controls. Call controls for that scope. Propose only values it lists.
  4. Check there is somewhere to measure. Call target_status. If no runner is connected, nothing can be measured — see §4.
  5. Queue trials. Each trial is one configuration. You get a job id back.
  6. Read results. Poll trials. A trial is measured, refused, failed or timed_out. Only measured carries a number.
  7. Freeze, if the user wants to keep the result.

Do not


4. Where measurement happens

Evo does not run the user's code. A runner on the user's own machine does.

you  ->  hosted MCP  ->  queue  ->  the user's runner  ->  their target  ->  result

If target_status says nothing is connected, the user needs a runner. For the common case — measuring on the machine they are already sitting at — this is one command and you may run it for them:

evolve setup measure        # scaffolds a host-local target and starts a runner

For anything else, ask one concrete question rather than teaching them Evo's architecture. Good questions:

What command do you normally use to benchmark this?
Should this run on this Mac, or on the board plugged into it?
How do I tell whether a run produced the right answer?

Bad question: anything that requires them to know what an adapter is.

The adapter is their code, and it must check correctness

The scaffolded adapter has a step where the user's own check goes — their test suite, a golden-output comparison, whatever they already trust. A trial that does not check correctness measures whether the wrong answer arrives sooner. If the user has no check, say that plainly and help them write one before tuning. This is the one place where slowing down is right.

An adapter is arbitrary code running with the user's permissions. Registering one says this project may execute it. That is a coherence boundary, not a safety check. Do not tell the user it has been validated as safe, because it has not been.


5. Hardware

If the target is a physical board, three things are true and none of them are negotiable.

  1. The board runs the user's code many times, in orders and timings nobody chose. It must be disconnected from anything it could drive before a run starts. Say this before the first hardware run, every time — not once.
  2. You may prepare a hardware run. You may not start one. Evo will disclose the exact command and stop. The user runs it in their own terminal. Do not work around this, and do not present it as a bug.
  3. A measurement is about that board, that day. Numbers from a host-local target do not transfer to a board, and numbers from one board do not transfer to another.

6. What is true today

Works. Sign-up and browser sign-in. Automatic agent connection. Projects. Scopes and control catalogues. Queued trials against a connected runner, measured and read back. Freezing a version. evocc as a gcc-shaped driver resolving a project's .evolve/ directory.

Limits, stated plainly.


7. When something goes wrong

What you seeWhat it meansWhat to do
The tool is not listed at allEvo is not connected to this clientHave the user run evolve setup
unauthorizedThe machine is signed out, or the connection was revokedevolve setup — it re-authenticates
No project matches this repoNormal on the first runproject_create
target_status reports nothing connectedNo runnerevolve setup measure, or ask where they want to measure
A trial is refusedA control value or a policyCall diagnostics and read the reason before changing anything
A trial is failedTheir build or their check failedShow them the adapter's output. This is usually their code, not Evo
timed_outThe runner stopped, or the workload does not terminateCheck the runner is still up

The user's own escape hatches, if you need to hand them one:

evolve setup            # fix whatever is missing, safe to re-run
evolve auth status      # who this machine is
evolve auth logout      # end the session; connected agents keep working
evolve mcp connections  # what is connected to this account
evolve mcp revoke <id>  # disconnect one agent

8. Rules

Install Evo · How it works · Back