08f25f065a1a4724f4f8f15cd90f78587d676cb2
When interrupting a Claude agent mid-tool-call and sending a replacement message, the SDK's abort error result was being attributed to the new foreground turn, causing [System Error] banners and displaced replies. Root cause: pendingInterruptAbort was cleared by visible activity from the new turn before the stale result arrived (timing race), and the stale result then poisoned the replacement turn. Fix: - Suppress stale non-success results at the top of routeSdkMessageFromPump before any turn attribution, using both flag-based (pendingInterruptAbort) and content-based (isAbortError) detection - Stop clearing pendingInterruptAbort on visible activity — only consume it when a result message arrives - Prevent idle flash during replacement by checking pendingReplacement in agent-manager turn_completed/turn_canceled handlers - Fix vitest env loading to use import.meta.url instead of process.cwd() - Load .env.test eagerly in agent-configs.ts for collection-time availability Includes regression tests covering the exact f160a2a3 daemon log ordering.
Paseo
One interface for all your coding agents.
Run agents in parallel on your own machines. Ship from your phone or your desk.
- Self-hosted — Agents run on your machine with your full dev environment. Use your tools, your configs, and your skills.
- Multi-provider — Claude Code, Codex, and OpenCode through the same interface. Pick the right model for each job.
- Voice control — Dictate tasks or talk through problems in voice mode. Hands-free when you need it.
- Cross-device — iOS, Android, desktop, web, and CLI. Start work at your desk, check in from your phone, script it from the terminal.
Getting Started
Download the desktop app from paseo.sh or the GitHub releases page — it bundles the daemon so there's nothing else to install.
Headless / server mode
To run the daemon on a remote or headless machine:
npm install -g @getpaseo/cli
paseo
Then connect from the desktop app, mobile app, or CLI.
For full setup and configuration, see:
Development
Quick monorepo package map:
packages/server: Paseo daemon (agent process orchestration, WebSocket API, MCP server)packages/app: Expo client (iOS, Android, web)packages/cli:paseoCLI for daemon and agent workflowspackages/desktop: Electron desktop apppackages/relay: Relay package for remote connectivitypackages/website: Marketing site and documentation (paseo.sh)
Common commands:
# run all local dev services
npm run dev
# run individual surfaces
npm run dev:server
npm run dev:app
npm run dev:website
# repo-wide checks
npm run typecheck
License
AGPL-3.0
Languages
TypeScript
98%
JavaScript
1.4%
Shell
0.1%
