Ironclaw rebrand: rename user-facing strings, package identity, and CLI references

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"
This commit is contained in:
kumarabhirup 2026-02-11 23:38:34 -08:00
parent e8f5eddacb
commit dfaf7180b4
No known key found for this signature in database
GPG Key ID: DB7CA2289CAB0167
16 changed files with 30 additions and 30 deletions

View File

@ -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({

View File

@ -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
</h1>
{/* Tagline */}

View File

@ -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);
});
});
}

View File

@ -1,5 +1,5 @@
{
"name": "openclaw-web",
"name": "ironclaw-web",
"version": "0.1.0",
"private": true,
"scripts": {

View File

@ -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).");
}

View File

@ -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/",

View File

@ -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|$)/;

View File

@ -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",

View File

@ -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();

View File

@ -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");

View File

@ -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,

View File

@ -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}`,
"",

View File

@ -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}`,
),
);
};

View File

@ -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",

View File

@ -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, youll need an API key.",
"",
"OpenClaw uses Brave Search for the `web_search` tool. Without a Brave Search API key, web search wont work.",
"Ironclaw uses Brave Search for the `web_search` tool. Without a Brave Search API key, web search wont 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 };

View File

@ -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 youre not comfortable with basic security and access control, dont run OpenClaw.",
"If youre not comfortable with basic security and access control, dont 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();