Agent skill
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.
Install this agent skill to your Project
npx add-skill https://github.com/b1rdmania/ghostclaw/tree/main/.claude/skills/setup-ghostclaw
SKILL.md
GhostClaw Setup
Interactive setup for a fresh GhostClaw install. Handles everything from dependencies to personality.
Phase 1: Dependencies
npm install
Check Node.js version:
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):
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:
-
Tell the user:
Create a Telegram bot:
- Open @BotFather in Telegram
- Send /newbot
- Pick a name and username
- Copy the token
-
Add to
.env:TELEGRAM_BOT_TOKEN=<token> -
If Telegram-only, add:
TELEGRAM_ONLY=true
WhatsApp setup
If WhatsApp selected:
- Run the app temporarily to get QR code:
bash
npm run build && node dist/index.js - Scan QR code with WhatsApp
- Stop the process (Ctrl+C)
Phase 4: Build and start
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 ofwhich 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.
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:
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:
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:
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:
- Identity section — bot name, what it does
- Soul section — communication style, banned patterns, user context
- Capabilities section — what it can do (tools, scheduling, web access)
- 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 themselvesgroups/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
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.
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 to share feedback, get help, or see what others are building.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-browser
Browse the web for any task — research topics, read articles, interact with web apps, fill forms, take screenshots, extract data, and test web pages. Use whenever a browser would be useful, not just when the user explicitly asks.
add-voice-transcription
Add voice message transcription to GhostClaw using ElevenLabs Scribe API. Automatically transcribes voice notes so the agent can read and respond to them.
sales-enablement
When the user wants to create sales collateral, pitch decks, one-pagers, objection handling docs, or demo scripts. Also use when the user mentions 'sales deck,' 'pitch deck,' 'one-pager,' 'leave-behind,' 'objection handling,' 'deal-specific ROI analysis,' 'demo script,' 'talk track,' 'sales playbook,' 'proposal template,' 'buyer persona card,' 'help my sales team,' 'sales materials,' or 'what should I give my sales reps.' Use this for any document or asset that helps a sales team close deals. For competitor comparison pages and battle cards, see competitor-alternatives. For marketing website copy, see copywriting. For cold outreach emails, see cold-email.
seo-audit
When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions "SEO audit," "technical SEO," "why am I not ranking," "SEO issues," "on-page SEO," "meta tags review," "SEO health check," "my traffic dropped," "lost rankings," "not showing up in Google," "site isn't ranking," "Google update hit me," "page speed," "core web vitals," "crawl errors," or "indexing issues." Use this even if the user just says something vague like "my SEO is bad" or "help with SEO" — start with an audit. For building pages at scale to target keywords, see programmatic-seo. For adding structured data, see schema-markup. For AI search optimization, see ai-seo.
churn-prevention
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers or wants to build systems to prevent it. For post-cancel win-back email sequences, see email-sequence. For in-app upgrade paywalls, see paywall-upgrade-cro.
qodo-pr-resolver
Review and resolve PR issues with Qodo - get AI-powered code review issues and fix them interactively (GitHub, GitLab, Bitbucket, Azure DevOps)
Didn't find tool you were looking for?