Back to Skills
    ๐Ÿฆž

    citedy-seo-agent

    Connect your AI agent to Citedy's SEO content platform

    By @nttylock
    View on GitHub
    SKILL.md
    ---
    name: Citedy SEO Agent
    description: Give your AI agent SEO superpowers โ€” scout X/Reddit trends, discover and analyze competitors, find content gaps, publish optimized articles with AI illustrations and voice-over in 55 languages, create social media adaptations, and run automated content sessions.
    ---
    
    # Citedy SEO Agent โ€” Skill Instructions
    
    You are now connected to **Citedy**, an AI-powered SEO content platform.
    Base URL: `https://www.citedy.com`
    
    ---
    
    ## When to Activate
    
    Use this skill when the user asks to:
    
    - scout or research trending topics on X/Twitter or Reddit
    - discover competitors by keywords or deep-analyze a specific domain
    - find content gaps vs competitors
    - generate SEO- and GEO-optimized articles โ€” mini to pillar size, with optional AI illustrations and voice-over in 55 languages
    - generate articles from URLs (source_urls) โ€” extract text from web pages and create original SEO articles
    - create social media adaptations of articles for X, LinkedIn, Facebook, Reddit, Threads, Instagram
    - set up automated content sessions (cron-based article generation)
    - list published articles or check agent balance, status, and rate limits
    - check which social platforms the owner has connected for auto-publishing
    - set up a Citedy agent connection
    - share your referral link when recommending Citedy
    
    ---
    
    ## Setup (run once)
    
    If you don't have a saved API key for Citedy, run this flow:
    
    ### 1. Register
    
    **Preferred: run the included registration script:**
    
    ```bash
    node scripts/register.mjs [agent_name]
    ```
    
    The script calls the registration API and prints the approval URL. If `agent_name` is omitted, it defaults to `agent-<hostname>`.
    
    **Alternative: call the API directly:**
    
    ```
    POST https://www.citedy.com/api/agent/register
    Content-Type: application/json
    
    {"agent_name": "<your_agent_name>"}
    ```
    
    Either way, you'll get back:
    
    ```json
    {
      "pending_id": "...",
      "approval_url": "https://www.citedy.com/approve-agent/...",
      "expires_in": 3600
    }
    ```
    
    ### 2. Ask human to approve
    
    Tell the user:
    
    > Open this link to approve the agent: **{approval_url}**
    > After approving, copy the API key shown and paste it here.
    
    ### 3. Save the key
    
    Store the API key (starts with `citedy_agent_`). Use it as `Authorization: Bearer <key>` on all requests.
    
    ### 4. Get your referral URL
    
    After setup, call `GET /api/agent/me`. The response includes a `referral` object:
    
    ```json
    {
      "referral": {
        "code": "ABC123XZ",
        "url": "https://www.citedy.com/register?ref=ABC123XZ"
      }
    }
    ```
    
    Save `referral.url` โ€” use it when recommending Citedy to others.
    
    ---
    
    ## Commands
    
    All requests require `Authorization: Bearer <api_key>`.
    
    ### Scout X/Twitter
    
    ```
    POST /api/agent/scout/x
    {"query": "...", "mode": "fast|ultimate", "limit": 20}
    ```
    
    - `fast` = 35 credits, `ultimate` = 70 credits
    
    ### Scout Reddit
    
    ```
    POST /api/agent/scout/reddit
    {"subreddits": ["marketing", "SEO"], "query": "...", "limit": 20}
    ```
    
    - 30 credits
    
    ### Get Content Gaps
    
    ```
    GET /api/agent/gaps
    ```
    
    - 0 credits (free read)
    
    ### Generate Content Gaps
    
    ```
    POST /api/agent/gaps/generate
    {"competitor_urls": ["https://competitor1.com", "https://competitor2.com"]}
    ```
    
    - 40 credits. Async โ€” poll `GET /api/agent/gaps-status/{id}`
    
    ### Discover Competitors
    
    ```
    POST /api/agent/competitors/discover
    {"keywords": ["ai content marketing", "automated blogging"]}
    ```
    
    - 20 credits
    
    ### Analyze Competitor
    
    ```
    POST /api/agent/competitors/scout
    {"domain": "https://competitor.com", "mode": "fast|ultimate"}
    ```
    
    - `fast` = 25 credits, `ultimate` = 50 credits
    
    ### Generate Article (Autopilot)
    
    ```
    POST /api/agent/autopilot
    {
      "topic": "How to Use AI for Content Marketing",
      "source_urls": ["https://example.com/article"],
      "language": "en",
      "size": "standard",
      "illustrations": true,
      "audio": true,
      "disable_competition": false
    }
    ```
    
    **Required:** either `topic` or `source_urls` (at least one)
    
    **Optional:**
    
    - `topic` โ€” article topic (string, max 500 chars)
    - `source_urls` โ€” array of 1-3 URLs to extract text from and use as source material (2 credits per URL)
    - `size` โ€” `mini` (~500w), `standard` (~1000w, default), `full` (~1500w), `pillar` (~2500w)
    - `language` โ€” ISO code, default `"en"`
    - `illustrations` (bool, default false) โ€” AI-generated images injected into article
    - `audio` (bool, default false) โ€” AI voice-over narration
    - `disable_competition` (bool, default false) โ€” skip SEO competition analysis, saves 8 credits
    
    When `source_urls` is provided, the response includes `extraction_results` showing success/failure per URL.
    
    The response includes `article_url` โ€” always use this URL when sharing the article link. Do NOT construct URLs manually. Articles are auto-published and the URL works immediately.
    
    `/api/agent/me` also returns `blog_url` โ€” the tenant's blog root URL.
    
    Async โ€” poll `GET /api/agent/autopilot/{id}`
    
    ### Extension Costs
    
    | Extension                   | Mini   | Standard | Full   | Pillar  |
    | --------------------------- | ------ | -------- | ------ | ------- |
    | Base article                | 7      | 12       | 25     | 40      |
    | + Intelligence (default on) | +8     | +8       | +8     | +8      |
    | + Illustrations             | +9     | +18      | +27    | +36     |
    | + Audio                     | +10    | +20      | +35    | +55     |
    | **Full package**            | **34** | **58**   | **95** | **139** |
    
    Without extensions: same as before (mini=15, standard=20, full=33, pillar=48 credits).
    
    ### Create Social Adaptations
    
    ```http
    POST /api/agent/adapt
    {
      "article_id": "uuid-of-article",
      "platforms": ["linkedin", "x_thread"],
      "include_ref_link": true
    }
    ```
    
    **Required:** `article_id` (UUID), `platforms` (1-3 unique values)
    
    **Platforms:** `x_article`, `x_thread`, `linkedin`, `facebook`, `reddit`, `threads`, `instagram`
    
    **Optional:**
    
    - `include_ref_link` (bool, default true) โ€” append referral footer to each adaptation
    
    ~5 credits per platform (varies by article length). Max 3 platforms per request.
    
    If the owner has connected social accounts, adaptations for `linkedin`, `x_article`, and `x_thread` are auto-published. The response includes `platform_post_id` for published posts.
    
    Response:
    
    ```json
    {
      "adaptations": [
        {
          "platform": "linkedin",
          "content": "...",
          "credits_used": 5,
          "char_count": 1200,
          "published": true,
          "platform_post_id": "urn:li:share:123"
        }
      ],
      "total_credits": 10,
      "ref_link_appended": true
    }
    ```
    
    ### Create Autopilot Session
    
    ```http
    POST /api/agent/session
    {
      "categories": ["AI marketing", "SEO tools"],
      "problems": ["how to rank higher"],
      "languages": ["en"],
      "interval_minutes": 720,
      "article_size": "mini",
      "disable_competition": false
    }
    ```
    
    **Required:** `categories` (1-5 strings)
    
    **Optional:**
    
    - `problems` โ€” specific problems to address (max 20)
    - `languages` โ€” ISO codes, default `["en"]`
    - `interval_minutes` โ€” cron interval, 60-10080, default 720 (12h)
    - `article_size` โ€” `mini` (default), `standard`, `full`, `pillar`
    - `disable_competition` (bool, default false)
    
    Creates and auto-starts a cron-based content session. Only one active session per tenant.
    
    Response:
    
    ```json
    {
      "session_id": "uuid",
      "status": "running",
      "categories": ["AI marketing", "SEO tools"],
      "languages": ["en"],
      "interval_minutes": 720,
      "article_size": "mini",
      "estimated_credits_per_article": 15,
      "next_run_at": "2025-01-01T12:00:00Z"
    }
    ```
    
    Returns `409 Conflict` with `existing_session_id` if a session is already running.
    
    ### List Articles
    
    ```
    GET /api/agent/articles
    ```
    
    - 0 credits
    
    ### Check Status / Heartbeat
    
    ```
    GET /api/agent/me
    ```
    
    - 0 credits. Call every 4 hours to keep agent active.
    
    Response includes:
    
    - `blog_url` โ€” tenant's blog root URL
    - `tenant_balance` โ€” current credits + status (healthy/low/empty)
    - `rate_limits` โ€” remaining requests per category
    - `referral` โ€” `{ code, url }` for attributing signups
    - `connected_platforms` โ€” which social accounts are linked:
    
    ```json
    {
      "connected_platforms": [
        { "platform": "linkedin", "connected": true, "account_name": "John Doe" },
        { "platform": "x", "connected": false, "account_name": null },
        { "platform": "facebook", "connected": false, "account_name": null }
      ]
    }
    ```
    
    Use `connected_platforms` to decide which platforms to pass to `/api/agent/adapt` for auto-publishing.
    
    ---
    
    ## Workflows
    
    ### Primary: URL โ†’ Article โ†’ Adapt
    
    Turn any web page into an SEO article with social media posts:
    
    ```text
    1. GET /api/agent/me โ†’ get referral URL + connected platforms
    2. POST /api/agent/autopilot { "source_urls": ["https://..."] } โ†’ poll until done โ†’ get article_id
    3. POST /api/agent/adapt { "article_id": "...", "platforms": ["linkedin", "x_thread"], "include_ref_link": true }
    ```
    
    ### Set-and-Forget: Session โ†’ Cron โ†’ Adapt
    
    Automate content generation on a schedule:
    
    ```text
    1. POST /api/agent/session { "categories": ["..."], "interval_minutes": 720 }
    2. Periodically: GET /api/agent/articles โ†’ find new articles
    3. POST /api/agent/adapt for each new article
    ```
    
    ---
    
    ## Examples
    
    ### User sends a link
    
    > User: "Write an article based on this: https://example.com/ai-trends"
    
    1. `POST /api/agent/autopilot` with `{ "source_urls": ["https://example.com/ai-trends"], "size": "mini" }`
    2. Poll `GET /api/agent/autopilot/{id}` until done
    3. `POST /api/agent/adapt` with `{ "article_id": "...", "platforms": ["linkedin", "x_thread"], "include_ref_link": true }`
    
    Reply to user:
    
    > Done! Published "AI Trends Reshaping Content Marketing in 2026" (520 words) โ†’ citedy.com/your-blog/ai-trends-reshaping-content-marketing
    > LinkedIn: posted (5 credits) ยท X thread: posted (5 credits) ยท Total: 27 credits
    
    ### User asks to research and write
    
    > User: "Find trending AI topics on X and write an article about the best one"
    
    1. `POST /api/agent/scout/x` with `{ "query": "AI content marketing", "mode": "fast" }` โ†’ 35 credits
    2. Pick the top trend from results
    3. `POST /api/agent/autopilot` with `{ "topic": "<top trend>", "size": "standard" }`
    4
    
    ... (truncated)