Repository navigation
v0.20.0
Forge v0.20.0 — The multimodal release
150 commits since v0.19.0 (2026-08-21). Forge gains end-to-end image and PDF support across input and output, two new native providers (Gemini and AWS Bedrock), a layered settings system with a model gateway, and a configurable output-token limit.
✨ Highlights
Multimodal input & output (#255)
Forge can now send images and PDFs to models and render images generated by them, across the whole pipeline — transport, LLM clients, persistence, and UI.
- Image input to vision-capable models — #531
- PDF document input to document-capable models — #534, plus OpenAI PDF via the Responses
input_filepath — #560 - Model-generated image output via OpenAI Responses — #536
ChatMessage.Partsmultimodal content model + history references (MediaRef,json:"-"bytes to keep history lean) — #528- Inbound media persistence for cross-turn replay (content-addressed
.forge/files/{inbound,generated}/<sha256>) — #535 - DoS controls: per-part/aggregate media limits, inbound body cap raised to 32 MiB on both transports — #532
- Loud rejection of media parts on models that can't accept them (no silent drops) — #527
- UI: image/PDF upload + in-chat media rendering + multimodal docs — #538
- Init/UX: image-generation toggle in the
forge initTUI and web create form — #551; skill-builder support for model-native image-generation skills — #549
New native providers
- Native AWS Bedrock Converse provider — #461 (#205)
- Native Gemini provider — text/vision/PDF input + image generation, plus
GEMINI_BASE_URLoverride — #550, #555
Configurable output-token limit
model.max_tokensis now configurable, provider-aware:max_completion_tokenson api.openai.com,max_tokenson compat hosts — #556
🧩 Layered settings & model gateway
- Layered forge settings surface with
models.default/ gateway consumer — #456 - Channels gated on
settings.channels.enabled— #458;forge init+ builtin-tool offering wired to settings — #459; skills setting + interactive-wizard filtering — #460; pre-selectmodels.defaultin the init wizard — #462 - Local-dev model-gateway
api_key_helperoverlay + login gate — #464 - Native OIDC token acquisition (client_credentials + auth_code), reusing the audited
oauth.Flow— #520 - Path-aware OAuth discovery (RFC 8414 §3.1 / RFC 9728 §3.1) — #521
- Surface optimizer gated behind settings; explicit upstream forwarding from
start; optimizerstopno longer restores its own dead URL — #522, #523, #540
🖥️ CLI & surface
- Interactive
forgesurface — bareforgebuilder + Claude Code launcher — #477 - AI agent builder in the UI with global OAuth/gateway auth — #468
- Generate
initializ-deploy.yamlfrom the forge surface (all agent types) — #513 - Standalone
forge mcp login --urlandforge mcp test --url(no forge.yaml needed) — #518, #524 - Context-compression + memory optimizer for Claude Code — #466
📣 Channels
- WhatsApp channel via WhatsApp Web (whatsmeow) — #452
- Channel invoker identity emitted in
auth_verify— #525 - Slack: only answer thread replies in threads the bot participates in — #552
🔧 Governed API tools & skills
- Governed API tools support apiKey header/query auth — #494
- Skill-builder calls the governed operation instead of scripting it — #496
- Dedup skill discovery when
skills.pathpoints insideskills/— #512
🔐 Identity, auth & security
- Agentic identity: per-agent workload token on platform callouts, agentic-identity fields on PDP + audit, RFC 8725 token-
typdiscipline (reject cross-use tokens) — #445, #446, #447 tool_class/tool_kindstamped ontool_execfor usage analytics — #514- Resolve genuine low-severity CodeQL baseline findings; CodeQL advanced setup with deterministic all-module build — #483, #485
📊 Observability & usage
- Adopt
gen_ai.*OTel semantic conventions on tool + agent spans — #422 - Stop OTLP exporter egress from flooding the audit stream — #425
- Capture Anthropic input + cache tokens on the streaming path; emit
total_input_tokens; stamp prompt-cache token attributes on the LLM span — #432, #448, #443 - Per-invocation seq on MCP tool-call/result audit events — #420
- Responses SSE dispatch on payload type, not just
event:line — #435
🛠️ Toolchain & infra
- Raise workspace to Go 1.26 (unblocks 7 dependency PRs) — #548
- Dependabot config with OpenTelemetry + kubernetes grouping — #495, #509
- Fix flaky server-readiness wait (port auto-increment race) — #529
- Routine dependency bumps (grpc, otel, glamour, sqlite, jcs, compress, …)
Upgrade: brew upgrade initializ/tap/forge once the release is published.