Author: Jeremy Longshore (Intent Solutions)
Date: 2026-05-18
Reference: kobiton/automate#53 — mimosa767's "Reduce Claude Dependency Friction" ask, specifically Ask 6 (future product direction)
Status: DRAFT — decision-support sketch, not a roadmap
Related: Architectural one-pager mapping each #53 ask to L1 / L2 / L3 layer · README compatibility matrix
#53 ask 6 raises the question: "Could portions of test generation, requirement parsing, execution orchestration, and validation feel more native within Kobiton Automate itself?" Today the strongest path runs through Claude Code with run-automation-suite, which assumes the user has a local Appium toolchain (node / python / mvn / dotnet) and a local filesystem of test scripts. That assumption is reasonable for developer-heavy teams but adds friction for tester-heavy orgs and for non-Claude-Code surfaces (Cowork install-test pending; claude.ai web, Claude Desktop, and mobile are blocked on local-FS access today).
This sketch lays out four named near-term variants that move closer to "AI-native to Kobiton" without waiting on multi-quarter MCP protocol evolution. Each variant is independently shippable; pairs are compatible (a hybrid pattern can coexist with a staging-upload tool). The point of the sketch is to make the tradeoffs visible so Kobiton can decide where to invest.
Variant 1 (hybrid pattern) was proposed by @mimosa767 in #53 comment-4482315819 and is reproduced here with credit. Variants 2-4 are Intent Solutions framings building from the same architectural starting point.
| # | Variant | Who builds what | Cross-client lift |
|---|---|---|---|
| 1 | Hybrid: local helper MCP + remote orchestration MCP | Intent Solutions or community ships a small local MCP; Kobiton's existing remote MCP unchanged | Helps every MCP client that supports local stdio servers |
| 2 | Staging-upload pattern | Kobiton adds a pre-signed-upload endpoint + one consolidated executeTestRun MCP tool |
Helps every MCP client — including mobile |
| 3 | Bundled host (desktop app or polished Cowork bundle) | Kobiton builds + maintains a host app or curated Cowork plugin bundle that owns the file-picker UX | Helps Cowork + desktop users specifically; web/mobile via separate variants |
| 4 | Kobiton-hosted test runner | Kobiton stands up server-side Appium runner with sandboxing, queue management, observability | Helps every client universally; eliminates local-toolchain dependence entirely |
Higher-numbered variants require less from the client. Variants 1 and 2 can be shipped in parallel; variants 3 and 4 are larger investments and benefit from variants 1 and 2 existing first. Implementation effort + scheduling for each is Kobiton's call and not estimated here.
Credit: proposed by @mimosa767 in #53 comment-4482315819.
How it works. Two MCP servers, paired:
flowchart TB
subgraph local["Local Machine (user)"]
LM["Local helper MCP<br/>(stdio)<br/>• filesystem read<br/>• shell exec<br/>• file pickup<br/>• local Appium invoke"]
end
subgraph cloud["Cloud (Kobiton)"]
RM["Remote MCP<br/>api.kobiton.com/mcp<br/>• listDevices, reserveDevice<br/>• listSessions, getSession<br/>• getSessionArtifacts<br/>• uploadAppToStore"]
end
CL(["Claude<br/>(any MCP client)<br/>orchestrates both"])
CL -->|calls| LM
CL -->|calls| RM
The local helper handles the steps that require user-machine access (reading the test script, invoking the user's installed node / python / mvn / dotnet, picking up the resulting artifacts before pushing them). The remote MCP handles everything that lives on Kobiton's side (device reservation, session lifecycle, artifact URLs). Claude orchestrates both.
What changes.
| Side | Change |
|---|---|
| Client | User installs both MCPs. Claude Code: .mcp.json lists both. Claude Desktop: claude_desktop_config.json configures the stdio local helper alongside the existing remote Connector. Other MCP clients (Cursor, Codex CLI, etc.): per-client config |
Plugin (kobiton/automate) |
New local-helper/ directory shipping the local MCP server as an installable npm package (or stdio binary). Existing .mcp.json config gets a second entry pointing at the local helper. Skill body adjusted to invoke local-helper tools alongside remote-MCP tools |
Kobiton server (api.kobiton.com/mcp) |
Unchanged |
Tradeoffs. Smallest lift of any variant — Kobiton-side does no work; the plugin + Intent Solutions / community absorb the build. It also helps NON-Claude clients today (Cursor / Codex CLI / Gemini CLI users get the same workflow). The downside: the user still has to install two things, and the local MCP still requires the user to have Appium + a runtime installed locally. The variant doesn't reduce local-toolchain dependence; it just makes it portable across MCP clients.
Best paired with: variant 2 (staging-upload) for the upload portion; variant 1 handles script execution, variant 2 handles app delivery.
How it works. User uploads the test script (or APK / IPA) to a Kobiton-owned pre-signed URL FIRST. Then a single high-level MCP tool — call it executeTestRun(scriptUrl, targetSpec) — takes the URL reference and does the entire orchestration server-side. No local filesystem needed after upload.
sequenceDiagram
participant U as User
participant C as Client (Claude)
participant K as api.kobiton.com/mcp
participant S as Kobiton S3
U->>K: GET presigned PUT URL
K-->>U: presigned URL
U->>S: PUT test script
S-->>U: 200 OK
C->>K: executeTestRun(scriptUrl, targetSpec)
activate K
K->>K: createSession on selected device
K->>S: fetch script
K->>K: run Appium against session
K->>K: collect artifacts
deactivate K
K-->>C: session record + artifact URLs
What changes.
| Side | Change |
|---|---|
| Client | One-tool call instead of the current ~6-step orchestration. The 3-step upload (uploadAppToStore → PUT → confirmAppUpload) becomes a 1-step getUploadUrl → PUT. Skill body shrinks substantially |
| Plugin | tools/sessions.yaml adds executeTestRun definition. Skill body simplifies to "ask user → upload script → call executeTestRun → present results." Probably halves the skill's length |
| Kobiton server | New endpoint POST /api/v2/uploads/presign returns a pre-signed PUT URL. New high-level executeTestRun tool that orchestrates session creation + script fetch + run + artifact collection. Server-side Appium runner exists or is added |
Tradeoffs. Universal lift — every MCP client (and every Claude surface that supports MCP, including mobile) gets a one-tool workflow. Eliminates the async-race problem from R2 finding #34 because the server controls all timing internally. The downside: requires Kobiton to operate a server-side Appium runner, which is a real ops commitment (queue management, sandboxing, observability, scaling). It also reduces the surface area for client-side innovation — once the server runs everything, the client is mostly a thin invoker.
Best paired with: variant 1 for the file-pickup step (instead of a pre-signed PUT, use the local helper); variant 4 if Kobiton wants the runner to be the long-term anchor.
How it works. Kobiton ships its own host — either a standalone desktop app or a curated, branded Cowork plugin bundle — that owns the file-picker UX, bundles a local Appium runtime, and pairs with the existing remote MCP for device/session work.
flowchart TB
subgraph host["Kobiton-branded host"]
direction TB
flavor["3a — Desktop app (Mac / Windows) OR<br/>3b — Cowork plugin bundle (via claude.com/plugins)"]
components["Components:<br/>• native file picker<br/>• bundled Appium 2.x runtime<br/>• script editor (optional)<br/>• artifact viewer<br/>• device picker UI"]
flavor -.- components
end
KM["api.kobiton.com/mcp<br/>(device + session work)"]
host --> KM
Two flavors:
3a — Standalone desktop app. Kobiton-branded; Mac + Windows installer; could be Electron / Tauri / native. Owns the UX end-to-end. Pairs with the remote MCP via HTTP. No Claude dependency at all.
3b — Polished Cowork plugin bundle. Distributed via claude.com/plugins. Uses Cowork's existing host (sandboxed Ubuntu VM, file picker, plugin marketplace) but bundles Kobiton-specific UX through .claude-plugin/ skills + agents + hooks. Same architectural prerequisites as Cowork — per Cowork extensions docs — though drop-in plugin portability across Claude Code and Cowork is not yet formally documented by Anthropic and depends on the install test referenced in #53.
What changes.
| Side | 3a (desktop app) | 3b (Cowork bundle) |
|---|---|---|
| Client | Kobiton's app, not Claude | Cowork (existing host) |
Plugin (kobiton/automate) |
Mostly unchanged — remote MCP still primary | Refined .claude-plugin/ package with Cowork-specific UX hints, scheduled tasks, agent definitions |
| Kobiton server | Unchanged or minor (host emits some app-specific instrumentation) | Unchanged |
| Kobiton brand | Owns the surface entirely | Branded inside Cowork; Cowork brand is co-primary |
Tradeoffs. Strongest "AI native to Kobiton" perception (variant 3a especially — it's a Kobiton-branded product). Reduces customer confusion about "do I need to buy Claude separately?" because the app ships with everything. The downside: 3a is a meaningful product-engineering investment (desktop app maintenance, OS-specific installer pipelines, update channel). 3b is much cheaper — leverages existing Anthropic infrastructure — but inherits Cowork's audience (mostly Claude-Pro / Claude-Max subscribers) and brand co-presence.
3b also depends on the Cowork install test we committed to in #53 (one-afternoon empirical scope) to confirm cross-surface plugin portability before shipping.
Best paired with: variant 2 — a bundled host with a high-level executeTestRun tool is much simpler than a bundled host that has to orchestrate the multi-step flow itself.
How it works. The test runner lives entirely server-side. The user submits a script + a target spec via a single MCP tool, and Kobiton runs everything on cloud-side infrastructure. No local toolchain, no local FS dependency, no client-side Appium runtime.
flowchart LR
CL["Client<br/>(any MCP-capable<br/>Claude surface)"]
MCP["api.kobiton.com/mcp"]
subgraph runner["Kobiton cloud test runner"]
WP["sandboxed Appium 2.x<br/>worker pool"]
QS["queue + scheduler"]
DR["device reservation"]
AP["artifact pipeline"]
OT["observability<br/>(OTel spans)"]
end
RES["Returns:<br/>session record<br/>artifact URLs<br/>pass / fail"]
CL -->|"executeTestRun<br/>(scriptContents or scriptUrl,<br/>targetSpec)"| MCP
MCP --> WP
WP --> QS
QS --> DR
DR --> AP
AP --> OT
OT --> RES
This is variant 2 taken to its logical conclusion — instead of relying on the client to deliver the script, the server runs it from end to end. The client doesn't need a local runtime at all; mobile, claude.ai web, claude.ai/code cloud sandbox all work equally well.
What changes.
| Side | Change |
|---|---|
| Client | Same one-tool call as variant 2. No local Appium runtime. Works from claude.ai web, claude.ai/code cloud sandbox, mobile, Cowork, Desktop, any MCP client |
Plugin (kobiton/automate) |
Significantly simplified — skill body becomes "ask user, send script to executeTestRun, present results." Probably ~1/4 the current length |
| Kobiton server | Major build: sandboxed Appium worker pool, queue / scheduler, observability (OTel spans per session for cross-client portability — see jeremylongshore/automate#28), artifact pipeline, security model for arbitrary user-submitted scripts |
Tradeoffs. Universal lift — every MCP client benefits equally, including ones that can't run local code at all (mobile, web). Eliminates the "Claude Pro/Max licensing" perception entirely because the workflow runs anywhere a user can configure a Custom Connector. The downside: this is the biggest Kobiton-side investment of any variant. It's also a security-sensitive surface (server runs arbitrary user-submitted Appium scripts on devices; needs sandboxing + abuse rate-limits + a clear policy on what scripts are allowed). The "AI-native" framing is fully realized here, but the path from today's plugin to a hosted runner is a meaningful product pivot.
Best paired with: none — variant 4 supersedes variants 1, 2, and 3 in capability. Worth doing if Kobiton wants the long-term anchor; variants 1 and 2 are faster steps toward the same destination.
Comparing all four across consistent dimensions:
| Dimension | V1: Hybrid | V2: Staging-upload | V3: Bundled host | V4: Hosted runner |
|---|---|---|---|---|
| Relative Kobiton-side scope | None — Kobiton's existing MCP unchanged | New endpoint + new high-level tool | New product surface (3a) or new bundle (3b) | New cloud infrastructure (worker pool + queue + observability) |
| Cross-client lift | Every MCP client w/ stdio support | Every MCP client incl. mobile + web | Cowork users (3b) or Kobiton-app users (3a) | Universal — every MCP client incl. mobile + web |
| Local-toolchain dependence | Still required | Still required (until upload completes) | Bundled within host | Eliminated |
| "AI-native to Kobiton" perception | Low (still external Claude-branded) | Medium (one-tool feel) | High (3a) / Medium (3b) | Highest |
| Procurement / licensing concern | Customer still buys Claude | Customer still buys Claude | Reduced (3a fully Kobiton-branded) | Eliminated for the workflow itself |
| Security surface area | Local exec (existing) | Same as today + presigned URL | Same as today + bundled runtime | Server-side arbitrary-script exec — new attack surface |
| Compounds with which SEPs | None directly | SEP-2356 (file input) cleans this up later | SEP-2640 (Skills as MCP primitive) tightens 3b | SEP-2532 (resource streaming), SEP-1610 (declarative chaining) compound here |
| Reversibility | Easy — remove local MCP | Medium — deprecate executeTestRun is awkward |
Hard (3a) — desktop app investment / Medium (3b) | Hardest — server-side runner is operational commitment |
This matrix deliberately does not estimate time-to-deliver, headcount, or implementation effort for any variant — those depend on Kobiton's internal resourcing and prioritization and are not Intent Solutions' call to make. The "right" variant depends on Kobiton's read on three things: how much the "AI-native" customer perception matters (V3a / V4 score highest); how much server-side investment is appetite-compatible (V1 / V3b are the lightest, V4 the largest); and whether cross-MCP-client portability is a strategic priority (V2 / V4 lift every client equally, V3a / V3b favor specific surfaces).
- Not a roadmap. Each variant is independently shippable; the order and combinations are Kobiton's call. This sketch maps the levers, not the commit.
- Not a SOW change. The Intent Solutions R-series engagement scope is unchanged. This sketch is a structural artifact responding to
#53ask 6 — decision-support, not deliverable. - Not a recommendation. The matrix in section 4 is deliberately neutral; "what's right" depends on Kobiton's commercial + strategic context, not on the architecture in isolation.
- Not the bundled-host implementation. This is a tradeoff-analysis sketch. The actual builds — whether of variant 1's local helper or variant 2's staging-upload endpoint or variant 3's host or variant 4's runner — each warrant their own design doc with detail well beyond this sketch's scope.
- Not a substitute for the one-pager or the README compatibility matrix. Those address different
#53asks (the one-pager maps each ask to a layer; the README distills surface compatibility for customers). The bundled-host sketch addresses ask 6 specifically.
kobiton/automate#53— issue body, @mimosa767 audit comment 4476188526, @mimosa767 architectural correction 4482315819 (origin of variant 1)- Intent Solutions delivery commitment:
#53comment-4481683618 - Intent Solutions surface matrix reply:
#53comment-4482806767
- Architectural one-pager — maps each
#53ask to MCP-protocol (L1) / client-implementation (L2) / tool-quality (L3) layer - README compatibility matrix PR — customer-facing 6-row distillation
- Upstream finding slate (
#55,#56,#57,#58,#59,#60) with reading-order anchor#61— the six server-side findings from mimosa767's audit that affect all four variants' tool-quality column
- SEP-1610 — Declarative multi-step tool chaining
- SEP-2356 — File input support for tools and elicitation
- SEP-2532 — Resource Streaming for Binary Content Delivery
- SEP-2640 — Skills Extension
- Cowork extensions / 3p plugins
- Get started with Claude Cowork
- Use Skills in Claude
- Code Execution Tool
- Custom Connectors
- Jeremy Longshore intentsolutions.io