This guide walks you through three methods to get GitMesh Agents running: Local Development, Docker Compose, and Docker CLI.
- Git (to clone the repo)
- 4GB RAM minimum (8GB recommended)
- 10GB free disk space
Best for hacking on GitMesh itself: reproducible installs, .env creation, workspace build.
- Node.js 20+ (download)
- pnpm is not strictly required upfront:
scripts/setup.mjswill try Corepack (pnpm@9.15.4) ifpnpmis missing
From the repository root, after cloning:
| Platform | Command |
|---|---|
| macOS / Linux | ./setup.sh |
| Windows (PS) | .\setup.ps1 |
| Windows (cmd) | setup.cmd |
These wrap node scripts/setup.mjs from the repo root (setup.mjs resolves paths from its own location), which will:
- Verify Node 20+
- Ensure pnpm (via Corepack if needed)
- Copy
.env.example→.envwhen.envis missing - Optionally start Docker Postgres on localhost:5433 (
--with-docker-db) - Run
pnpm install --no-frozen-lockfileandpnpm build - With
--start, also runspnpm dev
Examples:
node scripts/setup.mjs # install + build only
node scripts/setup.mjs --start # then start dev automatically
node scripts/setup.mjs --with-docker-db # also: docker compose -f docker-compose.dev.yml up -d
node scripts/setup.mjs --skip-build # deps only (unusual)After setup finishes (without --start):
pnpm devEquivalent to skipping the wrappers but matching what CI/script expect on a fresh clone:
git clone https://github.com/LF-Decentralized-Trust-labs/gitmesh.git
cd gitmesh
cp .env.example .env # optional; omit if .env exists
pnpm install --no-frozen-lockfile # matches scripts/setup.mjs — avoids lockfile churn on first clone
pnpm build
pnpm devChoose one model for local dev:
| Mode | What to do |
|---|---|
| Embedded PostgreSQL (default) | Leave DATABASE_URL unset or commented in .env. Data lives under ~/.gitmesh-agents/instances/default/db/ (overridable with GITMESH_HOME / GITMESH_INSTANCE_ID). No Docker required. |
Docker Postgres (docker-compose.dev.yml) |
Run pnpm db:up or node scripts/setup.mjs --with-docker-db, then set DATABASE_URL=postgres://gitmesh:gitmesh@localhost:5433/gitmesh in .env. Apply migrations after changes: DATABASE_URL='postgres://…' pnpm db:migrate. |
Port 5433 is only for this Docker Postgres stack, not for embedded mode. Detail: doc/DATABASE.md, doc/DEVELOPING.md.
pnpm dev- Default: API + bundled UI middleware on
http://localhost:3100(/apiand UI same origin).
Optional operator UX (recommended after scripted setup):
pnpm gitmesh-agents run # onboarding / checks / start helper (wizard)
pnpm gitmesh-agents doctor # diagnostics; `--repair` for auto-fix attemptsVerification:
curl http://localhost:3100/api/healthpnpm dev # API + UI (single origin, PORT from .env, default 3100)
pnpm dev:once # single run, no file watching
pnpm dev:server # API only (@gitmesh/server)
pnpm dev:ui # Vite UI only → http://localhost:5173 (proxies /api → API PORT, usually 3100)
# Split UI/API: dev:server in one terminal, dev:ui in another.
pnpm db:up # Docker Postgres via docker-compose.dev.yml (5433)
pnpm db:down # stop compose DB
pnpm -r typecheck # typecheck all packages
pnpm test:run # Vitest suite
pnpm build # production build (all packages)
pnpm gitmesh-agents --help # CLI subcommands (project, agent, audit, …)Error: ECONNREFUSED on PostgreSQL
- If
DATABASE_URLpoints atlocalhost:5433but Postgres is not running, startpnpm db:upor clearDATABASE_URLto use embedded DB. - If embedded DB corrupts / locked: stop
pnpm dev, remove~/.gitmesh-agents/instances/default/db, restart (data loss for local dev DB only).
Error: Missing module @gitmesh/*
pnpm install --no-frozen-lockfile
pnpm build
pnpm devChange HTTP port locally
Set PORT in .env (default 3100) — used by pnpm dev. pnpm dev:ui expects the API reachable at that PORT for /api proxy.
Recommended for one-command Docker deployment.
- Docker Engine 20.10+
- Docker Compose 2.0+
-
Clone the repo:
git clone https://github.com/LF-Decentralized-Trust-labs/gitmesh.git cd gitmesh -
Start with Compose:
docker compose -f docker-compose.quickstart.yml up --build
First build takes ~2-3 minutes. Subsequent runs are faster. If you previously saw
TS5023: Unknown compiler option '--filter=...@gitmesh/server', update to the latestDockerfileand rebuild with:docker compose -f docker-compose.quickstart.yml build --no-cache docker compose -f docker-compose.quickstart.yml up
-
Access the application:
- Open
http://localhost:3100in your browser
- Open
-
Verify it's running:
curl http://localhost:3100/api/health
Change port:
GITMESH_PORT=3200 docker compose -f docker-compose.quickstart.yml up --buildAdd API keys (Claude + OpenAI):
OPENAI_API_KEY=sk-... ANTHROPIC_API_KEY=sk-ant-... \
docker compose -f docker-compose.quickstart.yml up --buildUse external URL (for remote access):
GITMESH_PUBLIC_URL=https://agents.example.com \
docker compose -f docker-compose.quickstart.yml up --build- All data stored in:
./data/docker-gitmesh-agents - Database, uploads, and secrets are preserved across container restarts
- To reset:
rm -rf ./data/docker-gitmesh-agents
docker compose -f docker-compose.quickstart.yml downFor granular control over Docker configuration.
- Docker Engine 20.10+
-
Clone the repo:
git clone https://github.com/LF-Decentralized-Trust-labs/gitmesh.git cd gitmesh -
Build the image:
docker build -t gitmesh-agents-local .First build takes ~2-3 minutes.
-
Run the container:
docker run --name gitmesh-agents \ -p 3100:3100 \ -e HOST=0.0.0.0 \ -e GITMESH_HOME=/gitmesh-agents \ -v "$(pwd)/data/docker-gitmesh-agents:/gitmesh-agents" \ gitmesh-agents-local -
Access the application:
- Open
http://localhost:3100in your browser
- Open
docker run --name gitmesh-agents \
-p 3100:3100 \
-e HOST=0.0.0.0 \
-e GITMESH_HOME=/gitmesh-agents \
-e ANTHROPIC_API_KEY=sk-ant-... \
-e OPENAI_API_KEY=sk-... \
-v "$(pwd)/data/docker-gitmesh-agents:/gitmesh-agents" \
gitmesh-agents-localdocker stop gitmesh-agents
docker rm gitmesh-agents# Remove image
docker rmi gitmesh-agents-local
# Remove persisted data
rm -rf ./data/docker-gitmesh-agents| Use Case | Method | Time |
|---|---|---|
| Local development / debugging | Local Dev | ~5 min |
| Quick Docker test | Docker Compose | ~3 min |
| Production / CI-CD | Docker CLI or Compose | ~3 min |
| Headless / server only | Docker | N/A |
- Open
http://localhost:3100 - Click "New Project"
- Enter your GitHub repository URL
- Configure webhooks (GitHub → Settings → Webhooks)
For agent adapters to work:
Local Dev:
export ANTHROPIC_API_KEY=sk-ant-...
export OPENAI_API_KEY=sk-...
pnpm devDocker:
# Pass at container startup (see Method 2/3 above)
docker run ... -e ANTHROPIC_API_KEY=... -e OPENAI_API_KEY=... ...Create and manage agents from the operator UI at http://localhost:3100 once a project exists, or use the HTTP API.
CLI: the agent namespace today supports list, get, and local-cli — not create. Inspect help:
pnpm gitmesh-agents agent --helpFor local adapter / API key + playbooks:
pnpm gitmesh-agents agent local-cli <agentRef> -P <project-id>Health check:
curl http://localhost:3100/api/healthExpected response (shape may include extra fields):
{"status":"ok"}Projects / other API:
- In
local_trusted(default local dev), listing projects may succeed without credentials depending on middleware. - In
authenticated/GITMESH_DEPLOYMENT_MODE=authenticated(Docker quickstart builds this pattern),/api/projectsexpects a session or bearer token — use the UI orpnpm gitmesh-agents project --helpfor client flows rather than naivecurlalone.
Quickstart compose smoke check:
docker compose -f docker-compose.quickstart.yml up --build -d
curl http://localhost:3100/api/health
docker compose -f docker-compose.quickstart.yml down# Watch logs in real-time
pnpm dev
# Check database status
ls -la ~/.gitmesh-agents/instances/default/db# View container logs
docker logs gitmesh-agents
# Tail logs in real-time
docker logs -f gitmesh-agents
# Access container shell
docker exec -it gitmesh-agents bashLocal Dev:
# Optional: kill process listening on PORT (here 3100)
lsof -ti:3100 | xargs kill -9 # Unix
# Prefer setting PORT in .env rather than patching code:
# PORT=3200 (then restart `pnpm dev`)Docker:
# Use different port
docker run -p 3200:3100 ... gitmesh-agents-local# Check Docker disk usage
docker system df
# Clean up unused images/containers
docker system prune -a# Local Dev
rm -rf ~/.gitmesh-agents/instances/default/db
pnpm dev
# Docker
docker stop gitmesh-agents
rm -rf ./data/docker-gitmesh-agents
docker run ... gitmesh-agents-local# Local Dev
pnpm install --no-frozen-lockfile
pnpm -r build
pnpm dev
# Docker
docker build --no-cache -t gitmesh-agents-local .- Read the documentation: doc/GOAL.md and doc/v1-spec.md
- Explore the playbooks: playbooks/ directory
- Set up your first agent: See Post-Setup Configuration above
- Contributing: See CONTRIBUTING.md and AGENTS.md
- Issues: GitHub Issues
- Docs: doc/ directory (engineering) and
docs/(Mintlify site viapnpm docs:dev) - Developing: doc/DEVELOPING.md
- Database: doc/DATABASE.md