{"slug": "mahout-tasker-ai-n8n", "title": "Mahout – Tasker+AI+N8N", "summary": "Mahout, an open-source Android workflow automation app from developer ankurCES, combines Tasker-style device automation with n8n-style visual workflows and on-device AI, running all AI either through Google's Gemini Nano on the phone or the user's own API keys with no cloud subscription or account. The app organizes roughly 90+ nodes across nine lanes — including triggers, data, logic, AI, actions, and apps — and supports 11 OpenAI-compatible providers plus the Claude SDK and Gemini Nano. Mahout is distributed as source on GitHub, requiring Android Studio Koala+, Java 17, Gradle 8.7+, and the NDK for Room schema export.", "body_md": "**On-device workflow automation for Android — n8n meets Tasker.**\n\nEvery device capability is a **node**. Wire any node to any other node. Build automation workflows visually, or describe what you want and let **Build with AI** draft it. Run them manually, on schedules, or from real-world triggers — notifications, location, sensors, media, and more.\n\nAll AI runs on-device (Gemini Nano) or through your own API keys — **no cloud subscription, no account, your data stays on your phone.**\n\n| **Dashboard** Run counts, AI spend, system health | **Workflows** All your automations, one list | \n| **Editor** Drag-drop DAG canvas | **Chat Operator** AI assistant, token-by-token streaming | \n| **Build with AI** Describe a workflow, AI drafts it | **Knowledge** On-device RAG index | \n| **Skills** Agent skills + enable switches | **Permissions** One-tap grant-all stepper | \n\nEvery node is one self-contained Kotlin `object : Node` — a spec (params, inputs/outputs, gates, timeout) plus an `execute(ctx, input)` method. Nine lanes organise ~90+ nodes:\n\n| Lane | What it contains | \n|---|---|\n| **Triggers** | Manual, schedule, notifications, sensors, location, calendar, webhooks, charging, proximity, system broadcasts | \n| **Data** | HTTP requests, device info, media metadata, knowledge search, variable store | \n| **Logic** | Conditions (if/else), loops, JS eval, text & math, merge, wait/delay | \n| **AI** | Ask AI, Classify, Extract, Agent (tool-using loop), MCP tool/resource, Decision routing | \n| **Actions** | Notifications, system settings (torch, DND, Wi-Fi, Bluetooth), send intents, file writes, playlist entries, knowledge ingest | \n| **Apps** | Deep-link launches, shell commands, JS runtime, workspace file I/O, UI automation (Accessibility) | \n\nA draggable, zoomable DAG canvas. Drop nodes from the palette, wire them together, configure params. The same params that drive the UI also drive Agent tool schemas, templating, validation, and log redaction.\n\nFields are wired through a simple syntax that feels like a templating language:\n\n```\n{{title}}  {{meta.artist}}  {{items[0].name}}    &larr; current item fields\n{{$node.HTTP.body.x}}                             &larr; upstream node's first output\n{{$vars.counter}}                                  &larr; global variable\n{{$now}} {{$date}} {{$time}}                      &larr; built-in values\n{{field ?? \"default\"}}                            &larr; fallback when missing\n```\n\nAn approval-gated AI assistant that manages your workflows, runs, knowledge, skills, and a coding sandbox — all from a natural-language interface. Four permission modes:\n\n- **Plan** — no tools, read-only thinking\n- **Ask** — per-call approval\n- **Auto** — risk-based: safe actions (read/search) never ask, coding actions (shell/JS) ask, destructive actions (delete, UI automation) always require approval\n- **Bypass** — time-limited full automatic, with a kill switch\n\nThe chat streams token-by-token and retains a turn history with tool-use results.\n\n11 OpenAI-compatible providers (OpenAI, OpenRouter, MiniMax, Gemini, Grok, DeepSeek, Mistral, Groq, Together, Ollama, Custom) + Claude SDK + Gemini Nano (on-device). All through **your own keys** — no Mahout cloud costs anything.\n\nOn-device RAG: index documents, folders, URLs, pasted text, Notes, and Playlists. Room FTS4 storage with BM25 ranking. The Agent can search it with `knowledge_search`.\n\nConnect remote MCP servers (stdio or SSE) and expose their tools to the Agent or as plain workflow nodes.\n\nRunning workflows control (suspend, cancel, resume), background host monitor, second-opinion, risk assessment, and System One decision engine — all from the Dashboard.\n\n```\n# Prerequisites: Android Studio Koala+, Java 17, Gradle 8.7+, NDK (for Room schema export)\n\ngit clone https://github.com/ankurCES/Mahout.git\ncd Mahout\n\n# Build & install\n./build.sh profile   # or debug; or ./gradlew :app:installDebug\nadb install -r app/build/outputs/apk/profile/app-profile.apk\n```\n\nSee `docs/PLAN-v5.md` for the verification smoke-test plan.\n\n```\nMob8NApp (manual DI)\n  ├── Catalog (fused lane lists)\n  ├── Engine (facade: start, save, run, chat, knowledge, skills)\n  │   ├── TriggerHub (receiver/worker event dispatch)\n  │   ├── Executor (pure Kotlin DAG runner, JVM-testable)\n  │   ├── Knowledge (Room FTS4 RAG)\n  │   ├── RoomPersistence (Room DAO seam)\n  │   └── HostService / NotifListener (two live hosts)\n  └── Lanes\n      ├── core/      Nodes, Graph, Executor, Template, Params, Gates, Persistence\n      ├── triggers/  Schedule, notifications, sensors, location, webhooks\n      ├── data/      HTTP, device, media, knowledge, store\n      ├── logic/     Conditions, loops, JS, text/math, wait\n      ├── actions/   Notify, settings, intents, files, playlist\n      ├── ai/        Ask, classify, extract, Agent, MCP Client, streaming\n      ├── apps/      Shell, JS runtime, UI automation, workspace\n      └── ui/        All Compose screens, theme, motion\n```\n\nKey design decisions:\n\n- **One currency** :`kotlinx.serialization.json.JsonObject` for items, logs, templates, LLM I/O, Room blobs. No DTOs.\n- **One node = one `object : Node`** : spec + execute in the same file, appended to its lane's` all` list.\n- **Pure-Kotlin executor** : no Android types in core except a nullable`Context` handle. JVM-testable.\n- **Two live hosts** :`NotifListenerService` (system-kept-alive) +`HostService` (specialUse FGS when needed).\n- **Suspend/resume survives process death** : engine state persisted to Room before notifying or enqueuing a delay.\n- **Manual DI, no Hilt, no ViewModels, no navigation-compose, no Retrofit/Moshi/Gson** .\n- **Ponytail comments** mark deliberate shortcuts with a ceiling and an upgrade path.\n- **Secrets** : plaintext app-private prefs, excluded from backup, masked in UI, redacted from logs.\n\n```\n./gradlew test     # 674+ JVM unit tests (pure-Kotlin core, template, graph, permissions, motion)\n```\n\nThe core executor, template engine, graph validation, param validation, gates, motion tokens, and dashboard math are all JVM-tested. Android instrumentation tests cover the rest.\n\nMIT — see the LICENSE file.\n\n*Built with Kotlin, Compose, and an elephant's patience.*", "url": "https://wpnews.pro/news/mahout-tasker-ai-n8n", "canonical_source": "https://github.com/ankurCES/Mahout", "published_at": "2026-09-27 06:35:53+00:00", "updated_at": "2026-09-27 07:01:16.061193+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "agent-protocols", "ai-products", "developer-tools"], "entities": ["Mahout", "ankurCES", "Tasker", "n8n", "Gemini Nano", "OpenAI", "Claude SDK", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/mahout-tasker-ai-n8n", "markdown": "https://wpnews.pro/news/mahout-tasker-ai-n8n.md", "text": "https://wpnews.pro/news/mahout-tasker-ai-n8n.txt", "jsonld": "https://wpnews.pro/news/mahout-tasker-ai-n8n.jsonld"}}