Skip to content

Architecture Decision Records

ADRs document significant architectural decisions and their context.

Agents

ADRDecision
001 - Background AgentsKubernetes-native agent execution with sandbox isolation
002 - OpenHands Agent SandboxOpenHands as the agent runtime framework
003 - Context ForgeIBM Context Forge as the MCP gateway
004 - Autonomous AgentsDesign for fully autonomous agent workflows
005 - Role-Based MCP AccessRole-based access control for MCP tool servers
006 - OIDC Auth MCP GatewayOAuth 2.1 / OIDC authentication for remote MCP access
007 - Agent Run Orchestration ServiceDedicated service for dispatching and tracking agent job runs
008 - Cluster Patrol Loop ResilienceCrash recovery and per-sweep supervision for cluster_agents loops
009 - Automated Test Generation BotsAgent-driven test generation pipeline
010 - Recipe-Driven Agent RegistryGoose recipe YAML as the source of truth for agent definitions
011 - Agent MCP v1 Follow-onsDeferred self-improvement loop scope after v1 MCP surface shipped
011 - Cloudflare Managed OAuthCloudflare-managed OAuth for the MCP gateway (duplicate number)
012 - Knowledge Gardener Model PipelineTwo-tier model pipeline for the knowledge gardener
013 - Knowledge Gardener Gemma4-OnlySingle-model pipeline replacement for the gardener
014 - AX + Substrate Agent RuntimeSplit-roles adoption of google/ax + agent-substrate, retiring orchestrator + cluster_agents
015 - Temporal as Orchestration SubstrateAdopt Temporal for workflow execution + scheduling; supersedes ADR 014
016 - NATS as Canonical Event StreamNATS JetStream as the system-wide event bus between independently-owned components
017 - Domain Event SchemaEvent envelope schema + tombstone semantics across the system

Docs

ADRDecision
001 - Static Docs SiteVitePress for architecture documentation

Networking

ADRDecision
001 - Cloudflare Envoy GatewayCloudflare Tunnel + Envoy Gateway for ingress

Platform

ADRDecision
001 - Obsidian Vault Monolith MigrationMigrate Obsidian vault into the monolith on TigerFS
002 - CDN-Cached Data FetchingPublic JSON endpoints cache at the Cloudflare edge; clients poll cached
003 - CDN Cache Rule Scoped to public.jomcgi.devScope CDN cache rule to public.jomcgi.dev (supersedes 002 partially)
004 - Iceberg-on-SeaweedFS Lakehouse with Hot-Swap Quack ServingEvent-sourced lakehouse; NATS → Iceberg → Quack hot-swap; partially evolves 001

Security

ADRDecision
001 - Bazel SemgrepSemgrep SAST integrated via Bazel rules
002 - Semgrep Rule Generation via RLRL-finetuned Qwen 3.5 9B for generating Semgrep rules from CVEs
003 - gVisor RuntimeClassUser-space kernel isolation for agent sandbox pods via runsc

Services

ADRDecision
001 - Discord History BackfillOne-time backfill of Discord channel history into pgvector
002 - Discord Chat AutomationScheduling, triggers, and proactive posting for the Discord bot

Tooling

ADRDecision
001 - OCI Tool DistributionMulti-arch OCI image for developer tools, eliminating local Bazel
002 - Service Deployment ToolingCopier template to scaffold new services, eliminating per-service boilerplate
003 - Spec-First CLI and SkillsOpenAPI as source of truth; CLI commands and Claude skills are derived