Update claude-teams blog: link to Claude docs, mention auto env setup (#2426)

* Link to Claude agent-teams docs, mention auto env var setup

* Add 0.63.0 changelog feature highlights

* Simplify GPL blog post to one paragraph

* Remove nightly-only warning from claude-teams and omo docs

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
This commit is contained in:
Lawrence Chen 2026-03-31 05:28:40 -07:00 committed by GitHub
parent 51fe28e45d
commit 5835bff110
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 43 additions and 25 deletions

View file

@ -62,6 +62,9 @@ export default function CmuxClaudeTeamsPage() {
<p className="mt-6"> <p className="mt-6">
{t.rich("p1", { {t.rich("p1", {
code: (chunks) => <code>{chunks}</code>, code: (chunks) => <code>{chunks}</code>,
agentTeamsLink: (chunks) => (
<a href="https://code.claude.com/docs/en/agent-teams">{chunks}</a>
),
})} })}
</p> </p>
<p> <p>

View file

@ -49,8 +49,6 @@ export default function GplPage() {
</time> </time>
<p className="mt-6">{t("p1")}</p> <p className="mt-6">{t("p1")}</p>
<p>{t("p2")}</p>
<p>{t("p3")}</p>
</> </>
); );
} }

View file

@ -29,7 +29,7 @@ export const blogPosts = [
title: "cmux is now GPL", title: "cmux is now GPL",
date: "2026-03-30", date: "2026-03-30",
summary: summary:
"cmux relicensed from AGPL to GPL. Copyleft stays, corporate adoption gets easier.", "cmux relicensed from AGPL-3.0 to GPL-3.0.",
}, },
{ {
slug: "cmd-shift-u", slug: "cmd-shift-u",

View file

@ -1,8 +1,6 @@
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server"; import { getTranslations } from "next-intl/server";
import { CodeBlock } from "../../../components/code-block"; import { CodeBlock } from "../../../components/code-block";
import { Callout } from "../../../components/callout";
import { Link } from "../../../../../i18n/navigation";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) { export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params; const { locale } = await params;
@ -20,12 +18,6 @@ export default function ClaudeCodeTeamsPage() {
<> <>
<h1>{t("title")}</h1> <h1>{t("title")}</h1>
<Callout type="warn">
{t.rich("nightlyWarning", {
nightly: (chunks) => <Link href="/nightly" className="underline">{chunks}</Link>,
})}
</Callout>
<p>{t("intro")}</p> <p>{t("intro")}</p>
<video <video

View file

@ -1,8 +1,6 @@
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import { getTranslations } from "next-intl/server"; import { getTranslations } from "next-intl/server";
import { CodeBlock } from "../../../components/code-block"; import { CodeBlock } from "../../../components/code-block";
import { Callout } from "../../../components/callout";
import { Link } from "../../../../../i18n/navigation";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) { export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params; const { locale } = await params;
@ -20,12 +18,6 @@ export default function OhMyOpenCodePage() {
<> <>
<h1>{t("title")}</h1> <h1>{t("title")}</h1>
<Callout type="warn">
{t.rich("nightlyWarning", {
nightly: (chunks) => <Link href="/nightly" className="underline">{chunks}</Link>,
})}
</Callout>
<p>{t("intro")}</p> <p>{t("intro")}</p>
<video <video

View file

@ -26,6 +26,41 @@ export interface VersionMedia {
} }
export const changelogMedia: Record<string, VersionMedia> = { export const changelogMedia: Record<string, VersionMedia> = {
"0.63.0": {
title: "SSH, Claude Code Teams, oh-my-openagent, Browser Import, Minimal Mode",
features: [
{
title: "SSH",
description:
"cmux ssh user@remote creates a workspace for a remote machine. Browser panes route through the remote network so localhost just works. Drag an image into a remote session to upload via scp. Coding agent notifications come home to your local sidebar. Reconnects on drops.",
},
{
title: "Claude Code Teams",
description:
"cmux claude-teams launches Claude Code's experimental teammate mode with one command. It sets up the environment, fakes a tmux session, and translates tmux commands into native cmux splits. Teammates stack vertically in a right column with sidebar metadata and notifications.",
},
{
title: "oh-my-openagent",
description:
"cmux omo integrates oh-my-openagent (formerly oh-my-opencode), which orchestrates specialist agents across Claude, GPT, and Gemini in parallel. Same tmux shim as claude-teams, auto-installs the plugin, notifications route through cmux.",
},
{
title: "Browser Profile Import",
description:
"Import cookies, history, and sessions from Chrome, Arc, Brave, Firefox, Safari, and 20+ browsers. The import wizard detects installed browsers, lets you pick profiles, and injects everything into cmux's browser panes so you're already logged in.",
},
{
title: "Minimal Mode",
description:
"Hide the titlebar for a distraction-free terminal. Controls move to the sidebar and appear on hover. Toggle from the command palette or Settings.",
},
{
title: "Custom Commands",
description:
"Define project-specific actions in cmux.json that launch from the command palette. One file per repo, no global config needed.",
},
],
},
"0.62.0": { "0.62.0": {
title: "Markdown Viewer, Browser Find, Vi Copy Mode, and Localization", title: "Markdown Viewer, Browser Find, Vi Copy Mode, and Localization",
features: [ features: [

View file

@ -122,7 +122,7 @@
}, },
"gpl": { "gpl": {
"metaTitle": "cmux is now GPL", "metaTitle": "cmux is now GPL",
"metaDescription": "cmux relicensed from AGPL to GPL. Copyleft stays, corporate adoption gets easier." "metaDescription": "cmux relicensed from AGPL-3.0 to GPL-3.0."
}, },
"cmuxSsh": { "cmuxSsh": {
"metaTitle": "cmux SSH", "metaTitle": "cmux SSH",
@ -145,7 +145,7 @@
"title": "Claude Code teammate agents as native cmux panes", "title": "Claude Code teammate agents as native cmux panes",
"summary": "Claude Code's teammate mode requires tmux. cmux fakes it so teammates become native splits with sidebar metadata and notifications.", "summary": "Claude Code's teammate mode requires tmux. cmux fakes it so teammates become native splits with sidebar metadata and notifications.",
"date": "March 30, 2026", "date": "March 30, 2026",
"p1": "Claude Code has an experimental teammate mode that spawns sub-agents in parallel. It manages them by issuing tmux commands (<code>split-window</code>, <code>send-keys</code>, <code>capture-pane</code>, <code>select-layout</code>), so if you're not in tmux, it doesn't work. <code>cmux claude-teams</code> places a shim on PATH that intercepts every tmux call and translates it into cmux's split/workspace API. It sets a fake <code>TMUX</code> env var so Claude thinks it's in tmux, then execs into <code>claude --teammate-mode auto</code>.", "p1": "Claude Code has an experimental <agentTeamsLink>teammate mode</agentTeamsLink> that spawns sub-agents in parallel. It requires tmux and setting <code>CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1</code>. <code>cmux claude-teams</code> handles all of that for you: it sets the env var, places a tmux shim on PATH that translates every tmux command (<code>split-window</code>, <code>send-keys</code>, <code>capture-pane</code>) into cmux's native split/workspace API, and execs into <code>claude --teammate-mode auto</code>. One command.",
"p2": "The shim translates <code>split-window</code> into <code>surface.split</code>, <code>send-keys</code> into <code>surface.send_text</code>, <code>capture-pane</code> into <code>surface.read_text</code>. Teammates stack vertically in a right column, auto-equalizing as agents spawn and exit. Every pane shows up in the sidebar with notifications. Works over SSH via the Go relay daemon.", "p2": "The shim translates <code>split-window</code> into <code>surface.split</code>, <code>send-keys</code> into <code>surface.send_text</code>, <code>capture-pane</code> into <code>surface.read_text</code>. Teammates stack vertically in a right column, auto-equalizing as agents spawn and exit. Every pane shows up in the sidebar with notifications. Works over SSH via the Go relay daemon.",
"p3": "The same shim powers <omoLink><code>cmux omo</code></omoLink> for oh-my-openagent (formerly oh-my-opencode)." "p3": "The same shim powers <omoLink><code>cmux omo</code></omoLink> for oh-my-openagent (formerly oh-my-opencode)."
}, },
@ -158,11 +158,9 @@
}, },
"gpl": { "gpl": {
"title": "cmux is now GPL", "title": "cmux is now GPL",
"summary": "cmux relicensed from AGPL to GPL. Copyleft stays, corporate adoption gets easier.", "summary": "cmux relicensed from AGPL-3.0 to GPL-3.0.",
"date": "March 30, 2026", "date": "March 30, 2026",
"p1": "cmux was AGPL-3.0. AGPL's network-use clause (Section 13) is designed for server software, requiring anyone who runs a modified version over a network to publish their source. cmux is a desktop app. Nobody runs cmux over a network. But several companies emailed us saying their org has a blanket AGPL ban, blocking adoption entirely.", "p1": "cmux relicensed from AGPL-3.0 to GPL-3.0. AGPL's network-use clause is irrelevant for a desktop app, but many companies ban AGPL entirely. GPL drops that clause while still requiring forks to stay open source. Dual-license (GPL + commercial) stays the same."
"p2": "We relicensed to GPL-3.0. GPL still requires any distributed fork to publish its full source under GPL, which prevents proprietary commercial forks. It drops only the network-use clause, which cmux never needed. This matches Zed's approach: GPL for the editor, AGPL only for server components.",
"p3": "The dual-license structure stays the same: GPL for open source, commercial license available for organizations that can't do GPL. Copyright stays with Manaflow. Personal and experimental forks remain fully allowed."
}, },
"cmuxSsh": { "cmuxSsh": {
"title": "cmux SSH", "title": "cmux SSH",