Guides experiment state transitions: launching, pausing, resuming, ending, shipping variants, archiving, resetting, duplicating, and copying to another project. Covers preconditions, implications for variant assignment and analysis, and the decision framework for when to use each action.\nTRIGGER when: user asks to launch, pause, resume, end, ship, archive, reset, duplicate, or copy an experiment to another project.\nDO NOT TRIGGER when: user is creating an experiment (use creating-experiments), configuring rollout (use configuring-experiment-rollout), or setting up metrics (use configuring-experiment-analytics).
npx skills add https://github.com/PostHog/skills --skill managing-experiment-lifecycle
This skill covers experiment state transitions — what each action does, when to use it, and how it affects variant assignment and analysis.
draft ──launch──▶ running ──end──▶ stopped ──archive──▶ archived
│ ▲ │
pause resume ship_variant
│ │ (also ends if running)
▼ │
paused (flag inactive, still "running" status)
Any non-draft state ──reset──▶ draft
For each action, the two key questions:
experiment-launch)Transitions draft → running. Activates the feature flag and sets start_date.
start_dateNo request body needed.
experiment-pause)Deactivates the feature flag. Users fall back to the default experience (typically control).
/decide — no new exposure events recordedNo request body. Use experiment-resume to reactivate.
experiment-resume)Reactivates the feature flag after a pause. Users are re-bucketed deterministically into the same variants.
No request body.
experiment-end)Sets end_date and transitions to stopped. The feature flag is NOT modified.
end_dateOptional body: conclusion ("won", "lost", "inconclusive", "stopped_early", "invalid") and conclusion_comment.
Use this when you want to freeze results without changing what users see.
experiment-ship-variant)Rewrites the feature flag so the selected variant is served to 100% of users.
Always confirm with the user before shipping — this permanently rewrites the feature flag.
Required: variant_key (e.g. "test"). Optional: conclusion, conclusion_comment.
Returns 409 if an approval policy requires review before the flag change.
experiment-archive)Hides a stopped experiment from the default list view.
No request body. Can be restored by setting archived=false via experiment-update.
experiment-reset)Returns an experiment to draft state. Clears start_date, end_date, conclusion, and archived.
start_date is adjusted after re-launchNo request body.
experiment-duplicate)Creates a copy as a new draft with fresh dates and no results.
Important: always provide a unique feature_flag_key different from the original. If the same key is used, both experiments share a flag — changes to one affect both.
Optional: custom name (defaults to "Original Name (Copy)").
experiment-copy-to-project)Copies an experiment into a different project in the same organization as a new draft. Use this instead of
experiment-duplicate when the copy should land in another project; use duplicate when it stays in the same project.
have write access to it. Cannot copy across organizations or regions.
scheduling config, exposure criteria. Not copied: saved-metric references (project-scoped), holdout, exposure
cohort, dates, results, conclusion.
target_team_id is required; feature_flag_key is optional. The resolved key is then looked upin the target project, and the lookup result — not whether you passed the key — decides what happens:
feature_flag_key is omitted: it defaults to the _source_ experiment's flag key. That key normallydoesn't exist in the target project, so a new flag with it is created there. (The default can still collide — see
the next point — so to be safe, pass an explicit key.)
instead of creating one. Both experiments then point at the same flag, so lifecycle ops (ship, pause) on either
affect both. The existing flag must have ≥2 variants including one keyed control, otherwise the call returns 400.
To guarantee independence, pass a feature_flag_key that doesn't already exist in the target.
Confirm the source experiment and target project by name before calling — this writes into a project the user
isn't looking at. The returned experiment (and its id) belongs to the target project.
| Situation | Action | Tool |
| -------------------------------------------------- | ------------------------ | ---------------------------- |
| Draft ready, flag implemented, metrics set | Launch | experiment-launch |
| Clear winner, significant results | Ship the winning variant | experiment-ship-variant |
| No significant difference after sufficient time | End as inconclusive | experiment-end |
| Something wrong, need to stop exposure temporarily | Pause | experiment-pause |
| Resume after pause | Resume | experiment-resume |
| Experiment ended, ready to clean up | Archive | experiment-archive |
| Need to start over with same config | Reset to draft | experiment-reset |
| Want a similar experiment with a fresh start | Duplicate | experiment-duplicate |
| Want the same experiment in a different project | Copy to another project | experiment-copy-to-project |
All lifecycle actions require an experiment ID. If you don't have one, load the
finding-experiments skill to resolve the user's reference (name, description,
"latest", etc.) to a concrete ID before proceeding.
| Error message | Meaning |
| --------------------------------------- | ------------------------------------ |
| "Experiment has already been launched." | Can't launch a non-draft experiment |
| "Experiment has not been launched yet." | Can't end/pause/ship a draft |
| "Experiment has already ended." | Can't end/pause a stopped experiment |
| "Experiment is already paused." | Use resume instead |
| "Experiment is not paused." | It's already active |
| "Experiment is already in draft state." | Nothing to reset |
| "Experiment is already archived." | Already done |
When you get a 400, explain the situation to the user rather than retrying.
Expert startup business analyst specializing in market sizing, financial modeling, competitive analysis, and strategic planning for early-stage companies. Use PROACTIVELY when the user asks about market opportunity, TAM/SAM/SOM, financial projections, unit economics, competitive landscape, team planning, startup metrics, or business strategy for pre-seed through Series A startups.
This skill should be used when the user asks to "plan team structure", "determine hiring needs", "design org chart", "calculate compensation", "plan equity allocation", or requests organizational design and headcount planning for a startup.
End-to-end bulk RNA-seq orchestrator — takes raw FASTQ reads through QC and trimming (FastQC, fastp/Trim Galore), alignment and quantification (STAR, Salmon, featureCounts), assembles a gene-level counts matrix, then hands off to differential expression (pydeseq2), pathway/GSEA enrichment (pathway-enrichment), and publication figures (scientific-visualization). Use whenever the user has bulk RNA-seq reads or quant output and wants a complete, reproducible differential-expression workflow — e.g. "analyze my RNA-seq", "FASTQ to DESeq2", "run nf-core/rnaseq", "STAR/Salmon quantification", "build a counts matrix for DESeq2", or "go from reads to differentially expressed genes and enriched pathways". Routes between an nf-core/rnaseq (Nextflow) path and a standalone STAR/Salmon path, and covers experimental design, strandedness, and QC gates. For single-cell RNA-seq use the scanpy skill instead.
Generate project status reports from Jira issues and publish to Confluence. When an agent needs to: (1) Create a status report for a project, (2) Summarize project progress or updates, (3) Generate weekly/daily reports from Jira, (4) Publish status summaries to Confluence, or (5) Analyze project blockers and completion. Queries Jira issues, categorizes by status/priority, and creates formatted reports for delivery managers and executives.
Evaluates market bubble risk through quantitative data-driven analysis using the revised Minsky/Kindleberger framework v2.1. Prioritizes objective metrics (Put/Call, VIX, margin debt, breadth, IPO data) over subjective impressions. Features strict qualitative adjustment criteria with confirmation bias prevention. Supports practical investment decisions with mandatory data collection and mechanical scoring. Use when user asks about bubble risk, valuation concerns, or profit-taking timing.
Google Workflow: Today's meetings + open tasks as a standup summary.
Read event data from a Google Sheets spreadsheet and create Google Calendar entries for each row.
Create professional, dark-themed SVG diagrams of any type — architecture diagrams, flowcharts, sequence diagrams, structural diagrams, mind maps, timelines, illustrative/conceptual diagrams, and more. Use this skill whenever the user asks for any kind of technical or conceptual diagram, visualization of a system, process flow, data flow, component relationship, network topology, decision tree, org chart, state machine, or any visual representation of structure/logic/process. Also trigger when the user says "画个图" "画一个架构图" "diagram" "flowchart" "sequence diagram" "draw me a ..." or uploads content and asks to visualize it. Output is always a standalone .svg file.
Take posthog/managing-experiment-lifecycle from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.