setup
Skill98 starsChanged 8 months agoApache-2.0View on GitHub
Run initial MatClaw setup. Use when user wants to install dependencies, authenticate messaging channels, register their main channel, or start the background services. Triggers on "setup", "install", "configure matclaw", or first-time setup requests.
- Pipes a download into a shell
- Reads credentials
- Installs packages
191 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- finolabs/vibecodetheir own version, first seen Nov 15, 2026
- quickchatai/quickreviewtheir own version, first seen Nov 15, 2026
- tomw1808/flash-agentstheir own version, first seen Nov 15, 2026
- felipeam86/pipe-skillstheir own version, first seen Nov 15, 2026
- oss-invisible/playwright_mcptheir own version, first seen Nov 15, 2026
- hydra-db/hydradb-claude-codetheir own version, first seen Nov 8, 2026
Used with
Projects with it also use update-nanoclaw, add-codex and 2 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MicrosoftSkillupdate-nanoclaw
Efficiently bring upstream NanoClaw updates into a customized install, with preview, selective cherry-pick, and low token usage.
Also in 9 projects that use this
MicrosoftSkilladd-codex
Use Codex (CLI + AppServer) as the full agent provider — planning, tool orchestration, native compaction, MCP tools, session resume — in place of the Claude Agent SDK. ChatGPT subscription or OPENAI_API_KEY. Per-group via agent_provider. Distinct from using OpenAI as an MCP tool (where Claude remains the planner).
Also in 7 projects that use this
- +2 more from microsoft
Other versions191 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- b1rdmania/ghostclaw★ 9161% same
Wrote their own version · 190
- anthropics/knowledge-work-plugins★ 35ksame name
- garrytan/gbrain★ 32ksame name
- gavrielc/nanoclaw★ 31ksame name
- nanocoai/nanoclaw★ 31ksame name
- qwibitai/nanoclaw★ 31ksame name
- Q00/ouroboros★ 6.3ksame name
- pytorch/executorch★ 5.2ksame name
- agenticnotetaking/arscontexta★ 3.5ksame name
- aws/agent-toolkit-for-aws★ 3.4ksame name
- spotify/portal-ai-plugins★ 2.8ksame name
180 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository20 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- add-dingtalkSkill
- add-discordSkill
- add-gmailSkill
- add-ollama-toolSkill
- add-parallelSkill
- add-slackSkill
- add-telegramSkill
- add-telegram-swarmSkill
- add-vaspSkill
- add-voice-transcriptionSkill
- add-whatsappSkill
- convert-to-apple-containerSkill
- customizeSkill
- debugSkill
- get-qodo-rulesSkill
- qodo-pr-resolverSkill
- update-matclawSkill
- use-local-whisperSkill
- x-integrationSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
16 rules. 0 are common, 1 is distinctive, and 15 are very specific to this project.
0
Common
Most of the 170 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
15
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Run setup steps automatically.
- Very specific: line 12
UX Note: Use AskUserQuestion for all user-facing questions.
- Very specific: line 16
Run bash setup.sh and parse the status block.
- Very specific: line 18
If NODE_OK=false → Node.js is missing or too old.
- Very specific: line 21
After installing Node, re-run bash setup.sh
- Very specific: line 22
If DEPS_OK=false → Read logs/setup.log.
- Very specific: line 23
If NATIVE_OK=false → better-sqlite3 failed to load.
- Very specific: line 30
If HAS_AUTH=true → WhatsApp is already configured, note for step 5
- Very specific: line 31
If HAS_REGISTERED_GROUPS=true → note existing config, offer to skip or reconfigure
- Very specific: line 38
Check the preflight results for APPLE_CONTAINER and DOCKER, and the PLATFORM from step 1.
- Very specific: line 70
If BUILD_OK=false: Read logs/setup.log tail for the build error.
- Distinctive: line 123
If service already running: unload first.
- Very specific: line 146
Read logs/setup.log for the error.
- Very specific: line 167
Service not starting: Check logs/matclaw.error.log.
- Very specific: line 171
No response to messages: Check trigger pattern. Main channel doesn't need prefix.
- Very specific: line 173
Channel not connecting: Verify the channel's credentials are set in .env.
“Common” is measured: kept by at least 6 in 10 of the 170 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
MatClaw Setup
Run setup steps automatically. Only pause when user action is required (channel authentication, configuration choices). Setup uses bash setup.sh for bootstrap, then npx tsx setup/index.ts --step <name> for all other steps. Steps emit structured status blocks to stdout. Verbose logs go to logs/setup.log.
Principle: When something is broken or missing, fix it. Don't tell the user to go fix it themselves unless it genuinely requires their manual action (e.g. authenticating a channel, pasting a secret token). If a dependency is missing, install it. If a service won't start, diagnose and repair. Ask the user for permission when needed, then do the work.
UX Note: Use AskUserQuestion for all user-facing questions.
1. Bootstrap (Node.js + Dependencies)
Run bash setup.sh and parse the status block.
- If NODE_OK=false → Node.js is missing or too old. Use
AskUserQuestion: Would you like me to install Node.js 22?If confirmed:- macOS:
brew install node@22(if brew available) or install nvm thennvm install 22 - Linux:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs, or nvm - After installing Node, re-run
bash setup.sh
- macOS:
- If DEPS_OK=false → Read
logs/setup.log. Try: deletenode_modulesandpackage-lock.json, re-runbash setup.sh. If native module build fails, install build tools (xcode-select --installon macOS,build-essentialon Linux), then retry. - If NATIVE_OK=false → better-sqlite3 failed to load. Install build tools and re-run.
- Record PLATFORM and IS_WSL for later steps.
2. Check Environment
Run npx tsx setup/index.ts --step environment and parse the status block.
- If HAS_AUTH=true → WhatsApp is already configured, note for step 5
- If HAS_REGISTERED_GROUPS=true → note existing config, offer to skip or reconfigure
- Record APPLE_CONTAINER and DOCKER values for step 3
3. Container Runtime
3a. Choose runtime
Check the preflight results for APPLE_CONTAINER and DOCKER, and the PLATFORM from step 1.
- PLATFORM=linux → Docker (only option)
- PLATFORM=macos + APPLE_CONTAINER=installed → Use
AskUserQuestion: Docker (cross-platform) or Apple Container (native macOS)?If Apple Container, run/convert-to-apple-containernow, then skip to 4c. - PLATFORM=macos + APPLE_CONTAINER=not_found → Docker
3a-docker. Install Docker
- DOCKER=running → continue to 4b
- DOCKER=installed_not_running → start Docker:
open -a Docker(macOS) orsudo systemctl start docker(Linux). Wait 15s, re-check withdocker info. - DOCKER=not_found → Use
AskUserQuestion: Docker is required for running agents. Would you like me to install it?If confirmed:- macOS: install via
brew install --cask docker, thenopen -a Dockerand wait for it to start. If brew not available, direct to Docker Desktop download at https://docker.com/products/docker-desktop - Linux: install with
curl -fsSL https://get.docker.com | sh && sudo usermod -aG docker $USER. Note: user may need to log out/in for group membership.
- macOS: install via
3b. Apple Container conversion gate (if needed)
If the chosen runtime is Apple Container, you MUST check whether the source code has already been converted from Docker to Apple Container. Do NOT skip this step. Run:
grep -q "CONTAINER_RUNTIME_BIN = 'container'" src/container-runtime.ts && echo "ALREADY_CONVERTED" || echo "NEEDS_CONVERSION"If NEEDS_CONVERSION, the source code still uses Docker as the runtime. You MUST run the /convert-to-apple-container skill NOW, before proceeding to the build step.
If ALREADY_CONVERTED, the code already uses Apple Container. Continue to 4c.
If the chosen runtime is Docker, no conversion is needed. Continue to 4c.
3c. Build and test
Run npx tsx setup/index.ts --step container -- --runtime <chosen> and parse the status block.
If BUILD_OK=false: Read logs/setup.log tail for the build error.
- Cache issue (stale layers):
docker builder prune -f(Docker) orcontainer builder stop && container builder rm && container builder start(Apple Container). Retry. - Dockerfile syntax or missing files: diagnose from the log and fix, then retry.
If TEST_OK=false but BUILD_OK=true: The image built but won't run. Check logs — common cause is runtime not fully started. Wait a moment and retry the test.
4. API Configuration
Run npm run setup:api and parse the status block.
The interactive wizard handles provider selection (34 providers: Anthropic, Gemini, OpenAI, DeepSeek, Qwen, GLM, Kimi, and more), API key input with validation, and .env updates. If the user already has keys configured (detected from .env or Claude OAuth), the wizard will show the current config and offer to keep or reconfigure.
If STATUS=ok: API configured. Continue to step 5.
If STATUS=failed:
- ERROR contains "validation" → API key is invalid. Re-run the step.
- ERROR contains "non_interactive" → Not running interactively. Tell the user to run
npm run setup:apiin a terminal.
5. Set Up Channels
AskUserQuestion (multiSelect): Which messaging channels do you want to enable?
- WhatsApp (authenticates via QR code or pairing code)
- Telegram (authenticates via bot token from @BotFather)
- Slack (authenticates via Slack app with Socket Mode)
- Discord (authenticates via Discord bot token)
Delegate to each selected channel's own skill. Each channel skill handles its own code installation, authentication, registration, and JID resolution. This avoids duplicating channel-specific logic and ensures JIDs are always correct.
For each selected channel, invoke its skill:
- WhatsApp: Invoke
/add-whatsapp - Telegram: Invoke
/add-telegram - Slack: Invoke
/add-slack - Discord: Invoke
/add-discord
Each skill will:
- Install the channel code (via
apply-skill) - Collect credentials/tokens and write to
.env - Authenticate (WhatsApp QR/pairing, or verify token-based connection)
- Register the chat with the correct JID format
- Build and verify
After all channel skills complete, continue to step 6.
6. Mount Allowlist
AskUserQuestion: Agent access to external directories?
No: npx tsx setup/index.ts --step mounts -- --empty
Yes: Collect paths/permissions. npx tsx setup/index.ts --step mounts -- --json '{"allowedRoots":[...],"blockedPatterns":[],"nonMainReadOnly":true}'
7. Start Service
If service already running: unload first.
- macOS:
launchctl unload ~/Library/LaunchAgents/com.matclaw.plist - Linux:
systemctl --user stop matclaw(orsystemctl stop matclawif root)
Run npx tsx setup/index.ts --step service and parse the status block.
If FALLBACK=wsl_no_systemd: WSL without systemd detected. Tell user they can either enable systemd in WSL (echo -e "[boot]\nsystemd=true" | sudo tee /etc/wsl.conf then restart WSL) or use the generated start-matclaw.sh wrapper.
If DOCKER_GROUP_STALE=true: The user was added to the docker group after their session started — the systemd service can't reach the Docker socket. Ask user to run these two commands:
- Immediate fix:
sudo setfacl -m u:$(whoami):rw /var/run/docker.sock - Persistent fix (re-applies after every Docker restart):
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/socket-acl.conf << 'EOF'
[Service]
ExecStartPost=/usr/bin/setfacl -m u:USERNAME:rw /var/run/docker.sock
EOF
sudo systemctl daemon-reloadReplace USERNAME with the actual username (from whoami). Run the two sudo commands separately — the tee heredoc first, then daemon-reload. After user confirms setfacl ran, re-run the service step.
If SERVICE_LOADED=false:
- Read
logs/setup.logfor the error. - macOS: check
launchctl list | grep matclaw. If PID=-and status non-zero, readlogs/matclaw.error.log. - Linux: check
systemctl --user status matclaw. - Re-run the service step after fixing.
8. Verify
Run npx tsx setup/index.ts --step verify and parse the status block.
If STATUS=failed, fix each:
- SERVICE=stopped →
npm run build, then restart:launchctl kickstart -k gui/$(id -u)/com.matclaw(macOS) orsystemctl --user restart matclaw(Linux) orbash start-matclaw.sh(WSL nohup) - SERVICE=not_found → re-run step 7
- CREDENTIALS=missing → re-run step 4
- CHANNEL_AUTH shows
not_foundfor any channel → re-invoke that channel's skill (e.g./add-telegram) - REGISTERED_GROUPS=0 → re-invoke the channel skills from step 5
- MOUNT_ALLOWLIST=missing →
npx tsx setup/index.ts --step mounts -- --empty
Tell user to test: send a message in their registered chat. Show: tail -f logs/matclaw.log
Troubleshooting
Service not starting: Check logs/matclaw.error.log. Common: wrong Node path (re-run step 7), missing .env (step 4), missing channel credentials (re-invoke channel skill).
Container agent fails ("Claude Code process exited with code 1"): Ensure the container runtime is running — open -a Docker (macOS Docker), container system start (Apple Container), or sudo systemctl start docker (Linux). Check container logs in groups/main/logs/container-*.log.
No response to messages: Check trigger pattern. Main channel doesn't need prefix. Check DB: npx tsx setup/index.ts --step verify. Check logs/matclaw.log.
Channel not connecting: Verify the channel's credentials are set in .env. Channels auto-enable when their credentials are present. For WhatsApp: check store/auth/creds.json exists. For token-based channels: check token values in .env. Restart the service after any .env change.
Unload service: macOS: launchctl unload ~/Library/LaunchAgents/com.matclaw.plist | Linux: systemctl --user stop matclaw
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

