← Files okrdevARCHIVED FILE
site/index.html
28.7 KB · Oct 2, 2026 · 00:30 UTC
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>okrdev — an open-source OKR operating framework with an AI coach</title>
<meta name="description" content="A free, open-source OKR framework with an AI coach in your repo: it challenges off-KR work, pre-drafts weekly check-ins, and parks distractions. MIT.">
<meta property="og:title" content="okrdev — Building got cheap. Focus didn't.">
<meta property="og:description" content="A free, open-source OKR operating framework where an AI coach keeps humans on track. Your OKRs are markdown files in your own repo — delete one directory and okrdev never existed.">
<meta property="og:type" content="website">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%231d5c38'/%3E%3Ctext x='16' y='22' font-family='monospace' font-size='15' font-weight='bold' fill='%23e8f5ec' text-anchor='middle'%3Eok%3C/text%3E%3C/svg%3E">
<style>
:root {
--paper: #faf9f5;
--paper-raised: #ffffff;
--ink: #21241f;
--ink-soft: #5b6157;
--line: #e3e1d8;
--accent: #1d5c38;
--accent-soft: #e7f0e9;
--amber: #7d5619;
--amber-soft: #f7efdd;
--term-bg: #14181a;
--term-ink: #cdd6cd;
--term-dim: #869388;
--term-green: #8fd6a4;
--term-amber: #e3c07e;
--pine: #16342a;
--sage: #dbe7dd;
--mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
@media (prefers-color-scheme: dark) {
:root {
--paper: #101311;
--paper-raised: #171b18;
--ink: #e4e6df;
--ink-soft: #9aa294;
--line: #262b26;
--accent: #7cc494;
--accent-soft: #1a2b20;
--amber: #d9b26a;
--amber-soft: #2a2417;
--term-bg: #0b0e0c;
--pine: #cfe4d5;
--sage: #1c2a21;
}
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
body {
font-family: var(--sans);
background: var(--paper);
color: var(--ink);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
a { color: var(--accent); text-decoration-thickness: 1px; text-underline-offset: 2px; }
.wrap { max-width: 68rem; margin: 0 auto; padding: 0 1.25rem; }
code, pre, .mono { font-family: var(--mono); }
/* ── nav ─────────────────────────────────────── */
.nav {
position: sticky; top: 0; z-index: 10;
background: var(--paper);
background: color-mix(in srgb, var(--paper) 88%, transparent);
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
border-bottom: 1px solid var(--line);
}
.nav .wrap { display: flex; align-items: center; gap: 1.5rem; height: 3.4rem; }
.brand { font-family: var(--mono); font-weight: 700; font-size: 1.05rem; color: var(--ink); text-decoration: none; }
.nav nav { margin-left: auto; display: flex; gap: 1.35rem; font-size: .92rem; }
.nav nav a { color: var(--ink-soft); text-decoration: none; }
.nav nav a:hover { color: var(--ink); }
.nav nav a.gh { color: var(--accent); font-weight: 600; }
@media (max-width: 720px) { .nav nav a:not(.gh):not(.keep) { display: none; } }
@media (max-width: 400px) { .nav .wrap { gap: .9rem; } .nav nav { gap: .8rem; } }
/* ── hero ────────────────────────────────────── */
.hero { padding: 5rem 0 3.5rem; }
.kicker {
font-family: var(--mono); font-size: .8rem; letter-spacing: .06em;
color: var(--accent); text-transform: uppercase; margin-bottom: 1.2rem;
}
.kicker .dot { color: var(--ink-soft); padding: 0 .45em; }
h1 { font-size: clamp(2.4rem, 6vw, 3.9rem); line-height: 1.06; letter-spacing: -.02em; font-weight: 800; }
h1 em { font-style: normal; color: var(--accent); }
.lede { font-size: 1.18rem; color: var(--ink-soft); max-width: 44rem; margin: 1.4rem 0 2rem; }
.lede strong { color: var(--ink); font-weight: 600; }
.cta-row { display: flex; gap: .8rem; flex-wrap: wrap; align-items: center; }
.btn {
display: inline-block; padding: .72rem 1.25rem; border-radius: .55rem;
font-weight: 600; font-size: .98rem; text-decoration: none;
border: 1px solid transparent;
}
.btn-primary { background: var(--accent); color: var(--paper); }
.btn-primary:hover { filter: brightness(1.1); }
.btn-ghost { border-color: var(--line); color: var(--ink); background: var(--paper-raised); }
.btn-ghost:hover { border-color: var(--ink-soft); }
.cta-note { font-size: .85rem; color: var(--ink-soft); font-family: var(--mono); }
/* ── terminal ────────────────────────────────── */
.term {
margin-top: 3rem; background: var(--term-bg); border-radius: .8rem;
border: 1px solid var(--line);
font-family: var(--mono); font-size: .88rem; line-height: 1.75;
overflow-x: auto; box-shadow: 0 12px 40px -18px rgba(10, 30, 18, .35);
}
.term-bar {
display: flex; align-items: center; gap: .45rem; padding: .6rem .9rem;
border-bottom: 1px solid #232a25;
}
.term-bar i { width: .68rem; height: .68rem; border-radius: 50%; background: #3a453c; }
.term-bar b { margin-left: .5rem; color: var(--term-dim); font-weight: 400; font-size: .78rem; }
.term-body { padding: 1rem 1.2rem 1.2rem; color: var(--term-ink); white-space: pre; }
.term-body .you { color: var(--term-ink); }
.term-body .who { color: var(--term-dim); }
.term-body .coach { color: var(--term-green); }
.term-body .path { color: var(--term-amber); }
/* ── sections ────────────────────────────────── */
section { padding: 4.2rem 0; border-top: 1px solid var(--line); }
.sec-label {
font-family: var(--mono); font-size: .78rem; letter-spacing: .08em;
text-transform: uppercase; color: var(--accent); margin-bottom: .8rem;
}
h2 { font-size: clamp(1.7rem, 3.6vw, 2.3rem); letter-spacing: -.015em; line-height: 1.15; max-width: 40rem; }
.sec-lede { color: var(--ink-soft); max-width: 44rem; margin-top: .9rem; font-size: 1.05rem; }
/* the deal — three moves */
.moves { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-top: 2.4rem; }
@media (max-width: 800px) { .moves { grid-template-columns: 1fr; } }
.move {
background: var(--paper-raised); border: 1px solid var(--line);
border-radius: .8rem; padding: 1.4rem 1.4rem 1.5rem;
}
.move .n { font-family: var(--mono); color: var(--accent); font-size: .8rem; }
.move h3 { margin: .5rem 0 .55rem; font-size: 1.12rem; }
.move p { font-size: .94rem; color: var(--ink-soft); }
.move p code { font-size: .85em; background: var(--accent-soft); padding: .1em .35em; border-radius: .3em; }
/* what you get grid */
.grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-top: 2.4rem; }
@media (max-width: 900px) { .grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) { .grid { grid-template-columns: 1fr; } }
.cell { border: 1px solid var(--line); border-radius: .8rem; padding: 1.3rem; background: var(--paper-raised); }
.cell h3 { font-size: 1.02rem; margin-bottom: .45rem; }
.cell p { font-size: .9rem; color: var(--ink-soft); }
/* ladder */
.ladder { margin-top: 2.4rem; display: grid; gap: .8rem; }
.rung {
display: grid; grid-template-columns: 8.5rem 1fr auto; gap: 1.2rem; align-items: baseline;
border: 1px solid var(--line); border-radius: .8rem; padding: 1.15rem 1.3rem;
background: var(--paper-raised);
}
@media (max-width: 720px) { .rung { grid-template-columns: 1fr; gap: .35rem; } }
.rung .lvl { font-family: var(--mono); font-weight: 700; color: var(--accent); font-size: .92rem; }
.rung .what b { font-weight: 650; }
.rung .what p { font-size: .9rem; color: var(--ink-soft); margin-top: .15rem; }
.rung .time { font-family: var(--mono); font-size: .82rem; color: var(--amber); white-space: nowrap; }
.ladder-note { margin-top: 1.1rem; font-size: .92rem; color: var(--ink-soft); max-width: 44rem; }
/* install */
.install-cols { display: grid; grid-template-columns: 1.15fr .85fr; gap: 2rem; margin-top: 2.4rem; align-items: start; }
@media (max-width: 860px) { .install-cols { grid-template-columns: 1fr; } }
pre.code {
background: var(--term-bg); color: var(--term-ink); border-radius: .7rem;
padding: 1.1rem 1.25rem; font-size: .87rem; line-height: 1.8; overflow-x: auto;
border: 1px solid var(--line);
}
pre.code .c { color: var(--term-dim); }
pre.code .k { color: var(--term-green); }
.install-side h3 { font-size: 1rem; margin-bottom: .5rem; }
.install-side p { font-size: .92rem; color: var(--ink-soft); margin-bottom: 1.2rem; }
.daily { margin-top: 1.4rem; }
.daily li { list-style: none; font-family: var(--mono); font-size: .85rem; padding: .3rem 0; color: var(--ink-soft); }
.daily li b { color: var(--accent); font-weight: 600; }
/* help paths */
.paths { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.1rem; margin-top: 2.4rem; align-items: stretch; }
@media (max-width: 900px) { .paths { grid-template-columns: 1fr; } }
.path-card {
display: flex; flex-direction: column;
border: 1px solid var(--line); border-radius: .9rem; padding: 1.6rem 1.5rem;
background: var(--paper-raised);
}
.path-card .tag {
font-family: var(--mono); font-size: .75rem; letter-spacing: .07em;
text-transform: uppercase; color: var(--ink-soft); margin-bottom: .7rem;
}
.path-card h3 { font-size: 1.28rem; letter-spacing: -.01em; }
.path-card .price { font-family: var(--mono); font-size: .88rem; color: var(--amber); margin: .45rem 0 1rem; }
.path-card .sub { font-size: .82rem; color: var(--ink-soft); margin: -.4rem 0 .8rem; }
.path-card ul { margin: 0 0 1.4rem 1.1rem; }
.path-card li { font-size: .92rem; color: var(--ink-soft); padding: .22rem 0; }
.path-card li b { color: var(--ink); font-weight: 600; }
.path-card .btn { margin-top: auto; text-align: center; }
.path-diy { border-top: 3px solid var(--accent); }
.path-dwy { border-top: 3px solid var(--amber); }
.path-dfy { border-top: 3px solid var(--pine); background: linear-gradient(180deg, var(--sage), var(--paper-raised) 24%); }
.paths-footnote { margin-top: 1.4rem; font-size: .9rem; color: var(--ink-soft); max-width: 46rem; }
/* faq */
.faq { margin-top: 2rem; max-width: 48rem; }
.faq details { border-bottom: 1px solid var(--line); padding: .9rem 0; }
.faq summary { cursor: pointer; font-weight: 600; font-size: 1rem; list-style: none; display: flex; justify-content: space-between; align-items: center; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; content: "+" / ""; font-family: var(--mono); color: var(--accent); font-size: 1.1rem; }
.faq details[open] summary::after { content: "–"; content: "–" / ""; }
.faq details p { margin-top: .6rem; font-size: .94rem; color: var(--ink-soft); max-width: 44rem; }
.faq details p code { font-size: .85em; background: var(--accent-soft); padding: .1em .35em; border-radius: .3em; }
/* footer */
footer { border-top: 1px solid var(--line); padding: 2.6rem 0 3.2rem; }
footer .wrap { display: flex; flex-wrap: wrap; gap: 1rem 2rem; align-items: baseline; }
footer p { font-size: .88rem; color: var(--ink-soft); }
footer .links { margin-left: auto; display: flex; gap: 1.3rem; font-size: .88rem; }
</style>
</head>
<body>
<header class="nav">
<div class="wrap">
<a class="brand" href="#top">okrdev</a>
<nav aria-label="Primary">
<a href="#how">How it works</a>
<a href="#ladder">The ladder</a>
<a href="#install" class="keep">Install</a>
<a href="#help" class="keep">Get help</a>
<a class="gh" href="https://github.com/backedbydata-co/okrdev">GitHub →</a>
</nav>
</div>
</header>
<main id="top">
<div class="wrap">
<section class="hero" style="border-top:none">
<p class="kicker">Open source<span class="dot">·</span>MIT<span class="dot">·</span>Your repo, your files</p>
<h1>Building got cheap.<br><em>Focus didn't.</em></h1>
<p class="lede">
okrdev is a free, open-source <strong>OKR operating framework with an AI coach built
in</strong>. It installs into any business or project, knows your key results, challenges
work that serves none, pre-drafts your weekly check-ins, and parks every shiny idea
before it eats your week.
</p>
<div class="cta-row">
<a class="btn btn-primary" href="#install">Install free</a>
<a class="btn btn-ghost" href="https://github.com/backedbydata-co/okrdev/blob/main/MANIFESTO.md">Read the manifesto</a>
<span class="cta-note">Level 0 in ten minutes</span>
</div>
<div class="term" role="img" aria-label="A Claude Code session: the coach asks which key result a new idea serves, parks it in the parking lot, then logs an override as a judgment call.">
<div class="term-bar"><i></i><i></i><i></i><b>Claude Code — your-project</b></div>
<div class="term-body"><span class="who">you </span><span class="you"> let's add a public leaderboard. this week.</span>
<span class="who">coach </span><span class="coach"> Which key result does this serve?</span>
<span class="who">you </span><span class="you"> …none yet. park it</span>
<span class="who">coach </span><span class="coach"> Parked in ten seconds → </span><span class="path">okrdev/PARKING_LOT.md</span>
<span class="coach"> - [2026-08-07] Public leaderboard — @you — energy: high — effort: M</span>
<span class="coach"> Triage decides Thursday. Back to KR2.1?</span>
<span class="who">you </span><span class="you"> actually — override: the client demo is tomorrow.</span>
<span class="who">coach </span><span class="coach"> Proceeding — logged as a judgment call.</span>
<span class="coach"> You'll see it at Friday's check-in.</span></div>
</div>
</section>
</div>
<div class="wrap">
<section id="how">
<p class="sec-label">The deal</p>
<h2>The AI keeps the humans on track. Humans stay sovereign.</h2>
<p class="sec-lede">
The standard arrangement is humans supervising the AI. okrdev adds the mirror image:
a coach that knows your mission and this cycle's objectives, and asks the one question
that matters before anything gets built. You can always override it — and every
override is written down. Freedom, with a memory.
</p>
<div class="moves">
<div class="move">
<span class="n">01</span>
<h3>Park, don't chase</h3>
<p>Distraction isn't a character flaw — acting on it the moment it arrives is.
Capture any idea in ten seconds with <code>/okrdev:park</code>. Weekly triage
promotes it, archives it, or sanctions it as a time-boxed side-quest. The good
ideas survive triage. The dopamine doesn't.</p>
</div>
<div class="move">
<span class="n">02</span>
<h3>The 15-minute check-in</h3>
<p>The coach pre-writes your weekly check-in from git history and merged PRs —
confidence table, what moved, what drifted. Humans add the parts only they know.
Wins first, no guilt trips, and a skipped week earns a two-minute catch-up,
not an inquisition.</p>
</div>
<div class="move">
<span class="n">03</span>
<h3>Override, on the record</h3>
<p>The coach can never block you. It has exactly one power: it writes things down —
judgment calls, drift, emergencies that weren't. Accountability without authority.
It turns out that's plenty.</p>
</div>
</div>
<div class="grid">
<div class="cell"><h3>Git-native OKRs</h3><p>Objectives, key results, check-ins, retros — markdown files in your own repo. Versioned, reviewable by PR, greppable by agents. No SaaS, no lock-in: uninstall is <span class="mono">rm -rf okrdev/</span>.</p></div>
<div class="cell"><h3>The right amount of teeth</h3><p>The coach classifies work against your KRs, flags drift, and pushes back on vanity metrics and sandbagged targets — at planning, not just at the retro.</p></div>
<div class="cell"><h3>Anyone owns anything</h3><p>With AI filling skill gaps, a marketer can ship a migration and an engineer can run a pricing experiment. Every objective gets exactly one human DRI, end to end.</p></div>
<div class="cell"><h3>Health metrics</h3><p>Every target you push gets a metric watching what you might break — monitored, not targeted. The Goodhart defense, built in.</p></div>
<div class="cell"><h3>Rails, not vigilance</h3><p>Optional collaboration rails — <span class="mono">KR:</span> tags on PRs, a gate that asks which KR, CODEOWNERS, protected branches — so safety is an environment, not a behavior.</p></div>
<div class="cell"><h3>An optional stack</h3><p>For greenfield projects: Vercel + Neon + GitHub with per-PR preview environments and CI gates, so non-technical builders ship safely because unsafe paths are hard.</p></div>
</div>
</section>
</div>
<div class="wrap">
<section id="ladder">
<p class="sec-label">Adoption</p>
<h2>Start at the bottom. Earn your way up.</h2>
<p class="sec-lede">
Frameworks die of over-installation — ceremony before value gets the whole thing
deleted by week three. okrdev installs one rung at a time and never adds a level
uninvited. Existing codebase? Keep your stack: the method is fully decoupled from it.
</p>
<div class="ladder">
<div class="rung">
<span class="lvl">Level 0</span>
<div class="what"><b>Parking lot</b><p>Idea capture + weekly triage. Nothing else. If you only ever install one rung, install this one.</p></div>
<span class="time">10 minutes</span>
</div>
<div class="rung">
<span class="lvl">Level 1</span>
<div class="what"><b>The method</b><p>Mission, cycle OKRs, weekly check-ins, retros. This is okrdev proper.</p></div>
<span class="time">one planning session</span>
</div>
<div class="rung">
<span class="lvl">Level 2</span>
<div class="what"><b>Collaboration rails</b><p><span class="mono">KR:</span> tags on PRs, the okr-gate nudge, CODEOWNERS, branch protection — for teams.</p></div>
<span class="time">an afternoon</span>
</div>
<div class="rung">
<span class="lvl">Stack</span>
<div class="what"><b>Optional stack module</b><p>The full Vercel + Neon AI-first environment. Greenfield projects, or deliberate migrations only.</p></div>
<span class="time">a day</span>
</div>
</div>
<p class="ladder-note">
The ladder goes both ways: if a level stops earning its minutes, remove its files and
drop a rung. A framework you actually run at Level 1 beats one you resent at Level 2.
</p>
</section>
</div>
<div class="wrap">
<section id="install">
<p class="sec-label">Quickstart</p>
<h2>Two commands to install. One directory to uninstall.</h2>
<div class="install-cols">
<div>
<pre class="code"><span class="c"># In the Claude Code app (Mac/Windows), open your</span>
<span class="c"># project folder and type into the chat:</span>
<span class="k">/plugin</span> marketplace add backedbydata-co/okrdev
<span class="k">/plugin</span> install okrdev
<span class="c"># On Codex, the same two steps are shell commands:</span>
<span class="k">codex</span> plugin marketplace add backedbydata-co/okrdev
<span class="k">codex</span> plugin add okrdev@okrdev
<span class="c"># then, with your project still open:</span>
<span class="k">/okrdev:install</span> <span class="c"># walks the adoption ladder, starts at Level 0</span>
<span class="k">/okrdev:plan</span> <span class="c"># ready for Level 1? draft your first cycle's OKRs</span></pre>
<ul class="daily">
<li><b>/okrdev:park</b> — "park this idea": 10-second capture, back to work</li>
<li><b>/okrdev:triage</b> — weekly at Level 0; from Level 1 it runs inside checkin</li>
<li><b>/okrdev:checkin</b> — weekly: pre-drafted, wins first, 15 minutes for real</li>
<li><b>/okrdev:coach</b> — anytime: confidence trends, drift, "is this aligned?"</li>
<li><b>/okrdev:side-quest</b> — sanction a distraction, with a time-box</li>
<li><b>/okrdev:retro</b> — end of cycle: score honestly, extract lessons</li>
</ul>
</div>
<div class="install-side">
<h3>Which agent?</h3>
<p>okrdev is a plugin for <b>Claude Code</b> and <b>Codex</b>. Same skills, same files —
Claude Code invokes them as <span class="mono">/okrdev:park</span>, Codex with an
<span class="mono">@</span> mention.</p>
<h3>New to Claude Code?</h3>
<p>It's Anthropic's AI agent, and okrdev installs into it as a plugin. Get the
desktop app at <a href="https://claude.com/claude-code">claude.com/claude-code</a> —
no terminal required. It also runs as a CLI and in IDEs; okrdev works in all of
them, including a headless install
(<span class="mono">./okrdev/install.sh</span>) for scripts and CI.</p>
<h3>What it touches</h3>
<p>One <span class="mono">okrdev/</span> directory and one marked, removable block in
your agent's instructions file — <span class="mono">CLAUDE.md</span> on Claude Code,
<span class="mono">AGENTS.md</span> on Codex, never both. Level 2 optionally adds a few files under
<span class="mono">.github/</span>. Your build system, deploy pipeline, and framework
choices: untouched.</p>
<h3>Neither agent?</h3>
<p>The skills are plain markdown — copy them into your repo and hand any capable
agent the docs. The format is the framework.</p>
<h3>Not a software business?</h3>
<p>The method runs fine in a repo that contains nothing but the
<span class="mono">okrdev/</span> directory. OKRs, check-ins, and the parking lot
don't care what you sell.</p>
</div>
</div>
</section>
</div>
<div class="wrap">
<section id="help">
<p class="sec-label">Get help</p>
<h2>The framework is free. The help is optional.</h2>
<p class="sec-lede">
okrdev is complete on its own — the paid paths buy help and accountability,
not features. There is no locked tier.
</p>
<div class="paths">
<div class="path-card path-diy">
<p class="tag">DIY — do it yourself</p>
<h3>Self-serve</h3>
<p class="price">Free · MIT-licensed</p>
<ul>
<li>The <b>full framework</b>: coach, parking lot, check-ins, retros</li>
<li>Docs written for non-technical DRIs too</li>
<li>A complete worked example — a full fictional cycle, warts included</li>
<li>Level 0 in about ten minutes</li>
</ul>
<a class="btn btn-ghost" href="#install">Install it now</a>
</div>
<div class="path-card path-dwy">
<p class="tag">DWY — done with you</p>
<h3>Coached group</h3>
<p class="price">Small cohort · led by Alex Chisholm, okrdev's author</p>
<p class="sub">For when the method sticks but the discipline doesn't.</p>
<ul>
<li>Install together and <b>plan your first cycle live</b></li>
<li>Your OKRs pressure-tested — sandbagging and vanity metrics called out before the cycle starts</li>
<li>A weekly group check-in alongside other teams running the same method</li>
<li>Direct line to Alex between sessions</li>
</ul>
<a class="btn btn-ghost" href="https://calendly.com/backedbydata/30min">Ask about the next group</a>
</div>
<div class="path-card path-dfy">
<p class="tag">DFY — done for you</p>
<h3>Foundation + Duty of Care</h3>
<p class="sub">Delivered by Tech Guys on Demand — a division of Tech Guys Who Get Marketing.</p>
<p class="price">Fixed-scope audit, then monthly care · priced on a call</p>
<ul>
<li>We install okrdev <b>and the engineering foundation under it</b>: automated checks on every change, a preview link to click before anything ships, one-way-only production deploys (nobody edits production by hand)</li>
<li>Then <b>Duty of Care</b>: a named engineer with a written response-time guarantee, who reviews every change before it ships, watches the checks guarding your production, and runs your monthly OKR review</li>
<li>Starts with a one-week Foundation Audit — 100% credited if you proceed</li>
<li>Architected by Alex Chisholm — okrdev's author and CTO of Tech Guys Who Get Marketing — and delivered by your named engineer, so care never waits on the author's calendar</li>
</ul>
<a class="btn btn-primary" href="https://calendly.com/backedbydata/30min">Book a Foundation Audit</a>
</div>
</div>
<p class="paths-footnote">
Not sure which? Install it yourself first — it's free and takes ten minutes. You can
add help later; the framework doesn't change underneath you.
</p>
</section>
</div>
<div class="wrap">
<section id="faq">
<p class="sec-label">Questions</p>
<h2>The honest fine print.</h2>
<div class="faq">
<details>
<summary>Is it actually free?</summary>
<p>Yes. MIT license, no feature gates, no telemetry, no account. Your OKRs are
markdown files in your own repo — delete the <code>okrdev/</code> directory and
okrdev never existed. The paid paths above buy human help, not software.</p>
</details>
<details>
<summary>Will the coach block my work?</summary>
<p>Never. Blocking is how tools get uninstalled — usually mid-crisis, usually
forever. Overrides always work, and every one leaves a line in the week's
check-in. Accountability without authority.</p>
</details>
<details>
<summary>Do I need Claude Code?</summary>
<p>It's the smoothest path — okrdev ships as a plugin for
<a href="https://claude.com/claude-code">Claude Code</a>, easiest in the desktop
app (Mac/Windows), no terminal required. But the skills are plain markdown: copy
them into your repo and hand any capable agent the docs.</p>
</details>
<details>
<summary>We already have a stack. Do we have to migrate?</summary>
<p>No. The method is fully decoupled from the stack: Levels 0–2 don't care whether
you deploy to Vercel or a VPS, use Postgres or a spreadsheet, or even write code.
The opinionated stack module is for greenfield projects and deliberate migrations
only — it's never a prerequisite.</p>
</details>
<details>
<summary>What does okrdev refuse?</summary>
<p>Cascade theater (no trees of aligned sub-OKRs), set-and-forget plans, metric
tyranny (every pushed target gets a health metric watching what it might break),
and ceremony — a three-line check-in is valid, and a skipped week gets a
two-minute catch-up.</p>
</details>
<details>
<summary>Who's behind it?</summary>
<p>okrdev is built in the open by <a href="https://github.com/backed-by-data">Alex
Chisholm</a>, and it runs on itself — this cycle's OKRs, check-ins, and parking
lot are in the repo for anyone to read. This page lives there too, under
<code>site/</code>.</p>
</details>
</div>
</section>
</div>
</main>
<footer>
<div class="wrap">
<p>© 2026 Alex Chisholm · MIT · Objectives before code. Catalog, don't chase.</p>
<nav class="links" aria-label="Footer">
<a href="https://github.com/backedbydata-co/okrdev">GitHub</a>
<a href="https://github.com/backedbydata-co/okrdev/blob/main/MANIFESTO.md">Manifesto</a>
<a href="https://github.com/backedbydata-co/okrdev/tree/main/docs">Docs</a>
<a href="https://github.com/backedbydata-co/okrdev/tree/main/examples/acme-fitness">Worked example</a>
<a href="https://github.com/backedbydata-co/okrdev/blob/main/PRIVACY.md">Privacy</a>
</nav>
</div>
</footer>
</body>
</html>
SHA-256: 8865f7feb95a661e9c5d814644cf0ec2f590379cf4db386c7fb3ffddbe59b09e