github TypeScript re-analysis due

wende/macbeth

github

Playwright for macOS native apps

maintainer
wende
license
MIT
first seen
2026-07-14
last seen
2026-08-26
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 26 tools
transport stdio · http verified reported listed in the official MCP registry counts 26 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • begin_activity
  • click
  • connect_app
  • dump_attributes
  • end_activity
  • extract_text
  • fill
  • get_element
  • list_apps
  • list_daemon_methods
  • list_menu_bar
  • list_shortcuts
  • list_skills
  • list_windows
  • load_skill
  • pin_handle
  • press_key
  • press_keys
  • query_tree
  • read_form
  • run_applescript
  • run_shortcut
  • run_skill_script
  • screenshot
  • select_menu_item
  • wait_for
skills & danger signals github-tarball
code evidence vv0.2.4 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 255

filesystem 25

  • fs wende-macbeth-6605ee1/client/bin/macbeth.mjs :3 import { existsSync, readFileSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/client/scripts/clean-skills.mjs :2 import { existsSync, rmSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/client/scripts/sync-skills.mjs :2 import { cpSync, existsSync, mkdirSync, rmSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/daemon.test.ts :2 import { mkdtemp, rm, writeFile } from "node:fs/promises";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/demo-background.test.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/demo-presentation.test.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/mcp-demo-foreground.e2e.test.ts :20 import { existsSync, mkdirSync, statSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/mcp-registry-metadata.test.ts :1 import { existsSync, readFileSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/mcp-skills.test.ts :1 import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/mcp-usage-log.test.ts :1 import { mkdtemp, readFile, readdir, rm } from "node:fs/promises";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/request-logging.test.ts :1 import { mkdtemp, readdir, readFile, rm } from "node:fs/promises";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/screenshots.test.ts :1 import { readFile, stat } from "node:fs/promises";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/script-timeout-isolation.test.ts :2 import { mkdtemp, rm } from "node:fs/promises";
  • fs (weak) wende-macbeth-6605ee1/client/src/__tests__/test-harness.e2e.test.ts :2 import { existsSync } from "node:fs";
  • fs wende-macbeth-6605ee1/client/src/daemon.ts :2 import * as fs from "node:fs";
  • fs wende-macbeth-6605ee1/client/src/mcp-skills.ts :1 import { existsSync } from "node:fs";
  • fs wende-macbeth-6605ee1/client/src/mcp-usage-log.ts :1 import { appendFile, mkdir, rename, readdir, rm, stat } from "node:fs/promises";
  • fs wende-macbeth-6605ee1/client/src/mcp.ts :4 import { readFile } from "node:fs/promises";
  • fs wende-macbeth-6605ee1/client/src/screenshots.ts :2 import { mkdir, writeFile } from "node:fs/promises";
  • fs wende-macbeth-6605ee1/client/src/update.ts :2 import { readFileSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/client/test-electron/run.mjs :18 import { mkdtempSync, rmSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/scripts/ci-e2e-test.mjs :20 import { mkdtempSync, writeFileSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/scripts/demo-background.mjs :14 import { existsSync, mkdirSync, statSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/scripts/demo-mcp.mjs :8 import { existsSync, mkdirSync } from "node:fs";
  • fs (weak) wende-macbeth-6605ee1/scripts/demo-presentation.mjs :21 import { existsSync, mkdirSync } from "node:fs";

shell / exec 14

  • shell wende-macbeth-6605ee1/client/bin/macbeth.mjs :2 import { spawnSync } from "node:child_process";
  • shell (weak) wende-macbeth-6605ee1/client/src/__tests__/cli.test.ts :1 import { spawnSync } from "node:child_process";
  • shell (weak) wende-macbeth-6605ee1/client/src/__tests__/mcp-demo-foreground.e2e.test.ts :19 import { execFileSync } from "node:child_process";
  • shell (weak) wende-macbeth-6605ee1/client/src/__tests__/test-harness.e2e.test.ts :1 import { execFileSync } from "node:child_process";
  • shell wende-macbeth-6605ee1/client/src/applescript.ts :1 import { spawnSync } from "node:child_process";
  • shell wende-macbeth-6605ee1/client/src/daemon.ts :1 import { spawn, type ChildProcess } from "node:child_process";
  • shell wende-macbeth-6605ee1/client/src/mcp.ts :3 import { execFile, spawnSync } from "node:child_process";
  • shell wende-macbeth-6605ee1/client/src/native-bridge.ts :1 import { spawnSync } from "node:child_process";
  • shell wende-macbeth-6605ee1/client/src/shell.ts :1 import { spawnSync } from "node:child_process";
  • shell wende-macbeth-6605ee1/client/src/update.ts :1 import { spawn } from "node:child_process";
  • shell (weak) wende-macbeth-6605ee1/client/test-electron/run.mjs :16 import { execFileSync, spawn } from "node:child_process";
  • shell (weak) wende-macbeth-6605ee1/scripts/demo-background.mjs :13 import { execFileSync, spawn } from "node:child_process";
  • shell (weak) wende-macbeth-6605ee1/scripts/demo-mcp.mjs :7 import { execFileSync } from "node:child_process";
  • shell (weak) wende-macbeth-6605ee1/scripts/demo-presentation.mjs :20 import { execFileSync } from "node:child_process";

network 3

  • net (weak) wende-macbeth-6605ee1/client/src/__tests__/request-logging.test.ts :2 import { connect, createConnection } from "node:net";
  • net (weak) wende-macbeth-6605ee1/client/src/__tests__/script-timeout-isolation.test.ts :1 import * as net from "node:net";
  • net wende-macbeth-6605ee1/client/src/rpc.ts :1 import * as net from "node:net";

secrets 1

  • secrets wende-macbeth-6605ee1/client/src/update.ts :93 const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN;

tool registrations 26

  • list_apps wende-macbeth-6605ee1/client/src/mcp.ts :120
  • list_daemon_methods wende-macbeth-6605ee1/client/src/mcp.ts :128
  • begin_activity wende-macbeth-6605ee1/client/src/mcp.ts :136
  • end_activity wende-macbeth-6605ee1/client/src/mcp.ts :144
  • connect_app wende-macbeth-6605ee1/client/src/mcp.ts :154
  • query_tree wende-macbeth-6605ee1/client/src/mcp.ts :187
  • list_windows wende-macbeth-6605ee1/client/src/mcp.ts :209
  • click wende-macbeth-6605ee1/client/src/mcp.ts :235
  • fill wende-macbeth-6605ee1/client/src/mcp.ts :258
  • wait_for wende-macbeth-6605ee1/client/src/mcp.ts :280
  • press_key wende-macbeth-6605ee1/client/src/mcp.ts :316
  • press_keys wende-macbeth-6605ee1/client/src/mcp.ts :333
  • screenshot wende-macbeth-6605ee1/client/src/mcp.ts :353
  • extract_text wende-macbeth-6605ee1/client/src/mcp.ts :379
  • get_element wende-macbeth-6605ee1/client/src/mcp.ts :421
  • dump_attributes wende-macbeth-6605ee1/client/src/mcp.ts :441
  • pin_handle wende-macbeth-6605ee1/client/src/mcp.ts :452
  • read_form wende-macbeth-6605ee1/client/src/mcp.ts :461
  • select_menu_item wende-macbeth-6605ee1/client/src/mcp.ts :495
  • list_menu_bar wende-macbeth-6605ee1/client/src/mcp.ts :517
  • run_applescript wende-macbeth-6605ee1/client/src/mcp.ts :537
  • list_shortcuts wende-macbeth-6605ee1/client/src/mcp.ts :610
  • run_shortcut wende-macbeth-6605ee1/client/src/mcp.ts :621
  • list_skills wende-macbeth-6605ee1/client/src/mcp.ts :674
  • load_skill wende-macbeth-6605ee1/client/src/mcp.ts :679
  • run_skill_script wende-macbeth-6605ee1/client/src/mcp.ts :692

install hooks 1

  • prepack wende-macbeth-6605ee1/client/package.json :45 ../scripts/build-daemon.sh && npm run build && node ./scripts/sync-skills.mjs