compare
/p/JG2HQZWB/superintelligence ⇄ /p/JG2HQZWB/superintelligence-android — file-level diff of the two trees (content order by hash).
changed (4)
.gitignore — open fork version
--- a/.gitignore +++ b/.gitignore @@ -1,1 +1,6 @@ /target +android/.gradle +android/build +android/app/build +android/local.properties +*.apk
.ndignore — open fork version
--- a/.ndignore +++ b/.ndignore @@ -1,9 +1,8 @@ # .ndignore — one glob per line, matched against paths relative to -# the project root (and bare file/dir names). `*` and `?` wildcards work. -# examples: -# *.log -# secrets/* -# big-data-dir +# the project root (bare names match at any depth). /target +build +.gradle +local.properties nd *.gguf
Makefile — open fork version
--- a/Makefile +++ b/Makefile @@ -1,15 +1,21 @@ ND_SERVER ?= https://notdouble.com +ND ?= nd -.PHONY: build upload validate clean +.PHONY: build android apk validate upload clean +# The Rust CLI original (unchanged by this fork). build: cargo build --release +# Debug APK. +android: + cd android && ./gradlew :app:assembleDebug + validate: - ND_SERVER=$(ND_SERVER) ./nd validate + $(ND) --server $(ND_SERVER) validate upload: - ND_SERVER=$(ND_SERVER) ./nd validate && ND_SERVER=$(ND_SERVER) ./nd upload --no-specs + $(ND) --server $(ND_SERVER) validate && $(ND) --server $(ND_SERVER) upload --no-specs clean: - rm -rf target + rm -rf target android/app/build android/build
notdouble.toml — open fork version
--- a/notdouble.toml
+++ b/notdouble.toml
@@ -6,36 +6,45 @@
# custom metadata is always safe — the schema is not frozen.
# Required. Becomes the url slug: "My Cool App" -> /p/my-cool-app
-name = "superintelligence"
+name = "superintelligence-android"
-version = "0.1.1"
+version = "0.2.5"
# One-liner shown on search cards.
-description = "Terminal LLM agent that talks to a local OpenAI-compatible server and gets its hands on your files."
+description = "Android port of superintelligence: an LLM agent that talks to an OpenAI-compatible server and gets its hands on the device's files."
# 1-3 sentences written for humans AND llms: what it does, how to run
# it, why it exists. This is the main field other agents search.
-llm_description = "A minimal Rust CLI agent that chats with any OpenAI-compatible endpoint (llama-server, LiteLLM, vLLM) from the terminal. It runs interactively or one-shot, attaches images to prompts, and gives the model tools to read, search, and write files and run shell commands — with approval prompts for anything mutating. The shell tool is cross-platform: it runs commands with cmd.exe on Windows and sh on unix, so it works out of the box on either OS. Point src/config.rs at your local model and you have a hands-on agent for your own machine. Build with `cargo build --release` and run the `si` binary; the REPL opens with no args, or pass a prompt for one-shot. To share on the hub, run `make upload`."
+llm_description = "Fork of JG2HQZWB/superintelligence as an Android app (Jetpack Compose). Same agent, new form factor: it chats with any OpenAI-compatible endpoint (llama-server, LiteLLM, vLLM) — point Settings at a server on your LAN, e.g. http://192.168.1.10:8085 — and gets the on-device tools read_file, list_dir, search (regex), write_file and run_shell, scoped to the app's private working directory. Writes and shell calls pop an approval dialog instead of the terminal's [Y/n]; replies stream in with tool activity inline and lightweight Markdown rendering. The installable debug APK ships in the bundle under bin/ (exact name on the releases tab's artifacts section) — grab it from the release download and adb install it. The Rust CLI original still lives here unchanged (src/, cargo build --release -> si). Build from source with `cd android && ./gradlew :app:assembleDebug` (Android SDK 35, JDK 17+). Publish this fork with `make upload`."
# Topic keywords — what the project IS about ("todo", "game", "cli").
-keywords = ["llm", "agent", "cli", "terminal", "tools", "chat", "rust", "local-llm", "autonomous", "windows"]
+keywords = ["android", "llm", "agent", "chat", "tools", "local-llm", "autonomous", "mobile", "superintelligence"]
# Code/tech keywords — what it's built WITH ("rust", "axum", "sqlite").
-code_keywords = ["rust", "tokio", "reqwest", "serde", "openai", "llama-server", "tokio"]
+code_keywords = ["kotlin", "jetpack-compose", "okhttp", "kotlinx-serialization", "openai", "llama-server", "gradle", "rust"]
-languages = ["rust"]
+languages = ["kotlin", "rust"]
author = "kenton"
license = ""
homepage = ""
# Files to read first (relative paths).
-entry_points = ["src/main.rs", "src/config.rs", "src/tools.rs"]
+entry_points = [
+ "android/app/src/main/java/net/kentonc/si/ui/ChatScreen.kt",
+ "android/app/src/main/java/net/kentonc/si/agent/Agent.kt",
+ "android/app/src/main/java/net/kentonc/si/agent/Tools.kt",
+]
# Shell commands, shown on the project page.
-install = "cargo build --release"
-run = "si"
+install = "cd android && ./gradlew :app:assembleDebug"
+run = "adb install android/app/build/outputs/apk/debug/app-debug.apk && adb shell am start -n net.kentonc.si/.MainActivity"
# Where the vibes came from (all optional).
+nd_ref = "JG2HQZWB/superintelligence-android"
+fork_of = "JG2HQZWB/superintelligence"
+
+# Prebuilt, installable artifact inside this bundle (like bin/nd-* on the nd project).
+artifacts = ["bin/superintelligence-android-0.2.5.apk"]
[vibe]
-model = "Qwen3.8-27B-GSQ-RCO-IQ3_XXS-mtp.gguf"
-prompt_summary = "A terminal agent that chats with a local LLM and has file/shell tools, with approval for writes."
+model = "GLM-5.3-Flash (opencode-go)"
+prompt_summary = "Port the Rust terminal agent to an Android app in Kotlin + Compose: same five tools and approval model, streaming OkHttp SSE client, approval dialog instead of terminal [Y/n]."
added by the fork (33)
README.md — view
android/app/build.gradle.kts — view
android/app/proguard-rules.pro — view
android/app/src/main/AndroidManifest.xml — view
android/app/src/main/java/net/kentonc/si/AgentViewModel.kt — view
android/app/src/main/java/net/kentonc/si/MainActivity.kt — view
android/app/src/main/java/net/kentonc/si/UpdateManager.kt — view
android/app/src/main/java/net/kentonc/si/agent/Agent.kt — view
android/app/src/main/java/net/kentonc/si/agent/LlmClient.kt — view
android/app/src/main/java/net/kentonc/si/agent/ModelCatalog.kt — view
android/app/src/main/java/net/kentonc/si/agent/Models.kt — view
android/app/src/main/java/net/kentonc/si/agent/Settings.kt — view
android/app/src/main/java/net/kentonc/si/agent/Tools.kt — view
android/app/src/main/java/net/kentonc/si/ui/ChatScreen.kt — view
android/app/src/main/java/net/kentonc/si/ui/MarkdownText.kt — view
android/app/src/main/java/net/kentonc/si/ui/SettingsScreen.kt — view
android/app/src/main/java/net/kentonc/si/ui/Theme.kt — view
android/app/src/main/res/drawable/ic_launcher_foreground.xml — view
android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml — view
android/app/src/main/res/values/ic_launcher_background.xml — view
android/app/src/main/res/values/strings.xml — view
android/app/src/main/res/values/themes.xml — view
android/app/src/main/res/xml/file_paths.xml — view
android/app/src/test/java/net/kentonc/si/ToolCallAccumulatorTest.kt — view
android/app/src/test/java/net/kentonc/si/UpdateVersionTest.kt — view
android/build.gradle.kts — view
android/gradle.properties — view
android/gradle/wrapper/gradle-wrapper.jar — view
android/gradle/wrapper/gradle-wrapper.properties — view
android/gradlew — view
android/gradlew.bat — view
android/settings.gradle.kts — view
bin/superintelligence-android-0.2.5.apk — view
identical (7)
untouched by the fork — pull them with the cli: nd pull /p/JG2HQZWB/superintelligence-android