OKR Writing skill for Codex

Key results that measure outcomes, not to-do lists. Codex drafts quarterly OKRs with one to three plain-language objectives and two to four key results each, every one carrying a baseline, target and data source. Task-shaped key results are rewritten as the outcome they should produce and moved to initiatives, sets are labelled committed or aspirational, and end-of-quarter scoring is recomputed from actuals with a written reflection per key result.

  • Product Management
  • $okr-writing
  • 136 lines
  • 2 files
  • ~1,400 tokens
  • MIT
  • Updated

Install

curl -fsSL codexskills.dev/install.sh \  | sh -s -- okr-writing

Installs to ~/.agents/skills/okr-writing/ for every project on this machine.

104-line POSIX script. No sudo, no telemetry. Read install.sh

Use it in Codex

Start a prompt with $okr-writing, or pick it from /skills. You can also just describe the task: Codex reads the description below and loads the playbook when your request matches.

What Codex reads before loading it

Drafts, critiques and scores Objectives and Key Results for product and engineering teams - qualitative objectives, 2-4 measurable outcome key results with baselines and targets, separation of committed and aspirational OKRs, alignment to company goals without cascading copies, and end-of-quarter 0.0-1.0 scoring with written reflection. Rewrites task-list key results into outcomes. Use when asked to write quarterly OKRs, review a draft OKR set, turn a strategy or roadmap into OKRs, or score OKRs at the end of a cycle.

Use it when

  • A team is drafting OKRs for the coming quarter
  • Draft key results are outputs such as ship X or launch Y
  • Leadership cannot tell committed goals from stretch goals
  • A quarter has ended and OKRs need scoring

Use something else when

  • You need a full quarterly business review or OKR retrospective meeting: use okr-reviews
  • You still need to define the underlying metrics: use product-metrics

How to check the result

Every key result has a baseline, target and source, none can be met just by shipping an initiative, and quarter-end scores recompute from baseline, target and actual.

The mistake it prevents

Listing deliverables like launch new onboarding as key results, so the team scores 1.0 while the metric never moves.

~/.agents/skills/okr-writing/SKILL.md

--- name: okr-writing description: Drafts, critiques and scores Objectives and Key Results for product and engineering teams - qualitative objectives, 2-4 measurable outcome key… license: MIT ---

An OKR set is done well when the objective says why the quarter matters in words people remember, each key result is an outcome with a baseline, target and data source, nobody could hit every key result by completing a task list, and the set is small enough that the team can name it from memory.

Anatomy

PartRulesBadGood
ObjectiveQualitative, directional, inspiring, time-bound by the cycle“Q1 product goals”“Make the first week feel effortless for new teams”
Key resultOutcome, number, baseline, target, source“Launch new onboarding”“Raise 7-day activation from 22% to 32%”
InitiativeWork you believe will move a KR; lives outside the OKR(listed as a KR)“Redesign invite flow; Slack invite; templates”

Limits: 1-3 objectives per team per quarter, 2-4 key results per objective. More than that dilutes focus.

Committed vs aspirational

Label every OKR:

  • Committed: the team expects to hit it fully (score 1.0). Missing it needs an explanation. Use for things the business depends on (reliability, compliance, launch dates with external commitments).
  • Aspirational: set so that about 0.6-0.7 is a good result. Missing the full target is normal.

Mixing the two without labels means leadership reads every 0.7 as a failure, or every 1.0 as sandbagging.

Turning outputs into outcomes

For each task-like KR ask “what would be different for customers or the business if we did this?” and measure that.

Output KR (rewrite)Outcome KR
Ship SSOClose 5 enterprise deals that listed SSO as a blocker (from 0)
Write 10 help articlesCut “how do I” tickets from 340/month to 200/month
Migrate to new billing systemReduce failed payment churn from 2.1% to 1.2% of MRR monthly
Run 8 A/B testsLift trial-to-paid conversion from 9% to 11%

Some KRs are legitimately binary (a regulatory deadline). Allow at most one per objective, label it committed, and add the outcome it protects in a note.

Key result checklist

  • Starts with a verb of change: raise, cut, reach, reduce, grow
  • Has a baseline (or “baseline unknown - measured by week 2”)
  • Has a target and a cycle end date
  • Names its data source or dashboard
  • The team can influence it substantially within the quarter
  • Cannot be hit by gaming alone; a guardrail is noted if it could
  • Not a restatement of another KR in the set

Alignment

  • Each team objective cites the company or department objective it supports.
  • Do not copy a parent KR down as a child objective word for word; translate it into what this team can move (“Company: grow self-serve revenue 30%” becomes “Onboarding team: raise 7-day activation 22% to 32%”).
  • Shared KRs across teams are fine; name one accountable owner team.
  • Some OKRs may be bottom-up (platform health, developer experience). That is expected.

Workflow

- [ ] 1. Read company/department OKRs, strategy, last quarter's scores
- [ ] 2. Gather metric baselines (see $product-metrics); mark unknowns
- [ ] 3. Draft 1-3 objectives in plain language
- [ ] 4. Draft 2-4 KRs each; run the KR checklist
- [ ] 5. Rewrite output KRs as outcomes; move outputs to initiatives
- [ ] 6. Label committed vs aspirational
- [ ] 7. Check alignment links and capacity against the roadmap
- [ ] 8. Present for review; note open questions on baselines

Scoring at quarter end

Score each KR 0.0-1.0 by progress from baseline to target: score = (actual - baseline) / (target - baseline), clamped to 0..1.

ScoreCommitted meaningAspirational meaning
1.0ExpectedTarget was likely too low
0.6-0.9Miss; explainGood result
0.3-0.5Significant miss; root causePartial progress; learn why
< 0.3Escalate and re-planWrong bet or wrong metric

Objective score = average of its KRs (unless the team agreed on weights). Every KR score needs one or two sentences: what happened, what was learned, carry over or drop. Scores inform planning; they are not performance ratings for individuals. For a full quarterly business review or retro format, use $okr-reviews.

Output template

## <Team> OKRs - Q1 2027
Supports: <company objective>

### O1: <objective> (aspirational)
| KR | Baseline | Target | Source | Owner |
|---|---|---|---|---|
| KR1 Raise 7-day activation | 22% | 32% | Looker: Activation v2 | Onboarding |
| KR2 Cut median time to first shared doc | 2.4 days | 1 day | events: doc_shared | Onboarding |
Guardrail: support tickets per 100 new teams stays <= 6
Initiatives (not KRs): invite redesign, Slack invite, starter templates

### O2: ...
Open questions: baseline for KR3 unknown; data team to confirm by Jan 10

Gotchas

  • A KR that only measures activity (“hold 20 customer calls”) rewards busyness.
  • Too many committed OKRs remove room for ambition; too many aspirational ones make planning unreliable. One or two committed per team is typical.
  • Changing targets mid-quarter hides learning; if a KR is clearly wrong, retire it and write down why.
  • Business-as-usual work (on-call, support) does not need an OKR unless it is changing; reserve capacity for it in the roadmap instead.
  • Never invent baselines. An OKR with a fabricated baseline produces a fabricated score.

Verification

Run the KR checklist on every key result; confirm no KR could be fully achieved by shipping a listed initiative without any metric moving; confirm each objective has an alignment link and a committed/aspirational label; and when scoring, recompute each score from baseline, target and actual.

What the zip contains

SKILL.md plus the interface file below. Nothing runs on install.

agents/openai.yamlgenerated from this page

Gives the Codex app a display name, a one-line description and a starter prompt for this skill.

interface:
  display_name: "OKR Writing"
  short_description: "Key results that measure outcomes, not to-do lists"
  default_prompt: "$okr-writing Write Q1 OKRs for our onboarding team that ladder up to the company goals"

About this skill

Written and maintained by the Codex Skills editors to the same editorial standard as every skill here: a selective description, a real workflow, known pitfalls and a way to verify the work. First published , last updated . MIT licensed. Something wrong or out of date? Tell us.

esc