Skip to content
CAI
Software that uses CAICheck a score

Emanuele-web04/remodex

49.7

Weak · 30 September 2026

106.6k

lines of production code

Swift

with JavaScript

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Remodex is a self-hostable, local-first system that synchronizes mobile and desktop environments through a secure relay and bridge architecture. It enables end-to-end encrypted, live thread synchronization between a macOS companion app and a mobile client, managed via a command-line interface. The system handles device pairing, session persistence, and trusted reconnections while keeping application payloads private from the relay service.

Features

Add macOS menu bar bridge companion and build configuration scaffolding

Introduces the RemodexMenuBar companion app for macOS, including its Xcode scheme, Info.plist, and a new set of Remodex-themed central icons (SVG assets) for use in the menu bar and UI. Adds build configuration files (Base.xcconfig and PrivateOverrides.xcconfig.example) to manage public defaults and private overrides for open-source builds.

CodexMobile · high confidence

Introduces new bridge infrastructure and desktop IPC synchronization capabilities

This change adds the core JavaScript modules that power the new bridge architecture, including desktop IPC action following, conversation projection, and runtime settings normalization. It introduces a new account status module that sanitizes authentication data for the phone UI and a daemon state manager for persisting macOS service configuration and pairing sessions. Additionally, it adds CLI helpers for bootstrapping the global Codex CLI, handling desktop handoff requests, and parsing apply-patch file changes, establishing the foundation for live phone-to-desktop thread synchronization.

phodex-bridge/src · high confidence

Introduces public relay service with end-to-end encrypted forwarding and optional push notifications

The relay folder now contains the public relay and push-service code used by Remodex for pairing and trusted reconnect. The relay accepts WebSocket connections at /relay/{sessionId} to pair one Mac host with one live mobile client, forwarding secure control messages and encrypted payloads between them while keeping application payloads end-to-end encrypted (AES-256-GCM via X25519 + HKDF-SHA256) so the relay never sees plaintext app data. It exposes optional HTTP endpoints for push registration and run-completion alerts (POST /v1/push/session/register-device and /v1/push/session/notify-completion) when push is explicitly enabled, and provides a trusted-session resolve endpoint (POST /v1/trusted/session/resolve) for mobile clients to find the Mac's current live session after reconnection. The implementation includes an APNs client for sending iOS alerts, file-backed state persistence for push registrations, rate limiting on HTTP and WebSocket upgrade routes, and detailed health/metrics endpoints.

relay · high confidence

Remodex CLI gains macOS service management and diagnostic tools

The remodex command-line interface now supports managing the macOS bridge as a background service, including starting, stopping, restarting, and uninstalling the service, as well as resetting pairing and displaying QR codes for device connection. On macOS, the 'up' command now launches the service in the background rather than running in the foreground. A new diagnostic tool, remodex-jsonl-diagnose.js, has been added to parse and validate Codex session JSONL history files, helping users troubleshoot session data issues. The CLI also exposes a 'version' command and improves error handling for configuration failures.

phodex-bridge/bin · high confidence

Behavioural changes

Repository restructured for self-hosting with new launcher and Apache 2.0 license

The project has shifted to a local-first, self-hostable model, introducing a new \run-local-remodex.sh\ launcher script that starts a local relay and bridge together, and adding \SELF\_HOSTING\_MODEL.md\ to document the self-hosting path. The repository license has been changed from ISC to Apache 2.0, and the \CONTRIBUTING.md\ guide has been updated to reflect the new local development workflow. Additionally, the \MacDano.md\ audit document provides architectural recommendations for the macOS menu bar companion, and the \README\ has been updated to highlight end-to-end encryption, fast mode, and the new trusted Mac reconnect flow.

(repo-wide) · high confidence

Test coverage

Expanded test coverage for bridge authentication, IPC integration, and runtime settings

Added unit and integration tests in the \phodex-bridge/test\ directory to verify bridge-side authentication status composition and sanitization, desktop IPC integration flows (including thread resumption and live sync behavior), bridge status publishing and heartbeat logic, relay watchdog and thread list merging helpers, Codex CLI bootstrap and runtime settings normalization, and desktop handoff routing.

phodex-bridge/test · high confidence

Dependencies

Remodex bridge v3.2.0 release and dependency updates

The local bridge package (remodex) has been updated to version 3.2.0, introducing new CLI commands (\remodex-jsonl-diagnose\) and build scripts (postinstall, prepack) while upgrading the \ws\ dependency to 8.21.0 and removing the \uuid\ dependency. Additionally, a new \remodex-relay\ package was added with \ws\ 8.21.0, and the mobile app's Swift Package Manager dependencies were refreshed to include new packages like \BigInt\, \Citadel\, \RemodexTextKit\, and \`swift-nio-ssh

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 55 → 50 (-5.0)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 34 → 34 (-0.0)
  • Architecture 95 → 96 (+0.7)
  • Maturity 76 → 70 (-6.2)
  • Readiness 57 → 54 (-2.9)
  • Security 94 → 94 (+0.5)
  • Event-Driven 79 (new)
  • Performance 60 (new)

Resolved (30)

  • Change coupling: CodexService+RuntimeConfig.swift ↔ ComposerBottomBar.swift (CodexMobile/CodexMobile/Services/CodexService+RuntimeConfig.swift)
  • Change-coupling hub: TurnTimelineView.swift → TurnComposerInputTextView.swift, TurnMarkdownTextRendering.swift, TurnMessageComponents.swift (CodexMobile/CodexMobile/Views/Turn/Timeline/TurnTimelineView.swift)
  • CodexService.syncActiveThreadState (cognitive 20) (CodexMobile/CodexMobile/Services/CodexService.swift)
  • CodexService.syncActiveThreadState (cyclomatic 17) (CodexMobile/CodexMobile/Services/CodexService.swift)
  • Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (no pnpm-resolved versions to grade)
  • Documentation: no architecture or design documentation (docs/self-hosting.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (12 lines × 2) (CodexMobile/CodexMobile/Views/Turn/Composer/SlashCommandAutocompletePanel.swift)
  • Duplicated block (5 lines × 2) (CodexMobile/CodexMobile/Services/GitActionsService.swift)
  • Duplicated block (8–12 lines × 2) (CodexMobile/CodexMobile/Services/GitActionsService.swift)
  • Duplicated block (9 lines × 2) (CodexMobile/CodexMobile/Services/RemodexDisplayIslandCoordinator.swift)
  • Duplicated block (9 lines × 2) (CodexMobile/CodexMobile/Views/MyMacs/MyDevicesSettingsSheet.swift)
  • Edited copy of a member (28 corresponding lines) (CodexMobile/CodexMobile/Services/CodexService+History.swift)
  • Hotspot: CodexMobile/CodexMobile/ContentView.swift (CodexMobile/CodexMobile/ContentView.swift)
  • Hotspot: CodexMobile/CodexMobile/Views/Home/ContentViewModel.swift (CodexMobile/CodexMobile/Views/Home/ContentViewModel.swift)
  • Hotspot: CodexMobile/CodexMobile/Views/Terminal/GhosttyTerminalView.swift (CodexMobile/CodexMobile/Views/Terminal/GhosttyTerminalView.swift)
  • Hotspot: CodexMobile/CodexMobile/Views/Turn/Core/TurnViewModel.swift (CodexMobile/CodexMobile/Views/Turn/Core/TurnViewModel.swift)
  • Hotspot: CodexMobile/CodexMobile/Views/Turn/Messages/CommandExecutionViews.swift (CodexMobile/CodexMobile/Views/Turn/Messages/CommandExecutionViews.swift)
  • Hotspot: CodexMobile/CodexMobile/Views/Turn/Messages/StreamingInlineMarkupAutoCloser.swift (CodexMobile/CodexMobile/Views/Turn/Messages/StreamingInlineMarkupAutoCloser.swift)
  • …and 10 more

New (163)

  • AsyncUserInputCardView.body (cognitive 17) (CodexMobile/CodexMobile/Views/Turn/Messages/AsyncUserInputCardView.swift)
  • Change coupling: TurnComposerInputTextView.swift ↔ TurnTimelineView.swift (CodexMobile/CodexMobile/Views/Turn/Composer/TurnComposerInputTextView.swift)
  • Change coupling: TurnMarkdownTextRendering.swift ↔ TurnTimelineView.swift (CodexMobile/CodexMobile/Views/Turn/Messages/TurnMarkdownTextRendering.swift)
  • CodexAsyncUserInputProjection.nativeReply (cognitive 24) (CodexMobile/CodexMobile/Models/CodexAsyncUserInputProjection.swift)
  • CodexAsyncUserInputProjection.nativeReply (cyclomatic 23) (CodexMobile/CodexMobile/Models/CodexAsyncUserInputProjection.swift)
  • CodexAsyncUserInputProjection.reconcile (cognitive 25) (CodexMobile/CodexMobile/Models/CodexAsyncUserInputProjection.swift)
  • CodexAsyncUserInputProjection.reconcile (cyclomatic 18) (CodexMobile/CodexMobile/Models/CodexAsyncUserInputProjection.swift)
  • CodexAsyncUserInputProjection.reopenRepliesMissingFromCanonicalHistory (cognitive 28) (CodexMobile/CodexMobile/Models/CodexAsyncUserInputProjection.swift)
  • CodexAsyncUserInputProjection.reopenRepliesMissingFromCanonicalHistory (cyclomatic 19) (CodexMobile/CodexMobile/Models/CodexAsyncUserInputProjection.swift)
  • CodexService+IncomingSupport.swift.firstValue (cognitive 16) (CodexMobile/CodexMobile/Services/CodexService+IncomingSupport.swift)
  • CodexService+IncomingSupport.swift.flattenNestedText (cognitive 23) (CodexMobile/CodexMobile/Services/CodexService+IncomingSupport.swift)
  • CodexService+IncomingSupport.swift.unwrapShellCommandIfPresent (cognitive 21) (CodexMobile/CodexMobile/Services/CodexService+IncomingSupport.swift)
  • CodexService+IncomingSupport.swift.unwrapShellCommandIfPresent (cyclomatic 17) (CodexMobile/CodexMobile/Services/CodexService+IncomingSupport.swift)
  • CodexService.continueAfterStreamFailure (cognitive 27) (CodexMobile/CodexMobile/Services/CodexService.swift)
  • CodexService.continueAfterStreamFailure (cyclomatic 22) (CodexMobile/CodexMobile/Services/CodexService.swift)
  • CodexService.deliverAsyncUserInput (cognitive 31) (CodexMobile/CodexMobile/Services/CodexService.swift)
  • CodexService.deliverAsyncUserInput (cyclomatic 20) (CodexMobile/CodexMobile/Services/CodexService.swift)
  • CodexService.handleErrorNotification (cognitive 26) (CodexMobile/CodexMobile/Services/CodexService.swift)
  • CodexService.handleErrorNotification (cyclomatic 16) (CodexMobile/CodexMobile/Services/CodexService.swift)
  • CodexService.loadThreadHistoryIfNeeded (cognitive 181) (CodexMobile/CodexMobile/Services/CodexService.swift)
  • …and 143 more

Changes since last survey

  • 16 commits — 13 feature/other, 3 fixes

By area

  • CodexMobile/CodexMobile — 11 commits
  • (repo) — 3 commits
  • phodex-bridge/src — 2 commits

Notable commits

  • fix: Finish PR review fixes for OpenCode and iOS workflows
  • fix: Fix OpenCode recovery and provider-specific mobile flows
  • fix: Fix mirrored OpenCode titles and inactive completion alerts
  • change: Add Codex goal support across mobile and bridge runtimes
  • change: Add recoverable stream failure handling and continuation UI
  • change: Fix Cursor findings in OpenCode polling and iOS state
  • change: Keep hidden async input errors when dismissing other footers
  • change: Merge pull request #189 from Emanuele-web04/codex/ottimizza-batteria-del-bridge
  • change: Merge pull request #191 from Emanuele-web04/codex/read-codex-goal-objective
  • change: Merge remote-tracking branch 'origin/main' into codex/read-codex-goal-objective
  • change: Normalize sandbox policies in desktop IPC follower
  • change: Optimize relay watchdog heartbeat probing
  • change: Preserve async input errors and guard history projection
  • change: Prevent historical chat outcomes from reviving Dynamic Island (#197)
  • change: Prevent stale and duplicate chat completion notifications (#196)
  • change: Resolve remaining OpenCode review findings

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

Emanuele-web04/remodex was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit d8a4834903136de6bab04914ef6796f5b064ab51 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.