Knotwork
app.knotwork.android
Zapstore _@zapstore.dev An AI agent that runs on your phone and asks before it acts
Republished from GitHub / F-Droid by the Zapstore main account.
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, Ollama) are optional, opt-in and bring-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. Local actions through AppFunctions and external servers through the Model Context Protocol (MCP). 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. It is deliberately not a mass-market "ask a question, get an answer" assistant - Gemini is free and built into the OS, and competing there is a losing bet. 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. - Android 14+ and about 2 GB of free RAM - the memory is the real constraint. - Shared pipeline files are not a compatibility contract yet: exports carry a version stamp, but before 1.0 that stamp is a marker, not a promise. Keep the original. - The reliability numbers come from one device and one operator: a scheduled pipeline ran 7.14 days without the app being opened and completed 55 of 55 firings with no unexplained misses. That is a real measurement, and it is not external validation. - 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.
First release: Oct 16, 2026, 2 total releases.
Most recent release: Oct 25, 2026.
Appears in 0 app stacks.
0 sats / 0 zaps received in the past year.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Oct 25, 2026 0.12.1A patch release: fixes, and runs that no longer wait between their steps. The database migrates forward on update (one new column). **Upgrading from 0.12.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. A backup made on 0.12.1 cannot be restored on 0.12.0, which refuses a newer database. ## MCP servers with a sign-in connect right away A server added with a sign-in or custom headers showed a connection error on the Tools screen until the app was restarted, and *Refresh* did not help. The screen received the new server before its sign-in was stored and connected without it. An edited sign-in had the same fault, and a change of the sign-in alone never reached the screen. Saving a server's form without changes, or an edit refused because another server already has that address, left the row on *Connecting…* until *Refresh*. All of these now connect with what was saved. The agent itself was never affected: it reads the server list afresh each time it lists or calls a tool.
More…
## Runs no longer wait between nodes The engine paused half a second before every node and a full second after each cloud, summary, router, planner and evaluation node, background runs included. Neither pause had a measured reason. A chat message on the first-launch pipeline now skips 3.5 s of waiting, and longer pipelines skip more, up to 21 s on the longest bundled run. Node durations in the console, the run trace and Monitoring are now the node's own time. ## Fixes - **A resumed run no longer mixes up the items of a queue that carried on past a failure.** The failed item took the next item's result, and that next item ran again, its tool call included. A run interrupted before this release with such an item ends at once with a request to restart the task. The run trace export is now `schemaVersion` 2. - **A Keystore hiccup no longer deletes a saved API key** or the Hugging Face token. Only a value that can never be read again is deleted. - **The on-device model is freed under memory pressure** after the background service restarts. Once the service had been stopped with a model loaded, every model loaded later in the same process ignored the system's memory warnings. - **A Wikipedia lookup names the article it found**, so the model and the run trace show when the top result is about something else. ## Also - **Knotwork is on F-Droid.** F-Droid builds the `foss` APK from source and publishes it only when its build matches the APK on this page, so the F-Droid copy carries the same signature. - **Troubleshooting covers a screen that freezes while the model answers on the GPU**, and how to switch the model to CPU until the engine lets an app lower its GPU priority. - **`SECURITY.md` says the app was tested in a work profile** made with Shelter. Private Space is still untested. ## Which file to download - **`knotwork-0.12.1-full-release.apk`** — the standard build. This is the one to take unless you have a reason not to. - **`knotwork-0.12.1-foss-release.apk`** — no crash reporting and no analytics. - **`knotwork-0.12.1-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.12.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](https://github.com/alexeyw/knotwork/blob/v0.12.1/CHANGELOG.md). - Oct 16, 2026 0.12.0The first release since 0.11.1, and a larger one: two batches of work ship together. It brings a backup you keep yourself, downloads checked against the hash Hugging Face publishes, more cloud providers, and runs you can check after the fact. The database migrates forward on update. **Upgrading from 0.11.x is an ordinary in-place update** within the same channel: a GitHub release over a GitHub release, or Google Play over Google Play. Moving between the two is now a backup and a restore — see below. ## Back up, and move to a new phone Settings → Privacy → *Backup & restore* writes one file, locked with a password you choose and saved wherever you pick: chats with their images, long-term memory, pipelines, run history, triggers, usage statistics, settings and the agent's workspace files. API keys, the Hugging Face token and MCP sign-ins go in only if you tick the box. Model files stay out; the backup keeps the list of models and where each came from, and the restored app offers to download them again. *Restore from file…* checks the password and every part of the file before anything on the phone changes, shows what comes in and what this phone loses, and asks you to type **REPLACE**. It is also the way to switch between Google Play and a release build, or between the `full` and `foss` builds.
More…
The [archive format](https://github.com/alexeyw/knotwork/blob/v0.12.0/docs/backup-format.md) is public: Argon2id from your password, AES-256-GCM in chunks. From this release on, every format version stays readable. ## Downloaded models are checked When Hugging Face names a file's SHA-256 in its answer to the download, the file must match it or it is deleted and no model is added. Every model now reads **Verified** or **Not verified**; a file from another host has no hash to check, and models installed before this release read *Not verified* until downloaded again. A download paused by Android's five-hour background limit, or one that failed its checksum, now posts a notification and is shown on the Models screen the next time you open it. ## More providers, and a connection test - **OpenRouter and Groq** with your own key, and **any server that speaks the OpenAI API** — vLLM, LM Studio, llama.cpp — at the address you enter. - **Test connection** on a provider's screen and on the MCP server form checks the address and the key without sending a prompt. - **Current model lists** for OpenAI, Anthropic, Google and DeepSeek, held against the client library's catalogue by a test. Models their providers have retired are gone, and so are o1, o3-mini, o4-mini and GPT-4.1 nano, which OpenAI shuts down on 23 October. A saved choice that left the list runs on the provider's default, and the provider's screen says so. Anthropic's default is now Claude Sonnet 4.6. - OpenAI's Codex and Pro models answer again: since 0.7.0 a Cloud step on any of them failed as "cut off" and the answer was thrown away. ## Runs you can check Every run records its seed, sampler, versions and the SHA-256 of each model file it used. A finished run can be verified — its on-device calls repeated from their recorded prompts and compared byte for byte — run again with the same seed, or exported as one JSON trace. That is promised on CPU, and on GPU at the same context window; see the [user guide](https://github.com/alexeyw/knotwork/blob/v0.12.0/docs/user-guide.md#the-run-header-seed-verify-run-again-export). ## Also in this release - An approval card shows the request the run started from next to the tool call it asks about. - Memory takes corrections: a fact that corrects a saved one replaces it, and the old wording stays in the entry's history. - Adding a node opens a grouped list with one line on what each type does. - A trigger the phone stops checking sends one notification per silence. - A new MCP server starts on Streamable HTTP, with an `/mcp` example address. - The NPU is no longer offered: the app ships neither the vendor library nor a model compiled for the chip, so choosing it ran on CPU. An earlier NPU choice reads as CPU. ## Security - A locked phone no longer shows or approves a tool call: **Approve** asks you to unlock first, and where Android hides sensitive content on the lock screen, the notification shows only its title. - A model server's redirect is checked hop by hop, so an approved address on your network can no longer forward a prompt elsewhere over plain HTTP. ## Which file to download - **`knotwork-0.12.0-full-release.apk`** — the standard build. This is the one to take unless you have a reason not to. - **`knotwork-0.12.0-foss-release.apk`** — no crash reporting and no analytics. - **`knotwork-0.12.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.11.1, 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](https://github.com/alexeyw/knotwork/blob/v0.12.0/CHANGELOG.md).