<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Opfield blog</title>
    <link>https://opfield.dev/blog</link>
    <description>Releases, how Opfield is built and how teams run their infrastructure with it.</description>
    <language>en</language>
    <atom:link href="https://opfield.dev/blog/rss.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Sat, 17 Oct 2026 18:50:31 GMT</lastBuildDate>
    <item>
      <title>Opfield 2.12.3</title>
      <link>https://opfield.dev/blog/opfield-2-12-3</link>
      <guid isPermaLink="true">https://opfield.dev/blog/opfield-2-12-3</guid>
      <pubDate>Sat, 17 Oct 2026 18:00:00 GMT</pubDate>
      <description>Bounded disk use on every node, disk alerts, a console guard for AI agents, ordered access list rules, failover order for databases, registry storage in S3 and better Git builds.</description>
      <content:encoded><![CDATA[<p>Opfield 2.12.3 is out. Most of the work in this release went into keeping disks from filling up, making agent access safer, and fixing rough edges in Git builds, Pages and managed databases. Below are the changes most users will notice. The full list is in the <a href="https://opfield.dev/changelog">changelog</a>.</p>
<h2 id="disks-stay-bounded">Disks stay bounded</h2>
<p>A control plane that runs builds, images and logs across many servers can quietly fill a disk. In 2.12.3 every place that grows has a limit.</p>
<ul>
<li>The internal registry keeps two builds per container, deletes the builds of removed sources and stops accepting new builds when its disk is 90% full.</li>
<li>Docker nodes remove images that nothing has used for 12 hours. Each container keeps the image it runs and one to roll back to.</li>
<li>Container logs on Docker nodes stay bounded, including containers created before Opfield or outside it. Nginx nodes keep route logs within a size limit and remove the logs of deleted routes.</li>
<li>Postgres WAL and replication slots no longer fill a database disk.</li>
<li>Housekeeping keeps Opfield's own data bounded even when it is switched off, and runs at once when an Opfield disk reaches 90%. It also shows what fills each disk: the largest tables, Redis, container logs, and old images per node.</li>
</ul>
<p>New built-in alerts warn you before this becomes a problem: disk alerts at 85% that cover every data disk of a node, Opfield disk full, full database disks, and Housekeeping not running.</p>
<h2 id="a-guard-for-agent-console-commands">A guard for agent console commands</h2>
<p>The assistant and MCP clients can run commands in a node console. They run as root, so an agent can actually repair a node. Docker, containerd and Podman are masked in that console: a command that uses Docker is refused with the name of the Opfield tool to use instead.</p>
<p>This is an accident guard, not a security boundary. It keeps an agent from changing a managed container behind Opfield's back by mistake. Agents also can no longer run commands over SSH on hosts that are Opfield nodes.</p>
<p>If a managed container is still stopped, changed or removed by hand, the new built-in alert &quot;Container changed outside Opfield&quot; fires and explains what the change means.</p>
<h2 id="access-list-rules-in-order">Access list rules in order</h2>
<p>Access list rules are checked from top to bottom, and the first match wins. Until now the order could not be changed, so an allow rule added after a broad deny could never match. Rules can now be reordered in the interface, the API and MCP, and rules that can never match are flagged.</p>
<h2 id="failover-order-for-databases-and-storage">Failover order for databases and storage</h2>
<p>For managed Postgres, key-value stores, ClickHouse and S3 storage with availability, you can now set the failover order: which server takes over first when the primary fails.</p>
<h2 id="registry-in-s3">Registry in S3</h2>
<p>The internal registry can store its data in S3 instead of on the Opfield host's disk. A storage switch checks every image the registry keeps for workloads.</p>
<h2 id="pages-and-error-pages">Pages and error pages</h2>
<p>Pages projects serve their own 404.html for missing paths, with a 404 status.</p>
<p>Every page that nginx generates itself (errors, denied clients, unreachable upstreams, the default server) is now an Opfield page. Your applications' own error pages pass through unchanged.</p>
<h2 id="git-sources">Git sources</h2>
<ul>
<li>A Git-source container can be rolled back to its previous build from the Source tab, the API or MCP.</li>
<li>A failed build shows the failing Dockerfile step and its exit code, and a source says why a build failed or deployed nothing.</li>
<li>Environment variables, secrets and volumes can be set before the first build, and the first build starts right away.</li>
<li>The build security policy can block only vulnerabilities that have a fix, either for application packages or for all packages.</li>
</ul>
<h2 id="also-in-this-release">Also in this release</h2>
<p>Routes behind Cloudflare see the real client IP in access lists, rate limits and logs. Managed Postgres runs on Opfield's own images, and PostGIS and pgRouting install on demand from the Extensions tab.</p>
<p>One thing to know before you update: container archives now use the Opfield format (.ofca). Archives exported by earlier releases cannot be imported.</p>
<p>Self-hosted installations update as usual. Managed cloud installations update in their maintenance window.</p>
]]></content:encoded>
      <category>release</category>
    </item>
    <item>
      <title>Opfield Cloud: managed Opfield with email and AI included</title>
      <link>https://opfield.dev/blog/opfield-cloud</link>
      <guid isPermaLink="true">https://opfield.dev/blog/opfield-cloud</guid>
      <pubDate>Sat, 17 Oct 2026 17:59:00 GMT</pubDate>
      <description>We run your Opfield installation for you: a VM in Finland, daily backups, updates in your maintenance window, built-in email, your own domain and an AI add-on with a free tier.</description>
      <content:encoded><![CDATA[<p>Opfield is self-hosted on every plan, and that does not change. But the control plane itself is one more thing to run: a server, backups, updates, a certificate, an email provider for sign-in codes. Opfield Cloud takes that part off your hands. We run your Opfield installation on a VM we operate. Your servers stay yours and join it as nodes.</p>
<h2 id="what-you-get">What you get</h2>
<p>A managed installation is a full Opfield, the same release as self-hosted, at <code>&lt;name&gt;.opfield.cloud</code>. You buy and manage it in the account portal, together with a paid license key (Personal, Business or Enterprise). It is not available with Community.</p>
<ul>
<li><strong>Region:</strong> Finland. Germany is planned.</li>
<li><strong>Sign-in with your Opfield account.</strong> The owner signs in to the installation with the same account they use in the portal.</li>
<li><strong>Daily backups.</strong> A backup runs every day. You can also back up on demand and restore from the portal. After a delete, the newest backup is kept for a few days, so the installation can be brought back.</li>
<li><strong>Updates in your maintenance window.</strong> You choose a day and an hour (UTC). Opfield takes a backup, updates and comes back on the new version. You can also update right away.</li>
<li><strong>Your nodes stay yours.</strong> You enroll your own servers with one-time tokens from the portal. Workloads, databases and storage run on them, not on the managed VM.</li>
</ul>
<h2 id="plans">Plans</h2>
<p>Prices are per month, on top of the license key, and renew together with the key.</p>
<table>
<thead>
<tr>
<th></th>
<th>Standard</th>
<th>Extended</th>
</tr>
</thead>
<tbody>
<tr>
<td>Price</td>
<td>$18/month</td>
<td>$46/month</td>
</tr>
<tr>
<td>vCPU (shared)</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>RAM</td>
<td>3 GB</td>
<td>8 GB</td>
</tr>
<tr>
<td>Disk</td>
<td>24 GB</td>
<td>48 GB</td>
</tr>
<tr>
<td>Backups kept</td>
<td>2</td>
<td>5</td>
</tr>
<tr>
<td>Logs kept</td>
<td>7 days</td>
<td>30 days</td>
</tr>
</tbody>
</table>
<p>Twelve months cost the price of eleven. You can move from Standard to Extended at any time and pay the difference for the rest of the period; Opfield restarts once. A move down takes effect at the end of the paid period.</p>
<h2 id="email-included">Email included</h2>
<p>Opfield sends system emails: sign-in codes, password setup and reset links, invitations. A self-hosted installation needs an SMTP provider for that. A managed installation sends them out of the box, from <code>&lt;name&gt;@mail.opfield.cloud</code>, in both plans and at no extra cost.</p>
<p>The limits are generous for system mail and keep the shared sending reputation clean:</p>
<ul>
<li>Standard: 500 a month, 50 a day, 25 an hour.</li>
<li>Extended: 2,000 a month, 200 a day, 50 an hour.</li>
</ul>
<h2 id="your-own-domain">Your own domain</h2>
<p>The installation can answer on your own domain, for example <code>ops.example.com</code>. Add the domain on the installation's page, create the CNAME record it shows, and Opfield gets a certificate for it. The <code>opfield.cloud</code> address keeps working. Passkeys are tied to the address, so they have to be added again after a change; the page tells you before you switch.</p>
<h2 id="ai-included">AI included</h2>
<p>Opfield has a built-in AI assistant and an MCP server for your own agents. Both need a model. On a managed installation, Opfield Cloud AI is already connected:</p>
<ul>
<li><strong>Free</strong>, with every managed installation: model usage included.</li>
<li><strong>S</strong>, $9/month.</li>
<li><strong>M</strong>, $29/month, with twice the usage of S.</li>
</ul>
<p>There are two models: Opfield Swift for quick everyday work, and Opfield Heavy for longer and harder tasks. Usage is shown as a percentage of each window, with the time the window resets. When a window is used up, the assistant says so and works again once it resets. Nothing else in Opfield stops.</p>
<h2 id="getting-started">Getting started</h2>
<p>In the account portal, turn on &quot;Host it in our cloud&quot; when you buy a key, or choose &quot;Add managed cloud&quot; on the page of a key you already have. After payment the installation is set up automatically, and you get an email when it is ready. Plans and prices are also on the <a href="https://opfield.dev/pricing">pricing page</a>.</p>
]]></content:encoded>
      <category>cloud</category>
      <category>ai</category>
    </item>
    <item>
      <title>Running infrastructure with AI agents through MCP</title>
      <link>https://opfield.dev/blog/ai-agents-mcp</link>
      <guid isPermaLink="true">https://opfield.dev/blog/ai-agents-mcp</guid>
      <pubDate>Sat, 17 Oct 2026 17:58:00 GMT</pubDate>
      <description>How AI agents work with Opfield through its MCP server: scoped OAuth access, the audit log, guards against accidents, Docker tools, and an example of a routine fix.</description>
      <content:encoded><![CDATA[<p>Opfield has an MCP server next to its REST API. Any MCP client, such as a coding agent in your editor or a chat app, can connect to it and work with the same resources a person sees in the interface: routes, containers, managed databases, Pages, alerts and nodes. This post explains how that access stays safe and what a typical session looks like.</p>
<h2 id="the-same-rules-as-for-a-person">The same rules as for a person</h2>
<p>Agents have no separate permission model. An MCP client connects to <code>https://&lt;your-opfield&gt;/api/mcp</code> and signs in with OAuth on behalf of a user. On the consent screen the user picks the scopes the client gets, and those scopes can never go beyond what the user can do. Access limited to folders, nodes or single resources works the same way: an agent with access to one app's folder sees that folder and nothing else. The agent can call <code>get_my_access</code> to see what it was given and where it may create things.</p>
<p>Agents can do nearly everything a person can do with resources. A few things stay in the browser on purpose: impersonation, OAuth consent, creating API tokens or authorizations, and the user's own sign-in and sessions. An agent cannot give itself more access.</p>
<p>The MCP endpoint accepts only OAuth tokens issued for it; REST API tokens do not work there. The user also needs the MCP permission, so an admin decides who may connect agents at all.</p>
<h2 id="everything-lands-in-the-audit-log">Everything lands in the audit log</h2>
<p>Every agent action passes the same checks as a click in the interface and is written to the same audit log, with the user and the token it came from. To see what an agent changed overnight, open the audit log.</p>
<h2 id="guards-against-accidents">Guards against accidents</h2>
<p>Permissions decide what an agent may do. Some mistakes happen inside those permissions, so Opfield adds guards:</p>
<ul>
<li><strong>Console guard.</strong> Agents can run commands in a node console as root, which lets them repair a node. Docker, containerd and Podman are masked there, and a Docker command is refused with the name of the Opfield tool to use instead. This is an accident guard, not a security boundary: it keeps an agent from changing a managed container behind Opfield's back.</li>
<li><strong>No SSH into nodes.</strong> Agents cannot run commands over SSH on hosts that are Opfield nodes. They use the node console, which has the guard.</li>
<li><strong>Changes outside Opfield are visible.</strong> If a managed container is stopped, changed or removed by hand anyway, the built-in alert &quot;Container changed outside Opfield&quot; fires.</li>
<li><strong>Safe retries.</strong> Create operations accept an idempotency key, so an agent that retries after a timeout does not create a duplicate.</li>
</ul>
<h2 id="docker-tools-instead-of-a-shell">Docker tools instead of a shell</h2>
<p>Most agent work on workloads goes through dedicated tools rather than shell commands: list containers across all Docker nodes, read logs and stats, restart, update an image, change configuration, manage deployments with slots and rollback, Compose projects, volumes, networks, and Git sources with their builds. Because these are Opfield operations, routes, Secure Links and availability stay consistent after a change, and each step is audited.</p>
<p>Agents can also read Opfield's documentation and skills through MCP before they change anything.</p>
<h2 id="example-a-failing-service">Example: a failing service</h2>
<p>A user asks an agent: &quot;The billing API has returned 502 since this morning. Find out why and fix it.&quot; A typical session:</p>
<ol>
<li><code>find_resource</code> finds the route and the container behind it; <code>get_route</code> shows the upstream.</li>
<li><code>get_docker_container</code> shows that the container keeps restarting and that its Git source deployed a new build at 07:40.</li>
<li><code>get_docker_container_logs</code> shows the process exiting on start because a new required environment variable is missing.</li>
<li>The agent reports this and offers two options: roll back to the previous build, or add the variable.</li>
<li>The user chooses the rollback. The agent calls <code>manage_docker_source</code> with <code>rollback</code>, then checks the logs and the route again: the container is running and the route answers 200. The rollback is in the audit log under the user's name.</li>
</ol>
<p>Nobody needed shell access to the server, and the agent did nothing outside the user's own permissions.</p>
<h2 id="getting-started">Getting started</h2>
<p>Add the MCP server to your client with your Opfield address, sign in and choose the scopes. Start with read-only scopes, watch what the agent does in the audit log, and widen access as you gain confidence. If you would rather not set up a client, the assistant built into Opfield uses the same tools and the same rules.</p>
]]></content:encoded>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
