research preview · mcp

AI that actually
uses your apps.

Most AI is stuck in a chat box. repld is a live workspace you and Claude share. Point it at the apps you already log into, and Claude turns repetitive app-work into automations you keep — then watches them run, pushes results back in the background, and graduates them to production when you're ready.

$ uv tool install repld-tool
repld — session · ~/my-project live
claude ❯from acme import Acme
Acme(tab) — company lookup, financials, search
claude ❯job = defer(acme.scan(watchlist), "account scan")
⇢ task a91f · backgrounded — session stays free
⚡ channel · task_done · account scan — 142 rows · 38s
you   ❯job.result[:1]
[Company('Acme Corp', revenue=4_200_000, status='active')]
you   ❯

01 · one live workspace

You drive.
Claude codes.

You don't write Python. You use your apps and say what you want; Claude works in the same live session and turns it into code that runs. It all shares one state, so you can open anything it built.

live session
you ❯"pull the open orders from the admin"
claude ❯orders = await sd.orders(status="open")
317 open orders
you ❯"who's the biggest?"
claude ❯max(orders, key=lambda o: o.total)
Nordlys Kafé AS · 2 480,00 kr

02 · operate your apps

In your real,
logged-in browser.

repld attaches to the Chrome you already use, logged into everything. Use the app yourself or let Claude click. Either way it sees every request and response, and turns what just happened into code.

live session
you ❯"export the products from the Shopify admin"
claude ❯clicked Export
⤷ POST /admin/exports → 201
⤷ 1,204 products · 2.1 MB

03 · gists

Reverse-engineer
once. Reuse forever.

A gist is a plain Python file repld reloads the moment you change it. Claude works out a site's private API once and writes the client. Import it forever. Link it across projects, or expose it as an MCP tool.

↪ repld gist list

local (./gists):
  crm                  CRM(tab) [async]
  gmail                Gmail()
  linkedin             LI(tab, csrf) [async]
  stripe               Stripe()
  acme                 Acme(tab) [async]
  shopify_sd           SD(tab) [async]
linked:
  emulator             ~/android-lab/gists/emulator.py
linkable (other projects — repld gist add <name>):
  ~/warehouse
    shipping             Shipping — labels, tracking, rates

04 · controls

See what your
app is doing.

Expose your app's own actions as a typed API. Claude runs them and watches every stage land, so when a pipeline breaks you see which stage failed the moment it fails, not an hour later in the logs.

pipeline · live
09:25:34controlsthread.send → 201
09:25:37aiclassify: reply (0.92)
09:25:38errorAPI 400 ← exactly where it broke

05 · background

It keeps working
in the background.

Long jobs, watchers, webhooks and timers all run in the background and ping you when something happens. Claude starts a task and moves on; the result lands in the conversation when it's ready.

background
you ❯"scan the watchlist, ping me when it's done"
claude ❯defer(acme.scan(watchlist), "account scan")
⤷ task a91f · running in the background
⚡ channel · every · watch_inbox — "3 new — Re: term sheet"
⚡ channel · task_done · account scan — 142 rows · 38s

06 · the progression

Every tool
starts as a
conversation.

Do it by hand first. By the third repeat the steps are obvious, and you pull them into a gist one phase at a time.

  1. 1
    Interactive

    You and Claude work a task in repld. Poke at the browser, hit an API, inspect the result. No plan yet, just doing.

  2. 2
    Scripted

    You repeated it three times. Pull it into a gist, a plain Python file repld reloads on save. Same code, now importable.

  3. 3
    Semi-auto

    Wire a trigger: @every, a webhook, a spreadsheet column waiting for a human decision. The gist is the stage.

  4. 4
    Production

    The same gist now runs in FastAPI or Inngest: event-driven and durable. Nothing was thrown away.

Give Claude
your apps.

$ uv tool install repld-tool