mcpField
L
local-environment

local-environment

github.com/polarsourceCloud & DevOps10.4k84 installsUpdated today
Repository

About local-environment

Local Environment Skill guides developers through managing Polar's local development stack with the `dev docker` CLI. It explains shared infrastructure, per-worktree app instances, ports, and common operations.

Key features

  1. 01Start, stop, and restart services
  2. 02Inspect logs and troubleshoot errors
  3. 03Manage parallel worktree instances
  4. 04Discover instance ports and URLs
  5. 05Run commands inside services

Use cases

  1. 01Bring up or shut down a Polar development stack
  2. 02Debug a service that fails to start
  3. 03Run isolated environments across worktrees
  4. 04Find the correct service port or access a container

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/polarsource/polar --skill local-environment

After installing, type/local-environmentin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

AGENTS.md
rules/
manage-instances.md
payment-testing.md
service-architecture.md
shell-and-workflows.md
start-environment.md
stop-environment.md
troubleshooting.md
view-logs.md

Details

From the project README

Local Environment Skill

Helps manage the Polar local development environment through the dev docker CLI. Use it to start, stop, debug, or reason about the local stack.

The two-part model

dev docker deliberately splits the stack so many worktrees can share one set of heavy infra:

  • Shared infra — one copy per machine, Docker project polar-shared: postgres, redis, minio, tinybird, and optional prometheus/grafana. Postgres and redis publish no host ports; MinIO exposes 9000/9001 for browser uploads. Use dev docker exec <service> ... for services without host ports.
  • Per-instance app stack — one per worktree, project polar-app-<N>: api, worker, web. Only api and web publish host ports, offset per instance so worktrees don't collide.

Knowing this prevents the most common confusion: there is no localhost:5432 for the database (it lives in the shared stack and is reached through dev docker exec db ...). MinIO does expose ports 9000/9001 for browser uploads and console access.

Instance auto-detection

dev docker auto-detects the instance for the current worktree, so -i is rarely needed. Priority:

  1. POLAR_DOCKER_INSTANCE pinned in dev/docker/.env.docker (dev docker set-instance N)
  2. The cross-worktree registry (~/.config/polar/docker-instances.json)
  3. Otherwise the lowest free number, then registered

Run dev docker ports to see the resolved instance and its URLs (add --json for tooling). To wire this worktree into Claude Code's preview, run dev docker launch-json, which writes a per-instance .claude/launch.json with the correct ports (it's gitignored, so regenerate after set-instance).

When to use

  • Start / stop / restart the local environment
  • View logs or debug a service that won't come up
  • Run several isolated worktree instances in parallel
  • Understand the service architecture or find a service's real port
  • Diagnose container or first-boot errors

Quick reference

TaskCommand
Start full stack (background)dev docker up -d
Start and block until healthydev docker up -d --wait
Start in foreground (stream logs)dev docker up --no-detach
Rebuild with fresh base imagesdev docker up -b --pull -d
Show this instance's ports/URLsdev docker ports (--json for tooling)
Write Claude Code preview configdev docker launch-json
Stop app stackdev docker down
Stop app and shared infradev docker down --all
Follow logsdev docker logs -f [service]
Print logs and exitdev docker logs --no-follow [service]
Statusdev docker ps
Restart a servicedev docker restart <service>
Shell into a servicedev docker shell <service>
One-off command in a servicedev docker exec <service> <cmd>
Reset this instancedev docker cleanup -f
Wipe ALL shared datadev docker cleanup --all -f
List every instancedev docker list
With monitoringdev docker up --monitoring -d

Services

ServiceProjectHost port (instance 0 / N)Notes
apipolar-app-<N>8000 / 8100+NFastAPI; /healthz healthcheck
webpolar-app-<N>3000 / 3100+NNext.js; healthchecked
workerpolar-app-<N>noneBackground jobs
dbpolar-sharednone (exec)PostgreSQL; DB polar_dev_<N>
redispolar-sharednone (exec)Redis DB index = N
miniopolar-shared9000, 9001S3; buckets polar-s3-<N>; console at 9001
tinybirdpolar-sharednone (exec)Analytics
prometheus / grafanapolar-sharednone (exec)--monitoring only

Discover the exact host ports for the current worktree with dev docker ports.

Instance port mapping

Only api and web get host ports: Port = Base + Instance (Base 8100 for api, 3100 for web) for instances 1–99. Instance 0 uses the legacy 8000 / 3000.

InstanceAPIWeb
080003000
181013101
281023102
581053105

Everything else is per-instance but not on a host port: database polar_dev_<N>, redis DB index <N>, buckets polar-s3-<N> / polar-s3-public-<N>. Reach them via dev docker exec <service> or docker exec polar-shared-<service>-1.

Rules index

RuleCategoryDescription
service-architectureReferenceService details, ports, healthchecks
start-environmentOperationsStarting the stack (flags, --wait, --pull)
stop-environmentOperationsStopping and cleanup (app vs shared)
manage-instancesOperationsParallel worktree instances
view-logsDebuggingViewing service logs
shell-and-workflowsOperationsShell access and common dev workflows
troubleshootingDebuggingCommon errors and fixes
payment-testingOperationsLogin codes, Stripe webhooks, backoffice

Comments

Markdown supported