Tests stop tapping through setup.
Call login(userId) or seedCart(items) directly and jump to the part you are actually testing. Faster runs, less flakiness.
Open source · React Native · iOS · Android
Appduct lets a terminal, a test runner, or an AI agent call functions inside your app while it’s running. You pick what’s callable. Nothing else is reachable.
npm install -g appduct
Why you’d want this
Call login(userId) or seedCart(items) directly and jump to the part you are actually testing. Faster runs, less flakiness.
One line of MCP config and the agent can find and call your app’s functions. Flip a flag, open a screen, check some state.
No secret gestures, no admin panel behind a long-press. Only the functions you registered are reachable.
Reloads, backgrounding, flaky Wi-Fi — the session survives and picks back up. One service, every device you plug in.
What it looks like
01 In your app
import { useAppductTool } from "@appduct/react-native";import { z } from "zod";
useAppductTool({ name: "seed_cart", description: "Fill the cart with test items.", inputSchema: z.object({ items: z.number() }), handler: async ({ items }) => ({ added: items }),});Registers once per mount. The handler always sees the latest state it closes over. Native apps register the same way from Swift or Kotlin.
02 From your terminal
appduct invoke seed_cart --input '{"items":3}'03 Or from a test
import { connect } from "appduct/client";
const app = await connect();await app.call("seed_cart", { items: 3 });The CLI reads your deep-link scheme from app.json, Info.plist, or build.gradle. There is nothing to configure.
Build variants
Debug builds only, by default.
Release builds compile it out, not just switch it off.
Opt in per build for TestFlight or internal tracks.
Use it with an agent
{ "mcpServers": { "appduct": { "command": "appduct", "args": ["mcp"] } }}npx skills add callstackincubator/appduct --skill appductRuns where your app runs
@appduct/react-nativeiOS 15.1+ and Android on the New Architecture. Expo dev builds or bare apps.
Set upAppductCoreSwift, iOS 15.1+. Swift Package Manager or CocoaPods. Nothing from React Native.
Set upcom.callstack.appduct:coreKotlin, Android 7.0 (API 24)+. Maven Central, with a no-op artifact for release.
Set up