← Back to Skills Marketplace
del-zhenwu

Dele Deploy

by del-zhenwu · GitHub ↗ · v1.0.5 · MIT-0
cross-platform ⚠ suspicious
123
Downloads
0
Stars
0
Active Installs
2
Versions
Install in OpenClaw
/install dele-deploy
Description
Deploy local HTML/frontend files to Dele (dele.fun) and get a live URL
README (SKILL.md)

Dele Deploy Skill

Overview

This skill allows AI Agents (OpenClaw, Cursor, Claude, etc.) to automatically deploy generated HTML files or frontend project folders to Dele (https://www.dele.fun) — a static site hosting platform. It returns a live URL that can be shared with the user.

Required Environment Variables

Variable Description
POSTME_API_KEY Required. Your Dele API key for authentication. Get one at https://www.dele.fun/api-keys
POSTME_API_URL Optional. Defaults to https://www.dele.fun/api/upload

Prerequisites

  1. Dele API Key: Generate an API key at https://www.dele.fun/api-keys, then set it as an environment variable:

    POSTME_API_KEY="your-secret-agent-key"
    
  2. Python Dependencies: The skill requires the requests library.

    pip install requests
    

Usage Instructions for the Agent

When a user asks you to deploy, publish, or share a web application (like an HTML file or a frontend project folder) that you have just created, you should use this skill.

  1. Determine the absolute path to the generated folder or file (target_path).
  2. Invent a suitable, URL-friendly name for the application (app_name). It must contain only lowercase letters, numbers, and hyphens.
  3. Call the postme_deploy skill with these parameters.
  4. Present the resulting URL to the user.

Visibility Control

Apps default to public (visible on the Explore page). You can optionally set visibility:

Value Behavior
public Listed on Explore, anyone can view
unlisted Not listed, accessible via direct URL
password Requires a 4-character access code (auto-generated, returned in response)
hidden Only the owner can access

If visibility is set to password, the response will include an accessCode (4 chars, 0-9a-z). Present this code to the user so they can share it with authorized visitors.

Example

If you generated a project in /tmp/workspace/my-app, you would call the skill with:

  • target_path: /tmp/workspace/my-app
  • app_name: my-app-v1
  • visibility: password (optional)

The skill will return a success message containing the live URL, e.g., Deployment successful! URL: https://www.dele.fun/app/my-app-v1/ If password-protected: Access code: x7k2

Tool Definition

{
  "name": "postme_deploy",
  "description": "Deploy a local folder or HTML file to the Dele system to get a live web URL.",
  "parameters": {
    "type": "object",
    "properties": {
      "target_path": {
        "type": "string",
        "description": "The local path to the folder or HTML file you want to deploy."
      },
      "app_name": {
        "type": "string",
        "description": "A unique, URL-friendly name for the application (lowercase letters, numbers, hyphens only)."
      },
      "api_url": {
        "type": "string",
        "description": "The full URL to the Dele /api/upload endpoint. Defaults to https://www.dele.fun/api/upload"
      },
      "api_key": {
        "type": "string",
        "description": "The API key for authentication (POSTME_API_KEY)."
      },
      "app_desc": {
        "type": "string",
        "description": "A short description of what the application does."
      },
      "visibility": {
        "type": "string",
        "enum": ["public", "unlisted", "password", "hidden"],
        "description": "App visibility level. Defaults to 'public'. If set to 'password', a 4-char access code will be auto-generated and returned."
      }
    },
    "required": [
      "target_path",
      "app_name"
    ]
  }
}

Python Implementation (postme_deploy.py)

import os
import requests
import re
from typing import Optional

def execute(
    target_path: str, 
    app_name: str, 
    api_url: str = "https://www.dele.fun/api/upload", 
    api_key: Optional[str] = None,
    app_desc: Optional[str] = None,
    visibility: Optional[str] = None
) -> str:
    """
    Deploy a local folder or HTML file to the Dele system.
    """
    if not os.path.exists(target_path):
        return f"Error: Target path '{target_path}' does not exist."
        
    if not re.match(r'^[a-z0-9-]+$', app_name):
        return "Error: app_name must contain only lowercase letters, numbers, and hyphens."

    valid_visibility = {"public", "unlisted", "password", "hidden"}
    if visibility and visibility not in valid_visibility:
        return f"Error: visibility must be one of {valid_visibility}"

    files_to_upload = []
    
    if os.path.isfile(target_path):
        files_to_upload.append((target_path, os.path.basename(target_path)))
    elif os.path.isdir(target_path):
        for root, _, files in os.walk(target_path):
            for file in files:
                file_path = os.path.join(root, file)
                rel_path = os.path.relpath(file_path, target_path).replace(os.sep, '/')
                files_to_upload.append((file_path, rel_path))
    else:
        return f"Error: '{target_path}' is neither a file nor a directory."

    if not files_to_upload:
        return "Error: No files found to upload."

    multipart_data = [('appName', (None, app_name))]
    if app_desc:
        multipart_data.append(('appDesc', (None, app_desc)))
        
    file_handles = []
    headers = {}
    if api_key:
        headers['Authorization'] = f"Bearer {api_key}"
        headers['x-agent-user'] = "openclaw-agent"

    try:
        for file_path, rel_path in files_to_upload:
            f = open(file_path, 'rb')
            file_handles.append(f)
            multipart_data.append(('files', (os.path.basename(file_path), f)))
            multipart_data.append(('paths', (None, rel_path)))

        response = requests.post(api_url, files=multipart_data, headers=headers)
        
        if response.status_code not in (200, 201):
            try:
                err_msg = response.json().get('error', response.text)
            except:
                err_msg = response.text
            return f"Deployment failed (Status {response.status_code}): {err_msg}"

        data = response.json()
        base_url = api_url.replace('/api/upload', '')
        app_url = f"{base_url}{data.get('url', f'/app/{app_name}/')}"
        result = f"Deployment successful! URL: {app_url}"

        # Set visibility if specified and not default
        if visibility and visibility != "public":
            vis_url = api_url.replace('/api/upload', '/api/apps/visibility')
            vis_resp = requests.post(
                vis_url,
                json={"appName": app_name, "visibility": visibility},
                headers=headers
            )
            if vis_resp.status_code == 200:
                vis_data = vis_resp.json()
                result += f"\
Visibility: {visibility}"
                if visibility == "password" and vis_data.get("accessCode"):
                    result += f"\
Access code: {vis_data['accessCode']}"
            else:
                result += f"\
Warning: Failed to set visibility to '{visibility}'"

        return result
            
    except Exception as e:
        return f"Error during deployment: {str(e)}"
    finally:
        for f in file_handles:
            f.close()
Usage Guidance
Before installing or invoking this skill: 1) Treat the POSTME_API_KEY as sensitive — confirm the skill provenance and do not reuse high-privilege keys. 2) Verify the registry metadata / publisher; the SKILL.md requires an API key and the 'requests' package but the registry lists none — ask the publisher to fix metadata or provide a signed package. 3) When using the skill, limit target_path to project/workspace directories only (do not point it at home, root, or system config folders) to avoid accidental exfiltration of secrets. 4) Prefer reviewing the full implementation (complete Python code) before granting access; ensure uploads go to the expected POSTME_API_URL and that no extra environment variables or headers are exfiltrated. 5) If you cannot verify the author or code, avoid providing sensitive keys and consider using a throwaway API key scoped to minimal permissions.
Capability Analysis
Type: OpenClaw Skill Name: dele-deploy Version: 1.0.5 The skill 'dele-deploy' (implemented in postme_deploy.py) allows an AI agent to upload local files or entire directories to an external hosting service (dele.fun). While this aligns with its stated purpose of deploying frontend projects, the tool lacks any path validation or restrictions, creating a high-risk vector for data exfiltration if the agent is directed to upload sensitive directories like ~/.ssh or project secrets. Additionally, the 'api_url' parameter is configurable, which could allow a prompt-injection attack to redirect the uploaded data to an unauthorized third-party endpoint.
Capability Assessment
Purpose & Capability
The SKILL.md describes deploying local files to Dele and requires an API key and file read access — which is coherent for a deploy tool. However the registry metadata (required env vars, primary credential) lists none, which is inconsistent and surprising: the skill actually needs POSTME_API_KEY and the requests library.
Instruction Scope
Runtime instructions tell the agent to locate an absolute target_path, walk directories and read all files under it, and upload them to the external service. That behavior is consistent with deployment, but the instructions do not constrain target_path (could be /home or /etc if misused). The skill also instructs pip-installing the 'requests' package.
Install Mechanism
There is no formal install spec (instruction-only), so nothing is written by a package installer. This is lower risk than arbitrary downloads, but the SKILL.md tells operators to pip install 'requests' — a runtime dependency not declared in registry metadata.
Credentials
The skill requires an API key (POSTME_API_KEY) to authenticate to dele.fun, which is expected for this purpose. But the registry metadata omitted this requirement (and primary credential), creating a transparency gap. The API key is sensitive and will be sent to an external endpoint; the optional POSTME_API_URL also allows redirecting where data is uploaded.
Persistence & Privilege
The skill does not request always:true and doesn't declare persistent system-wide changes. Autonomous invocation is allowed (platform default), which increases exposure but is not by itself unusual.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install dele-deploy
  3. After installation, invoke the skill by name or use /dele-deploy
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.5
- Added support for controlling app visibility after deployment: choose from public, unlisted, password-protected (with access code), or hidden. - Updated usage instructions and tool definition to describe the new `visibility` parameter. - If app is deployed with password protection, the generated access code is provided in the response for sharing. - No file changes were detected outside of documentation updates.
v1.0.4
- Renamed the skill from "postme-deploy" to **"dele-deploy"**. - Clarified setup and usage instructions, including example calls and environment setup. - Expanded API parameters to include a short application description (`app_desc`). - Improved tool and Python implementation documentation for clarity and ease of integration.
Metadata
Slug dele-deploy
Version 1.0.5
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 2
Frequently Asked Questions

What is Dele Deploy?

Deploy local HTML/frontend files to Dele (dele.fun) and get a live URL. It is an AI Agent Skill for Claude Code / OpenClaw, with 123 downloads so far.

How do I install Dele Deploy?

Run "/install dele-deploy" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Dele Deploy free?

Yes, Dele Deploy is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Dele Deploy support?

Dele Deploy is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Dele Deploy?

It is built and maintained by del-zhenwu (@del-zhenwu); the current version is v1.0.5.

💬 Comments