src/
index.mjs
bridge-server.mjs
backends/
bridge/
generated/
android/
app/src/main/java/com/haochen/codexremote/
scripts/build-apk.sh
docs/
test/
scripts/
Important boundaries:
- Keep the bridge thin and avoid adding large frameworks.
- Do not hand-edit
src/generated/unless the task is explicitly about regenerated protocol types. - Keep Android lifecycle and top-level state in
MainActivity.kt. - Put Compose UI in page or shell files.
- Put Activity-owned behavior in focused
MainActivity*Controller.ktfiles. - Keep chat HTML, markdown, and code rendering in the
Conversation*rendering files.
Run Node tests:
npm testRun the bridge:
npm run bridgeBuild the Android debug APK:
npm run apk:release:setup # one time per signing key
npm run apkBuild the Android release APK:
npm run apk:releaseCompile Android Kotlin:
source ~/.zshrc && cd android && ./gradlew :app:compileDebugKotlinBuild Android debug:
source ~/.zshrc && cd android && ./gradlew assembleDebug- Bridge or protocol changes: run
npm test. - Android code changes: run
source ~/.zshrc && cd android && ./gradlew :app:compileDebugKotlin. - Packaging or install behavior changes: run
source ~/.zshrc && cd android && ./gradlew assembleDebug. - Packaging changes: run
source ~/.zshrc && cd android && ./gradlew assembleDebug assembleRelease. APK packaging requires the local signing files created bynpm run apk:release:setup.
Docs-only changes do not require Android compilation, but this repository is small enough that running the bridge tests is usually cheap.
These files and directories are local-only:
data/~/.config/codex_remote_control/node_modules/android/build/android/app/build/.gradle/android/.gradle/android/.kotlin/android/debug.keystoretask_plan.mdfindings.mdprogress.mdHANDOFF.mdhandoff.mdhandoff-*.md
Do not commit logs, bridge state, token files, APK outputs, or local planning files.