复制安装命令
用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。
复制前请先查看来源、License 和安全提示。
Your landlord kept your deposit.
用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。
复制前请先查看来源、License 和安全提示。
来源文件:README.md
Your landlord kept your deposit. Your mom got a medical bill that makes no sense. You got laid off on a Tuesday. Someone you love died, and no one handed you the checklist.
Generic AI gives you filler for the moments that matter most. PM Skills gives your AI the exact framework a senior professional would use — for 1,117 real tasks, across work and life.
🍼 New parent · 💼 Just laid off · 🌍 New to this country · 👵 Caring for a parent · 🕊️ Losing someone · 💸 Money in crisis · 🔑 Starting over · 🤖 Getting serious about AI
PM Skills is an open-source library of 1117 Agent Skills — plain-markdown SKILL.md files that teach an AI assistant to do one professional task to a senior professional's standard, from writing a PRD to decoding a lease or running a blameless postmortem. Each skill bundles the framework, an output template, quality checks, and anti-patterns. It is MIT-licensed and works with Claude, ChatGPT, Gemini, Cursor, and Codex.
Decode a lease before you sign it. Write a PRD your team can execute. Simulate the promotion committee before the real one meets. Check the weather with zero API keys. Generic AI gives you filler; these give you the structure a senior professional actually uses.
Works natively in Claude Code and Hermes Agent, with ready-to-paste exports for ChatGPT, Gemini, Cursor, Codex and 8 more tools. (PM stands for Professional, not just Product Management.)
/plugin, search pm-skills, install. Done — ask "decode this lease" and watch.npx pm-claude-skills add and pick your tool from the menu (Cursor, Codex, Windsurf, ChatGPT, Gemini…).Nothing here can scare your setup. A skill is a markdown file your AI reads — no runtime, no telemetry, no accounts. Installing copies text files; uninstalling is deleting them. Skeptical? Good instinct: read one first — it's designed to be read by humans too.
Don't know what to look for? Describe your task in plain words at 🔎 find — "my landlord kept my deposit", "board meeting on Thursday" — and it names the skill.
Never miss a new skill. New ones drop regularly — subscribe to the newsletter and get a short email with a real example whenever they launch. No spam, unsubscribe anytime. Prefer no email? Follow via RSS or browse the newsletter archive.
Most skills here answer "do this task." A new family answers "think differently about my life."
LLMs have one big weakness: they're too correct. On open-ended questions they give the safe, average, textbook answer — technically right and completely forgettable. Two new bundles fight that head-on (inspired by parallel-divergent-ideation research):
💭 pm-thinking — think betterEscape the generic answer and stress-test your own decisions:
|
🎯 pm-focus — get unstuckADHD-friendly executive function (useful for everyone):
|
It's not just a folder of files — the whole library is explorable, runnable, and a little bit magic. All of this runs in your browser, free, nothing to install:
▶ Pick a skill → fill a short form → run it → a senior-grade artifact streams out. No install, your key stays in your browser (or run free with no key).
🌌 Galaxy 3D — fly through all 1117 skills as a living constellation. The ones you've run burn brighter. |
🎁 Wrapped — your practice, as a shareable story. 100% local — nothing leaves your browser. |
▶ Open the Playground to run any of the 1117 skills with your own key — or just browse them all.
Anything below is a real ask that activates a real skill — say it in your own words, the description does the routing:
| 🏠 "decode this lease before I sign" → lease-decoder | 📋 "write the PRD for our referral feature" → prd-template | 🚨 "blameless postmortem for Friday's outage" → incident-postmortem |
| 💰 "practice my salary negotiation" → salary-negotiation | 📉 "why is churn up this quarter?" → churn-analysis | ⚖️ "rank the backlog with RICE" → rice-prioritisation |
| 🛂 "prep me for the visa interview" → the-visa-interview | 🔨 "is this contractor quote fair?" → home-contractor-quote-decoder | 🏡 "should we rent or buy?" → rent-vs-buy |
| 📝 "draft my self-review honestly" → performance-review | 🚀 "are we ready to launch?" → product-launch-checklist | 📬 "my inbox is 4,000 deep" → email-triage-system |
…all 1117 asks live in the catalog.
| You want to… | Do this |
|---|---|
| Browse the skills | SKILLS.md — the full catalog · or the searchable web catalog |
| Install in Claude Code | /plugin → search pm-skills (it's in the official Anthropic directory) — or npx pm-claude-skills add --agent claude |
| Install in Cursor / Codex / Windsurf / Cline… | npx pm-claude-skills add --agent cursor (or codex, windsurf, aider, cline, zed…) |
| Use one skill in ChatGPT / Gemini | Copy it from exports/chatgpt/ or exports/gemini/ and paste as instructions |
| Skills over MCP, in any session | claude mcp add pm-skills -- npx -y pm-claude-skills-mcp |
No npm install needed — npx pm-claude-skills … always runs the latest. npx pm-claude-skills list shows everything in your terminal. Full per-tool instructions: docs/installation.md.
Every skill follows the same discipline: what it produces, the inputs it needs, a real framework (severity scales, decision rules — not vibes), a concrete output template, quality checks, and anti-patterns. All 1117 pass the SkillSpec L3 gate and a security audit in CI.
| Decoders | Simulators | Calculators | Live data | Cowork | Tokens | Seatbelt | Essentials |
Browse all 1,099 → · try one in your browser →
| Family | What it does | Examples (of many) |
|---|---|---|
| 🔍 Decoders (25+) | Read the document before you sign it — plain language, 🔴🟡🟢 severity, the money math | lease · medical bill · job offer · severance · insurance policy · contractor quote · timeshare |
| 🎭 Simulators | Face the adversary early — the real meeting, then an out-of-character debrief | salary negotiation · promotion committee · thesis defense · visa interview · due-diligence call |
| 🧮 Calculators | Deterministic Python scripts + honest models — assumptions labeled, no false precision | rent vs buy · FIRE number · debt payoff · raise vs jump · daycare vs stay-home |
| 📡 Live data (17) | Real-time answers with zero API keys — weather, rates, flights, scores, all over plain curl | weather · currency · crypto · flights · earthquakes · is-it-down |
| 🏠 Life admin | The unglamorous logistics, done in order | relocation · new parent · caregiving · doctor visits · records requests |
| 💼 Career moments | The weeks that decide years | layoff kit · resignation kit · PIP response · first 90 days as manager · interview gauntlet |
| 🏛 Dead mentors (5) 🆕 | History's sharpest operators, resurrected — the real methods from public-domain classics, applied to modern work | Machiavelli on office politics · Sun Tzu on picking your fights · Franklin's decision algebra · Marcus Aurelius on bad days · Bennett's 1908 time audit |
| 🏛 Life systems (20) 🆕 | Navigating the bureaucracies and emergencies people face alone — civic, disability, immigration, disaster | voting-navigator · disability-benefit-appeal · arrival-setup · credential-recognition · go-bag-builder · after-the-disaster |
| 🧠 Human edges (20) 🆕 | The parts of life nobody built tools for — neurodivergence, invisible illness, grief, identity, the hard conversations | masking-budget · spoon-planner · diagnosis-limbo-kit · coming-out-rehearsal · grief-admin · rabbit-hole-rescue |
| ⚡ New-gen (10) 🆕 | How the next generation lives and earns — creator deals, clips, D&D, ranked, resale, the attention war | creator-deal-decoder · clip-factory · ttrpg-session-forge · the-vibe-check · ranked-climb-coach · attention-reset |
| 🔮 2027 (10) 🆕 | Problems you don't have yet, but will — the agent era's operational skills | agent-severance · deepfake-drill · agent-hiring-panel · context-bankruptcy · clone-brief · api-for-yourself · the-org-simulator |
| 🎲 Tabletop (5) 🆕 | Game night, upgraded — teach, judge, plan, design, and practice the trades | teach-the-game · rules-lawyer · game-night-planner · board-game-designer · tabletop-negotiator |
| 🧾 Freelance & renters & parents | Small bundles for specific lives | pricing your services · late invoices · deposit recovery · IEP meetings · students |
| 🎲 Hobbies (12) 🆕 | Life outside work — the genuinely fun stuff | wine pairing · houseplant care · board-game night · D&D campaign · stargazing · chess openings |
| 💪 Wellbeing (12) 🆕 | Body and mind, sustainably — not another app streak | home workout · sleep reset · habit builder · posture reset · screen-time detox |
| 🔐 Digital self-defense (12) 🆕 | When your digital life is under attack | identity-theft recovery · phishing triage · account recovery · data-broker removal · doxxing response |
| 👪 Family & relationships (12) 🆕 | The people who matter | new-baby logistics · wedding vows · co-parenting messages · condolences · in-law boundaries |
| 💭 Thinking modes (24) 🆕 | Change how your AI reasons — escape the generic answer, stress-test decisions | the-third-answer · five-minds · decision-panel · red-team-my-plan · devils-advocate · poke-holes-in-this |
| 🎯 Focus & executive function (26) 🆕 | Get unstuck and run your own brain — ADHD-friendly, for everyone | where-do-i-start · task-to-first-step · overwhelm-triage · the-one-thing · build-my-memory-file · weekly-unstuck |
| 📖 Learning & mastery (10) 🆕 | Learn anything faster and make it stick | learn-anything-roadmap · feynman-explainer · spaced-repetition-setup · skill-plateau-breaker · deliberate-practice-plan |
| 💰 Wealth-building (10) 🆕 | Build wealth on purpose — educational, not financial advice | investing-for-beginners · index-fund-starter · ask-for-a-raise · first-100k-plan · financial-independence-roadmap |
| 🤝 Social & relationships (10) 🆕 | The hard conversations and the human ones | make-friends-as-an-adult · networking-for-introverts · boundary-setting-scripts · give-hard-feedback-kindly · repair-after-a-fight |
| 🩺 Caregiving & aging (10) 🆕 | Care for aging parents and navigate the system — not medical/legal advice | medical-appointment-advocate · care-team-coordinator · caregiver-burnout-check · long-term-care-options · end-of-life-wishes-conversation |
| 🤖 AI-native life (10) 🆕 | Use AI itself well — the meta-skills that make every tool better | prompt-library-builder · delegate-to-ai · ai-context-primer · spot-ai-mistakes · get-more-from-ai |
| 🤝 Cowork (100) | The office knowledge work an AI coworker actually does — the frameworks — the whole bundle | email triage · spreadsheet audit · meeting cost meter · deck outline first · saying no kindly · delegation brief |
| ⚡ Cowork · Live (12) | The same jobs, done — Claude Cowork acts on your real data via connectors + sandbox and returns an artifact — the whole bundle | inbox triage (live) · meeting prep (live) · spreadsheet audit (live) · deck from doc · thread → decision · PR description (live) |
…plus HR, sales, operations, research, healthcare, educators, writers, social media, and more — the full profession index, or by bundle in plugins/ (121 bundles). Install any bundle: /plugin install pm-decoders@pm-skills.
Before installing anyone's skills (including these): skill-vetting — a security read for SKILL.md files. The library's own standard lives in SKILLSPEC.md; every skill's level is enforced in CI.
A skill is a single markdown file with a name, a description that tells the assistant when to activate it, and a body containing the working framework: required inputs, decision rules or severity scales, a concrete output template, quality checks, and anti-patterns. The assistant reads it and gains the judgment; humans can read, audit, and edit the same file. No runtime, no lock-in.
---
name: lease-decoder
description: "Decode a residential lease into plain English and rank the
clauses that can hurt you. Use when someone asks 'what am I signing'…"
---
## Framework: Severity Scale
- 🔴 Can cost you real money — auto-renewal into a full new term, break
penalties beyond re-rental costs, deposit conditions written to fail…
That's the whole trick: it's markdown. Your agent reads it and gains the judgment; you can read it too, audit it, edit it, or write your own. No lock-in, no runtime, no telemetry.
The pm-tokens bundle optimizes every stage of your agent's token journey — no API keys, stdlib Python, nothing leaves your machine. Five habits, typically 30–60% off a session's token flow:
# 1. Map the repo instead of reading it (~3% of the cost of reading everything)
python3 skills/repo-map/scripts/repo_map.py .
# 2. Crush bulk before it enters context (98% smaller on uniform JSON; errors always survive)
python3 skills/context-crusher/scripts/context_crush.py --mode json --file response.json
# 3. Measure what anything costs — at YOUR prices, times YOUR call volume
python3 skills/token-cost/scripts/token_cost.py --file CLAUDE.md --price-in 3 --calls 200
Plus the judgment skills: token-diet (output costs 3–5× input — diet it where safe), context-budget (cache-aware layout: stable first, volatile last), and session-handoff (resume at ~5% of transcript size). See your own breakdown in the 🪙 Token Dashboard — paste what rides in your context, get computed per-piece savings, all in-browser. The full how-to: docs/SAVE-TOKENS.md.
The pm-cowork bundle is 100 skills for the office work an AI coworker actually does. Install it (/plugin install pm-cowork@pm-skills), then — the whole trick — describe your mess, don't name the skill: say "my inbox is 4,000 deep", "nobody reads my status updates", "this spreadsheet came from someone who left" — the right skill activates on the ask.
Start where it hurts:
| Your pain | Say this | The skill that answers |
|---|---|---|
| Drowning in email | "triage my inbox and cut the volume at the source" | email-triage-system → inbox-unsubscribe-purge |
| Calendar is all meetings | "audit my recurring meetings and price them" | standing-meeting-audit + meeting-cost-meter |
| Inherited a scary spreadsheet | "audit this sheet before we trust it" | spreadsheet-audit → formula-detangler |
| Docs get rewritten in review | "outline first, get sign-off, then draft" | outline-before-prose |
| Weeks just happen to you | "set up my weekly review" | weekly-review-ritual — the hub the others plug into |
Three habits that compound: (1) The weekly review is the keystone — it feeds task-triage-matrix, deep-work-blocking, and personal-wip-limits automatically. (2) The skills chain on purpose — email-to-tasks feeds the task triage; the meeting audit feeds async-instead; delegation-brief hands off what the triage says to shed — follow the links inside each skill. (3) Teams adopt one norm at a time — start with agenda-or-cancel or working-agreements, let it stick, then add the next; the ten-norms-on-Monday rollout is how none of them survive.
Two CLI tools for the trust-and-cost problems the ecosystem keeps hand-waving — both keyless-to-inspect, both one command:
# Does your skill actually work? Prove it. Paired A/B — skill on vs off, same tasks,
# REAL token counts from the API's usage fields, optional blind judge, sha-pinned receipt.
npx pm-claude-skills prove --skill ./my-skill --tasks tasks.txt --runs 2 --judge
npx pm-claude-skills prove --skill ./my-skill --tasks tasks.txt --dry-run # plan + call count, spends nothing
# Your MCP servers are charging you rent. Measure it: per-server token cost,
# unused-in-N-days flags, "disconnect these three, save X tokens per message".
npx pm-claude-skills mcp-audit --connect
prove exists because the ecosystem is full of "65% better!" claims and almost none are measured — it's the honest-broker harness (the JetBrains "advertised 65%, measured 8.5%" story is exactly why). mcp-audit reads your Claude configs, speaks real MCP to each server to count its schema tokens, and scans your session logs for what you actually use. See also the 📊 AI Spend page — every agent's cost (Claude Code, Codex, Copilot) in one meter, all in-browser.
Agent safety: the pm-seatbelt bundle is the pre-flight checklist before an agent touches email, the browser, or files — least-privilege reviews, prompt-injection spotting, and the blast-radius drill for going autonomous. And RFC 0002 — HANDOFF.md is a dead-simple session-handoff convention (your agent, but it remembers Monday) — a file, not a server, with reference hooks.
The library grew an ecosystem — all optional, all linked from the full showcase:
📄 The one-page cheatsheet — the whole library on one printable poster · ▶ Skill Playground — try any skill in your browser, no install · 📸 the Gallery — the creative side, in screenshots · Anti-Pattern Museum — 2,900+ shareable rules · The Handbook (also a real printed book) · Workflow recipes · Subagents & slash commands · MCP server + REST API · n8n / Slack / Obsidian integrations · The Boardroom · SkillBench · Org Edition · 🇪🇸 🇫🇷 🇨🇳 🇯🇵 translations
The validator that keeps these 1,099 honest, as a GitHub Action:
- uses: mohitagw15856/pm-claude-skills@v76
with:
path: .claude/skills # optional — it finds them otherwise
It checks frontmatter, the Use when … trigger clause a model actually matches
on, leftover template text, and structure — and annotates each finding inline
on the pull request diff, because a finding on the line beats a finding in a
log nobody opens. Also available as npx pm-claude-skills skillcheck.
Zero dependencies, no Docker image, no model call.
A skill can tell a model to check the contrast. Only arithmetic can actually check it. Where a question has a right answer rather than a good one, the skill calls out to a tool instead of estimating — both are MIT, zero-dependency, and neither makes a model call, so they cost nothing to run and return the same answer every time.
notugly — design systems that are
provably not ugly. #777777 on white is 4.478 and fails AA; #767676 is 4.542
and passes, and no amount of looking at a screenshot separates those.
accessibility-audit, design-system-audit, design-handoff-brief,
brand-guidelines and the Figma reviews now fill their contrast rows from
npx notugly; the MCP server exposes check_contrast directly; and
design-system-generate wraps it for the case
where there is no design system and something ships on Thursday.
rulebook — 37 games, 203
rulings, and how commonly each house rule is actually played.
board-game-night-planner uses it for teach
times and for settling the argument, because a rules disagreement is usually two
groups who learned it differently and are both partly right.
v76.2.1 — SkillCheck as a GitHub Action, and the design skills now compute their contrast numbers instead of estimating them.
Everything else is in the changelog and the releases — a README should say what this is, not what it was.
Add a skill via PR (the standard, CONTRIBUTING), request one via issue, or publish your own repo to the community index and earn the badge. Translations follow the pattern in skills-i18n/.
If a skill saved you real money or a real mistake, star the repo — it's how others find it. Sponsors fund the playground's free runs and get naming rights, not influence: become a sponsor.
MIT — use them, fork them, ship them at work. Skills are judgment, and judgment wants to be free.
Built by Mohit with Claude. 1117 skills · 121 bundles · 35 professions · every commit gated. The long version of this README — every feature, wave, and frontier bet — lives in the Showcase.
name: feature-flag-guide
description: "Write a feature flag management guide and lifecycle playbook for a service or team — covering flag taxonomy, creation checklist, rollout strategy, monitoring requirements, cleanup policy, and governance. Use when asked to document feature flag practices, create a flag rollout plan, write a feature flag policy, or guide a team on flag lifecycle management. Produces a flag lifecycle playbook, taxonomy reference, per-flag creation template, rollout decision tree, and cleanup checklist."Produce a complete feature flag management guide for a service or team — covering how flags are named and categorised, how to create and roll out a flag safely, what to monitor during rollout, when and how to clean up flags, and who is responsible for each stage. Feature flags without discipline become permanent technical debt. This guide gives the team a repeatable process so flags are created intentionally, rolled out safely, and removed when done.
Ask for these if not already provided:
Team: [Team name] | Platform: [LaunchDarkly / Split / Unleash / Custom] Document owner: [Name] | Last updated: [Date] Review cycle: Quarterly, and whenever the flag platform changes
Every flag belongs to exactly one category. The category determines default behaviour, who can enable it in production, and when it must be cleaned up.
| Type | Purpose | Default state | Production gate | Max lifetime |
|---|---|---|---|---|
| Release flag | Controls rollout of a new feature — decouples deploy from release | Off | Tech lead approval | 90 days from feature launch |
| Experiment flag | A/B or multivariate test — measures impact of a change | Off (control group) | Product + tech lead | Duration of experiment + 30 days |
| Ops flag | Operational control — circuit breaker, kill switch, throttle | On (normal behaviour) | On-call engineer can toggle | Indefinite (review annually) |
| Permission flag | Gates access by user segment, tier, or region | Off (restricted) | Product + Account owner | Indefinite (review annually) |
When in doubt: If the flag is temporary (tied to a specific feature launch), it is a Release flag. If it will exist forever as a control knob, it is an Ops flag.
All flags must follow this naming scheme:
[type]-[service]-[feature-description]
| Segment | Values | Example |
|---|---|---|
| type | release, exp, ops, perm | release |
| service | Short service identifier, lowercase, hyphenated | payments |
| feature-description | Kebab-case description, max 5 words | new-checkout-flow |
Full examples:
release-payments-new-checkout-flow — release flag for a new checkout feature in the payments serviceexp-search-personalized-ranking — experiment on personalized search rankingops-api-rate-limit-override — operational flag to override API rate limitsperm-dashboard-beta-users-only — permission flag gating dashboard for beta usersDo not:
release-JIRA-1234 → not searchable or self-describing)release-dark-mode-jan-2024 → flags outlive their dates)release-new-thing → not useful when you have 50 flags)Complete every item before creating a flag in the production environment.
Before creating the flag:
Flag description field (required):
Type: [Release / Experiment / Ops / Permission]
Owner: [Name]
Linked ticket: [JIRA-XXXX or GitHub issue URL]
Purpose: [One sentence — what this flag controls]
Cleanup by: [Date — required for Release and Experiment flags; "Annual review" for Ops/Permission]
Rollout plan: [Link to this document or inline summary]
Code requirements:
# Good — behaviour is clear when flag is off, and cleanup is obvious
if flag_client.is_enabled("release-[service]-[feature]", user_context):
return new_feature_handler(request)
else:
return existing_handler(request)
# Bad — nested flags, ternaries, and implicit defaults make cleanup error-prone
result = new_handler() if (f1 and not f2) or f3 else old_handler()
Use this decision tree to pick the right rollout strategy for a Release or Experiment flag:
Is the change reversible without a deploy?
├── No → Use an Ops flag with manual enable, not a percentage rollout
└── Yes → Continue
Is there a user-level identifier available (user ID, session ID)?
├── No → Use server-side percentage (stateless, but inconsistent per user)
└── Yes → Use user-based percentage (consistent experience per user) ← preferred
Is the change risky (touches payments, auth, or data writes)?
├── Yes → Start at 1% → 5% → 25% → 50% → 100%, with 24-hour holds
└── No → Start at 10% → 50% → 100%, with 4-hour holds
Does the change affect specific customer tiers or geographies?
├── Yes → Use segment-based targeting, not percentage rollout
└── No → Use percentage rollout
| Stage | Percentage | Hold duration | Pass criteria before advancing |
|---|---|---|---|
| Canary | 1% | 24 hours | Error rate within SLO, no P1 incidents |
| Early rollout | 5–10% | 24 hours | Error rate and latency match control group |
| Partial rollout | 25–50% | 24–48 hours | Business metrics not degraded vs. control |
| Majority | 75% | 24 hours | Final check — no regressions |
| Full rollout | 100% | 48 hours | Stable — schedule cleanup |
Do not skip stages for Release flags on production. Speed of rollout is not worth a production incident.
Use segment targeting when the rollout must be restricted:
# LaunchDarkly segment example — adapt for your platform
targeting_rules:
- clause:
attribute: "subscription_tier"
operator: "in"
values: ["enterprise", "team"]
serve: "on"
- clause:
attribute: "country"
operator: "in"
values: ["US", "CA", "GB"]
serve: "on"
default: "off"
Every flag that is not at 0% or 100% rollout requires active monitoring. Do not roll out a flag and walk away.
| Metric | What to compare | Alert threshold |
|---|---|---|
| Error rate | Flag-on cohort vs. flag-off cohort | >2× baseline error rate in flag-on group |
| p99 latency | Flag-on vs. flag-off | >20% higher latency in flag-on group |
| [Primary business metric] | Flag-on vs. flag-off | >5% degradation in flag-on group |
| [Conversion / completion rate] | Flag-on vs. flag-off | >2% drop in flag-on group |
Setting up split metric monitoring in [LaunchDarkly / Split / Datadog]:
1. Navigate to the flag → Metrics tab
2. Add metric: [primary business metric]
3. Add metric: error_rate (service-level)
4. Add metric: p99_latency (endpoint-level)
5. Set alert: notify [flag owner] in Slack #[team-channel] if metric degrades by [threshold]
6. Set experiment duration: [N days] if this is an Experiment flag
These metrics must never degrade, regardless of what the primary metric shows. If a guardrail is breached, roll back immediately — do not wait for investigation.
Immediate rollback command if guardrail is breached:
# [LaunchDarkly CLI]
ld-cli flag update [project-key] [flag-key] --default-variation off
# [Split CLI]
split-cli update-treatment [flag-name] --treatment "off" --percentage 100
# [Unleash CLI / API]
curl -X POST https://[unleash-host]/api/admin/features/[flag-name]/disable \
-H "Authorization: [admin-token]"
# [Custom — adapt to your implementation]
[command or dashboard step]
Copy this template into your flag's description field and the linked ticket when creating a new flag:
## Flag: [flag-name]
**Type:** [Release / Experiment / Ops / Permission]
**Owner:** [Name] ([Slack handle])
**Created:** [Date]
**Cleanup by:** [Date]
**Linked ticket:** [URL]
### Purpose
[One paragraph: what this flag controls, why it exists, what "on" and "off" mean]
### Rollout Plan
| Stage | Target | Date | Approved by |
|---|---|---|---|
| Canary | 1% | [Date] | [Name] |
| Early | 10% | [Date] | [Name] |
| Partial | 50% | [Date] | [Name] |
| Full | 100% | [Date] | [Name] |
### Monitoring
- Primary metric: [metric name and dashboard link]
- Guardrail metrics: error rate < [X]%, p99 < [Y] ms
- Alert channel: #[team-channel]
### Rollback Procedure
[Exact steps to turn the flag off in an emergency — should take < 2 minutes]
### Cleanup Checklist
- [ ] Flag at 100% for 48+ hours with no incidents
- [ ] Code path for flag-off branch removed from codebase
- [ ] Flag deleted from [platform]
- [ ] Ticket closed
When a flag needs to be disabled immediately due to a production incident:
Time target: flag disabled within 2 minutes of decision.
1. Go to [platform URL] — bookmark this: [URL]
2. Search for the flag by name: [flag-name]
3. Set to 0% / "off" for ALL users
4. Verify the service error rate drops within 60 seconds
5. Post to #incidents:
"🟡 Feature flag [flag-name] disabled — rolling back [feature description].
Owner: [name]. Error rate before: [X]%. Monitoring for recovery."
6. Page the flag owner if not already aware
For ops flags (kill switches that must turn OFF normally-on behaviour):
# These flags are "on" by default and turned "off" to disable a feature
# Confirm the flag polarity before toggling — "off" may mean "disabled" or "enabled" depending on naming
# Flag [flag-name]: OFF = [feature behaviour when off]
[kill switch command for your platform]
Stale flags are flags that are at 100% rollout, have been at 100% for >48 hours, or are past their cleanup date. Stale flags are technical debt.
A flag is stale if ANY of the following are true:
[ ] Flag is at 100% rollout and has been stable for 48+ hours
[ ] Monitoring shows no issues for the flag-on cohort
[ ] Code changes:
[ ] Remove the flag check from application code
[ ] Remove the "off" code path entirely — do not leave dead code
[ ] Remove any flag-related tests that test the off behaviour
[ ] Update any documentation that references the flag
[ ] PR merged and deployed to production
[ ] Flag deleted from [platform] (do not just disable — delete)
[ ] Cleanup ticket closed
[ ] Flag owner confirms cleanup in Slack: "Flag [name] has been cleaned up — [commit link]"
Automated stale flag detection:
# Run weekly — flags past cleanup date or at 100% for > 30 days
# [Platform-specific query — adapt:]
# LaunchDarkly API
curl -s "https://app.launchdarkly.com/api/v2/flags/[project-key]" \
-H "Authorization: [api-key]" | \
jq '.items[] | select(.creationDate < (now - 2592000) * 1000) | {key: .key, created: .creationDate}'
# Notify #engineering-housekeeping with list of stale flags
| Age past cleanup date | Action |
|---|---|
| 0–14 days | Slack reminder to flag owner |
| 14–30 days | Slack reminder to flag owner + tech lead |
| 30+ days | Tech lead assigns cleanup, creates ticket with P2 priority |
| 60+ days | Engineering manager reviews — flag may be force-deleted |
| Action | Who | Approval required |
|---|---|---|
| Create a flag (any environment) | Any engineer | None — but must complete creation checklist |
| Enable a flag in development | Any engineer | None |
| Enable a flag in staging | Any engineer | None |
| Enable a flag in production (0–10%) | Flag owner | Tech lead awareness |
| Advance rollout in production (10–100%) | Flag owner | Tech lead sign-off per stage |
| Enable an Ops flag in production | On-call engineer | None — these are break-glass controls |
| Delete a flag | Flag owner | Tech lead confirmation that code cleanup is done |
| Create a Permission flag | Flag owner | Product manager approval |
All flag changes in production must be traceable. Ensure the following are configured in [platform]:
#[team]-flag-changes automatically.
评论 (0)
暂无评论,成为第一个评论者吧!