finding-dev-server-url — Claude Code skill: what it does & install
Scans running terminal sessions for dev server URLs and localhost ports. Useful when you need to locate active local endpoints or check port collisions.
npx skills add spencerpauly/awesome-cursor-skills --skill finding-dev-server-url -a claude-codeWhat finding-dev-server-url does
The skill checks active terminal log files in the environment folder, inspecting metadata like pid, cwd, and last_command. Non-server commands such as git status or cd get skipped immediately. When it spots a command like npm run dev, it parses the entire log file for URLs.
Detection rules match patterns from Next.js, Vite, Django, Flask, Express, and similar frameworks. The final report lists terminal IDs, directories, and matching localhost ports. If needed, it also calls browser_navigate to view the page and capture a screenshot.
This workflow relies on terminal files shaped as <terminals_folder>/<id>.txt, so it needs that directory path in the system context. It also highlights crash exit codes and errors like EADDRINUSE.
What it helps with
- locate localhost ports across multiple active terminals
- identify which terminal is running a specific dev server
- detect port binding conflicts such as EADDRINUSE
- preview a running web app via the internal browser
Example prompts for the agent
- Check running terminals and find the dev server URL
- Scan my terminals, tell me what port Vite is running on, and open it
- Find out if any dev server crashed or hit a port conflict
How to install finding-dev-server-url
1Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill finding-dev-server-url -a claude-code2Manually: put the files in place
~/.claude/skills/finding-dev-server-url/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/finding-dev-server-url/
1Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill finding-dev-server-url -a codex2Manually: put the files in place
.agents/skills/finding-dev-server-url/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill finding-dev-server-url -a cursor2Manually: put the files in place
.cursor/skills/finding-dev-server-url/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install spencerpauly/awesome-cursor-skills finding-dev-server-url2Manually: put the files in place
.github/skills/finding-dev-server-url/SKILL.md1Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill finding-dev-server-url -a gemini-cli2Platform CLI
gemini skills install https://github.com/spencerpauly/awesome-cursor-skills --path resources/finding-dev-server-urlManually: put the files in place
.devin/skills/finding-dev-server-url/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill finding-dev-server-url -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about finding-dev-server-url
How do I install finding-dev-server-url in Claude Code?
Run npx skills add spencerpauly/awesome-cursor-skills --skill finding-dev-server-url -a claude-code.
What does finding-dev-server-url do?
It reads terminal output logs to detect running development servers, extracts localhost URLs and port numbers, and provides a clear summary of active endpoints.
How does it handle server crashes or port errors?
The skill inspects the footer of terminal logs for an exit_code if a process stopped, and flags messages like EADDRINUSE or address already in use directly in its report.
Source text
SKILL.md · CC0-1.0
---
name: finding-dev-server-url
description: Scan running terminals for dev server URLs (localhost ports), report them, and optionally open the app in Cursor's built-in browser.
user-invocable: true
---
# Finding Dev Server URL
Detect which dev servers are running, what ports they're on, and open them.
## How It Works
Cursor stores live terminal output in text files. Each terminal has a file at:
```
<terminals_folder>/<id>.txt
```
The terminals folder path is provided in your system context. Each file contains metadata (pid, cwd, last command) followed by the full terminal output.
## Workflow
### 1. List All Terminals
```bash
ls <terminals_folder>/*.txt
```
### 2. Read Each Terminal's Metadata
Read the first ~10 lines of each terminal file to see:
- `pid` — process ID
- `cwd` — working directory
- `last_command` — what's running (e.g. `npm run dev`, `pnpm dev`, `python manage.py runserver`)
Skip terminals where the last command is clearly not a server (e.g. `git status`, `ls`, `cd`).
### 3. Scan for Server URLs
Read the full content of terminals that look like they're running a server. Search for these patterns:
| Framework | Pattern |
|-----------|---------|
| Next.js | `Local: http://localhost:XXXX` or `▲ Ready` |
| Vite | `Local: http://localhost:XXXX/` |
| Create React App | `Local: http://localhost:XXXX` |
| Express | `listening on port XXXX` or `listening at http://...` |
| Django | `Starting development server at http://127.0.0.1:XXXX/` |
| Rails | `Listening on http://127.0.0.1:XXXX` |
| Flask | `Running on http://127.0.0.1:XXXX` |
| Go | `Listening on :XXXX` or `http server started on :XXXX` |
| PHP | `Development Server (http://localhost:XXXX) started` |
| Remix | `http://localhost:XXXX` |
| Astro | `http://localhost:XXXX` |
| Nuxt | `http://localhost:XXXX` |
Regex to match most server output:
```
https?://(localhost|127\.0\.0\.1|0\.0\.0\.0)(:\d+)
```
Also check for standalone port patterns:
```
(listening|started|running|ready|serving).*(port\s*|:)\s*(\d{4,5})
```
### 4. Report
Print a summary:
```
Dev servers found:
Terminal 1 (pid 12345) — npm run dev → http://localhost:3000 (cwd: /Users/me/app)
Terminal 3 (pid 67890) — python manage.py runserver → http://127.0.0.1:8000 (cwd: /Users/me/api)
```
If no servers are found, say so and suggest starting one.
### 5. Open in Browser (Optional)
If the user wants to view the app, use Cursor's built-in browser:
```
browser_navigate → http://localhost:<port>
```
Then take a screenshot to confirm it's rendering:
```
browser_take_screenshot
```
## Tips
- If multiple servers are found, ask the user which one to open
- If a terminal shows an error (e.g. `EADDRINUSE`, `address already in use`), report the conflict
- If the server crashed (process exited), note that too — check for `exit_code` in the terminal file footer
- Common default ports: Next.js (3000), Vite (5173), Django (8000), Rails (3000), Flask (5000), Go (8080)
© spencerpauly · CC0-1.0 · spencerpauly/awesome-cursor-skills