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
5 changes: 5 additions & 0 deletions web/app/[locale]/(landing)/docs/cloud/cli/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { auditedDocsMetadata } from "../../audited-docs-metadata";
import { DocsSchema } from "../../docs-schema";
import { CodeBlock } from "@/app/[locale]/components/code-block";
import { DocsHeading } from "@/app/[locale]/components/docs-heading";
import { DocsLink as Link } from "@/app/[locale]/components/docs-link";

export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
Expand All @@ -13,6 +14,9 @@ export async function generateMetadata({ params }: { params: Promise<{ locale: s
});
}

const linkClass =
"underline underline-offset-2 decoration-link-underline hover:decoration-foreground transition-colors";

export default async function CloudCliPage({
params,
}: {
Expand Down Expand Up @@ -132,6 +136,7 @@ cmux vpn revoke`}</CodeBlock>
cmux ai-accounts upload claude|codex|anthropic-key|openai-key [--label <label>] [--team <id>]
cmux coderouter status
cmux coderouter machines`}</CodeBlock>
<p><Link href="/docs/coderouter/cli" className={linkClass}>{t("coderouterLink")}</Link></p>

<DocsHeading level={2} id="scripting-checklist">{t("preflightTitle")}</DocsHeading>
<p>{t("preflightDesc")}</p>
Expand Down
5 changes: 5 additions & 0 deletions web/app/[locale]/(landing)/docs/cloud/workspaces/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { auditedDocsMetadata } from "../../audited-docs-metadata";
import { DocsSchema } from "../../docs-schema";
import { CodeBlock } from "@/app/[locale]/components/code-block";
import { DocsHeading } from "@/app/[locale]/components/docs-heading";
import { DocsLink as Link } from "@/app/[locale]/components/docs-link";

export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
Expand All @@ -13,6 +14,9 @@ export async function generateMetadata({ params }: { params: Promise<{ locale: s
});
}

const linkClass =
"underline underline-offset-2 decoration-link-underline hover:decoration-foreground transition-colors";

export default async function CloudWorkspacesPage({
params,
}: {
Expand Down Expand Up @@ -88,6 +92,7 @@ cmux vm layout apply brave-otter layout.json --open`}</CodeBlock>
<CodeBlock lang="bash">{`cmux ai-accounts list
cmux ai-accounts upload claude
cmux coderouter status`}</CodeBlock>
<p><Link href="/docs/coderouter" className={linkClass}>{t("coderouterLink")}</Link></p>

<DocsHeading level={2} id="guest-cli">{t("guestTitle")}</DocsHeading>
<p>{t("guestDesc")}</p>
Expand Down
117 changes: 117 additions & 0 deletions web/app/[locale]/(landing)/docs/coderouter/agents/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
import { getTranslations } from "next-intl/server";
import { auditedDocsMetadata } from "../../audited-docs-metadata";
import { DocsSchema } from "../../docs-schema";
import { CodeBlock } from "@/app/[locale]/components/code-block";
import { DocsHeading } from "@/app/[locale]/components/docs-heading";
import { DocsLink as Link } from "@/app/[locale]/components/docs-link";

export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
return auditedDocsMetadata({
locale,
pageKey: "coderouterAgents",
path: "/docs/coderouter/agents",
});
}

const linkClass =
"underline underline-offset-2 decoration-link-underline hover:decoration-foreground transition-colors";

export default async function CoderouterAgentsPage({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.coderouterAgents" });

return (
<>
<DocsSchema namespace="docs.coderouterAgents" path="/docs/coderouter/agents" />
<DocsHeading level={1} id="title">{t("title")}</DocsHeading>
<p>{t("intro")}</p>

<table>
<thead>
<tr>
<th>{t("agentColumn")}</th>
<th>{t("macColumn")}</th>
<th>{t("cloudColumn")}</th>
</tr>
</thead>
<tbody>
<tr><td>Codex</td><td><code>cr codex</code></td><td>{t("automatic")}</td></tr>
<tr><td>OpenCode</td><td><code>cr opencode</code></td><td>{t("automatic")}</td></tr>
<tr><td>Pi</td><td><code>cr pi</code> {t("experimental")}</td><td>{t("automatic")}</td></tr>
<tr><td>Claude Code</td><td>{t("claudeMacCell")}</td><td>{t("automatic")}</td></tr>
</tbody>
</table>

<DocsHeading level={2} id="mac">{t("macTitle")}</DocsHeading>
<p>{t("macDesc")}</p>

<DocsHeading level={3} id="codex">Codex</DocsHeading>
<p>{t("codexDesc")}</p>
<CodeBlock lang="bash">{`cr codex
cr codex exec "fix the failing test"
cr codex -m <model>
cr naked`}</CodeBlock>

<DocsHeading level={3} id="opencode">OpenCode</DocsHeading>
<p>{t("opencodeDesc")}</p>
<CodeBlock lang="bash">{`cr opencode
cr opencode --model <model>`}</CodeBlock>

<DocsHeading level={3} id="pi">Pi</DocsHeading>
<p>{t("piDesc")}</p>
<CodeBlock lang="bash">{`cr pi
cr pi --model <model>`}</CodeBlock>

<DocsHeading level={3} id="claude-code">{t("claudeTitle")}</DocsHeading>
<p>{t("claudeDesc")}</p>
<p>{t("apiKeyCreate")} <Link href="/dashboard/coderouter" className={linkClass}>cmux.com/dashboard/coderouter</Link></p>
<CodeBlock lang="bash">{`# Claude Code and Anthropic Messages API clients
export ANTHROPIC_BASE_URL=https://coderouter.dev
export ANTHROPIC_API_KEY=crk_...
claude

# OpenAI Responses API clients
export OPENAI_BASE_URL=https://coderouter.dev/v1
export OPENAI_API_KEY=crk_...`}</CodeBlock>
<p>{t("apiKeyScope")}</p>
<p>{t("apiKeyLogin")}</p>
<CodeBlock lang="bash">{`cr login --api-key <key>
CODEROUTER_API_KEY=<key> cr codex exec "run the tests"`}</CodeBlock>

<DocsHeading level={2} id="cloud">{t("cloudTitle")}</DocsHeading>
<p>{t("cloudDesc")}</p>
<ul>
<li>{t("cloudClaude")}</li>
<li>{t("cloudCodex")}</li>
<li>{t("cloudPi")}</li>
<li>{t("cloudOpencode")}</li>
</ul>
<p>{t("cloudYours")}</p>
<p>{t("cloudRun")}</p>
<CodeBlock lang="bash">{`# Inside a Cloud machine
claude
codex
cmux coderouter agent claude "summarize the current checkout"

# From your Mac
cmux coderouter agent codex --machine brave-otter -- "run the tests"`}</CodeBlock>
<p>{t("cloudAccounts")}</p>

<DocsHeading level={2} id="models">{t("modelsTitle")}</DocsHeading>
<p>{t("modelsCodex")}</p>
<p>{t("modelsOpencode")}</p>
<p>{t("modelsClaude")}</p>
<p>{t("modelsBedrock")}</p>
<CodeBlock lang="bash">{`cmux coderouter claude add bedrock --region us-east-1 \\
--model <claude-model-id>=<bedrock-model-id>`}</CodeBlock>
<p>{t("modelsList")}</p>
<CodeBlock lang="bash">{`# Inside a Cloud machine
cmux coderouter models`}</CodeBlock>
</>
);
}
127 changes: 127 additions & 0 deletions web/app/[locale]/(landing)/docs/coderouter/cli/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
import { getTranslations } from "next-intl/server";
import { auditedDocsMetadata } from "../../audited-docs-metadata";
import { DocsSchema } from "../../docs-schema";
import { CodeBlock } from "@/app/[locale]/components/code-block";
import { DocsHeading } from "@/app/[locale]/components/docs-heading";

export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const { locale } = await params;
return auditedDocsMetadata({
locale,
pageKey: "coderouterCli",
path: "/docs/coderouter/cli",
});
}

export default async function CoderouterCliPage({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "docs.coderouterCli" });

return (
<>
<DocsSchema namespace="docs.coderouterCli" path="/docs/coderouter/cli" />
<DocsHeading level={1} id="title">{t("title")}</DocsHeading>
<p>{t("intro")}</p>

<DocsHeading level={2} id="install">{t("installTitle")}</DocsHeading>
<p>{t("installDesc")}</p>
<CodeBlock lang="bash">{`curl -fsSL https://cmux.com/coderouter/install.sh | sh
npm install -g coderouter
uv tool install coderouter`}</CodeBlock>
<p>{t("loginDesc")}</p>
<CodeBlock lang="bash">{`cr login
cr login --device-auth
cr login --code [code-or-url]
cr logout`}</CodeBlock>

<DocsHeading level={2} id="cr">{t("crTitle")}</DocsHeading>
<p>{t("crDesc")}</p>
<CodeBlock lang="bash">{`cr # account and usage summary
cr codex [arguments...]
cr opencode [arguments...]
cr pi [arguments...] # experimental
cr naked [arguments...] # plain Codex, CodeRouter bypassed (alias: direct)
cr add # choose a provider
cr add codex
cr add claude [--label <name>] [--stdin]
cr add opencode
cr remove [account] [--yes]
cr transfer [account] [--to <team>] [--yes]
cr accounts [--watch] [--json] # aliases: list, ls, usage
cr org current | list | switch <name-or-id>
cr login [--api-key <key>] [--device-auth] [--code [code-or-url]]
cr logout
cr doctor
cr upgrade`}</CodeBlock>
<p>{t("crAddCodex")}</p>

<DocsHeading level={2} id="cmux-coderouter">{t("cmuxTitle")}</DocsHeading>
<p>{t("cmuxDesc")}</p>
<CodeBlock lang="bash">{`cmux coderouter status
cmux coderouter machines
cmux coderouter claude list
cmux coderouter claude add oauth-token [--label <name>] [--stdin]
cmux coderouter claude add api-key [--label <name>] [--stdin]
cmux coderouter claude add bedrock [--label <name>] [--region <region>] [--model <claude-id>=<bedrock-id>]...
cmux coderouter claude disable <account>
cmux coderouter claude enable <account>
cmux coderouter claude remove <account>
cmux coderouter claude clear
cmux coderouter agent <claude|codex|opencode|pi> [vm-agent-options] -- <prompt>`}</CodeBlock>
<p>{t("claudeAddDesc")}</p>
<p>{t("accountSelector")}</p>
<p>{t("passthroughDesc")}</p>
<CodeBlock lang="bash">{`cmux cr accounts
cmux coderouter login`}</CodeBlock>

<DocsHeading level={2} id="inside-a-machine">{t("guestTitle")}</DocsHeading>
<p>{t("guestDesc")}</p>
<CodeBlock lang="bash">{`cmux auth status [--json]
cmux coderouter status [--json]
cmux coderouter usage [--json|--tsv] [--days <n>]
cmux coderouter models
cmux coderouter accounts [--json]
cmux coderouter org current [--json]
cmux coderouter agent <claude|codex|opencode|pi> [--timeout <seconds>] [args...]`}</CodeBlock>

<DocsHeading level={2} id="troubleshooting">{t("troubleTitle")}</DocsHeading>
<p>{t("troubleDesc")}</p>
<table>
<thead>
<tr>
<th>{t("symptomColumn")}</th>
<th>{t("fixColumn")}</th>
</tr>
</thead>
<tbody>
<tr><td>{t("errSignIn")}</td><td>{t("fixSignIn")}</td></tr>
<tr><td>{t("errExpired")}</td><td>{t("fixExpired")}</td></tr>
<tr><td>{t("errNoCodex")}</td><td>{t("fixNoCodex")}</td></tr>
<tr><td>{t("errNoClaude")}</td><td>{t("fixNoClaude")}</td></tr>
<tr><td>{t("errClaudeCooling")}</td><td>{t("fixClaudeCooling")}</td></tr>
<tr><td>{t("errBedrockModel")}</td><td>{t("fixBedrockModel")}</td></tr>
<tr><td>{t("errBedrockRegion")}</td><td>{t("fixBedrockRegion")}</td></tr>
<tr><td>{t("errNotInstalled")}</td><td>{t("fixNotInstalled")}</td></tr>
<tr><td>{t("errAgentMissing")}</td><td>{t("fixAgentMissing")}</td></tr>
<tr><td>{t("errCodexLoop")}</td><td>{t("fixCodexLoop")}</td></tr>
<tr><td>{t("errOpencodeModel")}</td><td>{t("fixOpencodeModel")}</td></tr>
<tr><td>{t("errOpencodeMachine")}</td><td>{t("fixOpencodeMachine")}</td></tr>
<tr><td>{t("errEdge")}</td><td>{t("fixEdge")}</td></tr>
<tr><td>{t("errUnavailable")}</td><td>{t("fixUnavailable")}</td></tr>
</tbody>
</table>

<DocsHeading level={2} id="diagnose">{t("diagnoseTitle")}</DocsHeading>
<p>{t("diagnoseDesc")}</p>
<CodeBlock lang="bash">{`cr doctor
cmux coderouter status`}</CodeBlock>

<DocsHeading level={2} id="get-help">{t("supportTitle")}</DocsHeading>
<p>{t("supportDesc")}</p>
</>
);
}
Loading
Loading