Just type an address
after itda
and your AI
can use the site.

Give itda one address. It learns what the site can do and tries it. Your AI agent gets a short list of actions in plain words. Reads just work. Nothing changes on the site until you say yes. Even the old intranet behind a login.

For the sites your company runs and the services you have an account on, not the web at large.

curl -LsSf https://github.com/brnyxx/itda-cli/releases/latest/download/itda-cli-installer.sh | sh

then itda the-site-you-use.example

About itda

itda 0.7.0
One Rust binary. macOS, Linux, Windows. Apache-2.0. No account, server or telemetry.

a first run, as it happened
$ itda news.ycombinator.com
1/5  Looking at news.ycombinator.com...
    The page opens without signing in.
    Found: a list of 30 records, a form, a feed.
2/5  What agents will be able to do:
    read   home         List what Hacker News shows  (inputs: p)
    read   feed         Read the RSS feed
3/5  Trying every read once...
    ✓ home         30 records
    ✓ feed         ok
4/5  Saved as 'news-ycombinator'.
    Connect Claude Desktop? [Y/n]
5/5  Adding itda to Claude Desktop...
Added itda to Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json).
Open Claude Desktop and itda will be there.
Done. Ask your agent for something on 'news-ycombinator', for example "use news-ycombinator to list what Hacker News shows".
news-ycombinator · what your agent can do
  • readhomeList what Hacker News shows✓ 30
  • readfeedRead the RSS feed✓ ok
itda setup

Connecting Claude Desktop...

Done · 5/5
Works with any MCP client

[ 00 ] Skip the terminal

Hand this to your agent.

Paste it into Claude Code, Cursor or Codex with the address of a site you use. The agent installs itda. It sets up and starts using the site. You only say yes to changes.

paste into your agent
Install itda and set up the-site-you-use.example for me.
1. Install it: curl -LsSf https://github.com/brnyxx/itda-cli/releases/latest/download/itda-cli-installer.sh | sh
   (on Windows: irm https://github.com/brnyxx/itda-cli/releases/latest/download/itda-cli-installer.ps1 | iex)
2. Run: itda setup https://the-site-you-use.example --client claude-code -y
   (use cursor, codex or claude-desktop if that is what you are)
3. Read https://github.com/brnyxx/itda-cli/blob/main/AGENTS.md, then use the site through itda.
   Reads just work. Anything that changes the site waits for my approval.
   If a read says to sign in, tell me to run: itda login <site> --browser

[ 01 ] How it works

From one address to a connected agent.

itda looks at the page. If the site needs a sign-in, it opens your own browser. It watches you use it. It never clicks or types. itda names each thing the site can do and tries every read once. It keeps what works and connects your agent.

record once · draft · call · approve
Record a website once in your browser; itda drafts commands from it. The agent calls them; a change waits for a person's approval.
  1. step 01
    1

    Point

    Paste the address of a site you use. itda reads public pages as is. Sites behind a login open in your own browser; you sign in and use them as usual while itda watches. What you type never leaves your computer.

    itda setup https://board.example
  2. step 02
    2

    Look it over

    itda lists what your agent will be able to do, in plain words: "List what Notices shows", "Search on Notices", "Submit the form on Notices (waits for your approval)". It tries every read once and drops what does not work.

    read get-board List what Notices shows
  3. step 03
    3

    Ask your agent

    Pick Claude, Cursor, VS Code or Codex and itda connects itself. From then on you just ask: "find this week's notices". Reads happen right away; a change stops and waits until you say yes to exactly that one.

    "use board to find this week's notices"

[ 02 ] Built for the real web

Built for the sites that have no API.

sites.without.api

Sign in with your own browser

For sites with single sign-on or one-time codes, itda login --browser opens a fresh window. You sign in by hand; itda keeps only that site's session in the keyring.

Old intranets welcome

Server-rendered tables become records, and forms that want a one-time CSRF token get it from a preflight step right before each approved post. The agent never sees it.

Know when a site changes

itda check runs every read that needs no input. It tells you which ones no longer match, before an agent runs into them. Run it on a schedule.

[ 03 ] What it can and cannot do

What works, and what does not.

For the sites your company runs and the services you have an account on. Every line here is true of the code today.

works today
  • Pages drawn on the server: tables, lists, cards, search and post forms, feeds
  • Pages that embed their data for their scripts (__NEXT_DATA__, ld+json)
  • Pages drawn by scripts that call a JSON API: itda watches them load in your browser
  • Forms with a CSRF token, read fresh before each approved post
  • Cookie sessions, a session in the address, or a bearer token a single-page app keeps in the browser: the site's own sign-in form, or your browser for single sign-on
  • Pages built from frames, even when a frame asks for its own sign-in
  • An OpenAPI description or a GraphQL endpoint the site publishes
  • GitLab, Jira, Confluence, Redmine, Discourse, MediaWiki, WordPress, Gitea
  • Attachments: a download saved on your computer, a file you name sent after you approve it by hash
  • Anything you recorded yourself using
works after you record it
  • A page that shows a plain fetch nothing and loads nothing by itself. It fetches only after you click, search or sign in

itda record watches you use it and drafts from the calls it saw.

does not work
  • WebSocket
  • APIs that sign every request
  • Pages assembled from HTML fragments (htmx and the like)
  • Content drawn on a canvas or into an image
  • A captcha, or a challenge your own browser does not get past either
  • Anything your account cannot see

The full list, with what each line means, is in the README.

[ 04 ] When the site changes

Noticed by a check, drafted again, reviewed by you.

A browser agent adapts on every run, and is slow and nondeterministic for it. itda is one request and the same answer every time. It breaks loudly when the site moves.

  1. step 01
    1

    Notice

    itda check runs every read needing no input and never sends a change. It ends with one verdict: ok, signed_out, site_changed, blocked or unreachable. Exit code 11 means the site changed. Run it on a schedule.

    itda check board
  2. step 02
    2

    Draft again

    itda refresh drafts the site again from what it was set up from: its pages, the API description, the GraphQL endpoint, or the kept shape of the recording with every value blanked.

    itda refresh board
  3. step 03
    3

    Review

    It shows what would change per action and writes nothing until you say yes. itda keeps what you edited by hand. It tries a new action once before adding it and checks the site again right after.

    Write these changes to 'board'? [y/N]

[ 05 ] The same site, two agents

Same website, very different risks.

Browser-driving agent
  1. What the agent seesWhole pages, every step
  2. A redesigned or signed-out pageRead as data
  3. Changes on the siteWhatever the model decides
  4. "Ignore previous instructions" on a pageIn the prompt
  5. Passwords and keysTyped into the page by the model
  6. Being blockedRetry, rotate, imitate a browser

Reads whole pages. Types where the model decides; retries when blocked.

itda
  1. What the agent seesOnly a short answer to one action
  2. A redesigned or signed-out pageNoticed and reported, with what to do next
  3. Changes on the siteSingle-use approval for exact inputs, given by a person
  4. "Ignore previous instructions" on a pageMarked untrusted data, never a tool
  5. Passwords and keysIn the OS keyring; agents see account ids
  6. Being blockedTry once more in your own installed browser, remember what worked

One answer per action. Every change waits for you; a read refused in the browser too fails and says so.

Playwright MCP, browser-use and computer use drive a browser on every task. itda does not replace them: a page you will use once, or a site itda does not cover, is theirs. itda is for the site an agent will call again and again. Record it once in a browser, review the actions, then run them over HTTP. Use both: a browser agent to explore, itda for the calls that run every day.

[ 06 ] Safety

Six things that keep you safe.

safety.six

Read-only by default

itda classifies every action as a read or a change before it runs. Changes are off until a definition says otherwise, and then still need you.

Single-use approvals

An approval covers one request with exactly the inputs you saw and expires on its own. You give it in your terminal or in a form your agent app shows you. No agent tool can approve.

Hash-chained audit log

itda logs every call, approval and change locally. Each entry seals the previous one. itda audit --verify proves nothing was edited.

Verified responses

Each action declares what a correct answer looks like. A login page, a captcha or a redesign comes back as an error with a fix, never as data.

Secrets stay put

API keys and tokens live in the OS keyring and are bound to their site's address. Agents only see account names.

One more try, in your browser

A read the site answers with a challenge page runs once more inside the browser installed on your computer, and itda remembers what worked. A change is sent once and never through the browser. itda does not solve captchas; a read it cannot get past fails and pauses nothing.

[ 07 ] For agents

Small, stable tool lists.

Up to 30 actions appear as one MCP tool each, with input schemas and read-only, destructive and idempotent hints. Past that, three stable tools keep the list short and prompt caches warm.

  • Same JSON envelope from MCP and itda call --json
  • Exit codes an agent can branch on: sign in, page changed, blocked, needs approval
  • Results marked untrusted and capped at 24 KB
any shell
# connect your agent
$ itda mcp install claude-desktop
$ itda mcp install cursor

# or call from any shell
$ itda call board.get-notice --notice_id 42 --json
$ echo $?
0   ok
10  sign in again
11  page no longer matches
20  needs your approval

[ 08 ] Ready-made sites

Four sites come already set up.

GitHub, npm, crates.io and PyPI work the moment itda is installed, with nothing to record. Each one talks only to that site's official interface, and itda check confirms every read still answers the way it should.

Logos are trademarks of their owners and only show which site a definition talks to. itda is not affiliated with them.

Try it on a site you use.