Workflows

Workflows and manifest.json

A workflow is a package that adds web-app launchers and search commands to conduit. Write one manifest.json, zip it, and drop it onto the window.

Installing

  1. Zip a folder containing a manifest.json
  2. Drag & drop the zip onto the conduit window

The manifest.json is recognized at the zip root or one directory deep — a GitHub "Code → Download ZIP" archive (repo-main/manifest.json) works as-is.

The manifest.json spec

Top level:

FieldTypeDescription
idrequired string Package identifier. Alphanumerics plus - _ . only (it becomes the install folder name). Same id = overwrite target
namerequired string Display name
description string Shown in the manage view's Workflows tab
icon string A single emoji. Default icon for apps that lack their own
appsrequired array App definitions. At least one

Each element of apps[]:

FieldTypeDescription
namerequired string App name. Keyword-less queries fuzzy-match against it
urlrequired string URL to open. Must start with http:// or https://. Include {query} to make it a search command
keyword string Trigger keyword. yt cats — keyword, space, search terms — URL-encodes the terms into {query}
icon string A single emoji. Falls back to the package icon, then 🌐
description string Shown as the result's subtitle

Full sample

{
  "id": "web-essentials",
  "name": "Web Essentials",
  "description": "Everyday web apps (sample)",
  "icon": "🌐",
  "apps": [
    { "name": "GitHub", "url": "https://github.com", "icon": "🐙" },
    {
      "name": "YouTube Search",
      "url": "https://www.youtube.com/results?search_query={query}",
      "keyword": "yt",
      "icon": "▶️",
      "description": "yt <terms> searches YouTube"
    },
    {
      "name": "Google Translate",
      "url": "https://translate.google.com/?sl=auto&tl=ja&text={query}",
      "keyword": "tr",
      "icon": "🌏"
    }
  ]
}

This sample also lives in the repository at docs/workflows-example. Once installed:

Search behavior

Validation

A zip fails to import when any of these hold:

For safety, only http(s) URLs can be opened — file:// and custom schemes are rejected at run time too. Zip paths are guarded against traversal (zip-slip).