Working With Skills
PostHogOfficialPublished by PostHog
- Skill
- Guidelines
- Agent tooling
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a comprehensive guide for agents on how to interact with PostHog skills via MCP tools. It establishes operational principles for efficient skill management, including progressive disclosure, choosing the correct write primitives, and maintaining version control. The guide covers the full lifecycle of a skill, from discovery and reading large multi-file structures to authoring, updating, and archiving, while emphasizing patterns for using skills as shared, versioned memory for agents.
What it does
- Defines operational principles for minimizing context and round-trips when using skill tools.
- Provides a decision tree for selecting the appropriate tool for reading, creating, or updating skills.
- Outlines best practices for authoring skills, including file layout and metadata conventions.
- Explains how to perform incremental updates to bodies and bundled files to maintain clean version history.
- Details strategies for handling large skills with many bundled files through lazy loading.
- Describes common patterns for using skills, such as project hubs, runbooks, and ownership catalogs.
When to use it
- When you need to discover, read, create, update, or refactor a PostHog skill.
- When troubleshooting why a skill write operation was rejected.
- When you are asked to shape a skill for use as a project hub, runbook, or catalog.
- Before calling any skill-related MCP tool to ensure the most efficient approach.
Advantages
- Reduces unnecessary context loading by promoting progressive disclosure.
- Minimizes version history clutter by using targeted edit primitives.
- Ensures concurrency safety by correctly managing base_version.
- Provides a standardized approach to skill structure and file organization.
Usage examples
- “How should I update a single file within a large PostHog skill?”
- The agent will recommend using skill-update with the file_edits parameter, targeting only the specific file and lines needing change, while passing the correct base_version.
- “I need to create a new skill for tracking project status. What is the best way to do this?”
- The agent will guide you to use skill-create in a single call, including the body and all initial files, following the project hub pattern.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/posthog/working-with-skills/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip working-with-skills.zip -d .agents/skills
Documentation by PostHog
Working with PostHog skills
This skill teaches agents how to use the skill-* MCP tools well — minimum
context, minimum round-trips, minimum mistakes. If you are not yet familiar with
the tool surface itself, read the skills-store skill first for the catalog.
This document is about how to choose between the tools and how to scale the
workflow when skills get big.
Operating principles
Progressive disclosure is non-negotiable. Lists return descriptions, get returns body + manifest, file-get returns one file. Never preload bundled files "just in case" — every preloaded script is wasted context for the actual task.
Pick the smallest write primitive that does the job. A targeted
editsorfile_editsis cheaper, safer, and clearer in version history than a full body or full bundle replacement.Reads are cheap; concurrent overwrites are not. Always have a recent
versionfromskill-get(or from the response of the previous write) before calling any write tool, and pass it asbase_version.Authoring follows the Agent Skills spec. Keep
namekebab-case, descriptions trigger-rich, body short, bulky material in bundled files.
Decision tree: which tool do I call?
Need to know what's available?
└─► skill-list (names + descriptions only)
Need to use / inspect a specific skill?
└─► skill-get (body + file manifest, NO file contents)
└─► skill-file-get (one file, on demand, only as referenced)
Authoring a brand new skill?
└─► skill-create (body + all initial files in one call)
Editing an existing skill?
├─ Body change?
│ ├─ Substantial rewrite ............. update(body=...)
│ └─ Surgical tweak .................. update(edits=[{old, new}, ...])
├─ Bundled file content change?
│ └─ update(file_edits=[{path, edits:[...]}, ...])
├─ Add / remove / rename a file?
│ ├─ Add ............................. skill-file-create
│ ├─ Delete .......................... skill-file-delete
│ └─ Rename .......................... skill-file-rename
└─ Wholesale bundle reset (rare!) ....... update(files=[...]) # replaces ALL files
Renaming the skill itself?
└─► skill-rename (keeps versions, files, and owners)
Want a fork as the starting point?
└─► skill-duplicate (then update the copy)
Done with a skill entirely?
└─► skill-archive (hides ALL versions; cannot be undone)If you find yourself reaching for update(body=...) plus a sprawling files=[...]
to change one paragraph and one script, stop — that's two narrower calls
(update(edits=[...]) plus update(file_edits=[...])) or even a single
update carrying both edits and file_edits.
Discover before you fetch
posthog:skill-list
{ "search": "fractal" }skill-list is the right tool to "find a skill" — it returns names and
descriptions only. Reading the descriptions is the entire point: pick the right
skill before pulling any body. If search doesn't narrow it enough, list
without it and scan, but do not start fetching candidate bodies blindly.
skill-get should be called once per skill per task, not per question.
Cache the body in your working memory; fetch again only if you suspect the
skill changed under you (e.g. a 409 on write — see "Concurrency" below).
Reading a large skill efficiently
Big skills (long body, many bundled files) are the case where lazy loading matters most.
skill-get(skill_name=...)— readbody+files[]manifest.Scan the body's table of contents / headings. The body should already tell you which file goes with which task — that's why bodies stay short and reference files by path.
For each file the body explicitly points at for the current task, call
skill-file-get(file_path=...). Skip everything else.If the body references "see scripts/X for the rare case Y" and you are not in case Y, do not fetch
scripts/X.
When in doubt, fewer files. You can always fetch one more on the next turn.
Authoring a new skill
Use a single skill-create call with body and initial files — the
skill lands at version: 1 complete. Do not create the skill empty and then
make N follow-up skill-file-create calls; that's N extra versions and N
extra round-trips for no benefit.
posthog:skill-create
{
"name": "my-skill",
"description": "What it does AND when to use it. Include trigger keywords.",
"body": "# my-skill\n\n## When to use\n...\n## Workflow\n...",
"license": "MIT",
"compatibility": "Requires Python 3.10+",
"allowed_tools": ["Bash", "Write"],
"metadata": { "author": "me", "category": "..." },
"files": [
{ "path": "scripts/foo.py", "content": "...", "content_type": "text/x-python" },
{ "path": "references/primer.md", "content": "...", "content_type": "text/markdown" }
]
}Authoring rules of thumb
descriptionis the discovery surface. It is the only thingskill-listreturns. Make it trigger-rich (what the user might say) and scope-honest (what the skill does and does not do).name— kebab-case, max 64 chars, no leading/trailing/consecutive hyphens. The spec validator rejects anything else.Body ≤ ~500 lines. Long preambles, exhaustive SQL, full example payloads, and runnable code belong in
references/,assets/, orscripts/. The body should route to those files, not inline them.File layout convention —
scripts/for executable code,references/for prose docs and examples,assets/for templates / data. Agents can rely on this for orientation when they only have the manifest.allowed_toolslists the tools the skill asks to use. It is a request, not a grant: a harness that reads the skill from a file treats the list as pre-approved, and a harness that loads the skill over MCP ignores it until the user approves that grant. List only the tools the skill really uses, because padding the list widens the request. An undeclared tool is not pre-approved, and the harness decides what happens next: it can ask the user, deny the call, or not expose the tool at all. Some products enforce the list themselves, so an omitted tool makes the call fail there.End with a
## Related skillsfooter when adjacent skills exist: a short bullet list of`skill-name`entries, each with a one-line handoff reason ("when to jump there"), so one skill invocation seeds discovery of the next. Refer to skills by name only (no paths — related skills often live in other products), and only list genuine next steps, not everything in the product.
Updating an existing skill
The single most common mistake is using update(body=..., files=[...]) for a
small change. That works, but it round-trips the entire skill, makes the diff
unreadable in version history, and risks dropping files if files was
incomplete. Use the smallest primitive instead.
Always read first, capture version
posthog:skill-get
{ "skill_name": "my-skill" }Note the returned version — pass it as base_version on every write. After a
successful write, the response contains the new version; chain further writes
with that.
Body: full replacement vs incremental edits
Full replacement when you are restructuring the body:
posthog:skill-update
{ "skill_name": "my-skill", "body": "# my-skill\n\nNew body...", "base_version": 7 }Incremental edits when you are tweaking a few lines (preferred for small changes — easier to review, lower error surface):
posthog:skill-update
{
"skill_name": "my-skill",
"edits": [
{ "old": "Use Pillow for rendering.", "new": "Use Pillow ≥10.0 for rendering." },
{ "old": "## Old section title", "new": "## New section title" }
],
"base_version": 7
}Each edits[].old must match exactly once in the current body, and body and
edits are mutually exclusive in one call.
Bundled file content edits
file_edits patches one or more existing files in place — non-targeted files
carry forward unchanged. This is the right primitive when you are tweaking
script logic or fixing a typo in a reference doc:
posthog:skill-update
{
"skill_name": "my-skill",
"file_edits": [
{
"path": "scripts/foo.py",
"edits": [{ "old": "ITERATIONS = 100", "new": "ITERATIONS = 250" }]
},
{
"path": "references/primer.md",
"edits": [{ "old": "## Outdated header", "new": "## Updated header" }]
}
],
"base_version": 7
}file_edits cannot add, remove, or rename files — only patch
existing ones. For structural changes, use the per-file tools.
Combining edits in a single call
You can combine edits (body) and file_edits (existing files) in one
skill-update call to publish a single coherent version when a change
spans both:
posthog:skill-update
{
"skill_name": "my-skill",
"edits": [{ "old": "## Configuration", "new": "## Setup" }],
"file_edits": [
{ "path": "scripts/run.py", "edits": [{ "old": "DEBUG = False", "new": "DEBUG = True" }] }
],
"base_version": 7
}File-path parameter naming (read this before guessing)
The same concept — a bundled file's path — is named differently depending on where it travels in the request, and this trips up agents working from memory. There is one rule:
file_path— when the path is part of the URL (skill-file-get,skill-file-delete). These read/delete one file addressed by its path. Both also acceptpathand normalize it tofile_path, so the manifest key works.path— when the path is a body field:skill-file-create, thefiles=[{path, content, content_type}]array, andfile_edits=[{path, edits}].old_path/new_path— body fields onskill-file-rename.
Mnemonic: path is the field name on a file object (it sits next to
content), so everything that carries a file object uses path; the two
tools that address a file by URL use file_path. When unsure, check the
tool's input schema rather than guessing.
Adding, removing, renaming files
Each is its own call, each publishes a new version:
posthog:skill-file-create
{ "skill_name": "my-skill", "path": "scripts/julia.py", "content": "...", "base_version": 7 }posthog:skill-file-delete
{ "skill_name": "my-skill", "file_path": "scripts/old.py", "base_version": 8 }posthog:skill-file-rename
{ "skill_name": "my-skill", "old_path": "scripts/julia.py", "new_path": "scripts/julia_set.py", "base_version": 9 }skill-file-rename is a true move — it carries the existing content
forward without resending it. Always prefer it over delete + create when the
content is unchanged.
When to use update(files=[...]) (rare)
Passing files to skill-update replaces the entire bundle —
anything not in the array is dropped. This is the right tool only when you are
intentionally wiping and reseeding the bundle (e.g. importing a fresh local
SKILL.md tree). For almost every other case, prefer file_edits plus per-file
CRUD.
Working with large multi-file skills
Skills with many files (10+) require extra discipline:
Treat the manifest as the index.
skill-get'sfiles[]is your map. Match each task step to one file and fetch only that one.Group structural changes into a sequence, not a fork. If you are renaming three files, do them sequentially:
rename → rename → rename, each chained via the previous response'sversion. That gives you three small reviewable versions instead of one giantupdate(files=[...])blob.Keep edits localised. A single
skill-updatewithfile_editstargeting five files is fine. A singleupdate(files=[...])carrying ten full file bodies is almost always a sign you should have usedfile_edits.Refactor the body itself first. If the body has grown past ~500 lines, the right next step is usually to split content into new bundled files before adding more material.
Concurrency: base_version
Every write tool accepts base_version. Always pass it.
The server compares
base_versionto the current latest version. If they match, the write succeeds and the new version isbase_version + 1.If they differ, the write is rejected (someone else updated the skill). Re-run
skill-get, reconcile your changes against the new body, and retry with the freshversion.After a successful write, the response includes the new
version. Chain further edits with that — do not re-getbetween back-to-back writes you control.
Skipping base_version does not speed things up — it just turns a clean
"someone else won the race" error into a silent overwrite of their work.
Common pitfalls
Calling
skill-listwith no search and then fetching every body — defeats progressive disclosure. Read the descriptions first.Pre-fetching every bundled file after
skill-get— same mistake on the inner level. Fetch on demand from the body's directives.Using
update(body=..., files=[...])for a one-line fix — round-trips the entire skill, makes diffs unreadable, and risks dropping files. Useedits/file_edits.Using
update(files=[...])when you meant to add one file — drops every file you didn't include. Useskill-file-createinstead.Delete + create instead of rename — loses content history and costs an extra version bump.
Stale
base_versionafter chained writes — read theversionfrom the previous write's response, not from your initialget.Leaving
base_versionoff — accepts a silent overwrite. Always include it once you've done aget.Empty / vague
description— the skill becomes effectively undiscoverable viaskill-listsearch. Treat the description as the trigger contract.Long body + no bundled files — when a body crosses ~500 lines, refactor into
references/andscripts/rather than letting it grow.Mixing
bodyandeditsin one update call — they're mutually exclusive. Pick one.Guessing
pathvsfile_path— file-get and file-delete takefile_path(it's in the URL); create, rename (old_path/new_path),files, andfile_editstakepath(it's a body field). See "File-path parameter naming" above.
Archiving a skill
skill-archive hides every active version of a skill by name. It is
not version-scoped and cannot be undone — the skill drops out of
skill-list and skill-get for the whole team.
posthog:skill-archive
{ "skill_name": "my-skill" }Before archiving, skill-get the skill if you need to inspect or copy it
first. Archiving is the right tool for retiring a skill entirely; to remove a
single bundled file use skill-file-delete, and to roll back content
publish a new version rather than archiving.
Porting a local SKILL.md tree into PostHog
When migrating a local skill folder (e.g. my-skill/SKILL.md plus
scripts/, references/, assets/):
Read the local
SKILL.md. Its frontmatter maps toname,description,license,compatibility,allowed_tools,metadata. The body after the frontmatter becomesbody.Walk the bundled subdirs and gather every file as
{ path, content, content_type }.Call
posthog:skill-createonce with everything — the skill lands atversion: 1complete. Do not split this into a create + N file-create calls.
After the create, the skill is live for everyone via skill-get.
Patterns: what to use skills for
A skill in the store is a shared, versioned memory that agents with write access can update. That makes it useful for much more than instructions: a project hub that agents maintain across sessions, a catalog of the PostHog objects a team owns, a runbook that grows with every investigation, a daily "what needs me" queue, or a handover a teammate's agent can load directly.
references/skill-patterns.md is a cookbook of these shapes, with a file layout, a maintenance contract, and a starting point for each.
Read it when a user asks what skills are good for, or before you create a skill that agents will maintain over time.
When a skill is the wrong answer
Not every persistent prompt belongs in the skills store:
One-off task instructions belong in the conversation, not in a skill.
Personal scratchpads belong in agent memory or local files.
Code is not a skill — if it's something a service runs, it belongs in the repo.
A good skill is reusable, discoverable by description, and worth the cost of keeping it correct over time.
Files
- ATTRIBUTION.mdAdded by AutoGineer857 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md17.3 KiB
- references/skill-patterns.md13.3 KiB
references/skill-patterns.md
Skill patterns (a cookbook)
A catalog of the shapes that shared skills in the PostHog skills store tend to take. Most useful skills are a variation on one of these. Pick the closest shape, copy its file layout and maintenance contract, and adapt it to the job.
A skill in the store is more than a prompt. It is a small, versioned, shared memory that any agent on any surface (a local coding agent, a cloud task, Slack, PostHog Desktop) can load by name, and that agents with write access can update. The patterns below lean on those three properties: shared, versioned, and agent-writable.
This is a living reference. Add a pattern when a new shape proves itself over many sessions.
Contents
The patterns at a glance
Project hub
Big-build hub
Ownership catalog
Learning runbook
Personal queue / daily driver
Handover
Thinking document
Skill that runs itself (scout)
House-style skill
Bridge skill
Cross-cutting techniques
Picking and combining
The patterns at a glance
| Pattern | Use it when… | Starting point |
|---|---|---|
| Project hub | an area of work runs over many sessions and you are tired of re-explaining where things stand. | project-template in the community store |
| Big-build hub | one large feature has a spec, a backlog, a PR stack, and reviewers who all need the same context. | a project hub plus a design doc and decision log |
| Ownership catalog | a team owns many PostHog objects (warehouse views, dashboards, alerts, scanners) and the context about them lives in heads. | an index body plus one reference per group |
| Learning runbook | the same class of problem gets debugged again and again, and each investigation teaches something. | rules-first body plus investigations/ |
| Personal queue / daily driver | one person wants a daily "what needs me next" view across the inbox, GitHub, or tickets. | my-inbox in the community store |
| Handover | work passes to a teammate (holiday, rotation, reorg) and they need both the facts and a way into them. | a message whose bullets are skill names |
| Thinking document | a plan or draft evolves over weeks with an agent's help, and every revision matters. | a single-body skill with small edits |
| Skill that runs itself | a skill describes a job you do on a schedule, and the job could run without you. | authoring-scouts |
| House-style skill | a team maintains many skills and wants them to stay lean and consistent. | skills-best-practices in the community store |
| Bridge skill | an agent supports local skill files and you want a one-word shortcut into the store. | the bridge in the skills docs |
Project hub
A hub for one area of work. An agent starts a session with "resume <area> work", reads where things stand, does the work in the repo or product, and writes back what changed. The skill is the memory, and the memory is readable: anyone can open the skill and see what the agents believe is true.
Typical layout:
SKILL.md # what the area is, the file map, the session loop
HANDOVER.md # one section per workstream; read first, overwrite last
CHANGELOG.md # one line per session, rolling window (e.g. 14 days)
open-prs.md # PRs in flight and their state
environment-notes.md # durable gotchas that stay true
issues/INDEX.md # numbered backlog index
issues/NN-<slug>.md # one file per tracked issue
ideas/NN-<slug>.md # one file per idea not yet committed toThe session loop the body describes:
Load the skill. Read
HANDOVER.mdand the backlog index.Do the work where it belongs (code, product, queries), not in the skill.
At the end, file new issues or ideas, update
open-prs.md, add one changelog line, and overwrite your own handover section.
The most important part of the body is a rule for where each fact goes. Without it, an agent writes durable detail into whichever file it was already editing, usually the changelog.
| Still true in 30 days? | Has an owner who refreshes it? | Goes in |
|---|---|---|
| Yes | Yes, a tracked work item | issues/NN or ideas/NN |
| Yes | No, durable reference | environment-notes.md or a references/ file |
| No, but in flight now | You, this session | your HANDOVER.md section |
| No, it just happened | Nobody | CHANGELOG.md, one line |
Pitfalls:
One hub for everything. Make one hub per area, and add a Companions section that says what each sibling hub owns.
A handover that turns into a log. It is a clobber file: each session replaces its own section, and a section goes when its work lands.
A changelog that turns into an archive. Trim it as you append to it.
Big-build hub
A project hub scaled up for one large feature with many moving parts. Every person or agent that touches the feature loads one skill and gets the full picture.
Files that earn their place in addition to the project hub layout:
design.md: the spec, trust boundaries, open questions, the options ruled out, and a dated decision log. The body tells agents to check the log before they reopen a question.TODO.md: the backlog, split by when each item can happen (now, after the current stack lands, blocked on a decision). PRs and review replies cite items by id.stack-plan.md: how a large branch splits into reviewable PRs, with per-PR checks.reviewer-brief.md: a one-page entry point you can hand to a reviewer as-is.local-testing.md: how to run the thing end to end, including the failure modes that produce silently wrong output.scripts/: helpers for repetitive mechanics, such as slicing or replaying stack layers.
When a reviewer asks "why this way?", the answer is a dated decision-log entry, not a person.
Ownership catalog
An index of PostHog objects a team owns, with the context that the objects themselves cannot hold: what each one is for, how it connects to the rest, and the gotchas that bite when you read it. Good subjects are warehouse views, dashboards, alerts, Replay Vision scanners, and endpoints.
Shape:
The body is a short index: the two or three rules an agent gets wrong if it skips them, then a map from object group to reference file.
references/holds one file per group (for example, one per view family).recipes/holds queries that are known to work, so agents copy instead of re-deriving.
The catalog also drives changes to the objects. Before an agent creates a new alert or view, it reads the catalog to check for an existing one, then adds the new object to the catalog as part of the same change. When something fires or breaks, the agent loads the catalog first to get the object's purpose, baseline, and history.
Pair a catalog with a steward scout that checks the objects on a schedule and updates the skill when it fixes something.
See the maintainer / steward pattern in authoring-scouts.
Learning runbook
A read-only diagnostic runbook that gets better every time it is used.
Shape:
Rules before queries. The body opens with the few rules that cause wrong answers when skipped, such as time zones, identity resolution across accounts, or which data source is fresh.
Pick an avenue. A list that routes each symptom to one reference file and its recipes.
investigations/. A dated write-up for each new class of issue.
The maintenance contract is the part that makes it learn.
The body says: every time an investigation finds a new class of issue, write it up in investigations/ and extend the matching reference.
The next agent then starts from the last agent's findings instead of from zero.
Personal queue / daily driver
A skill that answers "what needs me next?" for one person, across the inbox, GitHub, tickets, or accounts. It renders one line per item with its state and a next action.
Shape:
scripts/do the mechanical work: fetch from the APIs, rank, and render a table. Scripts give the same output every run, which prose instructions do not.working-set.mdrecords only the items the person chose to own.The body puts live data first, memory second: the API is the truth, and the working set is a list of commitments. Never report status from the file alone.
A queue skill often pairs with a scout that runs it on a schedule and keeps one living report current, so the answer is ready before the person asks.
The community store has a generic starting point, my-inbox.
Handover
When work passes to someone else, write the handover as links to skills rather than as prose. Each bullet names a skill (the project hub, the runbook, the catalog) and says when to use it.
This works because the store is shared. The handover reaches the person and their agent at the same time. They do not need to paste context into their own agent: they say "use the <name> skill in the PostHog MCP to help here", and their agent gets the same context the author's agent had.
Thinking document
A skill does not have to be instructions. A plan, a quarterly draft, or a research note that evolves over weeks with an agent's help also fits well:
The agent reads it on any surface and edits it with small
edits.Every revision is a version you can diff.
Keep it as one body until it outgrows one screen, then split sections into references/.
Skill that runs itself (scout)
Every Signals scout is a skill with a schedule. When a skill describes a job you do regularly (check a catalog, sweep a queue, audit a fleet), turning it into a scout is a small step. Some useful scouts maintain other skills: a steward that keeps a catalog current, or a reviewer that checks recently changed skills against the house style.
See authoring-scouts for the scout format, and working-with-scouts to delegate a watch without writing one.
House-style skill
A team that maintains many skills benefits from one skill that says how skills are written: the spec floor, the team's patterns, a smell checklist, and a refactoring workflow. Tell agents to load it before they create or edit a skill. It should follow its own rules: a thin body and the substance in bundled files.
The community store has skills-best-practices as a starting point, and skills-spec, which is the Agent Skills specification as a skill.
Bridge skill
If an agent supports local skill files, a tiny local skill can point at the skills-store skill so a short command (for example /phs) loads the store.
Keep the bridge thin, so updates to the store skill reach everyone without a local change.
The PostHog AI plugin already includes skills-store, so plugin users do not need a bridge.
Cross-cutting techniques
Give every agent-maintained skill a convention. A skill with no rule for where things go is a blank page, and agents fill blank pages with noise. State where each kind of fact goes and what the end-of-session write looks like.
Keep the body to about one screen. The body is an index: what this is, the gotchas that bite hardest, the file map, companions, and the maintenance contract. New detail goes in a bundled file, and the body gains only a pointer.
Bound every growing file. Rolling windows for changelogs, clobber sections for handovers, one file per issue. Anything that only grows eventually costs more to load than it saves.
Keep every file reachable from the body. A file that no index links is invisible to progressive disclosure.
Link instead of copying. A Companions section or a
Related skillsfooter costs one line. A copied paragraph drifts.Dogfood in the same session. Use the skill for its real job. Where the agent stumbled or you had to supply context by hand, fix the skill before you finish.
Use the smallest write.
editsandfile_editswith a chainedbase_version, as the main skill body describes. A full-body rewrite for a small change can silently drop content.
Picking and combining
Most real skills combine two or three patterns. A big-build hub is a project hub with a design doc. A catalog is often paired with a runbook for the same objects, and both are often kept current by a steward scout. A personal queue becomes a scout once its output is worth having before you ask.
If no pattern fits, start with the smallest skill that holds the context you keep re-explaining. Add structure when you see the same kind of fact written in the wrong place twice.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- PostHog
- Publisher
- PostHog (Official)
- Source
- PostHog/skills · skills/omnibus/working-with-skills · commit a5d30e7
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by PostHog.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download working-with-skills.zip