{
  "video": {
    "id": "4uFVSLgD2Q4",
    "title": "Agents in Production: How OpenGov Built and Scaled OG Assist - Gabe De Mesa, OpenGov",
    "duration": 1110,
    "upload_date": null,
    "channel": "AI Engineer",
    "source": "AI Engineer",
    "event_format": "Online"
  },
  "analysis": {
    "video_id": "4uFVSLgD2Q4",
    "title": "Agents in Production: How OpenGov Built and Scaled OG Assist - Gabe De Mesa, OpenGov",
    "one_liner": "OpenGov's AI agents team rebuilt OG Assist — the assistant button sitting in the nav bar of every OpenGov government-ERP product — off LangGraph and onto their own Effect-native agent loop, and walks through the production machinery around it: A2A-shaped agent routes, CI evals against real completions, human approval on mutating tool calls, ephemeral sandboxes, rolling-summary long context and out-of-the-box tracing.",
    "summary": "Gabe De Mesa explains how OpenGov, an ERP vendor for government (budgeting, procurement, asset management, permitting), ships agents to production through OG Assist, a button in the navigation bar of all its products that every product team extends with its own tools and skills. The team's central bet is Effect, the open-source TypeScript library: they left LangGraph once use cases got complex and wrote their own Effect-native agent loop so they'd have full agency over it, inheriting Effect's tracing, structured concurrency, logging and dependency injection (so the language model can be hot-swapped). Around that loop they layer Google's A2A protocol as the front-end/back-end contract, thumbs up/down feedback plus automated evals in CI, deterministic human-approval interrupts, on-demand sandboxes for code and file creation, and rolling summarization for long conversations. He closes on 'tools and skills are all you need' and on using Claude and Cursor internally to accelerate the team's own development.",
    "key_points": [
      "OG Assist is a single button in the nav bar of every OpenGov product; each product suite and product team builds its own tools and skills behind it, so the agent answers suite-specific questions (his demo: rate codes in utility billing) by making tool calls against that suite's data.",
      "The agent has front-end capabilities too — it can see what's on the screen and act on the page, e.g. asked 'what's on the screen, can you highlight some next steps?', it reasons about available tools and highlights a clickable element.",
      "They started on LangGraph; 'that was fine until the team really started to scale and our use cases started to evolve,' so they moved to their own Effect-native agent loop for full control. The basics use the Effect AI package's chat and language model — instantiate a chat, `streamText` with a prompt — with dependency injection letting them swap in a different language model.",
      "Google's A2A protocol is used not for agent-to-agent chat but to define their agent routes, back-end model and schema — the agent card (name, description, etc.) becomes the rigorous contract both front end and back end consume and produce, which drove development and alignment. A2A extensions and A2UI are noted as further options.",
      "Evals and feedback: 'Shipping is the start, not the finish.' A thumbs up / thumbs down mechanism on responses supplies the human signal, and automated evals run in CI against real completions to check whether the prompt hit the expected tools and did what it was supposed to do.",
      "Human-in-the-loop: the agent loop is deterministically interrupted when a tool call requires approval, showing an accept/reject UI — aimed at mutating operations, to build trust and keep humans in the driver's seat.",
      "Sandboxing: agents spin up ephemeral, isolated sandboxes on demand to write code, execute code and create files, torn down at the end; demoed by having the agent generate a downloadable PDF for the AI Engineer Conference 2026.",
      "Long context: rather than always stuffing in the most recent messages, they keep a rolling summary after n messages plus the n-5 or n-10 most recent, and do recall over that summarization — which is where memory comes in, letting the agent answer 'remember that thing we talked about' from a hundred messages back.",
      "Generative UI: a form primitive registered with the agent lets it build a form at runtime — asked for a long essay, it rendered options to choose from on the fly.",
      "Observability: 'You can't scale what you can't see.' Effect functions are automatically tagged with spans that feed traces, so they can drill into function calls, profile where the bottleneck is, and cross-reference failures across services and other teams' APIs.",
      "Internally the team leans on Claude and Cursor and Claude agents to accelerate how they read, write, review and ship code."
    ],
    "takeaways": [
      "If your agent use cases outgrow a framework's abstractions, consider owning the agent loop outright — De Mesa's team traded LangGraph for a hand-rolled Effect loop specifically to get fine-grained control, and got tracing, structured concurrency and logging propagated through the whole loop as a side effect.",
      "Use a published spec like A2A (agent cards, agent routes) as the front-end/back-end contract rather than inventing your own schema — the rigorous spec is what drove alignment between teams.",
      "Run evals in CI against real completions asserting tool hits and expected behaviour, and pair them with an in-product thumbs up/down signal; the combination is what lets them iterate quickly on tools, skills and harness.",
      "Gate mutating tool calls behind a deterministic interrupt with an explicit accept/reject UI, and run any code execution or file creation inside an on-demand, ephemeral sandbox that tears down afterwards.",
      "For long conversations, keep a rolling summary plus a window of the most recent n-5/n-10 messages and do recall over the summary, instead of naively appending the latest messages until you hit token limits.",
      "Build behind a plain tools-and-skills abstraction — define a tool, add it to a toolkit, register the toolkit with the language model — and let each product team contribute its own."
    ],
    "topics": [
      "agents",
      "production",
      "effect",
      "typescript",
      "evals",
      "observability",
      "sandboxing",
      "long-context"
    ],
    "tools": [
      "OpenGov",
      "OG Assist",
      "Effect",
      "Effect AI package",
      "TypeScript",
      "Zod",
      "LangGraph",
      "A2A (agent-to-agent protocol, Google)",
      "A2UI",
      "Claude",
      "Claude agents",
      "Cursor"
    ],
    "quotes": [
      {
        "text": "Shipping is the start, not the finish.",
        "at": "09:18",
        "url": "https://www.youtube.com/watch?v=4uFVSLgD2Q4&t=558s"
      },
      {
        "text": "deterministically interrupt the agent loop if there is a tool call approval required",
        "at": "10:35",
        "url": "https://www.youtube.com/watch?v=4uFVSLgD2Q4&t=635s"
      },
      {
        "text": "You can't scale what you can't see.",
        "at": "14:53",
        "url": "https://www.youtube.com/watch?v=4uFVSLgD2Q4&t=893s"
      },
      {
        "text": "we believe that tools and skills are really all you need",
        "at": "16:26",
        "url": "https://www.youtube.com/watch?v=4uFVSLgD2Q4&t=986s"
      }
    ],
    "words": 3514
  },
  "summary_url": "/#4uFVSLgD2Q4",
  "transcript": {
    "html": "/transcripts/4uFVSLgD2Q4.html",
    "txt": "/transcripts/4uFVSLgD2Q4.txt",
    "vtt": "/transcripts/4uFVSLgD2Q4.vtt"
  }
}