I learned engineering from broken things.

Ibuildmachinesthatreadtheworld.

Elyes Rayane Melbouci

AI Engineer / Founder of Lirovo / Montreal

scroll down
CN Investment Division/ Montreal
CN Investment Division/ Montreal
  • AI & Machine Learning Engineer
    Jul 2025 — Present

    I architect the agentic systems the investment teams run on. A multi-agent extraction pipeline that turns unstructured documents into structured metrics, and an orchestration layer over 30+ institutional research providers where a single agent run picks its own tools, resolves the question, and answers with citations. Versioned agents, eval gates before release, trace telemetry on every run.

  • Business Intelligence Developer
    May 2024 — Jul 2025

    Built the warehouse-backed reporting the investment and operations teams work from, and automated the catalog sync, lineage and ownership behind it, so a metric meant the same thing in two different reports.

  • IT Technical Support
    Mar 2022 — May 2024

    Two years of escalations, security policy, and the process fixes that stopped the same ticket from coming back a third time. Most of what I know about how production fails, I learned here rather than from a design doc.

Nuvia/ Montreal
  • Founder
    Apr 2025 — Present

    AI consulting for Canadian businesses. I find the two or three workflows where automation pays for itself, then build and deploy them on infrastructure the client owns and can audit.

CISSS de la Montérégie-Est/ Longueuil
  • IT Specialist Level II
    Mar 2021 — Mar 2022

    Infrastructure deployment and level-2 support across a regional health network, where an outage reaches clinical staff in minutes and the rollback plan matters more than the change itself.

Collège de Maisonneuve/ Montreal
  • IT Technician Level I
    Aug 2020 — Jan 2022

    My first job in tech: SLA-bound ticket work, hands-on troubleshooting, and a lot of practice explaining a complicated failure to someone who just wants their machine back.

How I build
01Context

Most of my agent bugs were never model bugs.

Every time an extraction came out wrong and I went looking, the model had done something reasonable with something it should never have been handed. So I spend most of my time on what goes into the window, and very little on the prompt.

Retrieval over 30+ research providers
02Evals

I stopped trusting changes I could not measure.

A demo tells you the happy path works. It tells you nothing about the next forty documents. I build the eval set first now, even when it feels like a detour, because the alternative is editing prompts and hoping.

Eval gate on a versioned extraction agent
03Quiet failures

The expensive failures are the ones nobody sees.

A tool returns something useless, the model works around it, the run finishes clean, and nobody gets paged. That whole class of failure is why I trace every tool call going in and coming out, instead of logging only the ones that throw.

Trace-level observability on every agent run

Systems

Things people depend on at work.

012026

Lirovo

Structured extraction for video

Private beta

A video and a schema in, typed JSON out. Transcription, scene detection, frame dedup, vision, and a temporal knowledge graph, with every value pointing back to the second and the modality it came from. Exposed as an API, an MCP server for agents, and apps.

SOURCE01:1204:3111:07SAMPLED FRAMES210212214216218220TYPED RESULT{ "schema": "meeting-decisions@1", "decisions": [ { "decision": "Ship v2 in Q4", "owner": "Priya", "confidence": 0.94, "evidence": [ { "t": "04:31", "modality": "audio", "quote": "we ship in Q4" }, { "t": "04:38", "modality": "visual", "frame": 214 } ] } ]}

My part: Founder. Architecture, extraction pipeline, API and SDK, the site.

TypeScriptCloudflare WorkersD1PythonMCP
lirovo.ai
022026

Document AI Extraction

Four modules, one metric at the end

In production

Turns an unstructured document into a metric an investment team can act on. The parsing lane reads whatever the file actually holds, text and tables but also charts, images, audio and video, and lands it with a trace of every step. A multi-agent extraction lane runs one versioned agent per metric behind an eval gate, writing results into a staging layer. A desktop cockpit lets the owner of a document correct its metadata. A web app is where a human confirms before anything promotes. Telemetry on every agent run, and nothing promotes on its own.

PIPELINE01PARSEtext, tables, charts, audio, video02EXTRACTagent per metric03REVIEWowner cockpit04CONFIRMhumanEVALRUN LOGparsed4 pages, 2 charts, 1 scan, 1 recordingextractednet_asset_value · conf 0.91eval gate passed12 / 12 casesawaiting owner confirmnothing promotes on its ownPENDINGPROMOTED TO GOLD

My part: Architecture, data model, the extraction agents and their eval harness, release pipeline across three environments.

SnowflakeCortex AgentsPythonReactElectronSPCS

Client system. The names, the internals, and the data stay with the client.

032026

Macro Economics Research Agents

Multi-agent system with security-level access and parallelization

Shipped

Fixed income and currencies research, searchable in one place. A named agent object owns routing and search strategy, the backend executes its tools, and a citation composer links every claim back to the report and the page it came from. One agent run resolves a conversation turn. Runs as a container service beside the warehouse, with a desktop client and trace-level observability over every run.

ONE TURN, ONE AGENT RUNROUTESconversationalmarketconsensuscountingevolution/chat/startjob, then pollingagent:runone run per turncortex threadmemory, per conversationclient-side toolscaller RBAC allow-listsse streamparsed, replayableevent_translatorstep / status / sourcescitation composeronly if sources, no marks/chat/statuspolled to completionthinking flowpaced revealtool_useROLESscoutresearchervalidatorsynthesizerTOOLS CALLED· search_documents· search_all_providers_parallel· find_historical_series30+ PROVIDERS, ENTITLEMENT-FILTERED

My part: Agent design, retrieval and tool layer, desktop client, deployment.

PythonFlaskNext.jsCortex AgentsSPCSElectron

Client system. The names, the internals, and the data stay with the client.

042025

Contract management system

Contract lifecycle out of the inbox

In production

Contract records with verified status, period selection, and an in-app PDF viewer, plus a sync that pushes contract metadata into the data catalog. Replaced a process running on shared spreadsheets and email threads.

RECORDSCONTRACTPERIODSTATUScontract_0142025-Q1VERIFIEDcontract_0272025-Q2VERIFIEDcontract_0312025-Q3VERIFIEDcontract_0452025-Q4VERIFIEDEXTRACTED METADATAFIELDVALUECONFamount1,250,000 USD0.97effective_date2025-04-010.99providerNorthline Capital0.95termination_clause90 days written notice0.88renewalauto, 12 months0.92governing_lawOntario, Canada0.96SYNCED TO THE DATA CATALOG WITH ITS LINEAGE

My part: Full-stack build, catalog sync, deployment.

PythonReactSnowflakeAtlan

Client system. The names, the internals, and the data stay with the client.

Open Source

Built in the open, run on your own hardware.

Opale UI — A design system with an agent that applies it
012026

Opale UI

A design system with an agent that applies it

Next.js and React 19 with shader-level Three.js scenes, and an agent trained on the design rules so they hold across builds. This site runs on it.

Next.jsReact 19Three.jsTailwind v4
CodeGeass — Your coding agent, on a schedule and on a leash
022026

CodeGeass

Your coding agent, on a schedule and on a leash

Runs coding agents as cron jobs. Approval gates before a diff lands, notifications when a run needs a human, and a log of what each run touched.

PythonFastAPIReactClaude Code
RLama — RAG that never leaves your laptop
032024

RLama

RAG that never leaves your laptop

A Go CLI that indexes a folder and answers questions about it. Embeddings and generation run locally against Ollama. Single binary, no network, no API key.

GoOllamaVector DBSemantic Search
ReMind — A searchable memory of your own machine
042024

ReMind

A searchable memory of your own machine

Screen and audio capture, OCR and transcription, indexed to a local vector store. Searchable by meaning instead of by filename. Uploads nothing.

TypeScriptPythonElectronChromaDB
SwiftRAG — The first RAG library for Swift
052024

SwiftRAG

The first RAG library for Swift

RAG for iOS and macOS. Apple's native NLP for embeddings, a local Ollama endpoint for generation. No Python backend, no network call.

SwiftApple NLPOllamaiOS
Go
Python
TypeScript
Swift
PyTorch
React
Next.js
Three.js
Ollama
RAG
Snowflake
MCP
Cloudflare
AWS
Docker
SQL
LangChain
Electron

Elyes Rayane Melbouci

If you’re building something that matters, let’s talk.

elyes.melbouci@gmail.com