DeskPilot
0.5.0-preview0020
Minimum PowerShell version
7.0
See the version list below for details.
Installation Options
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
PSEditions
Dependencies
This module has no dependencies.
Release Notes
## [0.5.0-preview0020] - 2026-09-02
### Added
- **Questions you can tap through instead of typing at.** When the agent needs
input it now asks **one question at a time**, with its choices as buttons: tap
an answer and the next question arrives. A question that takes several answers
toggles them on and off and finishes with **Done**; a question with no choices
is still answered by replying. You can also still reply with a number — "2"
picks the second choice, and "1,3" picks two.
Before this, buttons appeared **only** when the agent happened to ask exactly
one question, which almost never happened: DeskPilot tells the agent to bundle
everything it needs into a single request, so a real set of questions arrived as
a wall of numbered text you had to read and reply to — six questions in one
message, on a phone. The two halves of DeskPilot had contradicted each other
since the feature shipped.
Every list of choices also ends with **Something else - type it**, for when none
of them is what you mean. Your words reach the agent exactly as written, and the
buttons keep working in case you change your mind.
- **Let Telegram groups reach Intercom, not just your own chat.** Adding the bot
to a group used to be a dead end: every message from it was counted, rejected
and thrown away, with only a line in the Status box to say why. **Settings ›
Intercom** now has **Also accept messages from a Telegram group** and a box for
the group ids — separate several with commas, up to ten — and DeskPilot accepts
them alongside your own chat. It replies wherever it was asked: something sent
in a group is acknowledged, questioned and reported in that group, while your
private chat stays private and keeps the check-in status message.
**This is off by default and needs two switches, because everyone in those
groups gets exactly the control you have** — instructions, answers to the agent's
questions, and work in any project you share with groups, including `git push`.
Telegram decides who is in a group, so anyone added later inherits it. The
consequence is stated where you turn it on, and repeated on every `/status`
check-in. Turning a group back off drops anything it had queued or was being
asked, rather than delivering it to a chat that is no longer trusted.
**A group reaches only the projects you choose for it.** Each project now has a
second tick, **also from a group chat**, next to **allow phone control** — and it
is off even for projects your own phone already drives. Without it, allow-listing
a group would have silently widened every project you had opted in when you were
the only person who could reach them. If any project is already shared when you
switch group access on, DeskPilot names them and asks you to confirm first.
**`/undo` and `/delete` never work from a group**, whichever project is open.
They rewrite files on disk and destroy a conversation for good, and they act on
your own history rather than on the group's work, so they stay with you.
`/archive` is still open to everyone, because `/unarchive` undoes it.
The panel also tells you what Telegram will not: a bot in a group sees nothing
but `/commands`, replies to itself and @mentions until **Group Privacy** is
turned off in @BotFather and the bot is re-added — which looks exactly like
DeskPilot ignoring you.
- **The Intercom log says who, not just what.** Every line in the **Status** box
now names the chat a message came from and the sender Telegram reported, for
accepted and rejected messages alike. With more than one chat able to reach
DeskPilot, a log that records only the action cannot tell you afterwards who
took it. The name is whatever Telegram says it is; DeskPilot does not verify it.
- **A full-screen file viewer.** The viewer opens at a comfortable reading width,
but a wide table, a long diff or a large screenshot wants the whole window. The
new ⛶ button in its header takes the viewer edge to edge — no border, no rounded
corners, no margin — and back again. The choice is remembered, so once you have
said you want files full screen, every file opens that way until you say
otherwise. Escape and ✕ still close it.
- **Open a file with your own program.** A spreadsheet, a Word document, a PDF —
DeskPilot cannot draw any of them, and until now clicking one in the file panel
said so and stopped. Trying to open a file it can't show now asks whether to
hand it to the program your computer already uses for that file type, with a
**Always open .xlsx files this way** box on the question. Tick it and that type
opens straight away from then on; leave it and DeskPilot asks again next time.
Every file also has an **↗** button in the viewer, so a Markdown file or an
image can be opened in your own editor whenever you want it there. The types
you chose to keep are listed under **Settings › General**, each with a ✕ that
makes DeskPilot ask again, plus **Forget all**.
**A program or a script is never opened this way, and there is no way to allow
one.** The agent writes into the same folder the file panel lists, so a
`.exe`, `.bat`, `.ps1`, `.sh`, `.lnk` — or a `budget.xlsx.exe` — is refused
outright rather than confirmed, and cannot be remembered either; opening it
would be running it. Those files are still readable in DeskPilot's own viewer.
Backed by a new `POST /api/fs/open`, confined to the selected Project exactly
like the file tree, which chooses no program and passes no arguments of its
own.
- **Image previews instead of "there is no text to compare."** A screenshot the
agent saved, a logo you dropped into the Project, an icon that changed — the
Diff viewer and the file viewer now *show the picture* for the formats a
browser can draw (PNG, JPEG, GIF, WebP, BMP, ICO, AVIF), captioned with what
happened to the file, on a checkerboard so a transparent image reads on either
theme. Anything else still says plainly that it has no text to compare. There
is no before-and-after for a picture: the preview is the file as it stands
now.
Backed by a new `GET /api/fs/image`, confined to the selected Project exactly
like the file tree. It is the file's **own signature bytes** that decide the
media type it is served under, never its extension, so a file named `.png`
that is really a web page is refused rather than handed to the browser. SVG is
deliberately not previewed — it is script-capable markup, and being text it
is already readable as text. Every response now also carries
`X-Content-Type-Options: nosniff`.
- **Automatic response retries.** A Turn no longer stops at the first transient
Engine failure or successful-but-empty response before work has begun. The new
**Response retries** Setting controls how many extra attempts DeskPilot makes
after the first (`0–100`, default `2`), with each wait capped at five seconds;
`0` turns the behavior off, and Stop remains responsive during the wait.
Retries stop as soon as any answer or Tool Activity has appeared, so DeskPilot
never repeats a command or write behind the user's back. The Setting also says
plainly that failed attempts can still consume time and Copilot credits, and
the final token and cost Usage includes every attempt the Engine recorded
rather than only the successful one.
- **MCP servers.** DeskPilot can now attach Model Context Protocol servers, so
the agent gains tools from programs you choose — an issue tracker, a database,
a document store — beside its own. A new **MCP servers** tab in Settings takes
either a command DeskPilot runs or the path to an `mcp.json` you already keep
for another editor (both the VS Code `servers` and the Claude `mcpServers`
shapes are read). Each server reports what it is actually doing: whether it is
running, which protocol version it negotiated, and exactly which tools it
contributes. Nothing is ever discovered on its own — a file that can start a
program has to be named by you — and a server's tools appear in the Activity
panel as they are called, marked apart from DeskPilot's own so you can always
tell whose code just ran.
Three deliberate limits, because an MCP server is somebody else's program
running with your privileges. **Secrets are never stored:** a server that needs
a token names the environment variable, and DeskPilot reads the value from its
own environment when it starts the server, so a settings backup cannot leak a
key. **Reach can be narrowed:** *Only offer these tools* attaches a server for
the two tools you want and keeps the rest away from the agent entirely. And a
new **MCP servers** permission withholds every attached server's tools for a
job without stopping the servers — while the panel states plainly that the
other permissions limit DeskPilot's own tools and do not limit an attached
server, which can bring file and shell tools of its own.
Requires ShellPilot 0.4.0-preview0007 or later; on an older engine the panel
says so and everything else works as before.
- **You can now watch the agent work.** The Activity panel only ever appeared
once a job had finished, as an unordered list of what it had touched — so while
the agent was working, the window said nothing beyond a spinner unless *Show
the model's thinking* was on, and the only files it named live were the ones it
wrote. Every tool the agent uses now appears in the panel the moment it is used,
in order: the files it reads and writes, the folders it lists, the commands it
runs, the **pages it fetches**, the searches it makes. A run of the same kind of
action folds into one line — *Read 6 files*, *Fetched 2 pages* — which is open
while the job runs and closed when it ends, leaving the whole panel as a single
line the reader can open again. The account is kept with the message, so it
survives a reload, and a job that was stopped or ran out of its step budget now
FileList
- DeskPilot.nuspec
- DeskPilot.psm1
- web\assets\app.js
- web\assets\questionnaire.js
- web\assets\speech.js
- web\assets\attachments.js
- web\assets\logo-full.png
- web\assets\logo-mark-dark.png
- DeskPilot.psd1
- web\assets\markdown.js
- web\assets\logo-full-dark.png
- web\assets\auth.js
- web\index.html
- web\assets\diff.js
- web\assets\styles.css
- web\assets\logo-mark.png