Open Source

I'm a robot.

Reverse-CAPTCHA for the age of AI agents. Verifies that visitors are bots, not humans. Drop into any framework in one line.

Try the demo View code
$ npm install imrobot 📋

Live Demo

The challenge data is in data-imrobot-challenge on the DOM.
AI agents parse it, run the pipeline, and submit the result.

How it works

Built for the agent era

Traditional CAPTCHAs block bots. imrobot flips the script — only programmatic agents can solve these challenges.

1

Generate a pipeline

A random seed and a chain of string operations (reverse, base64, rot13, hex...) are generated. The structured challenge is embedded in the DOM as JSON.

2

Agent reads & executes

AI agents read the data-imrobot-challenge attribute, parse the pipeline, and execute each operation in sequence — instantly.

3

Verify identity

The agent submits the computed result. The component verifies it against the challenge hash and emits a signed token. No server needed.

Integration

One component, every framework

Drop it in with a single import. Works everywhere.

import { ImRobot } from 'imrobot/react'

function App() {
  return (
    <ImRobot
      difficulty="medium"
      theme="light"
      onVerified={(token) => {
        console.log('Robot verified!', token)
      }}
    />
  )
}
<script setup>
import { ImRobot } from 'imrobot/vue'

function handleVerified(token) {
  console.log('Robot verified!', token)
}
</script>

<template>
  <ImRobot
    difficulty="medium"
    theme="light"
    @verified="handleVerified"
  />
</template>
<script>
  import ImRobot from 'imrobot/svelte'
</script>

<ImRobot
  difficulty="medium"
  theme="light"
  onVerified={(token) =>
    console.log('Robot verified!', token)
  }
/>
<script type="module">
  import { register } from 'imrobot/web-component'
  register()  // registers <imrobot-widget>
</script>

<imrobot-widget
  difficulty="medium"
  theme="light">
</imrobot-widget>

<script>
  document.querySelector('imrobot-widget')
    .addEventListener('imrobot-verified', (e) => {
      console.log('Token:', e.detail)
    })
</script>
import {
  generateChallenge,
  solveChallenge,
  verifyAnswer,
} from 'imrobot/core'

// Generate
const challenge = generateChallenge({ difficulty: 'medium' })

// Solve (what an AI agent does)
const answer = solveChallenge(challenge)

// Verify
const isValid = verifyAnswer(challenge, answer)
console.log(isValid) // true
Features

Why imrobot?

Purpose-built for the agent-first web.

🧩

Framework agnostic

React, Vue, Svelte, Angular, or vanilla JS. One package covers everything via native Web Components.

🔒

No server required

Challenge generation and verification are fully client-side. No sessions, no cookies, no API calls.

Instant for agents

Deterministic string pipelines are trivially solvable by any programmatic agent in milliseconds.

🧠

Hard for humans

Multi-step transforms (base64, rot13, hex, reverse...) are practically impossible to compute manually.

🎨

Themeable

Built-in light and dark themes. CSS-in-JS styles with full customization support.

📦

Tiny footprint

~6 KB core, zero runtime dependencies. Tree-shakeable ESM and CJS builds with full TypeScript types.