AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Native Android client for CLIque: pair to your own panel, drive tmux-backed CLI sessions, and answer a permission prompt from the notification.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A native Android client for CLIque, the self-hosted panel that runs folder-organised coding sessions in tmux.
The prompt is a real Android EditText. That is the point of the app. The panel's website types into a field inside a WebView, and Android keyboards fight that field. This client does not wrap the website. Native chrome, native input, and the panel's xterm.js pane for the terminal.
MIT, matching the server. Built to go on F-Droid: no Play Services, no Firebase, no analytics.檢視完整 README ↗A native Android client for CLIque, the self-hosted panel that runs folder-organised coding sessions in tmux.
The prompt is a real Android EditText. That is the point of the app. The panel's website types into a field inside a WebView, and Android keyboards fight that field. This client does not wrap the website. Native chrome, native input, and the panel's xterm.js pane for the terminal.
MIT, matching the server. Built to go on F-Droid: no Play Services, no Firebase, no analytics.
The panel it drives is CLIque, a Python standard-library server that keeps CLI sessions alive in tmux. This app talks to its HTTP API and nothing else, so it works against any panel you can reach.
On the laptop, ask the panel for a pairing code (POST /api/pair, or the button in the web UI). On the phone: add the panel URL, tap Pair, type the code. Case and the dash are ignored. The token is stored in EncryptedSharedPreferences, one per server.
Add our F-Droid repository once and updates arrive on their own:
https://fdroid.useclique.dev/repo
The /repo matters. Detail, including the one-time uninstall if you already
sideloaded a build: docs/fdroid-repo.md.
GET /healthz.GET /api/sessions/<id>/wait. When it stopped to ask permission, that notification carries Approve and Deny, which send Enter and Escape without opening the app. That indirection is the point: opening a session attaches a tmux client, the pane repaints, and the panel reads output-after-a-signal as the session having carried on, so the signal is gone in under three seconds.A foreground service (dataSync) runs while the app is waiting on /wait. That call holds a connection for up to 300 seconds, and a backgrounded app will not keep it. The service stops when nothing is being watched.
HTTPS still validates certificates. A private CA can be installed in Android's user CA store (this app trusts user CAs) or pasted as PEM on the server row. There is no "trust all" switch. HTTP is allowed because a panel on a Tailscale or WireGuard tailnet is often http://.
SDK 35, build-tools 35.0.0, JDK 21. Gradle wrapper is in the tree.
export ANDROID_HOME=/opt/android-sdk
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
./gradlew assembleDebug
The APK lands at app/build/outputs/apk/debug/app-debug.apk.
Each one had to earn its place:
| Library | Why |
|---|---|
| AndroidX AppCompat, Fragment, RecyclerView, SwipeRefresh, ConstraintLayout, Core, Lifecycle, Activity | Platform UI. |
androidx.security:security-crypto | Named in the spec for the token store. |
| OkHttp | REST and the /ws terminal stream. HttpURLConnection cannot do WebSockets, and one client carries the per-server CA for both. No Retrofit. |
| kotlinx-coroutines | lifecycleScope for UI work off the main thread. |
| xterm.js (built from source, MIT) | The panel's terminal renderer. Display only; stdin is disabled. |
org.json:json (tests only) | android.jar's org.json throws Stub! on the JVM, so the response parsers could not be tested at all. Test classpath only, never in the APK. |
The JS under app/src/main/assets/vendor/ is not committed. ./gradlew assembleDebug
runs tools/build-xterm.sh when those files are missing: it clones xterm.js
at tag 5.5.0 (the same pin as the CLIque server), builds core plus the fit,
unicode11 and canvas addons, and copies the UMD bundles into vendor/. A later
build that already has the files does not use the network, so --offline still
works.
F-Droid does the same in the recipe (sudo: apt-get install -y npm, then the
script as prebuild). xterm.LICENSE stays in the tree.
It pairs, lists sessions, opens a terminal, and sends a prompt. It does not reimplement the rest of the web panel (files, artifacts, broadcast, notes, settings). Those stay on the laptop.
MIT. See LICENSE. xterm.js is MIT; see app/src/main/assets/vendor/xterm.LICENSE.