{
  "schemaVersion": "1.0",
  "item": {
    "slug": "umami",
    "name": "Umami",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/ivangdavila/umami",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/umami",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/umami",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=umami",
    "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-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/umami"
    },
    "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/umami",
    "agentPageUrl": "https://openagent3.xyz/skills/umami/agent",
    "manifestUrl": "https://openagent3.xyz/skills/umami/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/umami/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": "Critical Configuration",
        "body": "HASH_SALT must never change — changing it invalidates all existing data, essentially a reset\nSQLite is not supported — despite being Node.js, Umami requires PostgreSQL or MySQL\nDatabase contains everything — all tracking data, config, users; backup only this"
      },
      {
        "title": "Tracking Script Traps",
        "body": "data-website-id must match Umami config exactly — wrong ID = zero data, no error shown\nScript blocked by ad blockers — self-host on same domain as site to avoid blocking\nSingle Page Apps don't auto-track navigation — must call umami.track() on route changes\nScript in <head> not <body> — late loading misses initial pageview"
      },
      {
        "title": "SPA Integration",
        "body": "React: call umami.track('pageview') in router effect or navigation handler\nNext.js: use @umami/next package — handles app router and pages router\nVue/Nuxt: router afterEach hook with umami.track()\nCheck window.umami exists before calling — script may load after component mounts"
      },
      {
        "title": "Custom Events",
        "body": "Event names appear verbatim in dashboard — use consistent naming scheme\nProperties only searchable via API — not visible in default dashboard\numami.track('event', { key: 'value' }) for properties"
      },
      {
        "title": "Self-Hosting Considerations",
        "body": "Low resources needed — 256MB RAM handles most sites\nPostgreSQL needs more resources than Umami itself — plan accordingly\nReverse proxy required for HTTPS — Umami runs HTTP on port 3000\nBackup strategy = database backup — no filesystem state to worry about"
      },
      {
        "title": "Multi-Site Setup",
        "body": "One Umami instance handles many sites — add in Dashboard > Settings > Websites\nEach site needs unique tracking script — get from Websites settings\nShare button available per site — generates public dashboard URL"
      },
      {
        "title": "Troubleshooting",
        "body": "Zero pageviews — check browser Network tab, verify script loads without error\nScript 404 — verify CORS headers if cross-domain, or self-host on same domain\nEvents not appearing — check browser console for umami errors\nDashboard slow — check database performance, PostgreSQL query times"
      },
      {
        "title": "Common Mistakes",
        "body": "Using same website ID for dev and prod — pollutes analytics with test data\nNot testing script after deploy — CDN caching or minification can break it\nExpecting real-time updates — dashboard has slight delay, not instant"
      }
    ],
    "body": "Critical Configuration\nHASH_SALT must never change — changing it invalidates all existing data, essentially a reset\nSQLite is not supported — despite being Node.js, Umami requires PostgreSQL or MySQL\nDatabase contains everything — all tracking data, config, users; backup only this\nTracking Script Traps\ndata-website-id must match Umami config exactly — wrong ID = zero data, no error shown\nScript blocked by ad blockers — self-host on same domain as site to avoid blocking\nSingle Page Apps don't auto-track navigation — must call umami.track() on route changes\nScript in <head> not <body> — late loading misses initial pageview\nSPA Integration\nReact: call umami.track('pageview') in router effect or navigation handler\nNext.js: use @umami/next package — handles app router and pages router\nVue/Nuxt: router afterEach hook with umami.track()\nCheck window.umami exists before calling — script may load after component mounts\nCustom Events\nEvent names appear verbatim in dashboard — use consistent naming scheme\nProperties only searchable via API — not visible in default dashboard\numami.track('event', { key: 'value' }) for properties\nSelf-Hosting Considerations\nLow resources needed — 256MB RAM handles most sites\nPostgreSQL needs more resources than Umami itself — plan accordingly\nReverse proxy required for HTTPS — Umami runs HTTP on port 3000\nBackup strategy = database backup — no filesystem state to worry about\nMulti-Site Setup\nOne Umami instance handles many sites — add in Dashboard > Settings > Websites\nEach site needs unique tracking script — get from Websites settings\nShare button available per site — generates public dashboard URL\nTroubleshooting\nZero pageviews — check browser Network tab, verify script loads without error\nScript 404 — verify CORS headers if cross-domain, or self-host on same domain\nEvents not appearing — check browser console for umami errors\nDashboard slow — check database performance, PostgreSQL query times\nCommon Mistakes\nUsing same website ID for dev and prod — pollutes analytics with test data\nNot testing script after deploy — CDN caching or minification can break it\nExpecting real-time updates — dashboard has slight delay, not instant"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/umami",
    "publisherUrl": "https://clawhub.ai/ivangdavila/umami",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/umami",
    "downloadUrl": "https://openagent3.xyz/downloads/umami",
    "agentUrl": "https://openagent3.xyz/skills/umami/agent",
    "manifestUrl": "https://openagent3.xyz/skills/umami/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/umami/agent.md"
  }
}