Skip to content

Commit e3571af

Browse files
ziggyclaude
andcommitted
Rebrand to GhostClaw, strip dead code
- Rename nanoclaw -> ghostclaw in package.json, user-facing strings - Delete mount-security.ts (unused since containerization removed) - Remove container-runtime no-op calls from startup - Add com.ghostclaw.plist launchd template - Remove Chinese README (fork-specific) - Fix Telegram voice test for transcription fallback - 380 tests passing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent d5e2090 commit e3571af

10 files changed

Lines changed: 46 additions & 641 deletions

README_zh.md

Lines changed: 0 additions & 200 deletions
This file was deleted.

launchd/com.ghostclaw.plist

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>Label</key>
6+
<string>com.ghostclaw</string>
7+
<key>ProgramArguments</key>
8+
<array>
9+
<string>{{NODE_PATH}}</string>
10+
<string>{{PROJECT_ROOT}}/dist/index.js</string>
11+
</array>
12+
<key>WorkingDirectory</key>
13+
<string>{{PROJECT_ROOT}}</string>
14+
<key>RunAtLoad</key>
15+
<true/>
16+
<key>KeepAlive</key>
17+
<true/>
18+
<key>EnvironmentVariables</key>
19+
<dict>
20+
<key>PATH</key>
21+
<string>{{HOME}}/.local/bin:/usr/local/bin:/usr/bin:/bin</string>
22+
<key>HOME</key>
23+
<string>{{HOME}}</string>
24+
<key>ASSISTANT_NAME</key>
25+
<string>Andy</string>
26+
</dict>
27+
<key>StandardOutPath</key>
28+
<string>{{PROJECT_ROOT}}/logs/ghostclaw.log</string>
29+
<key>StandardErrorPath</key>
30+
<string>{{PROJECT_ROOT}}/logs/ghostclaw.error.log</string>
31+
</dict>
32+
</plist>

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"name": "nanoclaw",
3-
"version": "1.1.6",
4-
"description": "Personal Claude assistant. Lightweight, secure, customizable.",
2+
"name": "ghostclaw",
3+
"version": "0.1.0",
4+
"description": "Personal AI assistant. Bare metal, Telegram-first, no containers.",
55
"type": "module",
66
"main": "dist/index.js",
77
"scripts": {

src/channels/telegram.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ describe('TelegramChannel', () => {
577577
);
578578
});
579579

580-
it('stores voice message with placeholder', async () => {
580+
it('stores voice message with transcription fallback', async () => {
581581
const opts = createTestOpts();
582582
const channel = new TelegramChannel('test-token', opts);
583583
await channel.connect();
@@ -587,7 +587,9 @@ describe('TelegramChannel', () => {
587587

588588
expect(opts.onMessage).toHaveBeenCalledWith(
589589
'tg:100200300',
590-
expect.objectContaining({ content: '[Voice message]' }),
590+
expect.objectContaining({
591+
content: expect.stringContaining('[Voice'),
592+
}),
591593
);
592594
});
593595

src/channels/whatsapp.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export class WhatsAppChannel implements Channel {
8989
'WhatsApp authentication required. Run /setup in Claude Code.';
9090
logger.error(msg);
9191
exec(
92-
`osascript -e 'display notification "${msg}" with title "NanoClaw" sound name "Basso"'`,
92+
`osascript -e 'display notification "${msg}" with title "GhostClaw" sound name "Basso"'`,
9393
);
9494
setTimeout(() => process.exit(1), 1000);
9595
}

src/container-runner.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Agent Runner for NanoClaw
2+
* Agent Runner for GhostClaw
33
* Spawns agent execution as direct Node.js processes (no containers)
44
*/
55
import { ChildProcess, spawn } from 'child_process';
@@ -200,7 +200,7 @@ export async function runContainerAgent(
200200
// Build environment for the agent process
201201
const agentEnv: Record<string, string> = {
202202
...(process.env as Record<string, string>),
203-
// NanoClaw-specific paths (replaces container volume mounts)
203+
// GhostClaw paths (replaces container volume mounts)
204204
NANOCLAW_GROUP_DIR: groupDir,
205205
NANOCLAW_IPC_DIR: groupIpcDir,
206206
NANOCLAW_GLOBAL_DIR: fs.existsSync(globalDir) ? globalDir : '',

src/container-runtime.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Container runtime abstraction for NanoClaw.
2+
* Container runtime abstraction for GhostClaw.
33
* Containerization removed — agents run directly on host.
44
* These are no-ops kept for API compatibility.
55
*/

src/index.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ import {
1818
writeGroupsSnapshot,
1919
writeTasksSnapshot,
2020
} from './container-runner.js';
21-
import {
22-
cleanupOrphans,
23-
ensureContainerRuntimeRunning,
24-
} from './container-runtime.js';
2521
import {
2622
getAllChats,
2723
getAllRegisteredGroups,
@@ -335,7 +331,7 @@ async function startMessageLoop(): Promise<void> {
335331
}
336332
messageLoopRunning = true;
337333

338-
logger.info(`NanoClaw running (trigger: @${ASSISTANT_NAME})`);
334+
logger.info(`GhostClaw running (trigger: @${ASSISTANT_NAME})`);
339335

340336
while (true) {
341337
try {
@@ -445,13 +441,7 @@ function recoverPendingMessages(): void {
445441
}
446442
}
447443

448-
function ensureContainerSystemRunning(): void {
449-
ensureContainerRuntimeRunning();
450-
cleanupOrphans();
451-
}
452-
453444
async function main(): Promise<void> {
454-
ensureContainerSystemRunning();
455445
initDatabase();
456446
logger.info('Database initialized');
457447
loadState();
@@ -539,7 +529,7 @@ const isDirectRun =
539529

540530
if (isDirectRun) {
541531
main().catch((err) => {
542-
logger.error({ err }, 'Failed to start NanoClaw');
532+
logger.error({ err }, 'Failed to start GhostClaw');
543533
process.exit(1);
544534
});
545535
}

0 commit comments

Comments
 (0)