Files
bench/site/templates/home.html
T
istosandClaude Opus 5 62caafe157 site: a minisite generated from the repo's own markdown
bench has no public page. site/ is the machinery for one: a manifest,
a generator, two layouts from the turn-2 docs design, and the Daylight
half of the board's own token set.

Nothing here is transcribed. Every page body is a heading slice of a
file that already documents bench, and site/pages.json is the only
place that mapping is written down — the IA is editorial judgement, so
it lives in one readable file rather than in a directory convention.

The point is the failure: a from/to heading the source no longer
contains stops the build naming the route, the file and the heading,
and every page renders before the output directory is touched, so a
drifting rebuild leaves the last good build standing instead of
replacing it with an empty one. Repo-relative links come out as site
routes or GitHub links; a dead one stops the build too.

Rendering is markdown-it-py, pinned in site/requirements.txt. The
stdlib-only law binds manager/core/ — the tool people install — and
site/ is neither shipped nor installed, so a hand-rolled parser would
have been risk spent in the wrong place on a document that leans on
fenced code, nested lists and inline code throughout.

Templates are string.Template: $name substitutes and a literal dollar
doubles, because str.format's braces collide with every line of CSS.

Fonts are self-hosted and same-origin: no page bench serves may need a
request to a third party to be read. fetch-fonts.py downloads the seven
woff2 files once; until they are there the build says which are missing
and the pages fall back to the system stack.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 11:30:34 +02:00

148 lines
5.6 KiB
HTML

<!doctype html>
<!-- Layout "home" — 1b Dockside from the turn-2 docs design: a landing
that is mostly a terminal and a set of doors.
The hero copy and the doors are authored here on purpose; task 33
owns the landing page's words. Everything under "The five stages"
is generated from the source named in site/pages.json.
Placeholders are string.Template's, so every literal dollar in the
markup is doubled — which is why the shell prompts in the terminal
below look doubled in the source and single on the page. -->
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>$site_title · $site_tagline</title>
<meta name="description" content="$description">
<link rel="canonical" href="$canonical">
<link rel="icon" href="/static/favicon.svg">
<link rel="stylesheet" href="/static/site.css">
</head>
<body class="page-home">
<div class="topbar">
<span class="topbar-org">12vectors</span>
<span class="topbar-sep">/</span>
<span class="topbar-repo">bench</span>
<span class="spacer"></span>
<span>$version</span>
</div>
<header class="masthead masthead-flat">
<a class="wordmark" href="/">
<span class="wordmark-name">$site_title</span>
<span class="wordmark-tag">$site_tagline</span>
</a>
<span class="spacer"></span>
<nav class="nav">
$nav
</nav>
<a class="button" href="$repo_url">GitHub ↗</a>
</header>
<section class="hero">
<div class="hero-copy">
<span class="eyebrow">Documentation</span>
<h1>Put the agents<br>on the bench.</h1>
<p class="lede">Task files in stage directories are the only source of
truth. A stdlib-only board narrates what happens to them — agents
working in git worktrees, PRs opening on review, CI on the cards —
and never merges anything itself.</p>
<div class="hero-actions">
<a class="button button-solid button-lg" href="#stages">Read the stages</a>
<a class="button button-lg" href="$repo_url#install-into-a-repo">Install into a repo</a>
</div>
<span class="mono aside-note">no account, no service, no database. it is
python 3 on your own machine.</span>
</div>
<div class="terminal">
<div class="terminal-bar">
<span class="dot dot-alarm"></span>
<span class="dot dot-calm"></span>
<span class="mono terminal-title">~/your-repo</span>
</div>
<pre class="terminal-body"><span class="t-calm">$$</span> mkdir .task-manager &amp;&amp; curl -L \
<span class="t-dim">https://github.com/12vectors/bench/releases/latest/download/bench.tar.gz</span> \
| tar -xz -C .task-manager
<span class="t-calm">$$</span> ./.task-manager/start.sh
<span class="t-muted">No .task-manager/manager/local/.env yet — a few questions and bench writes one.</span>
solo or team? <span class="t-accent">[solo]</span>:
which agent adapter? <span class="t-accent">[claude]</span>:
what command runs this project's tests? <span class="t-accent">[python3 -m unittest]</span>:
Task board for ~/your-repo/.task-manager/tasks
<span class="t-accent">http://127.0.0.1:26071/</span>
<span class="t-dim">Ctrl-C to stop</span></pre>
</div>
</section>
<section class="generated" id="stages">
<div class="prose">
<h2 class="generated-heading">The five stages</h2>
<p class="generated-note mono">from <span>$source_path</span> — the
section below is this file's, not a retelling of it</p>
$body
</div>
</section>
<section class="doors">
<div class="door">
<span class="mono door-index">01</span>
<span class="door-title">Install</span>
<span class="door-text">Untar it into <span class="mono">.task-manager/</span>,
run <span class="mono">start.sh</span>, answer three questions.
Port 26071, pinned.</span>
</div>
<div class="door">
<span class="mono door-index">02</span>
<span class="door-title">The five stages</span>
<span class="door-text">backlog → to-do → in-progress → review → done.
The directory a file sits in <i>is</i> its status.</span>
</div>
<div class="door">
<span class="mono door-index">03</span>
<span class="door-title">Agents on the board</span>
<span class="door-text">▸ start work makes a worktree and a branch, runs
the agent headless, and moves the card when it exits.</span>
</div>
<div class="door">
<span class="mono door-index">04</span>
<span class="door-title">PRs &amp; review</span>
<span class="door-text">A card entering review gets a PR opened for it.
Then ◔ review PR, ⚑ copilot, ↻ act on PR — until it settles.</span>
</div>
<div class="door">
<span class="mono door-index">05</span>
<span class="door-title">Team mode</span>
<span class="door-text"><span class="mono">BOARD_SYNC=1</span> makes
origin/main the truth. Moves commit and push themselves; boards pull
on a beat.</span>
</div>
<div class="door door-dark">
<span class="mono door-index">06</span>
<span class="door-title">The three-layer law</span>
<span class="door-text">Core knows tasks, worktrees, PRs and events.
Drivers know apps, adapters know vendors, local/ knows your
project.</span>
</div>
</section>
<footer class="footer">
<pre class="footer-mark"> ___________________
|___________________|
|| ||
|| ||</pre>
<div class="footer-id">
<span class="footer-name">$site_title</span>
<span class="mono">a 12vectors product · built in the open</span>
</div>
<span class="spacer"></span>
<a class="mono footer-repo" href="$repo_url">github.com/12vectors/bench</a>
</footer>
</body>
</html>