Have you ever encountered this frustrating scenario:

You want to automate a certain website, but it doesn't offer an API.
So you have to choose one of two options:

  • Either manually capture packets, study a bunch of Tokens, signatures, and refresh logic, which is a huge headache
  • Or use Selenium / Puppeteer to simulate clicks, and the whole thing collapses if the page structure changes slightly

Both of these methods are either tiring or fragile, and neither is stable.

I recently came across a very interesting project called Neo, which offers a third approach:
👉 Don't use the official API, and don't simulate the UI, but directly "reuse the website's own internal interfaces."


🧠 Neo's Core Idea: Let the Webpage Become its Own API

Neo is a combination of a Chrome extension + CLI tool.

What it does is actually very simple, but very clever:

👉 "Observe" the actual requests made by the webpage in the browser, and then reuse these requests.

When you normally use a webpage (clicking, typing, submitting), the frontend actually sends requests (fetch / XHR / WebSocket).
Neo sits on the side and records all these requests.

The key points are:

  • Requests are made in the real browser context
  • All Cookies, login status, and CSRF are automatically included
  • You don't need to understand complex authentication mechanisms

In other words:

👉 The way you use the webpage is how it learns "API call methods"


⚙️ How Does it Specifically Work?

The entire process can be broken down into three steps:

1️⃣ Passive Listening

Once the Neo extension is loaded, it automatically records:

  • Request URL
  • Headers
  • Request body / Response
  • DOM element that triggered the request
  • Trigger timing

This data is stored locally in the browser (IndexedDB).


2️⃣ CLI for Secondary Use

The accompanying CLI (neo) can directly use this data to perform actions:

  • Generate API documentation (even OpenAPI)
  • Replay historical requests
  • Construct new requests (automatically including authentication information)

For example:

neo replay
neo api
neo exec --auto-headers