DEVLOG

What we ship. Why we ship it.

A running log of decisions, releases, and architecture notes from building Forge.

Designing Forge Pages with AI

SingleInstance and Standalone - two routing options that were missing

"The loop: from conversation to scheduled post"

"How the Forge + Claude setup creates a complete end-to-end developer pipeline from conversation to scheduled social posts - and why the humans are still in the loop at every step."

Who published that? Forge now ships an opt-in audit trail

forge v1.22.0 adds App.Audit — a single call that records every publication state transition to a SQL table and exposes it via GET /_audit.

Multi-agent coordination via content lifecycle

Most orchestration frameworks require an upfront workflow definition. Forge takes a different approach: agents coordinate through content state transitions. No central orchestrator. No graph. Just a signal bus and a state machine.

Typed persistent state for AI agents, in Go

Most agent frameworks are workflow engines. Forge is the state layer those engines operate on: typed, persistent, lifecycle-aware, and exposed via MCP. Here is why that distinction matters.

forge-agent: scheduled and reactive agent jobs in your Forge app

forge-agent adds an embedded agent runtime to Forge. Agent jobs trigger on content lifecycle signals or cron schedules, and are themselves managed as Forge content, with full lifecycle control via MCP.

DB-driven platform config in forge-social

forge-social v0.5.0 moves OAuth app credentials out of environment variables and into the database. One MCP call sets up a platform. No server access required.

X support in forge-social

forge-social v0.5.0 adds X as a third platform. OAuth 2.0 PKCE, 280-character enforcement, automatic token refresh, and image upload in v0.6.0.

Media uploads from anywhere

forge-media v1.2.0 adds a short-lived upload token so agents and browsers can upload files directly without exposing your admin token. The CLI gets direct media commands in the same release.

Draft preview

Share a draft with a client or reviewer before it goes live. Forge generates a signed, time-limited URL that bypasses the published-only filter for that one slug.

Set it and forget it: the slot-queue model in forge-social

forge-social's AddRoutes: a concrete example of what the signal bus enables

Forge's signal bus is a general extension point. forge-social's AddRoutes is one concrete thing you can build on top of it — outbound HTTP delivery to AI agents.

forge-social: scheduling social posts from your Forge CMS

forge-social adds social post scheduling directly to your Forge application — no third-party queue, no Zapier. Here's how it works.

From webhooks to a signal bus

Forge v1.20.0 ships a signal bus. Your application code can now subscribe to any lifecycle signal with one call. Webhooks are a subscriber. So is your audit log, your cache, your SSE hub.

Outbound webhooks and MCP subscriptions

Forge's internal Signals were always there — but nothing outside could react. M11 adds two complementary delivery mechanisms on top of the same Signal: outbound webhooks for pipelines and integrations, MCP subscriptions for agents.

First start

Bootstrap token, static file serving, forge-cli init, and a security fix. What Phase 2 actually shipped.

Iron & Ember

Ember is what stays hot after the fire. Not the flame itself, but the warmth that persists.

Two audiences, one architecture

Building for AI agents sounds like it should add complexity for human developers. Forge went the other way -- the decisions that make it good for developers are exactly the decisions that make it work for agents.

Forge CLI: terminal access to a running instance

forge-cli is the operator tool -- terminal access to a running Forge instance without opening a browser. The agent has MCP. The operator has the CLI. Same access model, different interface.

Typed MCP tools from a Go struct

forge-mcp generates a complete set of typed MCP tools from every content type you register. This is the operations layer -- the complement to the AI reading formats described in D1.

Three lines and your agent handles files

forge-media adds file management to Forge in three lines. Alt text is enforced at the upload boundary from every source -- which means images are correctly labelled across all four delivery channels automatically.

Zero dependencies: what it means and why it matters

Forge has no third-party Go dependencies. Pure stdlib. The stability this creates is not just philosophical -- it has direct consequences for every delivery channel your content serves.

Template infrastructure: partials, assets, and per-request context

App.Partials, HeadAssets, and ContextFunc are the three mechanisms that make it possible to deliver consistent output to all four audiences from a single content definition.

Markdown and trusted HTML in Forge templates

forge_markdown and forge_html are two template functions that cover different rendering needs. The same content pipeline feeds your browser output, your API responses, and your AI-readable formats.

How your AI agent understands your content

forge_description and forge_format are struct tags that bake field semantics directly into the MCP schema. The agent knows what each field means and what format it expects -- without a system prompt.

Four audiences, one framework

Most frameworks serve two audiences: browser and API. Forge serves four. The reading layer and the operations layer are complementary -- and that is what makes Forge AI-native rather than AI-compatible.

Anthropic described the right way to build MCP servers. Here's how Forge got there first.

Anthropic published their recommendations for production-ready MCP servers. Forge implements every single one -- remote transport, intent-grouped tools, field semantics, and standardised auth. The spec caught up to the problem.

How Forge wires modules in three lines

Define a struct, embed forge.Node, call app.Content — Forge handles routing, storage, feeds, and AI indexing automatically.