---
slug: "aggclaw"
source_type: "clawhub"
source_url: "https://clawhub.ai/skills/aggclaw"
repo: ""
source_file: "description"
---
---
name: aggclaw
description: "AppGrowing Global intelligent ad creative analysis assistant. Finds the most relevant global ad creatives based on your instruction and delivers automated analysis. Includes Inspire ideation mode. Triggers: keywords analyze creatives, creative analysis, global campaigns, explore creatives, find creatives; commands /aggclaw, /agg_inspire"
homepage: https://appgrowing.net/
metadata:
  {
    "openclaw": {
      "slug": "aggclaw",
      "version": "1.2.0",
      "author": "youcloud",
      "emoji": "🌍",
      "requires": {
        "env": ["YOUCLOUD_API_KEY"]
      }
    }
  }
---

# aggclaw

AppGrowing Global intelligent ad creative analysis assistant; analyzes global ad creatives, includes Inspire mode. Available to AI plus / Pro subscribers.

## Prerequisite: API Key

Read from env var `YOUCLOUD_API_KEY`. **Never send requests without a valid key.** When missing, prompt:

```
Please configure your API Key first:
1. Get it from AppGrowing Global → Profile → Enterprise Info
2. Set env var: Linux/macOS `export YOUCLOUD_API_KEY="..."`; Windows `$env:YOUCLOUD_API_KEY="..."`
3. Resend your request
```

## Triggers & Modes

| Trigger | chat_mode |
|---|---|
| `/aggclaw` (auto-detect, see below) | — |
| `/aggclaw-game` | 7 Game |
| `/aggclaw-app`, `/aggclaw-shortdrama` | 8 Non-game |
| `/agg_inspire` | 9 Inspire |
| Keywords (analyze creatives, creative analysis etc.) | Auto-detect |

**`/aggclaw` auto-detect:** discussion-style question (advice/strategy/ideas/comparison/"how to", not asking for specific creative data) → 9; game content (game titles, RPG/SLG/MMO) → 7; other → 8.

## Language Detection

Detect the user's input language and reply in that language throughout (framing text, errors, summaries included); keep `input` in the user's original wording — do not translate. Preference persists for the whole session.

| Input contains | language_code |
|---|---|
| Chinese characters | `zh` |
| Hiragana / Katakana | `ja` |
| Other | `en` |
| Undetermined | omit |

`language_code` may only be `zh`/`ja`/`en`; omit for any other language.

## Execution Flow

1. **Check API Key** (above)
2. **Detect language + determine chat_mode** (above)
3. **Call the API directly** — do not ask the user for product positioning, target market, or other supplementary info; let the API search on its own:
   - New analysis → send `input` + `chat_mode` + `language_code`, no `session_id`
   - Follow-up → reuse `session_id`, omit `chat_mode`/`language_code` (preserve the session's mode & language)
   - Output `output`; translate if its language differs from the user's; save `session_id` for follow-ups

⚠️ **Mandatory timeout rule:** set timeout to **600s** (responses often take 60s+). **Never** interrupt before timeout. **Never** send "still processing" / "will let you know" messages. Wait for the complete result, then reply in one shot; only "result returned" or "timeout/error" situations may send a message.

## Analysis Endpoint

- URL: `https://ai-chat-global.youcloud.com/aichat/claw`
- Method: POST JSON
- Headers: `Authorization: Bearer {KEY}`, `Content-Type: application/json`
- Params: `input` (required), `session_id` (follow-ups), `chat_mode` (7/8/9, new sessions only), `language_code` (zh/ja/en, new sessions only)
- Timeout: ≥600s

## Materials Download

After an analysis completes (`session_id` available), the user may ask to download that conversation's creatives.

**Intent routing:**
- "Download materials" without a scope → **do not start downloading**; ask the user to choose a scope first. Prefer the host's ask/question tool to pop an interactive card; if the host lacks one (e.g., IM clients), fall back to a plain text message listing the options. All display text must be in the detected language:
  - Title: information retrieved from the last conversation — which would you like to download?
  - Option 1: creatives mentioned in the analysis result → download `is_mentioned=true`
  - Option 2: all creatives → download the entire list (no filtering)
- "Download mentioned creatives" or close semantics → download `is_mentioned=true`

**Materials endpoint:**
- URL: `https://ai-chat-global.youcloud.com/aichat/sessions/{session_id}/materials`
- Method: GET; Header `Authorization: Bearer {KEY}`; Timeout ≥120s
- Encode `=` in `session_id` as `%3D` (keep `~`). Example: `99QLLyMfj8uUrvalSiHr~g%3D%3D`
- Response: JSON array `[{id, detail_url, download_url, is_mentioned}]`; **always returns the full list** — filter by `is_mentioned` client-side

**Download rules:**
- On HTTP 403 (link expired) → **silently** re-fetch materials and retry the failed item, no message to the user
- Concurrency ≤ 3; queue when exceeded
- **No messages during download**; on completion send **one** message in the detected language: local path + download count (success x, failure y; append failed ids if y>0)
- Save to a new folder named after the first `## ` heading of the analysis report (strip `## `, replace illegal chars `/ \ : * ? " < > |` with `_`); filename `{id}.{ext}` (ext from download_url, else response Content-Type)

## Auth (two models — do not mix)

| URL | Auth |
|---|---|
| `/aichat/claw`, `/sessions/{id}/materials` | `Authorization: Bearer {KEY}` header |
| `download_url` (CDN direct link) | **No header** — relies on the `auth_key` embedded in the URL |

## PowerShell Template

```powershell
# Analysis
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$body = @{input="Your analysis request"; chat_mode=8; language_code="en"} | ConvertTo-Json -Compress
Invoke-RestMethod -Uri "https://ai-chat-global.youcloud.com/aichat/claw" -Method Post -ContentType "application/json; charset=utf-8" -Headers @{Authorization="Bearer $env:YOUCLOUD_API_KEY"} -Body $body -TimeoutSec 600 | Select-Object -ExpandProperty output

# Materials list + download (no auth header on download_url)
$enc = [uri]::EscapeDataString($sessionId)
$resp = Invoke-RestMethod -Uri "https://ai-chat-global.youcloud.com/aichat/sessions/$enc/materials" -Headers @{Authorization="Bearer $env:YOUCLOUD_API_KEY"} -TimeoutSec 120
foreach ($m in $resp) { Invoke-WebRequest -Uri $m.download_url -OutFile "$folder\$($m.id).mp4" -TimeoutSec 180 }
```

## Error Handling

- 400/401 auth failed: `API Key authentication failed. Check if your key is active or expired. Get it from AppGrowing Global Profile → Enterprise Info, or contact support.`
- Other: `Request returned an error (code={code}). Check your API Key permissions, account quota, or contact support.`

## Examples

For full input/output examples, see [references/example.md](references/example.md)
