diff --git a/CLAUDE.md b/CLAUDE.md index be7b7fb8..7108855d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -493,7 +493,16 @@ These are how the user wants Claude to behave when working on this repo: in chat (often via .env reminders the harness sends), warn them once that it's now in conversation history and tell them to rotate. -8. **GitHub comments use a standard signature.** You're authorized to leave +8. **Don't put boxes around screenshots on the marketing site.** No + `border`, no `border-radius` wrapper, no glow `box-shadow` framing. + The dark background on `site/public/*.html` is already the frame; + adding a border to an `` makes it look enclosed in a card it + isn't part of. Plain `` (width 100%, `display: block`) is the + right default. The user has had to undo this on multiple sessions — + if a task brief asks for a border around a screenshot, push back + before shipping it. + +9. **GitHub comments use a standard signature.** You're authorized to leave comments on issues and PRs (via the `gh` CLI or the GitHub REST/GraphQL API) without re-confirming each time, provided the comment ends with a one-line signature so readers know the comment came from an agent acting diff --git a/site/public/announcements.html b/site/public/announcements.html new file mode 100644 index 00000000..5fd07dbf --- /dev/null +++ b/site/public/announcements.html @@ -0,0 +1,219 @@ + + + + + + Announcements — Harness + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
News
+

+ Announcements. +

+

+ A modern chat interface for Claude Code, built into Harness. + Same agent, same auth, same MCP setup. +

+
+ + +
+
+
Loading announcements…
+
+
+ + + + + + + diff --git a/site/public/announcements.json b/site/public/announcements.json index 1b94c6eb..28d9526f 100644 --- a/site/public/announcements.json +++ b/site/public/announcements.json @@ -1,3 +1,11 @@ { - "announcements": [] + "announcements": [ + { + "id": "introducing-chat-mode-2026-05", + "title": "Introducing Chat mode", + "href": "https://harness.mikelyons.org/announcements/introducing-chat-mode.html", + "publishedAt": "2026-05-25", + "summary": "A modern chat interface for Claude Code, built into Harness. Same agent, same auth, same MCP setup." + } + ] } diff --git a/site/public/announcements/img/chat-mode.webp b/site/public/announcements/img/chat-mode.webp new file mode 100644 index 00000000..bd235b2e Binary files /dev/null and b/site/public/announcements/img/chat-mode.webp differ diff --git a/site/public/announcements/img/terminal-mode.webp b/site/public/announcements/img/terminal-mode.webp new file mode 100644 index 00000000..4d89591d Binary files /dev/null and b/site/public/announcements/img/terminal-mode.webp differ diff --git a/site/public/announcements/introducing-chat-mode.html b/site/public/announcements/introducing-chat-mode.html new file mode 100644 index 00000000..de39157f --- /dev/null +++ b/site/public/announcements/introducing-chat-mode.html @@ -0,0 +1,404 @@ + + + + + + Introducing Chat mode | Harness + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Announcements + +
+ Announcement · May 25, 2026 +
+

+ Introducing Chat mode. +

+

+ A modern chat interface for Claude Code, built into Harness. + Same agent, same auth, same MCP setup. +

+
+ + +
+
+
+ The same Harness session rendered in Chat mode, with assistant message bubbles, an ASCII Hello World result, and a tool-call card. + The same Harness session rendered in Terminal mode, with the Claude Code TUI showing raw streamed output and a > prompt. + Terminal mode + Chat mode + + +
+
+

Same session, same prompts. Drag to compare.

+
+ + +
+ +
+

A real chat, not a terminal

+
+

+ Claude Code ships as a TUI. Resize the window and your + scrollback reflows. Every approval is > 1 + against a wall of streamed text. Long tool calls bury the + conversation underneath their output. +

+

+ Chat mode renders the same session as a React UI. Same + binary, same config, same MCP servers. Messages are + persistent DOM, not redrawn cells. Tool calls are + collapsible cards. Approvals are inline buttons. The + composer auto-grows up to eight lines and keeps attachments + between sends. +

+
+
+ +
+

What's different

+
+
+

Scrollback that survives

+

Resize the window or split the pane. Messages stay where they are. No reflow, no clipped tool output.

+
+
+

Inline approval cards

+

Every Bash or write shows up as a card with the command, named buttons, and an "allow this session" option for ones you'll OK repeatedly.

+
+
+

@-mentions for files

+

Type @ and pick from a fuzzy-matched file list. Attached as context, not pasted into prose.

+
+
+

Send-on-Enter, if you want it

+

Default is Enter for newline, ⌘↵ to send. Flip the setting if Enter should send instead.

+
+
+

Permission modes per chat

+

Start chats in accept edits, ask every time, or plan. Change mid-chat from the statusline picker.

+
+
+

Slept tabs save RAM

+

Chats you haven't touched in a while tear down their subprocess. Click to wake. History is intact, the agent spins back up.

+
+
+
+ +
+

Not a replacement

+
+

+ Terminal Claude isn't going anywhere. It's still the right + option if you live in the TUI, run a beta build, or want the + raw Claude Code CLI. In Harness it's now called + Terminal mode. Existing tabs keep working. +

+

+ Chat mode is a parallel option, pinned to a Claude Code + binary that ships with each Harness release. That keeps the + approval-card schema and streamed JSON shape stable between + updates. Both interfaces share ~/.claude/, so + auth and MCP are configured once. +

+
+
+ +
+

Try it

+
+

+ Open Settings → Agent → Interface and pick + Chat mode. New Claude tabs spawn into the + chat UI from then on. To flip a single tab without changing + the default, ⇧-click the "+" in the tab strip. Right-click an + existing tab to switch its interface in place. +

+

+ If you don't see it yet, update from + the latest release. +

+
+
+ + +
+

Get the latest Harness

+

+ Chat mode ships in the current release. Free, open source, + macOS for now. +

+ + Download for macOS + +
+
+ + + + + + + diff --git a/site/src/components/HeaderNav.tsx b/site/src/components/HeaderNav.tsx index 2567c53c..b466bebe 100644 --- a/site/src/components/HeaderNav.tsx +++ b/site/src/components/HeaderNav.tsx @@ -16,6 +16,9 @@ export function HeaderNav() { Guide + + Announcements + Install