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.