freecode

freecode + WordPress: edit a live site with a free AI coding agent and no API key

freecode is a free terminal coding agent: no key, no subscription, sponsor cards inside the interface pay for the models. Its engine is OpenCode, so it reads opencode.json, and one block there connects Respira's MCP server to every WordPress site on your account, across 17 page builders.

freecode is alpha software with a daily usage limit, and it runs on your machine. Respira is the paid part and runs on your hosting. 340+ tools, snapshots on every write path.

What freecode is

freecode, at freecode.sh, is a terminal coding agent by Andrew Schmitz that costs nothing to use. There is no API key to buy and no subscription: sponsor cards shown inside the interface pay for the models, and a daily usage limit keeps that sustainable. It installs from npm as freecode-sh, and the version checked for this page was 0.1.0-alpha.36, which is to say alpha.

The part that matters for WordPress: its engine is OpenCode. The bundled freecode-engine binary prints the OpenCode CLI, reads opencode.json, and keeps its state in ~/.local/share/opencode/. OpenCode speaks the Model Context Protocol, and Respira is an MCP server. So freecode can read and edit a live WordPress site for the same reason OpenCode can, with no work on freecode's side and none on Respira's.

This is a compatibility note, not a partnership. freecode does not ship or endorse Respira; it works because the engine speaks MCP.

The setup, in five steps

  1. Install freecode.
    terminal
    npm install -g freecode-sh

    The installer checks an Apple Developer ID signature on the engine binary before it runs. Node and npm are the only things you need first.

  2. Open the Respira setup page and choose OpenCode.

    There is no freecode tile on the dashboard, and there does not need to be: freecode runs the OpenCode engine, so the opencode.json the page builds is the right file. It carries every site on your account. If you would rather write the file yourself, copy the RESPIRA_CONFIG_B64 value and paste it into the block below.

  3. Save it in the project folder.

    opencode.json at the root of the folder you will open freecode in. The engine reads it on start, so if freecode is already open, quit it and start it again.

  4. Start freecode and sign in once.

    Run freecode in that folder. The first time, the interface asks you to sign in; that is what unlocks the sponsor-funded models. freecode account shows who is signed in afterwards.

  5. Ask it to list your sites.

    Try: using respira-wordpress, list my connected WordPress sites and which page builder each one runs. Real site names coming back is the test. freecode's own commands do not include an mcp list, so asking is the check.

The config

This is the block that was tested. Replace the placeholder with the base64 value from your dashboard and keep everything else as it is. It is the same block as on the OpenCode page, because it is the same engine reading it.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "respira-wordpress": {
      "type": "local",
      "command": ["npx", "-y", "@respira/wordpress-mcp-server"],
      "environment": {
        "RESPIRA_CONFIG_B64": "<paste from the Respira dashboard>"
      },
      "enabled": true
    }
  }
}

If you have a Claude Code or Cursor block on hand, do not paste that: OpenCode uses a top-level mcp key rather than mcpServers, one command array that includes the binary, and environment rather than env. A file in the old shape is ignored without a warning.

The file sits at the project root, so it travels with the project. If the folder is in git, add opencode.json to .gitignore so the credential never lands in a repository.

What was checked, and what was not

On a real machine on 2026-09-20, with freecode 0.1.0-alpha.36 installed and the block above in place, the engine reported respira-wordpress connected. A run on a free model called respira_list_sites and listed five connected WordPress sites correctly. A second run called respira_get_site_context and respira_get_builder_info; the tool calls worked, and the small model wandered between them and needed a retry or two.

The sponsor-funded sign-in itself was not exercised for this page, so the steps above say "sign in once when the interface asks" and no more. If the sign-in flow has changed since, the freecode docs are the source, not this page.

One more honest line: because freecode shares OpenCode's data directory, a provider credential already stored there by OpenCode is visible to freecode as well.

What the freecode wrapper exposes

freecode keeps its surface small. Everything below is the whole list; the agent work happens inside the interface, and MCP servers are read from the file rather than added on the command line.

freecode
open the agent in the current folder
freecode <project-path>
open it in another folder
freecode account
show the signed-in account
freecode doctor [--json]
check the install
freecode logout
sign out
freecode telemetry
telemetry settings
freecode traces
local traces
freecode upgrade
update to the latest alpha
freecode version
print the version

What the agent can do once it is connected

  • using respira-wordpress, list my connected sites and which page builder each one runs
  • on site A, open the homepage and show me every heading with its styling
  • duplicate the contact page on site B, change the phone number, and hold it for my approval
  • find every page on site A that still says 2025 and change it to 2026
  • run the accessibility scan on the homepage and list the WCAG failures
  • add a testimonial section under the hero on the services page, on a copy
  • show me the last five snapshots on this page and restore the one from Tuesday

340+ tools across posts, pages, menus, media, taxonomies, users, plugins, ACF, the WooCommerce catalog and every supported builder. See how Respira writes Elementor pages, Divi 4 and Divi 5 layouts and Bricks Builder elements in their native format. Keep each task small and specific on a free model: name the site, name the page, describe one change, and read the duplicate before you approve it.

Before you point it at a client site

freecode's own FAQ asks you to check permissions before using it on work code. The same applies here with more weight, because the Respira config carries live credentials for every site in it.

Start read-only.
Set the access level per site on the Sites page in your dashboard: read-only for a look around, content for text, builder for layouts. An alpha agent on a free model cannot exceed the level you set.
The daily limit is a fact of life.
Once the day's allowance is used, freecode waits for the reset. Nothing on the WordPress side is affected by that, but a half-finished task stays a duplicate until you come back to it.
Nothing goes live from the chat.
Duplicates and drafts wait in the Approvals and Undo screen in wp-admin until you publish them. If the agent got it wrong, throw the copy away and the client never sees it. Rotating a site token in the dashboard cuts off every client holding the old one, freecode included.

Questions people ask

Is freecode really free?

Yes, for the agent and its models. There is no API key and no subscription: sponsor cards shown inside the interface pay for the models, and there is a daily usage limit. It is alpha software. Respira, the WordPress side, is paid: it needs an account with at least one connected site, on a trial or a plan, and the plans are on the pricing page.

So what does editing WordPress with freecode cost?

The Respira plan, and nothing else. The agent, its models and the MCP server package cost nothing. The same Respira account works in freecode, OpenCode, Claude Code, Cursor and Codex at once, with no per-client pricing.

Do i need an API key?

No. freecode signs you in once inside its own interface and pays for the models through its sponsor cards. Respira does not put an API key in the config either: the RESPIRA_CONFIG_B64 value from the dashboard carries the connection for every site on the account. It is still a credential, so keep the file out of git.

Does it work with Elementor, Divi and Bricks?

Yes, plus 14 more. Respira reads and writes each builder in its own native storage format, so an Elementor page stays editable in Elementor and a Bricks page stays editable in Bricks. Nothing is flattened into HTML on the way through.

Can freecode break my live WordPress site?

Page and element writes take a snapshot first, and structural page work is built on a duplicate rather than the live page. The Approvals and Undo screen in wp-admin is where a duplicate gets published or thrown away, and where a snapshot gets restored, for 90 days. You also pick an access level per site when you connect: read-only, content, builder or full.

Does it work on a live site?

Yes. The agent builds on a copy and the live page changes only when you approve it in wp-admin. With an alpha agent on a free model, a staging site is still a sensible place for the first session, and read-only access is a sensible first level.

What is the difference between freecode and OpenCode?

OpenCode is the engine: an open-source terminal coding agent from SST with free and paid models and its own mcp commands. freecode is a wrapper around that engine that removes the key and the subscription, funds the models with sponsor cards, and adds a daily limit. The bundled freecode-engine binary prints the OpenCode CLI and reads opencode.json, which is why the Respira block is identical on both pages.

Can i use the same config in both?

Yes. One opencode.json at the project root serves freecode and OpenCode. Because the two share the OpenCode data directory under ~/.local/share/opencode/, a provider credential stored there by OpenCode is visible to freecode as well. That is worth knowing before you run freecode on a machine where OpenCode already has keys.

Why freecode plus Respira fits

Zero on the agent side, so the whole cost is the Respira plan.
No key, no subscription, no per-seat fee for the agent. Respira runs on your hosting and is the one thing on the bill.
Native builder writes.
Elementor stays Elementor, Bricks stays Bricks, Divi stays Divi, across 17 builders. Nothing is flattened to HTML in transit.
Snapshots and duplicates on every write path.
An alpha agent on a small model will get some things wrong. Undo has to be faster than it is.
Grow out of it without redoing the setup.
When the daily limit or the free models become the constraint, the same opencode.json runs in OpenCode with a paid model, and the same Respira account works in Claude Code, Cursor and Codex. The Respira CLI gives any of them JSON output to shell out to, and Respira AER is the same builder intelligence in a chat in your dashboard, with no terminal at all.