Thank you for your interest in contributing to Webclaw! This guide will help you get set up for local development.
- Python 3.10+
- Node.js 20+ and npm
- Git
git clone https://github.com/avansaber/webclaw.git
cd webclaw
# Backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r api/requirements.txt
# Frontend
cd web
npm install
cd ..# Terminal 1: API server (auto-reload)
source .venv/bin/activate
cd api
uvicorn main:app --host 127.0.0.1 --port 8001 --reload
# Terminal 2: Next.js dev server (hot reload)
cd web
npm run devOpen http://localhost:3000 in your browser.
The database is auto-created on first API request at ~/.openclaw/webclaw/webclaw.sqlite. To reset it:
rm -f ~/.openclaw/webclaw/webclaw.sqlite
# Restart the API server — tables will be recreated| Directory | What | Language |
|---|---|---|
api/ |
FastAPI backend | Python |
api/auth/ |
JWT authentication, session management | Python |
api/chat/ |
AI chat endpoints | Python |
api/middleware/ |
CORS, rate limiting, security headers | Python |
api/skills/ |
Skill discovery, action execution, SKILL.md parser | Python |
api/tests/ |
Backend pytest tests | Python |
web/src/app/ |
Next.js app router pages | TypeScript/React |
web/src/components/ |
Reusable UI components (shadcn/ui) | TypeScript/React |
web/src/lib/ |
Auto-form-spec, param-schema, API client | TypeScript |
web/e2e/ |
Playwright E2E tests | TypeScript |
templates/ |
nginx and systemd config templates | Config |
scripts/ |
OpenClaw integration scripts | Bash/Python |
source .venv/bin/activate
cd api
python3 -m pytest tests/ -vcd web
npx playwright install chromium
# Against local dev server
E2E_BASE_URL=http://localhost:3000 E2E_EMAIL=admin@test.com E2E_PASSWORD=yourpass npx playwright test
# Against production
E2E_BASE_URL=https://your-server.com E2E_EMAIL=admin@test.com E2E_PASSWORD=yourpass npx playwright testnpx playwright test e2e/auth.spec.ts
npx playwright test e2e/dashboard.spec.ts --headed # Watch it run- Python: Follow PEP 8. Use type hints where practical. Keep functions focused.
- TypeScript: Follow the existing patterns in
web/src/. Use TypeScript strict mode. - Commits: Clear, concise messages. One logical change per commit.
- Tests: Every new feature or bug fix should include tests.
- Zero per-skill code — Webclaw must work for any OpenClaw skill automatically. No hardcoded skill names or custom components.
- Schema-driven — All UI rendering derives from SKILL.md metadata. If a skill has a valid SKILL.md, it gets a working UI.
- Progressive enhancement — Skills can optionally add a
webclawsection to their SKILL.md for custom entity lookups and domain configuration. - Security first — JWT auth, RBAC, rate limiting, audit logging, parameterized queries. No shortcuts.
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Make your changes with tests
- Run the test suite to verify nothing is broken
- Commit with a clear message
- Open a pull request against
master
Open an issue on GitHub with:
- What you expected to happen
- What actually happened
- Steps to reproduce
- Browser/OS/Node/Python versions if relevant
By contributing, you agree that your contributions will be licensed under the MIT License.