Normalize every packages/* package for public npm publish: - version: pre-1.0 (0.x) → 1.0.0; already-≥1.0 kept (mcp 2.4.1, cli-tools 1.8.0, dxt 1.8.1, browser/hanzo-ide/office/outlook 1.9.31, gworkspace 1.9.30, aci/auth 1.0.0) - remove "private" from all 22 gated packages/* (apps/site + repo root stay private — site is a deployed website, not an npm library) - add publishConfig.access=public everywhere (scoped @hanzo/* need it) - add files[] + valid main pointing at built output so no empty tarballs; no-build packages ship src+README CI npm job now publishes the whole workspace: - build @hanzo/cards first (slack/teams import its dist), then pnpm -r --if-present run build || true - pnpm -r publish --access public --no-git-checks --ignore-scripts --ignore-scripts prevents raycast/vscode `publish` lifecycle scripts (Raycast Store / VS Marketplace) from hijacking and aborting the run. workspace:* (auth, cards) is rewritten to the real version at publish.
@hanzo/aci
Agent Computer Interface - Cross-platform automation for AI agents.
Features
- 🖱️ Mouse Control: Click, drag, scroll, and move
- ⌨️ Keyboard Control: Type, press keys, and use hotkeys
- 📸 Screen Capture: Take screenshots of full screen or regions
- 🔍 Image Recognition: Find images on screen
- 📝 OCR: Read text from screen using Tesseract.js
- 🤖 MCP Integration: Ready-to-use MCP tools for AI agents
- 🌐 Cross-Platform: Works on Windows, macOS, and Linux
Installation
npm install @hanzo/aci
Usage
Basic Usage
import { ACI } from '@hanzo/aci';
const aci = new ACI();
// Take a screenshot
const screenshot = await aci.screenshot();
// Click at coordinates
await aci.click(100, 200);
// Type text
await aci.type('Hello, world!');
// Find and click on an image
await aci.clickImage('button.png');
// Read text from screen (requires OCR)
const aci = new ACI({ ocr: true });
const text = await aci.readText();
MCP Tools
import { aciTools } from '@hanzo/aci/mcp-tools';
// Use with your MCP server
const tools = aciTools;
API Reference
Mouse Operations
moveTo(x, y, duration?)- Move mouse to positionclick(x?, y?, button?)- Click at positiondoubleClick(x?, y?)- Double clickdrag(fromX, fromY, toX, toY)- Drag from one position to anotherscroll(clicks, x?, y?)- Scroll mouse wheel
Keyboard Operations
type(text, delay?)- Type textpress(key)- Press a single keyhotkey(...keys)- Press keyboard shortcut
Screen Operations
screenshot(region?)- Take screenshotgetScreenSize()- Get screen dimensionslocateOnScreen(imagePath, confidence?)- Find image on screenlocateAllOnScreen(imagePath, confidence?)- Find all occurrences
OCR Operations
readText(region?)- Read text using OCRfindText(text)- Find text location on screen
High-Level Operations
clickImage(imagePath, timeout?)- Click on an imageclickText(text, timeout?)- Click on textwaitForImage(imagePath, timeout?)- Wait for image to appearwaitForText(text, timeout?)- Wait for text to appear
Requirements
- Node.js 18+
- Platform-specific requirements:
- Windows: No additional requirements
- macOS: Accessibility permissions required
- Linux: X11 and dependencies for robotjs
License
MIT © Hanzo AI