Marketplace port-allocator
Automatically allocate and manage development server ports, avoiding port conflicts between multiple Claude Code instances
git clone https://github.com/aiskillstore/marketplace
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/guo-yu/port-allocator" ~/.claude/skills/aiskillstore-marketplace-port-allocator && rm -rf "$T"
skills/guo-yu/port-allocator/SKILL.mdPort Allocator
Smart port allocator that only assigns ports to real projects containing
package.json.
Usage
| Command | Description |
|---|---|
| Allocate/query port for current project |
| List all allocated ports |
| Scan code directory, discover and allocate ports for new projects |
| Set the main code directory path |
| Manually add port allocation for a project |
| Configure Claude Code permissions for this skill's commands |
Important Rules
1. Only Operate on Current Project's Ports When Restarting Services
When restarting the development server, only kill processes within the current project's port range, never affect other ports:
# Correct: Only kill current project ports (e.g., 3000-3009) lsof -ti:3000 | xargs kill -9 2>/dev/null lsof -ti:3001 | xargs kill -9 2>/dev/null # Wrong: Kill all node processes or other ports pkill -f node # Will affect other projects! lsof -ti:3010 | xargs kill # This is another project's port!
2. Append Rather Than Overwrite When Updating CLAUDE.md
When updating
~/.claude/CLAUDE.md, must preserve the user's existing content:
# Correct: Check and append or update specific sections # Wrong: Directly overwrite the entire file
Execution Steps
Command: /port-allocator allow
/port-allocator allowConfigure Claude Code to allow commands used by this skill, avoiding manual confirmation each time:
- Read
(if exists)~/.claude/settings.json - Merge the following commands into
array (preserve existing config):permissions.allow
{ "permissions": { "allow": [ "Bash(ls -d *)", "Bash(find * -maxdepth * -name package.json *)", "Bash(cat ~/.claude/*)", "Bash(dirname *)", "Bash(lsof -i:3*)", "Bash(lsof -ti:3*)" ] } }
- Write updated settings.json
- Output the list of added permissions
Output Format:
Configured Claude Code permissions Added allowed command patterns: - Bash(ls -d *) - Bash(find * -maxdepth * -name package.json *) - Bash(cat ~/.claude/*) - Bash(lsof -i:3*) - Bash(lsof -ti:3*) Config file: ~/.claude/settings.json
Command: /port-allocator config <path>
/port-allocator config <path>Set the user's main code directory:
- Verify path exists (required! Error and exit if not found)
- Update
field incode_root~/.claude/port-registry.json - Output confirmation
First Run: Auto-Detection
On first run (when
~/.claude/port-registry.json doesn't exist or has no code_root), automatically detect the code directory:
# Check common code directories for dir in ~/Codes ~/Code ~/Projects ~/Dev ~/Development ~/repos; do if [ -d "$dir" ]; then CODE_ROOT="$dir" break fi done # If none exist, default to ~/Codes CODE_ROOT="${CODE_ROOT:-~/Codes}"
Auto-detection output:
First run, detecting code directory... Code directory detected: ~/Codes Port registry initialized: ~/.claude/port-registry.json To change, use: /port-allocator config ~/your/code/path
If no directory found:
Could not auto-detect code directory. Please configure manually: /port-allocator config ~/your/code/path Common locations: ~/Codes, ~/Code, ~/Projects, ~/Dev
Command: /port-allocator scan
/port-allocator scanScan code directory, automatically discover and register projects:
- Read
to get~/.claude/port-registry.jsoncode_root- If config doesn't exist, run auto-detection first
- If
directory doesn't exist, prompt user to configurecode_root
- Find all directories containing
(exact to package.json location):package.json
# Find all package.json, exclude build artifact directories find <code_root> -maxdepth 3 -name "package.json" -type f \ -not -path "*/.next/*" \ -not -path "*/node_modules/*" \ -not -path "*/dist/*" \ -not -path "*/build/*" | while read pkg; do dirname "$pkg" done
-
Important: Path must be exact to the directory containing
package.json- Correct:
~/Codes/chekusu/landing - Wrong:
(if package.json is in subdirectory)~/Codes/chekusu
- Correct:
-
For each discovered project directory:
- Check if already in registry
- If not, allocate next available port range
-
Update config file (append mode, don't overwrite user content)
-
Output scan result summary
Command: /port-allocator
(default)
/port-allocatorAllocate/query port for current project:
- Get current working directory
- Read config to get
and allocated portscode_root - Match current directory to corresponding project
- If no
, indicate this is not a project needing portspackage.json - If exists, check if port already allocated, auto-allocate if not
- Output port info
Command: /port-allocator list
/port-allocator listList all allocated ports (read-only operation).
Output Format
Port Information
Project directory: ~/Codes/chekusu/landing package.json: Detected Port range: 3000-3009 - Main app: 3000 - API: 3001 - Other services: 3002-3009 Warning: Only operate on ports 3000-3009 when restarting services!
Scan Results
Scan complete: ~/Codes Registered projects (N): - chekusu/landing: 3000-3009 - saifuri: 3010-3019 Newly discovered projects (M): - new-project: 3090-3099 (newly allocated) Skipped (K): - .next, node_modules (build artifacts) - research-folder (no package.json)
Port Allocation Rules
- Each project is allocated 10 consecutive ports
- Starting port: 3000
- Interval: 10
: Main application (e.g., 3000, 3010, 3020)x0
: API service (e.g., 3001, 3011, 3021)x1
: Other services (database, cache, etc.)x2-x9
Configuration Files
- Port registry:
~/.claude/port-registry.json - Global instructions:
(append mode updates)~/.claude/CLAUDE.md - Claude Code settings:
(stores allowedCommands)~/.claude/settings.json - Skip patterns:
,.next
,node_modules
,distbuild
Notes
- Only operate on project ports - Never affect other projects when restarting services
- Append not overwrite - Preserve user's existing content when updating config files
- Precise paths - Point to actual directory containing package.json
- Skip build artifacts - .next, node_modules, etc. don't get port allocation
- First use - Recommend running
to configure permissions first/port-allocator allow