Knotwork
AI agent that runs its model on the phone. You build behavior using a drag-and-drop editor with typed nodes for input, LLMs, tools, and routing. Sensitive actions stop for confirmation before executing.
Knotwork is an AI agent that runs its model on the phone. Instead of a prompt box wired to somebody's API, every conversation runs through a pipeline you can open and edit: a graph of typed nodes - input, on-device LLM, optional cloud LLM, tool call, routing, decomposition, evaluation, clarification, output. When a step wants to do something destructive or sensitive, it stops and asks you first - including in the background, where the confirmation arrives as a notification.
WHAT IT DOES
- Runs on your device. On-device inference through LiteRT-LM, with optional GPU acceleration; CPU-only works, just slower. Cloud providers (OpenAI, Anthropic, Google Gemini, DeepSeek, OpenRouter, Groq) and a server you run (Ollama or any OpenAI-compatible one) are optional and use your own key.
- You build the behaviour. A drag-and-drop editor with pan and pinch-zoom, snap-to-grid, auto-layout, inline validation and a run-trace overlay, across 14 node types. Prompt variables such as $DATE, $TIME, $TOOLS, $MODEL and $MEMORY_SUMMARY render fresh on every run.
- Tools, gated by you. Built-in tools and external servers through the Model Context Protocol (MCP). By default every sensitive or destructive call stops for explicit confirmation, enforced where the tool executes, not merely suggested to the model.
- Reaches you from outside the app. A share target, launcher shortcuts and a Quick Settings tile run your chosen pipeline over shared text or images. Triggers (time, charging, Wi-Fi, network) fire a pipeline on their own and report back. Every entry surface stays inert until you bind a pipeline to it.
- Remembers what matters. Long-term memory with semantic retrieval over past conversations, automatic fact extraction, search and export.
WHO IT IS FOR
It is for the person who already runs Tasker, Obsidian, Home Assistant or a local model on their own hardware, and who wants to know exactly what their agent does with their data.
PRIVACY
There is no account, no sign-in and no server of mine. Inference runs on the phone, so a normal conversation never leaves it. Data goes out only along paths the privacy policy lists, each off until you switch it on - except the built-in Wikipedia lookup, on by default. Usage statistics stay on the device and are never transmitted; a build-time check fails the build if any network dependency reaches that code. The database - chats, memory, run traces - is SQLCipher-encrypted, and API keys are sealed under an Android Keystore key. Crash reporting is opt-in, off by default, and absent entirely from the FOSS build.
KNOWN LIMITATIONS
This is a pre-release. The public surface, the settings layout and the on-device storage formats can still change between versions.
- English interface only.
- Android 14+ and about 2 GB of free RAM - the memory is the real constraint.
- On some phones the screen freezes while the model runs on the GPU; switch it to CPU.
- Shared pipeline files are not a compatibility contract before 1.0. Keep the original.
- Background runs need the battery setting on Unrestricted. Without it Android reclaims the process in about ten seconds - the platform's rule, not a bug, but until you grant it background pipelines will not run.
- Cloud failure behaviour differs by provider: detection of a stream that dies mid-answer is enabled only where it was measured.
- Other apps' AppFunctions are out of reach - Android keeps the permission to call one for system apps. The local catalogue is what ships, plus whatever you connect over MCP.
- One maintainer, no company behind it.
Open source under the Apache License 2.0; source, documentation and an FAQ are on the developer website.
Summary generated by Zapstore from source.
Original description, as the developer published it.
Latest release
The catalog lists this app from
alexeyw/knotwork
and signs its releases. The developer has not claimed it.
Are you the developer? Claim your app
Location access is used to read the Wi-Fi network name. The microphone records audio for voice input.
Permissions
Coarse locationFine locationNotificationsMicrophone What they allowShow less
- Coarse location ACCESS_COARSE_LOCATION See your approximate location ACCESS_COARSE_LOCATION
- Fine location ACCESS_FINE_LOCATION See your precise location ACCESS_FINE_LOCATION
- Notifications POST_NOTIFICATIONS Send you notifications
- Microphone RECORD_AUDIO Record audio RECORD_AUDIO
Release notes
Russian and Spanish, a newer on-device engine, and text that no longer freezes the screen.
Upgrading from 0.13.0 is an ordinary in-place update within the same signer: a GitHub release or the F-Droid copy over a GitHub or F-Droid install, or Google Play over Google Play.
Russian and Spanish
Every screen, the bundled pipelines and prompt templates, the FAQ and the troubleshooting guide are translated into both. The Spanish is neutral, for Spain and Latin America alike. Settings → About → Language picks the language, or follows the phone's. What a model reads stays in English: system prompts, tool descriptions and tool results.
LiteRT-LM 0.19.0
The on-device engine moves from 0.17.1 to 0.19.0. Its GPU sampling for a given seed now matches the CPU's, so a run on the GPU can give a different answer than it did before. Verify checks a run only on the engine version that recorded it: for a run recorded before this update it stays off and names both versions.
MCP
- The
⋮menu on a server's row turns all of its tools on or off at once. - A tool call to a server that closed its session now goes through: the app opens a new session and repeats the call once. It used to fail until the app was restarted.
- Refreshing a server on the Tools screen asks the server.
Chat export
Save to file writes a chat where you choose. Export chat now shares a JSON file, so a chat of any length can be shared; one over about 350 000 characters used to close the app.
Fixed
- Very long text without spaces no longer freezes the screen, and very tall text no longer closes the app.
- Table cells show all their text.
- The approval card shows the arguments exactly as the call receives them.
- Large fonts no longer break words or cut labels on the settings, performance, Live metrics and Memory screens.
Which file to download
knotwork-0.14.0-full-release.apk— the standard build. This is the one to take unless you have a reason not to.knotwork-0.14.0-foss-release.apk— no crash reporting and no analytics.knotwork-0.14.0-full-release.aab— for the store pipeline, not for sideloading.
Verifying what you downloaded
SHA256SUMS.txt covers all three files. The APKs are signed with:
C=CL, CN=Aleksei Volodin
SHA-256: e50c8aa47c38c808e449c87dbcd4ab9d0d810bcd8ca9d33fd0ce83d492c81651
Check it with apksigner verify --print-certs <file>.apk. A build signed by C=US, O=Android, CN=Android Debug did not come from this release. The key is unchanged from 0.13.0, so this installs in place over a copy from a GitHub release.
Pre-release
This is still a pre-release. Storage formats, the pipeline JSON schema, the Kotlin public surface and the settings layout can change between minor versions without a migration path. Two deliberate exceptions: the external-automation contract's action, keys, statuses and refusal reasons stay frozen, and every backup format version stays readable.
Full details, including everything not summarised here: CHANGELOG at this tag.
Comments
Loading comments…
More ai chat apps
See more-
R
RPClient AI roleplay chat and story writing client
-
A
Agora BYOK LLM client with multi-provider access, agentic workflows, remote control
-
M
Maskan Private BYOK AI chat. 11 providers, voice, image, export. 3 languages.
-
g
geminiAssist WebView wrapper for Google Gemini
-
D
DuckDuckGo Privacy, simplified
-
A
Agent Local AI chat, your models, and practical Android tools
Get Knotwork the private way
Updates checked on your device, and every release verified before it installs.