{
  "schemaVersion": "1.0",
  "item": {
    "slug": "aster",
    "name": "Skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/satyajiit/aster",
    "canonicalUrl": "https://clawhub.ai/satyajiit/aster",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/aster",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=aster",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "aster",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-08T20:42:17.961Z",
      "expiresAt": "2026-05-15T20:42:17.961Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=aster",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=aster",
        "contentDisposition": "attachment; filename=\"aster-0.1.14.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "aster"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/aster"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/aster",
    "agentPageUrl": "https://openagent3.xyz/skills/aster/agent",
    "manifestUrl": "https://openagent3.xyz/skills/aster/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/aster/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Aster - Your AI CoPilot on Mobile",
        "body": "Your AI CoPilot for any Android device using MCP (Model Context Protocol) — or give your AI a dedicated phone and let it call, text, and act on its own. Fully open source and privacy-first — your data never leaves your network.\n\nWebsite: aster.theappstack.in | GitHub: github.com/satyajiit/aster-mcp\n\nFor screenshots of the Android app and web dashboard, visit aster.theappstack.in."
      },
      {
        "title": "Setup",
        "body": "Install and start the server:\n\nnpm install -g aster-mcp\naster start\n\nInstall the Aster Android app on any Android device — your daily phone or a spare one for your AI — from Releases and connect to the server address shown in terminal.\n\n\nConfigure MCP in your .mcp.json:\n\n{\n  \"mcpServers\": {\n    \"aster\": {\n      \"type\": \"http\",\n      \"url\": \"http://localhost:5988/mcp\"\n    }\n  }\n}"
      },
      {
        "title": "Security & Privacy",
        "body": "Aster is built with a security-first, privacy-first architecture:\n\nSelf-Hosted — Runs entirely on your local machine. No cloud servers, no third-party relays. Your data stays on your network.\nZero Telemetry — No analytics, no tracking, no usage data collection. What you do stays with you.\nDevice Approval — Every new device must be manually approved from the dashboard before it can connect or execute commands.\nTailscale Integration — Optional encrypted mesh VPN via Tailscale with WireGuard. Enables secure remote access with automatic TLS (WSS) — no port forwarding required.\nNo Root Required — Uses the official Android Accessibility Service API (same system powering screen readers). No rooting, no ADB hacks, no exploits. Every action is permission-gated and sandboxed.\nForeground Transparency — Always-visible notification on your Android device when the service is running. No silent background access.\nLocal Storage Only — All data (device info, logs) stored in a local SQLite database. Nothing is sent externally.\n100% Open Source — MIT licensed, fully auditable codebase. Inspect every line of code on GitHub."
      },
      {
        "title": "Device & Screen",
        "body": "aster_list_devices - List connected devices\naster_get_device_info - Get device details (battery, storage, specs)\naster_take_screenshot - Capture screenshots\naster_get_screen_hierarchy - Get UI accessibility tree"
      },
      {
        "title": "Input & Interaction",
        "body": "aster_input_gesture - Tap, swipe, long press\naster_input_text - Type text into focused field\naster_click_by_text - Click element by text\naster_click_by_id - Click element by view ID\naster_find_element - Find UI elements\naster_global_action - Back, Home, Recents, etc."
      },
      {
        "title": "Apps & System",
        "body": "aster_launch_intent - Launch apps or intents\naster_list_packages - List installed apps\naster_read_notifications - Read notifications\naster_read_sms - Read SMS messages\naster_send_sms - Send an SMS text message to a phone number\naster_get_location - Get GPS location\naster_execute_shell - Run shell commands in Android app sandbox (no root, restricted to app data directory and user-accessible storage, 30s timeout, 1MB output limit)"
      },
      {
        "title": "Files & Storage",
        "body": "aster_list_files - List directory contents\naster_read_file - Read file content\naster_write_file - Write to file\naster_delete_file - Delete file\naster_analyze_storage - Storage analysis\naster_find_large_files - Find large files\naster_search_media - Search photos/videos with natural language"
      },
      {
        "title": "Device Features",
        "body": "aster_get_battery - Battery info\naster_get_clipboard / aster_set_clipboard - Clipboard access\naster_show_toast - Show toast message\naster_speak_tts - Text-to-speech\naster_vibrate - Vibrate device\naster_play_audio - Play audio\naster_post_notification - Post notification\naster_make_call - Initiate phone call\naster_make_call_with_voice - Make a call, enable speakerphone, and speak AI text via TTS after pickup\naster_show_overlay - Show web overlay on device"
      },
      {
        "title": "Media Intelligence",
        "body": "aster_index_media_metadata - Extract photo/video EXIF metadata\naster_search_media - Search photos/videos with natural language queries"
      },
      {
        "title": "Proactive Event Forwarding (OpenClaw Callbacks)",
        "body": "Aster can push real-time events from the phone to your AI agent via webhook. When enabled, these events arrive as HTTP POST payloads — your agent doesn't need to poll, the phone tells you what's happening.\n\nConfigure via the dashboard at /settings/openclaw or CLI: aster set-openclaw-callbacks."
      },
      {
        "title": "Webhook Format",
        "body": "Events are sent as HTTP POST to the configured OpenClaw endpoint (/hooks/agent by default). The AI reads the message field. All event context is packed into message using standardized [key] value tags.\n\nExample raw HTTP POST payload for a notification event:\n\n{\n  \"message\": \"[skill] aster\\n[event] notification\\n[device_id] 6241e40fb71c0cf7\\n[model] samsung SM-S938B, Android 16\\n[data-app] messaging\\n[data-package] com.google.android.apps.messaging\\n[data-title] John\\n[data-text] Hey, are you free tonight?\",\n  \"wakeMode\": \"now\",\n  \"deliver\": true,\n  \"channel\": \"whatsapp\",\n  \"to\": \"+1234567890\"\n}\n\nmessage — structured event text with standard headers (this is what the AI reads)\nwakeMode — always \"now\" (wake the agent immediately)\ndeliver — always true for real events, false for test pings\nchannel / to — delivery channel and recipient, configured in the dashboard"
      },
      {
        "title": "Event Format",
        "body": "Every event follows a standardized structure with 4 fixed headers and [data-*] fields:\n\n[skill] aster\n[event] <event_name>\n[device_id] <device_uuid>\n[model] <manufacturer model, Android version>\n[data-key] value\n[data-key] value\n\n[skill] — always aster\n[event] — event name: sms, notification, device_online, device_offline, pairing\n[device_id] — UUID of the device (use this to target the device with Aster tools)\n[model] — device manufacturer, model, and OS\n[data-*] — event-specific fields, each prefixed with data- (e.g. [data-app], [data-sender])"
      },
      {
        "title": "Event Types",
        "body": "sms — Incoming SMS\n\n[skill] aster\n[event] sms\n[device_id] a1b2c3d4-5678-90ab\n[model] samsung SM-S938B, Android 15\n[data-sender] +1234567890\n[data-body] Hey are you free tonight?\n\nnotification — App notification (deduplicated against SMS)\n\n[skill] aster\n[event] notification\n[device_id] a1b2c3d4-5678-90ab\n[model] samsung SM-S938B, Android 15\n[data-app] whatsapp\n[data-package] com.whatsapp\n[data-title] John\n[data-text] Meeting moved to 3pm\n\ndevice_online — Approved device came online\n\n[skill] aster\n[event] device_online\n[device_id] a1b2c3d4-5678-90ab\n[model] samsung SM-S938B, Android 15\n[data-status] connected\n\ndevice_offline — Device went offline\n\n[skill] aster\n[event] device_offline\n[device_id] a1b2c3d4-5678-90ab\n[model] samsung SM-S938B, Android 15\n[data-status] disconnected\n\npairing — New device needs approval (use [device_id] to approve)\n\n[skill] aster\n[event] pairing\n[device_id] e5f6g7h8-9012-cdef\n[model] Samsung SM-S924B, Android 15\n[data-status] pending_approval\n[data-action] approve this device from the Aster dashboard or via aster devices approve"
      },
      {
        "title": "How to React to Events",
        "body": "When you receive a message with [skill] aster, parse the [event] and [device_id] to determine what happened and which device to act on.\n\nSMS — reply, extract info, or escalate:\n\n[event] sms | [device_id] a1b2c3d4 | sender: +1234567890 | body: Running late, be there in 20\n→ aster_send_sms (deviceId: a1b2c3d4) to +1234567890: \"No worries, see you soon!\"\n\n[event] sms | [device_id] a1b2c3d4 | sender: +1800555 | body: Your OTP is 482913\n→ Extract OTP \"482913\", use aster_input_text (deviceId: a1b2c3d4) to enter it\n\nNotifications — monitor and act on behalf of user:\n\n[event] notification | [device_id] a1b2c3d4 | app: driver | text: Your driver is arriving\n→ aster_speak_tts (deviceId: a1b2c3d4) \"Your Uber is almost here\"\n\n[event] notification | [device_id] a1b2c3d4 | app: mShop | text: Your package was delivered\n→ aster_send_sms (deviceId: a1b2c3d4) to user: \"Your Amazon package just arrived\"\n\nDevice lifecycle — manage connectivity:\n\n[event] device_offline | [device_id] a1b2c3d4\n→ Pause pending automations for device a1b2c3d4\n\n[event] device_online | [device_id] a1b2c3d4\n→ Resume queued tasks, aster_read_notifications (deviceId: a1b2c3d4) to catch up\n\nPairing — approve or alert:\n\n[event] pairing | [device_id] e5f6g7h8 | model: Samsung SM-S924B\n→ If expected: approve device e5f6g7h8 via dashboard API\n→ If unexpected: alert user \"Unknown device SM-S924B trying to connect\""
      },
      {
        "title": "Example Usage",
        "body": "Your CoPilot on Mobile:\n\n\"Open YouTube and search for cooking videos\"\n→ aster_launch_intent → aster_click_by_id → aster_input_text\n\n\"Find photos from my trip to Mumbai last month\"\n→ aster_search_media with query \"photos from Mumbai last month\"\n\n\"Take a screenshot and tell me what's on screen\"\n→ aster_take_screenshot → aster_get_screen_hierarchy\n\nAI's own phone — let it act for you:\n\n\"Call me and tell me my flight is delayed\"\n→ aster_make_call_with_voice with number, text \"Your flight is delayed 45 min, new gate B12\", waitSeconds 8\n\n\"Text me when my delivery arrives\"\n→ aster_read_notifications → aster_send_sms with number and message\n\n\"Reply to the delivery guy: Thanks, I'll be home\"\n→ aster_send_sms with number and message"
      },
      {
        "title": "Commands",
        "body": "aster start              # Start the server\naster stop               # Stop the server\naster status             # Show server and device status\naster dashboard          # Open web dashboard\n\naster devices list       # List connected devices\naster devices approve    # Approve a pending device\naster devices reject     # Reject a device\naster devices remove     # Remove a device\n\naster set-openclaw-callbacks  # Configure event forwarding to OpenClaw"
      },
      {
        "title": "Requirements",
        "body": "Node.js >= 20\nAny Android device with Aster app installed (your phone or a dedicated AI device)\nDevice and server on same network (or use Tailscale for secure remote access)\n\nWebsite: aster.theappstack.in | GitHub: github.com/satyajiit/aster-mcp"
      }
    ],
    "body": "Aster - Your AI CoPilot on Mobile\n\nYour AI CoPilot for any Android device using MCP (Model Context Protocol) — or give your AI a dedicated phone and let it call, text, and act on its own. Fully open source and privacy-first — your data never leaves your network.\n\nWebsite: aster.theappstack.in | GitHub: github.com/satyajiit/aster-mcp\n\nFor screenshots of the Android app and web dashboard, visit aster.theappstack.in.\n\nSetup\nInstall and start the server:\nnpm install -g aster-mcp\naster start\n\n\nInstall the Aster Android app on any Android device — your daily phone or a spare one for your AI — from Releases and connect to the server address shown in terminal.\n\nConfigure MCP in your .mcp.json:\n\n{\n  \"mcpServers\": {\n    \"aster\": {\n      \"type\": \"http\",\n      \"url\": \"http://localhost:5988/mcp\"\n    }\n  }\n}\n\nSecurity & Privacy\n\nAster is built with a security-first, privacy-first architecture:\n\nSelf-Hosted — Runs entirely on your local machine. No cloud servers, no third-party relays. Your data stays on your network.\nZero Telemetry — No analytics, no tracking, no usage data collection. What you do stays with you.\nDevice Approval — Every new device must be manually approved from the dashboard before it can connect or execute commands.\nTailscale Integration — Optional encrypted mesh VPN via Tailscale with WireGuard. Enables secure remote access with automatic TLS (WSS) — no port forwarding required.\nNo Root Required — Uses the official Android Accessibility Service API (same system powering screen readers). No rooting, no ADB hacks, no exploits. Every action is permission-gated and sandboxed.\nForeground Transparency — Always-visible notification on your Android device when the service is running. No silent background access.\nLocal Storage Only — All data (device info, logs) stored in a local SQLite database. Nothing is sent externally.\n100% Open Source — MIT licensed, fully auditable codebase. Inspect every line of code on GitHub.\nAvailable Tools\nDevice & Screen\naster_list_devices - List connected devices\naster_get_device_info - Get device details (battery, storage, specs)\naster_take_screenshot - Capture screenshots\naster_get_screen_hierarchy - Get UI accessibility tree\nInput & Interaction\naster_input_gesture - Tap, swipe, long press\naster_input_text - Type text into focused field\naster_click_by_text - Click element by text\naster_click_by_id - Click element by view ID\naster_find_element - Find UI elements\naster_global_action - Back, Home, Recents, etc.\nApps & System\naster_launch_intent - Launch apps or intents\naster_list_packages - List installed apps\naster_read_notifications - Read notifications\naster_read_sms - Read SMS messages\naster_send_sms - Send an SMS text message to a phone number\naster_get_location - Get GPS location\naster_execute_shell - Run shell commands in Android app sandbox (no root, restricted to app data directory and user-accessible storage, 30s timeout, 1MB output limit)\nFiles & Storage\naster_list_files - List directory contents\naster_read_file - Read file content\naster_write_file - Write to file\naster_delete_file - Delete file\naster_analyze_storage - Storage analysis\naster_find_large_files - Find large files\naster_search_media - Search photos/videos with natural language\nDevice Features\naster_get_battery - Battery info\naster_get_clipboard / aster_set_clipboard - Clipboard access\naster_show_toast - Show toast message\naster_speak_tts - Text-to-speech\naster_vibrate - Vibrate device\naster_play_audio - Play audio\naster_post_notification - Post notification\naster_make_call - Initiate phone call\naster_make_call_with_voice - Make a call, enable speakerphone, and speak AI text via TTS after pickup\naster_show_overlay - Show web overlay on device\nMedia Intelligence\naster_index_media_metadata - Extract photo/video EXIF metadata\naster_search_media - Search photos/videos with natural language queries\nProactive Event Forwarding (OpenClaw Callbacks)\n\nAster can push real-time events from the phone to your AI agent via webhook. When enabled, these events arrive as HTTP POST payloads — your agent doesn't need to poll, the phone tells you what's happening.\n\nConfigure via the dashboard at /settings/openclaw or CLI: aster set-openclaw-callbacks.\n\nWebhook Format\n\nEvents are sent as HTTP POST to the configured OpenClaw endpoint (/hooks/agent by default). The AI reads the message field. All event context is packed into message using standardized [key] value tags.\n\nExample raw HTTP POST payload for a notification event:\n\n{\n  \"message\": \"[skill] aster\\n[event] notification\\n[device_id] 6241e40fb71c0cf7\\n[model] samsung SM-S938B, Android 16\\n[data-app] messaging\\n[data-package] com.google.android.apps.messaging\\n[data-title] John\\n[data-text] Hey, are you free tonight?\",\n  \"wakeMode\": \"now\",\n  \"deliver\": true,\n  \"channel\": \"whatsapp\",\n  \"to\": \"+1234567890\"\n}\n\nmessage — structured event text with standard headers (this is what the AI reads)\nwakeMode — always \"now\" (wake the agent immediately)\ndeliver — always true for real events, false for test pings\nchannel / to — delivery channel and recipient, configured in the dashboard\nEvent Format\n\nEvery event follows a standardized structure with 4 fixed headers and [data-*] fields:\n\n[skill] aster\n[event] <event_name>\n[device_id] <device_uuid>\n[model] <manufacturer model, Android version>\n[data-key] value\n[data-key] value\n\n[skill] — always aster\n[event] — event name: sms, notification, device_online, device_offline, pairing\n[device_id] — UUID of the device (use this to target the device with Aster tools)\n[model] — device manufacturer, model, and OS\n[data-*] — event-specific fields, each prefixed with data- (e.g. [data-app], [data-sender])\nEvent Types\n\nsms — Incoming SMS\n\n[skill] aster\n[event] sms\n[device_id] a1b2c3d4-5678-90ab\n[model] samsung SM-S938B, Android 15\n[data-sender] +1234567890\n[data-body] Hey are you free tonight?\n\n\nnotification — App notification (deduplicated against SMS)\n\n[skill] aster\n[event] notification\n[device_id] a1b2c3d4-5678-90ab\n[model] samsung SM-S938B, Android 15\n[data-app] whatsapp\n[data-package] com.whatsapp\n[data-title] John\n[data-text] Meeting moved to 3pm\n\n\ndevice_online — Approved device came online\n\n[skill] aster\n[event] device_online\n[device_id] a1b2c3d4-5678-90ab\n[model] samsung SM-S938B, Android 15\n[data-status] connected\n\n\ndevice_offline — Device went offline\n\n[skill] aster\n[event] device_offline\n[device_id] a1b2c3d4-5678-90ab\n[model] samsung SM-S938B, Android 15\n[data-status] disconnected\n\n\npairing — New device needs approval (use [device_id] to approve)\n\n[skill] aster\n[event] pairing\n[device_id] e5f6g7h8-9012-cdef\n[model] Samsung SM-S924B, Android 15\n[data-status] pending_approval\n[data-action] approve this device from the Aster dashboard or via aster devices approve\n\nHow to React to Events\n\nWhen you receive a message with [skill] aster, parse the [event] and [device_id] to determine what happened and which device to act on.\n\nSMS — reply, extract info, or escalate:\n\n[event] sms | [device_id] a1b2c3d4 | sender: +1234567890 | body: Running late, be there in 20\n→ aster_send_sms (deviceId: a1b2c3d4) to +1234567890: \"No worries, see you soon!\"\n\n[event] sms | [device_id] a1b2c3d4 | sender: +1800555 | body: Your OTP is 482913\n→ Extract OTP \"482913\", use aster_input_text (deviceId: a1b2c3d4) to enter it\n\n\nNotifications — monitor and act on behalf of user:\n\n[event] notification | [device_id] a1b2c3d4 | app: driver | text: Your driver is arriving\n→ aster_speak_tts (deviceId: a1b2c3d4) \"Your Uber is almost here\"\n\n[event] notification | [device_id] a1b2c3d4 | app: mShop | text: Your package was delivered\n→ aster_send_sms (deviceId: a1b2c3d4) to user: \"Your Amazon package just arrived\"\n\n\nDevice lifecycle — manage connectivity:\n\n[event] device_offline | [device_id] a1b2c3d4\n→ Pause pending automations for device a1b2c3d4\n\n[event] device_online | [device_id] a1b2c3d4\n→ Resume queued tasks, aster_read_notifications (deviceId: a1b2c3d4) to catch up\n\n\nPairing — approve or alert:\n\n[event] pairing | [device_id] e5f6g7h8 | model: Samsung SM-S924B\n→ If expected: approve device e5f6g7h8 via dashboard API\n→ If unexpected: alert user \"Unknown device SM-S924B trying to connect\"\n\nExample Usage\n\nYour CoPilot on Mobile:\n\n\"Open YouTube and search for cooking videos\"\n→ aster_launch_intent → aster_click_by_id → aster_input_text\n\n\"Find photos from my trip to Mumbai last month\"\n→ aster_search_media with query \"photos from Mumbai last month\"\n\n\"Take a screenshot and tell me what's on screen\"\n→ aster_take_screenshot → aster_get_screen_hierarchy\n\n\nAI's own phone — let it act for you:\n\n\"Call me and tell me my flight is delayed\"\n→ aster_make_call_with_voice with number, text \"Your flight is delayed 45 min, new gate B12\", waitSeconds 8\n\n\"Text me when my delivery arrives\"\n→ aster_read_notifications → aster_send_sms with number and message\n\n\"Reply to the delivery guy: Thanks, I'll be home\"\n→ aster_send_sms with number and message\n\nCommands\naster start              # Start the server\naster stop               # Stop the server\naster status             # Show server and device status\naster dashboard          # Open web dashboard\n\naster devices list       # List connected devices\naster devices approve    # Approve a pending device\naster devices reject     # Reject a device\naster devices remove     # Remove a device\n\naster set-openclaw-callbacks  # Configure event forwarding to OpenClaw\n\nRequirements\nNode.js >= 20\nAny Android device with Aster app installed (your phone or a dedicated AI device)\nDevice and server on same network (or use Tailscale for secure remote access)\n\nWebsite: aster.theappstack.in | GitHub: github.com/satyajiit/aster-mcp"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/satyajiit/aster",
    "publisherUrl": "https://clawhub.ai/satyajiit/aster",
    "owner": "satyajiit",
    "version": "0.1.14",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/aster",
    "downloadUrl": "https://openagent3.xyz/downloads/aster",
    "agentUrl": "https://openagent3.xyz/skills/aster/agent",
    "manifestUrl": "https://openagent3.xyz/skills/aster/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/aster/agent.md"
  }
}