aihand
v0.4.2
Published
The hand of AI — drive the live UI (and any website), from one CLI
Maintainers
Readme
aihand
The hand of AI. Your agent can read files but can't see the running page, guesses at the UI instead of looking at it.
Add one plugin. Drive the user's already-open tab over HTTP.
aihand runtime screen | click | fill | wait | check YOUR app — the already-open tab, via --port=
aihand probe open <url> | … NOT your app: Playwright, fresh empty sessionEvery command and flag: aihand runtime --help.
Why it's faster than Playwright
After a Playwright click the model still has to think and re-read the page to see what changed — an extra round, about 5–10s. aihand click returns the delta (view: chat → im, modal opened), so it does not need another watch. On a click that is ~30–50× (~180ms vs 5–10s).
| | aihand | Playwright MCP | |---|---|---| | a click | ~180ms, 1 turn | click + think/re-read, extra 5–10s (~30–50×) |
Install
npm i -D aihand// vite.config.ts
import { aihand } from 'aihand/vite'
export default defineConfig({ plugins: [aihand()] })
// webpack.config.js
const { aihand } = require('aihand/webpack')
module.exports = { plugins: [aihand()] }
// rspack.config.ts
import { aihand } from 'aihand/rspack'
export default { plugins: [aihand()] }
// next.config.mjs — Next has no plugins[]; wrap is the slot (same as withSentryConfig)
// Next >= 15.3, webpack + turbopack. Already have a config? aihand(nextConfig)
import { aihand } from 'aihand/next'
export default aihand()Default ports: Vite 5173, webpack/rspack 8080, Next 3000 — aihand runtime --port=8080 (or 3000).
On dev, the plugin writes <!-- AIHAND:START --> into AGENTS.md / CLAUDE.md so the agent reaches for aihand runtime screen instead of guessing from source.
Stores (Zustand / Redux / MobX) and knobs are discovered automatically. No config file, nothing to hang on window. If a store cannot be recognized, /screen still lists DOM knobs and /click still works.
License
MIT
