Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when you need to locate, start, and verify a local SynthLabs backend before API-dependent work.
.claude/skills/mkurman-synthlabs-setup/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 86% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 143% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 98% | 0% |
Use this skill to locate a real SynthLabs checkout, start the documented local services, and prove the backend is healthy before doing anything else.
Use this skill when:
/health,npm, bun, or the repo's Docker Compose path,Do not use this skill when:
GET /health before any session, generation, curation, or UI step..env.local.Look for a repository root that contains all of these anchors:
package.json with "name": "synthlabs-reasoning-generator"server/index.js.env.exampleIf the checkout location is not already known, verify the candidate repo before running commands there.
If no local checkout exists yet, clone the public repository first:
bashgit clone https://github.com/mkurman/synthlabs.git cd synthlabs
After cloning, re-check the repo anchors before continuing with install or startup work.
Confirm which package manager, runtime, and container tooling are installed before choosing commands:
bashcommand -v node command -v npm command -v bun command -v docker docker compose version test -x ./mc.sh
npm workflow: requires node and npmbun workflow: requires bundocker, docker compose, and the repo's ./mc.sh wrapper scriptFrom the SynthLabs checkout:
bash# npm path npm install # bun path bun install
Use the package manager that is actually available. Do not invent lockfile or package-manager switches that the repo does not document.
Check whether .env.local already exists before copying anything:
bashtest -f .env.local
.env.local already exists, keep it and inspect it instead of replacing it..env.local is missing, copy from .env.example:bashcp .env.example .env.local
Populate only the variables required for the chosen workflow:
VITE_GEMINI_API_KEY, VITE_OPENAI_API_KEY, or other provider entries already present in .env.example.FIREBASE_PROJECT_ID, FIREBASE_CLIENT_EMAIL, FIREBASE_PRIVATE_KEY, FIREBASE_SERVICE_ACCOUNT_PATH, and related VITE_FIREBASE_* values are optional unless the task explicitly needs backend persistence, Firebase Admin operations, or cloud sync.If you are using the Docker Compose path, check whether .env exists before starting ./mc.sh:
bashtest -f .env
.env is missing, copy from .env.example:bashcp .env.example .env
.env.Do not add placeholder secrets or fake values.
From the SynthLabs checkout, use the documented scripts that match the task:
bash# frontend + backend together npm run dev # frontend only npm run dev:client # backend only npm run dev:server # bun frontend dev flow bun run bun:dev # Docker Compose manager ./mc.sh up # Docker Compose backend only ./mc.sh up backend # Docker Compose status and logs ./mc.sh status ./mc.sh logs backend
npm run dev when the task needs the standard local stack.npm run dev:server when you only need the backend for API checks.npm run dev:client or bun run bun:dev when the task is frontend-only, but still verify whether a backend is already running before assuming API-dependent features will work../mc.sh up when the task should run through the repo's Docker Compose stack, especially if it needs the bundled CockroachDB service../mc.sh wraps docker compose -f docker/docker-compose.yml ... and exposes up, down, stop, build, restart, logs, ps, and status.The real backend port behavior comes from server/index.js:
87878900PORT overrides either defaultPORT_RANGE enables auto-increment when the requested port is busyBackend listening on http://localhost:${port}; use that line when it is available.The Docker Compose path is different from the normal local dev path:
./mc.sh up publishes the frontend on http://localhost:3000./mc.sh up publishes the backend on http://localhost:8900./mc.sh up also starts CockroachDB with admin UI on http://localhost:8080NODE_ENV=production and PORT=8900When finding the selected port, check in this order:
PORT8900 when the repo was started through ./mc.sh8787 unless the task is clearly using production mode8900 only when the environment is explicitly productionPORT_RANGE allowed auto-incrementVerify readiness with the health route before any other API call:
bashcurl -fsS http://localhost:8787/health
For the Docker Compose path, verify the published backend directly:
bashcurl -fsS http://localhost:8900/health
Healthy output must decode to JSON equivalent to:
json{"ok":true,"service":"synthlabs-rg"}
If the expected port does not answer, probe the configured or incremented range until /health returns the required payload.
./mc.sh without checking whether .env exists for the compose path..env.local instead of inspecting it first.8787 is always correct even when PORT or PORT_RANGE changed the selected port.8787 instead of the compose-published 8900./health.node and npm or bun are actually installed..env.local exists if the chosen workflow requires local configuration./health never returns the required JSON, stop and report the exact command, port, and failure instead of guessing at follow-up API steps.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→fail | 5,017 | 5,620 | +12% | 1 | 1 | 0% | 189 | 2,176 | +1051% | 0 | 0 | — |
case-04 | fail→pass | 9,838 | 5,649 | -43% | 1 | 1 | 0% | 1,522 | 2,828 | +86% | 0 | 0 | — |
case-01 | fail→fail | 4,503 | 5,420 | +20% | 1 | 1 | 0% | 218 | 2,095 | +861% | 0 | 0 | — |
case-02 | fail→fail | 5,164 | 5,884 | +14% | 1 | 1 | 0% | 296 | 2,103 | +610% | 0 | 0 | — |
case-05 | fail→pass | 10,545 | 2,314 | -78% | 1 | 1 | 0% | 946 | 2,295 | +143% | 0 | 0 | — |
case-06 | pass→pass | 6,543 | 2,869 | -56% | 1 | 1 | 0% | 1,097 | 2,324 | +112% | 0 | 0 | — |
case-07 | pass→pass | 8,504 | 3,088 | -64% | 1 | 1 | 0% | 1,376 | 2,362 | +72% | 0 | 0 | — |
case-08 | pass→pass | 8,747 | 3,832 | -56% | 1 | 1 | 0% | 1,440 | 2,563 | +78% | 0 | 0 | — |
case-09 | fail→pass | 11,379 | 3,813 | -66% | 1 | 1 | 0% | 1,706 | 2,663 | +56% | 0 | 0 | — |
case-10 | fail→pass | 9,265 | 2,936 | -68% | 1 | 1 | 0% | 1,573 | 2,344 | +49% | 0 | 0 | — |
case-11 | fail→pass | 9,292 | 4,829 | -48% | 1 | 1 | 0% | 1,356 | 2,689 | +98% | 0 | 0 | — |
case-12 | fail→fail | 5,696 | 1,900 | -67% | 1 | 1 | 0% | 876 | 2,168 | +147% | 0 | 0 | — |
case-13 | fail→pass | 9,732 | 2,770 | -72% | 1 | 1 | 0% | 1,575 | 2,394 | +52% | 0 | 0 | — |
case-14 | fail→pass | 9,202 | 2,893 | -69% | 1 | 1 | 0% | 1,450 | 2,363 | +63% | 0 | 0 | — |
case-15 | fail→pass | 18,213 | 2,668 | -85% | 1 | 1 | 0% | 2,837 | 2,273 | -20% | 0 | 0 | — |
case-16 | fail→pass | 9,720 | 1,703 | -82% | 1 | 1 | 0% | 1,543 | 2,058 | +33% | 0 | 0 | — |
case-17 | fail→pass | 8,553 | 1,976 | -77% | 1 | 1 | 0% | 1,419 | 2,209 | +56% | 0 | 0 | — |
case-18 | pass→pass | 10,559 | 4,919 | -53% | 1 | 1 | 0% | 1,706 | 2,785 | +63% | 0 | 0 | — |
case-19 | pass→pass | 7,408 | 2,546 | -66% | 1 | 1 | 0% | 1,262 | 2,285 | +81% | 0 | 0 | — |
case-20 | pass→pass | 8,389 | 6,471 | -23% | 1 | 1 | 0% | 1,413 | 3,064 | +117% | 0 | 0 | — |
case-21 | fail→pass | 6,139 | 6,323 | +3% | 1 | 1 | 0% | 1,003 | 2,969 | +196% | 0 | 0 | — |
case-22 | pass→pass | 8,248 | 6,847 | -17% | 1 | 1 | 0% | 1,294 | 2,982 | +130% | 0 | 0 | — |
case-23 | pass→pass | 8,996 | 5,483 | -39% | 1 | 1 | 0% | 1,368 | 2,753 | +101% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 20 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +48 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.