{
  "name": "scripts",
  "kind": "bundled",
  "title": "Scripts and data files",
  "description": "Lists from shell scripts and data files, with no extension to write: point it at a script that prints JSON lines, a JSON or TOML file, or a folder of script commands. Raycast script commands work as they are.",
  "version": "0.1.0",
  "icon": {
    "tile": {
      "glyph": "󰆍",
      "bg": "slate"
    }
  },
  "author": "pal",
  "spec": "github:zcag/pal/extensions/scripts@v0.17.4",
  "source": "https://github.com/zcag/pal-extensions/tree/HEAD/scripts",
  "commit": "4d2559cf9c04d0133c97d7c897f19a14acb9eace",
  "manifest": {
    "name": "scripts",
    "title": "Scripts and data files",
    "description": "Lists from shell scripts and data files, with no extension to write: point it at a script that prints JSON lines, a JSON or TOML file, or a folder of script commands. Raycast script commands work as they are.",
    "version": "0.1.0",
    "icon": {
      "tile": {
        "glyph": "󰆍",
        "bg": "slate"
      }
    },
    "author": "pal",
    "repo": "bundled",
    "license": "MIT",
    "settings": [
      {
        "kind": "path",
        "id": "config",
        "label": "v1 config",
        "description": "A pal v1 config.toml; every [palette.\u003cname\u003e] in it becomes a palette here.",
        "pick": "file",
        "placeholder": "~/.config/pal/config.toml",
        "default": "~/.config/pal/config.toml"
      },
      {
        "kind": "list",
        "id": "skip",
        "label": "Skip",
        "description": "v1 palette names not to load, because a native extension covers them.",
        "placeholder": "calc",
        "default": [
          "combine",
          "pals",
          "apps",
          "bookmarks",
          "calc",
          "emoji",
          "clipboard"
        ]
      },
      {
        "kind": "path",
        "id": "v1_repo",
        "label": "v1 checkout",
        "description": "The v1 checkout: where github:zcag/pal/... bases resolve when v1's plugin cache (~/.local/share/pal) has no copy, and where a base under a v1 checkout missing on this box is looked up. ~/proj/pal is tried when this path has no plugins.",
        "pick": "folder",
        "default": "~/proj/pal-v1"
      },
      {
        "kind": "path",
        "id": "commands",
        "label": "Script commands",
        "description": "A folder of single-file script commands: every executable in it with a # @pal.title line in its header (or Raycast's # @raycast.title) is one row of the Script Commands palette. Watched: a saved file shows on the next listing.",
        "pick": "folder",
        "placeholder": "~/.config/pal/commands",
        "default": "~/.config/pal/commands"
      },
      {
        "kind": "number",
        "id": "timeout",
        "label": "Script timeout",
        "description": "A list or pick script still running after this is killed.",
        "min": 1,
        "max": 300,
        "unit": "s",
        "default": 30
      },
      {
        "kind": "number",
        "id": "preview_max",
        "label": "Previews at once",
        "description": "An item's preview command runs when the detail pane rests on it; at most this many run at the same time. 0 turns previews off.",
        "min": 0,
        "max": 32,
        "unit": "runs",
        "default": 4
      },
      {
        "kind": "number",
        "id": "ttl",
        "label": "Listing lifetime",
        "description": "A palette that declares no ttl keeps its last listing across restarts and shows for this long before its script runs again; a palette's own ttl wins, and a live palette is exempt (it relists on every show unless it sets its own). Default an hour: scripts are the slow tier, and the root answers from the kept listing meanwhile. 0 runs every script on every start.",
        "min": 0,
        "max": 604800,
        "unit": "s",
        "default": 3600
      }
    ],
    "store": {
      "tagline": "Lists from shell scripts, data files and script commands",
      "category": "developer",
      "features": [
        "Each `[palette.\u003cname\u003e]` in your config becomes its own list in the panel",
        "A data file (JSON, JSON lines or TOML) becomes rows with titles, subtitles, links and sections",
        "A script answers with JSON lines and can copy, open, show a message or drill into another list",
        "Script commands: one row per executable in a folder with a `# @pal.title` header, arguments typed in the bar",
        "Raycast's `@raycast.*` headers work unchanged",
        "Lists that refresh on every keystroke or every open, and a detail pane from a shell command"
      ],
      "permissions": [
        "accessibility"
      ],
      "platforms": [
        "macos",
        "linux"
      ],
      "screenshots": [
        {
          "file": "1-data-file.png",
          "caption": "A data-file palette: the rows of links.json in sections, the table's icon unless a row brings its own"
        },
        {
          "file": "2-script.png",
          "caption": "A script palette: the rows run.sh printed as JSON lines, with sections and tags"
        },
        {
          "file": "3-root.png",
          "caption": "A script palette's rows are searchable from the root: deploy finds both deploy commands and the deploy script"
        },
        {
          "file": "4-commands.png",
          "caption": "Script Commands: one row per script in the folder, its mode on the right, an inline one's latest output as its subtitle"
        },
        {
          "file": "5-command-list.png",
          "caption": "A list-mode command: the lines its script printed become rows of their own"
        },
        {
          "file": "6-command-form.png",
          "caption": "A command with @pal.args asks for them before it runs: here the deploy's target and a note"
        }
      ],
      "actions": [
        {
          "title": "Open",
          "description": "An `open` action on the row's url.",
          "keys": "enter"
        },
        {
          "title": "Copy link",
          "description": "A `copy` action on a row field.",
          "keys": "cmd+c"
        },
        {
          "title": "Select",
          "description": "The default of a script palette without actions: run.sh pick with the row in the environment.",
          "keys": "enter"
        },
        {
          "title": "Run",
          "description": "A script command, as its mode says: hud shows the first output line, show the whole output, list its rows, silent nothing. Its @pal.args are typed in the bar first ($1, $2, ... in header order). Asks first with @pal.confirm.",
          "keys": "enter"
        },
        {
          "title": "Open script",
          "description": "The command's file in its editor.",
          "keys": "cmd+o"
        },
        {
          "title": "Copy output",
          "description": "Runs the command and copies what it printed; its @pal.args are typed in the bar first.",
          "keys": "cmd+c"
        },
        {
          "title": "Copy path",
          "description": "The command's file path.",
          "keys": "cmd+shift+c"
        }
      ]
    }
  },
  "playable": false,
  "updated_at": "2026-11-02T04:38:11Z",
  "url": "https://pal.cagdas.io/extensions/scripts",
  "tagline": "Lists from shell scripts, data files and script commands",
  "category": "developer",
  "screenshots": [
    "https://pal.cagdas.io/extensions/scripts/screenshots/1-data-file-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/1-data-file.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/2-script-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/2-script.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/3-root-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/3-root.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/4-commands-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/4-commands.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/5-command-list-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/5-command-list.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/6-command-form-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/6-command-form.png"
  ],
  "panel_screenshots": [
    "https://pal.cagdas.io/extensions/scripts/screenshots/1-data-file.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/2-script.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/3-root.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/4-commands.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/5-command-list.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/6-command-form.png"
  ],
  "bar_screenshots": [],
  "panel_screenshots_dark": [
    "https://pal.cagdas.io/extensions/scripts/screenshots/1-data-file-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/2-script-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/3-root-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/4-commands-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/5-command-list-dark.png",
    "https://pal.cagdas.io/extensions/scripts/screenshots/6-command-form-dark.png"
  ],
  "bar_screenshots_dark": [],
  "has_bar": false,
  "bar_items": [],
  "has_links": false,
  "links": [],
  "multi": false,
  "has_readme": true
}
