Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
a1950e8
docs: design secure remote desktop
codepilotios Jun 27, 2026
c24de64
docs: plan secure remote desktop
codepilotios Jun 27, 2026
b713427
chore: ignore local worktrees
codepilotios Jun 27, 2026
ce1876e
build: add remote desktop wire contracts
codepilotios Jun 27, 2026
375c834
fix: finalize remote desktop lease revocation
codepilotios Jun 27, 2026
6dd2d36
feat: add remote desktop native IPC
codepilotios Jun 27, 2026
807be31
fix: harden remote desktop native IPC
codepilotios Jun 27, 2026
c4575b0
feat: add remote desktop gateway APIs
codepilotios Jun 27, 2026
cf61d84
feat: add remote desktop trust management UI
codepilotios Jun 27, 2026
17f79a8
feat: stream and control the Mac desktop
codepilotios Jun 27, 2026
a98048e
feat: pair trusted CodePilot devices
codepilotios Jun 27, 2026
237c3ba
feat: add iPhone remote desktop controls
codepilotios Jun 27, 2026
54a3e88
feat: harden remote desktop sessions
codepilotios Jun 27, 2026
5183761
docs: specify WebRTC remote desktop transport
codepilotios Jun 28, 2026
0ade8bf
feat: add secure remote desktop foundation
codepilotios Jun 28, 2026
bbe8fa6
feat: follow remote cursor while zoomed
codepilotios Jun 28, 2026
7433da3
feat: stream display frames with ScreenCaptureKit
codepilotios Jun 28, 2026
1eab830
feat: negotiate Mac WebRTC remote desktop peer
codepilotios Jun 28, 2026
29db0ff
feat: render WebRTC remote desktop video on iOS
codepilotios Jun 28, 2026
d21b07b
feat: send remote desktop input over WebRTC
codepilotios Jun 28, 2026
f7f6868
fix: smooth remote desktop cursor overlay
codepilotios Jun 28, 2026
f073ee4
fix: align remote cursor coordinate space
codepilotios Jun 28, 2026
97ae3fe
fix: sync remote cursor from host
codepilotios Jun 28, 2026
1b60864
fix: align remote cursor hotspot
codepilotios Jun 28, 2026
1cf93c0
fix: scale remote pointer deltas by viewport
codepilotios Jun 28, 2026
0901b33
fix: use host cursor for remote desktop video
codepilotios Jun 28, 2026
b71c802
fix: remove remote desktop cursor overlay
codepilotios Jun 28, 2026
1e26028
fix: show host cursor marker
codepilotios Jun 28, 2026
635154a
fix: preserve remote input ordering
codepilotios Jun 28, 2026
453ccb0
fix: click at remote cursor marker
codepilotios Jun 28, 2026
e431a17
fix: align click injection with remote cursor
codepilotios Jun 28, 2026
30edfee
fix: match WebRTC video layout to viewport
codepilotios Jun 28, 2026
d1ed054
fix: align remote desktop cursor marker
codepilotios Jun 28, 2026
42711c2
fix: lower remote desktop cursor marker
codepilotios Jun 28, 2026
e7490f9
fix: preserve chat message line breaks
codepilotios Jun 28, 2026
7474bb5
feat: open Mac localhost URLs in iOS app
codepilotios Jun 28, 2026
c6b2969
docs: specify CodePilot production readiness
codepilotios Jun 28, 2026
85939e9
docs: plan CodePilot production readiness work
codepilotios Jun 28, 2026
fee4f5e
feat: expose stable gateway health and errors
codepilotios Jun 28, 2026
7661c80
feat: clarify CodePilot setup and gateway operations
codepilotios Jun 28, 2026
24bd6a6
feat: add CodePilot iOS connection setup
codepilotios Jun 28, 2026
52951f6
docs: prepare CodePilot public beta guides
codepilotios Jun 28, 2026
42fa143
test: isolate gateway tests from local account state
codepilotios Jun 28, 2026
5735508
docs: specify Cloudflare setup wizard
codepilotios Jun 29, 2026
be5e971
docs: plan Cloudflare setup wizard
codepilotios Jun 30, 2026
89949da
feat: add Cloudflare setup automation
codepilotios Jul 1, 2026
a575e4b
feat: model Cloudflare setup state
codepilotios Jul 1, 2026
b181f77
feat: add Cloudflare setup wizard
codepilotios Jul 1, 2026
1ef553b
docs: document Cloudflare setup wizard
codepilotios Jul 1, 2026
c783dff
docs: plan launch agent system
codepilotios Jul 1, 2026
85c6bcb
fix: open markdown file links in codepilot app
codepilotios Jul 1, 2026
a36684e
fix: add dismiss controls to file preview
codepilotios Jul 1, 2026
5b3346b
docs: record codepilot launch decisions
codepilotios Jul 1, 2026
1fdcb7a
chore: add codepilot agent fallback runner
codepilotios Jul 1, 2026
6bf8d84
docs: prepare public beta presence
codepilotios Jul 1, 2026
c1112ef
Merge remote-tracking branch 'origin/main' into agent/presence-mainte…
codepilotios Jul 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 15 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# CodePilot

CodePilot is a Mac menu bar app and iPhone companion for running coding-agent sessions from a Mac you control. It currently focuses on Codex account switching, usage visibility, remote iPhone access, file uploads, connector status, notifications, and gateway-backed conversation control.
CodePilot is a public-beta Mac menu bar app and iPhone companion for running coding-agent sessions from a Mac you control. It is built first for Codex CLI users who want mobile visibility, account switching, file uploads, connector status, notifications, and gateway-backed conversation control without exposing their Mac directly to the internet.

The project is designed to become provider-neutral over time, including future Claude Code compatibility.
The product name is provider-neutral, but the current implementation is Codex-focused. Future provider support, including Claude Code compatibility, is planned only after the Codex beta path is stable.

## License

Expand All @@ -17,9 +17,13 @@ Commercial use requires a separate written license. See [LICENSE.md](LICENSE.md)
- **CodePilot iOS**: an iPhone app that connects to the gateway for remote chat, file uploads, usage status, steering, stopping turns, and notifications.
- **Cloudflare Tunnel support**: optional remote access to the gateway through a user-owned Cloudflare Tunnel.

## Beta Audience

CodePilot is for AI coding users who already run Codex CLI on a Mac and are comfortable with beta software. The beta is focused on installation, connection reliability, safe remote access, and clear recovery steps. It does not make pricing, subscription, App Store availability, or future-provider compatibility promises.

## Current Provider Support

CodePilot currently supports Codex by working with the local Codex home on the Mac:
CodePilot currently supports Codex by working with the local Codex home and CodePilot state directory on the Mac:

- `~/.codex/auth.json`
- `~/.codex/state_5.sqlite`
Expand Down Expand Up @@ -50,9 +54,15 @@ The public product name is provider-neutral, but the first implementation remain

See:

- [Public beta site](docs/index.md)
- [Mac Installation](docs/INSTALL_MAC.md)
- [iOS Installation](docs/INSTALL_IOS.md)
- [Cloudflare Setup](docs/CLOUDFLARE_SETUP.md)
- [FAQ](docs/FAQ.md)
- [Privacy](docs/PRIVACY.md)
- [Support](docs/SUPPORT.md)
- [Changelog](docs/CHANGELOG.md)
- [Screenshot Plan](docs/SCREENSHOTS.md)
- [Security](docs/SECURITY.md)
- [Architecture](docs/ARCHITECTURE.md)
- [Troubleshooting](docs/TROUBLESHOOTING.md)
Expand All @@ -73,8 +83,8 @@ See:

## Screenshots

Screenshots will be added before the first public release.
Public-safe screenshots are being prepared for the beta. The screenshot checklist is tracked in [docs/SCREENSHOTS.md](docs/SCREENSHOTS.md); no private account names, hosts, tokens, file paths, or personal screenshots should be committed.

## Public Release Status

CodePilot is being prepared for broader publishing. Expect some internal names, bundle identifiers, LaunchAgent labels, and local state paths to still contain legacy Codex-specific names during the first migration phase.
CodePilot is being prepared for a TestFlight-first iOS beta and GitHub/source distribution for the Mac app, gateway, and docs. Expect some internal names, bundle identifiers, LaunchAgent labels, and local state paths to still contain legacy Codex-specific names during the first migration phase.
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ final class RemoteDesktopCoordinatorTests: XCTestCase {

let pending = try coordinator.beginPairing(
deviceID: "phone-1",
name: "Tony's iPhone",
name: "Beta iPhone",
publicKeyRawRepresentation: publicKey,
macName: "Mac mini"
macName: "Mac host"
)

XCTAssertEqual(coordinator.snapshot.pendingPairing?.deviceID, "phone-1")
Expand All @@ -41,9 +41,9 @@ final class RemoteDesktopCoordinatorTests: XCTestCase {

_ = try coordinator.beginPairing(
deviceID: "phone-1",
name: "Tony's iPhone",
name: "Beta iPhone",
publicKeyRawRepresentation: publicKey,
macName: "Mac mini"
macName: "Mac host"
)
try coordinator.approvePendingPairing()

Expand All @@ -69,9 +69,9 @@ final class RemoteDesktopCoordinatorTests: XCTestCase {
let key = P256.Signing.PrivateKey()
let challenge = coordinator.pairingStore.issueChallenge(
deviceID: "phone-1",
name: "Tony's iPhone",
name: "Beta iPhone",
publicKeyRawRepresentation: key.publicKey.rawRepresentation,
macName: "Mac mini"
macName: "Mac host"
)
let approval = try coordinator.pairingStore.verifyChallenge(
challenge,
Expand Down
16 changes: 16 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Changelog

## Unreleased

### Public Beta Preparation

- Added public beta docs for GitHub Pages, FAQ, privacy, support, screenshots, and changelog.
- Clarified that CodePilot currently targets Codex CLI users and remains beta-focused.
- Documented the Mac, gateway, iPhone, Cloudflare, and troubleshooting paths from a public user perspective.
- Added guidance for keeping screenshots, logs, support requests, and public issues free of private names, hosts, tokens, and local paths.

### Recent Product Work

- Added Cloudflare setup wizard docs and automation.
- Added gateway health, setup, and recovery guidance.
- Added remote desktop, localhost URL opening, file preview, and gateway-backed iPhone control improvements.
33 changes: 33 additions & 0 deletions docs/FAQ.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# FAQ

## Who is CodePilot for?

CodePilot is for AI coding users who already run Codex CLI on a Mac and want an iPhone companion for visibility, file uploads, turn control, usage status, and account switching.

## Is CodePilot ready for production teams?

No. The current release track is a public beta. Use it on a trusted Mac, expect rough edges, and review the security and privacy docs before exposing the gateway outside your local network.

## Does CodePilot replace Codex CLI?

No. CodePilot uses Codex on your Mac. The iPhone app talks to the CodePilot gateway, and the gateway uses the active Codex setup on that Mac.

## Does it support Claude Code or other coding agents?

Not yet. The name is provider-neutral, but the first beta is Codex-focused. Future provider work should wait until the Codex setup, gateway, and support path are stable.

## Do I need Cloudflare?

Only for access away from your local network. Same-network iPhone access can use a local gateway URL. Remote access should use HTTPS and a private gateway token.

## Does CodePilot send my Codex credentials to a hosted service?

No hosted CodePilot service is required for the current beta. Credentials stay on the Mac unless you choose to expose the local gateway through infrastructure you control, such as Cloudflare Tunnel.

## What should I avoid posting in issues?

Do not post auth files, gateway tokens, private hostnames, personal account names, local file paths, private screenshots, Apple identifiers, or logs that contain any of those values.

## Is commercial use allowed?

Not without a separate written license. See the repository license, commercial license, and notice files.
6 changes: 6 additions & 0 deletions docs/INSTALL_IOS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ CodePilot iOS connects to a Mac running the CodePilot gateway.
- The gateway bearer token from the Mac.
- Optional: Cloudflare Tunnel for remote access outside the local network.

## Beta Installation

TestFlight is the intended iPhone distribution path during the public beta. Install the beta build from the TestFlight invite shared by the maintainers, then connect it to your own Mac gateway.

Developers building from source can open the Xcode project under `ios/CodexPhone/` and build the `CodexPhone` scheme for a simulator or device configured with their own signing setup.

## Connection

On first launch:
Expand Down
39 changes: 39 additions & 0 deletions docs/PRIVACY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Privacy

CodePilot is designed around a Mac you control. In the current beta there is no hosted CodePilot account service.

## Data On The Mac

The Mac app and gateway use local Codex and CodePilot state, including auth files, saved account profiles, usage metadata, uploaded files, and gateway configuration. Treat the Mac as trusted infrastructure.

Sensitive local files include:

- `~/.codex/auth.json`
- `~/.codex-account-switcher/accounts/*/auth.json`
- `~/.codex-account-switcher/phone-gateway-token`
- `~/.codex-account-switcher/phone-gateway.env`
- `~/.codex-account-switcher/phone-uploads/`

Do not commit these files or include their contents in screenshots, logs, issues, or support requests.

## iPhone App

The iPhone app stores the gateway URL and token locally on the device so it can reconnect to your Mac gateway. The app talks to the gateway you configure; it does not need a hosted CodePilot account for the current beta.

## Gateway And Remote Access

The gateway exposes local Codex-related actions to trusted clients. It must require the gateway token. If you use Cloudflare Tunnel, Cloudflare becomes part of your network path and its own terms and privacy practices apply.

Do not publish gateway URLs, bearer tokens, private hostnames, or screenshots showing connection details.

## Diagnostics And Support

Before sharing logs or screenshots, remove:

- Account names and email addresses.
- Gateway URLs and hostnames.
- Bearer tokens and auth file contents.
- Local file paths and uploaded file names.
- Apple team identifiers or signing details.

This privacy copy is intended for the beta docs and should be reviewed before any App Store, paid, or broader public release.
6 changes: 3 additions & 3 deletions docs/PRODUCTION_READINESS_IMPLEMENTATION_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ curl -fsS -X POST http://127.0.0.1:8787/codexphone/api/build
curl -fsS http://127.0.0.1:8787/codexphone/api/status
```

Wait until `current.state == "complete"`, then verify the manifest and IPA from `https://ota.sprenkeling.co` return HTTP 200.
Wait until `current.state == "complete"`, then verify the manifest and IPA from the configured OTA domain return HTTP 200.

- [ ] **Step 8: Commit**

Expand Down Expand Up @@ -497,8 +497,8 @@ Expected: `current.state` becomes `complete`.
Run:

```sh
curl -I https://ota.sprenkeling.co/codexphone/manifest.plist
curl -I https://ota.sprenkeling.co/codexphone/CodePilot.ipa
curl -I https://ota.example.com/codexphone/manifest.plist
curl -I https://ota.example.com/codexphone/CodePilot.ipa
```

Expected: HTTP 200 or the exact current generated manifest/IPA paths return HTTP 200.
Expand Down
2 changes: 2 additions & 0 deletions docs/RELEASE_CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@
- [ ] Public manifest and IPA return HTTP 200 from the OTA domain
- [ ] TestFlight upload if shipping a beta build
- [ ] Public docs checked for personal names, private email addresses, tokens, hostnames, Apple team IDs, and machine-specific paths
- [ ] Public screenshots use sanitized demo data only
- [ ] Privacy, support, FAQ, and README copy reviewed for beta positioning
- [ ] `.superpowers/` scratch files are not committed
25 changes: 25 additions & 0 deletions docs/SCREENSHOTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Screenshot Plan

No public screenshots are committed yet.

Use this checklist before adding screenshots to the repository, GitHub Pages, TestFlight, App Store metadata, README, or support docs:

- Use demo account names only, such as `Work`, `Personal`, or `Demo`.
- Use example hostnames only, such as `codepilot.example.com`.
- Hide gateway bearer tokens and auth details.
- Hide local file paths unless the path is a generic example.
- Hide private thread names, prompts, uploads, and repository names.
- Hide Apple IDs, team IDs, bundle signing details, and TestFlight account details.
- Prefer clean beta flows: setup checklist, gateway status, iPhone connection, thread list, file upload, and remote desktop permission state.

Recommended beta screenshot set:

- Mac menu bar status with demo account usage.
- Mac setup checklist showing ready and optional states.
- Cloudflare setup wizard using an example hostname.
- iPhone connection wizard for same-network and Cloudflare modes.
- iPhone thread list with demo thread names.
- File upload confirmation using non-private sample files.
- Remote desktop permission screen without a live private desktop.

Create real screenshots only from sanitized demo data.
2 changes: 2 additions & 0 deletions docs/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,5 @@ CodePilot swaps local provider auth files. It waits for active turns to finish b
Do not include auth files, bearer tokens, logs containing tokens, or uploaded private files in issue reports.

Before sharing logs, search for account names, email addresses, hostnames, tokens, Apple team identifiers, and local file paths.

See [Privacy](PRIVACY.md) and [Support](SUPPORT.md) for public beta reporting guidance.
40 changes: 40 additions & 0 deletions docs/SUPPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Support

CodePilot beta support is handled through public repository issues and pull requests.

## Before Opening An Issue

Check:

- [Mac installation](INSTALL_MAC.md)
- [iOS installation](INSTALL_IOS.md)
- [Cloudflare setup](CLOUDFLARE_SETUP.md)
- [Troubleshooting](TROUBLESHOOTING.md)
- [Security](SECURITY.md)
- [FAQ](FAQ.md)

## Helpful Issue Details

Include:

- Mac app, gateway, or iOS app area affected.
- What you expected to happen.
- What happened instead.
- Whether the iPhone is on the same network or using Cloudflare.
- The visible recovery message, if one appears.
- Sanitized logs with private values removed.

## Do Not Share

Do not include:

- Codex auth files.
- Gateway bearer tokens.
- Private hostnames or Cloudflare tunnel URLs.
- Personal account names or email addresses.
- Apple account, team, signing, or TestFlight identifiers.
- Screenshots that show private files, paths, accounts, tokens, or hosts.

## Security Reports

For issues involving exposed credentials, unsafe gateway access, remote desktop bypass, or uploaded private files, avoid public details. Open a minimal issue that says a security report is available and coordinate disclosure with the maintainers.
4 changes: 4 additions & 0 deletions docs/_config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
title: CodePilot
description: Public beta docs for CodePilot, a Mac and iPhone companion for Codex CLI users.
markdown: kramdown
theme: minima
31 changes: 31 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# CodePilot Public Beta

CodePilot is a Mac menu bar app, local gateway, and iPhone companion for Codex CLI users who want to monitor and steer coding-agent sessions from a Mac they control.

The beta is focused on practical workflows for AI coding users:

- See active Codex usage and account status from the Mac and iPhone.
- Switch saved Codex account profiles after active turns finish.
- Connect the iPhone app to the Mac gateway on the same network or through a user-owned Cloudflare Tunnel.
- Upload files, inspect threads, steer or stop turns where supported, and receive turn-finished notifications.
- Use remote desktop features only after pairing and macOS permission checks.

CodePilot is source-available for noncommercial use. It is not OSI open source. See the repository license files before redistributing or using it commercially.

## Start Here

- [Mac installation](INSTALL_MAC.md)
- [iOS installation](INSTALL_IOS.md)
- [Cloudflare remote access](CLOUDFLARE_SETUP.md)
- [Troubleshooting](TROUBLESHOOTING.md)
- [FAQ](FAQ.md)
- [Privacy](PRIVACY.md)
- [Support](SUPPORT.md)
- [Changelog](CHANGELOG.md)
- [Screenshot plan](SCREENSHOTS.md)

## Beta Limits

CodePilot currently targets Codex CLI. Future provider support is not part of the first beta promise.

Do not share screenshots, logs, gateway URLs, tokens, account names, hostnames, or local file paths in public issues unless they have been sanitized.
4 changes: 2 additions & 2 deletions docs/superpowers/plans/2026-06-27-secure-remote-desktop.md
Original file line number Diff line number Diff line change
Expand Up @@ -632,11 +632,11 @@ Verify pairing approval, Face ID session start, Wi-Fi direct path, cellular TURN
Run:

```bash
cd /Users/homeserver/Developer/de-kleine-eekhoorn/ios
cd /Users/example/CodePilot/ios
python3 scripts/dke_ota_build.py build --app codexphone --branch release
```

Expected: status reaches `complete`; output reports bundle ID `com.tony.codexphone`; both public manifest and IPA return HTTP 200; the OTA install updates the configured CodePilot app rather than creating another instance.
Expected: status reaches `complete`; output reports bundle ID `legacy.bundle.identifier`; both public manifest and IPA return HTTP 200; the OTA install updates the configured CodePilot app rather than creating another instance.

- [ ] **Step 7: Commit**

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@
- Agents must not invent credentials, create accounts with fake identity, spam communities, or bypass platform rules.
- Reddit promotion must be transparent: disclose the creator relationship and follow subreddit rules.
- Anything involving App Store submission, payments, pricing, legal terms, public claims, or user data policy requires explicit human approval.
- Agents should ping Tony in the current Codex thread only when intervention is necessary.
- Agents should ping the maintainer in the current Codex thread only when intervention is necessary.
- Routine findings should become GitHub issues, PRs, docs updates, or release notes without a ping.
- Every code change must be tested before being marked complete.
- Every iOS app change must trigger the project OTA build process before completion.

## Escalation Rules

Ping Tony only for:
Ping the maintainer only for:

- Apple, Cloudflare, GitHub, Reddit, or payment-provider authentication.
- App Store Connect agreements, pricing, tax, banking, privacy, age rating, export compliance, or review submission approval.
Expand All @@ -31,7 +31,7 @@ Ping Tony only for:
- A public post, launch announcement, paid promotion, or subreddit submission that needs final approval.
- A product decision that affects subscription value, pricing, usage limits, or public positioning.

Do not ping Tony for:
Do not ping the maintainer for:

- Routine dependency updates that pass tests.
- GitHub issue triage.
Expand Down Expand Up @@ -146,7 +146,7 @@ Do not ping Tony for:
- Track feedback and convert real product problems into GitHub issues.
- Maintain a transparent creator profile.

**Important constraint:** The agent can prepare the Reddit account plan, profile text, and posts, but Tony must create or approve any Reddit account and final posts. Creating accounts and posting must comply with Reddit rules and subreddit rules.
**Important constraint:** The agent can prepare the Reddit account plan, profile text, and posts, but the maintainer must create or approve any Reddit account and final posts. Creating accounts and posting must comply with Reddit rules and subreddit rules.

**Outputs:**

Expand Down Expand Up @@ -216,7 +216,7 @@ Do not ping Tony for:

4. **Prepare community launch**
- Community Growth Agent drafts Reddit account profile and launch posts.
- Tony approves account/posting strategy.
- the maintainer approves account/posting strategy.
- Agent schedules staged, rule-compliant posts.

5. **Start beta loop**
Expand All @@ -229,7 +229,7 @@ Do not ping Tony for:
- Revenue Agent proposes tiers and pricing.
- Presence Agent updates website and App Store copy.
- Security Agent signs off on public release.
- Tony approves pricing, legal, and App Store submission.
- the maintainer approves pricing, legal, and App Store submission.

## Proposed Recurring Automations

Expand Down
Loading
Loading