OpenGov moved from LangGraph to an Effect-TS agent loop to gain control over complex use cases, tracing, logging, and concurrency.
2
OG Assist combines customer feedback, automated evaluations, human approval, sandboxing, and rolling summaries to operate safely across OpenGov's products.
3
OpenGov builds tools and skills for customer workflows and uses Claude and Cursor internally to speed up reading, writing, reviewing, and shipping code.
Summary
Gabe De Mesa explains how OpenGov built OG Assist, an agent available across its ERP products for budgeting, procurement, asset management, permitting, and other government workflows. Product teams contribute tools and skills, while the agent can work with both backend data and the visible product interface. The team replaced LangGraph with an Effect-based agent loop so it could control the loop more closely and use Effect's logging, tracing, structured concurrency, schemas, and error handling. Gabe covers A2A agent cards, thumbs-up and thumbs-down feedback, automated evals in CI, approval screens for mutating actions, and ephemeral sandboxes for code and file operations. For long conversations, OG Assist uses rolling summaries with recent-message windows and recall. Effect also supplies detailed traces for debugging. The talk ends with the team's internal use of Claude and Cursor, alongside its customer-facing agent work.
OG Assist gives every OpenGov product a shared agent entry point
OG Assist is a button in the navigation bar of OpenGov's ERP products, including budgeting, procurement, asset management, and permitting. Each product suite and team contributes tools and skills to it. In a utility-billing example, the agent answers questions about rate codes and calls tools against data in the current product suite. The agent can also inspect the visible page and take actions such as highlighting a next step. This lets OpenGov create product-specific experiences through one shared capability rather than building a separate assistant for each product.
OpenGov chose Effect-TS to control the full agent loop
The Agents team made a large investment in Effect, an open-source TypeScript library with schemas, error handling, logging, and tracing. The team originally used LangGraph, but changed course as the team grew and its use cases became more complex. Its Effect-native loop gives the team direct control over the agent's behavior and lets Effect features run throughout the loop. Gabe describes dependency injection for the language model, which allows the team to swap models, and a chat abstraction that streams text from a prompt.
A2A provides a contract between agent clients and services
OpenGov uses Google's Agent-to-Agent protocol to define agent routes and structure its backend model and schema. An agent card contains information such as an agent's name and description. Gabe says the protocol's strict specification helped the team align frontend and backend development because both sides could consume and produce the same contract. The team can also add extensions such as metadata and A2UI. OpenGov found this useful for keeping agent communication and route definitions consistent.
Feedback and automated evals continue after deployment
The team treats shipping as the beginning of evaluation. OG Assist collects direct customer feedback through thumbs-up and thumbs-down controls, and the team uses that signal to improve responses, tools, skills, and the harness. Its CI also runs automated evals against real completions. These tests check whether a prompt caused the expected tool calls and whether the agent did what it was supposed to do. Gabe describes the combination of user feedback and automated tests as the way the team iterates quickly.
Human approval and sandboxes limit risky agent actions
OG Assist can deterministically interrupt its loop when a tool call requires approval. A user sees an interface with explicit accept and reject controls, which is especially useful for mutating operations. When an agent executes code or creates files, it does so inside an on-demand sandbox. The sandbox is isolated and ephemeral, so the agent can write code, execute it, and create files without direct access to production systems. OpenGov tears the sandbox down after use. Gabe shows a PDF generated in a sandbox and made available for download.
Long conversations caused token-limit problems and overloaded older models with too much context. OpenGov responded with rolling summarization. After a number of messages, the system creates a running summary and keeps only a recent window, such as the latest messages. When a user refers to something discussed much earlier, the memory component can recall information from the summary. This lets the agent answer follow-up questions about earlier parts of a thread without inserting the entire conversation into every request.
The agent can render a form when the conversation needs one
OG Assist supports generative UI through registered primitives. In Gabe's example, a user asks for a long essay and examples of possible subjects. The agent creates a form at runtime with choices the user can select. The interface is rendered during the interaction instead of being fixed in advance. Gabe presents this as a way for the agent to offer the right controls in response to the current request.
Effect traces expose the work inside an agent request
Effect functions receive spans automatically, and those spans feed into traces that show the path through function calls and services. A trace can show an API request moving through an endpoint and handler, report total duration, and help locate a bottleneck. It also lets the team cross-reference failures across services and external APIs. Gabe connects this visibility to the practical work of debugging and maintaining an agent that integrates with other teams and platform capabilities.
Tools and skills support both customer work and developer work
OpenGov builds tools from Effect building blocks, groups them into toolkits, and registers those toolkits with a language model. Gabe illustrates the pattern with a dad-joke tool that an agent can call when asked for pirate jokes. The same general approach powers customer-facing skills across OpenGov's products. Internally, the team uses Claude, Claude agents, and Cursor to read, write, review, and ship code. OpenGov therefore applies agent tools to its own engineering workflow as well as to its products.
"We decided to move over to our own kind of Effect Native Agent Loop to have full regency over this Agent Loop."06:00
Who should watch
You are building an agent that needs approvals, isolated execution, feedback collection, and production debugging.
Your team is considering whether to adopt an agent framework or own the loop in TypeScript, especially with Effect.
You need practical patterns for long conversations, tool registration, generative UI, and internal AI-assisted development.