,
+): ProviderUsageBalance | null {
+ const limit = response.config?.monthlyLimit?.val ?? null;
+ const used = response.config?.used?.val ?? response.usage?.creditUsage ?? null;
+ if (limit === null && used === null) return null;
+ return {
+ id: "monthly_credits",
+ label: "Monthly credits",
+ used,
+ remaining: limit !== null && used !== null ? Math.max(0, limit - used) : null,
+ limit,
+ unit: "credits",
+ tone: toneFromUsedPct(usedPctOf(used, limit)),
+ };
+}
+
export class GrokQuotaProvider implements ProviderUsageFetcher {
readonly providerId = "grok";
readonly displayName = "Grok";
@@ -105,25 +122,7 @@ export class GrokQuotaProvider implements ProviderUsageFetcher {
}
const resp = GrokUsageResponseSchema.parse(await res.json());
- const monthlyLimit = resp.config?.monthlyLimit?.val ?? null;
- // Live CLI billing uses config.used.val; older mocks used usage.creditUsage.
- const creditUsage = resp.config?.used?.val ?? resp.usage?.creditUsage ?? null;
- const balances: ProviderUsageBalance[] = [];
- if (monthlyLimit !== null || creditUsage !== null) {
- const remaining =
- monthlyLimit !== null && creditUsage !== null
- ? Math.max(0, monthlyLimit - creditUsage)
- : null;
- balances.push({
- id: "monthly_credits",
- label: "Monthly credits",
- used: creditUsage,
- remaining,
- limit: monthlyLimit,
- unit: "credits",
- tone: toneFromUsedPct(usedPctOf(creditUsage, monthlyLimit)),
- });
- }
+ const balance = grokMonthlyCreditBalance(resp);
return {
providerId: this.providerId,
@@ -131,7 +130,7 @@ export class GrokQuotaProvider implements ProviderUsageFetcher {
status: "available",
planLabel: null,
windows: [],
- balances,
+ balances: balance ? [balance] : [],
details: [],
error: null,
};
diff --git a/packages/website/src/content/alternatives/claude-desktop.md b/packages/website/src/content/alternatives/claude-desktop.md
index b4f55f9fba..53a5e9a607 100644
--- a/packages/website/src/content/alternatives/claude-desktop.md
+++ b/packages/website/src/content/alternatives/claude-desktop.md
@@ -9,7 +9,7 @@ order: 55
Claude Desktop is Anthropic's desktop app for Claude. It includes Chat, Cowork, and Claude Code in one app. Claude Code runs in the desktop app on macOS and Windows.
-Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (AGPL-3.0).
+Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (Apache-2.0).

@@ -97,7 +97,7 @@ Claude supports voice in Claude's own mobile and app surfaces. Claude Code itsel
| | Paseo | Claude Desktop |
| ---------------------------- | --------------------------------------------------------------- | --------------------------------- |
-| License | Open source (AGPL-3.0) | Not published as open source |
+| License | Open source (Apache-2.0) | Not published as open source |
| Desktop platforms | macOS, Linux, Windows | macOS, Windows |
| Native mobile | iOS, Android | iOS, Android Claude apps |
| Coding agents | Claude Code, Codex, OpenCode, Pi + 30+ via ACP catalog + custom | Claude Code |
diff --git a/packages/website/src/content/alternatives/codex-app.md b/packages/website/src/content/alternatives/codex-app.md
index af29184926..f01fb3cf06 100644
--- a/packages/website/src/content/alternatives/codex-app.md
+++ b/packages/website/src/content/alternatives/codex-app.md
@@ -9,7 +9,7 @@ order: 54
Codex App is OpenAI's desktop app for working with Codex threads in parallel. It runs on macOS and Windows, with local, worktree, and cloud modes.
-Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (AGPL-3.0).
+Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (Apache-2.0).

@@ -91,7 +91,7 @@ Paseo supports dictation and realtime voice mode. Speech-to-text and text-to-spe
| | Paseo | Codex App |
| ---------------------------- | --------------------------------------------------------------- | ---------------------------- |
-| License | Open source (AGPL-3.0) | Not published as open source |
+| License | Open source (Apache-2.0) | Not published as open source |
| Desktop platforms | macOS, Linux, Windows | macOS, Windows |
| Native mobile | iOS, Android | No |
| Providers | Codex, Claude Code, OpenCode, Pi + 30+ via ACP catalog + custom | Codex |
diff --git a/packages/website/src/content/alternatives/conductor.md b/packages/website/src/content/alternatives/conductor.md
index 49ffb867f2..5996badd41 100644
--- a/packages/website/src/content/alternatives/conductor.md
+++ b/packages/website/src/content/alternatives/conductor.md
@@ -9,7 +9,7 @@ order: 50
Conductor is a macOS app for running Claude Code and Codex in parallel git worktrees. Closed source.
-Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (AGPL-3.0).
+Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (Apache-2.0).

@@ -80,7 +80,7 @@ Paseo's speech-to-text and text-to-speech run locally on your device. Nothing le
| | Paseo | Conductor |
| ---------------------------- | --------------------------------------------------------------- | ------------------ |
-| License | Open source (AGPL-3.0) | Closed source |
+| License | Open source (Apache-2.0) | Closed source |
| Platforms | macOS, Linux, Windows | macOS only |
| Native mobile | iOS, Android | — |
| Providers | Claude Code, Codex, OpenCode, Pi + 30+ via ACP catalog + custom | Claude Code, Codex |
diff --git a/packages/website/src/content/alternatives/happy-coder.md b/packages/website/src/content/alternatives/happy-coder.md
index 8af4c2f21f..22fd0d80f0 100644
--- a/packages/website/src/content/alternatives/happy-coder.md
+++ b/packages/website/src/content/alternatives/happy-coder.md
@@ -9,7 +9,7 @@ order: 53
Happy Coder is a mobile and web client for Claude Code and Codex. It wraps the agent CLI on your laptop and syncs sessions to phone and browser over an end-to-end encrypted relay. Open source under MIT.
-Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (AGPL-3.0).
+Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (Apache-2.0).

@@ -82,7 +82,7 @@ Paseo's speech-to-text and text-to-speech run locally on your device. Nothing le
| | Paseo | Happy Coder |
| ---------------------------- | --------------------------------------------------------------- | ---------------------- |
-| License | Open source (AGPL-3.0) | Open source (MIT) |
+| License | Open source (Apache-2.0) | Open source (MIT) |
| Desktop app | macOS, Linux, Windows | — |
| Native mobile | iOS, Android | iOS, Android |
| Architecture | Daemon owns agent lifecycle | Wraps the agent CLI |
diff --git a/packages/website/src/content/alternatives/openchamber.md b/packages/website/src/content/alternatives/openchamber.md
index 6980a97d15..f94984c645 100644
--- a/packages/website/src/content/alternatives/openchamber.md
+++ b/packages/website/src/content/alternatives/openchamber.md
@@ -9,7 +9,7 @@ order: 52
OpenChamber is a macOS desktop app for OpenCode. Also available as a PWA. Open source under MIT.
-Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (AGPL-3.0).
+Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (Apache-2.0).

@@ -76,7 +76,7 @@ Paseo's speech-to-text and text-to-speech run locally on your device. OpenChambe
| | Paseo | OpenChamber |
| ---------------------------- | --------------------------------------------------------------- | ----------------- |
-| License | Open source (AGPL-3.0) | Open source (MIT) |
+| License | Open source (Apache-2.0) | Open source (MIT) |
| Desktop platforms | macOS, Linux, Windows | macOS |
| Mobile | Native iOS, Android | PWA |
| Providers | Claude Code, Codex, OpenCode, Pi + 30+ via ACP catalog + custom | OpenCode |
diff --git a/packages/website/src/content/alternatives/opencode-desktop.md b/packages/website/src/content/alternatives/opencode-desktop.md
index eac0e40d09..774828b9dd 100644
--- a/packages/website/src/content/alternatives/opencode-desktop.md
+++ b/packages/website/src/content/alternatives/opencode-desktop.md
@@ -9,7 +9,7 @@ order: 56
OpenCode Desktop is the desktop app for OpenCode. It is available in beta for macOS, Windows, and Linux.
-Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (AGPL-3.0).
+Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (Apache-2.0).

@@ -87,7 +87,7 @@ OpenCode supports multi-session work on the same project. If you want worktree i
Both tools are open source.
-Paseo is AGPL-3.0 and runs your agents through a daemon you control. OpenCode is open source and says it does not store your code or context data by default. OpenCode share links are public when you create them.
+Paseo is Apache-2.0 and runs your agents through a daemon you control. OpenCode is open source and says it does not store your code or context data by default. OpenCode share links are public when you create them.
## Voice
@@ -97,7 +97,7 @@ Paseo supports dictation and realtime voice mode. Speech-to-text and text-to-spe
| | Paseo | OpenCode Desktop |
| ---------------------------- | --------------------------------------------------------------- | ------------------------------- |
-| License | Open source (AGPL-3.0) | Open source |
+| License | Open source (Apache-2.0) | Open source |
| Desktop platforms | macOS, Linux, Windows | macOS, Linux, Windows |
| Native mobile | iOS, Android | No |
| Agent harnesses | Claude Code, Codex, OpenCode, Pi + 30+ via ACP catalog + custom | OpenCode |
diff --git a/packages/website/src/content/alternatives/superset.md b/packages/website/src/content/alternatives/superset.md
index 43c440cb10..b3226fd3f1 100644
--- a/packages/website/src/content/alternatives/superset.md
+++ b/packages/website/src/content/alternatives/superset.md
@@ -9,7 +9,7 @@ order: 51
Superset is a macOS desktop app for running CLI coding agents in parallel git worktrees. Source-available under the Elastic License 2.0.
-Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (AGPL-3.0).
+Paseo is an app for orchestrating coding agents, with native clients on desktop, mobile, web, and the CLI. Open source (Apache-2.0).

@@ -19,7 +19,7 @@ Pick Superset if you prefer a terminal-first interface where agents live inside
Pick Paseo if you want:
-- An OSI-approved open source license (AGPL-3.0)
+- An OSI-approved open source license (Apache-2.0)
- Linux or Windows
- A native mobile app
- No login wall
@@ -28,7 +28,7 @@ Pick Paseo if you want:
## License
-Paseo is open source under AGPL-3.0. Audit it, fork it, redistribute it.
+Paseo is open source under Apache-2.0. Audit it, fork it, redistribute it.
Superset is source-available under the Elastic License 2.0. The source is on GitHub, but the license restricts hosting it as a service and limits redistribution.
@@ -98,7 +98,7 @@ Superset is free for one seat with local workspaces only. Team features and sync
| | Paseo | Superset |
| ---------------------------- | ----------------------------------------------------- | -------------------------------------- |
-| License | Open source (AGPL-3.0) | Source-available (Elastic License 2.0) |
+| License | Open source (Apache-2.0) | Source-available (Elastic License 2.0) |
| Platforms | macOS, Linux, Windows | macOS only |
| Native mobile | iOS, Android | — |
| Login required | No | Yes (Superset account) |
diff --git a/packages/website/src/llms.ts b/packages/website/src/llms.ts
index dec2b73451..34c401dc63 100644
--- a/packages/website/src/llms.ts
+++ b/packages/website/src/llms.ts
@@ -14,7 +14,7 @@ A self-hosted daemon manages agent lifecycle, exposes a WebSocket API, and ships
Paseo supports every major coding agent: Claude Code, Codex, GitHub Copilot, OpenCode, Cursor, Gemini, Cline, Goose, Amp, Aider, and 30+ others. Each agent runs as its own process; Paseo handles I/O, persistence, git worktree isolation, schedules, and skills.
-Distribution: native apps for Mac, Windows, Linux, iOS, and Android; web app; Homebrew; npm. Source: AGPL-3.0 at https://github.com/getpaseo/paseo. Marketing site: https://paseo.sh.
+Distribution: native apps for Mac, Windows, Linux, iOS, and Android; web app; Homebrew; npm. Source: Apache-2.0 at https://github.com/getpaseo/paseo. Marketing site: https://paseo.sh.
`;
function docLine(doc: Doc): string {
diff --git a/packages/website/src/routes/privacy.tsx b/packages/website/src/routes/privacy.tsx
index ffe49c3fe3..38443f71e2 100644
--- a/packages/website/src/routes/privacy.tsx
+++ b/packages/website/src/routes/privacy.tsx
@@ -40,9 +40,8 @@ function Privacy() {
Session IDs
- All messages between your phone and daemon are end-to-end encrypted with
- XSalsa20-Poly1305. The relay cannot read your messages, see your code, or decrypt your
- traffic.
+ Your phone and daemon encrypt relay payloads end-to-end with NaCl box encryption
+ (Curve25519 plus XSalsa20-Poly1305). The relay only carries the ciphertext.
diff --git a/public-docs/security.md b/public-docs/security.md
index bfe0993bdd..982b956829 100644
--- a/public-docs/security.md
+++ b/public-docs/security.md
@@ -34,8 +34,8 @@ Relay is off on new installations. When you pair a device from `paseo`, `paseo d
1. The daemon generates a persistent ECDH keypair and stores it in `$PASEO_HOME/daemon-keypair.json`
2. When you scan the QR code or click the pairing link, your phone receives the daemon's public key
3. Your phone sends a handshake message with its own public key. The daemon will not accept any commands until this handshake completes.
-4. Both sides perform a Curve25519 ECDH key exchange to derive a shared key. All subsequent
- messages are encrypted with XSalsa20-Poly1305 (NaCl `box`).
+4. Each side combines its Curve25519 key with the peer public key, then uses the resulting NaCl
+ `box` channel for XSalsa20-Poly1305 protected payloads.
The relay sees only: IP addresses, timing, message sizes, and session IDs. It cannot read message contents, forge messages, or derive encryption keys from observing the handshake.
@@ -44,8 +44,8 @@ The relay sees only: IP addresses, timing, message sizes, and session IDs. It ca
The daemon requires a valid cryptographic handshake before processing any commands. A compromised relay cannot:
- **Send commands**, Without your phone's private key, it cannot complete the handshake
-- **Read your traffic**, All messages are encrypted with XSalsa20-Poly1305 (NaCl `box`) after the handshake
-- **Forge messages**, NaCl `box` provides authenticated encryption; tampered messages are rejected
+- **Read your traffic**, Only the paired endpoints can open the NaCl `box` payloads
+- **Forge messages**, The authenticated cipher rejects modified payloads
- **Replay old messages**, Each session derives fresh encryption keys
### Trust model