{"slug": "devctl-a-handy-way-to-manage-many-dev-servers", "title": "Devctl, a handy way to manage many dev servers", "summary": "Devctl, a new open-source tool for macOS, provides a menu bar command center and CLI for managing local dev servers, designed to prevent coding agents from losing track of servers they started. The tool, built by developer quantizor, uses a launchd-supervised daemon to own server processes, ensuring servers, logs, and crash forensics persist across sessions. Devctl offers idempotent commands like 'devctl ensure web' and a 'why' command for root-cause diagnosis, with a full CLI contract and support for project-level configuration via devservers.json.", "body_md": "A macOS menu bar command center for local dev servers, built so coding agents never lose track of the servers they started.\n\nA launchd-supervised daemon owns every server process. Sessions come and go, contexts compact, terminals close: the servers, their logs, and their crash forensics stay. A CLI designed for agents (stable `--json`\n\neverywhere) and a quiet menu bar app for you sit on top of the same unix socket.\n\nAgents forget their dev servers. After a context compaction they spawn duplicates, tail dead logs, and fight over ports. devctl gives them one idempotent verb (`devctl ensure web`\n\n) that always lands in the same place, a session hook that re-teaches every new or compacted session what is running, and a `why`\n\ncommand that turns a broken server into a root-cause diagnosis.\n\n(Your agent can do all of this for you, just point them at the repo.)\n\n```\nmake install          # binaries to ~/.local/bin, app to /Applications, daemon installed\ncd your-project\ndevctl register --name web --cmd bun --cmd run --cmd dev --port 3000\ndevctl ensure web     # idempotent: healthy is a no-op\ndevctl why web        # root cause when something breaks\ndevctl hook install   # Claude Code sessions rediscover servers automatically\n```\n\nOr commit a `devservers.json`\n\nat the project root (multiple servers, dependencies, healthchecks, `*.localhost`\n\nhost signatures, multi-headed proxies, lifecycle playbooks); `devctl up`\n\nbrings the whole project up in dependency order. The full CLI contract lives in [docs/cli-contract.md](/quantizor/devctl/blob/main/docs/cli-contract.md).\n\n`devctld`\n\n: the daemon. Spool-file output capture (children survive daemon restarts without SIGPIPE), process-group plus descendant-sweep teardown, health-gated phases, crash forensics, structured logs with correlation marks, a unified event feed.`devctl`\n\n: the CLI.`ensure`\n\n,`wait`\n\n,`up`\n\n/`down`\n\n,`logs --since-mark`\n\n,`mark`\n\n,`events`\n\n,`why`\n\n,`open`\n\n,`switch`\n\n,`lock`\n\n(pause servers sharing a resource while a test harness runs),`doctor`\n\n, and launchd management. Agents are the first-class consumer.`devctl.app`\n\n: the menu bar. Presence dots with counts, per-project rows with click-to-open heads (pinnable), crash notifications, a dashboard with live logs, an event timeline, and a validating config editor. Every server and head is Spotlight-searchable.\n\n`make build`\n\nand `make test`\n\n; `scripts/smoke.sh`\n\nis the end-to-end gate. No Xcode required, ever: the app bundle is assembled by a checked-in script. See `CLAUDE.md`\n\nfor the codebase map and `CONTRIBUTING.md`\n\nfor adding an agent-harness adapter.", "url": "https://wpnews.pro/news/devctl-a-handy-way-to-manage-many-dev-servers", "canonical_source": "https://github.com/quantizor/devctl", "published_at": "2026-07-23 15:42:01+00:00", "updated_at": "2026-07-23 15:52:43.826426+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Devctl", "quantizor", "Claude Code"], "alternates": {"html": "https://wpnews.pro/news/devctl-a-handy-way-to-manage-many-dev-servers", "markdown": "https://wpnews.pro/news/devctl-a-handy-way-to-manage-many-dev-servers.md", "text": "https://wpnews.pro/news/devctl-a-handy-way-to-manage-many-dev-servers.txt", "jsonld": "https://wpnews.pro/news/devctl-a-handy-way-to-manage-many-dev-servers.jsonld"}}