Skip to content

v0.20.0

Choose a tag to compare

@initializ-mk initializ-mk released this 05 Nov 00:21
· 1 commit to main since this release
2b4985c

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_file path — #560
  • Model-generated image output via OpenAI Responses — #536
  • ChatMessage.Parts multimodal 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 init TUI 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_URL override — #550, #555

Configurable output-token limit

  • model.max_tokens is now configurable, provider-aware: max_completion_tokens on api.openai.com, max_tokens on 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-select models.default in the init wizard — #462
  • Local-dev model-gateway api_key_helper overlay + 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; optimizer stop no longer restores its own dead URL — #522, #523, #540

🖥️ CLI & surface

  • Interactive forge surface — bare forge builder + Claude Code launcher — #477
  • AI agent builder in the UI with global OAuth/gateway auth — #468
  • Generate initializ-deploy.yaml from the forge surface (all agent types) — #513
  • Standalone forge mcp login --url and forge 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.path points inside skills/ — #512

🔐 Identity, auth & security

  • Agentic identity: per-agent workload token on platform callouts, agentic-identity fields on PDP + audit, RFC 8725 token-typ discipline (reject cross-use tokens) — #445, #446, #447
  • tool_class / tool_kind stamped on tool_exec for 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.