DeskPilot

0.3.0-preview0001

DeskPilot is a local, desktop-style web UI that fronts the ShellPilot engine to give non-technical users the full GitHub Copilot agent toolset (browse, read/write files, run commands, skills, instructions) with visible permissions and honest cost - no terminal or IDE required. The web UI is bundled in the module and served on loopback; ShellPilot and a Copilot-enabled
DeskPilot is a local, desktop-style web UI that fronts the ShellPilot engine to give non-technical users the full GitHub Copilot agent toolset (browse, read/write files, run commands, skills, instructions) with visible permissions and honest cost - no terminal or IDE required. The web UI is bundled in the module and served on loopback; ShellPilot and a Copilot-enabled GitHub account are required.
Show more

Minimum PowerShell version

7.0

This is a prerelease version of DeskPilot.

Installation Options

Copy and Paste the following command to install this package using PowerShellGet More Info

Install-Module -Name DeskPilot -AllowPrerelease

Copy and Paste the following command to install this package using Microsoft.PowerShell.PSResourceGet More Info

Install-PSResource -Name DeskPilot -Prerelease

You can deploy this package directly to Azure Automation. Note that deploying packages with dependencies will deploy all the dependencies to Azure Automation. Learn More

Manually download the .nupkg file to your system's default download location. Note that the file won't be unpacked, and won't include any dependencies. Learn More

Owners

Copyright

(c) Raimund Andree. MIT licensed.

Package Details

Author(s)

  • Raimund Andree

Tags

Copilot GitHubCopilot ShellPilot Agent AI GUI AgenticOperatingModel Windows Linux macOS

Functions

Start-DeskPilot

PSEditions

Core

Dependencies

This module has no dependencies.

Release Notes

## [0.3.0-preview0001] - 2026-07-09

### Added

- **Automatic update checks with a consent-gated in-app update.** DeskPilot now
 polls the PowerShell Gallery for a newer release in the background (every 5
 minutes by default, configurable in **Settings → Engine & data → Updates**, plus
 a manual **Check for updates** button) and, when one is found, shows a dismissible
 banner in the UI. Clicking **Update now** installs the newest DeskPilot **and**
 ShellPilot into the CurrentUser scope, then **force-reloads ShellPilot live in the
 Engine Runspace** so the Engine update takes effect immediately; DeskPilot's own
 host code can't hot-swap in-process, so a one-click **Restart DeskPilot** relaunch
 applies it (a fresh process imports the updated modules, keeping your
 Conversations). Full releases are offered by default; an
 opt-in **Include preview releases** setting also considers previews, and updating
 DeskPilot to a preview accepts a preview ShellPilot too — otherwise both are
 pinned to stable. The check is fail-silent and never blocks serving (it runs in a
 background job), and the notice is web-UI only (no console output). New
 `GET /api/update`, `POST /api/update/check`, `POST /api/update/install`, and
 `POST /api/update/restart` routes; new `updateCheckIntervalMinutes` and
 `updateIncludePrereleases` Settings; new `Get-DpUpdateStatus`,
 `Invoke-DpSelfUpdate`, `Get-DpUpdatePayload`, `Update-DpUpdateCheckState`,
 `Update-DpEngineModule` (live Engine reload) and `Restart-DpHost` (relaunch)
 helpers (replacing the launch-only, console-only `Get-DpUpdateNotice`); +20 unit
 tests.
- **DeskPilot version shown in the sidebar corner.** The running version (from
 `GET /api/health`) now appears as a muted `DeskPilot vX.Y.Z` line in the
 bottom-left of the sidebar, so the installed build is always visible at a glance
 (and easy to quote alongside the update banner).
- **Set up CopilotAtelier from the Agent menu.** The Agent dropdown has a new
 **Set up CopilotAtelier…** action that provisions the
 [CopilotAtelier](https://github.com/raandree/CopilotAtelier) customization set —
 the curated agents, skills, instructions and prompt files that feed the very
 menu it lives in. Because CopilotAtelier is a repository rather than an
 installable module, DeskPilot downloads it (a zip of the `main` branch over
 HTTPS from the fixed first-party URL, extracted under the data directory) and
 runs its `Setup-CopilotSettings.ps1`, which links
 `~/.copilot/{agents,instructions,skills,prompts}` to a synced copy. It is
 deliberately **not a one-click action**: choosing the menu item first opens a
 consent dialog that spells out exactly what the script changes (the `~/.copilot`
 junctions, VS Code `settings.json`/`keybindings.json`, and the
 `COPILOT_ALLOW_ALL` user environment variable) before anything is downloaded or
 run, and the script then runs in a visible PowerShell console the user drives so
 its own safety prompts (OneDrive account choice, replacing a non-empty folder)
 work. Windows only — the script uses NTFS junctions; on other platforms the
 files are fetched for a manual run. New `POST /api/atelier/setup` route and
 `Get-DpAtelierSource` / `Invoke-DpAtelierSetup` helpers (+4 unit tests).
- **The Agent list now refreshes without a restart.** Agents that appear after
 startup — most notably from the new CopilotAtelier setup, which runs in a
 separate console — now show up in the Agent menu on their own. The SPA
 re-checks the list on a short interval and whenever the window regains focus or
 the tab becomes visible (so returning from the setup console refreshes it), and
 `GET /api/agents` now adopts the conventional `~/.copilot/agents` folder the
 moment it exists even if it was absent at startup (new `Resolve-DpAgentsRoot`
 helper), so a selected Agent also reaches the Turn. Previously the Agents folder
 was resolved once at startup, so a freshly-created `~/.copilot/agents` (e.g. the
 CopilotAtelier junction) stayed invisible until DeskPilot was restarted. Polling
 was chosen over a server-side folder watcher to fit the single-threaded,
 no-persistent-SSE Host Server. (+3 unit tests.)
- **Publishable from the PowerShell Gallery, with the web UI bundled.** The
 DeskPilot web UI now ships inside the module (ModuleBuilder `CopyPaths`), so
 `Install-Module DeskPilot; Start-DeskPilot` serves the full interface from the
 installed module with no build step and nothing extra to download. The shipped
 `Start-DeskPilot` resolves its assets internally (`$PSScriptRoot/web`) — the
 public `-WebRoot` parameter is gone — and fails fast with a clear message if the
 bundle is missing or incomplete; a source checkout and the tests serve
 `source/web` via the `DESKPILOT_WEB_ROOT` environment variable so UI edits still
 hot-reload without a rebuild. ShellPilot stays resolved at runtime by
 `Resolve-DpEngineModule` (not a hard manifest dependency, so import never fails
 when the engine is absent), and the manifest metadata (author,
 project/license/icon URIs, description, tags) is filled in for the Gallery
 listing. A fail-silent
 launch-time check reports when a newer DeskPilot is available on the Gallery.
 Added an MIT `LICENSE`, Gallery/CI README badges, a new `Get-DpUpdateNotice`
 helper, and web-asset guard tests (bundle presence, Linux case-sensitivity of
 asset references, and a no-secrets scan). The `web/` folder was relocated to
 `source/web/`.
- **Persistent memory (DeskPilot learns who you are).** DeskPilot now carries
 durable memory across conversations, injected into every turn. Two parts: a
 **User profile** — the note you write about yourself (the existing preferences,
 now framed as your profile, up to 8,000 characters) — and a new agent-curated
 **Agent memory** — durable, declarative facts the agent keeps about you and your
 environment (conventions, tools, observed preferences, lessons), up to 12,000
 characters. Both are shown as fenced *reference notes* in the system prompt so a
 recalled fact is never mistaken for a new instruction. The agent keeps its memory
 up to date two ways: **automatically** (a throttled, best-effort background step
 after some turns — default on, announced with a toast, one toggle to disable) and
 **manually** (an "Update from this conversation" button). Learning writes facts
 only, never secrets or one-off task state, and never changes your visible
 messages. Manage it all in **Settings → Memory**: view, edit, or clear either
 store, with a live character/budget count. New endpoints `GET`/`PUT /api/memory`
 and `POST /api/memory/learn`; new helpers `Get-DpMemoryLimits`,
 `Import-DpMemoryStore`, `Save-DpMemoryStore`, `New-DpMemoryPrompt`,
 `ConvertFrom-DpMemoryResult`, `Get-DpMemoryPayload`; a new `agent-memory.json`
 store and a `memoryLearning` setting (+17 unit tests).
- **Automatic conversation compaction (Memory & context).** When a conversation
 fills most of the model's context window, DeskPilot can now summarise its earlier
 turns automatically so it keeps working instead of overflowing — the same
 summarise-and-keep-recent **Compact** it already offered, run for you after a turn
 once the context passes a threshold you set. Your visible messages are always
 kept, and every automatic compaction is announced with a toast. New **Memory &
 context** settings: an on/off toggle (default **on**), a **Compact when context
 reaches** percentage (50–95, default 80), and **Recent messages to keep in full**
 (2–100, default 4). The same keep-recent setting now also drives the manual
 Compact action. No new endpoint — auto-compaction reuses
 `POST /api/conversations/{id}/compact`. The Session Info panel shows a one-line
 indicator when auto-compaction is on. (+6 unit tests.)
- **Richer Usage panel.** The credits/usage popover now shows the **tokens in /
 tokens out** split (prompt vs. completion) for both the session and all-time
 counters, a **Top models** list for the session (ranked by tokens), and the
 credits-per-day chart gained a **30-day** range alongside 7d and 14d. All from
 data already tracked — no extra cost or Engine change.
- **Session info + Compact conversation (like GitHub Copilot).** Each conversation
 now has a **Session Info** panel — opened from a glanceable **context meter**
 pill in the top bar or the **⋯** menu — showing the conversation's accumulated
 cost (credits and $) and turn count, and a **Context Window** gauge: how much of
 the model's context window the last turn used, with a hatched *reserved for
 response* tail and an estimated split into **Messages** vs. **System + tools**.
 The context figure is measured exactly from the Engine's reported `promptTokens`;
 the per-part breakdown is a labelled client-side estimate. A **Compact
 conversation** button summarises the earlier turns into a short briefing so
 future turns send far fewer tokens — your visible messages stay intact; only what
 is replayed to the model shrinks. New endpoint
 `POST /api/conversations/{id}/compact` (runs a pure-reasoning turn with all tools
 disabled) and a new `compactedUtc` conversation field. New helpers
 `New-DpCompactionPrompt`, `ConvertFrom-DpCompactionResult`, and
 `Compress-DpConversationHistory` (+16 unit tests).
- **A richer conversation menu.** The per-conversation **⋯** menu is now grouped
 into clear sections with several new actions: **Open in new window** (opens the
 conversation in a separate browser window via a `/?c=<id>` deep link),
 **Duplicate** (an independent copy of the title, messages, and history),
 **Mark as unread** / **Mark as read** with an unread dot, a bold title, and a
 **Mark N as read** control under the list, an optional **Colour** label from a
 fixed palette (shown as a dot on the row), **Copy transcript** (the Markdown
 transcript straight to the clipboard), and **Details** (a read-only popover with
 the created/updated times, messa

FileList

  • DeskPilot.nuspec
  • DeskPilot.psd1
  • web\index.html
  • web\assets\app.js
  • web\assets\logo-mark-dark.png
  • web\assets\logo-mark.png
  • web\assets\markdown.js
  • web\assets\logo-full-dark.png
  • DeskPilot.psm1
  • web\assets\logo-full.png
  • web\assets\styles.css

Version History

Version Downloads Last updated
0.3.0-previe... (current version) 6 7/9/2026
0.2.0 5 7/9/2026
0.2.0-previe... 3 7/9/2026
0.2.0-previe... 5 7/9/2026
0.2.0-previe... 5 7/9/2026
0.2.0-previe... 9 7/9/2026
0.2.0-previe... 7 7/8/2026
Show more