{"_id":"@abhijithneilabraham/opendesk-sdk","name":"@abhijithneilabraham/opendesk-sdk","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@abhijithneilabraham/opendesk-sdk","version":"0.1.0","description":"JavaScript/TypeScript SDK for opendesk — give any AI agent eyes and hands on your desktop","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"bin":{"opendesk-js":"bin/opendesk.js","opendesk-js-mcp":"bin/opendesk-mcp.js"},"scripts":{"build":"tsc","dev":"tsc --watch","typecheck":"tsc --noEmit"},"keywords":["opendesk","computer-use","desktop-automation","mcp","ai-agent"],"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","@nut-tree-fork/nut-js":"^4.2.0","clipboardy":"^4.0.0","node-cron":"^3.0.0","screenshot-desktop":"^1.15.0","tesseract.js":"^5.0.0"},"devDependencies":{"@types/node":"^20.0.0","@types/node-cron":"^3.0.0","typescript":"^5.4.0"},"engines":{"node":">=18.0.0"},"repository":{"type":"git","url":"git+https://github.com/vitalops/opendesk.git","directory":"js"},"_id":"@abhijithneilabraham/opendesk-sdk@0.1.0","gitHead":"b58116a7ed93329634208b237978e8c4f78d8467","bugs":{"url":"https://github.com/vitalops/opendesk/issues"},"homepage":"https://github.com/vitalops/opendesk#readme","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-L65H+lvq402kERKZ/Qpi8l9m+gx4jaiG7YZ/4RpWdYP3U8iVlyiYoERJu3aWRi/g6CQ7ROEX7kHMumRg7YKOdg==","shasum":"722aa4d691fddf1519ffc93d54689531c3a186eb","tarball":"https://registry.npmjs.org/@abhijithneilabraham/opendesk-sdk/-/opendesk-sdk-0.1.0.tgz","fileCount":64,"unpackedSize":99058,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIARpX3zVJck1vzRAA1oC/id50gNHqbOwEZO+EWfH0L5gAiEAhsQ3xAdEMTjtY+OE2ec+mVDufu1wN0YDh1GP1u9kzcU="}]},"_npmUser":{"name":"abhijithneilabraham","email":"abhijithneilabrahampk@gmail.com"},"directories":{},"maintainers":[{"name":"abhijithneilabraham","email":"abhijithneilabrahampk@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opendesk-sdk_0.1.0_1778591925946_0.5103819516215129"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-12T13:18:45.868Z","0.1.0":"2026-05-12T13:18:46.101Z","modified":"2026-05-12T13:18:46.280Z"},"maintainers":[{"name":"abhijithneilabraham","email":"abhijithneilabrahampk@gmail.com"}],"description":"JavaScript/TypeScript SDK for opendesk — give any AI agent eyes and hands on your desktop","homepage":"https://github.com/vitalops/opendesk#readme","keywords":["opendesk","computer-use","desktop-automation","mcp","ai-agent"],"repository":{"type":"git","url":"git+https://github.com/vitalops/opendesk.git","directory":"js"},"bugs":{"url":"https://github.com/vitalops/opendesk/issues"},"license":"MIT","readme":"# @abhijithneilabraham/opendesk-sdk — JavaScript/TypeScript SDK\n\nGive any JavaScript or TypeScript AI agent eyes and hands on your desktop.\n\nNo Python required. All desktop automation runs natively in Node.js — screenshot capture, mouse/keyboard control, accessibility APIs, OCR, clipboard, and audit logging.\n\n---\n\n## Requirements\n\n- Node.js 18+\n\n---\n\n## Install\n\n```bash\nnpm install @abhijithneilabraham/opendesk-sdk\n```\n\n### Claude Code / Claude Desktop\n\n```bash\nnpx opendesk-js install\n```\n\nThis registers the native MCP server with Claude Code. The tools (`screenshot`, `mouse`, `keyboard`, `ui`, etc.) are then available in every Claude Code conversation.\n\nTo remove:\n\n```bash\nnpx opendesk-js uninstall\n```\n\n### Claude Desktop\n\nAdd to your config file (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):\n\n```json\n{\n  \"mcpServers\": {\n    \"opendesk\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/node_modules/@abhijithneilabraham/opendesk-sdk/bin/opendesk-mcp.js\"]\n    }\n  }\n}\n```\n\n---\n\n## Usage\n\n### Programmatic (agent loop)\n\n```typescript\nimport { OpenDeskClient } from \"@abhijithneilabraham/opendesk-sdk\";\n\nconst client = new OpenDeskClient();\n\n// Take a screenshot with Set-of-Marks\nconst shot = await client.screenshot({ marks: true });\nconsole.log(shot.output);\n\n// Click a button by name — no coordinates needed\nawait client.ui({ action: \"click\", app: \"Safari\", title: \"Go\" });\n\n// Type text\nawait client.keyboard({ action: \"type\", text: \"Hello from JS\" });\n\n// Open an app\nawait client.app({ action: \"open\", name: \"Spotify\" });\n\n// Read clipboard\nconst clip = await client.clipboard({ action: \"read\" });\nconsole.log(clip.output);\n\n// OCR a region\nconst text = await client.ocr({ region: [0, 0, 800, 400] });\n\n// Show audit log\nconst log = await client.audit({ format: \"summary\" });\n```\n\n### With Vercel AI SDK\n\n```typescript\nimport { OpenDeskClient } from \"@abhijithneilabraham/opendesk-sdk\";\nimport { generateText } from \"ai\";\nimport { anthropic } from \"@ai-sdk/anthropic\";\n\nconst client = new OpenDeskClient();\n\nconst shot = await client.screenshot({ marks: true });\nconst response = await generateText({\n  model: anthropic(\"claude-opus-4-6\"),\n  messages: [\n    {\n      role: \"user\",\n      content: [\n        { type: \"text\", text: \"What do you see on screen? Click the most prominent button.\" },\n        { type: \"image\", image: shot.attachments[0].content },\n      ],\n    },\n  ],\n});\n```\n\n### Expose as MCP server\n\n```typescript\nimport { createMcpServer } from \"@abhijithneilabraham/opendesk-sdk\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nconst server = createMcpServer();\nconst transport = new StdioServerTransport();\nawait server.connect(transport);\n```\n\n### Custom session ID or permission handler\n\n```typescript\nimport { OpenDeskClient } from \"@abhijithneilabraham/opendesk-sdk\";\n\nconst client = new OpenDeskClient({\n  sessionId: \"my-agent-session\",\n  permissionHandler: async (tool, action, description) => {\n    console.log(`Allow ${description}? [y/n]`);\n    // return true to allow, false to deny\n    return true;\n  },\n});\n```\n\n---\n\n## Tools\n\nFull reference: [docs/tools.md](../docs/tools.md)\n\n| Tool | Method | Description |\n|------|--------|-------------|\n| `screenshot` | `client.screenshot(params?)` | Capture screen, optional SoM marks |\n| `ui` | `client.ui(params)` | Click/type by element name — no coordinates |\n| `mouse` | `client.mouse(params)` | Pixel-level mouse control |\n| `keyboard` | `client.keyboard(params)` | Type, press keys, hotkeys |\n| `app` | `client.app(params)` | Open, close, focus applications |\n| `clipboard` | `client.clipboard(params)` | Read/write system clipboard |\n| `ocr` | `client.ocr(params?)` | Extract text from screen |\n| `audit` | `client.audit(params?)` | Show session audit log |\n\n---\n\n## How it works\n\n```\nYour JS/TS code\n      │\n      ▼\n@abhijithneilabraham/opendesk-sdk (Node.js)\n      │\n      ├── screenshot  (screenshot-desktop)\n      ├── mouse/keyboard  (@nut-tree-fork/nut-js)\n      ├── ui  (osascript / PowerShell UI Automation / xdotool)\n      ├── ocr  (tesseract.js)\n      ├── clipboard  (clipboardy)\n      └── audit  (in-process session log)\n```\n\nAll platform-specific automation runs directly in Node.js. No external process is required.\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-4e0900ba0023a9f2237a94d580db07a1"}