# OKR Desk > Grade a closed OKR cycle, then write the next one. Paste a team's OKR set and get a free check: the writer's rules > applied and, once actual values are in, every key result scored the way its type demands. A metered run rewrites the > set into outcome-based OKRs (or drafts one from a strategy or a cycle review), or grades the closed cycle; the page > holds each reply to its own check. Built on the SkillSafe skills @product-on-purpose/foundation-okr-writer and > @product-on-purpose/measure-okr-grader (product-on-purpose/pm-skills, Apache-2.0). https://okr-desk.skillsafe.ai/ ## The input format Header lines (Team:, Cycle:, Source of truth:, Strategy:), objectives ("O1: ..."), key results ("KR1.1: ..." or a bullet under an objective) with "key: value" attributes after "|" or on the lines below (type, indicator, baseline, target, deadline, source, owner, confidence, actual, tolerance, original target), and an "Initiatives:" list of bullets ("Lifecycle emails -> KR1.1 | shipped"). Statements are read for "from A to B", "below X", "at least X", "between X and Y" and "by DATE". ## What is free - Outcomes, not output: key results that are deliverables (launch, ship, migrate) or activity counts (run 12 interviews). - Measurement: no target, a target without a baseline (or recommended-to-measure), no evidence source, no deadline or cycle, type not stated. - Objectives and focus: numbers in the objective, empty adjectives, more than 3 objectives, fewer than 2 or more than 4 key results. - Guardrails and integrity: growth or speed with no guardrail, individual OKRs, OKR scores tied to pay or performance reviews. - Scores by type: aspirational (actual - baseline) / (target - baseline); committed pass or fail; compliance met or not met; operational health against its band, with drift inside a stated tolerance; learning validated or invalidated. Guardrails are reported apart and kept out of the objective average; an open window is deferred; partial coverage of a commitment is not-yet-fully-observable. - Grading flags: committed misses, broken guardrails, stretch scores below 0.4 or above 0.85, targets changed mid-cycle, missing actuals. - Scorecard CSV, findings CSV, the check as Markdown. ## The metered lanes Two tasks on gpt-terra, metered per run, routed by `task`. Input string fields: `task` (write or grade), `okrs`, `context` (optional) and `facts` (the page's check). - `write` replies with `mode` (rewrite, draft, next-cycle), `verdict` (ready, revise, rework), `empowerment`, `summary`, `findings`, `prescan`, `set` (context, objectives with key results - statement, type, indicator, baseline and target each with a basis of given, assumption or placeholder, deadline, source, owner, confidence - and initiatives), `audit` (eleven criteria rated pass, risk or fail), `disclosure`, `open_questions`, `next_step`. The page writes the set back in the input format and re-checks it, refuses a "given" value that is not in the input, and checks the audit and the Disclosure. - `grade` replies with `verdict` (hit, mixed, missed), `summary`, `scorecard`, `objectives`, `guardrails`, `evidence`, `initiatives` (shipped and moved kept apart), `learning`, `next_cycle`, `risks`, `findings`, `prescan`, `source_of_truth`. The page holds every score to its own arithmetic unless the reply disputes it, and refuses numbers on deferred or committed key results. - A grading hands its learnings and next-cycle calls to the write lane as context. ## Links - API tutorial: https://okr-desk.skillsafe.ai/api.html - Source skills: https://skillsafe.ai/skill/@product-on-purpose/foundation-okr-writer, https://skillsafe.ai/skill/@product-on-purpose/measure-okr-grader