<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Command Reference</title><link>https://sourceforge.net/p/sucrose/wiki/Command%2520Reference/</link><description>Recent changes to Command Reference</description><atom:link href="https://sourceforge.net/p/sucrose/wiki/Command%20Reference/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 04 Jul 2026 04:15:46 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/sucrose/wiki/Command%20Reference/feed" rel="self" type="application/rss+xml"/><item><title>Command Reference modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Command%2520Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -115,17 +115,19 @@

 ## ArgumentCommandType — settings-page targets

-When the `Interface` command opens the Portal on a specific settings page, the second value is an `ArgumentCommandType` member (parsed as an enum). These map to the Portal settings pages:
+When the `Interface` command opens the Portal on a specific settings page, the second value is an `ArgumentCommandType` member (parsed as an enum). Only two of the seven members are actually honored by the Portal — the rest fall back to the Library page:

 | Member | Opens |
 |--------|-------|
-| `OtherSetting` | [Settings-Other](Settings-Other) |
-| `DonateSetting` | The Donate page *(built but hidden/disabled — not documented in this wiki)* |
+| `OtherSetting` | Not handled — Portal falls back to the Library page |
+| `DonateSetting` | Not handled — Portal falls back to the Library page |
 | `SystemSetting` | [Settings-System](Settings-System) |
 | `GeneralSetting` | [Settings-General](Settings-General) |
-| `PersonalSetting` | [Settings-Personal](Settings-Personal) |
-| `WallpaperSetting` | [Settings-Wallpaper](Settings-Wallpaper) |
-| `PerformanceSetting` | [Settings-Performance](Settings-Performance) |
+| `PersonalSetting` | Not handled — Portal falls back to the Library page |
+| `WallpaperSetting` | Not handled — Portal falls back to the Library page |
+| `PerformanceSetting` | Not handled — Portal falls back to the Library page |
+
+&amp;gt; **Note.** `MainWindow.xaml.cs` only branches on `SystemSetting` and `GeneralSetting`; any other second value (or none) navigates to the default Library page (`SPVPLP`). So emitting e.g. `✔Interface✖&amp;lt;portalpath&amp;gt;✖OtherSetting` opens the Library page, not a settings page.

 Example: the Launcher tray "Settings" action emits

&amp;lt;/portalpath&amp;gt;&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:46 -0000</pubDate><guid>https://sourceforge.netb8d24ccac01804aa054925c922cde0678c3e18b5</guid></item><item><title>Command Reference modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Command%2520Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -101,7 +101,17 @@
 | 30 | `QuotingGoogle` | `[0]=url` | `Processor.Run(url)`. |
 | 31 | `QuotingTranslate` | `[0]=url` | `Processor.Run(url)`. |

-&amp;gt; 🖼️ **Diagram needed:** A flow showing an emitter (Portal/Launcher/engine) building a `✔Command✖value` string → spawning `Sucrose.Commandog.exe` → Commandog parsing the string → switch dispatching to either `Processor.Run`/`Processor.Kill` or a shared helper → the target `.exe` launching.

+    :::mermaid
+    flowchart LR
+        Emitter["Emitter&lt;br/&gt;Portal / Launcher tray / engine"] --&amp;gt;|"builds ✔Command✖value"| Spawn["spawn&lt;br/&gt;Sucrose.Commandog.exe"]
+        Spawn --&amp;gt; Parse{"starts with ✔&lt;br/&gt;and contains ✖ ?"}
+        Parse --&amp;gt;|no| Ignore["ignored"]
+        Parse --&amp;gt;|yes| Switch["Enum.TryParse&amp;lt;CommandType&amp;gt;&lt;br/&gt;switch on command"]
+        Switch --&amp;gt; Run["Processor.Run /&lt;br/&gt;Processor.Kill"]
+        Switch --&amp;gt; Helper["shared helper&lt;br/&gt;Run.Start / Import / Reset / Scheduler"]
+        Run --&amp;gt; Target["target .exe launches"]
+        Helper --&amp;gt; Target
+        Target --&amp;gt; Done["Commandog Environment.Exit(0)"]

 ## ArgumentCommandType — settings-page targets

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:43 -0000</pubDate><guid>https://sourceforge.netf6bd0c9c557418f7cfa568ba39cc4b3726d4d0f6</guid></item><item><title>Command Reference modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Command%2520Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="h-command-reference"&gt;Command Reference&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Stability disclaimer — read this first.&lt;/strong&gt; What follows is Sucrose's &lt;strong&gt;internal IPC command protocol&lt;/strong&gt;, not a stable, supported public command line. End users never type these strings; the Portal, Launcher tray, engines, and helper services build and emit them automatically. The wire format, the command names, the argument order, and the set of commands are &lt;strong&gt;implementation details that can change between versions without notice&lt;/strong&gt;. There is no compatibility guarantee. Use this page to understand how Sucrose's processes talk to each other and for advanced automation at your own risk — do not build production tooling on top of it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sucrose is a multi-process application. One of the two ways its processes coordinate is the &lt;strong&gt;command bus&lt;/strong&gt;: a one-shot, process-launch-based string protocol routed by &lt;code&gt;Sucrose.Commandog.exe&lt;/code&gt; (the "Commandog" dispatcher). A command is not a long-lived connection — it is literally "run (or pass arguments to) an executable with a specially-encoded argument string." This page documents the wire format, the full &lt;code&gt;CommandType&lt;/code&gt; set, the &lt;code&gt;ArgumentCommandType&lt;/code&gt; settings-page targets, and the &lt;code&gt;SchedulerCommandType&lt;/code&gt; auto-start sub-commands. For the live data channels (Pipe/Signal/Transmission) that carry audio and system data, see &lt;a href="./IPC"&gt;IPC&lt;/a&gt;. For who runs the parser, see &lt;a href="./Commandog-Dispatcher"&gt;Commandog-Dispatcher&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="h-contents"&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#the-wire-format"&gt;The wire format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#how-a-command-is-parsed"&gt;How a command is parsed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#typed-value-parsing"&gt;Typed value parsing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#commandtype--the-full-command-table"&gt;CommandType — the full command table&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#argumentcommandtype--settings-page-targets"&gt;ArgumentCommandType — settings-page targets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#schedulercommandtype--auto-start-on-logon"&gt;SchedulerCommandType — auto-start-on-logon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#who-emits-commands"&gt;Who emits commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#special-command-notes"&gt;Special command notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#see-also"&gt;See also&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-the-wire-format"&gt;The wire format&lt;/h2&gt;
&lt;p&gt;Commandog does &lt;strong&gt;not&lt;/strong&gt; use ordinary &lt;code&gt;--flag value&lt;/code&gt; syntax. It uses a custom delimited string built from two special Unicode marker characters defined in &lt;code&gt;Sucrose.Memory.Manage.Readonly.General&lt;/code&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Constant&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Code point&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;StartCommandChar&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;U+2714 (HEAVY CHECK MARK)&lt;/td&gt;
&lt;td&gt;Marks the start of a command string&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;StartCommand&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"✔"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;U+2714&lt;/td&gt;
&lt;td&gt;String form of the start marker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValueSeparatorChar&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✖&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;U+2716 (HEAVY MULTIPLICATION X)&lt;/td&gt;
&lt;td&gt;Separates the command name and each value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValueSeparator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"✖"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;U+2716&lt;/td&gt;
&lt;td&gt;String form of the separator&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The layout is:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;✔&amp;lt;CommandName&amp;gt;✖&amp;lt;Value0&amp;gt;✖&amp;lt;Value1&amp;gt;✖&amp;lt;Value2&amp;gt;...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A complete example, emitted by an engine to reload the wallpaper:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;✔RestartLive✖Unknown
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Encoding gotcha.&lt;/strong&gt; The markers are the literal Unicode characters &lt;code&gt;✔&lt;/code&gt; (U+2714) and &lt;code&gt;✖&lt;/code&gt; (U+2716) — not ASCII letters, not the words "check"/"x". Anything reproducing a command externally must emit these exact code points (UTF-8). Commandog sets &lt;code&gt;Console.InputEncoding&lt;/code&gt; and &lt;code&gt;Console.OutputEncoding&lt;/code&gt; to UTF-8 on startup so the markers survive the process boundary.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h-how-a-command-is-parsed"&gt;How a command is parsed&lt;/h2&gt;
&lt;p&gt;The dispatcher (&lt;code&gt;Sucrose.Commandog/Helper/Arguments.cs&lt;/code&gt;) parses an incoming command like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Recombine the raw arguments with &lt;code&gt;string.Join(" ", args)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Require the combined string to &lt;strong&gt;start with &lt;code&gt;✔&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; to &lt;strong&gt;contain &lt;code&gt;✖&lt;/code&gt;&lt;/strong&gt;. If either check fails, the input is ignored.&lt;/li&gt;
&lt;li&gt;Strip the leading &lt;code&gt;✔&lt;/code&gt; (take &lt;code&gt;Combined[1..]&lt;/code&gt;), then &lt;code&gt;Split('✖')&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;first&lt;/strong&gt; segment is the command &lt;strong&gt;Name&lt;/strong&gt;; the &lt;strong&gt;remaining&lt;/strong&gt; segments are the &lt;strong&gt;Values&lt;/strong&gt;. At least one value is required (total parts ≥ 2).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Enum.TryParse&amp;lt;CommandType&amp;gt;(Name, ignoreCase: true, …)&lt;/code&gt; — &lt;strong&gt;command names are case-insensitive&lt;/strong&gt; (&lt;code&gt;RestartLive&lt;/code&gt;, &lt;code&gt;restartlive&lt;/code&gt;, and &lt;code&gt;RESTARTLIVE&lt;/code&gt; all parse the same).&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;switch&lt;/code&gt; on the parsed &lt;code&gt;CommandType&lt;/code&gt; performs the action.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Commandog itself does almost no work — it parses the command and either launches the right executable (via &lt;code&gt;Sucrose.Shared.Space.Helper.Processor.Run&lt;/code&gt;, a ShellExecute wrapper) or calls a shared helper. It then always &lt;code&gt;Environment.Exit(0)&lt;/code&gt; in its &lt;code&gt;finally&lt;/code&gt; block, so it is genuinely short-lived. See &lt;a href="./Commandog-Dispatcher"&gt;Commandog-Dispatcher&lt;/a&gt; for the full lifecycle.&lt;/p&gt;
&lt;h2 id="h-typed-value-parsing"&gt;Typed value parsing&lt;/h2&gt;
&lt;p&gt;Each value is converted to the type the command expects by &lt;code&gt;Parse.ArgumentValue&amp;lt;T&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requested type&lt;/th&gt;
&lt;th&gt;Conversion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;int.TryParse&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bool.TryParse&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;any &lt;code&gt;enum&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Enum.Parse&lt;/code&gt; (e.g. &lt;code&gt;SchedulerCommandType&lt;/code&gt;, &lt;code&gt;ArgumentCommandType&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;anything else&lt;/td&gt;
&lt;td&gt;returned as the raw string&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The diagnostic &lt;code&gt;Test&lt;/code&gt; command instead uses &lt;code&gt;Miscellaneous.GetType(string)&lt;/code&gt;, which sniffs &lt;code&gt;bool&lt;/code&gt; first, then &lt;code&gt;int&lt;/code&gt;, otherwise falls back to &lt;code&gt;string&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="h-commandtype-the-full-command-table"&gt;CommandType — the full command table&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;CommandType&lt;/code&gt; enum (&lt;code&gt;src/Shared/Sucrose.Shared.Dependency/Enum/CommandType.cs&lt;/code&gt;) defines &lt;strong&gt;31&lt;/strong&gt; commands. The table below lists every member in enum order, the values it consumes (in order), and what the matching &lt;code&gt;switch&lt;/code&gt; case does. "&lt;code&gt;Run(x)&lt;/code&gt;" is &lt;code&gt;Processor.Run&lt;/code&gt; (ShellExecute); many commands simply open a path or URL.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Values (in order)&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(path)&lt;/code&gt; — open a log file/folder.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Kill&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=processName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Kill(name)&lt;/code&gt; — kill all processes by name.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Live&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(path)&lt;/code&gt; — start the live wallpaper engine.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0..]=values&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Prints &lt;code&gt;Test Values:&lt;/code&gt;, then for each value detects its type and writes the parsed value to the console. &lt;strong&gt;Diagnostic only.&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Temp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]&lt;/code&gt;, &lt;code&gt;[1]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Temporary.Delete(v0, v1)&lt;/code&gt; — clear temp/cache.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Wiki&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(url)&lt;/code&gt; — open the wiki URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Reset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Reset.Start(v0)&lt;/code&gt; — reset settings/app.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Bundle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(path)&lt;/code&gt; — run the downloaded bundle/installer &lt;code&gt;.exe&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=updateExe&lt;/code&gt;, optional &lt;code&gt;[1]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;If more than one value: &lt;code&gt;Run(v0, v1)&lt;/code&gt; (hidden, with arg); else &lt;code&gt;Run(v0)&lt;/code&gt;. Launches &lt;code&gt;Sucrose.Update.exe&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Import&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]&lt;/code&gt;, &lt;code&gt;[1]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Import.Start(v0, v1)&lt;/code&gt; — import a theme/package.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Export&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]&lt;/code&gt;, &lt;code&gt;[1]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Export.Start(v0, v1)&lt;/code&gt; — export a theme.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(url)&lt;/code&gt; — open the report page.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Publish&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(url)&lt;/code&gt; — open the publish page.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Startup&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=name&lt;/code&gt;, &lt;code&gt;[1]=path&lt;/code&gt;, &lt;code&gt;[2]=bool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WindowsStartup.SetStartup(name, path, enable)&lt;/code&gt; — per-user Run-key startup.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Cycyling&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(none used)&lt;/td&gt;
&lt;td&gt;Stop live + stop subprocess, &lt;code&gt;Run.Start()&lt;/code&gt;, wait 1500 ms; if &lt;code&gt;Live.Run()&lt;/code&gt; is false, &lt;code&gt;Run.Start()&lt;/code&gt; again. The &lt;strong&gt;wallpaper cycling&lt;/strong&gt; reload. &lt;em&gt;(Spelled "Cycyling" in code.)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Property&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(path)&lt;/code&gt; — launch &lt;code&gt;Sucrose.Property.exe&lt;/code&gt; (no theme arg; edits the currently selected wallpaper).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StartupM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]&lt;/code&gt;, &lt;code&gt;[1]&lt;/code&gt;, &lt;code&gt;[2]=bool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WindowsStartupMachine.SetStartup(...)&lt;/code&gt; — machine-wide startup.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StartupP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]&lt;/code&gt;, &lt;code&gt;[1]=bool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WindowsStartupPriority.SetStartup(...)&lt;/code&gt; — startup priority/approved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Official&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(url)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Watchdog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=watchdogExe&lt;/code&gt;, &lt;code&gt;[1]=encodedPayload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;If exactly two values: &lt;code&gt;Run(v0, v1)&lt;/code&gt; (hidden). Launches &lt;code&gt;Sucrose.Watchdog.exe&lt;/code&gt; with the Base64 crash payload.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Interface&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=portalExe&lt;/code&gt;, optional &lt;code&gt;[1]=settingType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;If more than one value: &lt;code&gt;Run(v0, v1)&lt;/code&gt;; else &lt;code&gt;Run(v0)&lt;/code&gt;. Opens the &lt;strong&gt;Portal&lt;/strong&gt;, optionally on a specific settings page (see &lt;a href="#argumentcommandtype--settings-page-targets"&gt;ArgumentCommandType&lt;/a&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PropertyA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]&lt;/code&gt;, &lt;code&gt;[1]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Run(v0, v1)&lt;/code&gt; — launch &lt;code&gt;Sucrose.Property.exe&lt;/code&gt; with an argument (a specific selected theme).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Reportdog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=reportdogExe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Run(v0, string.Empty)&lt;/code&gt; — launch &lt;code&gt;Sucrose.Reportdog.exe&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Scheduler&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=SchedulerCommandType&lt;/code&gt;, &lt;code&gt;[1]=appPath&lt;/code&gt; (Create only)&lt;/td&gt;
&lt;td&gt;Routes to a Task Scheduler operation — see &lt;a href="#schedulercommandtype--auto-start-on-logon"&gt;SchedulerCommandType&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Repository&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(url)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Versioning&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=folder&lt;/code&gt;, &lt;code&gt;[1]=version&lt;/code&gt;, &lt;code&gt;[2]=bool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Delete.Folder(folder, version, bool)&lt;/code&gt; — delete old-version folders (used by the Launcher "Version" command).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Discussions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(url)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RestartLive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(none used)&lt;/td&gt;
&lt;td&gt;Stop live + subprocess, &lt;strong&gt;kill &lt;code&gt;Sucrose.Backgroundog.exe&lt;/code&gt;&lt;/strong&gt;, &lt;code&gt;Run.Start()&lt;/code&gt;, wait 1500 ms, retry if not running. The &lt;strong&gt;wallpaper reload&lt;/strong&gt; command.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Backgroundog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=backgroundogExe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Run(v0, string.Empty)&lt;/code&gt; — launch the background system-status/audio service.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;&lt;code&gt;QuotingGoogle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(url)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;&lt;code&gt;QuotingTranslate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[0]=url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Processor.Run(url)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;🖼️ &lt;strong&gt;Diagram needed:&lt;/strong&gt; A flow showing an emitter (Portal/Launcher/engine) building a &lt;code&gt;✔Command✖value&lt;/code&gt; string → spawning &lt;code&gt;Sucrose.Commandog.exe&lt;/code&gt; → Commandog parsing the string → switch dispatching to either &lt;code&gt;Processor.Run&lt;/code&gt;/&lt;code&gt;Processor.Kill&lt;/code&gt; or a shared helper → the target &lt;code&gt;.exe&lt;/code&gt; launching.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h-argumentcommandtype-settings-page-targets"&gt;ArgumentCommandType — settings-page targets&lt;/h2&gt;
&lt;p&gt;When the &lt;code&gt;Interface&lt;/code&gt; command opens the Portal on a specific settings page, the second value is an &lt;code&gt;ArgumentCommandType&lt;/code&gt; member (parsed as an enum). These map to the Portal settings pages:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Member&lt;/th&gt;
&lt;th&gt;Opens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OtherSetting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="./Settings-Other"&gt;Settings-Other&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DonateSetting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The Donate page &lt;em&gt;(built but hidden/disabled — not documented in this wiki)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemSetting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="./Settings-System"&gt;Settings-System&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GeneralSetting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="./Settings-General"&gt;Settings-General&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PersonalSetting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="./Settings-Personal"&gt;Settings-Personal&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;WallpaperSetting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="./Settings-Wallpaper"&gt;Settings-Wallpaper&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PerformanceSetting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="./Settings-Performance"&gt;Settings-Performance&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Example: the Launcher tray "Settings" action emits&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;✔Interface✖&amp;lt;PortalPath&amp;gt;✖GeneralSetting
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;which opens the Portal directly on the General settings page.&lt;/p&gt;
&lt;h2 id="h-schedulercommandtype-auto-start-on-logon"&gt;SchedulerCommandType — auto-start-on-logon&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;Scheduler&lt;/code&gt; command manages a Windows &lt;strong&gt;Task Scheduler&lt;/strong&gt; task — Sucrose's preferred auto-start-on-logon mechanism (distinct from the Run-key &lt;code&gt;Startup&lt;/code&gt;/&lt;code&gt;StartupM&lt;/code&gt;/&lt;code&gt;StartupP&lt;/code&gt; commands). The first value is a &lt;code&gt;SchedulerCommandType&lt;/code&gt; member:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Member&lt;/th&gt;
&lt;th&gt;Routes to&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Scheduler.CreateTask(Values[1])&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates the task; &lt;code&gt;Values[1]&lt;/code&gt; is the application path to run.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Enable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Scheduler.EnableTask()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enables the existing task.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Scheduler.DeleteTask()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deletes the task (use this to fully remove auto-start).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Disable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Scheduler.DisableTask()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Disables the task without deleting it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The task itself (&lt;code&gt;Sucrose.Commandog/Helper/Scheduler.cs&lt;/code&gt; + &lt;code&gt;Sucrose.Memory/Manage/Readonly/Scheduler.cs&lt;/code&gt;):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Task name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Autorun for Sucrose&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task description&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Sucrose Wallpaper Engine&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task folder&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\Sucrose\&lt;/code&gt; (root folder named &lt;code&gt;Sucrose&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trigger&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LogonTrigger&lt;/code&gt;, scoped to the current user (&lt;code&gt;WindowsIdentity.GetCurrent().Name&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Action&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ExecAction(Application)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;StopIfGoingOnBatteries&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DisallowStartIfOnBatteries&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ExecutionTimeLimit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TimeSpan.Zero&lt;/code&gt; (no limit)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Backed by the &lt;code&gt;Microsoft.Win32.TaskScheduler&lt;/code&gt; library. Because Sucrose starts via a scheduled task rather than a registry Run entry, you will &lt;strong&gt;not&lt;/strong&gt; find it in the typical &lt;code&gt;HKCU\…\Run&lt;/code&gt; startup list — see &lt;a href="./Troubleshooting-Settings-Startup-GPU"&gt;Troubleshooting-Settings-Startup-GPU&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Example — create the logon task:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;✔Scheduler✖Create✖&amp;lt;full path to the app to run&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Example — remove the logon task:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;✔Scheduler✖Delete
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="h-who-emits-commands"&gt;Who emits commands&lt;/h2&gt;
&lt;p&gt;Commands are emitted by the UI and services, never by the user directly. Representative emitters (&lt;code&gt;src/Shared/Sucrose.Shared.Launcher/Command/*.cs&lt;/code&gt; and others):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Emitter&lt;/th&gt;
&lt;th&gt;Command emitted&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Launcher tray → Reload (&lt;code&gt;Reload.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔RestartLive✖Unknown&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reload the wallpaper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Launcher tray → Update (&lt;code&gt;Update.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔Update✖&amp;lt;UpdatePath&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Launch the updater&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Launcher tray → Settings (&lt;code&gt;Setting.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔Interface✖&amp;lt;PortalPath&amp;gt;✖GeneralSetting&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open Portal on General settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Launcher tray → Interface (&lt;code&gt;Interface.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔Interface✖&amp;lt;PortalPath&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open the Portal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Launcher tray → Property (&lt;code&gt;Property.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔Property✖&amp;lt;PropertyPath&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open the per-wallpaper property editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Launcher tray → Reportdog (&lt;code&gt;Reportdog.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔Reportdog✖&amp;lt;ReportdogPath&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Launch the report uploader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Launcher → Version cleanup (&lt;code&gt;Version.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔Versioning✖&amp;lt;%LocalAppData%\Sucrose&amp;gt;✖&amp;lt;entryVersion&amp;gt;✖false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete old-version folders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crash path (&lt;code&gt;Sucrose.Shared.Space.Helper.Watchdog.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔Watchdog✖&amp;lt;WatchdogPath&amp;gt;✖&amp;lt;Base64 payload&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show the crash dialog / write the report&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Updater (&lt;code&gt;Sucrose.Update/View/MainWindow.xaml.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔Bundle✖&amp;lt;installerPath&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Launch the downloaded installer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engine (&lt;code&gt;Sucrose.Shared.Engine/Event/Handler.cs&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;✔RestartLive✖Unknown&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reload after an engine-side event&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Some Launcher commands (&lt;code&gt;Close.cs&lt;/code&gt;, &lt;code&gt;Engine.cs&lt;/code&gt;, &lt;code&gt;Report.cs&lt;/code&gt;) act locally — they kill processes or show a dialog directly and do &lt;strong&gt;not&lt;/strong&gt; go through Commandog. &lt;code&gt;Feedback.cs&lt;/code&gt; is fully commented out (no feedback dialog ships).&lt;/p&gt;
&lt;h2 id="h-special-command-notes"&gt;Special command notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reload vs. Cycle vs. Restart.&lt;/strong&gt; &lt;code&gt;RestartLive&lt;/code&gt; is the reload (it also kills &lt;code&gt;Sucrose.Backgroundog.exe&lt;/code&gt;); &lt;code&gt;Cycyling&lt;/code&gt; (note the spelling) is the cycling reload used by &lt;a href="./Wallpaper-Cycling"&gt;Wallpaper-Cycling&lt;/a&gt;; both go through Commandog.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service launchers.&lt;/strong&gt; &lt;code&gt;Backgroundog&lt;/code&gt;, &lt;code&gt;Watchdog&lt;/code&gt;, &lt;code&gt;Reportdog&lt;/code&gt;, and &lt;code&gt;Property&lt;/code&gt; exist mainly to launch the corresponding service &lt;code&gt;.exe&lt;/code&gt;. Backgroundog auto-exits when there is no live wallpaper (after a few retries), so it is started on demand via &lt;code&gt;✔Backgroundog✖…&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Watchdog payload is Base64.&lt;/strong&gt; The &lt;code&gt;Watchdog&lt;/code&gt; command's second value is a Base64-encoded &lt;code&gt;Application✖SerializedException✖Show✖LogPath&lt;/code&gt; block — see &lt;a href="./Crash-Reporting"&gt;Crash-Reporting&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Internal enums.&lt;/strong&gt; Both &lt;code&gt;CommandType&lt;/code&gt; and the live-channel &lt;code&gt;CommunicationType&lt;/code&gt; enums are declared &lt;code&gt;internal&lt;/code&gt;. They are not exposed as a public API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The command bus is not the data channel.&lt;/strong&gt; Despite the "command" wording, this protocol is unrelated to the Pipe/Signal/Transmission live-data channels documented in &lt;a href="./IPC"&gt;IPC&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-see-also"&gt;See also&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="./Automation-Examples"&gt;Automation-Examples&lt;/a&gt; — practical, copy-pasteable command examples (with the same disclaimer)&lt;/li&gt;
&lt;li&gt;&lt;a href="./Commandog-Dispatcher"&gt;Commandog-Dispatcher&lt;/a&gt; — how the dispatcher parses and routes a command&lt;/li&gt;
&lt;li&gt;&lt;a href="./IPC"&gt;IPC&lt;/a&gt; — the Pipe/Signal/Transmission live-data channels (a separate mechanism)&lt;/li&gt;
&lt;li&gt;&lt;a href="./Architecture-Overview"&gt;Architecture-Overview&lt;/a&gt; — the multi-process design these commands coordinate&lt;/li&gt;
&lt;li&gt;&lt;a href="./Theme-Tray-Startup"&gt;Theme-Tray-Startup&lt;/a&gt; — startup modes that map to the &lt;code&gt;Startup&lt;/code&gt;/&lt;code&gt;Scheduler&lt;/code&gt; commands&lt;/li&gt;
&lt;li&gt;&lt;a href="./Troubleshooting-Settings-Startup-GPU"&gt;Troubleshooting-Settings-Startup-GPU&lt;/a&gt; — why auto-start lives in Task Scheduler, not the registry Run key&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:20 -0000</pubDate><guid>https://sourceforge.netb6c519adbdd61129d5569eb086ed392106177ac0</guid></item></channel></rss>