/setup-portless
Sets up Portless for a project to replace port numbers with stable named .localhost URLs. Use when configuring local development routing, fixing port conflicts, or setting up monorepo dev environments.
$ npx -y skills add qdhenry/Claude-Command-Suite --skill setup-portless --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/setup-portless
Context preview
The summary Claude sees to decide when to auto-load this skill.
Sets up Portless for a project to replace port numbers with stable named .localhost URLs. Use when configuring local development routing, fixing port conflicts, or setting up monorepo dev environments.
SKILL.md
setup-portless.SKILL.mdname: setup-portless
description: Sets up Portless for a project to replace port numbers with stable named .localhost URLs. Use when configuring local development routing, fixing port conflicts, or setting up monorepo dev environments.
<objective> Set up [Portless](https://github.com/vercel-labs/portless) for the current project. Portless replaces `localhost:PORT` with stable named URLs like `myapp.localhost:1355`, eliminating port conflicts, cookie collisions, and port-guessing issues for both developers and AI agents.
**Requirements:** Node.js 20+, macOS or Linux. </objective>
<quick_start> Run these commands to get started:
# Install globally
npm install -g portless
# Start the proxy daemon
portless proxy start
# Run your app with a named route
portless myapp next dev
# => http://myapp.localhost:1355
</quick_start>
<process>
**Step 1: Verify prerequisites**
Check Node.js version is 20+ and platform is macOS or Linux:
node --version
uname -s
If Node.js < 20, inform the user they need to upgrade before proceeding.
**Step 2: Detect project context**
Read `package.json` to understand:
- Project name (use as default app name)
- Existing dev scripts (to know what command to wrap)
- Whether this is a monorepo (look for `workspaces` field, or `pnpm-workspace.yaml`, `turbo.json`, `lerna.json`)
- Framework in use (Next.js, Vite, Express, etc.) from dependencies
**Step 3: Install Portless**
npm install -g portless
**Step 4: Choose app name(s)**
Ask the user what name they want for their app URL. Suggest based on project name.
For monorepos, suggest subdomain naming:
- `api.projectname` for backend
- `web.projectname` or `projectname` for frontend
- `docs.projectname` for documentation
**Step 5: Update package.json scripts**
Wrap the existing dev script with portless. For example, if the current script is:
{ "dev": "next dev" }Update to:
{ "dev": "portless myapp next dev" }For monorepos, update each workspace's `package.json` similarly.
**Step 6: Verify setup**
Run the dev script and confirm the app is accessible at the named URL:
npm run dev
The proxy auto-starts if not already running. Confirm output shows the `.localhost:1355` URL.
Verify routes are registered:
portless list
</process>
<common_patterns>
<pattern name="single-app"> **Single application:**
{
"scripts": {
"dev": "portless myapp next dev"
}
}Access at: `http://myapp.localhost:1355` </pattern>
<pattern name="monorepo"> **Monorepo with multiple services:**
# In packages/web/package.json
"dev": "portless web.myapp next dev"
# In packages/api/package.json
"dev": "portless api.myapp node server.js"
# In packages/docs/package.json
"dev": "portless docs.myapp next dev"
Access at:
- `http://web.myapp.localhost:1355`
- `http://api.myapp.localhost:1355`
- `http://docs.myapp.localhost:1355`
</pattern>
<pattern name="custom-proxy-port"> **Custom proxy port (e.g., port 80 for clean URLs):**
sudo portless proxy start -p 80
# Then: http://myapp.localhost (no port needed)
</pattern>
</common_patterns>
<environment_variables>
| Variable | Purpose | Default | |----------|---------|---------| | `PORTLESS=0` or `PORTLESS=skip` | Bypass portless, use default port | (not set) | | `PORTLESS_PORT` | Override proxy port | `1355` | | `PORTLESS_STATE_DIR` | Custom state directory | `~/.portless` or `/tmp/portless` |
</environment_variables>
<cli_reference>
| Command | Purpose | |---------|---------| | `portless <name> <cmd> [args...]` | Run app with named route | | `portless list` | Show active routes | | `portless proxy start` | Start daemon proxy on port 1355 | | `portless proxy start -p <port>` | Start on custom port | | `portless proxy start --foreground` | Run in foreground (debugging) | | `portless proxy stop` | Stop the proxy daemon |
</cli_reference>
<anti_patterns>
<pitfall name="forgetting-proxy"> The proxy auto-starts when you run `portless <name> <cmd>`, so there is no need to manually start it. Only use `portless proxy start` for custom port configuration. </pitfall>
<pitfall name="windows"> Portless does not support Windows. Only set up on macOS or Linux. </pitfall>
<pitfall name="old-node"> Portless requires Node.js 20+. Do not attempt installation on older versions. </pitfall>
</anti_patterns>
<success_criteria> Setup is complete when:
- Portless is installed globally (`portless --version` succeeds)
- Project `package.json` dev script(s) are wrapped with `portless <name>`
- Running `npm run dev` (or equivalent) shows the app accessible at `<name>.localhost:1355`
- For monorepos, each workspace has its own named route
</success_criteria>
Read more
name: setup-portless description: Sets up Portless for a project to replace port numbers with stable named .localhost URLs. Use when configuring local development routing, fixing port conflicts, or setting up monorepo dev environments.
<objective> Set up [Portless](https://github.com/vercel-labs/portless) for the current project. Portless replaces `localhost:PORT` with stable named URLs like `myapp.localhost:1355`, eliminating port conflicts, cookie collisions, and port-guessing issues for both developers and AI agents.
**Requirements:** Node.js 20+, macOS or Linux. </objective>
<quick_start> Run these commands to get started:
# Install globally npm install -g portless # Start the proxy daemon portless proxy start # Run your app with a named route portless myapp next dev # => http://myapp.localhost:1355
</quick_start>
<process>
**Step 1: Verify prerequisites**
Check Node.js version is 20+ and platform is macOS or Linux:
node --version uname -s
If Node.js < 20, inform the user they need to upgrade before proceeding.
**Step 2: Detect project context**
Read `package.json` to understand:
- Project name (use as default app name)
- Existing dev scripts (to know what command to wrap)
- Whether this is a monorepo (look for `workspaces` field, or `pnpm-workspace.yaml`, `turbo.json`, `lerna.json`)
- Framework in use (Next.js, Vite, Express, etc.) from dependencies
**Step 3: Install Portless**
npm install -g portless
**Step 4: Choose app name(s)**
Ask the user what name they want for their app URL. Suggest based on project name.
For monorepos, suggest subdomain naming:
- `api.projectname` for backend
- `web.projectname` or `projectname` for frontend
- `docs.projectname` for documentation
**Step 5: Update package.json scripts**
Wrap the existing dev script with portless. For example, if the current script is:
{ "dev": "next dev" }Update to:
{ "dev": "portless myapp next dev" }For monorepos, update each workspace's `package.json` similarly.
**Step 6: Verify setup**
Run the dev script and confirm the app is accessible at the named URL:
npm run dev
The proxy auto-starts if not already running. Confirm output shows the `.localhost:1355` URL.
Verify routes are registered:
portless list
</process>
<common_patterns>
<pattern name="single-app"> **Single application:**
{
"scripts": {
"dev": "portless myapp next dev"
}
}Access at: `http://myapp.localhost:1355` </pattern>
<pattern name="monorepo"> **Monorepo with multiple services:**
# In packages/web/package.json "dev": "portless web.myapp next dev" # In packages/api/package.json "dev": "portless api.myapp node server.js" # In packages/docs/package.json "dev": "portless docs.myapp next dev"
Access at:
- `http://web.myapp.localhost:1355`
- `http://api.myapp.localhost:1355`
- `http://docs.myapp.localhost:1355`
</pattern>
<pattern name="custom-proxy-port"> **Custom proxy port (e.g., port 80 for clean URLs):**
sudo portless proxy start -p 80 # Then: http://myapp.localhost (no port needed)
</pattern>
</common_patterns>
<environment_variables>
| Variable | Purpose | Default | |----------|---------|---------| | `PORTLESS=0` or `PORTLESS=skip` | Bypass portless, use default port | (not set) | | `PORTLESS_PORT` | Override proxy port | `1355` | | `PORTLESS_STATE_DIR` | Custom state directory | `~/.portless` or `/tmp/portless` |
</environment_variables>
<cli_reference>
| Command | Purpose | |---------|---------| | `portless <name> <cmd> [args...]` | Run app with named route | | `portless list` | Show active routes | | `portless proxy start` | Start daemon proxy on port 1355 | | `portless proxy start -p <port>` | Start on custom port | | `portless proxy start --foreground` | Run in foreground (debugging) | | `portless proxy stop` | Stop the proxy daemon |
</cli_reference>
<anti_patterns>
<pitfall name="forgetting-proxy"> The proxy auto-starts when you run `portless <name> <cmd>`, so there is no need to manually start it. Only use `portless proxy start` for custom port configuration. </pitfall>
<pitfall name="windows"> Portless does not support Windows. Only set up on macOS or Linux. </pitfall>
<pitfall name="old-node"> Portless requires Node.js 20+. Do not attempt installation on older versions. </pitfall>
</anti_patterns>
<success_criteria> Setup is complete when:
- Portless is installed globally (`portless --version` succeeds)
- Project `package.json` dev script(s) are wrapped with `portless <name>`
- Running `npm run dev` (or equivalent) shows the app accessible at `<name>.localhost:1355`
- For monorepos, each workspace has its own named route
</success_criteria>
A comprehensive development toolkit designed following Anthropic's Claude Code Best Practices for AI-assisted software development.
Repo: qdhenry/Claude-Command-Suite
Other skills on claude-command-suite.
- /audit-env-variables
Analyze environment variables in JavaScript/TypeScript projects. Identifies unused variables, infers permission scopes, detects specific services (Stripe, AWS, Supabase), and documents code paths. Includes optional cleanup of unused variables with regression detection. Use when
Open skill - /bigcommerce-api
BigCommerce API expert for building integrations, apps, headless storefronts, and automations. Full lifecycle - REST APIs, GraphQL Storefront, webhooks, authentication, app development, and multi-storefront. Use when working with BigCommerce platform APIs.
Open skill - /cloudflare-manager
Comprehensive Cloudflare account management for deploying Workers, KV Storage, R2, Pages, DNS, and Routes. Use when deploying cloudflare services, managing worker containers, configuring KV/R2 storage, or setting up DNS/routing. Requires CLOUDFLARE_API_KEY in .env and Bun
Open skill - /elevenlabs-transcribe
Transcribes audio/video files using ElevenLabs Scribe v2 API. Use when transcribing audio files, generating transcripts, or converting speech to text.
Open skill - /extract-video-frames
Extracts frames and timestamped audio segments from video files (GIF, MP4, MOV) at configurable intervals and stores them in a directory with a manifest file. Use when analyzing video content, preparing frames for visual review, extracting audio for transcription, or creating
Open skill - /file-watcher
Chokidar-based file watcher that triggers `claude -p` on changes. Useful for automated AI reactions to file changes — design sync, code validation, config regeneration, etc.
Open skill

