Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@
<title>Harness — run a team of Claude Code agents</title>
<meta
name="description"
content="A native macOS app for managing parallel Claude Code and Codex sessions across git worktrees, with reliable status detection and PR tracking."
content="A native app for managing parallel Claude Code and Codex sessions across git worktrees, with reliable status detection and PR tracking."
/>

<meta property="og:site_name" content="Harness" />
<meta property="og:title" content="Harness — run a team of agents" />
<meta
property="og:description"
content="Run ten Claudes at once without losing your mind. A native macOS app for managing parallel Claude Code and Codex sessions across git worktrees."
content="Run ten Claudes at once without losing your mind. A native app for managing parallel Claude Code and Codex sessions across git worktrees."
/>
<meta property="og:image" content="https://harness.mikelyons.org/og-image.png" />
<meta property="og:image" content="https://harness.mikelyons.org/og-image.png?v=chat-mode" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:type" content="image/png" />
<meta
property="og:image:alt"
content="Screenshot of Harness showing the worktree sidebar, terminal tabs, and changed-files panel."
content="Screenshot of Harness with the Chat mode interface showing a Claude conversation, approval cards, and the worktree sidebar."
/>
<meta property="og:url" content="https://harness.mikelyons.org/" />
<meta property="og:type" content="website" />
Expand All @@ -30,12 +30,12 @@
<meta name="twitter:title" content="Harness — run a team of agents" />
<meta
name="twitter:description"
content="Run ten Claudes at once without losing your mind. A native macOS app for managing parallel Claude Code and Codex sessions across git worktrees."
content="Run ten Claudes at once without losing your mind. A native app for managing parallel Claude Code and Codex sessions across git worktrees."
/>
<meta name="twitter:image" content="https://harness.mikelyons.org/og-image.png" />
<meta name="twitter:image" content="https://harness.mikelyons.org/og-image.png?v=chat-mode" />
<meta
name="twitter:image:alt"
content="Screenshot of Harness showing the worktree sidebar, terminal tabs, and changed-files panel."
content="Screenshot of Harness with the Chat mode interface showing a Claude conversation, approval cards, and the worktree sidebar."
/>

<link rel="icon" type="image/png" href="/icon.png" />
Expand Down
9 changes: 7 additions & 2 deletions site/og-build/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@

def data_uri(path: str) -> str:
ext = os.path.splitext(path)[1].lower()
mime = "image/jpeg" if ext in (".jpg", ".jpeg") else "image/png"
if ext in (".jpg", ".jpeg"):
mime = "image/jpeg"
elif ext == ".webp":
mime = "image/webp"
else:
mime = "image/png"
with open(path, "rb") as f:
return f"data:{mime};base64," + base64.b64encode(f.read()).decode()

Expand Down Expand Up @@ -51,7 +56,7 @@ def render(template_name: str, output_name: str, replacements: dict) -> None:

def main() -> int:
icon = data_uri(os.path.join(PUBLIC, "icon.png"))
shot = data_uri(os.path.join(PUBLIC, "harness-demo-poster.jpg"))
shot = data_uri(os.path.join(PUBLIC, "announcements/img/chat-mode.webp"))

render("template.html", "og-image.png", {
"ICON_DATA_URI": icon,
Expand Down
2 changes: 1 addition & 1 deletion site/og-build/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
<div class="title">Harness</div>
</div>
<div class="tagline">Run a team of agents.</div>
<div class="sub">Run ten Claudes at once without losing your mind — a native macOS app for parallel Claude Code sessions.</div>
<div class="sub">Run ten Claudes at once without losing your mind — a native app for parallel Claude Code sessions.</div>
<div class="shot-frame">
<img src="SHOT_DATA_URI" />
</div>
Expand Down
2 changes: 1 addition & 1 deletion site/public/guide.html
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ <h2 class="text-2xl font-bold text-neutral-100">Where Harness comes in</h2>
is a pitch for a tool I built for when it isn't.
</p>
<p>
Harness is a macOS app that puts every worktree and every Claude
Harness is a native app that puts every worktree and every Claude
session in a single window. It's opinionated around the specific
workflow of running several agents at once, and it handles the
papercuts that pile up past two or three parallel tasks.
Expand Down
Binary file modified site/public/og-image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading