# paboot
**Repository Path**: noResign/paboot
## Basic Information
- **Project Name**: paboot
- **Description**: Built as one across clients — drive every agent on your computer from your phone or desktop (Claude Code, Codex and Dsh). 多端一体,从手机或桌面操纵你电脑上所有的 agent(Claude Code、Codex、Dsh)。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-10-04
- **Last Updated**: 2026-11-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: ai-aegnt, deepseek-harness, ClaudeCode, codex, Mobile
## README
> English | [中文](README.md)
paboot
One client for all your agents
[📚 **Docs**](docs/ui/README.md) • [📱 **Android client**](android/README.md) • [🖥️ **Desktop**](desktop/README.md) • [⚙️ **daemon**](daemon/README.md) • [🍎 **iOS**](ios/README.md)
[](https://www.npmjs.com/package/@noresign/paboot) [](LICENSE)
**Built as one system across clients — switch form factor whenever you like, and drive every agent on your computer (Claude Code, Codex and DeepSeek Harness today).**
**Your data always stays on your own machine**: phone and desktop drive the same sessions, and a dropped connection neither stops a run nor loses your place.
- **One client for all your agents** — Claude Code, Codex and DeepSeek Harness today.
- **Three clients, one system, each native** — Android, iOS and desktop share one protocol and one
design system, operate on the same sessions, and are each implemented natively.
- **Your data stays on your own machine** — agents use that machine's environment, tools, configs
and skills; everything stays on your computer or the server you deploy, and paboot itself needs
no account and collects no data.
- **Disconnects do not stop runs** — a run is decoupled from its connection: locking the phone,
switching apps or losing the network does not stop the work, and you pick it up where you left off.
- **Approval stays in your hands** — per-session `ask` / `acceptEdits` / `bypass`; deny by default,
with Bash, file writes and MCP calls arriving on your phone as approval cards, auto-denied on
timeout, and read-only commands auto-allowed.
- **Many runs at once, notified when done** — several sessions and runs in parallel without
blocking each other; when you are not in that conversation, approvals and finished runs trigger
a system notification.
- **See and roll back every change** — Git changes, per-file diffs, the directory tree and
text / image / video previews without leaving the conversation; every run keeps a checkpoint
snapshot, and desktop can roll back to any of them.
- **Front-end / back-end separation, deploy anywhere** — the clients and the daemon are separate.
The daemon runs anywhere via npm / Docker — any computer or server — so you can build your own
control matrix.
## Quick start
### 0. Prerequisites
paboot drives Claude Code, Codex and DeepSeek Harness today — install and configure at least one of
them **on the machine that runs the daemon**:
> [Codex CLI](https://developers.openai.com/codex/cli) and run `codex login`
>
> [Claude Code](https://code.claude.com/docs) and run `claude auth login`
>
> [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness): `npm install -g @deepseek-ai/dsh`;
> provide model credentials through the `DEEPSEEK_API_KEY` environment variable, or fill them in
> under **Settings → Models** in `dsh web`.
### 1. Desktop (recommended: it can run the daemon itself)
Install an installer from the [releases](https://github.com/noResign/paboot/releases) page and open
it. The desktop app ships a daemon runtime: if no daemon is running, it starts one automatically
(auto-start can be turned off in Settings), so **you do not need Node / npm**.
- After connecting, add or switch working directories under **Settings → Workspaces**; a local
daemon defaults to the built-in fallback workspace `~/.paboot/defaultworkspace`;
- Android / iOS on the same network can connect to that daemon too: use the LAN address shown by the
desktop app and the token at `~/.paboot/token`.
### 2. Standalone daemon (any computer or server)
The daemon is a headless back end exposed over HTTP/SSE, so it can live on any machine and serve any
client.
**npm**
```bash
npm install -g @noresign/paboot # the global command is `paboot`
paboot --workspace /path/to/your/project
# without --workspace the default workspace is ~/.paboot/defaultworkspace
```
- The token is persisted at `~/.paboot/token` (delete the file to rotate); pass
`--token` to set your own
- Full flags, configuration, and the HTTP/SSE API live in
[daemon/README.md](daemon/README.md)
**Docker**
```bash
cd daemon
PABOOT_UID=$(id -u) PABOOT_GID=$(id -g) docker compose up -d --build
# the image ships no agent CLI — install the one you use
docker exec -it paboot npm i -g @anthropic-ai/claude-code
docker compose restart daemon
```
- Token: `docker exec paboot cat /home/paboot/.paboot/token`
- Mounting a host project, authentication and publishing the image: see
[daemon/docs/docker.md](daemon/docs/docker.md)
### 3. Build clients from source
**(1) desktop**
The desktop build runs the daemon's tsc to generate the protocol types, so install both sides'
dependencies first:
```bash
cd daemon && pnpm install && cd ..
cd desktop && pnpm install # downloads the Electron binary (~100MB)
```
Day-to-day development and packaging:
```bash
cd desktop
pnpm dev # main process + renderer (HMR)
pnpm dist # package the current platform into release/
pnpm dist:linux # or dist:mac / dist:windows
```
Commands and build details live in [desktop/README.md](desktop/README.md).
**(2) android**
Open `android/` in Android Studio, pick a flavor and Run. The command-line equivalent:
```bash
cd android
./gradlew :app:assembleAlphaDebug
```
Two channels: `alphaDebug` (alpha) and `prodDebug` (prod); release signing needs
`android/keystore.properties`. Module layout and signing notes live in
[android/README.md](android/README.md).
**(3) ios**
Open `ios/paboot.xcodeproj` in Xcode and Run; the command-line equivalent:
```bash
cd ios
xcodebuild -project paboot.xcodeproj -scheme paboot \
-destination 'generic/platform=iOS Simulator' build CODE_SIGNING_ALLOWED=NO
```
Module layout and the pure-logic tests (`ios/PabootCore`) live in [ios/README.md](ios/README.md).
### 4. Connecting from outside your LAN (optional)
By default the daemon only listens on your LAN. To reach it from the internet, two
common approaches:
**(1) SSH relay** — for personal use. You need one machine with a public IP. On the
**computer running the daemon**:
```bash
ssh -N -R 0.0.0.0:4788:localhost:4780 user@your-server
```
Then point your phone at `http://your-server:4788` — 4788 is the port on the server; pick
any you like. Note that **SSH only encrypts the "computer → server" leg; the hop from the
phone to the server is still plain HTTP**, so the token travels in the clear there — which
is why this route is only for your own temporary use.
- The command binds `0.0.0.0`, but the server ignores that and binds to **loopback** by
default, so the phone still cannot reach it. Set `GatewayPorts clientspecified` in the
server's `/etc/ssh/sshd_config`
- The tunnel does not reconnect by itself; use `autossh -M 0 -N -R ...` or run it under systemd
**(2) Mesh / VPN tools** — put the computer and the phone on the same virtual network, then
connect to the address the daemon printed (or its virtual IP) exactly as if you were on the
same LAN. Nothing to change on the daemon side:
- **Tailscale / ZeroTier** — sign in and go; mobile apps included, with a relay fallback when NAT traversal fails
- **WireGuard** — roll your own; cleanest, but you maintain the keys and routes
The whole path is encrypted end to end, so there is no certificate or port exposure to
worry about.
> ⚠️ Any of the above means the daemon is exposed beyond your own machine,
> and it drives an agent with shell access — anyone who connects can drive it to operate
> your computer. Do not leak your IP or token, and make sure the token is strongly random.
## Mobile UI
| Sessions | Chat (Markdown rendering) | Approval | New session |
|---|---|---|---|
|
|
|
|
|
| Files / diff (multiple Git dirs) | All files | Workspaces | Settings |
|---|---|---|---|
|
|
|
|
|
## License
Apache-2.0 — see [LICENSE](LICENSE).