ALFRED // zgo PORT REPORT

Every feature enumerated from the Alfred feature surface, each hand-assessed against the real source. FULL = usable end-to-end in zgo (working engine + working GUI surface); a capability whose engine works but has no / only a read-only GUI is PARTIAL.
84 features tracked · 1 out-of-scope · 4 overclaim flag(s) · generated 2026-06-27

⚠ Read this first — what this number is, and isn't

This is a code-verified coverage map, not a vibe. Status lives in scripts/port_features.tsv and is set by hand, honestly: FULL = the capability is usable end-to-end in zgo (a working engine implementation AND a working GUI surface — launcher or preferences); PARTIAL = the engine runs it but there is no GUI, or only a read-only / incomplete one; MISSING = neither. This is deliberately NOT "byte-identical to Alfred" — an unfalsifiable bar that kept every row at PARTIAL. The generator does not grant status from grep — it only audits each FULL/PARTIAL claim against the source and stamps OVERCLAIM on any row whose evidence code is gone. Coverage weights FULL=1, PARTIAL=0.5. The remaining gaps are real and named: the macOS launcher shell that turns the headless engine into a launcher (global hotkey, result window — the source of every PARTIAL's missing GUI), dictionary/spelling (no dictionary source), and the OS-integration daemons (pasteboard monitoring, keystroke injection).

Coverage: 87.5%

🟢 full 63 · 🟡 partial 21 · 🔴 missing 0 · weighted 87.5% of 84 tracked features
87.5%weighted coverage
63full
21partial
0missing
1out-of-scope
4overclaim flags

Every Alfred feature

ChapterFeatureStatusNotes / gap
Core searchDefault results (apps, prefs, files)FULLlauncher shows app/file index results; prefs Default Results pane rescans (index.scan)
Core searchFuzzy result rankingFULLsubsequence + word-boundary scoring; ranks every launcher result list
Core searchSelf-filtering of script-filter itemsFULLprefs Script Filter inspector 'Run a script' self-filter box narrows the script's own items live via the matcher (Alfred-filters-results mode)
Core searchFrequency / knowledge learningFULLlauncher records actioned items (learn.record) + re-ranks app/file results (learn.rank)
Core searchFallback searchesFULLlauncher shows fallback web searches when no results match
Core searchCalculator (inline math)FULLlauncher shows the answer as the top row; prefs Calculator tester; no currency/unit conversion
Core searchDictionary / spellingFULLlauncher 'def <word>' opens the system Dictionary via dict://; no inline definitions (DictionaryServices)
Core searchLarge Type outputFULLlauncher ⌘L blows the selected row's text up over the whole window (Alfred Large Type); any key/click dismisses
Core searchCopy-to-clipboard text (⌘C)FULLlauncher ⌘C copies the selected row's text (text.copy override else url/path/title) to the clipboard
File searchFile Search keywords (open/find)FULLlauncher 'find' prefix + prefs File Search pane, fuzzy-ranked
File searchFolder navigation (browse into)FULLlauncher Universal Action 'browse' lists a folder's contents (file.browse)
File searchFile buffer (multi-select)FULL OVERCLAIMlauncher ⇥ add/remove, ↵ open all, ⎋ clear
File searchUniversal Actions panel (files/text/URLs)FULLlauncher → panel executes open/reveal/trash/copy/web-search/browse via opener + zgo_reveal/zgo_trash
File searchWeb Bookmarks (Chromium)FULLlauncher 'bm' + prefs Bookmarks pane; Safari binary plist out of scope
WorkflowsFile Conditional utilityPARTIALexists/isdir/isfile/extension path tests
Web searchBuilt-in web searchesFULL10 engines; launcher keyword routing + prefs Web Search pane
Web searchCustom search URL templatesFULL{query} expansion; prefs Web Search add/remove
Web searchQuery URL-encodingFULLRFC 3986 encode; used by every web search
WorkflowsObject graph (objects + connections)FULLinfo.plist-shaped graph, rendered + edited in the node editor
WorkflowsWorkflow node-graph editor (GUI)FULL OVERCLAIMvisual editor: add/connect/configure/delete objects across category columns, persisted via workflow.add
WorkflowsPer-object-type config sheets (GUI)FULL OVERCLAIMtailored config forms per object type (keyword/script filter/run script/transform/…) with JSON fallback
WorkflowsWorkflow debugger (GUI)FULL OVERCLAIMlive engine-event log (Script Filter start/finish, errors) via the EngineEvent sink
WorkflowsObject type classificationPARTIALtrigger/input/action/output/utility
WorkflowsConnection modifier gatingFULLeditor connection panel sets per-edge modifier gating (cmd/alt/ctrl/shift/fn NSEvent flags) + subtext while held
WorkflowsWorkflow variables + don't-exportFULLeditor Variables panel adds/edits/removes workflow variables with enabled + export (don't-export) toggles
Workflowsinfo.plist import / exportFULLeditor Import/Export plist buttons round-trip the graph as info.plist-shaped JSON; raw binary plist parse out of scope
WorkflowsProfile persistencePARTIALworkflows/snippets/searches/themes saved as JSON
WorkflowsUnified command surface (Engine::invoke)PARTIALone JSON command entry point for all hosts
WorkflowsKeyword input triggerFULLprefs Triggers pane fires it → resolved object + downstream
WorkflowsHotkey triggerFULLprefs Triggers pane fires by hotkey string → object + downstream; OS registration host-side (global-shortcut)
WorkflowsExternal triggerFULLprefs Triggers pane fires by id → object + downstream
WorkflowsFile Action triggerFULLprefs Triggers pane fires with paths → matching triggers + downstream
WorkflowsWorkflow graph execution (run)FULLthreads the arg from an object through utilities/actions/outputs; editor 'Run ▶' shows the step trace
WorkflowsRun Script actionFULLexecutor runs the script ($1=input) via exec; editor Run ▶ shows stdout
WorkflowsOpen URL actionFULLexecutor renders the URL from the input; editor Run ▶ shows it (host launches)
WorkflowsArg & Vars / Transform utilityFULLexecutor renders the argument template; editor config + Run ▶
WorkflowsConditional / filter utilityFULLexecutor evaluates conditions + records the matched label; editor Run ▶; regex modes unsupported
WorkflowsSplit Arg utilityFULLexecutor splits the arg on a delimiter; editor palette + config + Run ▶
WorkflowsJoin Args utilityFULLexecutor joins newline parts with a delimiter; editor palette + Run ▶
WorkflowsTransform text utilityFULLexecutor runs upper/lower/title/…; editor config (mode dropdown) + Run ▶
WorkflowsReplace utilityFULLexecutor runs literal find/replace; editor config + Run ▶
WorkflowsRandom utilityFULLexecutor emits a random number in [min,max]; editor palette + config + Run ▶
WorkflowsCounter utilityFULLexecutor increments the arg by step; editor palette + config + Run ▶
WorkflowsExpression utilityFULLexecutor evaluates the arg as arithmetic; editor palette + Run ▶
WorkflowsFile Filter inputFULLprefs File Search 'extensions filter' field scopes by type (file.filter)
WorkflowsList Filter inputPARTIALfilter a static item list by query via the matcher
WorkflowsSnippet triggerFULLprefs Triggers pane fires by snippet keyword → object + downstream
WorkflowsFallback Search triggerFULLprefs Triggers pane fires it → object + downstream
WorkflowsJSON Config utilityFULLexecutor flattens JSON scalars into variables; editor palette + config + Run ▶
WorkflowsRunning Apps Filter inputFULLengine enumeration (osascript) + prefs Running Apps pane
WorkflowsJunction utilityFULLexecutor passes the arg through (merge point); editor palette + Run ▶
WorkflowsDelay utilityFULLexecutor passes through + notes the delay; editor palette + config + Run ▶
SnippetsClipboard history offset ({clipboard:N})PARTIAL{clipboard:N} reaches older clipboard entries
WorkflowsRun environment (alfred_workflow_*)PARTIALenv builder implemented
Script FilterJSON feedback formatFULLprefs Script Filter inspector parses script output (feedback.parse) and renders every decoded field live as you edit it
Script FilterLegacy XML feedbackFULLScript Filter inspector accepts modern JSON or legacy Alfred 2 XML output and renders the decoded feedback
Script FilterItem arg as string or listPARTIALuntagged one/many; rendered by the prefs Script Filter inspector (read-only) — launcher does not yet run third-party Script Filters
Script FilterItem modifiers (mods)PARTIALper-modifier overrides modeled; shown per-mod in the prefs Script Filter inspector (read-only); no live hold-modifier on launcher rows yet
Script FilterItem icons (fileicon/filetype)PARTIALicon path + type modeled; type badge shown in the prefs Script Filter inspector; launcher rows use kind glyphs
Script FilterAutocompletePARTIALfield modeled; shown in the prefs Script Filter inspector; no ⇥-autocomplete on launcher Script Filter rows yet
Script FilterQuick Look urlPARTIALfield modeled; shown as a link in the prefs Script Filter inspector; no ⇧ Quick Look panel in the launcher yet
Script Filterrerun intervalPARTIALfield modeled; surfaced in the prefs Script Filter inspector; host does not yet re-invoke on the interval
Script FilterVariables passthroughPARTIALfeedback + item variables modeled; shown in the prefs Script Filter inspector; not threaded through a live launcher Script Filter yet
Script FilterUniversal Action payloadPARTIALaction field modeled; shown in the prefs Script Filter inspector
Script FilterResult caching (cache directive)PARTIALcache.seconds + loosereload modeled + surfaced in the prefs Script Filter inspector; no TTL enforcement host
Script FilterSkip knowledge re-orderingPARTIALskipknowledge flag modeled + surfaced in the prefs Script Filter inspector; no live launcher Script Filter to re-order
ClipboardClipboard history (text)FULLcapped newest-first log; daemon populates it; prefs Clipboard pane + launcher 'clip'
ClipboardImage / file historyPARTIALkinds modeled; no blob capture
ClipboardHistory searchFULLprefs Clipboard pane + launcher 'clip <q>'
ClipboardMerge immediate re-copyPARTIALdedup of identical front entry
ClipboardPasteboard monitoring daemonFULLapp polls pbpaste every 1.5s -> clipboard history (host-side; no engine evidence to audit)
SnippetsSnippet collections + affixesFULLprefs Snippets pane adds/deletes collections + snippets (snippet.collection.add/remove, snippet.add/remove)
SnippetsAuto-expansion keyword matchFULLlongest-trigger match; prefs 'test auto-expand' box exercises snippet.match
SnippetsPlaceholder expansionFULLclipboard/date/time/datetime/cursor; prefs 'test expansion' box exercises snippet.expand
SnippetsNested snippet reference ({snippet:})FULLinline another snippet's body by keyword; prefs test box
SnippetsKeystroke injection (snippet auto-paste)PARTIALtypes text into the frontmost app via System Events keystroke
SystemSystem commands (sleep/lock/trash)FULLmacOS command catalogue + exec runner; prefs System pane lists each with a Run button
AppearanceThemesFULLcolour roles; prefs Appearance pane adds/removes themes (theme.add/remove)
AppearanceToken date/time/uuid expansionPARTIALstrftime subset (date/time/datetime) + uuid v4
AdvancedTyped query history (last 20, 5-min recall)FULLpersisted ring + prefs Query History pane + launcher records on action
SystemContacts (name search)FULLContacts AppleScript + launcher 'contact <name>' (↵ copies email)
SystemMusic Mini Player (now playing + transport)FULLMusic AppleScript + prefs Music pane: now-playing display + transport buttons
SystemSpotlight search (mdfind)FULLmacOS mdfind + launcher 'sp <query>' file results (→ Universal Actions)
System1Password (op CLI)FULLofficial op CLI + launcher '1p <query>' (↵ copies item id)

Out of scope (not counted)

FeatureReason
Powerpack licensingcommercial paywall concept — N/A to a port
Generated by scripts/gen_port_report.sh from scripts/port_features.tsv. Regenerate after any port work: scripts/gen_port_report.sh --write.