{
  "slug": "io-github-ghorbelhamdi-buddy-phone-bridge",
  "name": "Buddy phone tools",
  "auditedAt": "2026-11-02T12:22:27Z",
  "version": "1.1.0",
  "ecosystem": "npm",
  "package": "buddy-phone-bridge",
  "disclaimer": "Automated smoke test, not a security guarantee.",
  "complete": true,
  "checks": {
    "versionPin": {
      "status": "pass",
      "detail": "Pinned npm buddy-phone-bridge@1.1.0",
      "version": "1.1.0"
    },
    "vulnerabilities": {
      "status": "pass",
      "detail": "No critical, high, or medium advisories were returned.",
      "critical": 0,
      "high": 0,
      "medium": 0,
      "low": 0,
      "packagesScanned": 1
    },
    "license": {
      "status": "pass",
      "detail": "Apache-2.0",
      "spdx": "Apache-2.0"
    },
    "installScripts": {
      "status": "pass",
      "detail": "No preinstall, install, postinstall, or prepare script.",
      "scripts": []
    },
    "secrets": {
      "status": "pass",
      "detail": "No credential patterns in the published artifact.",
      "findings": []
    },
    "packageSize": {
      "status": "pass",
      "detail": "25881 bytes",
      "bytes": 25881
    },
    "activity": {
      "status": "pass",
      "detail": "Active 6 days ago.",
      "ageDays": 6
    },
    "sandbox": {
      "status": "pass",
      "detail": "MCP handshake completed. 28 tools listed.",
      "starts": true,
      "handshake": true,
      "timeToReadyMs": 52,
      "tools": [
        {
          "name": "read_screen",
          "description": "Read what is on the phone screen as a list of UI elements with ids, text, and tap coordinates. Call this first and after every action to see the result. Element ids are only valid until the next read_screen."
        },
        {
          "name": "tap",
          "description": "Tap an element (by id from the last read_screen) or a screen coordinate in pixels."
        },
        {
          "name": "long_press",
          "description": "Press and hold an element (by id from the last read_screen) or a screen coordinate in pixels, for about 0.7 s. Use it for what apps put behind a long press: a message's or item's menu (reply, copy, delete, react), selecting items or text, m"
        },
        {
          "name": "type_text",
          "description": "Type into the focused text field (or the given element). Replaces its content unless append is true. Set submit to press the keyboard's enter/send action afterwards."
        },
        {
          "name": "scroll",
          "description": "Scroll a list or page by about a third of its height or width, to reach content that isn't on screen yet: 'down' shows what's further down (like reading on), 'up' goes back, 'left'/'right' for carousels and tabs. Without element it scrolls "
        },
        {
          "name": "swipe",
          "description": "Drag a finger in a straight line from (x1, y1) to (x2, y2), in screen pixels. Use it for gestures scroll doesn't cover: moving a slider, swiping a card or a message aside, pulling down to refresh, dragging on a map. A very short swipe count"
        },
        {
          "name": "press",
          "description": "Press one of Android's system buttons: back (leave the current screen or close a dialog or the keyboard), home (go to the home screen), recents (the recent apps list), notifications (pull down the notification shade), quick_settings (open Q"
        },
        {
          "name": "open_app",
          "description": "Open an installed app by its name (e.g. 'Messenger') or package name."
        },
        {
          "name": "list_apps",
          "description": "List launchable apps with their package names."
        },
        {
          "name": "open_url",
          "description": "Open a link on the phone the way tapping it would: https:// pages open in the user's browser or in the app that handles them (a YouTube link in YouTube), and deep links open their app (mailto: an email draft, tel: the dialer with the number"
        },
        {
          "name": "screenshot",
          "description": "Take a screenshot (JPEG). Use only when read_screen is not enough (images, games, canvas UIs). The reply says how to convert image coordinates to screen pixels."
        },
        {
          "name": "wait",
          "description": "Wait for the UI to settle, up to 10000 ms."
        },
        {
          "name": "confirm",
          "description": "Ask the user to approve an action in the Buddy bubble and wait for the answer. REQUIRED before sending messages, posting, buying, deleting, or changing settings. Show the exact text or action. Returns APPROVED, DENIED, or CHANGES REQUESTED "
        },
        {
          "name": "ask",
          "description": "Ask the user a question in the Buddy bubble and wait for the answer: 2 to 4 answer buttons, and the user can always type their own answer instead. Use it when you need the user to choose or decide (which reply, which item, which time) inste"
        },
        {
          "name": "point_out",
          "description": "Show the user where to look or what to do on the screen: a box, circle or arrow with a short label around up to 6 elements, drawn over the app without blocking their touches. When the user does what a mark points at (taps that button, flips"
        },
        {
          "name": "notify",
          "description": "Show a short status line in the Buddy bubble without stopping."
        },
        {
          "name": "reply_notification",
          "description": "Answer the notification that started this chat through its own reply field, without opening the app. Only in chats started by one of the user's notification rules, when the notification has a reply field. Buddy shows the user an approval ca"
        },
        {
          "name": "install_apk",
          "description": "(Needs Linux tools) Open Android's installer for an APK built in Buddy's Linux, e.g. /root/.buddy/work/myapp/build/app.apk, or served by another app on this phone at a local URL (http://127.0.0.1:<port>/app.apk, e.g. from Termux). The user "
        },
        {
          "name": "update_buddy",
          "description": "Check whether a newer Buddy is out (the official GitHub release) and what's new; with install=true, download it and open Android's installer. Use it when the user asks to update Buddy or whether there's a new version. Only the user can tap "
        },
        {
          "name": "wait_for_install",
          "description": "After opening the Android installer for an APK, wait until the user has tapped Install/Update and confirmed. Returns as soon as the package is installed (at least min_version_code if given), or early if the installer is no longer on screen,"
        },
        {
          "name": "browser_open",
          "description": "Open a web page in Buddy's background browser (a separate browser the user can watch in this chat; it doesn't use the phone's screen). Returns the page as text, like browser_read."
        },
        {
          "name": "browser_read",
          "description": "Read the whole page in the background browser as text. Items you can use are numbered, e.g. [12] button \"Add to cart\"; the numbers stay valid until the page changes. Long pages come in parts: pass from to read on."
        },
        {
          "name": "browser_click",
          "description": "Tap an item on the page by its number from browser_read (a link, button, checkbox, \u2026)."
        },
        {
          "name": "browser_type",
          "description": "Type into a text field by its number from browser_read (replaces its text unless append is true), or pick an option of a select by its text. Set submit to press Enter afterwards."
        },
        {
          "name": "browser_scroll",
          "description": "Scroll the page in the background browser (loads more on endless pages)."
        },
        {
          "name": "browser_screenshot",
          "description": "A picture of what the background browser shows, for images, maps or layouts browser_read can't describe."
        },
        {
          "name": "browser_back",
          "description": "Go back to the previous page in the current tab of the background browser, like a browser's back button. If the page warns that leaving loses unsaved changes, Buddy stays the first time and says so. Returns where the tab is now, or that the"
        },
        {
          "name": "browser_tabs",
          "description": "Manage the background browser's tabs (this chat's own): with no arguments, list them as numbered lines with title and address, the current one marked; with switch_to, make that tab current (the browser_* tools act on the current tab); with "
        }
      ],
      "toolCount": 28,
      "resourceCount": 0,
      "promptCount": 0,
      "stderrExcerpt": "",
      "network": "disabled",
      "networkAttemptedWhileOffline": false,
      "outboundHosts": [],
      "requiresCredentials": false
    }
  },
  "tier": "gold",
  "tierReason": "Sandbox handshake completed and the published checks passed.",
  "logExcerpt": ""
}