PeepIt MCP:AI代理的闪电般快速的macOS屏幕截图

](https://www.npmjs.com/package/@mantisware/peepit-mcp)   ](https://nodejs.org/)
______________________________________________________________________
PeepIt:因为你的AI值得看到你所看到的
有没有希望你的人工智能助手能 *看* 在你的屏幕上,得到它?PeepIt是来赋予你的数字伙伴视觉天赋的——不需要魔杖。无论你是在调试UI,在野外捕捉bug,还是只是想知道那个神秘窗口背后潜伏着什么,PeepIt都会支持你(和你的屏幕)。
PeepIt是什么?
PeepIt是一个仅支持macOS的MCP服务器,它允许AI代理捕获您的应用程序、窗口或整个系统的屏幕截图,然后使用本地或基于云的AI模型进行分析。这就像给你的人工智能一副眼镜和一个放大镜,集两者于一身。
- 截图 任何东西:整个屏幕、一个应用程序,或者你永远找不到的一个窗口
- 分析视觉内容 使用AI视觉模型(本地或云端——由您决定)
- 列出正在运行的应用程序和窗口 用于激光靶向捕获
- 非侵入性工作--没有窗口焦点窃取,没有工作流程中断,没有戏剧性
主要特点
- 🚀 快速且非侵入性:眨眼,你会错过的——PeepIt使用苹果的ScreenCaptureKit进行闪电般快速的截图,所有这些都不会劫持你的窗口焦点或打断你的节奏。
- 🎯 智能窗口定位:模糊匹配非常精确,即使你只记得它名字的一半(我们都去过那里),它也会找到正确的窗口。
- 🤖 AI驱动的分析问一些关于你的截图的问题,并从GPT-4o、Claude或当地模特那里得到答案——因为有时你需要第二双(机器人)眼睛。
- 🔒 隐私第一:喜欢低调行事吗?与Ollama一起在本地运行所有内容,或者只在真正需要时调用云骑兵。
- 📦 简易安装:通过Cursor一键安装,或者只是一个快速的npm/npx咒语——不需要神秘的仪式。
- 🛠️ 开发者友好:干净的JSON API、TypeScript支持和日志如此全面,你会怀疑PeepIt是否在秘密写回忆录。
______________________________________________________________________
安装
需求
- macOS 14.0+ (索诺玛或更高版本)
- Node.js 20.0+
- 屏幕录制权限 (别担心,系统会提示您——无需在系统设置中进行洞穴探险)
快速开始
用于游标IDE
或者手动添加到光标设置中:
{
"mcpServers": {
"peepit": {
"command": "npx",
"args": [
"-y",
"@mantisware/peepit-mcp"
],
"env": {
"PEEPIT_AI_PROVIDERS": "openai/gpt-4o,ollama/llava:latest",
"OPENAI_API_KEY": "your-openai-api-key-here"
},
"toolCallTimeoutMillis": 120000
}
}
}适用于克劳德桌面
编辑您的Claude Desktop配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
添加PeepIt配置(复制、粘贴,就完成了AI视觉的一半):
{
"mcpServers": {
"peepit": {
"command": "npx",
"args": [
"-y",
"@mantisware/peepit-mcp"
],
"env": {
"PEEPIT_AI_PROVIDERS": "openai/gpt-4o,ollama/llava:latest",
"OPENAI_API_KEY": "your-openai-api-key-here"
}
}
}
}然后重新启动Claude Desktop。(是的,您确实需要重新启动它。我们已经检查过了。)
配置
PeepIt与您最喜欢的文本编辑器一样可配置。使用环境变量将其调整到您的工作流程:
{
"PEEPIT_AI_PROVIDERS": "openai/gpt-4o,ollama/llava:latest",
"OPENAI_API_KEY": "your-openai-api-key-here",
"PEEPIT_LOG_LEVEL": "debug",
"PEEPIT_LOG_FILE": "~/Library/Logs/peepit-mcp-debug.log",
"PEEPIT_DEFAULT_SAVE_PATH": "~/Pictures/PeepItCaptures",
"PEEPIT_CONSOLE_LOGGING": "true",
"PEEPIT_CLI_TIMEOUT": "30000",
"PEEPIT_CLI_PATH": "/opt/custom/peepit"
}可用环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
PEEPIT_AI_PROVIDERS | 谁是你的AI?列出图像分析的提供者(请参见 AI分析). | "" (残疾) |
PEEPIT_LOG_LEVEL | PeepIt应该有多健谈?(跟踪、调试、信息、警告、错误、致命) | info |
PEEPIT_LOG_FILE | 把原木藏在哪里。如果目录不可写,PeepIt会找到一个舒适的临时文件夹。 | ~/Library/Logs/peepit-mcp.log |
PEEPIT_DEFAULT_SAVE_PATH | 当您未指定路径时,屏幕截图的默认目录。 | 系统临时目录 |
PEEPIT_OLLAMA_BASE_URL | 你的Ollama API在哪里?只有当它不在通常的位置时才需要。 | http://localhost:11434 |
PEEPIT_CONSOLE_LOGGING | 想要登录您的主机吗?吃起来 "true" 为了获得最大程度的过度分享 | "false" |
PEEPIT_CLI_TIMEOUT | Swift CLI魔术等待多长时间(ms)。 | 30000 (30秒) |
PEEPIT_CLI_PATH | Swift的自定义路径 peepit CLI,如果你喜欢的话。 | (使用捆绑的CLI) |
AI提供者配置
这 PEEPIT_AI_PROVIDERS 变量是您进行AI驱动的屏幕截图分析的金奖券。想让PeepIt回答有关屏幕的问题吗?只需列出您最喜欢的模特:
PEEPIT_AI_PROVIDERS="openai/gpt-4o,ollama/llava:latest,anthropic/claude-3-haiku-20240307"
或者,如果你是分号鉴赏家:
PEEPIT_AI_PROVIDERS="openai/gpt-4o;ollama/llava:latest;anthropic/claude-3-haiku-20240307"
每个条目都是 provider_name/model_identifier.支持的提供商: ollama (对于本地), openai (对于云),很快, anthropic (适合真正喜欢冒险的人)。
PeepIt将按顺序尝试提供程序,根据需要检查API密钥或本地服务。如果你觉得特别,可以根据请求覆盖模型。
与Ollama建立本地AI
Ollama将AI愿景带到您的桌面上——无需云,无需数据离开您的Mac。(你的秘密是安全的。也许吧。)
安装Ollama
brew install ollama
# Or download from https://ollama.ai
ollama serve下载视觉模型
对于结实的机器:
ollama pull llava:latest
ollama pull llava:7b-v1.6
ollama pull llava:13b-v1.6 # For the RAM-rich
ollama pull llava:34b-v1.6 # For the RAM-obsessed对于较轻的笔记本电脑:
ollama pull qwen2-vl:7b型号尺寸指南:
qwen2-vl:7b-~4GB下载,~6GB RAM(非常适合凡人)llava:7b-约4.5GB下载,约8GB RAMllava:13b-~8GB下载,~16GB RAMllava:34b-~20GB下载,~40GB RAM(带零食)
使用Olama配置PeepIt
将Ollama添加到您的Claude Desktop配置中:
{
"mcpServers": {
"peepit": {
"command": "npx",
"args": [
"-y",
"@mantisware/peepit-mcp@beta"
],
"env": {
"PEEPIT_AI_PROVIDERS": "ollama/llava:latest"
}
}
}
}对于较轻的机器:
{
"mcpServers": {
"peepit": {
"command": "npx",
"args": [
"-y",
"@mantisware/peepit-mcp@beta"
],
"env": {
"PEEPIT_AI_PROVIDERS": "ollama/qwen2-vl:7b"
}
}
}
}混合搭配AI提供商:
{
"env": {
"PEEPIT_AI_PROVIDERS": "ollama/llava:latest,openai/gpt-4o",
"OPENAI_API_KEY": "your-api-key-here"
}
}______________________________________________________________________
macOS权限
PeepIt需要一些macOS权限才能发挥其魔力。别担心,它不会要求您输入Netflix密码。
1.屏幕录制权限(必填)
macOS红杉(15.0+):
- 系统设置→ 隐私和安全
- 滚动到屏幕和系统录音
- 打开终端或MCP客户端
- 重新启动应用程序(是,再次)
macOS Sonoma(14.0)及更早版本:
- 系统首选项→ 安全与隐私→ 隐私
- 选择屏幕录制
- 点击锁,输入密码
- 添加您的终端或MCP客户端
- 重新启动应用程序
需要权限的应用程序:
- 打开终端
- 克劳德桌面
- VS代码
- 光标
2.无障碍权限(可选,但很好)
macOS红杉(15.0+):
- 系统设置→ 隐私和安全→ 无障碍
- 打开终端/MCP客户端
macOS Sonoma(14.0)及更早版本:
- 系统首选项→ 安全与隐私→ 隐私
- 选择辅助功能
- 添加您的终端/MCP客户端
______________________________________________________________________
测试与调试
使用MCP检查器
想看看PeepIt的表演吗?点火 MCP检查员:
# Test with OpenAI
OPENAI_API_KEY="your-key" PEEPIT_AI_PROVIDERS="openai/gpt-4o" npx @modelcontextprotocol/inspector npx -y @mantisware/peepit-mcp
# Test with local Ollama
PEEPIT_AI_PROVIDERS="ollama/llava:latest" npx @modelcontextprotocol/inspector npx -y @mantisware/peepit-mcp直接CLI测试
./peepit --help
./peepit list server_status --json-output
./peepit image --mode screen --format png
peepit-mcp预期产量:
{
"success": true,
"data": {
"swift_cli_available": true,
"permissions": {
"screen_recording": true
},
"system_info": {
"macos_version": "14.0"
}
}
}______________________________________________________________________
可用工具
PeepIt为你提供了三个主要工具——把它们想象成你的人工智能的瑞士军刀:
1. image -捕获屏幕截图
捕捉Mac的屏幕截图——屏幕、应用程序或窗口。阴影和框架?跑了。(不客气。)
注: 屏幕截图总是保存到文件中(巨型图像没有Base64,你的堆栈不会喜欢它)。如果你要求 format: "data",PeepIt会礼貌地忽略你,并保存一个PNG,同时发出温和的警告。
示例:
// Capture entire screen
await use_mcp_tool("peepit", "image", {
app_target: "screen:0",
path: "~/Desktop/screenshot.png"
});
// Capture a specific app window and analyze it
await use_mcp_tool("peepit", "image", {
app_target: "Safari",
question: "What website is currently open?",
format: "data"
});
// Capture window by title
await use_mcp_tool("peepit", "image", {
app_target: "Notes:WINDOW_TITLE:Meeting Notes",
path: "~/Desktop/notes.png"
});
// Capture the frontmost window
await use_mcp_tool("peepit", "image", {
app_target: "frontmost",
format: "png"
});
// Capture by Process ID
await use_mcp_tool("peepit", "image", {
app_target: "PID:663",
path: "~/Desktop/process.png"
});浏览器帮助程序筛选: PeepIt足够聪明,可以避免浏览器助手进程(不再有“谷歌Chrome助手(渲染器)”恶作剧)。你会得到真正的浏览器窗口,或者一条清晰的消息,如果它没有运行。
文件命名和路径行为:
- 单次捕获? 您的路径按原样使用。
- 多次捕获? PeepIt将元数据添加到文件名中,因此不会覆盖任何内容。
- 目录路径? PeepIt为您生成唯一的名称。
- 长文件名? PeepIt将它们修剪为符合macOS 255字节的限制,保持表情符号和非拉丁文字的完整性。
- 格式无效? 只允许使用PNG和JPEG。其他任何东西都会被转换,并发出友好的警告。
2. list -系统信息
列出正在运行的应用程序、窗口或检查服务器状态。因为有时候你只需要知道外面有什么。
示例:
// List all running apps
await use_mcp_tool("peepit", "list", {
item_type: "running_applications"
});
// List windows of a specific app
await use_mcp_tool("peepit", "list", {
item_type: "application_windows",
app: "Preview"
});
// List windows by PID
await use_mcp_tool("peepit", "list", {
item_type: "application_windows",
app: "PID:663"
});
// Check server status
await use_mcp_tool("peepit", "list", {
item_type: "server_status"
});3. analyze -AI视觉分析
向你的AI输入一张图片,并询问任何问题。(好吧,几乎任何东西。)
示例:
// Analyze with auto-selected provider
await use_mcp_tool("peepit", "analyze", {
image_path: "~/Desktop/screenshot.png",
question: "What applications are visible?"
});
// Force a specific provider
await use_mcp_tool("peepit", "analyze", {
image_path: "~/Desktop/diagram.jpg",
question: "Explain this diagram",
provider_config: {
type: "ollama",
model: "llava:13b"
}
});______________________________________________________________________
测试
PeepIt附带了大量的测试:
TypeScript测试
- 单元测试:对于喜欢独处的代码
- 集成测试:用于与他人配合良好的代码
- 平台特定测试:有些测试需要macOS和Swift二进制文件
npm test # Run all tests (macOS required for full suite)
npm run test:unit # Unit tests only (any platform)
npm run test:typescript # TypeScript-only tests (Linux-friendly)
npm run test:typescript:watch # Watch mode
npm run test:coverage # With coverageSwift测试
npm run test:swift # Swift CLI tests (macOS only)
npm run test:integration # Full integration (TypeScript + Swift)平台支持
- macOS:所有测试
- Linux/CI:仅支持TypeScript(跳过Swift测试)
- 环境变量:
- SKIP_SWIFT_TESTS=true:跳过Swift测试 - CI=true:自动跳过Swift测试
______________________________________________________________________
故障排除
| 闹鬼 | 驱魔 |
|---|---|
Permission denied 在捕获过程中 | 授予屏幕录制权限。重新启动应用程序。 |
| 窗口捕获问题 | 授予辅助功能权限以实现更可靠的定位。 |
Swift CLI unavailable | 确保 peepit 二进制文件存在并且可执行。如有需要,进行重建。 |
AI analysis failed | 检查您的人工智能提供商配置和API密钥。确保本地服务正在运行。查看日志以了解详细信息。 |
Command not found: peepit-mcp | 确保你的PATH包含npm二进制文件,或者使用正确的命令。 |
| 总体怪异 | 检查日志!集 PEEPIT_LOG_LEVEL=debug 为了获得最大的细节。 |
调试模式
OPENAI_API_KEY="your-key" PEEPIT_AI_PROVIDERS="openai/gpt-4o" PEEPIT_LOG_LEVEL=debug PEEPIT_CONSOLE_LOGGING=true npx @mantisware/peepit-mcp
./peepit list server_status --json-output获取帮助
- 📚 文档
______________________________________________________________________
从源头构建
开发设置
git clone https://github.com/mantisware/peepit.git
cd peepit
npm install
npm run build
cd peepit-cli
swift build -c release
cp .build/release/peepit ../peepit
cd ..
npm link # Optional: install globally本地开发配置
对于本地开发人员:
{
"mcpServers": {
"peepit_local": {
"command": "peepit-mcp",
"args": [],
"env": {
"PEEPIT_LOG_LEVEL": "debug",
"PEEPIT_CONSOLE_LOGGING": "true"
}
}
}
}或者,直接与 node:
{
"mcpServers": {
"peepit_local_node": {
"command": "node",
"args": [
"/Users/mantisware/Projects/PeepIt/dist/index.js"
],
"env": {
"PEEPIT_LOG_LEVEL": "debug",
"PEEPIT_CONSOLE_LOGGING": "true"
}
}
}
}使用绝对路径和唯一的服务器名称以避免混淆。
AppleScript版本(旧版)
对于老校友来说:
osascript peepit.scpt*注意:此版本中没有AI分析或MCP功能。*
其他MCP客户端的手动配置
{
"server": {
"command": "node",
"args": ["/path/to/peepit/dist/index.js"],
"env": {
"PEEPIT_AI_PROVIDERS": "openai/gpt-4o,ollama/llava",
"OPENAI_API_KEY": "your-openai-api-key-here"
}
}
}______________________________________________________________________
工具文档
image -屏幕截图
捕获Mac的屏幕,并可选择对其进行分析。阴影和边框会自动消除。
参数:
app_target(字符串,可选):指定捕获目标。如果省略或为空,则捕获所有屏幕。
- 示例: - "screen:INDEX":在指定的从零开始的索引处捕获屏幕(例如。, "screen:0").(注意:Swift CLI计划全面支持从多个屏幕中选择索引)。 - "frontmost":捕获当前活动应用程序的最前面窗口。 - "AppName":捕获名为的应用程序的所有窗口 AppName (例如。, "Safari", "com.apple.Safari").使用模糊匹配。 - "PID:ProcessID":捕获具有指定进程ID的应用程序的所有窗口(例如。, "PID:663").当同一应用程序的多个实例正在运行时很有用。 - "AppName:WINDOW_TITLE:Title":捕获窗口 AppName 具有指定 Title (例如。, "Notes:WINDOW_TITLE:My Important Note"). - "AppName:WINDOW_INDEX:Index":捕获窗口 AppName 在指定的从零开始 Index (例如。, "Preview:WINDOW_INDEX:0" 用于预览的最前面窗口)。
path(字符串,可选):保存捕获图像的基本绝对路径。如果format是"data"和path图像将保存到此路径(作为PNG)并返回Base64数据。如果aquestion提供和path省略,使用临时路径进行捕获,并在分析后删除文件。question(string,可选):如果提供,将分析捕获的图像。服务器会自动从中配置的AI提供者中选择一个PEEPIT_AI_PROVIDERS环境变量。format(字符串,可选,默认值:"png"):指定输出图像格式或数据返回类型。
- "png" 或 "jpg":将图像保存到指定位置 path 以所选格式。对于应用程序捕获:如果 path 未提供,行为类似 "data"。对于屏幕截图:始终保存到文件。 - "data":直接在MCP响应中返回图像的Base64编码PNG数据。如果 path 如果还指定了PNG文件,则也会将其保存到该文件中 path. 注意:屏幕截图不能使用此格式,将自动回退为PNG文件格式。 - 无效值(空字符串、null或无法识别的格式)会自动回退到 "png".
capture_focus(字符串,可选,默认值:"background"):控制捕获期间的窗口焦点行为。
- "background":捕获时不更改当前窗口焦点(默认)。 - "foreground":尝试在捕获之前将目标应用程序/窗口置于前台。这对于某些应用程序可能是必要的,或者在多个窗口打开的情况下确保捕获特定窗口。
行为与 question (AI分析):
- 如果a
question如果提供,该工具将捕获图像(将其保存到path如果指定则为临时路径)。 - 然后将此图像发送到AI模型进行分析。AI提供者和模型由服务器根据您的
PEEPIT_AI_PROVIDERS环境变量(按顺序尝试它们,直到成功为止)。 - 分析结果返回为
analysis_text在回应中。图像数据(Base64)不会返回到content当一个问题被问到时,数组。 - 如果图像使用了临时路径,则会在分析尝试后将其删除。
输出结构(简化):
content:可以包含ImageContentItem(如果format: "data"或path省略了,没有question)和/或TextContentItem(用于总结、分析文本、警告)。saved_files:对象数组,每个对象详细说明一个保存到的文件path(如果path已提供)。analysis_text:来自AI的文本(如果question被问到)。model_used:AI模型标识符(如果question被问到)。
有关详细的参数文档,请参阅 docs/spec.md.
______________________________________________________________________
文件命名和路径行为
PeepIt智能地管理输出路径,以防止文件覆盖,同时尊重您的意图:
关键原则:单次拍摄与多次拍摄
当您提供特定的文件路径时(例如。, ~/Desktop/screenshot.png),PeepIt根据捕获上下文确定是完全使用它还是添加元数据:
- 单次捕获→ 精确路径
- 捕获一个特定窗口 - 捕获一个特定屏幕(当只有一个显示器存在时) - 捕捉与 app_target: "frontmost" - 您的路径完全按照指定使用
- 多次捕获→ 已添加元数据
- 捕获应用程序的所有窗口(mode: "multi" 或存在多个窗口) - 捕获所有屏幕(当存在多个显示器时) - 在没有特定目标的情况下进行捕获(默认为所有屏幕) - 附加元数据以防止覆盖
示例:
// SINGLE CAPTURES - Use exact path
// ================================
// One window of Safari
await use_mcp_tool("peepit", "image", {
app_target: "Safari",
path: "~/Desktop/browser.png"
});
// Result: ~/Desktop/browser.png ✓
// Specific screen (when you have only one monitor)
await use_mcp_tool("peepit", "image", {
app_target: "screen:0",
path: "~/Desktop/myscreen.png"
});
// Result: ~/Desktop/myscreen.png ✓
// Frontmost window
await use_mcp_tool("peepit", "image", {
app_target: "frontmost",
path: "~/Desktop/active.png"
});
// Result: ~/Desktop/active.png ✓
// MULTIPLE CAPTURES - Add metadata
// ================================
// All windows of Safari (mode: multi)
await use_mcp_tool("peepit", "image", {
app_target: "Safari",
mode: "multi",
path: "~/Desktop/browser.png"
});
// Results: ~/Desktop/browser_Safari_window_0_20250610_120000.png
// ~/Desktop/browser_Safari_window_1_20250610_120000.png
// All screens (multiple monitors)
await use_mcp_tool("peepit", "image", {
app_target: "screen", // or omit app_target
path: "~/Desktop/monitor.png"
});
// Results: ~/Desktop/monitor_1_20250610_120000.png
// ~/Desktop/monitor_2_20250610_120000.png
// DIRECTORY PATHS - Always use generated names
// ============================================
// Directory path (note trailing slash)
await use_mcp_tool("peepit", "image", {
app_target: "Safari",
path: "~/Desktop/screenshots/"
});
// Result: ~/Desktop/screenshots/Safari_20250610_120000.png长文件名保护:
PeepIt自动处理文件系统限制:
- 截断超过macOS 255字节限制的文件名
- 保留UTF-8多字节字符(表情符号、非拉丁文字)
- 确保在需要时始终包含元数据
- 从不创建无效的文件名
例子:
// Very long filename with emoji
await use_mcp_tool("peepit", "image", {
app_target: "Safari",
path: "~/Desktop/" + "🎯".repeat(100) + "_screenshot.png"
});
// Result: Filename safely truncated to fit 255-byte limit
// while preserving valid UTF-8 characters格式验证:
- 无效格式(“bmp”、“gif”、“tiff”等)会自动转换为PNG
- 当格式更正发生时,您将收到一条明确的警告消息
- 只有“png”和“jpg”/“jpeg”是有效格式
浏览器帮助程序筛选:
PeepIt在搜索常见浏览器(Chrome、Safari、Firefox、Edge、Brave、Arc、Opera)时会自动过滤掉浏览器助手进程。这可以防止在匹配“Google Chrome helper(渲染器)”等辅助进程而不是主浏览器应用程序时出现混淆错误。
示例:
// ✅ Finds main Chrome browser, not helpers
await use_mcp_tool("peepit", "image", {
app_target: "Chrome"
});
// ❌ Old behavior: Could match "Google Chrome Helper (Renderer)"
// Result: "no capturable windows were found"
// ✅ New behavior: Finds "Google Chrome" or shows "Chrome browser is not running"浏览器特定错误消息:
- 而不是通用的“找不到应用程序”
- 显示明确的消息,如“Chrome浏览器未运行或未找到”
- 仅适用于浏览器标识符-其他应用程序正常工作
______________________________________________________________________
技术特性
- 多显示器支持:每个显示器都有自己的聚光灯时刻
- 智能应用定位:应用程序名称的模糊匹配
- 多种格式:PNG、JPEG、WebP、HEIF
- 自动命名:基于时间戳,无覆盖
- 权限检查:没有意外
- 应用程序列表:查看正在运行的内容
- 窗口枚举:列出应用程序的所有窗口
- PID定位:对于痴迷于过程的人
- 状态监测:知道什么是活动的
- 提供者不可知:Ollama、OpenAI和即将推出的Anthropic
- 自然语言:询问有关图像的问题
- 可配置的:基于环境
- 后备支援:提供程序之间的自动故障转移
______________________________________________________________________
建筑
PeepIt/
├── src/ # Node.js MCP Server (TypeScript)
│ ├── index.ts # Main MCP server entry point
│ ├── tools/ # Individual tool implementations
│ │ ├── image.ts # Screen capture tool
│ │ ├── analyze.ts # AI analysis tool
│ │ └── list.ts # Application/window listing
│ ├── utils/ # Utility modules
│ │ ├── peepit-cli.ts # Swift CLI integration
│ │ ├── ai-providers.ts # AI provider management
│ │ └── server-status.ts # Server status utilities
│ └── types/ # Shared type definitions
├── peepit-cli/ # Native Swift CLI
│ └── Sources/peepit/ # Swift source files
│ ├── main.swift # CLI entry point
│ ├── ImageCommand.swift # Image capture implementation
│ ├── ListCommand.swift # Application listing
│ ├── Models.swift # Data structures
│ ├── ApplicationFinder.swift # App discovery logic
│ ├── WindowManager.swift # Window management
│ ├── PermissionsChecker.swift # macOS permissions
│ └── JSONOutput.swift # JSON response formatting
├── package.json # Node.js dependencies
├── tsconfig.json # TypeScript configuration
└── README.md # This file______________________________________________________________________
技术细节
JSON输出格式
Swift CLI在调用时输出结构化JSON --json-output:
{
"success": true,
"data": {
"applications": [
{
"app_name": "Safari",
"bundle_id": "com.apple.Safari",
"pid": 1234,
"is_active": true,
"window_count": 2
}
]
},
"debug_logs": ["Found 50 applications"]
}MCP集成
Node.js服务器提供:
- 通过Zod进行模式验证
- 正确的MCP错误代码
- 通过Pino进行结构化日志记录
- 完全TypeScript类型安全
安全
PeepIt尊重macOS的安全性:
- 操作前检查权限
- 妥善处理缺失的权限
- 权限设置的明确指导
______________________________________________________________________
发展
测试命令
./peepit list apps --json-output | head -20
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | node dist/index.js建筑
npm run build
cd peepit-cli && swift build______________________________________________________________________
已知问题
- FileHandle警告:关于TextOutputStream一致性的非关键Swift警告
- AI提供者配置:需要
PEEPIT_AI_PROVIDERS分析特征的环境变量
______________________________________________________________________
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
______________________________________________________________________
贡献
- 分叉回购
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
______________________________________________________________________
作者
阅读更多关于PeepIt的设计和实现 博客文章.
