suyash.mulik
PUNE · UTC+5:30

Suyash Mulik — AI engineer · agents / automation / RAG

Agents you can trust with real systems.

I build agents, automations and the internal tools around them, as an AI engineer at a cross-border payments fintech and on contract for teams and agencies. Every tool sits behind a schema. Every write is auditable.

Scroll — the wire follows
LangGraph · MCP · FAISS · Neo4j
Python · TypeScript · Claude

How I build

Four patterns I hold every build to.

  1. Tools behind schemas

    The model never touches a system directly. Every capability is a typed tool with a JSON schema, so what an agent can do is bounded, mockable and auditable.

  2. Routing in code, not in prose

    Shared state and conditional edges decide what happens next. When control flow is deterministic, you can test it, and you can replay it when something looks wrong.

  3. Retrieve first, cite always

    Generation is constrained to what was retrieved and every claim carries its source. Graph gives you the entity links, vectors give you the wording. Together they beat either alone.

  4. Evals before shipping

    Every prompt or model change runs against a set of real cases first, tracked per version. It is the part most demos skip, and the part that makes the rest safe to run.

Work

Public code you can read, with the architecture drawn live.

Work · 01LangGraph · FastAPI MCP · Python

Autonomous campaign agent team

A marketing team implemented as four LangGraph agents with one job each: Research pulls live market data through web search and returns structured JSON, Strategy turns it into positioning, Content drafts for blog, LinkedIn and Twitter, and the Reviewer grades each draft PASS or FAIL.

The edge I care about is the FAIL route: the graph sends the draft back to Content with the reviewer's notes attached and iterates until it passes. The routing decision is made in code from the verdict field, not left to the model. Tools live outside the agents in a FastAPI MCP server, so a tool can be swapped or mocked without touching agent logic.

  • StateGraph
  • conditional edges
  • shared state
  • web_search · Tavily
  • write_file
View the source
Four agent nodes in a loop: Research, Strategy, Content, Reviewer, with a FAIL edge back to Content and a PASS exit to the report. STATEGRAPH · SHARED STATE FAIL → revise with notes PASS → campaign_report.md Researchweb_search Strategypositioning Contentblog · li · x Reviewer FAIL · PASS FastAPI MCP server · web_search (Tavily) · write_file

Work · 02Python MCP SDK · Flask · HubSpot

HubSpot Next Best Action

An LLM wired into a live CRM in two pieces. The first is a HubSpot MCP server on the official Python SDK over stdio, exposing eight tools: companies, contacts, deals, tickets, recent conversations and a reply-to-thread tool. Each one has a JSON schema, so the model sees a typed contract rather than an SDK.

The second is the trigger. HubSpot fires a webhook when a customer message lands, a small Flask chain persists the payload, and an MCP host reads it, works out intent, decides the next best action, drafts a reply and sends it through the reply tool. The reply tool derives recipient and channel from the thread itself, so the model only has to get a thread ID and a message right.

  • 8 typed tools
  • stdio transport
  • webhook → payload.json
  • bounded writes
View the source
Flow from a HubSpot webhook through Flask to a saved payload, into an MCP host that reasons and calls one of eight typed tools on an MCP server, which writes back to HubSpot. EVERY WRITE GOES THROUGH A TOOL HubSpotnew message WebhookFlask chain payload.json MCP host · LLMintent → next best action → draft TOOL BOUNDARY · JSON SCHEMA PER TOOL companies contacts deals tickets conversations thread messages reply_to_thread 8 tools · list_tools publishes schemas · call_tool routes by name reply sent · recipient + channel derived from the thread

Work · 03spaCy · FAISS + MiniLM · Gemini

RAG over financial news, two ways at once

A research assistant over forex news that runs two retrieval paths and compares them. Path one is a knowledge graph: spaCy named-entity recognition and a dependency parse over every article, extracting entities and subject-verb-object relations. Path two is dense retrieval: MiniLM sentence embeddings in a FAISS IVF index, inner-product search, top ten chunks per query.

Both contexts go to Gemini separately and the stronger answer wins. Around that sit an LRU cache on queries, a SHA-256 change tracker so unchanged documents are never re-embedded, a news fetcher that writes timestamped snapshots, and three MetaTrader 5 signal scanners whose output joins the same corpus.

  • NER + SVO graph
  • FAISS IVF · top-10
  • SHA-256 change tracking
  • MT5 EMA / bias / trend
View the source
A query fans out to a knowledge-graph path and a vector path, each answered by Gemini, then compared to pick the stronger answer. GRAPH + VECTOR · COMPARE query"setup on EUR/USD this week" KNOWLEDGE GRAPH USDFedECBratesEUR spaCy NER · dependency parse · S-V-O DENSE RETRIEVAL MiniLM → FAISS IVF · inner product · top 10 Gemini · A Gemini · B vs stronger answer · LRU cached · SHA-256 change tracked

Work · 04TypeScript · React · open source

Skybridge docs-QA RAG example

Skybridge is a TypeScript framework for building MCP and ChatGPT apps. The maintainers had no retrieval example, so I contributed one: RAG over their own documentation. It ingests the live docs so there is no snapshot to go stale, chunks by section with deep-link anchors, embeds server-side, retrieves the top five by cosine similarity and answers with a numbered citation on every claim.

The React view renders citations as chips that expand the exact passage and deep-link back into the docs. When the project's automated reviewer flagged that an out-of-range marker could pass through unvalidated, I pushed a fix that strips invalid citations on the server and guards the chip lookup in the view. Pull request #1027, under review.

  • live ingestion
  • section chunks + anchors
  • top-5 cosine
  • cited answers
  • PR #1027
Read the pull request
Live docs are chunked by section, embedded, and the top five passages produce an answer with citation chips one to five; an invalid citation six is stripped. EVERY CLAIM CARRIES A SOURCE live docsno snapshot chunk by section#deep-link anchors embedserver-side top 5 by cosine similaritypassages ship view-only in metadata answer 1 23 5 6 ← stripped: n > sources.length 4 chip expands the passage · deep-links into the docs

Case studies

Built for real teams, not just for GitHub.

Case · 01Cross-border payments fintech · current role

A rate engine that picks the payout partner

A cross-border payment can usually go out through several payout partners, and each one quotes its own rate for each corridor and each way the money is paid out. Choosing well means comparing quotes that arrive in different shapes from different providers.

I built the product that does it end to end. It fetches rates from the providers, normalises them into one shape, and for every corridor and disbursement mode returns the best rate and the partner that offers it. The employer stays unnamed here and there are no numbers, but the shape is the same one I use everywhere: every provider sits behind one contract, so adding a partner does not touch the ranking logic.

  • multi-provider fetch
  • normalised quotes
  • corridor × payout mode
  • best rate + partner
Three payout providers send rates into a normalising boundary; the engine ranks them per corridor and payout mode and returns the best rate and partner. ONE CONTRACT PER PROVIDER · NO SPECIFICS provider Aown format provider Bown format provider Cown format NORMALISE rankper corridorper disbursement modesame quote shape for all best rate + partnerfor this payment new partner = one more adapter · ranking untouched

Case · 02Linkenite · Finland · remote · 2025–26

A sales pipeline that handles its own replies

Outbound sales breaks in two places: follow-ups that never get sent, and replies that sit unread while the sequence keeps emailing someone who already answered.

At Linkenite I built the sales pipeline product end to end: leads go into email sequences that send on schedule, and replies are handled automatically. A reply stops the sequence for that person and is routed to the right next step, so nobody gets a follow-up after they have written back. For a customer there I also built an AI workflow that writes blog posts and publishes them to their website.

  • sequenced outreach
  • automatic reply handling
  • stop on reply
  • AI blog publishing
Leads enter a sequence of an opener and two follow-ups; any reply stops the sequence and is read and routed to its next step. SEQUENCE · REPLY STOPS IT leadsCRM openerday 0 follow-upday +3 lastday +7 inboxreplies matched to their thread read the replystop the sequence · pick the next step to a person update CRM later

Case · 03My own system · Python · IMAP/SMTP · Apps Script · Playwright

An outreach engine that runs with the laptop off

I needed to find businesses, enrich them with a real contact, write to each one individually and follow up, without a paid sending tool and without burning sender reputation.

The engine discovers leads (Google Places plus a crawl of each site for published emails and an MX check), keeps them in a merge-safe store, and schedules every message into the Drafts folder of one of 14 Gmail accounts over IMAP. A small Apps Script outbox on Google's servers sends each draft at its time, so nothing depends on my machine. A reconcile step reads Sent Mail back into the CRM, and a scanner picks up replies and bounces across every inbox.

The useful part was what broke. A seed test showed three of the accounts were landing in Spam, so they were taken out of rotation. Two runs writing the store at once lost rows, so saves now merge. A failed upload that had actually succeeded left an orphan draft that would have sent twice, so every queue is now checked message by message against Drafts.

  • 14 sender accounts
  • cloud outbox
  • per-account caps
  • reconcile + reply scan
  • seed placement tests
Discovery and enrichment feed a store; messages are queued into Gmail Drafts across 14 accounts; an Apps Script outbox sends them; reconcile and an inbox scan feed results back into the store. LAPTOP OPTIONAL discoverPlaces · site crawl enrichemails · MX check store / CRMmerge on save queue over IMAPDrafts · send-at header 14 Gmail accounts ≤ 4 new a day each flagged → cap 0 Apps Script outboxGoogle's servers · every 5 min reconcile + scanSent · replies · bounces every queue verified against Drafts, message by message

Work with me

Three ways to hand me a workflow.

01 · Sprint

One automation, built and running

One workflow or agent, built against your real data in about five working days. Fixed price agreed up front, and you pay after you have seen it run.

02 · Contract

An AI engineer on your roadmap

10–15 hours a week, async, overlapping UK afternoons and US mornings. Short written updates, code in your repo, no lock-in.

03 · White-label

Capacity for agencies

AI and automation builds for your clients, under your brand. NDA is fine and you keep the relationship. The first small job is at cost so you can judge the work.

What I usually build

  • lead and reply handling
  • CRM syncs · HubSpot
  • content workflows
  • internal dashboards
  • RAG assistants
  • MCP servers
  • browser automation · Playwright
  • scheduled jobs
  1. 1A 20-minute call about the workflow and where it hurts.
  2. 2A one-page plan with a fixed price, the next day.
  3. 3Built on your data and shown working on a call.
  4. 4You pay; you get the code, a short runbook and two weeks of fixes.

Stack

What I reach for.

Agents

  • LangGraph
  • LangChain
  • LlamaIndex
  • MCP · Python SDK
  • MCP · FastAPI
  • MCP · TypeScript
  • Claude
  • Gemini

Retrieval

  • FAISS
  • sentence-transformers
  • spaCy
  • Neo4j
  • GraphRAG
  • knowledge graphs

Languages and backend

  • Python
  • TypeScript / JavaScript
  • C++
  • FastAPI
  • Flask
  • Node.js · Express
  • Streamlit
  • React

Data

  • MongoDB
  • MySQL
  • SQLite
  • Neo4j
  • Firebase
  • Supabase

Certifications

  • Neo4j Certified ProfessionalAug 2025
  • Oracle Cloud Infrastructure 2025 Certified AI FoundationsJul 2025
  • Oracle Generative AI ProfessionalJun 2025

Path

  • Mar 2026 – nowAI engineer at a cross-border payments fintech, Mumbai (hybrid). A payout rate engine, AI usage tracking, internal dashboards and tools.
  • Oct 2025 – Mar 2026AI engineer, Linkenite, Finland (remote). An end-to-end sales pipeline product with automatic reply handling, and an AI blog-publishing workflow for a customer.
  • 2025Three certifications in generative AI, cloud AI and graph databases. Four public AI systems shipped.
  • Jun – Dec 2024Software Engineer Intern, DisruptiveNext, Pune. Telegram bot POC, a FlutterFlow engagement platform for crypto creators, and research into GraphRAG, agentic workflows and MCP.
  • 2021 – 2025B.Tech Computer Engineering, G. H. Raisoni College of Engineering and Management, Pune. 8.36 / 10.

Contact

Tell me the workflow you want off your plate.

Twenty minutes on a call, then a one-page plan with a fixed price. Pune, UTC+5:30, working async with UK and US teams.

[email protected]