Building Alex: An Agent-First AI Engineering Assistant with Production-Grade LLMOps

alyx · Tech · 2026 · source Agentic: yes · promotional bias: low · source-backed · extracted with prompt 0.5.4 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: AI engineering assistant inside an observability platform

Arize needed Alex, an AI engineering agent, to stay on task across complex workflows, manage very large trace/eval/playground data without context overflow, test non-deterministic behavior in CI, and debug production agent failures using observability data.

Constraints:

Architecture

Alex uses a structured planning toolset with persisted to-do state, an in-progress pointer, finish-gate errors, and plan reinjection on every LLM call. For large data, it stores full JSON server-side, gives the model previews and IDs, and exposes jq/grep-style tools with hard output budgets. For quality, it turns production traces into golden examples, runs decision-point and trajectory tests in CI, uses LLM judges, and exposes traces/evals/feedback as agent skills for debugging.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  user[User] --> alex-agent[Alex Agent]
  alex-agent --> planning-tools[Planning Tools]
  planning-tools --> plan-store[Plan Store]
  planning-tools --> finish-gate[Finish Gate]
  plan-store --> alex-agent
  alex-agent --> large-json-store[Large JSON Store]
  large-json-store --> composable-data-tools[Composable Data Tools]
  composable-data-tools --> alex-agent
  alex-agent --> production-trace-corpus[Production Trace Corpus]
  production-trace-corpus --> ci-evaluation-harness[CI Evaluation Harness]
  ci-evaluation-harness --> llm-judge[LLM Judge]
  production-trace-corpus --> observability-skills[Observability Skills]
  observability-skills --> alex-agent
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
User AI engineer asking Alex to inspect traces, evals, sessions, playgrounds, or failures. Alex Agent
Alex Agent Agent-first engineering assistant with tool calls, skills, memory, and observability context. User, Planning Tools, Plan Store, Large JSON Store, Composable Data Tools, Production Trace Corpus, Observability Skills
Planning Tools to-do write, update, and read tools that create plans and mutate task state. Alex Agent, Plan Store, Finish Gate
Plan Store Plan state kept outside conversation history and reinjected into every LLM call. Planning Tools, Alex Agent
Finish Gate Structured error that prevents early finish when plan items remain incomplete. Planning Tools
Large JSON Store Server-side storage for full large datasets with previews and IDs for the model. Alex Agent, Composable Data Tools
Composable Data Tools jq and grep-JSON tools for querying, slicing, filtering, and transforming large data under output budgets. Large JSON Store, Alex Agent
Production Trace Corpus Real production sessions used as golden examples and replay inputs. Alex Agent, CI Evaluation Harness, Observability Skills
CI Evaluation Harness Decision-point and trajectory tests, including LLM judges, run in CI on prompt/tool changes. Production Trace Corpus, LLM Judge
LLM Judge Scores trajectory-level agent behavior against golden traces. CI Evaluation Harness
Observability Skills Agent-facing access to traces, evals, feedback, CLIs, and telemetry for debugging. Alex Agent, Production Trace Corpus

Data flow

A user asks Alex to inspect traces, evals, or playground behavior; Alex writes and updates a persisted plan, injects that plan into every LLM call, uses tools and large-JSON references to query data incrementally, records production traces, replays golden traces in CI, and gives the agent observability skills so it can investigate runtime failures.

3 supporting quotes
“This actually has context about all of your traces. It has context about your evals. It understands your sessions.”transcript, stated
“it has a whole harness underneath it that does planning, has access to tool calls and skills, and then memory that's used across the sessions that people do with Alex. We built tools to basically help people build AI systems and we thought, you know, we should probably”transcript, stated
“working for us is that we have to reinject the plan into the context window on every single LLM call. What this did is that it dynamically generated, you know, what the state was.”transcript, stated

Why this architecture

The architecture treats planning, data access, tests, and debugging as first-class runtime systems because prompts alone could not keep the agent focused, context-safe, testable, or able to inspect production behavior.

3 supporting quotes
“big critical architectural decision. The plan is not stored in the conversation history. So, how many of you guys have an agent? You have the human conversation where you're actually interacting with the end user, and then you also have your plan. Well, what”transcript, stated
“when a tool returns a really large data set, basically our agent Alex doesn't just put all of that inside the context.”transcript, stated
“doesn't you know, run in CI and you you just can't build a real production agent with vibe checks. And so this is something that we it was probably one of our biggest key insight, which is don't write expected inputs by hand. So, you might know what you want your agent”transcript, stated

Models used: LLMs · LLM judge · Claude Code Review

Scale

Alternatives considered (roads not taken)

Store the plan inside conversation history.

Rejected because: The plan conflicts with user messages and can get buried or truncated.

“what happens is that it's conflicting because the agents now has the user messaging, it has the plan, and it can get buried or it can get truncated.”transcript, stated

Dump large trace/eval JSON into the context window.

Rejected because: That causes context overflow and hides the data structure the agent needs for useful queries.

“code base. They don't just dump the entire file into the context window. They read a preview. They use grep to actually find what they need. They read just specific lines. I threw the screenshot because it shows like plus 90 lines. Um and what's important about”transcript, stated
“that did was actually it showed the agent just a few complete rows, but with no idea about the actual structure of that data. So, what we decided to do was actually, how do we compress the actual value um but not the structure so that the agent understands what the entire”transcript, stated

Hand-write expected inputs for tests.

Rejected because: Production traces better represent what good behavior actually looks like.

“our biggest key insight, which is don't write expected inputs by hand. So, you might know what you want your agent to actually say or respond with, but just let production actually tell you what good looks like. When a user has a”transcript, stated
“just let production actually tell you what good looks like. When a user has a really good session, then you know, when when Alex actually does the right thing, we literally just take that session and we're we're like, "You're a golden”transcript, stated

Patterns

agent-memory (planning)

Alex stores plans outside the conversation and reinjects state into every LLM call so the agent has a persistent working pointer.

“this is because when you have only pending and completed, the agent doesn't actually have any working pointer.”transcript, stated
“we actually added this in progress that gave the agent a really concrete anchor.”transcript, stated

context-compaction (context)

Large JSON stores full data server-side, gives the model a structural preview, and uses tools to retrieve only needed slices.

“It stores the full data server-side memory, and then it just gives the LLM a preview.”transcript, stated
“it now it compresses the values inside the JSON JSON, um but not the structure.”transcript, stated

tool-use-orchestration (agent-tools)

Alex exposes jq, grep JSON, planning, trace, eval, and observability tools as composable skills.

“So, the agent can now write JQ expressions to slice, filter, aggregate, transform the data.”transcript, stated
“All of this is accessible via our CLI, um also as our skills, and essentially that's the bridge”transcript, implied

llm-as-judge (evaluation)

Trajectory-level tests replay production traces and score whole-agent behavior with an LLM judge.

“we would score the output of those results with an LLM judge.”transcript, stated
“LLM as a judge was a really good way for us to do this.”transcript, stated

observability-tracing (debugging)

Alex uses production traces, evals, feedback, CLIs, and observability telemetry as debugging inputs.

“The thesis is give your agent access to your observability telemetry stack.”transcript, stated
“It has access to the traces, it has access to the evals that are running on the production traces, it has access to the feedback.”transcript, stated

Tradeoffs

Plan storage

Chose Plan outside conversation history, reinjected every call over Plan embedded in the chat transcript.

Rationale: The plan stays visible and is not buried by user messages or tool history.

“the to-do list can live outside of the context, it lives on the disk.”transcript, stated
“no matter how deep the agent actually got, the plan was always right up front and center.”transcript, stated

Large data access

Chose Reference-plus-preview with jq/grep tools over Full dataset in context.

Rationale: The agent can query unlimited underlying data while each tool call uses predictable context.

“no matter how large the actual underlying data was, each query actually cost a predictable amount of context.”transcript, stated

Test data source

Chose Production traces as golden examples over Hand-written expected inputs.

Rationale: Real sessions capture tool order, LLM behavior, and user intent better than synthetic test fixtures.

“those traces actually give you everything. It's what the LM did, it's what tool calls were called, uh, in what order”transcript, stated

Gotchas (what bit them)

Agents without an in-progress state lose focus mid-task.

Root cause: Pending/completed states do not tell the agent what it is doing right now.

Resolution: Add an in-progress state and reinject the current plan before noisy tool history.

“It doesn't even know what it's doing right now.”transcript, stated
“we put it right after the system prompt and before all of the entire noisy tool call history.”transcript, stated

Previewing only the first rows of large JSON hides schema structure.

Root cause: Rows can be token-heavy and may not represent the full JSON shape.

Resolution: Compress values but preserve the full structure so the agent can query correctly.

“what that did was actually it showed the agent just a few complete rows, but with no idea about the actual structure”transcript, stated
“every field, every key, every array element um that appears in that preview”transcript, stated

Unit tests and stubs can miss production tool-call failures.

Root cause: Renaming a tool call produced a runtime failure invisible to stubbed/unit tests.

Resolution: Replay production traces through the real orchestrator in CI.

“when that tool call got renamed, the agent basically tried to call a function that didn't exist”transcript, stated
“completely invisible if you're just using like unit tests or if you're stubbing data.”transcript, stated

Coding agents cannot debug non-deterministic agents from code alone.

Root cause: The important behavior lives in traces because each agent decision can vary at runtime.

Resolution: Give the agent trace, eval, feedback, and telemetry access through skills/CLI.

“A coding agent can't just look at your code and see what happened. The coding agent actually needs access to these traces”transcript, stated

Evaluation

Alex uses production traces as ground truth, decision-point pytest checks for specific agent decisions, trajectory-level tests scored by LLM judges, and live CI experiments on prompt/tool changes.

Metrics: Task completion rate · Decision-point correctness · Trajectory success · Tool-call runtime failures · LLM judge score

3 supporting quotes
“adding this in progress was something that drastically improved task completion rates.”transcript, stated
“The first level of testing, we called this like decision point tests.”transcript, stated
“trajectory-level tests. This is where you're measuring did the agent accomplish the task in front of it.”transcript, stated

Outcomes

Alex uses 100-character value truncation in large-JSON previews, 10,000-character tool-output budgets, production traces as CI replay inputs, and live CI experiments for prompt and tool changes.

“what this did was basically enable us to manage infinite amount of context.”transcript, stated
“Claude code review actually now runs on every single PR with those validation rules.”transcript, stated