2026 / Enterprise AI / Platform
MOVE
A governed enterprise AI copilot that turns natural-language questions into scoped, traceable answers across approved CRM and document sources.

- Role
- Lead developer, Software and AI Engineering Intern
- Stack
- Python / MLflow ResponsesAgent / LangGraph / Databricks / SQLGlot / FastAPI / React / TypeScript / Lakebase
- 79.2%
- direct SQL latency reduction
- dated audit, failure to correct result
- 14 → 3
- tool calls
- same request, corrected grain
- 1,200+
- named tests
- agent and interface source snapshot
Why MOVE exists
Enterprise questions are rarely just language tasks. They carry customer scope, business definitions, permission boundaries, freshness requirements, and presentation needs. MOVE was built so a useful answer must also be scoped, inspectable, and grounded in approved evidence.
Relationship managers can ask about a portfolio, a specific customer, or an approved document in natural language. The system returns structured answers, tables, metrics, charts, citations, and a trace of the work used to support them.
The operating boundary
- Read-only access through registered tools and governed data services.
- Request-scoped identity and portfolio filters applied before execution.
- No general-knowledge completion when the required evidence is missing.
- No write authority, outbound action, or hidden customer-row persistence.
- Conversation state remains disabled in tracked targets until identity and Lakebase prerequisites are ready.
What I built
- The MLflow ResponsesAgent and LangGraph orchestration path, including routing, context assembly, skill composition, tool selection, evidence checks, and final review.
- A governed text-to-SQL path with scoped metadata retrieval, deterministic templates, bounded generation, SQLGlot validation, and execution telemetry.
- A versioned Python response contract and the FastAPI adapter that converts it into resilient streaming UI events.
- React renderers for answer blocks, metrics, tables, charts, citations, tool activity, feedback, and follow-up questions.
- Databricks packaging, deployment configuration, MLflow tracing, evaluation harnesses, and broad backend and interface test coverage.
Measured iteration
A dated dynamic-SQL audit isolated model generation as the dominant bottleneck. The original representative request failed after four attempts and 122.9 seconds. A smaller grain-aware schema pack, clearer metric ownership, semantic invariants, and bounded retry reduced the path to one successful attempt and 25.6 seconds.
A faster model candidate completed sooner but returned the wrong rows and metric mappings. I kept the slower model because execution correctness, scope preservation, and business semantics mattered more than an attractive latency number.
Limits, stated plainly
- The published timings are audit scenarios, not production service-level claims.
- The interface screenshots use fictional, anonymized values passed through the real renderer.
- Skill guidance can narrow behavior but cannot override the tool registry or execution policy.
- Only successful normalized evidence can support an answer or a future state fact.
System architecture
A controlled path from question to evidence.
MOVE is one product across two runtimes. The interface owns authentication, streaming, persistence, and feedback. The agent runtime owns scope, orchestration, governed execution, evidence, and review.

Agent-side conversational state is prepared but disabled in tracked targets.
Agentic, with hard edges.
The model can decide how to solve a question inside a deliberately small envelope. Authority remains in code at every stage.
- 01
Validate and bind
Reject malformed requests, resolve trusted identity, and bind the user to an allowed portfolio scope.
- 02
Classify the question
Infer the business domain, requested entity, analytical grain, and evidence sources before any tool is offered.
- 03
Resolve skills
Load at most four focused instruction packs. Skills can narrow behavior but cannot expand execution authority.
- 04
Select tools
Expose at most six route-compatible capabilities from the governed registry instead of giving the model the entire surface.
- 05
Assemble context
Prioritize policy, identity, route, and current-user facts. Lower-authority context is dropped first when budgets tighten.
- 06
Execute safely
Enforce read-only policy, timeouts, request budgets, output limits, redaction, and stable tool failures at one boundary.
- 07
Measure evidence
Normalize successful results, citations, scope, and coverage. Failed calls never become supporting evidence.
- 08
Review and stream
Permit one scoped repair, then stream typed answer blocks and renderables through the versioned response contract.
Correctness won the model decision.
The SQL path combines scoped metadata retrieval, trusted templates, bounded generation, SQLGlot validation, bind parameters, and a maximum of two attempts. A July 2026 audit made each change measurable.
Four attempts. No usable result.
One attempt. Ten correct rows.
- 63,621 → 16,912
- prompt characters
- 14 → 3
- full-agent tool calls
- 79.2%
- direct path reduction
- Baseline122.9 sfour attempts, failed
- Bounded retry79.1 stwo attempts, failed
- Intent routing46.4 sone attempt, empty
- Schema pack46.5 scorrect result
- Metric ownership33.4 scorrect result
- Concise prompt25.6 scorrect result
One row, wrong metric mappings
RejectedA lower latency number was not a win. Semantic correctness, entity grain, and business meaning were explicit evaluation criteria.
Ten correct rows and mappings
Kept for correctnessAll values above come from a dated development audit. They describe one controlled scenario, not a production latency guarantee.
Reasoning and presentation stay separate.
A versioned contract lets Python evolve independently from the TypeScript renderer. The interface receives meaning, not a blob of model-authored markup.
- answer blocks
- renderables
- citations
- tool calls
- safety + usage

Failure-tolerant by design
Each block has a stable type and each renderable is referenced by identifier. An unsupported chart does not invalidate the answer, and a partial stream can still preserve the evidence already received.
- Structured answers remain accessible without a chart.
- Tool traces use public summaries, not hidden reasoning.
- Citations, metrics, and tables keep their source context.
Breadth, deliberately bounded.
- 29
- registered capabilities
- Inspected runtime snapshot
- ≤ 6
- tools exposed per route
- Selected from compatible capabilities
- ≤ 4
- skills resolved
- Focused guidance, never more authority
- 2
- SQL generation attempts
- A hard execution budget
- 1
- scoped final repair
- No open-ended self-correction loop
- 1,200+
- named test definitions
- Agent and interface source snapshot
What MOVE deliberately does not claim
It is read-only. It cannot send messages, update customer records, or use unsupported general knowledge to fill an evidence gap.
Agent memory is not presented as live. Its rollout depends on trusted identity, governed Lakebase access, integrity protection, and retention readiness.
Registered tools and the safe executor remain the authority. Prompts and skills cannot override their policy, budgets, or redaction.