# Setup Ghostclaw

> First-time GhostClaw setup. Handles dependencies, authentication, channel configuration, main chat registration, soul building, and service setup. Use this for all new installs.

- Skill: `b1rdmania/setup-ghostclaw` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add b1rdmania/setup-ghostclaw`
- Raw SKILL.md: https://api.skillmd.com/api/skills/b1rdmania/setup-ghostclaw/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: b1rdmania (https://skillmd.com/u/b1rdmania)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/b1rdmania/setup-ghostclaw

---


# GhostClaw Setup

Interactive setup for a fresh GhostClaw install. Handles everything from dependencies to personality.

## Phase 1: Dependencies

```bash
npm install
```

Check Node.js version:
```bash
node --version  # Must be 20+
```

## Phase 2: Authentication

### Claude Code token

Ask: "Do you have a Claude Max subscription or an API key?"

**Claude Max (recommended):**
Tell the user to run this in a separate terminal (not inside Claude Code):
```bash
claude setup-token
```
Then ask them to paste the token. Add to `.env`:
```
CLAUDE_CODE_OAUTH_TOKEN=<token>
```

**API key:**
```
ANTHROPIC_API_KEY=<key>
```

### Model selection

AskUserQuestion: Which model should the bot use?
- Sonnet (Recommended) — fast, capable, cost-effective for most tasks
- Opus — most capable, slower, higher cost
- Haiku — fastest, cheapest, good for simple tasks

Add to `.env` based on choice:
```
GHOSTCLAW_MODEL=claude-sonnet-4-6    # Sonnet (recommended)
# GHOSTCLAW_MODEL=claude-opus-4-6    # Opus
# GHOSTCLAW_MODEL=claude-haiku-4-5-20251001  # Haiku
```

If they skip or aren't sure, default to Sonnet. Tell them: "You can change this any time by editing `GHOSTCLAW_MODEL` in `.env` and restarting."

### Bot name

AskUserQuestion: What should the bot be called?

Add to `.env`:
```
ASSISTANT_NAME=<name>
```

## Phase 3: Channels

AskUserQuestion: Which channels do you want?
- Telegram only (recommended — bot gets own identity)
- WhatsApp only
- Both

### Telegram setup

If Telegram selected:

1. Tell the user:
   > Create a Telegram bot:
   > 1. Open @BotFather in Telegram
   > 2. Send /newbot
   > 3. Pick a name and username
   > 4. Copy the token

2. Add to `.env`:
   ```
   TELEGRAM_BOT_TOKEN=<token>
   ```

3. If Telegram-only, add:
   ```
   TELEGRAM_ONLY=true
   ```

### WhatsApp setup

If WhatsApp selected:

1. Run the app temporarily to get QR code:
   ```bash
   npm run build && node dist/index.js
   ```
2. Scan QR code with WhatsApp
3. Stop the process (Ctrl+C)

## Phase 4: Build and start

```bash
npm run build
```

### Service setup

AskUserQuestion: Set up as a background service? (Yes / No, I'll run it manually)

If yes, detect OS:

**macOS:**

Read the template from `launchd/com.ghostclaw.plist`. Replace the `{{...}}` placeholders with actual values:
- `{{NODE_PATH}}` → result of `which node`
- `{{PROJECT_ROOT}}` → absolute path to the GhostClaw directory (e.g. `/Users/username/ghostclaw`)
- `{{HOME}}` → user's home directory (e.g. `/Users/username`)
- `{{ASSISTANT_NAME}}` → the bot name from `.env`

Write the resolved plist to `~/Library/LaunchAgents/com.ghostclaw.plist`.

```bash
mkdir -p PROJECT_ROOT/logs
launchctl load ~/Library/LaunchAgents/com.ghostclaw.plist
```

**Linux:**
Create systemd user service and enable it.

## Phase 5: Register main chat

Start the service and wait for connection.

**Telegram:** Tell the user to send `/chatid` to their bot. They'll get back `tg:XXXXXXX`. Register it:

```bash
node -e "
const { initDatabase, setRegisteredGroup } = require('./dist/db.js');
initDatabase();
setRegisteredGroup('CHAT_JID', {
  name: 'BOTNAME Main',
  folder: 'main',
  trigger: '@BOTNAME',
  added_at: new Date().toISOString(),
  requiresTrigger: false,
});
console.log('Main group registered');
"
```

Create group directory:
```bash
mkdir -p groups/main/logs
```

Restart the service.

## Phase 6: Soul building (onboarding)

This is what makes GhostClaw different. After the bot is running, build its personality.

AskUserQuestion: "Tell me about yourself — what do you do, what are you building, what matters to you? (A few sentences is fine)"

AskUserQuestion: "How do you like AI to communicate? Pick what resonates:"
- Direct and short — no fluff
- Detailed and thorough
- Casual and conversational
- Technical and precise

AskUserQuestion: "Any words, phrases, or patterns you hate in AI responses? (e.g. 'leverage', emoji, 'Great question!')"

AskUserQuestion: "What should the bot proactively help with?"
- Email monitoring
- News/trend watching
- Code review reminders
- Morning briefings
- Nothing — just respond when asked

### Generate the soul

If `groups/main/CLAUDE.md` doesn't exist yet, copy the template first:
```bash
cp groups/main/CLAUDE.md.template groups/main/CLAUDE.md
```

Then customise `groups/main/CLAUDE.md` based on the user's answers. The template provides the base structure — overwrite the placeholder sections with:

1. **Identity section** — bot name, what it does
2. **Soul section** — communication style, banned patterns, user context
3. **Capabilities section** — what it can do (tools, scheduling, web access)
4. **Admin section** — file paths, group management, IPC instructions

Use the answers to craft specific instructions. Examples:

If "direct and short":
```
Don't over-explain. Short answers. Show the work, don't narrate it. Two lines, not ten.
```

If banned words provided:
```
Never use these words: [list]. No filler. Write like Orwell.
```

### Write memory seed files

Based on user description, create initial memory files:
- `groups/main/about-user.md` — what they told you about themselves
- `groups/main/preferences.md` — communication and tool preferences

## Phase 7: Heartbeat (always set up)

The heartbeat is core to GhostClaw — it's what makes the agent proactive rather than reactive.

### Create HEARTBEAT.md

Create `groups/main/HEARTBEAT.md` with a basic checklist. Ask the user what they'd like monitored — suggest:
- GhostClaw error log checks
- Disk space monitoring
- Email checks (if Gmail is set up)
- Any URLs or services they want pinged

### Register the heartbeat task

```bash
mkdir -p data/ipc/main/tasks
cat > "data/ipc/main/tasks/heartbeat_$(date +%s).json" << 'EOF'
{
  "type": "schedule_task",
  "prompt": "Read $GHOSTCLAW_GROUP_DIR/HEARTBEAT.md (or ./HEARTBEAT.md in the current directory) and run each check listed. Only message the user if something needs attention. If everything is fine, respond with <internal>All checks passed</internal> and nothing else.",
  "schedule_type": "cron",
  "schedule_value": "*/30 * * * *",
  "context_mode": "isolated"
}
EOF
```

Tell the user: "Heartbeat is running. It checks every 30 minutes and only messages you if something needs attention. Edit `groups/main/HEARTBEAT.md` any time to add or remove checks."

## Phase 8: Verify

Tell the user to send a message to the bot. Check logs to confirm it responds.

```bash
tail -20 logs/ghostclaw.log | grep -E "Processing|Agent output|error"
```

If working: "You're set. Talk to BOTNAME — it knows who you are."

## Phase 9: Optional extras

After core setup, offer optional extras. Use AskUserQuestion with multiSelect:

- `/add-update-check` — weekly check for GhostClaw updates (recommended)
- `/add-morning-briefing` — scheduled daily/weekly briefings
- `/add-gmail-agent` — email access for the bot (needs Google Cloud OAuth)
- `/add-voice-transcription` — voice note transcription (needs ElevenLabs key)
- `/add-voice-reply` — bot replies with voice notes via ElevenLabs (needs ElevenLabs key)

Run each selected skill in sequence. If none selected, skip — they can always add these later.

After setup, let the user know about the community:

> Join the [OpenClawOS community on Telegram](https://t.me/+8qJbqxzBQAZkYTNk) to share feedback, get help, or see what others are building.

