Component

Nemo — Orchestration

Next-gen codification engine. Plans once with an LLM, serializes the plan to deterministic steps, and replays them without any AI calls on subsequent runs. Faster, cheaper, more reliable.

tinyfish-io/web-agent

Tech Stack

Packagetf-nemo (Python ≥ 3.12)
OrchestrationLangGraph state machine
PlanningGemini 3 Flash + Claude Sonnet
ElementsAgentQL (get_by_prompt → XPath)
StoreDatabricks Lakebase

The Big Idea: Codification

First run: LLM generates a plan — each step is codified into deterministic, XPath-based actions
Serialization: Plan saved as codified_steps.json — a fully deterministic recipe
Subsequent runs: Replay without any LLM calls — just execute the codified steps directly
Validation: Validated plans cached in Nemo Store (Databricks Lakebase) for reuse

10 Step Types

StepCodification Method
linear-stepLLM planning loop (Gemini + Claude)
click-stepAgentQL → XPath
navigate-stepSelf-codifying
enter-text-stepAgentQL → XPath
extract-data-stepLLM schema inference
scroll-stepAgentQL → XPath
select-option-stepAgentQL → XPath
transform-data-stepLLM code generation
do-until-stepPre-codified only
if-conditional-stepPre-codified only

Nemo Service (FastAPI)

POST /stream-run

Primary SSE endpoint — EVA calls this when routing to Nemo as primary orchestrator.

POST /enqueue-run

Fire-and-forget background run for shadow data collection alongside EVA.

POST /store/lookup

Check Nemo Store (Databricks) for an existing codified plan before deciding the orchestration path.

Code Pointers

web-agent-core/src/nemo/agent.pyWebAgent (main entry point)
web-agent-core/src/web_agent_core/graph.pyLangGraph state machine builder
web-agent-core/src/web_agent_core/stepsAll 10 step types + codifiers
web-agent-core/src/web_agent_core/steps/linearLinearStepCodifier (planning loop)
nemo-service/nemo_service/nemo_store.pyDatabricks Lakebase client