TermPilot puts SSH / Telnet / serial terminals and VNC / RDP desktops in one window. You sign in yourself; an AI assistant then continues on the same session or the same desktop through the built-in MCP server — and your secrets never leave this machine.
Windows · macOS · Linux, MIT licensed

Five protocols, one form. Passwords and key passphrases are encrypted with the system keychain and stored only here.
VNC and RDP run inside the same window, with the clipboard and agent control ready to use.
The session you signed into keeps going for your agent. No reconnects, no handing over passwords.
The SFTP panel shares one SSH connection with the terminal — no drops, no second login.
Enter host and user, or import from ~/.ssh/config. Secrets are encrypted and stored locally.
Double-click to open a tab. Multi-hop jumps chain automatically, so you sign in once.
Terminals and VNC / RDP desktops share one tab row; right-click to copy or capture.
Copy the agent guide to connect; your agent then continues in the terminal or on the desktop.
Upload and download in the file panel; edit text files in place with a double-click.
Close the tab. Connections, terminal titles and the lines already drawn are still there next launch.
Passwords and key passphrases are encrypted by Electron safeStorage through the system keychain, then written to local SQLite (%APPDATA%\TermPilot\termpilot.db on Windows). No server, no accounts.
The built-in MCP server binds 127.0.0.1 and every request must carry a Bearer token. The token lives in your local mcp.json; nobody else can connect.
No analytics and no crash reporting in the source. The only outbound request is reading the GitHub release page when you click “Check for updates” in settings.




| Plain ssh in a shell | GUI terminal (XShell-style) | TermPilot | |
|---|---|---|---|
| Sign in | Type the full command every time; rely on ssh-agent | Save the session, double-click | Save it, then open it yourself or let the agent do it |
| Mid-way prompts | Menus, wizards and sudo are all yours | You do the typing | You or the agent presses keys, with the screen live |
| Continuing | Same window | Same window, agent cannot join | The agent continues on the same session, no reconnect |
| Batch and scripts | Write your own shell scripts | Mostly manual | 35 MCP tools plus a local CLI |
| Credentials | ssh_config / ssh-agent | Stored inside the app | System-keychain encrypted, local only |
| Connection protocols | SSH / Telnet / serial / VNC / RDP |
|---|---|
| Terminal | xterm.js with WebGL rendering; local and remote in one tab row; wheel scrolling, right-click copy and capture |
| Desktop | VNC through noVNC, RDP through embedded IronRDP (or native FreeRDP); text clipboard both ways |
| Desktop performance | Auto / quality / balanced / smooth; background throttling, debounced scaling, coalescing and backpressure |
| Channels | shell / exec (split stdout and stderr, protocol exit codes) / SFTP over one shared SSH connection |
| File transfer | Upload, download, mkdir, rename and delete; up to 512 MB; in-place text editing |
| Credential storage | Encrypted with safeStorage into local SQLite; never leaves the machine |
| Agent interface | Built-in MCP server (35 tools, bound to 127.0.0.1 with a token); local CLI written in Go |
| Platforms | Windows x64 / macOS (Apple Silicon) / Linux x64 |
| Installers | Windows Setup 146 MB · macOS dmg 168 MB · AppImage 167 MB · deb 129 MB |
| License | MIT |
git clone https://github.com/xy200303/termpilot.git
cd termpilot
npm install && npm run dist:win # dist:mac / dist:linuxRepository: github.com/xy200303/termpilot. Pushing to main runs typecheck and build; pushing a tag builds installers for three platforms and publishes a release.
Electron safeStorage encrypts them through the system keychain, then they are written to local SQLite (on Windows, %APPDATA%\TermPilot\termpilot.db). Nothing is synced, and tool calls such as connection_list never return secrets.
Yes. Multi-hop ssh -J, ProxyCommand and importing from ~/.ssh/config all work. If the jump host only authorizes a single forwarding, set that connection’s file channel to reuse the terminal connection so SFTP never dials again.
Yes. Your agent can take desktop screenshots, click by image coordinates, type text and key chords, scroll, wait for the screen to settle and run batched actions; VNC and embedded RDP also share the text clipboard both ways. Each desktop connection keeps a single window.
No. Those protocols are one byte stream with no channel concept. Calling term_exec or sftp_* returns a clear capability error, while the screen family (term_pty, term_write, screenshots) behaves the same across all three protocols.
Use term_reconnect (or reconnect in the UI) to bring back the same terminal: id, remark and the content already drawn are preserved. Run serial_list first to confirm the device path and parameters.
No. Secrets are decrypted briefly in the main process while dialing and no tool returns them. The MCP server binds 127.0.0.1 and every request must carry the token from your local mcp.json.
Official builds are Apple Silicon (arm64) dmg and zip only. Intel Macs can build from source: npm install, then npm run dist:mac.
Builds are not code signed. On Windows choose “Run anyway” in SmartScreen; on macOS right-click Open in Finder. If that matters to you, build from source in three commands.
No telemetry, no analytics, no crash reporting. The only outbound request is reading the GitHub release page when you click “Check for updates” in settings, which you can verify in update-check.ts.
MIT licensed · Copyright © 2026 xy200303