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>
148 lines
5.6 KiB
HTML
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 && 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 & 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>
|