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.