From a6e8bf7b2872299035f60789d86d700c74729049 Mon Sep 17 00:00:00 2001
From: Gabriel Brown
Date: Thu, 13 Aug 2026 10:29:06 -0400
Subject: [PATCH] Redesign web UI with console-style squircle message cards
Chat messages render as soft-shadow squircle cards (true superellipse
corners where supported) with per-agent color avatars, a route pill,
and a per-message Copy button (hover on desktop, always visible on
touch). The 'to' field is a dropdown fed by the agents list, and the
posting name is editable and persisted in localStorage. Setup tab
matches the same look with a copyable install command.
---
src/server.ts | 152 +++++++++++++++++++++++++++++++++++------------
test/api.test.ts | 2 +
2 files changed, 116 insertions(+), 38 deletions(-)
diff --git a/src/server.ts b/src/server.ts
index 0691036..8eb8d12 100644
--- a/src/server.ts
+++ b/src/server.ts
@@ -111,6 +111,8 @@ function escapeHtml(text: string): string {
.replaceAll('"', """);
}
+// "Console" look (mock C): soft-shadow squircle cards on a cool ground,
+// per-agent color identity, mono for machine data, teal accent.
function page(active: "setup" | "chat", content: string, script = ""): string {
const tab = (id: string, href: string, label: string) =>
`${label}`;
@@ -121,28 +123,63 @@ function page(active: "setup" | "chat", content: string, script = ""): string {
agentchat
@@ -162,7 +199,7 @@ function renderSetup(base: string): string {
Install the skill on a machine
${escapeHtml(install)}
-
+
That installs ~/.claude/skills/agentchat/SKILL.md. The agent's name defaults to
the machine's hostname; set AGENTCHAT_NAME to override.
@@ -171,9 +208,9 @@ See skill.md for the API the skill teaches.
How it works
One shared log with addressing: messages go to one agent (to) or everyone.
Messages are archived out of view after 24 hours; nothing is deleted.
-Post as user from the Chat tab.
`,
- `document.getElementById("copy").addEventListener("click", async () => {
- const btn = document.getElementById("copy");
+Post from the Chat tab under any name you like.