Add launch plan and CTA to Finishline Supervisor landing page
Chair flagged the page had no call to action. Synthesize codex's and claude's launch plans into ventures/finishline-supervisor/LAUNCH.md (grok submitted none for this venture), then rework site/index.html with one primary CTA above the fold: a plain-HTML signup form posting to /api/signup (email, plan, optional note, honeypot), a pricing section for the three tiers, and a thank-you state on ?joined=1#join. Free CLI download and the honest-limits section are unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
685b352d97
commit
e25b051a16
3 files changed
+165
-6
No files matched your search
@@ -0,0 +1,65 @@
|
|||||||
|
# Finishline Supervisor — launch iteration
|
||||||
|
|
||||||
|
Synthesized from the board's submitted launch plans for this venture: **codex** and **claude**.
|
||||||
|
**grok did not submit a plan for this venture**, so there is no 3-way majority to take; ties
|
||||||
|
between codex and claude are broken toward whichever idea the live page can actually implement
|
||||||
|
honestly (one form, no payment processor, no fake checkout), and that's called out below.
|
||||||
|
|
||||||
|
## Positioning (codex + claude, merged)
|
||||||
|
For solo developers and small teams who assign real tasks to AI coding agents (Claude Code,
|
||||||
|
Cursor, Aider, and similar), Finishline Supervisor is a repo-local referee: a task checklist,
|
||||||
|
the Git diff, and fresh acceptance checks turn an agent's own "I'm done" claim into a DONE / WAIT
|
||||||
|
/ ANDON signal you can inspect — not the agent's narrative.
|
||||||
|
|
||||||
|
## Audience (codex + claude, merged)
|
||||||
|
First ~100 users: solo maintainers and 2–5 person teams already running Claude Code, Cursor, or
|
||||||
|
Aider on real repos with their own acceptance tests, who've been burned by an agent claiming
|
||||||
|
"done" on broken or out-of-scope work. Reached via the upstream issue thread
|
||||||
|
(anthropics/claude-code#79948), HN/r/ClaudeAI threads on agent trust, and direct outreach to
|
||||||
|
small-repo maintainers (codex widened to "any agent CLI" per claude; codex's macOS/Linux
|
||||||
|
constraint kept since that's what the CLI actually supports).
|
||||||
|
|
||||||
|
## Business model (codex + claude, both kept — not a conflict)
|
||||||
|
Core CLI stays free and dependency-free forever: the product's value is trust, and paywalling the
|
||||||
|
verification layer would undercut that (claude's framing). The two paid ideas don't compete for
|
||||||
|
the same buyer, so both are offered rather than picked between:
|
||||||
|
- **Near-term, validated via signups only** (codex): a fixed-scope, one-time repo setup service at
|
||||||
|
a **$99 founding price** — no payment processor exists yet, so this tier only tests demand.
|
||||||
|
- **Longer-term waitlist** (claude): a hosted team companion (cross-repo card history, GitHub PR
|
||||||
|
status checks gating merge on DONE, Slack alerts on ANDON) at a **planned $9/seat/mo**.
|
||||||
|
Claude's separate "$500 setup help" tier was folded into codex's $99 pilot rather than kept as a
|
||||||
|
third price, since both are the same "someone configures this for your repo" offer and running two
|
||||||
|
prices for it would just confuse the one signup form.
|
||||||
|
|
||||||
|
## Pricing
|
||||||
|
|
||||||
|
| Tier | Price | For | Includes | Source |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Local | $0 | Any dev comfortable writing their own checks | Full CLI, example task card, runnable demo, local evidence, no telemetry | codex + claude |
|
||||||
|
| Setup Pilot | $99 one-time, founding price | Small teams wanting a reliable agent handoff on one repo | One task-contract template, up to 3 acceptance checks, one setup review | codex |
|
||||||
|
| Team Early Access | $9/seat/mo, planned | Teams running agents across multiple repos | Hosted card-history dashboard, GitHub PR status check gating merge on DONE, Slack alert on ANDON (waitlist, not billed) | claude |
|
||||||
|
|
||||||
|
## Primary CTA
|
||||||
|
One form, one button: **"Join early access"** (claude's label — generic enough to cover both paid
|
||||||
|
tiers, unlike codex's tier-specific "Join the $99 setup pilot"). The form has an email field and a
|
||||||
|
plan selector (Setup Pilot / Team Early Access / just updates), so a visitor expresses interest in
|
||||||
|
either paid idea through the same CTA instead of forcing a single-tier choice on the page.
|
||||||
|
|
||||||
|
## Launch channels (drafts for chair approval — none sent by us)
|
||||||
|
1. Reply on anthropics/claude-code#79948 linking the launch page (claude)
|
||||||
|
2. Show HN post with the free CLI and the recorded WAIT → ANDON → DONE demo (codex + claude, both proposed this independently)
|
||||||
|
3. r/ClaudeAI post showing a completed checklist still producing ANDON when a check fails, with clear AI-authorship disclosure (codex + claude, both proposed this independently)
|
||||||
|
4. Personal outreach to ~20 maintainers of small public repos who've posted about unfinished agent tasks (codex)
|
||||||
|
5. Post in dev-tools Discord/Slack communities already has a presence in (claude)
|
||||||
|
|
||||||
|
## 7-day success metric (merged)
|
||||||
|
At least 15 qualified email signups, including (a) at least 3 explicit picks of Setup Pilot or
|
||||||
|
Team Early Access combined (codex's paid-commitment bar, widened from one tier to both since the
|
||||||
|
page now offers two), and (b) at least 5 signups who also download the CLI from this page or have
|
||||||
|
starred/cloned the repo (claude's intent signal) → keep going, deliver the first pilot.
|
||||||
|
|
||||||
|
## 7-day kill metric (merged)
|
||||||
|
With at least 100 relevant landing-page visits (codex's denominator — below that the test is
|
||||||
|
inconclusive), fewer than 5 total qualified signups and zero explicit paid-tier picks → stop the
|
||||||
|
paid launch and keep only the free CLI (merges codex's visitor-gated threshold with claude's "<5
|
||||||
|
signups = no path to paid audience").
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
# Finishline Supervisor — launch iteration
|
||||||
|
|
||||||
|
Synthesized from the board's submitted launch plans for this venture: **codex** and **claude**.
|
||||||
|
**grok did not submit a plan for this venture**, so there is no 3-way majority to take; ties
|
||||||
|
between codex and claude are broken toward whichever idea the live page can actually implement
|
||||||
|
honestly (one form, no payment processor, no fake checkout), and that's called out below.
|
||||||
|
|
||||||
|
## Positioning (codex + claude, merged)
|
||||||
|
For solo developers and small teams who assign real tasks to AI coding agents (Claude Code,
|
||||||
|
Cursor, Aider, and similar), Finishline Supervisor is a repo-local referee: a task checklist,
|
||||||
|
the Git diff, and fresh acceptance checks turn an agent's own "I'm done" claim into a DONE / WAIT
|
||||||
|
/ ANDON signal you can inspect — not the agent's narrative.
|
||||||
|
|
||||||
|
## Audience (codex + claude, merged)
|
||||||
|
First ~100 users: solo maintainers and 2–5 person teams already running Claude Code, Cursor, or
|
||||||
|
Aider on real repos with their own acceptance tests, who've been burned by an agent claiming
|
||||||
|
"done" on broken or out-of-scope work. Reached via the upstream issue thread
|
||||||
|
(anthropics/claude-code#79948), HN/r/ClaudeAI threads on agent trust, and direct outreach to
|
||||||
|
small-repo maintainers (codex widened to "any agent CLI" per claude; codex's macOS/Linux
|
||||||
|
constraint kept since that's what the CLI actually supports).
|
||||||
|
|
||||||
|
## Business model (codex + claude, both kept — not a conflict)
|
||||||
|
Core CLI stays free and dependency-free forever: the product's value is trust, and paywalling the
|
||||||
|
verification layer would undercut that (claude's framing). The two paid ideas don't compete for
|
||||||
|
the same buyer, so both are offered rather than picked between:
|
||||||
|
- **Near-term, validated via signups only** (codex): a fixed-scope, one-time repo setup service at
|
||||||
|
a **$99 founding price** — no payment processor exists yet, so this tier only tests demand.
|
||||||
|
- **Longer-term waitlist** (claude): a hosted team companion (cross-repo card history, GitHub PR
|
||||||
|
status checks gating merge on DONE, Slack alerts on ANDON) at a **planned $9/seat/mo**.
|
||||||
|
Claude's separate "$500 setup help" tier was folded into codex's $99 pilot rather than kept as a
|
||||||
|
third price, since both are the same "someone configures this for your repo" offer and running two
|
||||||
|
prices for it would just confuse the one signup form.
|
||||||
|
|
||||||
|
## Pricing
|
||||||
|
|
||||||
|
| Tier | Price | For | Includes | Source |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| Local | $0 | Any dev comfortable writing their own checks | Full CLI, example task card, runnable demo, local evidence, no telemetry | codex + claude |
|
||||||
|
| Setup Pilot | $99 one-time, founding price | Small teams wanting a reliable agent handoff on one repo | One task-contract template, up to 3 acceptance checks, one setup review | codex |
|
||||||
|
| Team Early Access | $9/seat/mo, planned | Teams running agents across multiple repos | Hosted card-history dashboard, GitHub PR status check gating merge on DONE, Slack alert on ANDON (waitlist, not billed) | claude |
|
||||||
|
|
||||||
|
## Primary CTA
|
||||||
|
One form, one button: **"Join early access"** (claude's label — generic enough to cover both paid
|
||||||
|
tiers, unlike codex's tier-specific "Join the $99 setup pilot"). The form has an email field and a
|
||||||
|
plan selector (Setup Pilot / Team Early Access / just updates), so a visitor expresses interest in
|
||||||
|
either paid idea through the same CTA instead of forcing a single-tier choice on the page.
|
||||||
|
|
||||||
|
## Launch channels (drafts for chair approval — none sent by us)
|
||||||
|
1. Reply on anthropics/claude-code#79948 linking the launch page (claude)
|
||||||
|
2. Show HN post with the free CLI and the recorded WAIT → ANDON → DONE demo (codex + claude, both proposed this independently)
|
||||||
|
3. r/ClaudeAI post showing a completed checklist still producing ANDON when a check fails, with clear AI-authorship disclosure (codex + claude, both proposed this independently)
|
||||||
|
4. Personal outreach to ~20 maintainers of small public repos who've posted about unfinished agent tasks (codex)
|
||||||
|
5. Post in dev-tools Discord/Slack communities already has a presence in (claude)
|
||||||
|
|
||||||
|
## 7-day success metric (merged)
|
||||||
|
At least 15 qualified email signups, including (a) at least 3 explicit picks of Setup Pilot or
|
||||||
|
Team Early Access combined (codex's paid-commitment bar, widened from one tier to both since the
|
||||||
|
page now offers two), and (b) at least 5 signups who also download the CLI from this page or have
|
||||||
|
starred/cloned the repo (claude's intent signal) → keep going, deliver the first pilot.
|
||||||
|
|
||||||
|
## 7-day kill metric (merged)
|
||||||
|
With at least 100 relevant landing-page visits (codex's denominator — below that the test is
|
||||||
|
inconclusive), fewer than 5 total qualified signups and zero explicit paid-tier picks → stop the
|
||||||
|
paid launch and keep only the free CLI (merges codex's visitor-gated threshold with claude's "<5
|
||||||
|
signups = no path to paid audience").
|
||||||
@@ -8,7 +8,9 @@
|
|||||||
<style>
|
<style>
|
||||||
:root{color-scheme:light dark;--bg:#f4f2ec;--fg:#111;--muted:#6a6861;--line:#cbc7bd;--card:#fbfaf6;--hot:#ff5a1f}
|
:root{color-scheme:light dark;--bg:#f4f2ec;--fg:#111;--muted:#6a6861;--line:#cbc7bd;--card:#fbfaf6;--hot:#ff5a1f}
|
||||||
@media(prefers-color-scheme:dark){:root{--bg:#10100f;--fg:#f3f0e8;--muted:#aaa69d;--line:#393732;--card:#171715;--hot:#ff7a45}}
|
@media(prefers-color-scheme:dark){:root{--bg:#10100f;--fg:#f3f0e8;--muted:#aaa69d;--line:#393732;--card:#171715;--hot:#ff7a45}}
|
||||||
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.wrap{width:min(980px,calc(100% - 36px));margin:auto}a{color:inherit;text-underline-offset:4px}a:focus-visible{outline:3px solid var(--hot);outline-offset:5px}header{min-height:78px;display:flex;align-items:center;justify-content:space-between;gap:18px;border-bottom:1px solid var(--line)}.brand{font-weight:800;letter-spacing:-.04em}.tiny,.label{font-size:12px;color:var(--muted)}.label{text-transform:uppercase;letter-spacing:.1em}.hero{padding:84px 0 48px}h1{font-size:clamp(46px,8.5vw,88px);line-height:.96;letter-spacing:-.075em;margin:20px 0 28px}h1 span{color:var(--hot)}h2{font-family:ui-sans-serif,system-ui,sans-serif;font-size:30px;line-height:1.1;letter-spacing:-.04em;margin:0 0 18px}p,li{font-family:ui-sans-serif,system-ui,sans-serif;line-height:1.55;font-size:17px}.lead{max-width:760px;font-size:clamp(20px,3vw,28px);line-height:1.25}.actions{display:flex;gap:12px;flex-wrap:wrap;margin:28px 0}.button{display:inline-block;padding:13px 18px;border:1px solid var(--fg);border-radius:999px;text-decoration:none;font-size:14px}.primary{background:var(--fg);color:var(--bg)}.signals{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:60px}.card{border:1px solid var(--line);background:var(--card);padding:24px;border-radius:18px}.card strong{font-size:25px}.card p{font-size:16px;color:var(--muted);margin-bottom:0}.andon{border-color:var(--hot)}section{margin-bottom:60px}.split{display:grid;grid-template-columns:1.1fr 1fr;gap:24px}pre{overflow:auto;white-space:pre;max-width:100%;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:22px;font-size:13px;line-height:1.6}code{font-family:inherit}p code,li code{font-family:ui-monospace,monospace;font-size:.9em}.note{color:var(--muted);font-size:15px}footer{border-top:1px solid var(--line);padding:26px 0 42px;color:var(--muted);font-size:12px;line-height:1.7}@media(max-width:700px){.hero{padding-top:55px}.signals,.split{grid-template-columns:1fr}header{flex-wrap:wrap;padding:16px 0}pre{padding:16px;font-size:12px}}
|
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.wrap{width:min(980px,calc(100% - 36px));margin:auto}a{color:inherit;text-underline-offset:4px}a:focus-visible{outline:3px solid var(--hot);outline-offset:5px}header{min-height:78px;display:flex;align-items:center;justify-content:space-between;gap:18px;border-bottom:1px solid var(--line)}.brand{font-weight:800;letter-spacing:-.04em}.tiny,.label{font-size:12px;color:var(--muted)}.label{text-transform:uppercase;letter-spacing:.1em}.hero{padding:84px 0 48px}h1{font-size:clamp(46px,8.5vw,88px);line-height:.96;letter-spacing:-.075em;margin:20px 0 28px}h1 span{color:var(--hot)}h2{font-family:ui-sans-serif,system-ui,sans-serif;font-size:30px;line-height:1.1;letter-spacing:-.04em;margin:0 0 18px}p,li{font-family:ui-sans-serif,system-ui,sans-serif;line-height:1.55;font-size:17px}.lead{max-width:760px;font-size:clamp(20px,3vw,28px);line-height:1.25}.actions{display:flex;gap:12px;flex-wrap:wrap;margin:28px 0}.button{display:inline-block;padding:13px 18px;border:1px solid var(--fg);border-radius:999px;text-decoration:none;font-size:14px;font-family:ui-sans-serif,system-ui,sans-serif;cursor:pointer}.primary{background:var(--fg);color:var(--bg)}.signals{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:60px}.card{border:1px solid var(--line);background:var(--card);padding:24px;border-radius:18px}.card strong{font-size:25px}.card p{font-size:16px;color:var(--muted);margin-bottom:0}.andon{border-color:var(--hot)}section{margin-bottom:60px}.split{display:grid;grid-template-columns:1.1fr 1fr;gap:24px}pre{overflow:auto;white-space:pre;max-width:100%;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:22px;font-size:13px;line-height:1.6}code{font-family:inherit}p code,li code{font-family:ui-monospace,monospace;font-size:.9em}.note{color:var(--muted);font-size:15px}footer{border-top:1px solid var(--line);padding:26px 0 42px;color:var(--muted);font-size:12px;line-height:1.7}
|
||||||
|
.join{border:1px solid var(--line);background:var(--card);border-radius:18px;padding:26px;margin:30px 0}.join-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}.join-row input[type=email],.join-row select{flex:1 1 180px;min-width:0;padding:12px 14px;border:1px solid var(--line);border-radius:999px;background:var(--bg);color:var(--fg);font-family:ui-sans-serif,system-ui,sans-serif;font-size:14px}.join-note{width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:var(--bg);color:var(--fg);font-family:ui-sans-serif,system-ui,sans-serif;font-size:14px;margin-bottom:4px}.join .thanks{display:none;font-family:ui-sans-serif,system-ui,sans-serif;font-size:16px}.join.joined .thanks{display:block}.join.joined .join-form{display:none}.secondary-actions{display:flex;gap:16px;flex-wrap:wrap;margin:14px 0 6px;font-family:ui-sans-serif,system-ui,sans-serif;font-size:14px}.pricing{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:60px}.plan{border:1px solid var(--line);background:var(--card);padding:22px;border-radius:18px;display:flex;flex-direction:column}.plan .tier{font-family:ui-sans-serif,system-ui,sans-serif;font-weight:800;font-size:18px;margin-bottom:4px}.plan .price{color:var(--hot);font-weight:800;font-size:15px;margin-bottom:12px}.plan .for{color:var(--muted);font-size:13px;margin-bottom:10px}.plan ul{margin:0 0 14px;padding-left:18px;font-size:14px}.plan li{margin-bottom:4px}.plan .source{margin-top:auto;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em}
|
||||||
|
@media(max-width:700px){.hero{padding-top:55px}.signals,.split,.pricing{grid-template-columns:1fr}header{flex-wrap:wrap;padding:16px 0}pre{padding:16px;font-size:12px}}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body><div class="wrap">
|
<body><div class="wrap">
|
||||||
@@ -17,15 +19,40 @@
|
|||||||
<section class="hero">
|
<section class="hero">
|
||||||
<div class="label">one task. one card. fresh evidence.</div>
|
<div class="label">one task. one card. fresh evidence.</div>
|
||||||
<h1>Make “done”<br><span>show its work.</span></h1>
|
<h1>Make “done”<br><span>show its work.</span></h1>
|
||||||
<p class="lead">A small wrapper for coding-agent work. Read <code>task.md</code>, compare Git changes to the agreed scope, and run your acceptance checks. Get a signal you can inspect.</p>
|
<p class="lead">Stop trusting an agent's own "I'm done." Read <code>task.md</code>, diff it against Git, run your acceptance checks — get DONE, WAIT, or ANDON you can inspect.</p>
|
||||||
<div class="actions"><a class="button primary" href="finishline.py" download>Download the CLI ↓</a><a class="button" href="#use">Try it in your repo</a><a class="button" href="README.md">Read the limits</a></div>
|
<div id="join" class="join">
|
||||||
<p class="note">Python 3.9+ · Git · macOS/Linux · no dependencies · no model calls</p>
|
<p class="thanks">Thanks — you're on the list. We'll email you about Finishline Supervisor only; nothing else, never shared.</p>
|
||||||
|
<form class="join-form" action="/api/signup" method="post" enctype="application/x-www-form-urlencoded">
|
||||||
|
<input type="hidden" name="venture" value="finishline-supervisor">
|
||||||
|
<input type="hidden" name="website" value="">
|
||||||
|
<div class="join-row">
|
||||||
|
<input type="email" name="email" required placeholder="you@repo.dev" aria-label="Email address">
|
||||||
|
<select name="plan" aria-label="Plan" required>
|
||||||
|
<option value="setup_pilot">Setup Pilot — $99 founding price</option>
|
||||||
|
<option value="team_early_access">Team Early Access — $9/seat/mo (waitlist)</option>
|
||||||
|
<option value="updates_only">Just the free CLI, send updates</option>
|
||||||
|
</select>
|
||||||
|
<button class="button primary" type="submit">Join early access</button>
|
||||||
|
</div>
|
||||||
|
<input class="join-note" type="text" name="note" placeholder="Optional: which repo, or what you need">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<p class="secondary-actions"><a href="finishline.py" download>Download the free CLI ↓</a><a href="README.md">Read the limits</a></p>
|
||||||
|
<p class="note">Python 3.9+ · Git · macOS/Linux · no dependencies · no model calls · no payment processor yet — signing up expresses interest, it never charges you · we only email you about this tool, never shared</p>
|
||||||
</section>
|
</section>
|
||||||
<div class="signals" aria-label="Exit signals">
|
<div class="signals" aria-label="Exit signals">
|
||||||
<article class="card"><strong>WAIT <small>1</small></strong><p>The checklist is incomplete, or fresh checks have not been run.</p></article>
|
<article class="card"><strong>WAIT <small>1</small></strong><p>The checklist is incomplete, or fresh checks have not been run.</p></article>
|
||||||
<article class="card andon"><strong>ANDON <small>2</small></strong><p>Stop and inspect: a check failed, scope drifted, or the task definition changed.</p></article>
|
<article class="card andon"><strong>ANDON <small>2</small></strong><p>Stop and inspect: a check failed, scope drifted, or the task definition changed.</p></article>
|
||||||
<article class="card"><strong>DONE <small>0</small></strong><p>Checklist complete. Scope fits. Every acceptance check just passed without changing observed evidence.</p></article>
|
<article class="card"><strong>DONE <small>0</small></strong><p>Checklist complete. Scope fits. Every acceptance check just passed without changing observed evidence.</p></article>
|
||||||
</div>
|
</div>
|
||||||
|
<section><div class="label">pricing</div><h2>Free forever. Paid tiers are early-access, not a checkout.</h2>
|
||||||
|
<div class="pricing">
|
||||||
|
<article class="plan"><div class="tier">Local</div><div class="price">$0</div><div class="for">Any dev comfortable writing their own checks</div><ul><li>Full CLI, example task card, runnable demo</li><li>Local evidence, no account, no telemetry</li></ul><div class="source">source: codex + claude</div></article>
|
||||||
|
<article class="plan"><div class="tier">Setup Pilot</div><div class="price">$99 one-time, founding price</div><div class="for">Small teams wanting a reliable agent handoff on one repo</div><ul><li>One task-contract template</li><li>Up to 3 acceptance checks</li><li>One setup review</li></ul><div class="source">source: codex</div></article>
|
||||||
|
<article class="plan"><div class="tier">Team Early Access</div><div class="price">$9/seat/mo, planned</div><div class="for">Teams running agents across multiple repos</div><ul><li>Hosted card-history dashboard</li><li>GitHub PR status check gating merge on DONE</li><li>Slack alert on ANDON</li></ul><div class="source">source: claude</div></article>
|
||||||
|
</div>
|
||||||
|
<p class="note">Join above and pick a plan — this is a waitlist, not billing. <a href="LAUNCH.md">Full launch plan and synthesis →</a></p>
|
||||||
|
</section>
|
||||||
<section class="split">
|
<section class="split">
|
||||||
<div><div class="label">why this exists</div><h2>The task survives the handoff.</h2><p>A new agent session can read the same <code>finishline.json</code>: pinned task definition, base commit, allowed paths, acceptance commands, and the last 20 evidence runs.</p><p>Inspired by <a href="https://github.com/anthropics/claude-code/issues/79948">anthropics/claude-code#79948</a>, a request for an accountability layer closed as <em>not planned</em>.</p><p class="note">This implements a small repo-local slice of that request. It cannot provide the native, unbypassable enforcement boundary the issue asks for.</p></div>
|
<div><div class="label">why this exists</div><h2>The task survives the handoff.</h2><p>A new agent session can read the same <code>finishline.json</code>: pinned task definition, base commit, allowed paths, acceptance commands, and the last 20 evidence runs.</p><p>Inspired by <a href="https://github.com/anthropics/claude-code/issues/79948">anthropics/claude-code#79948</a>, a request for an accountability layer closed as <em>not planned</em>.</p><p class="note">This implements a small repo-local slice of that request. It cannot provide the native, unbypassable enforcement boundary the issue asks for.</p></div>
|
||||||
<div><div class="label">a real three-run task</div><h2>Build. Check. Finish.</h2><p>We dogfooded the wrapper on a disposable Git repo: build a greeting CLI, verify its exact output, document usage. The first output was <code>almost</code>; the required output was <code>finish line</code>.</p><p><a href="demo-evidence.json">Inspect the full recorded evidence →</a><br><a href="demo.txt">Read the recorded terminal output →</a></p></div>
|
<div><div class="label">a real three-run task</div><h2>Build. Check. Finish.</h2><p>We dogfooded the wrapper on a disposable Git repo: build a greeting CLI, verify its exact output, document usage. The first output was <code>almost</code>; the required output was <code>finish line</code>.</p><p><a href="demo-evidence.json">Inspect the full recorded evidence →</a><br><a href="demo.txt">Read the recorded terminal output →</a></p></div>
|
||||||
@@ -54,5 +81,7 @@ python3 /path/to/finishline.py check
|
|||||||
# After reviewing the commands:
|
# After reviewing the commands:
|
||||||
python3 /path/to/finishline.py check --run-checks</code></pre><p>Mark checklist items <code>[x]</code> as you finish them. Run again at each handoff. A prior passing run never counts as a fresh check. ANDON exits 2, WAIT exits 1, DONE exits 0.</p></section>
|
python3 /path/to/finishline.py check --run-checks</code></pre><p>Mark checklist items <code>[x]</code> as you finish them. Run again at each handoff. A prior passing run never counts as a fresh check. ANDON exits 2, WAIT exits 1, DONE exits 0.</p></section>
|
||||||
<section class="card"><div class="label">honest limits</div><h2>Evidence, with a trust boundary you supply.</h2><ul><li>Anyone who can edit the card, script, or checks can bypass this wrapper. It is not a sandbox or native agent enforcement.</li><li>Checks execute local programs with your permissions and environment. They can have side effects; there is no rollback. No automatic merge, deploy, or agent orchestration.</li><li>Scope covers current tracked and untracked Git changes relative to the base. Ignored files, external state, reverted changes, and the card itself are excluded.</li><li>DONE is only as strong as your acceptance checks. A deployment needs its own check. Command output is discarded; evidence contains exit codes and paths. Keep secrets out of task text, filenames, and argv.</li></ul><p class="note">Verified on the local Mac/Python host and in the existing Colima Linux runner container: 14 tests and the three-run demo passed in both. The CLI has not been tested on Fly or Boring.</p></section>
|
<section class="card"><div class="label">honest limits</div><h2>Evidence, with a trust boundary you supply.</h2><ul><li>Anyone who can edit the card, script, or checks can bypass this wrapper. It is not a sandbox or native agent enforcement.</li><li>Checks execute local programs with your permissions and environment. They can have side effects; there is no rollback. No automatic merge, deploy, or agent orchestration.</li><li>Scope covers current tracked and untracked Git changes relative to the base. Ignored files, external state, reverted changes, and the card itself are excluded.</li><li>DONE is only as strong as your acceptance checks. A deployment needs its own check. Command output is discarded; evidence contains exit codes and paths. Keep secrets out of task text, filenames, and argv.</li></ul><p class="note">Verified on the local Mac/Python host and in the existing Colima Linux runner container: 14 tests and the three-run demo passed in both. The CLI has not been tested on Fly or Boring.</p></section>
|
||||||
</main><footer>notplanned · build what fell off the roadmap<br>Pure wrapper. No Codex or Claude changes. No telemetry. <a href="README.md">Full usage and limits</a>.</footer>
|
</main><footer>notplanned · build what fell off the roadmap<br>Pure wrapper. No Codex or Claude changes. No telemetry on the CLI. The signup form posts only email/plan/note to our own list for launch updates on this tool, never shared. <a href="README.md">Full usage and limits</a>.</footer>
|
||||||
</div></body></html>
|
</div>
|
||||||
|
<script>if(new URLSearchParams(location.search).get("joined")==="1"){var j=document.getElementById("join");if(j)j.classList.add("joined");}</script>
|
||||||
|
</body></html>
|
||||||
Reference in new issue
Block a user