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
- Zip a folder containing a
manifest.json - 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.
- Install location:
%APPDATA%\com.conduit.launcher\workflows\<id>\ - Dropping the same
idagain overwrites (updates) it - No restart needed — imports are searchable immediately
The manifest.json spec
Top level:
| Field | Type | Description |
|---|---|---|
| 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[]:
| Field | Type | Description |
|---|---|---|
| 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:
github→ opens GitHub in the browser (name fuzzy match)yt lofi→ searches YouTube for "lofi" (keyword match, ranked top)tr hello→ translates "hello" via Google Translate
Search behavior
- Keyword matches always rank top (score 1.0). Bare
ytwith no terms still hits, with{query}replaced by an empty string - Name fuzzy matches also open with
{query}emptied - Two actions: Open (default browser) and Copy URL
Validation
A zip fails to import when any of these hold:
manifest.jsonis missing (neither at the root nor one level deep)- The JSON is malformed
idornameis emptyidcontains characters outside alphanumerics and-_.appsis empty- Any app entry has an empty
name - A
urldoes not start withhttp(s)://
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).