{"_id":"@biniendafeliupv/lookin-cli","_rev":"8-10da1a778d5ea84545f8f0db089d38f0","name":"@biniendafeliupv/lookin-cli","dist-tags":{"latest":"0.1.11"},"versions":{"0.1.4":{"name":"@biniendafeliupv/lookin-cli","version":"0.1.4","_id":"@biniendafeliupv/lookin-cli@0.1.4","maintainers":[{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"}],"bin":{"lookin":"dist/cli/index.js","lookin-mcp":"dist/mcp/index.js"},"dist":{"shasum":"9c819ced0cf82c3fd7844858bd4804fd45788c99","tarball":"https://registry.npmjs.org/@biniendafeliupv/lookin-cli/-/lookin-cli-0.1.4.tgz","fileCount":213,"integrity":"sha512-yXu1GdnTJ4FqurGolpYdcxIpQXEOYxUlPmGDpTC2dR5pVeMxAV4kdM+umdZhYDbdCN5+i+18G1J9dgAqE1H5xg==","signatures":[{"sig":"MEUCIAIgEOYgBEGcCIp7a8T6hJb+3lMwRQGjlDQr84GScbWEAiEA44o27squNUDpwVjsydoeb3F8bf8Pm0LUBLTuoVHHBjg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":690289},"main":"dist/mcp/index.js","type":"module","engines":{"node":">=18"},"scripts":{"cli":"node dist/cli/index.js","dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/mcp/index.js","test:watch":"vitest","build:bridge":"swift build --package-path bridge"},"_npmUser":{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"},"_npmVersion":"6.14.12","description":"CLI and MCP server for Lookin-based iOS UI inspection","directories":{},"_nodeVersion":"14.16.1","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/lookin-cli_0.1.4_1774005931195_0.4646608518002422","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@biniendafeliupv/lookin-cli","version":"0.1.5","_id":"@biniendafeliupv/lookin-cli@0.1.5","maintainers":[{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"}],"bin":{"lookin":"dist/cli/index.js","lookin-mcp":"dist/mcp/index.js"},"dist":{"shasum":"931f09939dbf180139b2cac718dbd96c3857b9d5","tarball":"https://registry.npmjs.org/@biniendafeliupv/lookin-cli/-/lookin-cli-0.1.5.tgz","fileCount":213,"integrity":"sha512-6LwjzYHDqlchgSEb///wQ0x9heV313UbGY9U60GOol6VRZvMA2sV1MSOnzQfJ8FyIYXfGewgfM8ND8c56LiWCA==","signatures":[{"sig":"MEYCIQCpV9yXMcJFl0wHXiHq01Uei8l2i/RmCp0cJ47BJ4F3bAIhAJH1lrowR1gS60SIuC4/YU9Ccj64/yiQ3uwBtO1ptMBo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":703450},"main":"dist/mcp/index.js","type":"module","engines":{"node":">=18"},"scripts":{"cli":"node dist/cli/index.js","dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/mcp/index.js","test:watch":"vitest","build:bridge":"swift build --package-path bridge"},"_npmUser":{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"},"_npmVersion":"6.14.12","description":"CLI and MCP server for Lookin-based iOS UI inspection","directories":{},"_nodeVersion":"14.16.1","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/lookin-cli_0.1.5_1774607193149_0.5249554043405071","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@biniendafeliupv/lookin-cli","version":"0.1.6","_id":"@biniendafeliupv/lookin-cli@0.1.6","maintainers":[{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"}],"bin":{"lookin":"dist/cli/index.js","lookin-mcp":"dist/mcp/index.js"},"dist":{"shasum":"0eb0ef56ba1e76e71f1f3462b8b05376d4ac5fb8","tarball":"https://registry.npmjs.org/@biniendafeliupv/lookin-cli/-/lookin-cli-0.1.6.tgz","fileCount":213,"integrity":"sha512-Xn/dtFL0Cnpwa9JN1l/WGsaHsMLeLJ5aprKjJICWkLQP1fOjMSJEaWF5pPr0M7GJ6fEXChSu6so7P2EcXgBfbw==","signatures":[{"sig":"MEYCIQD5h4rtTJGohCO0u1cX7kwH795pVTSJ9/RGZwLCEi9DQwIhALKsljBjK9nkR2FW1ZtG1iNGQ+cD3RFUB4VE5OOa8Y08","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":703450},"main":"dist/mcp/index.js","type":"module","engines":{"node":">=18"},"scripts":{"cli":"node dist/cli/index.js","dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/mcp/index.js","test:watch":"vitest","build:bridge":"swift build --package-path bridge"},"_npmUser":{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"},"_npmVersion":"6.14.12","description":"CLI and MCP server for Lookin-based iOS UI inspection","directories":{},"_nodeVersion":"14.16.1","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/lookin-cli_0.1.6_1774607936884_0.5313436614947371","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@biniendafeliupv/lookin-cli","version":"0.1.7","_id":"@biniendafeliupv/lookin-cli@0.1.7","maintainers":[{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"}],"bin":{"lookin":"dist/cli/index.js","lookin-mcp":"dist/mcp/index.js"},"dist":{"shasum":"e2b1dabca20a7afe0707a5c0f3da4951d5f9b087","tarball":"https://registry.npmjs.org/@biniendafeliupv/lookin-cli/-/lookin-cli-0.1.7.tgz","fileCount":213,"integrity":"sha512-kruIKLda/2DS6mJA7XBlv9lFVr+8k3oFoZMMLe/UZuPkXjb2S0il2lK16f2XaQHPH0iNnGgRlR1DzNGVW4ZsvA==","signatures":[{"sig":"MEQCIFWkfg5iEiZnCJJeXW51fvKSZaze2Av1tkQIo83kp7yGAiBlKkenWXCcqRYeswcV48mXWqH0dxWaL/LyKqfMtOK0YQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":727522},"main":"dist/mcp/index.js","type":"module","engines":{"node":">=18"},"scripts":{"cli":"node dist/cli/index.js","dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/mcp/index.js","test:watch":"vitest","build:bridge":"swift build --package-path bridge"},"_npmUser":{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"},"_npmVersion":"6.14.12","description":"CLI and MCP server for Lookin-based iOS UI inspection","directories":{},"_nodeVersion":"14.16.1","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/lookin-cli_0.1.7_1774777252552_0.7760289278375989","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@biniendafeliupv/lookin-cli","version":"0.1.8","keywords":["lookin","mcp","ios","uikit","debugging","claude"],"_id":"@biniendafeliupv/lookin-cli@0.1.8","maintainers":[{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"}],"homepage":"https://github.com/biniendafeliupv187/LookinCLI/tree/main/mcp","bugs":{"url":"https://github.com/biniendafeliupv187/LookinCLI/issues"},"bin":{"lookin":"dist/cli/index.js","lookin-mcp":"dist/mcp/index.js"},"dist":{"shasum":"1165871dcd11bef774131aadede044e7fb6b0db2","tarball":"https://registry.npmjs.org/@biniendafeliupv/lookin-cli/-/lookin-cli-0.1.8.tgz","fileCount":214,"integrity":"sha512-bTiMyagzRJREt9ifQuty+LyLG1rnxxBHI/rvgpMig/ai/cx9yOQWtH/f3wSNo+NL5auUtWRmNNv2yu4N5JPn0A==","signatures":[{"sig":"MEQCIFrnoN20hJqC7899UQi0WARSRme5mBnPHCSIF522DvYoAiBJdZsBfEx8bjeG3y9hyP+t9Jb6WEtHvRXRrQmySrIByQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":727762},"main":"dist/mcp/index.js","type":"module","engines":{"node":">=18"},"scripts":{"cli":"node dist/cli/index.js","dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/mcp/index.js","dev:cli":"node dist/cli/index.js","dev:mcp":"node dist/mcp/index.js","test:watch":"vitest","build:bridge":"swift build --package-path bridge"},"_npmUser":{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"},"repository":{"url":"git+https://github.com/biniendafeliupv187/LookinCLI.git","type":"git","directory":"mcp"},"_npmVersion":"6.14.12","description":"CLI and MCP server for Lookin-based iOS UI inspection","directories":{},"_nodeVersion":"14.16.1","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/lookin-cli_0.1.8_1774877024732_0.08895223672166153","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@biniendafeliupv/lookin-cli","version":"0.1.9","keywords":["lookin","mcp","ios","uikit","debugging","claude"],"_id":"@biniendafeliupv/lookin-cli@0.1.9","maintainers":[{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"}],"homepage":"https://github.com/biniendafeliupv187/LookinCLI/tree/main/mcp","bugs":{"url":"https://github.com/biniendafeliupv187/LookinCLI/issues"},"bin":{"lookin":"dist/cli/index.js","lookin-mcp":"dist/mcp/index.js"},"dist":{"shasum":"6072a387c5807db3505abf754978c4065cbcc956","tarball":"https://registry.npmjs.org/@biniendafeliupv/lookin-cli/-/lookin-cli-0.1.9.tgz","fileCount":232,"integrity":"sha512-axnrPhy0ISFcyhYr1gMaL8Z6b1oEh3p650Ti5s6mDFYgIv3MbS2CCWtHLO7BFF7NkuSI9/ipBmC7dO1+okVDIg==","signatures":[{"sig":"MEUCIDsNrd28Z8WphuhH35PKiOC9g2sCHMsoOEVY40UzXiwbAiEAjctiL9YYPlW0XenvZ8mA1VnKL+zDwtI/Z9Jl3cxMP/c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":792673},"main":"dist/mcp/index.js","type":"module","engines":{"node":">=18"},"scripts":{"cli":"node dist/cli/index.js","dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/mcp/index.js","dev:cli":"node dist/cli/index.js","dev:mcp":"node dist/mcp/index.js","test:watch":"vitest","build:bridge":"swift build --package-path bridge"},"_npmUser":{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"},"repository":{"url":"git+https://github.com/biniendafeliupv187/LookinCLI.git","type":"git","directory":"mcp"},"_npmVersion":"6.14.12","description":"CLI and MCP server for Lookin-based iOS UI inspection","directories":{},"_nodeVersion":"14.16.1","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/lookin-cli_0.1.9_1774963190802_0.07163295756378574","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@biniendafeliupv/lookin-cli","version":"0.1.10","keywords":["lookin","mcp","ios","uikit","debugging","claude"],"_id":"@biniendafeliupv/lookin-cli@0.1.10","maintainers":[{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"}],"homepage":"https://github.com/biniendafeliupv187/LookinCLI/tree/main/mcp","bugs":{"url":"https://github.com/biniendafeliupv187/LookinCLI/issues"},"bin":{"lookin":"dist/cli/index.js","lookin-mcp":"dist/mcp/index.js"},"dist":{"shasum":"40f211e815f74c58aef4275edac3aa02cd027052","tarball":"https://registry.npmjs.org/@biniendafeliupv/lookin-cli/-/lookin-cli-0.1.10.tgz","fileCount":232,"integrity":"sha512-jxnWC1wTlrKcrPfx1zyCBMcKmiBtU72DwaEQnNVt9jcyjqbKfisEOCNWATyE5kA6Inx0vBGDCcMhDQi6vKrPeQ==","signatures":[{"sig":"MEYCIQC3z308JZTKcLpE52gakpjcxnluA65OvYIhmq2E62E/dgIhALsLQAk/gSPqQIKX93gQkLWaYgdsKgz+MLiYMXFoqHaP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":792744},"main":"dist/mcp/index.js","type":"module","engines":{"node":">=18"},"scripts":{"cli":"node dist/cli/index.js","dev":"tsc --watch","test":"vitest run","build":"tsc","start":"node dist/mcp/index.js","dev:cli":"node dist/cli/index.js","dev:mcp":"node dist/mcp/index.js","test:watch":"vitest","build:bridge":"swift build --package-path bridge"},"_npmUser":{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"},"repository":{"url":"git+https://github.com/biniendafeliupv187/LookinCLI.git","type":"git","directory":"mcp"},"_npmVersion":"6.14.12","description":"CLI and MCP server for Lookin-based iOS UI inspection","directories":{},"_nodeVersion":"14.16.1","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/lookin-cli_0.1.10_1774963790877_0.32896680216414165","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@biniendafeliupv/lookin-cli","version":"0.1.11","description":"CLI and MCP server for Lookin-based iOS UI inspection","homepage":"https://github.com/biniendafeliupv187/LookinCLI/tree/main/mcp","repository":{"type":"git","url":"git+https://github.com/biniendafeliupv187/LookinCLI.git","directory":"mcp"},"bugs":{"url":"https://github.com/biniendafeliupv187/LookinCLI/issues"},"keywords":["lookin","mcp","ios","uikit","debugging","claude"],"type":"module","main":"dist/mcp/index.js","engines":{"node":">=18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"bin":{"lookin-mcp":"dist/mcp/index.js","lookin":"dist/cli/index.js"},"scripts":{"build":"tsc","build:bridge":"swift build --package-path bridge","start":"node dist/mcp/index.js","cli":"node dist/cli/index.js","dev:cli":"node dist/cli/index.js","dev:mcp":"node dist/mcp/index.js","test":"vitest run","test:watch":"vitest","dev":"tsc --watch"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.1","zod":"^3.25.76"},"devDependencies":{"@types/node":"^20.0.0","typescript":"^5.4.0","vitest":"^3.0.0"},"_id":"@biniendafeliupv/lookin-cli@0.1.11","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-/gciyUDKUF8KOp4dggmIs7nJRm0DfwJ/wVdUM//XkzRADaCTt9tnf+UJslDwfKz4xGC23XRharsbHi28T/KYCw==","shasum":"3bfdde334706faa9abe91b9819746ec24b2201a2","tarball":"https://registry.npmjs.org/@biniendafeliupv/lookin-cli/-/lookin-cli-0.1.11.tgz","fileCount":232,"unpackedSize":792744,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFpjnWSudONhkII3pohXnNGTyVmZ82or6bcfQh3SPUVxAiABKXUzcui3bAcSXi52J8/3GHTKSz/eUUAFqVJaUvxJSw=="}]},"_npmUser":{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"},"directories":{},"maintainers":[{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lookin-cli_0.1.11_1774964276090_0.559198500304168"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-20T11:25:31.085Z","modified":"2026-03-31T13:37:56.424Z","0.1.4":"2026-03-20T11:25:31.348Z","0.1.5":"2026-03-27T10:26:33.318Z","0.1.6":"2026-03-27T10:38:57.033Z","0.1.7":"2026-03-29T09:40:52.763Z","0.1.8":"2026-03-30T13:23:44.938Z","0.1.9":"2026-03-31T13:19:51.073Z","0.1.10":"2026-03-31T13:29:51.069Z","0.1.11":"2026-03-31T13:37:56.302Z"},"bugs":{"url":"https://github.com/biniendafeliupv187/LookinCLI/issues"},"homepage":"https://github.com/biniendafeliupv187/LookinCLI/tree/main/mcp","keywords":["lookin","mcp","ios","uikit","debugging","claude"],"repository":{"type":"git","url":"git+https://github.com/biniendafeliupv187/LookinCLI.git","directory":"mcp"},"description":"CLI and MCP server for Lookin-based iOS UI inspection","maintainers":[{"name":"biniendafeliupv187","email":"biniendafeliupv187@gmail.com"}],"readme":"# Lookin CLI / Lookin MCP\n\n基于 [LookinServer](https://lookin.work/) 的命令行与 MCP 工具集，用来在没有桌面 GUI 的情况下读取、定位、截图、测距、读取运行时信息，以及临时修改 iOS App 的界面信息。\n适合 CLI、脚本和 MCP 客户端联调用于真实界面调试。\n\n当前包提供两个入口：\n\n- `lookin`：给人和脚本直接使用的 CLI\n- `lookin-mcp`：给 Claude Desktop / 其他 MCP Client 使用的 stdio server\n\n两者共享同一套命令层，不是两套独立实现。\n\n## 环境要求\n\n- macOS\n- Node.js `>= 18`\n- Xcode Command Line Tools / Swift 编译环境\n- 目标 iOS App 已集成并运行 `LookinServer`\n\n## 安装\n\n```bash\nnpm install -g @biniendafeliupv/lookin-cli\nlookin init\n```\n\n安装完成后可以先检查连通性：\n\n```bash\nlookin status\n```\n\n说明：\n\n- `lookin init` 会初始化本地运行环境，当前主要会自动构建 `lookin-bridge`\n- `lookin init --force` 可用于强制重建初始化产物\n\n## 快速开始\n\n先确认连接和当前页面层级：\n\n```bash\nlookin status\nlookin get_hierarchy --format text --max-depth 4\n```\n\n快速定位节点并查看详情：\n\n```bash\nlookin search --query UIButton\nlookin search --text 我的\nlookin get_view --oid 401\n```\n\n读取运行时信息：\n\n```bash\nlookin get_app_info\nlookin get_memory_address --text 我的\nlookin get_methods --class-name UIButton --include-args true\n```\n\n图片、事件和几何信息：\n\n```bash\nlookin get_screenshot --oid 401\nlookin get_image --oid 113\nlookin get_event_handlers --oid 401\nlookin measure_distance --layer-oid-a 401 --layer-oid-b 113\n```\n\n运行时修改与恢复：\n\n```bash\nlookin modify_view --oid 402 --attribute text --value \"hello\"\nlookin modify_view --oid 401 --attribute alpha --value 0.9\nlookin modify_view --oid 401 --attribute alpha --value 1\n```\n\n## 核心命令总览\n\n| 类别 | 命令 | 作用 |\n|------|------|------|\n| 层级与定位 | `status` | 检查连接状态、传输方式、发现链路 |\n| 层级与定位 | `get_hierarchy` | 获取当前视图层级，支持 `text` / `json` |\n| 层级与定位 | `search` | 按 class name、memory address 或 text 查找节点 |\n| 层级与定位 | `list_view_controllers` | 列出当前层级中的 view controllers |\n| 层级与定位 | `reload` | 清空缓存并重新抓取 live hierarchy |\n| 详情与运行时信息 | `get_view` | 查看单个节点详情，可选包含 Auto Layout constraints |\n| 详情与运行时信息 | `get_memory_address` | 查节点的 `viewMemoryAddress` |\n| 详情与运行时信息 | `get_methods` | 查看 class 或节点对应的 Objective-C selectors |\n| 图片与几何 | `get_screenshot` | 截取某个节点当前渲染结果 |\n| 图片与几何 | `get_image` | 抓取 `UIImageView` 原图 |\n| 图片与几何 | `measure_distance` | 计算两个节点在同一坐标系下的距离 |\n| 事件与交互 | `get_event_handlers` | 查看 target-action 和 gesture recognizer |\n| 事件与交互 | `toggle_gesture` | 启用或禁用 gesture recognizer |\n| 运行时修改 | `modify_view` | 临时修改 view 或 layer 属性 |\n| App 信息 | `get_app_info` | 查看 bundle id、设备、系统、LookinServer 信息 |\n\n## 常见使用场景\n\n### 找到一个按钮并查看详情\n\n```bash\nlookin search --query UIButton\nlookin get_view --oid 401\n```\n\n### 按文案查节点并拿到 memory address\n\n```bash\nlookin get_memory_address --text 我的\n```\n\n### 测量两个节点之间的距离\n\n```bash\nlookin measure_distance --layer-oid-a 401 --layer-oid-b 113\n```\n\n### 查看某个节点挂了哪些事件\n\n```bash\nlookin get_event_handlers --oid 401\n```\n\n### 获取 `UIImageView` 的原图\n\n```bash\nlookin get_image --oid 113\n```\n\n### 临时关闭一个手势\n\n```bash\nlookin toggle_gesture --recognizer-oid 9001 --enabled false\n```\n\n## 标识符规则\n\n这部分最重要，传错 id 类型通常会直接导致命令失败或命中错误节点。\n\n### `oid`\n\nview object id。通常用于：\n\n- `modify_view --attribute text`\n- `get_memory_address --view-oid`\n\n### `layerOid`\n\nlayer object id。通常用于：\n\n- `get_view --oid`\n- `get_screenshot --oid`\n- `get_image --oid`\n- `get_event_handlers --oid`\n- `get_methods --oid`\n- `measure_distance --layer-oid-a/--layer-oid-b`\n- `modify_view` 的大多数 layer 属性\n\n### `viewMemoryAddress`\n\n十六进制运行时地址，例如 `0x141175b00`。它不是 `oid`，也不是 `layerOid`。这个值适合拿去做更底层的运行时调试，不能直接替代节点 id。\n\n### `recognizerOid`\n\ngesture recognizer 的运行时 id，只能从 `get_event_handlers` 的结果里拿，供 `toggle_gesture` 使用。\n\n### `modify_view` 的 id 规则\n\n- `text` 需要传 view `oid`\n- `hidden`、`alpha`、`frame`、`backgroundColor`、`cornerRadius`、`borderWidth`、`borderColor`、`shadowColor`、`shadowOpacity`、`shadowRadius`、`shadowOffsetX`、`shadowOffsetY`、`masksToBounds` 这些 layer 相关属性都需要传 `layerOid`\n\n## 推荐调用顺序\n\n大多数情况下，按下面的顺序最稳：\n\n1. 连接异常或怀疑设备没连上时，先 `status`\n2. 已知 class name、text 或 memory address 时，先 `search`\n3. 目标不明确时，先 `get_hierarchy --format text`\n4. 拿到这次运行里正确的 id 后，再调用 `get_view`、`get_image`、`measure_distance`、`modify_view`\n5. 页面发生变化后，如果后续依赖最新结构，再调用 `reload`\n\n## 常见限制与排障\n\n- `oid`、`layerOid`、`recognizerOid` 都是当前运行期的 id，页面重建、列表复用、reload、app 重启后都可能失效\n- `DISCOVERY_NO_DEVICE` 和 `TRANSPORT_CLOSED` 有时是瞬时 discovery / transport 抖动，不一定代表 LookinServer 没开\n- `get_image` 只适用于 `UIImageView` 或其子类；即使目标类型正确，也可能因为当前节点没有可提取的 image data 而失败\n- `measure_distance` 只能比较处于同一个 root coordinate system 的节点；如果两个节点不在同一坐标系里，不应硬算距离\n- CLI 默认是一条命令一个进程，所以缓存不会跨多次 `lookin ...` 调用复用\n- `lookin-mcp` 是常驻进程，会持有进程内缓存，因此连续 MCP tool 调用可以复用 hierarchy 数据\n\n## MCP 与 skill 接入\n\n### 在 MCP Client 中配置\n\nClaude Desktop 示例配置：\n\n```json\n{\n  \"mcpServers\": {\n    \"lookin-mcp\": {\n      \"command\": \"lookin-mcp\"\n    }\n  }\n}\n```\n\n配置完成后，重启 MCP Client，即可通过自然语言调用 Lookin 能力。\n\n### 在支持本地 skill 的环境中使用\n\n仓库内自带一个可配合 `lookin-mcp` 使用的本地 skill：\n\n- skill 名称：`lookin`\n- 本地路径：`LookinCLI/skill/lookin`\n- 仓库地址：`https://github.com/biniendafeliupv187/LookinCLI/tree/main/skill/lookin`\n\n如果你的客户端支持加载本地 skill，可以把这个目录作为本地 skill 导入或启用。它的作用是帮助 AI 更稳定地选择 `lookin-mcp` 的调用顺序，并减少 `oid` / `layerOid` 用错的情况。\n\n如果你的客户端不支持本地 skill，也可以直接使用上面的 MCP 配置方式。\n\n## 开发者说明\n\n本地开发、调试、构建测试和发布流程见 [DEVELOPMENT.md](./DEVELOPMENT.md)。\n","readmeFilename":"README.md"}