Skip to content

feat(app): the desktop request card and what each bot may see, in its details - #172

Merged
httpsphl merged 4 commits into
mainfrom
feat/desktop-app
Oct 4, 2026
Merged

httpsphl merged 4 commits into
mainfrom
feat/desktop-app

Conversation

@httpsphl

@httpsphl httpsphl commented Oct 4, 2026

Copy link
Copy Markdown
Owner

What

The app part of D1 (spec 24.9, 24.10). It sits on top of #171, so this diff shows it too until it merges. With this, D1 is complete.

  • Request card (DesktopCard, for mcp__botloft__desktop):
    • "Scout wants to see Notepad";
    • the bot's why ("Scout says: …") and the executable's path;
    • what seeing means: the app's windows are read and pictured while the owner is at the computer, passwords never, and it can be taken back in the bot's details;
    • Allow and Deny, with a note. There is no "Always allow": allowing already saves the grant.
    • Once answered, it becomes one line: "Scout can see Notepad", "may not see" with the note, or "no answer".
  • Bot details: a new "Your desktop" section lists each grant with the app, its path and the level (Can see / Can see and use). An X takes it back through desktop.revoke. The list stays current through bot.desktop, and when empty it says the bot asks in the chat the first time.
  • Chat: the desktop tools show with the screen icon and names in en, pt-BR and es ("Read a window" and so on).
  • Preview: it seeds Analyst asking for Excel and Scout already allowed to see Notepad.
  • Spec 24.9 and 24.10 are updated, and section 24's status says D1 is implemented.

Checks

  • pnpm check passes: 394 tests, 2 of them new for the card and the details section.
  • I looked at both in the preview, in Portuguese: the card in Analyst's chat, and "Seu desktop" in Scout's details.

Manual check on the real app

  1. Ask a bot to read a Notepad window.
  2. Allow it in the card and check the reading in the chat.
  3. Open the bot's details and take Notepad back. The next request asks again.

…y app as the owner allows

The daemon part of D1 (spec 24.2, 24.6, 24.8, 24.11):

- desktop_grants (migration 20): one grant per bot and app, by the
  executable's path case aside, that only goes up from see to act;
  deleting the bot deletes them. desktop.grants and desktop.revoke, and
  the bot.desktop notification; ids with the dsk_ prefix.
- Tools desktop_windows, desktop_look and desktop_screenshot. The list
  hides the titles of apps not granted yet and names what is never
  available. Reading or picturing a window of a new app asks the owner
  with the bot's why (mcp__botloft__desktop); allowed, the grant is kept.
  The bot's permission mode never opens the desktop.
- The owner must be there: the app open (a connection past hello) and
  the computer used in the last 5 minutes (GetLastInputInfo); tests stand
  in for the owner. One desktop action at a time across bots.

Tested end to end on Windows with a real window of the test's own: the
title hidden, then the request, the reading without the password, the
grant kept and told, the picture, revoked and refused; and nothing seen
while the owner is away.
… details

The app part of D1 (spec 24.9, 24.10): a bot asking to see an app shows
a card with the app, the bot's why, the executable's path and what
seeing means (its windows read and pictured while the owner is at the
computer, never passwords, and where to take it back), with Allow and
Deny; answered, it is one line. The bot's details gain "Your desktop":
each app it may see, its path and level, with a button that takes it
back, kept current by bot.desktop. The desktop tools show in the chat
with the screen icon and names in the three languages. The preview
seeds a request and a grant.
@httpsphl
httpsphl enabled auto-merge October 4, 2026 21:41
@httpsphl
httpsphl merged commit 786e939 into main Oct 4, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant