What you get
- 122 built-in skills — SEO, ads, content, social, audio, music, graphics, video, browser automation.
- Multi-agent personas — Growth Hacker, Social Media Strategist, Content Writer, Analytics Reporter, plus your own. Coordinated by a central Coordinator. Address with
@persona-namein chat; untagged messages route to the Coordinator. - 24 LLM providers with 150+ models — OpenAI, Anthropic, Gemini, DashScope, Alibaba, Xiaomi, Z.AI, xAI, Mistral, DeepSeek, Groq, Together, OpenRouter, Cerebras, MiniMax, Baseten, Moonshot, Inception, ModelScope, Ollama, llama.cpp, MLX, Azure OpenAI. Automatic failover between configured providers.
- Multi-channel chat — Telegram, Discord, Feishu, DingTalk, QQ, or the built-in web console.
- Always-On Memory (AOM) — vector + FTS5 dual-layer memory shared across personas and sessions.
- Cron — agents run scheduled jobs (publish, monitor, scrape) on their own work calendars.
- Citedy MCP (optional) — 52 SEO/marketing tools available out-of-the-box; users can also register their own MCP servers.
Prerequisites
Plan: Hobby or higher (≥ 2 GB RAM, 25 GB disk).
AdClaw bundles a Python agent runtime + skill registry + Chromium that need ≥ 600 MB on startup. The 30-day Trial 512 MB instance OOMs immediately. Hobby is $5/month + usage; idle AdClaw consumes about $0.50–$1/day so the included credits cover ~5 days of testing.
| Plan | Works? | Notes |
|---|---|---|
| Trial / 512 MB | No | OOM at startup |
| Hobby ($5/mo, 2 GB) | Yes | Recommended starter |
| Pro and higher | Yes | For multiple personas under load |
You'll also need:
- One LLM provider API key (any of the 24) — entered through the wizard after first deploy.
- (Optional) Telegram bot token, Discord token, or other channel credentials.
You do not need a Citedy account to use AdClaw — Citedy MCP is opt-in.
One-click deploy (recommended)
- Click Deploy on Railway at the top of this page.
- Choose Hobby plan when prompted.
- The template provisions one service with:
- Image source:
Citedy/adclaw(GitHub repo, builds fromdeploy/Dockerfile) - Two persistent volumes (
/app/working25 GB and/app/working.secret1 GB) - Environment variables (see below)
- Health check on
/api/diagnostics/healthwith 60 s timeout
- Image source:
- Wait 8–12 minutes for the first build (Chromium + Python + skill registry). Subsequent deploys are cached.
Manual deploy (without template)
If you prefer to wire it up yourself:
- New Project → Deploy from GitHub repo →
Citedy/adclaw. Or Deploy from Docker Image →nttylock/adclaw:latest. - Settings → Networking → expose port
8088, generate the public domain. - Settings → Build → confirm builder is Dockerfile with path
deploy/Dockerfile(read fromrailway.jsonautomatically). - Settings → Deploy:
- Health check path:
/api/diagnostics/health - Health check timeout:
60 - Restart policy:
ON_FAILURE, max retries 10
- Health check path:
- Settings → Volumes — attach two volumes (see "Persistent volumes" below).
- Variables — add the env vars from "Configuration" below.
- Settings → Resources — bump RAM to at least 2 GB, vCPU 1, disk 25 GB.
Configuration
Set these in Variables:
| Variable | Default | Notes |
|---|---|---|
ADCLAW_ENABLED_CHANNELS | console,telegram | Comma-separated subset of console,telegram,discord,dingtalk,feishu,qq |
LOG_LEVEL | INFO | DEBUG for troubleshooting cold starts |
TELEGRAM_BOT_TOKEN | (empty) | Required if telegram is in ADCLAW_ENABLED_CHANNELS |
DISCORD_TOKEN | (empty) | Required if discord enabled |
LLM provider API keys are entered through the first-boot wizard at the public URL, not as env vars. They land on the /app/working.secret volume so they survive redeploys.
Persistent volumes
AdClaw needs two volumes — without them every redeploy resets the wizard and your provider keys disappear.
| Mount path | Size | Holds |
|---|---|---|
/app/working | 25 GB | config.json, sessions, skills cache, sqlite database, agent memory |
/app/working.secret | 1 GB | providers.json (LLM API keys), envs.json |
If you only attach one, pick /app/working and accept that LLM keys live inside it (less isolation but functional).
Variants (Docker image tags)
| Tag | Image size | Idle RAM | Best for |
|---|---|---|---|
nttylock/adclaw:latest (default) | ~4.2 GB | 600–800 MB | Full feature set — Chromium for browser/scraping/social skills |
nttylock/adclaw:1.0.3-browser | ~4.1 GB | similar | Browser-only, no Feishu/DingTalk channels |
nttylock/adclaw:1.0.3-core | ~2.7 GB | 250–400 MB | Lightweight — no Chromium, no desktop tools |
Switch by editing Settings → Source to use a Docker Image source instead of GitHub repo, then set the image to nttylock/adclaw:1.0.3-core. Build is skipped — deploy is ~30 s.
Post-deploy workflow
- Open the public URL Railway gave you (e.g.
https://adclaw-production.up.railway.app). - The welcome wizard appears:
- Pick an LLM provider from the dropdown
- Paste the API key
- Click Continue — the agent loads with default personas
- Start chatting in the web console, or add
TELEGRAM_BOT_TOKENto Variables, restart, message your bot in Telegram. - Customize (optional):
- Personas tab → add specialists (e.g. "TikTok Strategist" with custom
soul.md) - Skills tab → enable/disable specific skills, scan custom ones
- Cron tab → schedule recurring tasks per persona
- MCP tab → connect external MCP servers (Citedy, your own)
- Personas tab → add specialists (e.g. "TikTok Strategist" with custom
Health check
curl https://<your-railway-url>/api/diagnostics/health
# → 200 OK
# → {"status":"healthy","uptime_seconds":1234,"subsystems":{...}}
Returns the status of LLM, channels, memory, AOM, MCP, and watchdog. Safe to poll from external monitors.
Cost estimate
Idle (no traffic, default config): about $0.50–$1/day on Hobby. Active use (continuous chat, browser skills, frequent cron): up to $3–5/day.
Hobby includes $5/month — covers light usage. Set Railway Spending Limits to cap.
Troubleshooting
- Build fails with "skipping Dockerfile"
- The
railway.jsonmust be at the repo root (notdeploy/). The public repo already has it correctly placed. - Deploy succeeds but health check fails after 10 s
- Default Railway health timeout is 10 s; AdClaw cold-starts in 30–60 s. Set
healthcheckTimeout: 60inrailway.json(already set in the default). - Service crashes with
SIGKILL - Out of memory. Either upgrade plan, switch to
corevariant, or reduceADCLAW_ENABLED_CHANNELS. - LLM keys disappear after redeploy
- Volume
/app/working.secretnot attached. Check Settings → Volumes. - Telegram bot doesn't respond
- Confirm
TELEGRAM_BOT_TOKENis set,telegramis inADCLAW_ENABLED_CHANNELS, and you've talked to the bot at least once (Telegram requires the user to send/startfirst).
Source code & support
- Public repo: github.com/Citedy/adclaw
- DigitalOcean Marketplace: marketplace.digitalocean.com/apps/adclaw
- Issues: github.com/Citedy/adclaw/issues
- License: Apache-2.0