{
  "name": "otp",
  "kind": "registry",
  "title": "Verification Codes",
  "description": "One-time codes from your recent text messages, newest first, with who sent them. Enter pastes the code into the app in front; a bar item shows a new code as it arrives.",
  "version": "0.1.0",
  "icon": {
    "tile": {
      "glyph": "󰍩",
      "bg": "green"
    }
  },
  "author": "pal",
  "spec": "github:zcag/pal/extensions/otp@v0.17.4",
  "source": "https://github.com/zcag/pal-extensions/tree/HEAD/otp",
  "commit": "4d2559cf9c04d0133c97d7c897f19a14acb9eace",
  "manifest": {
    "name": "otp",
    "title": "Verification Codes",
    "description": "One-time codes from your recent text messages, newest first, with who sent them. Enter pastes the code into the app in front; a bar item shows a new code as it arrives.",
    "version": "0.1.0",
    "icon": {
      "tile": {
        "glyph": "󰍩",
        "bg": "green"
      }
    },
    "author": "pal",
    "repo": "bundled",
    "settings": [
      {
        "kind": "number",
        "id": "hours",
        "label": "Look back",
        "description": "How many hours of messages to scan for codes.",
        "min": 1,
        "max": 720,
        "unit": "hours",
        "default": 24
      },
      {
        "kind": "list",
        "id": "senders",
        "label": "Ignore senders",
        "description": "Senders whose messages are never listed, as Messages shows them (a shortcode like AKBANK, a number, an email). Case does not matter.",
        "placeholder": "AKBANK",
        "default": []
      },
      {
        "kind": "path",
        "id": "db",
        "label": "Messages database",
        "description": "The chat.db to read. ~ is expanded.",
        "pick": "file",
        "default": "~/Library/Messages/chat.db"
      },
      {
        "kind": "path",
        "id": "contacts",
        "label": "Contacts database",
        "description": "An AddressBook-v22.abcddb whose names replace phone numbers; empty means every source under ~/Library/Application Support/AddressBook.",
        "pick": "file",
        "default": ""
      }
    ],
    "palettes": {
      "otp": {
        "title": "Verification Codes",
        "description": "Codes from the last day of messages, Today and Earlier.",
        "kind": "live",
        "remember": false,
        "lazy": true,
        "keys": [
          {
            "keys": "enter",
            "title": "Paste the code"
          },
          {
            "keys": "cmd+c",
            "title": "Copy the code"
          },
          {
            "keys": "cmd+shift+c",
            "title": "Copy the sender"
          }
        ]
      }
    },
    "bar": {
      "latest-code": {
        "title": "Latest code",
        "description": "The newest verification code on the strip for a minute after it arrives; the popover shows it large with the sender, the minute counting down and the two codes before it; Enter copies it.",
        "refresh": {
          "every": 10
        },
        "mocks": {
          "fresh": {
            "title": "A code just arrived",
            "item": {
              "icon": "",
              "title": "482913",
              "color": "green",
              "tooltip": "Akbank: Akbank Mobil giris kodunuz: 482913. Kodu kimseyle paylasmayin."
            }
          },
          "late": {
            "title": "Forty seconds in, the minute nearly up",
            "item": {
              "icon": "",
              "title": "731064",
              "color": "green",
              "tooltip": "Google: G-731064 is your Google verification code."
            }
          },
          "quiet": {
            "title": "No code in the last minute",
            "item": {
              "hidden": true,
              "empty": {
                "icon": "",
                "tooltip": "No recent code"
              }
            }
          }
        },
        "keys": [
          {
            "keys": "enter",
            "title": "Copy the code (concealed, clears after 30 s)"
          },
          {
            "keys": "p",
            "title": "Paste the code into the app in front"
          },
          {
            "keys": "s",
            "title": "Copy the sender"
          },
          {
            "keys": "o",
            "title": "Open the Verification Codes palette"
          }
        ]
      }
    },
    "license": "MIT",
    "store": {
      "tagline": "Paste one-time codes from your text messages",
      "category": "integration",
      "features": [
        "Codes from the last 24 hours of Messages on macOS, newest first, the sender named from Contacts",
        "Spots codes in English and Turkish messages, skipping amounts, dates and phone numbers",
        "A code that just arrived is the first row and shows up at the root",
        "A bar item shows the newest code for a minute, with the sender and the codes before it",
        "Copied codes stay out of clipboard history, and the previous clipboard comes back after 30 seconds"
      ],
      "permissions": [
        "full-disk-access",
        "accessibility"
      ],
      "platforms": [
        "macos"
      ],
      "screenshots": [
        {
          "file": "1-codes.png",
          "caption": "Today's codes and yesterday's: the sender, the message, the code as a green tag, how long ago it came"
        },
        {
          "file": "2-detail.png",
          "caption": "The detail pane: the code large, who sent it with the number and when, the whole message"
        },
        {
          "file": "3-actions.png",
          "caption": "Paste the code into the app in front, copy it (concealed, gone in 30 s), or copy the sender"
        },
        {
          "file": "bar-menubar.png",
          "caption": "On the menu bar: the code that just arrived, in green, for a minute",
          "kind": "bar"
        },
        {
          "file": "bar-popover.png",
          "caption": "A click opens the popover: the code large, who sent it, the minute counting down, the two codes before it; Enter copies",
          "kind": "bar",
          "box": [
            400,
            64,
            840,
            728
          ]
        },
        {
          "file": "bar-popover-late.png",
          "caption": "A code forty seconds in: the bar nearly run down, the item gone twenty seconds later",
          "kind": "bar",
          "box": [
            400,
            64,
            840,
            728
          ]
        },
        {
          "file": "bar-sketchybar.png",
          "caption": "On sketchybar: the key glyph and the code, both green",
          "kind": "bar"
        }
      ],
      "actions": [
        {
          "title": "Paste code",
          "description": "Hides, then pastes into the app that was in front.",
          "keys": "enter"
        },
        {
          "title": "Copy code",
          "keys": "cmd+c"
        },
        {
          "title": "Copy sender",
          "description": "As Messages stores it.",
          "keys": "cmd+shift+c"
        }
      ]
    }
  },
  "playable": false,
  "updated_at": "2026-11-02T04:38:11Z",
  "url": "https://pal.cagdas.io/extensions/otp",
  "tagline": "Paste one-time codes from your text messages",
  "category": "integration",
  "screenshots": [
    "https://pal.cagdas.io/extensions/otp/screenshots/1-codes-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/1-codes.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/2-detail-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/2-detail.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/3-actions-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/3-actions.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-menubar-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-menubar.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-popover-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-popover-late-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-popover-late.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-popover.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-sketchybar-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-sketchybar.png"
  ],
  "panel_screenshots": [
    "https://pal.cagdas.io/extensions/otp/screenshots/1-codes.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/2-detail.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/3-actions.png"
  ],
  "bar_screenshots": [
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-menubar.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-popover-late.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-popover.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-sketchybar.png"
  ],
  "panel_screenshots_dark": [
    "https://pal.cagdas.io/extensions/otp/screenshots/1-codes-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/2-detail-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/3-actions-dark.png"
  ],
  "bar_screenshots_dark": [
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-menubar-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-popover-late-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-popover-dark.png",
    "https://pal.cagdas.io/extensions/otp/screenshots/bar-sketchybar-dark.png"
  ],
  "has_bar": true,
  "bar_items": [
    {
      "id": "latest-code",
      "title": "Latest code",
      "description": "The newest verification code on the strip for a minute after it arrives; the popover shows it large with the sender, the minute counting down and the two codes before it; Enter copies it.",
      "refresh": {
        "every": 10
      },
      "refresh_words": "every 10s"
    }
  ],
  "has_links": false,
  "links": [],
  "multi": false,
  "has_readme": true
}
