chore: rebrand user-facing copy to OpenClaude (#851)
* chore: rebrand user-facing copy to OpenClaude Replace lingering Claude Code branding in CLI, tips, and runtime UI with OpenClaude/openclaude, including the startup tip Gitlawb mention. Co-Authored-By: Claude GPT-5.4 <noreply@openclaude.dev> * chore: address branding-sweep review feedback - PermissionRequest.tsx: rebrand the two remaining "Claude needs your approval/permission" notifications to OpenClaude (review-artifact and generic tool permission paths). - main.tsx, teleport.tsx, session.tsx, WebFetchTool/utils.ts, skills/bundled/{debug,updateConfig}.ts: replace leftover `claude --…` CLI hints and "Claude Code" labels missed by the original sweep. - main.tsx: drop the inline gitlawb.com marketing copy from the stale-prompt tip; keep it a pure rebrand. - auth.ts: finish the half-rename so both `claude setup-token` and `claude auth login` references in the same error block now read `openclaude …`. - mcp/client.ts: keep `name: 'claude-code'` for MCP server allowlist compatibility (now explicit via comment) and replace the "Anthropic's agentic coding tool" description with an OpenClaude one. - MCPSettings.tsx: point the empty-server-list hint at https://github.com/Gitlawb/openclaude instead of code.claude.com. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: replace help link with OpenClaude repo URL Replace https://code.claude.com/docs/en/overview with https://github.com/Gitlawb/openclaude in the help screen. Co-Authored-By: OpenClaude <openclaude@gitlawb.com> --------- Co-authored-by: Claude GPT-5.4 <noreply@openclaude.dev> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: OpenClaude <openclaude@gitlawb.com>
This commit is contained in:
@@ -302,7 +302,7 @@ export function getRequestTooLargeErrorMessage(): string {
|
||||
: `Request too large (${limits}). Double press esc to go back and try with a smaller file.`
|
||||
}
|
||||
export const OAUTH_ORG_NOT_ALLOWED_ERROR_MESSAGE =
|
||||
'Your account does not have access to Claude Code. Please run /login.'
|
||||
'Your account does not have access to OpenClaude. Please run /login.'
|
||||
|
||||
export function getTokenRevokedErrorMessage(): string {
|
||||
return getIsNonInteractiveSession()
|
||||
@@ -1346,8 +1346,8 @@ export function getErrorMessageIfRefusal(
|
||||
: "your provider's acceptable use policy"
|
||||
|
||||
const baseMessage = getIsNonInteractiveSession()
|
||||
? `${API_ERROR_MESSAGE_PREFIX}: Claude Code is unable to respond to this request, which appears to violate our Usage Policy (${usagePolicyUrl}). Try rephrasing the request or attempting a different approach.`
|
||||
: `${API_ERROR_MESSAGE_PREFIX}: Claude Code is unable to respond to this request, which appears to violate our Usage Policy (${usagePolicyUrl}). Please double press esc to edit your last message or start a new session for Claude Code to assist with a different task.`
|
||||
? `${API_ERROR_MESSAGE_PREFIX}: OpenClaude is unable to respond to this request, which appears to violate our Usage Policy (${usagePolicyUrl}). Try rephrasing the request or attempting a different approach.`
|
||||
: `${API_ERROR_MESSAGE_PREFIX}: OpenClaude is unable to respond to this request, which appears to violate our Usage Policy (${usagePolicyUrl}). Please double press esc to edit your last message or start a new session for OpenClaude to assist with a different task.`
|
||||
|
||||
const modelSuggestion =
|
||||
model !== 'claude-sonnet-4-20250514'
|
||||
|
||||
@@ -343,13 +343,13 @@ export async function checkGroveForNonInteractive(): Promise<void> {
|
||||
if (config === null || config.notice_is_grace_period) {
|
||||
// Grace period is still active - show informational message and continue
|
||||
writeToStderr(
|
||||
'\nAn update to our Consumer Terms and Privacy Policy will take effect on October 8, 2025. Run `claude` to review the updated terms.\n\n',
|
||||
'\nAn update to our Consumer Terms and Privacy Policy will take effect on October 8, 2025. Run `openclaude` to review the updated terms.\n\n',
|
||||
)
|
||||
await markGroveNoticeViewed()
|
||||
} else {
|
||||
// Grace period has ended - show error message and exit
|
||||
writeToStderr(
|
||||
'\n[ACTION REQUIRED] An update to our Consumer Terms and Privacy Policy has taken effect on October 8, 2025. You must run `claude` to review the updated terms.\n\n',
|
||||
'\n[ACTION REQUIRED] An update to our Consumer Terms and Privacy Policy has taken effect on October 8, 2025. You must run `openclaude` to review the updated terms.\n\n',
|
||||
)
|
||||
await gracefulShutdown(1)
|
||||
}
|
||||
|
||||
@@ -1209,7 +1209,7 @@ export async function performMCPOAuthFlow(
|
||||
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(
|
||||
`<h1>Authentication Successful</h1><p>You can close this window. Return to Claude Code.</p>`,
|
||||
`<h1>Authentication Successful</h1><p>You can close this window. Return to OpenClaude.</p>`,
|
||||
)
|
||||
cleanup()
|
||||
resolveOnce(result.code)
|
||||
|
||||
@@ -1001,10 +1001,12 @@ export const connectToServer = memoize(
|
||||
|
||||
const client = new Client(
|
||||
{
|
||||
// name stays 'claude-code' for compatibility with MCP servers that
|
||||
// gate features on the upstream client identifier.
|
||||
name: 'claude-code',
|
||||
title: 'Open Claude',
|
||||
title: 'OpenClaude',
|
||||
version: MACRO.VERSION ?? 'unknown',
|
||||
description: "Anthropic's agentic coding tool",
|
||||
description: 'OpenClaude — coding-agent CLI for any LLM provider',
|
||||
websiteUrl: PRODUCT_URL,
|
||||
},
|
||||
{
|
||||
@@ -3329,10 +3331,12 @@ export async function setupSdkMcpClients(
|
||||
|
||||
const client = new Client(
|
||||
{
|
||||
// name stays 'claude-code' for compatibility with MCP servers that
|
||||
// gate features on the upstream client identifier.
|
||||
name: 'claude-code',
|
||||
title: 'Open Claude',
|
||||
title: 'OpenClaude',
|
||||
version: MACRO.VERSION ?? 'unknown',
|
||||
description: "Anthropic's agentic coding tool",
|
||||
description: 'OpenClaude — coding-agent CLI for any LLM provider',
|
||||
websiteUrl: PRODUCT_URL,
|
||||
},
|
||||
{
|
||||
|
||||
@@ -35,7 +35,7 @@ export async function sendNotification(
|
||||
})
|
||||
}
|
||||
|
||||
const DEFAULT_TITLE = 'Open Claude'
|
||||
const DEFAULT_TITLE = 'OpenClaude'
|
||||
|
||||
async function sendToChannel(
|
||||
channel: string,
|
||||
|
||||
@@ -279,7 +279,7 @@ function getWarningUpsellText(
|
||||
|
||||
// Pro/Max users: prompt to upgrade
|
||||
if (subscriptionType === 'pro' || subscriptionType === 'max') {
|
||||
return '/upgrade to keep using Claude Code'
|
||||
return '/upgrade to keep using OpenClaude'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'new-user-warmup',
|
||||
content: async () =>
|
||||
`Start with small features or bug fixes, tell Claude to propose a plan, and verify its suggested edits`,
|
||||
`Start with small features or bug fixes, tell OpenClaude to propose a plan, and verify its suggested edits`,
|
||||
cooldownSessions: 3,
|
||||
async isRelevant() {
|
||||
const config = getGlobalConfig()
|
||||
@@ -142,7 +142,7 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'git-worktrees',
|
||||
content: async () =>
|
||||
'Use git worktrees to run multiple Claude sessions in parallel.',
|
||||
'Use git worktrees to run multiple OpenClaude sessions in parallel.',
|
||||
cooldownSessions: 10,
|
||||
isRelevant: async () => {
|
||||
try {
|
||||
@@ -157,7 +157,7 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'color-when-multi-clauding',
|
||||
content: async () =>
|
||||
'Running multiple Claude sessions? Use /color and /rename to tell them apart at a glance.',
|
||||
'Running multiple OpenClaude sessions? Use /color and /rename to tell them apart at a glance.',
|
||||
cooldownSessions: 10,
|
||||
isRelevant: async () => {
|
||||
if (getCurrentSessionAgentColor()) return false
|
||||
@@ -215,7 +215,7 @@ const externalTips: Tip[] = [
|
||||
},
|
||||
{
|
||||
id: 'memory-command',
|
||||
content: async () => 'Use /memory to view and manage Claude memory',
|
||||
content: async () => 'Use /memory to view and manage OpenClaude memory',
|
||||
cooldownSessions: 15,
|
||||
async isRelevant() {
|
||||
const config = getGlobalConfig()
|
||||
@@ -254,7 +254,7 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'prompt-queue',
|
||||
content: async () =>
|
||||
'Hit Enter to queue up additional messages while Claude is working.',
|
||||
'Hit Enter to queue up additional messages while OpenClaude is working.',
|
||||
cooldownSessions: 5,
|
||||
async isRelevant() {
|
||||
const config = getGlobalConfig()
|
||||
@@ -264,14 +264,14 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'enter-to-steer-in-relatime',
|
||||
content: async () =>
|
||||
'Send messages to Claude while it works to steer Claude in real-time',
|
||||
'Send messages to OpenClaude while it works to steer OpenClaude in real-time',
|
||||
cooldownSessions: 20,
|
||||
isRelevant: async () => true,
|
||||
},
|
||||
{
|
||||
id: 'todo-list',
|
||||
content: async () =>
|
||||
'Ask Claude to create a todo list when working on complex tasks to track progress and remain on track',
|
||||
'Ask OpenClaude to create a todo list when working on complex tasks to track progress and remain on track',
|
||||
cooldownSessions: 20,
|
||||
isRelevant: async () => true,
|
||||
},
|
||||
@@ -304,7 +304,7 @@ const externalTips: Tip[] = [
|
||||
},
|
||||
{
|
||||
id: 'ide-upsell-external-terminal',
|
||||
content: async () => 'Connect Claude to your IDE · /ide',
|
||||
content: async () => 'Connect OpenClaude to your IDE · /ide',
|
||||
cooldownSessions: 4,
|
||||
async isRelevant() {
|
||||
if (isSupportedTerminal()) {
|
||||
@@ -324,13 +324,13 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'install-github-app',
|
||||
content: async () =>
|
||||
'Run /install-github-app to tag @claude right from your Github issues and PRs',
|
||||
'Run /install-github-app to enable GitHub issue and PR tagging from OpenClaude',
|
||||
cooldownSessions: 10,
|
||||
isRelevant: async () => !getGlobalConfig().githubActionSetupCount,
|
||||
},
|
||||
{
|
||||
id: 'install-slack-app',
|
||||
content: async () => 'Run /install-slack-app to use Claude in Slack',
|
||||
content: async () => 'Run /install-slack-app to use OpenClaude in Slack',
|
||||
cooldownSessions: 10,
|
||||
isRelevant: async () => !getGlobalConfig().slackAppInstallCount,
|
||||
},
|
||||
@@ -354,7 +354,7 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'paste-images-mac',
|
||||
content: async () =>
|
||||
'Paste images into Claude Code using control+v (not cmd+v!)',
|
||||
'Paste images into OpenClaude using control+v (not cmd+v!)',
|
||||
cooldownSessions: 10,
|
||||
isRelevant: async () => getPlatform() === 'macos',
|
||||
},
|
||||
@@ -375,7 +375,7 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'continue',
|
||||
content: async () =>
|
||||
'Run claude --continue or claude --resume to resume a conversation',
|
||||
'Run openclaude --continue or openclaude --resume to resume a conversation',
|
||||
cooldownSessions: 10,
|
||||
isRelevant: async () => true,
|
||||
},
|
||||
@@ -434,7 +434,7 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'desktop-app',
|
||||
content: async () =>
|
||||
'Run Claude Code locally or remotely using the Claude desktop app: clau.de/desktop',
|
||||
'Run OpenClaude locally or remotely with /desktop',
|
||||
cooldownSessions: 15,
|
||||
isRelevant: async () => getPlatform() !== 'linux',
|
||||
},
|
||||
@@ -442,7 +442,7 @@ const externalTips: Tip[] = [
|
||||
id: 'desktop-shortcut',
|
||||
content: async ctx => {
|
||||
const blue = color('suggestion', ctx.theme)
|
||||
return `Continue your session in Claude Code Desktop with ${blue('/desktop')}`
|
||||
return `Continue your session with ${blue('/desktop')}`
|
||||
},
|
||||
cooldownSessions: 15,
|
||||
isRelevant: async () => {
|
||||
@@ -456,21 +456,21 @@ const externalTips: Tip[] = [
|
||||
{
|
||||
id: 'web-app',
|
||||
content: async () =>
|
||||
'Run tasks in the cloud while you keep coding locally · clau.de/web',
|
||||
'Run tasks in the cloud while you keep coding locally · /web',
|
||||
cooldownSessions: 15,
|
||||
isRelevant: async () => true,
|
||||
},
|
||||
{
|
||||
id: 'mobile-app',
|
||||
content: async () =>
|
||||
'/mobile to use Claude Code from the Claude app on your phone',
|
||||
'/mobile to continue from your phone',
|
||||
cooldownSessions: 15,
|
||||
isRelevant: async () => true,
|
||||
},
|
||||
{
|
||||
id: 'opusplan-mode-reminder',
|
||||
content: async () =>
|
||||
`Your default model setting is Opus Plan Mode. Press ${getShortcutDisplay('chat:cycleMode', 'Chat', 'shift+tab')} twice to activate Plan Mode and plan with Claude Opus.`,
|
||||
`Your default model setting is Opus Plan Mode. Press ${getShortcutDisplay('chat:cycleMode', 'Chat', 'shift+tab')} twice to activate Plan Mode and plan with Opus.`,
|
||||
cooldownSessions: 2,
|
||||
async isRelevant() {
|
||||
const config = getGlobalConfig()
|
||||
@@ -517,7 +517,7 @@ const externalTips: Tip[] = [
|
||||
'off' | 'copy_a' | 'copy_b'
|
||||
>('tengu_tide_elm', 'off')
|
||||
return variant === 'copy_b'
|
||||
? `Use ${cmd} for better one-shot answers. Claude thinks it through first.`
|
||||
? `Use ${cmd} for better one-shot answers. OpenClaude thinks it through first.`
|
||||
: `Working on something tricky? ${cmd} gives better first answers`
|
||||
},
|
||||
cooldownSessions: 3,
|
||||
@@ -546,8 +546,8 @@ const externalTips: Tip[] = [
|
||||
'off' | 'copy_a' | 'copy_b'
|
||||
>('tengu_tern_alloy', 'off')
|
||||
return variant === 'copy_b'
|
||||
? `For big tasks, tell Claude to ${blue('use subagents')}. They work in parallel and keep your main thread clean.`
|
||||
: `Say ${blue('"fan out subagents"')} and Claude sends a team. Each one digs deep so nothing gets missed.`
|
||||
? `For big tasks, tell OpenClaude to ${blue('use subagents')}. They work in parallel and keep your main thread clean.`
|
||||
: `Say ${blue('"fan out subagents"')} and OpenClaude sends a team. Each one digs deep so nothing gets missed.`
|
||||
},
|
||||
cooldownSessions: 3,
|
||||
isRelevant: async () => {
|
||||
@@ -589,7 +589,7 @@ const externalTips: Tip[] = [
|
||||
const claude = color('claude', ctx.theme)
|
||||
const reward = getCachedReferrerReward()
|
||||
return reward
|
||||
? `Share Claude Code and earn ${claude(formatCreditAmount(reward))} of extra usage · ${claude('/passes')}`
|
||||
? `Share OpenClaude and earn ${claude(formatCreditAmount(reward))} of extra usage · ${claude('/passes')}`
|
||||
: `You have free guest passes to share · ${claude('/passes')}`
|
||||
},
|
||||
cooldownSessions: 3,
|
||||
|
||||
@@ -262,7 +262,7 @@ export async function checkRecordingAvailability(): Promise<RecordingAvailabilit
|
||||
return {
|
||||
available: false,
|
||||
reason:
|
||||
'Voice mode requires microphone access, but no audio device is available in this environment.\n\nTo use voice mode, run Claude Code locally instead.',
|
||||
'Voice mode requires microphone access, but no audio device is available in this environment.\n\nTo use voice mode, run OpenClaude locally instead.',
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,7 +282,7 @@ export async function checkRecordingAvailability(): Promise<RecordingAvailabilit
|
||||
}
|
||||
|
||||
const wslNoAudioReason =
|
||||
'Voice mode could not access an audio device in WSL.\n\nWSL2 with WSLg (Windows 11) provides audio via PulseAudio — if you are on Windows 10 or WSL1, run Claude Code in native Windows instead.'
|
||||
'Voice mode could not access an audio device in WSL.\n\nWSL2 with WSLg (Windows 11) provides audio via PulseAudio — if you are on Windows 10 or WSL1, run OpenClaude in native Windows instead.'
|
||||
|
||||
// On Linux (including WSL), probe arecord. hasCommand() is insufficient:
|
||||
// the binary can exist while the device open() fails (WSL1, Win10-WSL2,
|
||||
|
||||
Reference in New Issue
Block a user