From dfaf7180b486ce0d4dfcc5ec5b2699d0ac8c3d5e Mon Sep 17 00:00:00 2001 From: kumarabhirup Date: Wed, 11 Feb 2026 23:38:34 -0800 Subject: [PATCH] Ironclaw rebrand: rename user-facing strings, package identity, and CLI references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rebrand from OpenClaw to Ironclaw across 16 files: Web app (apps/web): - layout.tsx: update metadata title to "Ironclaw" and description to "AI CRM with an agent that connects to your apps and does the work for you" - page.tsx: change landing page heading from "OpenClaw Dench" to "Ironclaw" - agent-runner.ts: rename stderr log prefix to [ironclaw stderr] - package.json: rename package from "openclaw-web" to "ironclaw-web" Package identity (root): - package.json: rename package from "openclaw-ai-sdk" to "ironclaw", update description to reflect CRM/workspace focus, change bin entry from "openclaw-ai-sdk" to "ironclaw" - openclaw.mjs: update error message to reference "ironclaw" - src/version.ts: change CORE_PACKAGE_NAME to "ironclaw" CLI and TUI: - command-format.ts: extend CLI prefix regex to accept both "ironclaw" and "openclaw" for backward compatibility - register.agent.ts: update example identity name to "Ironclaw" with 🔩 emoji (replacing 🦞) - tui.ts: rename TUI header from "openclaw tui" to "ironclaw tui" Onboarding and configuration wizards: - configure.wizard.ts: rename engine selection prompts and wizard intro headers to "Ironclaw" - onboarding.ts: rename onboarding intro and security warning text - onboarding.finalize.ts: rename all dashboard/control-UI messages and Brave Search setup instructions to reference "Ironclaw" Security audit: - audit.ts: rename state-dir permission warning details to "Ironclaw" - audit-extra.ts: rename plugin remediation text to "Ironclaw" Telegram: - bot-message-context.ts: rename access-denied message to "Ironclaw" --- apps/web/app/layout.tsx | 4 ++-- apps/web/app/page.tsx | 2 +- apps/web/lib/agent-runner.ts | 2 +- apps/web/package.json | 2 +- openclaw.mjs | 2 +- package.json | 6 +++--- src/cli/command-format.ts | 2 +- src/cli/program/register.agent.ts | 2 +- src/commands/configure.wizard.ts | 6 +++--- src/security/audit-extra.ts | 2 +- src/security/audit.ts | 4 ++-- src/telegram/bot-message-context.ts | 2 +- src/tui/tui.ts | 2 +- src/version.ts | 2 +- src/wizard/onboarding.finalize.ts | 14 +++++++------- src/wizard/onboarding.ts | 6 +++--- 16 files changed, 30 insertions(+), 30 deletions(-) diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx index 58528f4df46..5b75d7250c0 100644 --- a/apps/web/app/layout.tsx +++ b/apps/web/app/layout.tsx @@ -2,8 +2,8 @@ import type { Metadata } from "next"; import "./globals.css"; export const metadata: Metadata = { - title: "OpenClaw Chat", - description: "OpenClaw agent chat interface", + title: "Ironclaw", + description: "AI CRM with an agent that connects to your apps and does the work for you", }; export default function RootLayout({ diff --git a/apps/web/app/page.tsx b/apps/web/app/page.tsx index e585fcf5aa7..730f9e3f5ff 100644 --- a/apps/web/app/page.tsx +++ b/apps/web/app/page.tsx @@ -36,7 +36,7 @@ export default function Home() { className="text-4xl font-bold tracking-tight mb-3 text-center" style={{ color: "var(--color-text)" }} > - OpenClaw Dench + Ironclaw {/* Tagline */} diff --git a/apps/web/lib/agent-runner.ts b/apps/web/lib/agent-runner.ts index 7bb9fc07309..b52a73fff49 100644 --- a/apps/web/lib/agent-runner.ts +++ b/apps/web/lib/agent-runner.ts @@ -295,7 +295,7 @@ export async function runAgent( child.stderr?.on("data", (chunk: Buffer) => { const text = chunk.toString(); stderrChunks.push(text); - console.error("[openclaw stderr]", text); + console.error("[ironclaw stderr]", text); }); }); } diff --git a/apps/web/package.json b/apps/web/package.json index 32dcbdd6465..5aa1ea3c3cd 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,5 +1,5 @@ { - "name": "openclaw-web", + "name": "ironclaw-web", "version": "0.1.0", "private": true, "scripts": { diff --git a/openclaw.mjs b/openclaw.mjs index 84ddd1c491d..44ba0cc6466 100755 --- a/openclaw.mjs +++ b/openclaw.mjs @@ -52,5 +52,5 @@ if (await tryImport("./dist/entry.js")) { } else if (await tryImport("./dist/entry.mjs")) { // OK } else { - throw new Error("openclaw-ai-sdk: missing dist/entry.(m)js (build output)."); + throw new Error("ironclaw: missing dist/entry.(m)js (build output)."); } diff --git a/package.json b/package.json index 0c0e69cabbc..17287f3fc39 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { - "name": "openclaw-ai-sdk", + "name": "ironclaw", "version": "2026.2.6-3", - "description": "Multi-channel AI gateway with extensible messaging integrations", + "description": "AI-powered CRM platform with multi-channel agent gateway, DuckDB workspace, and knowledge management", "keywords": [], "license": "MIT", "author": "", "bin": { - "openclaw-ai-sdk": "openclaw.mjs" + "ironclaw": "openclaw.mjs" }, "files": [ "assets/", diff --git a/src/cli/command-format.ts b/src/cli/command-format.ts index cc9477b5aa6..2c071500d0e 100644 --- a/src/cli/command-format.ts +++ b/src/cli/command-format.ts @@ -1,7 +1,7 @@ import { replaceCliName, resolveCliName } from "./cli-name.js"; import { normalizeProfileName } from "./profile-utils.js"; -const CLI_PREFIX_RE = /^(?:pnpm|npm|bunx|npx)\s+openclaw\b|^openclaw\b/; +const CLI_PREFIX_RE = /^(?:pnpm|npm|bunx|npx)\s+(?:ironclaw|openclaw)\b|^(?:ironclaw|openclaw)\b/; const PROFILE_FLAG_RE = /(?:^|\s)--profile(?:\s|=|$)/; const DEV_FLAG_RE = /(?:^|\s)--dev(?:\s|$)/; diff --git a/src/cli/program/register.agent.ts b/src/cli/program/register.agent.ts index d5870e36563..0ecb15f2234 100644 --- a/src/cli/program/register.agent.ts +++ b/src/cli/program/register.agent.ts @@ -165,7 +165,7 @@ ${theme.muted("Docs:")} ${formatDocsLink("/cli/agent", "docs.openclaw.ai/cli/age ` ${theme.heading("Examples:")} ${formatHelpExamples([ - ['openclaw agents set-identity --agent main --name "OpenClaw" --emoji "🦞"', "Set name + emoji."], + ['openclaw agents set-identity --agent main --name "Ironclaw" --emoji "🔩"', "Set name + emoji."], ["openclaw agents set-identity --agent main --avatar avatars/openclaw.png", "Set avatar path."], [ "openclaw agents set-identity --workspace ~/.openclaw/workspace --from-identity", diff --git a/src/commands/configure.wizard.ts b/src/commands/configure.wizard.ts index aa7a9d577e3..74eea0db26d 100644 --- a/src/commands/configure.wizard.ts +++ b/src/commands/configure.wizard.ts @@ -177,7 +177,7 @@ async function promptEngineConfig( note( [ - "OpenClaw supports two LLM engines for agent orchestration:", + "Ironclaw supports two LLM engines for agent orchestration:", "", "• AI SDK (default): Vercel's AI SDK v6 - modern, flexible, supports AI Gateway", "• pi-agent: Original implementation - battle-tested, full feature set", @@ -189,7 +189,7 @@ async function promptEngineConfig( const engineChoice = guardCancel( await select<"aisdk" | "pi-agent">({ - message: "Which LLM engine should OpenClaw use?", + message: "Which LLM engine should Ironclaw use?", options: [ { value: "aisdk", @@ -222,7 +222,7 @@ export async function runConfigureWizard( ) { try { printWizardHeader(runtime); - intro(opts.command === "update" ? "OpenClaw update wizard" : "OpenClaw configure"); + intro(opts.command === "update" ? "Ironclaw update wizard" : "Ironclaw configure"); const prompter = createClackPrompter(); const snapshot = await readConfigFileSnapshot(); diff --git a/src/security/audit-extra.ts b/src/security/audit-extra.ts index 9688374d1c5..c09617b8758 100644 --- a/src/security/audit-extra.ts +++ b/src/security/audit-extra.ts @@ -1214,7 +1214,7 @@ export async function collectPluginsCodeSafetyFindings(params: { title: `Plugin "${pluginName}" contains dangerous code patterns`, detail: `Found ${summary.critical} critical issue(s) in ${summary.scannedFiles} scanned file(s):\n${details}`, remediation: - "Review the plugin source code carefully before use. If untrusted, remove the plugin from your OpenClaw extensions state directory.", + "Review the plugin source code carefully before use. If untrusted, remove the plugin from your Ironclaw extensions state directory.", }); } else if (summary.warn > 0) { const warnFindings = summary.findings.filter((f) => f.severity === "warn"); diff --git a/src/security/audit.ts b/src/security/audit.ts index 02fac93135d..c4d0461d79f 100644 --- a/src/security/audit.ts +++ b/src/security/audit.ts @@ -153,7 +153,7 @@ async function collectFilesystemFindings(params: { checkId: "fs.state_dir.perms_world_writable", severity: "critical", title: "State dir is world-writable", - detail: `${formatPermissionDetail(params.stateDir, stateDirPerms)}; other users can write into your OpenClaw state.`, + detail: `${formatPermissionDetail(params.stateDir, stateDirPerms)}; other users can write into your Ironclaw state.`, remediation: formatPermissionRemediation({ targetPath: params.stateDir, perms: stateDirPerms, @@ -167,7 +167,7 @@ async function collectFilesystemFindings(params: { checkId: "fs.state_dir.perms_group_writable", severity: "warn", title: "State dir is group-writable", - detail: `${formatPermissionDetail(params.stateDir, stateDirPerms)}; group users can write into your OpenClaw state.`, + detail: `${formatPermissionDetail(params.stateDir, stateDirPerms)}; group users can write into your Ironclaw state.`, remediation: formatPermissionRemediation({ targetPath: params.stateDir, perms: stateDirPerms, diff --git a/src/telegram/bot-message-context.ts b/src/telegram/bot-message-context.ts index 328f6c4b4e9..4d7a875bd42 100644 --- a/src/telegram/bot-message-context.ts +++ b/src/telegram/bot-message-context.ts @@ -278,7 +278,7 @@ export const buildTelegramMessageContext = async ({ bot.api.sendMessage( chatId, [ - "OpenClaw: access not configured.", + "Ironclaw: access not configured.", "", `Your Telegram user id: ${telegramUserId}`, "", diff --git a/src/tui/tui.ts b/src/tui/tui.ts index 982749d248c..b417ec39930 100644 --- a/src/tui/tui.ts +++ b/src/tui/tui.ts @@ -324,7 +324,7 @@ export async function runTui(opts: TuiOptions) { const agentLabel = formatAgentLabel(currentAgentId); header.setText( theme.header( - `openclaw tui - ${client.connection.url} - agent ${agentLabel} - session ${sessionLabel}`, + `ironclaw tui - ${client.connection.url} - agent ${agentLabel} - session ${sessionLabel}`, ), ); }; diff --git a/src/version.ts b/src/version.ts index bf2d1e44e63..477d78adab6 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,7 +1,7 @@ import { createRequire } from "node:module"; declare const __OPENCLAW_VERSION__: string | undefined; -const CORE_PACKAGE_NAME = "openclaw"; +const CORE_PACKAGE_NAME = "ironclaw"; const PACKAGE_JSON_CANDIDATES = [ "../package.json", diff --git a/src/wizard/onboarding.finalize.ts b/src/wizard/onboarding.finalize.ts index fb5873f3d8f..54be9a6a208 100644 --- a/src/wizard/onboarding.finalize.ts +++ b/src/wizard/onboarding.finalize.ts @@ -366,8 +366,8 @@ export async function finalizeOnboardingWizard( [ `Dashboard link (with token): ${authedUrl}`, controlUiOpened - ? "Opened in your browser. Keep that tab to control OpenClaw." - : "Copy/paste this URL in a browser on this machine to control OpenClaw.", + ? "Opened in your browser. Keep that tab to control Ironclaw." + : "Copy/paste this URL in a browser on this machine to control Ironclaw.", controlUiOpenHint, ] .filter(Boolean) @@ -470,8 +470,8 @@ export async function finalizeOnboardingWizard( [ `Dashboard link (with token): ${authedUrl}`, controlUiOpened - ? "Opened in your browser. Keep that tab to control OpenClaw." - : "Copy/paste this URL in a browser on this machine to control OpenClaw.", + ? "Opened in your browser. Keep that tab to control Ironclaw." + : "Copy/paste this URL in a browser on this machine to control Ironclaw.", controlUiOpenHint, ] .filter(Boolean) @@ -496,7 +496,7 @@ export async function finalizeOnboardingWizard( : [ "If you want your agent to be able to search the web, you’ll need an API key.", "", - "OpenClaw uses Brave Search for the `web_search` tool. Without a Brave Search API key, web search won’t work.", + "Ironclaw uses Brave Search for the `web_search` tool. Without a Brave Search API key, web search won’t work.", "", "Set it up interactively:", `- Run: ${formatCliCommand("openclaw configure --section web")}`, @@ -515,10 +515,10 @@ export async function finalizeOnboardingWizard( await prompter.outro( controlUiOpened - ? "Onboarding complete. Dashboard opened; keep that tab to control OpenClaw." + ? "Onboarding complete. Dashboard opened; keep that tab to control Ironclaw." : seededInBackground ? "Onboarding complete. Web UI seeded in the background; open it anytime with the dashboard link above." - : "Onboarding complete. Use the dashboard link above to control OpenClaw.", + : "Onboarding complete. Use the dashboard link above to control Ironclaw.", ); return { launchedTui }; diff --git a/src/wizard/onboarding.ts b/src/wizard/onboarding.ts index e5cab60f6f7..b53af620770 100644 --- a/src/wizard/onboarding.ts +++ b/src/wizard/onboarding.ts @@ -55,11 +55,11 @@ async function requireRiskAcknowledgement(params: { [ "Security warning — please read.", "", - "OpenClaw is a hobby project and still in beta. Expect sharp edges.", + "Ironclaw is a hobby project and still in beta. Expect sharp edges.", "This bot can read files and run actions if tools are enabled.", "A bad prompt can trick it into doing unsafe things.", "", - "If you’re not comfortable with basic security and access control, don’t run OpenClaw.", + "If you’re not comfortable with basic security and access control, don’t run Ironclaw.", "Ask someone experienced to help before enabling tools or exposing it to the internet.", "", "Recommended baseline:", @@ -92,7 +92,7 @@ export async function runOnboardingWizard( prompter: WizardPrompter, ) { printWizardHeader(runtime); - await prompter.intro("OpenClaw onboarding"); + await prompter.intro("Ironclaw onboarding"); await requireRiskAcknowledgement({ opts, prompter }); const snapshot = await readConfigFileSnapshot();