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