[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7343AXMPSPDHA4AMXEJPM9R":3,"skill-same:01M7343AXMPSPDHA4AMXEJPM9R":44},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":29,"install":30,"resources":43},"01M7343AXMPSPDHA4AMXEJPM9R","posthog-provisioning-and-query",null,"Use when provisioning or reading PostHog analytics via its API — creating a project, wiring the browser SDK, or querying metrics\u002Ffunnels with HogQL. Covers the org→project model, the two key types (personal vs project-public), the ingestion-vs-management host split, and how to avoid creating a redundant project when one already exists. Triggers include \"set up PostHog\", \"create a PostHog project\", \"track events in PostHog\", \"read PostHog analytics\", \"PostHog funnel\", \"provision analytics\".","LiamVisionary\u002Fhivemindos","LiamVisionary","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F102138294?v=4","01M73379NZZ99TT4ZS17XR3Q9D","01M73379PX6AKQNWN05VNSYRXW",13,"MIT","https:\u002F\u002Fgithub.com\u002FLiamVisionary\u002Fhivemindos\u002Fblob\u002Fmain\u002Fpackaged-skills\u002Foptional\u002Fgtm\u002Fhivemindos\u002Fposthog-provisioning-and-query\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: posthog-provisioning-and-query\ndescription: Use when provisioning or reading PostHog analytics via its API — creating a project, wiring the browser SDK, or querying metrics\u002Ffunnels with HogQL. Covers the org→project model, the two key types (personal vs project-public), the ingestion-vs-management host split, and how to avoid creating a redundant project when one already exists. Triggers include \"set up PostHog\", \"create a PostHog project\", \"track events in PostHog\", \"read PostHog analytics\", \"PostHog funnel\", \"provision analytics\".\n---\n\n# PostHog Provisioning & Query\n\nProvision and read PostHog entirely over its REST API. Verified against PostHog Cloud (2026-07).\n\n## The model (get these straight first)\n\n- **Account → Organization(s) → Project(s).** A project (a.k.a. \"team\") is the isolation unit — one project per site\u002Fapp\u002Ffunnel. Orgs are the billing\u002Fteam boundary; you rarely need a new org, usually a new **project**.\n- **Two key types, do not confuse them:**\n  - **Personal API key** (`phx_…`, secret) — used server-side for the **management API** and **HogQL queries**, with `Authorization: Bearer \u003Ckey>`. Scope it (`query:read`, `project:read`) for least privilege; a broad \"management\" key also works but is overpowered for read-only query use.\n  - **Project API key** (`phc_…`, PUBLIC) — the browser SDK key, safe to ship to clients as `NEXT_PUBLIC_POSTHOG_KEY`.\n- **Host split:** browser **ingestion** host is `https:\u002F\u002Fus.i.posthog.com` (EU: `eu.i.posthog.com`); the **management\u002Fquery** host is `https:\u002F\u002Fus.posthog.com` (EU: `eu.posthog.com`). Using the wrong one is a common silent failure.\n\n## ALWAYS check for an existing project first\n\nBefore creating anything, look at where the app already sends events (its `NEXT_PUBLIC_POSTHOG_KEY` \u002F `POSTHOG_PROJECT_ID` in the host's env). Many sites already have a project — creating a second one splits analytics and leaves a confusing empty project. List what a key can see:\n\n```bash\ncurl -s https:\u002F\u002Fus.posthog.com\u002Fapi\u002Forganizations\u002F -H \"Authorization: Bearer $POSTHOG_PERSONAL_API_KEY\" \\\n  | jq '.results[] | {id, name, teams: [.teams[] | {project_id, api_token, name}]}'\n```\n\nIf a suitable project exists, reuse it (segment a new funnel by event name, not a new project).\n\n## Create a project (only if none fits)\n\n```bash\nORG=\u003Corganization_id>   # from the list above\ncurl -s -X POST \"https:\u002F\u002Fus.posthog.com\u002Fapi\u002Forganizations\u002F$ORG\u002Fprojects\u002F\" \\\n  -H \"Authorization: Bearer $POSTHOG_PERSONAL_API_KEY\" -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"name\":\"My Project\"}'\n# response → { \"id\": \u003Cnumeric project id>, \"api_token\": \"phc_…\" (public browser key), ... }\n```\n\nSet `NEXT_PUBLIC_POSTHOG_KEY = \u003Capi_token>`, `POSTHOG_PROJECT_ID = \u003Cid>`, `NEXT_PUBLIC_POSTHOG_HOST = https:\u002F\u002Fus.i.posthog.com` in the host env (build-time for `NEXT_PUBLIC_*`).\n\n## Browser tracking\n\nInitialize the SDK only if the key is present; capture pageviews manually on route change if the router doesn't. Emit a stable event contract you can query later, e.g. `offer_viewed`, `offer_checkout_started`, `cta_clicked {location,label,href}`, `paid`. Server components can't use the browser SDK — fire a client \"ping\" component for view events, and count server-side metrics in your own store.\n\n## Read metrics with HogQL\n\n```ts\n\u002F\u002F POST {mgmtHost}\u002Fapi\u002Fprojects\u002F{projectId}\u002Fquery\u002F  — Bearer personal key, scope query:read\nconst res = await fetch(`https:\u002F\u002Fus.posthog.com\u002Fapi\u002Fprojects\u002F${projectId}\u002Fquery\u002F`, {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${personalKey}`, \"Content-Type\": \"application\u002Fjson\" },\n  body: JSON.stringify({ query: { kind: \"HogQLQuery\",\n    query: `SELECT count() AS events, count(DISTINCT person_id) AS visitors\n            FROM events WHERE timestamp > now() - INTERVAL ${days} DAY` } }),\n});\n\u002F\u002F runs synchronously (blocking is the default; no async polling).\n\u002F\u002F response → { results: any[][], columns, types }  — results[0] = [events, visitors]\n```\n\n`person_id` is the standard unique-users column on the `events` table. Both `\u002Fapi\u002Fprojects\u002F{id}\u002F` and `\u002Fapi\u002Fenvironments\u002F{id}\u002F` work; prefer `projects` for compatibility with older self-hosted instances. Bound the request with a timeout and surface PostHog's error message on non-2xx.\n\n## Optional: create a funnel insight\n\n`POST \u002Fapi\u002Fprojects\u002F{id}\u002Finsights\u002F` with a funnel spec (steps `offer_view → checkout_started → paid`). Best-effort — never abort provisioning if it fails.\n\n## Safety\n\n- Treat the personal\u002Fmanagement key as a secret — write it to the host env, never print or commit it.\n- The `phc_` project key is public by design (it's in the browser bundle) — don't treat a leak of it as a secret incident, but don't reuse it as a personal key.\n- Verify a key with a cheap read (`GET \u002Fapi\u002Forganizations\u002F`) before relying on it; confirm it can query the specific project id you'll use.\n","# PostHog Provisioning & Query\n\nProvision and read PostHog entirely over its REST API. Verified against PostHog Cloud (2026-07).\n\n## The model (get these straight first)\n\n- **Account → Organization(s) → Project(s).** A project (a.k.a. \"team\") is the isolation unit — one project per site\u002Fapp\u002Ffunnel. Orgs are the billing\u002Fteam boundary; you rarely need a new org, usually a new **project**.\n- **Two key types, do not confuse them:**\n  - **Personal API key** (`phx_…`, secret) — used server-side for the **management API** and **HogQL queries**, with `Authorization: Bearer \u003Ckey>`. Scope it (`query:read`, `project:read`) for least privilege; a broad \"management\" key also works but is overpowered for read-only query use.\n  - **Project API key** (`phc_…`, PUBLIC) — the browser SDK key, safe to ship to clients as `NEXT_PUBLIC_POSTHOG_KEY`.\n- **Host split:** browser **ingestion** host is `https:\u002F\u002Fus.i.posthog.com` (EU: `eu.i.posthog.com`); the **management\u002Fquery** host is `https:\u002F\u002Fus.posthog.com` (EU: `eu.posthog.com`). Using the wrong one is a common silent failure.\n\n## ALWAYS check for an existing project first\n\nBefore creating anything, look at where the app already sends events (its `NEXT_PUBLIC_POSTHOG_KEY` \u002F `POSTHOG_PROJECT_ID` in the host's env). Many sites already have a project — creating a second one splits analytics and leaves a confusing empty project. List what a key can see:\n\n```bash\ncurl -s https:\u002F\u002Fus.posthog.com\u002Fapi\u002Forganizations\u002F -H \"Authorization: Bearer $POSTHOG_PERSONAL_API_KEY\" \\\n  | jq '.results[] | {id, name, teams: [.teams[] | {project_id, api_token, name}]}'\n```\n\nIf a suitable project exists, reuse it (segment a new funnel by event name, not a new project).\n\n## Create a project (only if none fits)\n\n```bash\nORG=\u003Corganization_id>   # from the list above\ncurl -s -X POST \"https:\u002F\u002Fus.posthog.com\u002Fapi\u002Forganizations\u002F$ORG\u002Fprojects\u002F\" \\\n  -H \"Authorization: Bearer $POSTHOG_PERSONAL_API_KEY\" -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"name\":\"My Project\"}'\n# response → { \"id\": \u003Cnumeric project id>, \"api_token\": \"phc_…\" (public browser key), ... }\n```\n\nSet `NEXT_PUBLIC_POSTHOG_KEY = \u003Capi_token>`, `POSTHOG_PROJECT_ID = \u003Cid>`, `NEXT_PUBLIC_POSTHOG_HOST = https:\u002F\u002Fus.i.posthog.com` in the host env (build-time for `NEXT_PUBLIC_*`).\n\n## Browser tracking\n\nInitialize the SDK only if the key is present; capture pageviews manually on route change if the router doesn't. Emit a stable event contract you can query later, e.g. `offer_viewed`, `offer_checkout_started`, `cta_clicked {location,label,href}`, `paid`. Server components can't use the browser SDK — fire a client \"ping\" component for view events, and count server-side metrics in your own store.\n\n## Read metrics with HogQL\n\n```ts\n\u002F\u002F POST {mgmtHost}\u002Fapi\u002Fprojects\u002F{projectId}\u002Fquery\u002F  — Bearer personal key, scope query:read\nconst res = await fetch(`https:\u002F\u002Fus.posthog.com\u002Fapi\u002Fprojects\u002F${projectId}\u002Fquery\u002F`, {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${personalKey}`, \"Content-Type\": \"application\u002Fjson\" },\n  body: JSON.stringify({ query: { kind: \"HogQLQuery\",\n    query: `SELECT count() AS events, count(DISTINCT person_id) AS visitors\n            FROM events WHERE timestamp > now() - INTERVAL ${days} DAY` } }),\n});\n\u002F\u002F runs synchronously (blocking is the default; no async polling).\n\u002F\u002F response → { results: any[][], columns, types }  — results[0] = [events, visitors]\n```\n\n`person_id` is the standard unique-users column on the `events` table. Both `\u002Fapi\u002Fprojects\u002F{id}\u002F` and `\u002Fapi\u002Fenvironments\u002F{id}\u002F` work; prefer `projects` for compatibility with older self-hosted instances. Bound the request with a timeout and surface PostHog's error message on non-2xx.\n\n## Optional: create a funnel insight\n\n`POST \u002Fapi\u002Fprojects\u002F{id}\u002Finsights\u002F` with a funnel spec (steps `offer_view → checkout_started → paid`). Best-effort — never abort provisioning if it fails.\n\n## Safety\n\n- Treat the personal\u002Fmanagement key as a secret — write it to the host env, never print or commit it.\n- The `phc_` project key is public by design (it's in the browser bundle) — don't treat a leak of it as a secret incident, but don't reuse it as a personal key.\n- Verify a key with a cheap read (`GET \u002Fapi\u002Forganizations\u002F`) before relying on it; confirm it can query the specific project id you'll use.\n",{"name":5,"description":7},"main","f270c4ae4f9d09c4e5da9cfa8adab7e89ae1f53e","packaged-skills\u002Foptional\u002Fgtm\u002Fhivemindos\u002Fposthog-provisioning-and-query",4,"https:\u002F\u002Fgithub.com\u002FLiamVisionary\u002Fhivemindos","https:\u002F\u002Fgithub.com\u002FLiamVisionary","2026-11-10 21:48:41",{"source":8,"skillName":5,"commands":31,"prompt":41,"zipAvailable":42},[32,35,38],{"tool":33,"command":34},"npx","npx skills add LiamVisionary\u002Fhivemindos --skill posthog-provisioning-and-query",{"tool":36,"command":37},"bunx","bunx skills add LiamVisionary\u002Fhivemindos --skill posthog-provisioning-and-query",{"tool":39,"command":40},"pnpm","pnpm dlx skills add LiamVisionary\u002Fhivemindos --skill posthog-provisioning-and-query","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FLiamVisionary\u002Fhivemindos\u002Fblob\u002Fmain\u002Fpackaged-skills\u002Foptional\u002Fgtm\u002Fhivemindos\u002Fposthog-provisioning-and-query\u002FSKILL.md",true,[],[45,52,59,66,73,80],{"skillNo":46,"name":47,"nameZh":6,"description":48,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":51,"publishedAt":18},"01M734AA85KQEXDQXQJ3T7769M","tailscale-generation-skill-authoring","This skill should be used when the user asks to \"create a Tailscale generation skill\", \"add a local generation skill\", \"document a generation endpoint\", \"add an image generation provider\", \"add a TTS provider\", \"add video generation\", \"add 3D generation\", or needs guidance on where HivemindOS Tailscale or local generation providers belong in the shared skills shelf.","https:\u002F\u002Fgithub.com\u002FLiamVisionary\u002Fhivemindos\u002Fblob\u002Fmain\u002Fskills\u002Ftailscale-generation-skill-authoring\u002FSKILL.md",[],[],{"skillNo":53,"name":54,"nameZh":6,"description":55,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":18},"01M734A7VD69PRA0C0EV5EFY9T","localtts","This skill should be used when the user asks to \"generate local TTS\", \"use local text to speech\", \"use remote TTS over Tailscale\", \"make speech audio\", \"add a TTS provider\", \"use Qwen3-TTS\", or needs TTS endpoint setup through local or HivemindOS Tailscale routes.","https:\u002F\u002Fgithub.com\u002FLiamVisionary\u002Fhivemindos\u002Fblob\u002Fmain\u002Fskills\u002Flocaltts\u002FSKILL.md",[],[],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":18},"01M734A4K2Z0F74QZP7V7WBFRY","karpathy-guidelines","Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid overcomplication, make surgical changes, surface assumptions, and define verifiable success criteria.","https:\u002F\u002Fgithub.com\u002FLiamVisionary\u002Fhivemindos\u002Fblob\u002Fmain\u002Fskills\u002Fkarpathy-guidelines\u002FSKILL.md",[],[],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":18},"01M734A1HMVYVJX3YJGNQ6KF6C","comfyui-image-generation","This skill should be used when the user asks to \"generate images\", \"generate images with ComfyUI\", \"use local ComfyUI\", \"use remote ComfyUI\", \"use Z-Image\", \"add an image generation provider\", or needs image-generation endpoint setup through local or HivemindOS Tailscale routes.","https:\u002F\u002Fgithub.com\u002FLiamVisionary\u002Fhivemindos\u002Fblob\u002Fmain\u002Fskills\u002Fcomfyui-image-generation\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":18},"01M7349Y684Q676DNNHZPSC8W1","wrangler","Cloudflare Workers CLI for deploying, developing, and managing Workers, KV, R2, D1, Vectorize, Hyperdrive, Workers AI, Containers, Queues, Workflows, Pipelines, and Secrets Store. Load before running wrangler commands to ensure correct syntax and best practices. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.","https:\u002F\u002Fgithub.com\u002FLiamVisionary\u002Fhivemindos\u002Fblob\u002Fmain\u002Fskills\u002Fcloudflare\u002Fwrangler\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":18},"01M7349V3WCBF835QP74SA9Q8C","workers-best-practices","Reviews and authors Cloudflare Workers code against production best practices. Load when writing new Workers, reviewing Worker code, configuring wrangler.jsonc, or checking for common Workers anti-patterns (streaming, floating promises, global state, secrets, bindings, observability). Biases towards retrieval from Cloudflare docs over pre-trained knowledge.","https:\u002F\u002Fgithub.com\u002FLiamVisionary\u002Fhivemindos\u002Fblob\u002Fmain\u002Fskills\u002Fcloudflare\u002Fworkers-best-practices\u002FSKILL.md",[],[]]