DeskPilot

0.4.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.
There is a newer prerelease version of this module available.
See the version list below for details.

Installation Options

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

Install-Module -Name DeskPilot -RequiredVersion 0.4.0-preview0001 -AllowPrerelease

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

Install-PSResource -Name DeskPilot -Version 0.4.0-preview0001 -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.4.0-preview0001] - 2026-08-06

### Fixed

- **Undoing a file now clears it from the review list.** The diff viewer kept the
 file list it opened with, so after you confirmed an undo the file was still
 listed, still showed its old diff, and still offered a second **Undo this
 file** for a change that was already gone. The viewer now re-reads the change
 set after every Keep or Undo: a file that no longer differs drops out, the
 selection moves to the next file, and the viewer closes when nothing is left
 to review. A file put back through Git also stops being reported as an
 unreviewed DeskPilot change.
- **A model with no published rate no longer reads as free.** The engine prices a
 turn from a table keyed by exact model id; a model newer than that table (for
 example `claude-opus-5`) comes back with *no* price, and DeskPilot was showing
 that as a confident `$0.0000 · 0 credits` — over a million tokens could look
 free. Such a turn now says **cost unknown — no published rate for this model**,
 session and all-time totals show a `≥` prefix and count how many turns could
 not be priced, and the per-model list says **no rate** instead of `0 cr`. The
 fix for the *number* is a rate for the model in the engine's price table; this
 fix is DeskPilot no longer misreporting its absence.

### Added

- **The files panel is resizable.** Drag its left edge to make it as wide as you
 need (up to 60 % of the window), double-click the edge to snap back to the
 default, or focus it and use `←`/`→` — `Shift` for bigger steps, `Home` to
 reset. The width is remembered on this machine.
- **Save all your changes at once, without knowing Git.** The Changes panel gains
 a **Save all…** button (also in the Branch Wizard when you have unsaved work,
 and in the command palette) that opens one dialog: it lists every uncommitted
 file with its added and removed line counts, prefills an editable one-line
 description, and records the lot as a single entry in the project's history.
 No staging, no `git add`, no terminal — and nothing is sent anywhere until you
 choose **Send to server**. Saving a file also stops DeskPilot reporting it as
 an unreviewed change, because a file you saved is a file you reviewed.
- **Let DeskPilot write the description.** A ✨ button beside the box reads your
 changes and suggests a one-line description, the way GitHub Copilot's commit
 box does. It only ever fills the box — you read the words and decide — and it
 runs on your click, never on its own.
- **DeskPilot now remembers what it changed until you decide.** Before every turn
 it records how your files looked, so the edits the agent makes stay listed as
 *not reviewed yet* — across a reload, a restart, and switching conversations —
 until you **Keep** them (accept, without committing) or **Undo** them. Undo puts
 a file back the way it was *before the agent touched it*, so your own earlier
 edits survive, and a file the agent created is removed. This is a layer above
 Git: "what did the agent change?" and "what is uncommitted?" are different
 questions and now have different answers.
- **A Changes card under every new answer, with Keep and Undo.** When the agent
 edits files in a Git project, the answer now carries a
 `N files changed  +A  −D` summary and one row per file with its status and its
 own added/deleted line counts, measured against the pre-turn snapshot. The card
 disappears once those files are reviewed.
- **Changed files are visible in the file panel, not buried in Activity.** A
 **Changes** panel sits directly under the Git bar with two sections — what
 DeskPilot changed and you have not reviewed (with **Keep all** / **Undo all**),
 and what is merely uncommitted — and the file tree itself is colour-coded the
 way an IDE explorer is: a changed file's name takes its status colour (amber
 modified, green new, red deleted or conflicting) and carries a one-letter
 status, a folder containing changes is tinted and shows how many changed files
 are inside, and an unreviewed DeskPilot change carries an accent edge.
- **A diff viewer.** Clicking a changed file opens a unified diff with both old
 and new line numbers, colour-coded additions and removals, and a file list to
 step through the whole change set (`↑`/`↓`). A pending DeskPilot change is shown
 against the pre-turn snapshot, so you see what the agent did rather than
 everything since your last commit. A brand-new file is shown as all additions;
 a binary file says so instead of showing bytes.
- **A Branch Wizard for people who do not know Git.** One place to see where you
 are, create a branch (with the name validated in plain language before Git
 sees it), switch, delete (never the default branch; unmerged work needs an
 explicit "delete anyway"; the remote delete is a separate opt-in), merge (hands
 off to the existing Merge Wizard), and sync with the server — *get*, *send*, or
 both, including publishing a branch that has never been sent. Uncommitted work
 can be set aside and restored around a sync.
- **A generated prompt for merge conflicts.** When the same lines were changed in
 two places outside the Merge Wizard, DeskPilot writes the prompt that asks the
 agent to resolve it, shows it for review and editing, and sends it only when
 you choose to. Copy and Abort-the-merge are offered alongside.
- **Ask you now opens a Questionnaire wizard for related questions.** The Model
 can bundle up to ten questions into one in-thread flow with numbered choices,
 radio-style single selection, checkmarked multi-selection, conditional custom
 answers, previous/next navigation, progress, collapse, and close-to-Stop.
 Text-only questions show only a free-text field; plain Engine questions remain
 a one-step fallback. Answers return to the same Turn as one correlated JSON
 payload, and the completed Activity shows the Questionnaire title instead of
 protocol JSON.

### Changed

- **Git can no longer hang DeskPilot.** Every Git call now reads its output
 asynchronously and runs with terminal prompting disabled, and networked calls
 (fetch, push, remote delete) carry a timeout. Previously a stalled remote or a
 credential prompt could freeze the single-threaded Host Server, and with it the
 whole UI.
- The per-turn file diff moved from an inline block in the Activity panel into
 the new diff viewer, and the Activity panel's "Undo file changes" button moved
 into the Changes card as **Undo**.

### Fixed

- **The Project chip now shows the selected folder's leaf name.** The chip
 sizes itself to shorter folder names, caps long names with an ellipsis, and
 exposes the full leaf name on hover instead of showing a stale Project name
 or the folder's root.
- **Stop now reacts immediately and preserves the interrupted Turn's Usage.**
 Clicking Stop freezes further streamed text at once, disables the button as
 **Stopping…**, and cancels the Engine pipeline asynchronously so the Host
 Server can keep processing requests while it unwinds. The resulting stopped
 Message is persisted with its credits and cost. Exact Engine Usage is used
 when available; hard-stopped streams that never receive the provider's final
 token frame show a clearly labelled input-only estimate instead of zero.
- **Ask you now pauses for an in-thread answer instead of reporting that no
 interactive console is available.** DeskPilot captures ShellPilot's structured
 `ask_user` Tool event, renders a correlated answer card, feeds the response to
 the waiting Engine Runspace, and resumes the same Turn. Repeated questions can
 form a multi-round interview, stale answers are rejected, and Stop cancels a
 pending question. Adds a `POST /api/conversations/{id}/question` route and
 focused Host Server, Engine-contract, and web-asset tests.
- **The GitHub sign-in screen no longer hides the device code behind its own
 progress output.** The Engine writes one line per poll while it waits for you
 to authorise, and the sign-in panel appended every one of them, so the
 verification link and the user code scrolled out of the small box within
 seconds and the screen looked stuck. Sign-in progress is now a fixed panel:
 the link and the code stay pinned with a **Copy code** button, and the poll
 heartbeat only updates a single status line. The code step also spells out
 that GitHub's password and two-factor prompts are the normal sign-in and that
 the device code belongs only in the **Device activation** box — pasting it
 into the two-factor field is rejected by GitHub. A sign-in that ends without a
 token now says the code may have expired instead of only "Try again". Adds a
 small `auth.js` browser module and one focused unit test.

FileList

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

Version History

Version Downloads Last updated
0.5.0-previe... 3 8/10/2026
0.5.0-previe... 4 8/9/2026
0.4.1-previe... 4 8/9/2026
0.4.0 7 8/9/2026
0.4.0-previe... 3 8/9/2026
0.4.0-previe... (current version) 4 8/6/2026
0.3.1-previe... 3 8/5/2026
0.3.0 23 7/23/2026
0.3.0-previe... 3 7/23/2026
0.3.0-previe... 9 7/9/2026
0.2.0 15 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... 8 7/8/2026
Show less