Opik Analytics Instrumentation
comet-ml/opik
Shows how to add product analytics events to Opik's frontend, Java backend and Python SDK, all reporting through Segment to PostHog with an opik_ name prefix.
Compose PostHog grid canvases — widget grids (including the user's home canvas) built from reusable component canvases.
$ npx skills add PostHog/posthog-foss --skill composing-grid-canvases -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install PostHog/posthog-foss composing-grid-canvases --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/PostHog/posthog-foss.git skills-src && mkdir -p .claude/skills && cp -r skills-src/products/canvas/skills/composing-grid-canvases .claude/skills/composing-grid-canvases && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "composing-grid-canvases" agent skill from https://github.com/PostHog/posthog-foss/tree/master/products/canvas/skills/composing-grid-canvases into .claude/skills/composing-grid-canvases/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "composing-grid-canvases", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/PostHog/posthog-foss/tree/master/products/canvas/skills/composing-grid-canvasesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add PostHog/posthog-foss --skill composing-grid-canvases -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install PostHog/posthog-foss composing-grid-canvases --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PostHog/posthog-foss.git skills-src && mkdir -p .agents/skills && cp -r skills-src/products/canvas/skills/composing-grid-canvases .agents/skills/composing-grid-canvases && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "composing-grid-canvases" agent skill from https://github.com/PostHog/posthog-foss/tree/master/products/canvas/skills/composing-grid-canvases into .agents/skills/composing-grid-canvases/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "composing-grid-canvases", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PostHog/posthog-foss --skill composing-grid-canvases -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install PostHog/posthog-foss composing-grid-canvases --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PostHog/posthog-foss.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/products/canvas/skills/composing-grid-canvases .cursor/skills/composing-grid-canvases && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "composing-grid-canvases" agent skill from https://github.com/PostHog/posthog-foss/tree/master/products/canvas/skills/composing-grid-canvases into .cursor/skills/composing-grid-canvases/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "composing-grid-canvases", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/PostHog/posthog-foss.git --path products/canvas/skills/composing-grid-canvases--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add PostHog/posthog-foss --skill composing-grid-canvases -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install PostHog/posthog-foss composing-grid-canvases --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PostHog/posthog-foss.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/products/canvas/skills/composing-grid-canvases .gemini/skills/composing-grid-canvases && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "composing-grid-canvases" agent skill from https://github.com/PostHog/posthog-foss/tree/master/products/canvas/skills/composing-grid-canvases into .gemini/skills/composing-grid-canvases/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "composing-grid-canvases", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install PostHog/posthog-foss composing-grid-canvasesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add PostHog/posthog-foss --skill composing-grid-canvases -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/PostHog/posthog-foss.git skills-src && mkdir -p .github/skills && cp -r skills-src/products/canvas/skills/composing-grid-canvases .github/skills/composing-grid-canvases && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "composing-grid-canvases" agent skill from https://github.com/PostHog/posthog-foss/tree/master/products/canvas/skills/composing-grid-canvases into .github/skills/composing-grid-canvases/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "composing-grid-canvases", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add PostHog/posthog-foss --skill composing-grid-canvases -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install PostHog/posthog-foss composing-grid-canvases --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PostHog/posthog-foss.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/products/canvas/skills/composing-grid-canvases .opencode/skills/composing-grid-canvases && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "composing-grid-canvases" agent skill from https://github.com/PostHog/posthog-foss/tree/master/products/canvas/skills/composing-grid-canvases into .opencode/skills/composing-grid-canvases/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "composing-grid-canvases", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
composing-grid-canvasesCompose PostHog grid canvases — widget grids (including the user's home canvas) built from reusable component canvases.
Composing Grid Canvases is an agent skill from PostHog/posthog-foss, published by the product's own GitHub organization. Compose PostHog grid canvases — widget grids (including the user's home canvas) built from reusable component canvases. Use when a task asks to add, fill, move, resize, or remove a widget on a grid or home canvas, to compose a whole canvas of widgets from one ask, to build a reusable widget/component, or when a placement id or grid canvas id is the target. Covers the component store search → configure → fork → build ladder, the component placement contract (size, configSchema), the placement lifecycle…
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/component-example.md`).
It works with PostHog. The repository describes itself as: PostHog FOSS is a read-only mirror of PostHog, with all proprietary code removed. NOTE: This repo is synced automatically from the main PostHog repo. Please raise any issues and… The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 2c48221. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Composing Grid Canvases loads about 2.1k tokens when it runs, and up to ~3.8k if it reads all its reference files. Until then it costs about 159 tokens; SKILL.md has 1,056 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from PostHog/posthog-foss at commit 2c48221, republished under its MIT licence (© PostHog). 1,056 words, ~2,122 tokens.
.claude/skills/composing-grid-canvases/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.A grid canvas is a composition, not an app: a grid of placements, each rendering a component canvas (a reusable widget with its own source, build, and placement contract). The user's home canvas is an ordinary grid canvas in their personal channel. Layout is data — publishing or patching one is live immediately, with no build.
Three canvas kinds share one lifecycle:
freeform — a standalone app (the building-canvases skill owns these).component — a reusable widget. Same source/build pipeline as freeform, plus a placement
contract. Visibility rides its channel: personal channel = private, team channel = shared.grid — a layout of placements referencing components. No file source; layout only.When a grid placement needs content ("a weather widget here", "a kanban of my tasks"), resolve in this order — placing an existing component beats authoring a duplicate:
canvas-list with kind=component and search=<what the widget shows>.
A component is placeable when both component_meta and published_build_id are set. If its
configSchema can express the request ("weather for Lisbon" → existing weather component with
config: {"location": "Lisbon"}), place and configure it — write no code.canvas-source-retrieve), create a new component (canvas-create with kind=component),
adapt, publish. Name the difference in the new component's description.New components land in the channel you create them in. Create them in the same channel as the grid they serve unless the user asks to share them more widely.
A component is authored exactly like a freeform canvas — load building-react-quill-canvases (or
building-html-canvases) plus querying-canvas-data and validating-and-publishing-canvases —
with three additions. A component that shows PostHog data follows the same verifiability rule as
any canvas: an insight-backed figure links its saved insight, an ad-hoc query exposes the exact
query that ran (see "Verifiability" in querying-canvas-data).
Start from the complete, buildable project in references/component-example.md; its envelope, placement contract, capability declarations, and defensive ph.state access are the parts that break when improvised.
Create with kind=component and a description written for store search: say what the
widget shows and what its config controls. Future placements are found by this text.
Declare the placement contract in the project's top-level component key:
{
"component": {
"size": { "defaultW": 2, "defaultH": 1, "minW": 1, "minH": 1, "maxW": 4 },
"configSchema": {
"type": "object",
"properties": { "location": { "type": "string", "description": "City to show weather for" } }
}
}
}Size is in grid units (widths 1–12, heights 1–40); minW <= defaultW <= maxW. The range is
advisory: users may resize a placement to any size, so it informs defaults and warnings, never
rejections. The config schema
vocabulary is an allowlist — type, title, description, default, properties, required,
additionalProperties, items, enum, const, minimum, maximum, minLength, maxLength,
minItems, maxItems, format. No $ref, no pattern — validation rejects them.
Design responsively. Give the component's root min-h-screen so it fills the placement iframe's viewport and grows past it as content demands.
Adapt the layout to any size the user drags: a 2×1 placement is a glanceable tile; a 6×4 is a full app surface.
Do not use h-screen on the root: a fixed viewport height caps a flex column, so tall children shrink and clip instead of scrolling.
Do not use h-full on the root either: a published component's artifact shell gives its html, body, and #root elements no explicit height, so height: 100% collapses to the content height.
Render usefully at minW×minH, and treat config as the only per-placement input.
Publish and wait for the build like any canvas — a component with no ready build cannot go live on a grid.
A whole-canvas ask ("a home canvas that summarizes my work in progress") usually means several widgets, not one. Plan the full set first — one placement per concern — then resolve each with the ladder above. Lay them out together: no overlaps, sizes matched to what each widget shows, the grid filled deliberately rather than tiles scattered in a corner. Batch the layout writes (one publish for an initial layout, surgical patches after) instead of one write per widget, and finish with every placement live or failed — never generating.
Users leave feedback as comment threads on the canvas.
List them with the task comment tools (tasks-comments-list, tasks-comments-retrieve) on your task before and after changing the canvas, and address the open ones — a comment naming a broken widget is your brief for fixing it.
The loop is read → patch, guarded exactly as validating-and-publishing-canvases describes for
source publishes — with canvas-layout-get in place of canvas-source-retrieve, and
canvas-layout-patch (surgical ops, guard required) or canvas-layout-publish (complete
document, for an initial layout or full restructure) as the write. On a 409, re-read the layout,
re-apply your change, and patch again.
Operations:
add_placement — a new box: {id, status, x, y, w, h, ...}. Placements must not overlap or
extend past grid.columns.update_placement — merge changes into the placement with id. Filling a drawn box is
{"op": "update_placement", "id": "p1", "changes": {"status": "live", "component": "<component canvas id>", "config": {...}}}.remove_placement, set_grid.A placement's status tells the renderer what to show:
pending — the user drew a box but hasn't described it (or the prompt awaits dispatch).generating — an agent task is filling it; generationTaskId links the task and prompt
records the ask. Set this when you start working on a placement from a task.live — renders its component at version ("latest" by default; a pinned version id is
allowed). Requires the component to be published and visible to the acting user.failed — generation failed; keep the prompt so the user can retry or re-describe.When a task asks you to fill a placement, its prompt and the box's size are your brief: honor the
drawn w×h and keep the placement's prompt
intact for provenance.
Layout publishes validate atomically; every error names its placement. The common ones:
component_not_found — the id is wrong, deleted, not a component, or not visible to the acting
user (a component in someone else's personal channel is not placeable).component_not_published — the component has never published a placement contract.placement_config_invalid — config does not match the component's configSchema.placement_size_out_of_contract — a warning, not an error: the box's w/h is outside the
component's suggested range. The publish still succeeds; the component must render responsively.placements_overlap / invalid_placement — geometry; fix coordinates rather than removing the
other widget.End your reply by linking the grid canvas with the url field the canvas tools return — never
construct a canvas URL yourself.
© PostHog, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in products/canvas/skills/composing-grid-canvases of PostHog/posthog-foss.
Open the folder on GitHubat commit 2c48221
Composing Grid Canvases next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Composing Grid Canvases this skillPostHog/posthog-foss | 721 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Opik Analytics Instrumentationcomet-ml/opik | 22k | — | ~4.4k | Automated safety check: Pass | Apache-2.0 | |
| C15tc15t/c15t | 1.9k | 1 repos | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Define Feature Flagmacro-inc/macro | 4.6k | — | ~780 | Automated safety check: Pass | AGPL-3.0 | |
| Soku CLIAbout-Intelligence/soku-cli | 304 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Compare Array Bundle SizePostHog/posthog-js | 613 | — | ~599 | Automated safety check: Pass | Custom licence |
comet-ml/opik
Shows how to add product analytics events to Opik's frontend, Java backend and Python SDK, all reporting through Segment to PostHog with an opik_ name prefix.
c15t/c15t
Work with c15t consent management docs, APIs, and integrations for Next.js, React, and JavaScript.
macro-inc/macro
Define a frontend feature flag with defineFlag and wire its readers.
About-Intelligence/soku-cli
Guides an agent through the soku command line tool for ads, GA4 and PostHog data reads, ads writes, SEO hosting, automations, files and skill management.
PostHog/posthog-js
Quickly compare the posthog-js array.js bundle size in the current working tree against a git baseline using the repository's esbuild proxy.
OpenHands/OpenHands
This skill should be used when the user asks to "add tracking", "add a PostHog event", "change telemetry consent", "instrument onboarding", "debug analytics", or changes telemetry.ts…
PostHog/posthog-foss
Author useful, low-noise log alerts on services in a PostHog project.
PostHog/posthog-foss
Operating procedure for the conflict-autoresolver agent: sweep open PostHog/posthog PRs that conflict with master, resolve the trivial conflicts (generated artifacts deterministically, source…
PostHog/posthog-foss
Help users debug PostHog Error Tracking stack-trace symbolication for any supported platform — JavaScript/TypeScript web, React Native (Hermes), Android (Proguard / R8), or iOS / macOS (dSYM).
PostHog/posthog-foss
Investigates distributed application performance using PostHog APM (OpenTelemetry span) data via MCP.
PostHog/posthog-foss
Debug and inspect LLM/AI agent traces using PostHog's MCP tools.
PostHog/posthog-foss
Diagnose why a product metric changed (dropped, spiked, or plateaued) by orchestrating breakdowns, actors, paths, lifecycle, retention, and annotations queries.
Works with
Compose PostHog grid canvases — widget grids (including the user's home canvas) built from reusable component canvases. Composing Grid Canvases is an agent skill from PostHog/posthog-foss, published by the product's own GitHub organization. Compose PostHog grid canvases — widget grids (including the user's home canvas) built from reusable component canvases.
Composing Grid Canvases fits situations like: A task asks to add; remove a widget on a grid; compose a whole canvas of widgets from one ask; build a reusable widget/component.
Run `npx skills add PostHog/posthog-foss --skill composing-grid-canvases -a claude-code`. Or copy the skill folder (products/canvas/skills/composing-grid-canvases in PostHog/posthog-foss) into .claude/skills/composing-grid-canvases in your project. Claude Code loads it when a task matches its description.
Run `npx skills add PostHog/posthog-foss --skill composing-grid-canvases -a codex`. Or copy the skill folder (products/canvas/skills/composing-grid-canvases in PostHog/posthog-foss) into .agents/skills/composing-grid-canvases in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add PostHog/posthog-foss --skill composing-grid-canvases -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/composing-grid-canvases, .gemini/skills/composing-grid-canvases, .github/skills/composing-grid-canvases and .opencode/skills/composing-grid-canvases in your project.
SKILL.md names no scripts, command-line tools or credentials: Composing Grid Canvases is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Composing Grid Canvases is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Composing Grid Canvases: Opik Analytics Instrumentation (comet-ml/opik, 22k stars), C15t (c15t/c15t, 1.9k stars), Define Feature Flag (macro-inc/macro, 4.6k stars) and Soku CLI (About-Intelligence/soku-cli, 304 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
PostHog (a GitHub organization, an official publisher) maintains it in PostHog/posthog-foss, which has 721 GitHub stars. The repository holds 213 skills in this directory. The repository was last updated on October 7, 2026.
Source: PostHog/posthog-foss on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.