{
  "schemaVersion": "1.0",
  "item": {
    "slug": "traefik",
    "name": "Traefik",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ivangdavila/traefik",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/traefik",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/traefik",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=traefik",
    "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",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/traefik"
    },
    "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/traefik",
    "agentPageUrl": "https://openagent3.xyz/skills/traefik/agent",
    "manifestUrl": "https://openagent3.xyz/skills/traefik/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/traefik/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": "Router Basics",
        "body": "Router must have rule AND service — missing either = not working\nRule priority: longer rules win by default — explicit priority to override\nHost() is case-insensitive — Host(\\example.com`)` matches Example.com\nMultiple hosts: Host(\\a.com`) || Host(`b.com`)` — OR logic"
      },
      {
        "title": "Docker Labels Syntax",
        "body": "Labels on container, not compose service level — deploy.labels for Swarm\nBackticks for rules in Docker Compose — Host(\\example.com`)` with escaping\nEnable per-container: traefik.enable=true — if exposedByDefault=false\nService name auto-generated from container — or set explicitly with traefik.http.services.myservice.loadbalancer.server.port=80"
      },
      {
        "title": "TLS and Certificates",
        "body": "EntryPoint websecure needs TLS config — otherwise plain HTTP on 443\nLet's Encrypt: certificatesResolvers.myresolver.acme.email required — registration fails without\nHTTP challenge needs port 80 open — DNS challenge for wildcard or closed 80\ntls=true on router activates TLS — tls.certresolver=myresolver for auto-cert\nStaging ACME for testing — caServer to staging URL, avoids rate limits"
      },
      {
        "title": "EntryPoints",
        "body": "Define in static config — --entrypoints.web.address=:80\nRedirect HTTP to HTTPS at entrypoint level — cleaner than per-router middleware\nRouter binds to entrypoint with entryPoints=web,websecure — comma-separated list"
      },
      {
        "title": "Middlewares",
        "body": "Chain order matters — first middleware wraps all following\nMiddleware defined once, used by many routers — middlewares=auth,compress\nCommon: stripPrefix, redirectScheme, basicAuth, rateLimit\nBasicAuth: use htpasswd format — escape $ in Docker Compose with $$"
      },
      {
        "title": "Service Configuration",
        "body": "loadbalancer.server.port when container exposes multiple — Traefik can't guess\nHealth check: healthcheck.path=/health — removes unhealthy from rotation\nSticky sessions: loadbalancer.sticky.cookie.name=srv_id — for stateful apps"
      },
      {
        "title": "Common Mistakes",
        "body": "Router without entryPoint — defaults may not be what you expect\nForgetting traefik.docker.network with multiple networks — Traefik picks wrong one\nACME storage not persisted — certificates regenerated, hits rate limit\nDashboard exposed without auth — api.insecure=true is dangerous in production\nPathPrefix without StripPrefix — backend receives full path, may 404\nServices on different ports — each needs explicit port label"
      },
      {
        "title": "File Provider",
        "body": "watch=true for hot reload — otherwise restart Traefik on changes\nCan coexist with Docker provider — useful for external services\nDefine routers, services, middlewares in YAML — same concepts as labels"
      },
      {
        "title": "Debugging",
        "body": "--log.level=DEBUG for troubleshooting — verbose but helpful\nDashboard shows routers, services, middlewares — verify configuration\n--api.insecure=true for local dev only — secure with auth in production"
      }
    ],
    "body": "Router Basics\nRouter must have rule AND service — missing either = not working\nRule priority: longer rules win by default — explicit priority to override\nHost() is case-insensitive — Host(\\example.com`)` matches Example.com\nMultiple hosts: Host(\\a.com`) || Host(`b.com`)` — OR logic\nDocker Labels Syntax\nLabels on container, not compose service level — deploy.labels for Swarm\nBackticks for rules in Docker Compose — Host(\\example.com`)` with escaping\nEnable per-container: traefik.enable=true — if exposedByDefault=false\nService name auto-generated from container — or set explicitly with traefik.http.services.myservice.loadbalancer.server.port=80\nTLS and Certificates\nEntryPoint websecure needs TLS config — otherwise plain HTTP on 443\nLet's Encrypt: certificatesResolvers.myresolver.acme.email required — registration fails without\nHTTP challenge needs port 80 open — DNS challenge for wildcard or closed 80\ntls=true on router activates TLS — tls.certresolver=myresolver for auto-cert\nStaging ACME for testing — caServer to staging URL, avoids rate limits\nEntryPoints\nDefine in static config — --entrypoints.web.address=:80\nRedirect HTTP to HTTPS at entrypoint level — cleaner than per-router middleware\nRouter binds to entrypoint with entryPoints=web,websecure — comma-separated list\nMiddlewares\nChain order matters — first middleware wraps all following\nMiddleware defined once, used by many routers — middlewares=auth,compress\nCommon: stripPrefix, redirectScheme, basicAuth, rateLimit\nBasicAuth: use htpasswd format — escape $ in Docker Compose with $$\nService Configuration\nloadbalancer.server.port when container exposes multiple — Traefik can't guess\nHealth check: healthcheck.path=/health — removes unhealthy from rotation\nSticky sessions: loadbalancer.sticky.cookie.name=srv_id — for stateful apps\nCommon Mistakes\nRouter without entryPoint — defaults may not be what you expect\nForgetting traefik.docker.network with multiple networks — Traefik picks wrong one\nACME storage not persisted — certificates regenerated, hits rate limit\nDashboard exposed without auth — api.insecure=true is dangerous in production\nPathPrefix without StripPrefix — backend receives full path, may 404\nServices on different ports — each needs explicit port label\nFile Provider\nwatch=true for hot reload — otherwise restart Traefik on changes\nCan coexist with Docker provider — useful for external services\nDefine routers, services, middlewares in YAML — same concepts as labels\nDebugging\n--log.level=DEBUG for troubleshooting — verbose but helpful\nDashboard shows routers, services, middlewares — verify configuration\n--api.insecure=true for local dev only — secure with auth in production"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/traefik",
    "publisherUrl": "https://clawhub.ai/ivangdavila/traefik",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/traefik",
    "downloadUrl": "https://openagent3.xyz/downloads/traefik",
    "agentUrl": "https://openagent3.xyz/skills/traefik/agent",
    "manifestUrl": "https://openagent3.xyz/skills/traefik/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/traefik/agent.md"
  }
}