dev-server-detection.md
40 lines · skills/ce-polish/references/dev-server-detection.md at 3449230
Most marks come from matching words in the file, so treat them as pointers.
Dev-server port detection
Port resolution runs via scripts/resolve-port.sh. This document explains the probe order, framework defaults, and the script's intentional parsing choices.
This cascade runs only while the startup tuple's port remains unresolved. A numeric port from the selected launch configuration completes that fact and skips this cascade. When the cascade is needed, it supplies only the port; it never replaces a selected command, working directory, or environment.
Raw lines 1 to 6Priority order
- **Explicit
--portflag** -- if the caller passed--port <n>, use it directly. - Framework config files --
next.config.*,vite.config.*,nuxt.config.*,astro.config.*scanned with a conservative regex matching only numeric literal port values. Variable references (process.env.PORT,getPort()) are deliberately not matched. - **Rails
config/puma.rb** -- grep forport <n>. - **
Procfile.dev** -- web line scanned for-p <n>/--port <n>/-p=<n>/--port=<n>. - **
docker-compose.yml** -- line-anchored grep for"<n>:<n>"port mapping patterns. Not full YAML parsing. - **
package.json** --dev/startscripts scanned for--port <n>/-p <n>/--port=<n>/-p=<n>. - **
.envfiles** -- checked in override order:.env.local->.env.development->.env(first hit wins). ParsesPORT=<n>with quote stripping and comment truncation. - Framework default lookup table -- see table below.
Framework defaults
| Framework | Default port |
|---|---|
| Rails | 3000 |
| Next.js | 3000 |
| Nuxt | 3000 |
| Remix (classic) | 3000 |
| Vite | 5173 |
| SvelteKit | 5173 |
| Astro | 4321 |
| Procfile | 3000 |
| Unknown | 3000 |
.env parsing choices
resolve-port.sh makes two deliberate parsing choices for real-world .env files; do not "simplify" them away:
**(a) Quote stripping on .env values.** Strips surrounding " and ' from PORT= values (so PORT="3001" resolves to 3001), because quoting is common in real .env files.
**(b) Comment stripping on .env values.** Truncates at # after trimming whitespace (so PORT=3001 # dev only resolves to 3001), because inline comments are common.
(c) No instruction-file port grep. The script does not grep AGENTS.md/CLAUDE.md for port references. Instruction files carry natural language that may mention ports in contexts unrelated to the dev server (documentation, examples, troubleshooting), producing false positives that are hard to debug; the filename is also harness-specific. Framework config files and .env are the reliable sources of truth. The agent may still honor a dev-server port it reads from its in-context project instructions, but the script does not shell-grep named instruction files.