Back to Skills
    🦞

    aria2-json-rpc

    Interact with aria2 download manager via JSON-RPC 2.0.

    By @azzgo
    View on GitHub
    SKILL.md
    ---
    name: aria2-json-rpc
    description: Interact with aria2 download manager via JSON-RPC 2.0. Manage downloads, query status, and control tasks through natural language commands. Use when working with aria2, download management, or torrent operations.
    license: MIT
    compatibility: Requires Python 3.6+. WebSocket support requires websockets package (pip install websockets) and Python version must match dependency requirements.
    metadata:
      author: ISON
      version: "1.1.0"
    ---
    
    ## What This Skill Does
    
    This skill enables you to control aria2 download manager through natural language commands:
    - Download files (HTTP/HTTPS/FTP/Magnet/Torrent/Metalink)
    - Monitor download progress and status
    - Control downloads (pause, resume, remove)
    - Manage batch operations (pause all, resume all)
    - View statistics and configure options
    
    ## How to Use (For AI Agents)
    
    **⚠️ CRITICAL: DO NOT manually construct JSON-RPC requests.**
    
    **✅ ALWAYS use the Python scripts in the `scripts/` directory.**
    
    **⚠️ IMPORTANT: Use `python3` command, NOT `python`** (especially on macOS where `python` symlink doesn't exist)
    
    ### Workflow (MUST FOLLOW)
    
    **Step 1: Check Configuration Status**
    
    Before executing any aria2 commands, ALWAYS check if configuration is ready:
    
    ```bash
    python3 scripts/config_loader.py test
    ```
    
    - If **successful**: Proceed to execute user's command
    - If **failed**: Guide user to initialize configuration (see Step 2)
    
    **Step 2: Initialize Configuration (if needed)**
    
    If connection test fails, guide user to set up configuration:
    
    ```bash
    # Recommended: User config (survives skill updates)
    python3 scripts/config_loader.py init --user
    
    # Alternative: Local config (project-specific)
    python3 scripts/config_loader.py init --local
    ```
    
    Then instruct user to edit the generated config file with their aria2 server details.
    
    **Step 3: Execute User Commands**
    
    Once configuration is ready, execute the requested aria2 operations.
    
    ### Example Workflow
    
    **User:** "download http://example.com/file.zip"
    
    **You execute:**
    ```bash
    # 1. Check configuration
    python3 scripts/config_loader.py test
    ```
    
    If test passes:
    ```bash
    # 2. Execute download command
    python3 scripts/rpc_client.py aria2.addUri '["http://example.com/file.zip"]'
    ```
    
    **You respond:** "✓ Download started! GID: 2089b05ecca3d829"
    
    If test fails:
    ```
    Configuration not ready. Please initialize:
    1. Run: python3 scripts/config_loader.py init --user
    2. Edit ~/.config/aria2-skill/config.json with your aria2 server details
    3. Run: python3 scripts/config_loader.py test (to verify)
    ```
    
    ## Documentation Structure
    
    **For detailed execution instructions, see:**
    - **[references/execution-guide.md](references/execution-guide.md)** - Complete guide for AI agents with:
      - Command mapping table (user intent → script call)
      - Parameter formatting rules
      - Step-by-step examples
      - Common mistakes to avoid
      - Response formatting guidelines
    
    **For aria2 method reference, see:**
    - **[references/aria2-methods.md](references/aria2-methods.md)** - Detailed aria2 RPC method documentation
    
    ## Common Commands Quick Reference
    
    | User Intent | Command Example |
    |-------------|----------------|
    | Download a file | `python3 scripts/rpc_client.py aria2.addUri '["http://example.com/file.zip"]'` |
    | Check status | `python3 scripts/rpc_client.py aria2.tellStatus <GID>` |
    | List active downloads | `python3 scripts/rpc_client.py aria2.tellActive` |
    | List stopped downloads | `python3 scripts/rpc_client.py aria2.tellStopped 0 100` |
    | Pause download | `python3 scripts/rpc_client.py aria2.pause <GID>` |
    | Resume download | `python3 scripts/rpc_client.py aria2.unpause <GID>` |
    | Show statistics | `python3 scripts/rpc_client.py aria2.getGlobalStat` |
    | Show version | `python3 scripts/rpc_client.py aria2.getVersion` |
    | Purge results | `python3 scripts/rpc_client.py aria2.purgeDownloadResult` |
    
    For detailed usage and more commands, see [execution-guide.md](references/execution-guide.md).
    
    ## Available Scripts
    
    - `scripts/rpc_client.py` - Main interface for RPC calls
    - `scripts/examples/list-downloads.py` - Formatted download list
    - `scripts/examples/pause-all.py` - Pause all downloads
    - `scripts/examples/add-torrent.py` - Add torrent downloads
    - `scripts/examples/monitor-downloads.py` - Real-time monitoring
    - `scripts/examples/set-options.py` - Modify options
    
    ## Configuration
    
    Scripts automatically load configuration from multiple sources with the following priority (highest to lowest):
    
    ### Configuration Priority
    
    1. **Environment Variables** (highest priority - temporary override)
       - `ARIA2_RPC_HOST`, `ARIA2_RPC_PORT`, `ARIA2_RPC_PATH`, etc.
       - Best for: CI/CD pipelines, temporary overrides, testing
       - **Note**: For reference only. Agents should use config files instead.
    
    2. **Skill Directory Config** (project-specific configuration)
       - Location: `skills/aria2-json-rpc/config.json`
       - Best for: Project-specific settings, local testing, development
       - ⚠️ **Warning**: Lost when running `npx skills add` to update the skill
    
    3. **User Config Directory** (global fallback, update-safe) 🆕
       - Location: `~/.config/aria2-skill/config.json`
       - Best for: Personal default settings across all projects
       - ✅ **Safe**: Survives skill updates via `npx skills add`
    
    4. **Defaults** (localhost:6800)
       - Zero-configuration fallback for local development
    
    ### Configuration Options
    
    - **host**: Hostname or IP address (default: `localhost`)
    - **port**: Port number (default: `6800`)
    - **path**: URL path (default: `null`). Set to `/jsonrpc` for standard aria2, or custom path for reverse proxy
    - **secret**: RPC secret token (default: `null`)
    - **secure**: Use HTTPS instead of HTTP (default: `false`)
    - **timeout**: Request timeout in milliseconds (default: `30000`)
    
    ### Quick Setup (For AI Agents)
    
    **IMPORTANT**: Always use Python scripts to manage configuration. Do NOT use shell commands directly.
    
    **Step 1: Check current configuration status**
    ```bash
    python3 scripts/config_loader.py show
    ```
    
    **Step 2: Initialize configuration if needed**
    
    User config (recommended - survives updates):
    ```bash
    python3 scripts/config_loader.py init --user
    ```
    
    Local config (project-specific):
    ```bash
    python3 scripts/config_loader.py init --local
    ```
    
    **Step 3: Guide user to edit the config file**
    
    After initialization, the tool will display the config file path. Instruct user to edit it with their aria2 server details (host, port, secret, etc.).
    
    **Step 4: Verify configuration**
    ```bash
    python3 scripts/config_loader.py test
    ```
    
    Example config file content:
    ```json
    {
      "host": "localhost",
      "port": 6800,
      "secret": "your-secret-token",
      "secure": false,
      "timeout": 30000
    }
    ```
    
    ### Configuration Management (For AI Agents)
    
    **Available Python scripts for configuration management:**
    
    ```bash
    # Check current configuration and source
    python3 scripts/config_loader.py show
    
    # Initialize user config (recommended - update-safe)
    python3 scripts/config_loader.py init --user
    
    # Initialize local config (project-specific)
    python3 scripts/config_loader.py init --local
    
    # Test connection to aria2 server
    python3 scripts/config_loader.py test
    ```
    
    **Agent Workflow for Configuration Setup:**
    
    1. **Check if config exists**: Run `python3 scripts/config_loader.py show`
    2. **If config missing or invalid**: Guide user to run `python3 scripts/config_loader.py init --user`
    3. **User edits config**: Tell user the file path and required fields (host, port, secret)
    4. **Verify setup**: Run `python3 scripts/config_loader.py test`
    5. **Proceed with operations**: Once test passes, execute user's aria2 commands
    
    ### Advanced Configuration
    
    **Reverse Proxy Setup:**
    
    For reverse proxy setups like `https://example.com:443/jsonrpc`, the config file should contain:
    
    ```json
    {
      "host": "example.com",
      "port": 443,
      "path": "/jsonrpc",
      "secret": "your-secret-token",
      "secure": true
    }
    ```
    
    **Environment Variables (for reference only):**
    
    Configuration can also be overridden via environment variables:
    - `ARIA2_RPC_HOST`: Hostname
    - `ARIA2_RPC_PORT`: Port number
    - `ARIA2_RPC_PATH`: URL path
    - `ARIA2_RPC_SECRET`: Secret token
    - `ARIA2_RPC_SECURE`: "true" or "false"
    
    Note: Use Python scripts for configuration management. Environment variables are documented here for reference only.
    
    ## Key Principles (For AI Agents)
    
    1. **Never** construct JSON-RPC requests manually
    2. **Always** call Python scripts via Bash tool using `python3` (not `python`)
    3. **Always** check configuration before executing commands:
       - Run `python3 scripts/config_loader.py test` first
       - If test fails, guide user through initialization
    4. **Never** run raw shell commands (mkdir, cat, export, etc.) directly
       - Use Python scripts: `config_loader.py init`, `config_loader.py show`, etc.
    5. **Parse** script output and format for users
    6. **Refer to** execution-guide.md when unsure
    
    ## Supported Operations
    
    ### Download Management
    - Add downloads (HTTP/FTP/Magnet/Torrent/Metalink)
    - Pause/resume (individual or all)
    - Remove downloads
    - Add with custom options
    
    ### Monitoring
    - Check download status
    - List active/waiting/stopped downloads
    - Get global statistics
    - Real-time monitoring
    
    ### Configuration
    - Get/change download options
    - Get/change global options
    - Query aria2 version
    - List available methods
    
    ### Maintenance
    - Purge download results
    - Remove specific results
    
    ## Need Help?
    
    - **Execution details:** [references/execution-guide.md](references/execution-guide.md)
    - **Method reference:** [references/aria2-methods.md](references/aria2-methods.md)
    - **Troubleshooting:** [references/troubleshooting.md](references/troubleshooting.md)
    - **aria2 official docs:** https://aria2.github.io/