- Test runs now stay hermetic after MCP Swift SDK 0.11 updates by pinning the latest Tachikoma bridge/resource conversions and preventing provider test helpers from consuming live API keys.
- macOS settings now surface Google/Gemini and Grok providers with canonical provider hydration and manual key overrides.
- MCP
list/seetext output now surfaces hidden apps, bundle paths, and richer element metadata; thanks @metahacker for #93. - MCP tool descriptions and server-status output now share centralized version/banner metadata; thanks @0xble for #85.
- Agent tool responses now handle current MCP resource/resource-link content shapes; thanks @huntharo for #95.
- CLI credential writes now honor Peekaboo’s config/profile directory consistently; thanks @0xble for #82.
- macOS settings hydration no longer persists config-backed values while loading; thanks @0xble for #86.
- CLI agent runtime now prefers local execution by default; thanks @0xble for #83.
- Remote
peekaboo seeelement detection now uses the command timeout instead of the bridge client's shorter socket default; thanks @0xble for #89. - Screen recording permission checks are more reliable, and MCP Swift SDK compatibility is restored; thanks @romanr for #94.
- Coordinate clicks now fail fast when the requested target app is not actually frontmost after focus; thanks @shawny011717 for #91.
- Permissions docs now point to the real
peekaboo permissions status|grantcommands; thanks @Undertone0809 for #68.
- Root SwiftPM package to expose PeekabooBridge and automation modules for host apps.
- Bumped submodule dependencies to tagged releases (AXorcist v0.1.0, Commander v0.2.1, Swiftdansi 0.2.0, Tachikoma v0.1.0, TauTUI v0.1.5).
- Version metadata updated to 3.0.0-beta4 for CLI/macOS app artifacts.
- Headless daemon + window tracking:
peekaboo daemon start|stop|status, MCP auto-daemon mode, in-memory snapshots, and move-aware click/type adjustments. - Menu bar automation overhaul: CGWindow + AX fallback for menu extras (including Trimmy),
menubar click --verify+menu click-extra --verifywith popover/focus/OCR checks, andsee --menubarpopover capture via window list + OCR. - Screen/area capture pipeline now uses a persistent ScreenCaptureKit fast stream (frame-age + wait timing logs) with single-shot fallback for windows.
peekaboo clipboard --verifyreads back clipboard writes; text writes now publish bothpublic.plain-textand.stringacross CLI, MCP tools, paste, and scripts.peekaboo dock launch --verify,peekaboo window focus --verify, andpeekaboo app switch --verifyadd lightweight post-action checks.peekaboo app listnow supports--include-hiddenand--include-background.- Release artifacts now ship a universal macOS CLI binary (arm64 + x86_64).
- AX element detection now caches per-window traversals for ~1.5s to reduce repeated
seethrash; window list mapping is now centralized and cached to cut CG/SC re-queries. - Menu bar popover selection now prefers owner-name matches and X-position hints; owner-PID filtering relaxes when app hints do not match any candidate.
- Menu bar screenshot captures now use the real menu bar height derived from each screen’s visible frame.
peekaboo see --menubarnow attempts an OCR area fallback after auto-clicking a menu extra even when open-menu AX state is missing.
- Menu bar extras now combine CGWindow data with AX fallbacks to surface third-party items like Trimmy, and clicks target the owning window for reliability.
- Menu bar extras now hydrate missing owner PIDs from running app metadata to improve open-menu detection.
- Menu bar open-menu probing now returns AX menu frames over the bridge to support popover captures.
- Menu bar verification now detects focused-window changes when a menu bar app opens a settings window.
- Menu bar click verification now detects popovers in both top-left and bottom-left coordinate systems.
- Menu bar click verification now requires OCR text to include the target title/owner name when falling back to OCR (set
PEEKABOO_MENUBAR_OCR_VERIFY=0to disable). - Menu bar popover OCR area/frame fallbacks now validate against app hints before accepting a capture.
- Socket-based Peekaboo Bridge: privileged automation runs in a long-lived bridge host (Peekaboo.app, or another signed host like Clawdbot.app) and the CLI connects over a UNIX socket (replacing the v3.0.0-beta1 XPC helper model).
- Snapshots replace sessions: snapshots live in memory by default, are scoped per target bundle ID, and are reused automatically for follow-up actions (agent-friendly; fewer IDs to plumb around).
- MCP server-only: Peekaboo still runs as an MCP server for Claude Desktop/Cursor/etc, but no longer hosts/manages external MCP servers.
- Reliability upgrades for “single action” automation: hard wall-clock timeouts and bounded AX traversal to prevent hangs.
- Visualizer extracted + stabilized: overlay UI lives in
PeekabooVisualizer, with improved preview timings and less clipping.
- Removed the v3.0.0-beta1 XPC helper pathway; remote execution now uses the Peekaboo Bridge socket host model.
- Renamed automation “sessions” → “snapshots” across CLI output, cache/paths, and APIs.
- Removed external MCP client support (
peekaboo mcp add/list/test/call/enable/disableremoved);peekaboo mcpnow defaults toserve, andmcpClientsconfiguration is no longer supported. - CLI builds now target macOS 15+.
peekaboo paste: set clipboard content, paste (Cmd+V), then restore the prior clipboard (text, files/images, base64 payloads).- Deterministic window targeting via
--window-idto avoid title/index ambiguity. peekaboo bridge statusdiagnostics for host selection/handshake/security; plus runtime controls--bridge-socketand--no-remote.- Bridge security: caller validation via code signature TeamID allowlist (and optional bundle allowlist), with a debug-only same-UID escape hatch (
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1). peekaboo hotkeyaccepts the key combo as a positional argument (in addition to--keys) for quick one-liners likepeekaboo hotkey "cmd,shift,t".peekaboo learnrenders its guide as ANSI-styled markdown on rich terminals, while still emitting plain markdown when piped.- Agent providers now include
gemini-3-flash, expanding the out-of-the-box model catalog forpeekaboo agent. - Agent streaming loop now injects
DESKTOP_STATE(focused app/window title, cursor position, and clipboard preview when theclipboardtool is enabled) as untrusted, delimited context to improve situational awareness. - Peekaboo’s macOS app now surfaces About/Updates inside Settings (Sparkle update checks when signed/bundled).
- Bridge host discovery order is now: Peekaboo.app → Clawdbot.app → local in-process (no auto-launch).
- Capture defaults favor the classic engine for speed/reliability, with explicit capture-engine flags when you need SCKit behavior.
- Agent defaults now prefer Claude Opus 4.5 when available, with improved streaming output for supported providers.
- OpenAI model aliases now map to the latest GPT-5.1 variants for
peekaboo agent.
- ScreenCaptureKit window capture no longer returns black frames for GPU-rendered windows (notably iOS Simulator), and display-bound crops now use display-local
sourceRectcoordinates on secondary monitors. peekaboo seeis now bounded for “single action” use (10s wall-clock timeout without--analyze), and timeouts surface asTIMEOUTexit codes instead of silent hangs.- Dialog file automation is more reliable: can force “Show Details” (
--ensure-expanded) and verifies the saved path when possible. peekaboo dialogsubcommands now expose the full interaction targeting + focus options (Commander parity).- App resolution now prioritizes exact name matches over bundleID-contains matches, preventing
--app Safarifrom accidentally matching helper processes with “Safari” in their bundle ID. - UI element detection enforces conservative traversal limits (depth/node/child caps) plus a detection deadline, making runaway AX trees safe.
- Listing apps via a bridge no longer risks timing out: window counts now use CGWindowList instead of per-app AX enumeration.
- Visualizer previews now respect their full duration before fading out; overlays no longer disappear in ~0.3s regardless of requested timing.
peekaboo image: infer output encoding from--pathextension when--formatis omitted, and reject conflicting--formatvs--pathextension values.peekaboo image --analyze: Ollama vision models are now supported.peekaboo click --coordsno longer crashes on invalid input; invalid coordinates now fail with a structured validation error.- Auto-focus no longer no-ops when a snapshot is missing a
windowID, preventing follow-up actions from landing in the wrong frontmost app. peekaboo window listno longer returns duplicate entries for the same window.peekaboo capture liveavoids window-index mismatches that could attach to the wrong window when multiple candidates are present.- Bridge hosts that reject the CLI now reply with a structured
unauthorizedClienterror response instead of closing the socket (EOF), and the CLI error message includes actionable guidance for older hosts.
- Tool allow/deny filters now log when a tool is hidden, including whether the rule came from environment variables or config, and tests cover the messaging.
peekaboo image --retinacaptures at native HiDPI scale (2x on Retina) with scale-aware bounds in the capture pipeline, plus docs and tests to lock in the behavior.- Peekaboo now inherits Tachikoma’s Azure OpenAI provider and refreshed model catalog (GPT‑5.1 family as default, updated Grok/Gemini 2.5 IDs), and the
tk-confighelper is exposed through the provider config flow for easier credential setup. - Full GUI automation commands—
see,click,type,press,scroll,hotkey, andswipe—now ship in the CLI with multi-screen capture so you can identify elements on any display and act on them without leaving the terminal. - Natural-language AI agent flows (
peekaboo agent "…"or simplypeekaboo "…") let you describe multi-step tasks in prose; the agent chains native tools, emits verbose traces, and supports low-level hotkeys when you need to fall back to precise control. - Dedicated window management, multi-screen, and Spaces commands (
window,space) give you scripted control over closing, moving, resizing, and re-homing macOS apps, including presets like left/right halves and cross-display moves. - Menu tooling now enumerates every application menu plus system menu extras, enabling zero-click discovery of keyboard shortcuts and scripted menu activation via
menu list,menu list-all,menu click, andmenu click-extra. - Automation snapshots remember the most recent
seerun automatically, but you can also pin explicit snapshot IDs and run.peekaboo.jsonscripts viapeekaboo runto reproduce complex workflows with one command. - Rounded out the CLI command surface so every capture, interaction, and maintenance workflow is first-class:
image,list,tools,config,permissions,learn,run,sleep, andcleancover capture/config glue, whilewindow,app,dock,dialog,space,menu, andmenubarprovide window, app, and UI chrome management alongside the previously mentioned automation commands. peekaboo see --jsonnow includesdescription,role_description, andhelpfields for everyui_elements[]entry so toolbar icons (like the Wingman extension) and other AX-only descriptions can be located without blind coordinate clicks.- GPT-5.1, GPT-5.1 Mini, and GPT-5.1 Nano are now fully supported across the CLI, macOS app, and MCP bridge.
peekaboo agentdefaults togpt-5.1, the app’s AI settings expose the new variants, and all MCP tool banners reflect the upgraded default.
- Peekaboo runs as both an MCP server and client: it still exposes its native tools to Claude/Cursor, but v3 now ships the Chrome DevTools MCP by default and lets you add or toggle external MCP servers (
peekaboo mcp list/add/test/enable/disable), so the agent can mix native Mac automation with remote browser, GitHub, or filesystem tools in a single session.
- Added
pnpmshortcuts for common Swift workflows (pnpm build,pnpm build:cli:release,pnpm build:polter,pnpm test,pnpm test:automation,pnpm test:all,pnpm lint,pnpm format) so command names match what ships in release docs and both humans and agents rely on the same entry points. - Automation test suites now launch the freshly built
.build/debug/peekaboobinary viaCLITestEnvironment.peekabooBinaryURL()and suppress negative parsing noise, making CI logs far easier to scan. - Documented the safe vs. automation tagging convention and the new command shorthands inside
docs/swift-testing-playbook.md, so contributors know exactly which suites to run before tagging. AudioInputServicenow relies on Swift observation (@Observable) plus structuredTask.sleeppolling instead of Combine timers, keeping v3’s audio capture aligned with Swift 6.2’s concurrency expectations.- CLI
toolsoutput now usesOrderedDictionary, guaranteeing the same ordering every time you list tools or dump JSON so copy/paste instructions in the README stay accurate. - Removed the Gemini CLI reusable workflow from CI to eliminate an external check that was blocking pull requests when no Gemini credentials are configured.
- Provider configuration now prefers environment overrides while still loading stored credentials, matching the latest Tachikoma behavior and keeping CI/config files in sync.
- Commands invoked without arguments (for example
peekaboo agentorpeekaboo see) now print their detailed help, including argument/flag tables and curated usage examples, so it is obvious why input is required. - CLI help output now hides compatibility aliases such as
--jsonOutputwhile still documenting the primary short/long names (-j,--json), matching the new alias metadata exported by the Commander submodule.
peekaboo capture videopositional input now binds correctly through Commander, preventing “missing input” runtime errors; binder and parsing tests cover the regression.- Menubar automation uses a bundled LSUIElement helper before CGS fallbacks, improving detection of menu extras on macOS 26+.
- Agent MCP tools (see/click/drag/type/scroll) default to the latest
seesession when none is pinned, so follow-up actions work without re-runningsee. - MCP Responses image payloads are normalized (URL/base64) to align with the schema; manual testing guidance updated.
- Restored Playground target build on macOS 15 so local examples compile again.
peekaboo capture video --sample-fpsnow reports frame timestamps from the video timeline (not session wall-clock), fixing bunchedt=XXmsoutputs and aligningmetadata.json; regression test added.peekaboo capture videonow advertises and binds its required input video file in Commander help/registry, preventing missing-input crashes; binder and program-resolution tests cover the regression.- Anthropic OAuth token exchange now uses standards-compliant form encoding, fixing 400 responses during
peekaboo config login anthropic; regression test added. peekaboo see --analyzenow honorsaiProviders.providerswhen choosing the default model instead of always defaulting to OpenAI; coverage added for configured defaults.- Added more coverage to ensure AI provider precedence honors provider lists, Anthropic-only keys, and empty/default fallbacks.
- Visualizer “Peekaboo.app is not running” notice now only appears with verbose logging, keeping default runs quieter.
- Visualizer console output is now suppressed unless verbose-level logging is explicitly requested (or forced via
PEEKABOO_VISUALIZER_STDOUT), preventing non-verbose runs from emitting visualizer chatter.
- Fixed
--versionoutput to include "Peekaboo" prefix for Homebrew formula compatibility - Now outputs "Peekaboo 2.0.3" instead of just "2.0.3"
- Actually fixed compatibility with macOS Sequoia 26 by ensuring LC_UUID load command is generated during linking
- The v2.0.1 fix was incomplete - the binary was still missing LC_UUID
- Verified both x86_64 and arm64 architectures now contain proper LC_UUID load commands
- Fixed compatibility with macOS Sequoia 26 (pre-release) by preserving LC_UUID load command during binary stripping
- Added native AI analysis capability directly to Swift CLI - analyze images without the MCP server
- Support for multiple AI providers: OpenAI GPT-4 Vision and local Ollama models
- Automatic provider selection and fallback mechanisms
- Perfect for automation, scripts, and CI/CD pipelines
- Example:
peekaboo analyze screenshot.png "What error is shown?"
- Added comprehensive JSONC (JSON with Comments) configuration file support
- Location:
~/.config/peekaboo/config.json - Features:
- Persistent settings across terminal sessions
- Environment variable expansion using
${VAR_NAME}syntax - Comments support for better documentation
- Tilde expansion for home directory paths
- New
configsubcommand with init, show, edit, and validate operations - Configuration precedence: CLI args > env vars > config file > defaults
- Completely redesigned help system following Unix conventions
- Examples shown first for better discoverability
- Clear SYNOPSIS sections
- Common workflows documented
- Exit status codes for scripting
- Added standalone CLI build script (
scripts/build-cli-standalone.sh)- Build without npm/Node.js dependencies
- System-wide installation support with
--installflag
- Added comprehensive test coverage for AI analysis functionality
- Fixed all SwiftLint violations
- Improved error handling and user feedback
- Better code organization and maintainability
- Added configuration file documentation to README
- Expanded CLI usage examples
- Documented AI analysis capabilities
- Added example scripts and automation workflows
- Removed outdated tool-description.md
- Migrated from direct environment variable usage to ConfigurationManager
- Implemented proper JSONC parser with comment stripping
- Added thread-safe configuration loading
- Improved Swift-TypeScript interoperability
- Version bump to 2.0 reflects the significant expansion from MCP-only to dual CLI/MCP tool
- Configuration file takes precedence over some environment variables (but maintains backward compatibility)
- Fixed ArgumentParser command structure for proper subcommand execution
- Resolved configuration loading race conditions
- Fixed help text display issues
- Swift ArgumentParser 1.5.1
- Maintained all existing npm dependencies
- Initial MCP server implementation
- Basic screenshot capture functionality
- Window and application listing
- Integration with Claude Desktop and Cursor IDE