lov-project-port
Generate a stable unique dev port (3000-8999) from a project name and help update project config. Use when the user needs to set a project port, start a dev server, resolve port conflicts, initialize a new project, or mentions "端口", "port", "dev server", "端口冲突", "project port".
Install
npx skills add https://github.com/lovstudio/skills/tree/main/skills/project-port
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install lovstudio-skills@llmmart
git clone https://github.com/lovstudio/skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole lovstudio/skills collection as a plugin from our marketplace. Git is the plain clone.
README
端口管家 · Port Keeper
Generate a stable project-specific development port in the 3000-8999 range, then help wire it into .env, package scripts, Vite, or other dev-server config.
Part of skill-publisher dev skills — by example.com
Install
npx skills add project-port -g -y
Usage
./scripts/hashport.sh
./scripts/hashport.sh my-project
The script prints the port to stdout and reports occupancy to stderr when lsof is available.
Algorithm
port = 3000 + (sum(ord(c) * (i + 1) for i, c in enumerate(project_name)) % 6000)
The same project name always maps to the same port.
Common Targets
| File | Update |
|---|---|
.env / .env.local |
PORT=<port> |
package.json |
add or update --port <port> in dev scripts |
vite.config.ts |
set server.port |
License
MIT
Skill manifest
端口管家 · Port Keeper
为项目生成稳定唯一的端口号(范围 3000-8999),同一项目名永远返回相同端口。
端口生成算法
def generate_port(project_name: str) -> int:
hash_value = sum(ord(c) * (i + 1) for i, c in enumerate(project_name))
return 3000 + (hash_value % 6000)
使用场景
1. 查询项目端口
用户询问端口时,直接计算并告知:
项目 "skill-publisher" 的端口号是:7965
2. 更新项目配置
检测并更新项目中的端口配置文件:
| 文件 | 配置方式 |
|---|---|
.env / .env.local |
PORT=<port> |
package.json |
scripts 中的 --port <port> |
vite.config.ts |
server.port: <port> |
next.config.js |
通常使用 .env |
更新时优先使用 .env 方式,最小侵入性。
3. 启动开发服务器
PORT=$(scripts/hashport.sh) pnpm dev
脚本
运行 scripts/hashport.sh [project-name] 生成端口:
# 使用当前目录名
./scripts/hashport.sh
# 输出: 7965
# 指定项目名
./scripts/hashport.sh my-project
# 输出: 5123
端口冲突处理
若端口被占用:
- 提示用户哪个进程占用了端口
- 建议使用
lsof -i :<port>查看 - 可追加后缀生成备用端口:
generate_port("project-dev")
Runtime context (shared)
运行前读取本 Skill 包的 skill.yaml,由宿主提供 skill-runtime/v1 上下文。字段解析顺序为:当前请求、项目上下文、个人 Preferences、品牌 Profile、通用默认值。
- 只使用 Manifest 声明的字段;Profile 保存公开品牌事实,Preferences 保存个人工作偏好。
required: true字段缺失时,按 Manifest 的问题配置向用户提出一个聚焦问题;用户明确同意后再保存回答。- 报错提供可复制的
context_id、字段路径与来源,诊断内容避开秘密、完整私人路径和原始配置。
通用反馈闭环
用户在 Skill 驱动任务中提出修改意见时,继续当前产物前必须执行:
- 先判断意见是
task-specific(仅本次)还是reusable(可跨任务复用)。 task-specific只修改当前任务,不改 Skill。reusable先确定作用域:领域规则先更新对应 canonical Skill;适用于所有 Skill 的规则先更新共享规范。- 完成规则更新、版本、lint 与分发核验后,再把修改应用到当前任务。
reusable修改会使此前的“确认”“继续”“发吧”失效;完成当前产物修改和回读后必须停下,等待用户下一步指示,不自动进入发布、提交或其他外部写入。
Files (skills)
-
scripts
-
hashport.sh 640 B
#!/bin/bash # 基于项目名生成稳定端口号 # Usage: hashport.sh [project-name] # 如不指定项目名,使用当前目录名 name="${1:-$(basename "$PWD")}" # 计算哈希值 hash=0 for ((i=0; i<${#name}; i++)); do char="${name:$i:1}" ord=$(printf '%d' "'$char") hash=$((hash + ord * (i + 1))) done # 生成端口 (范围 3000-8999) port=$((3000 + (hash % 6000))) # 检查端口状态 if command -v lsof &>/dev/null && lsof -i :"$port" &>/dev/null; then proc=$(lsof -i :"$port" | awk 'NR==2 {print $1}') echo "$port ← $name (occupied by $proc)" >&2 else echo "$port ← $name" >&2 fi echo "$port"
-
-
CHANGELOG.md 463 B
# Changelog All notable changes to this skill are documented here. Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · Versioning: [SemVer](https://semver.org/) ## [0.2.0] - 2026-08-24 ### Added - add the shared feedback-classification and approval-invalidation gate used by every LovStudio Skill ## [0.1.1] - 2026-05-07 ### Fixed - standardize Agent Skills metadata and README - document stable project port algorithm and install surface -
README.md 981 B
# 端口管家 · Port Keeper  Generate a stable project-specific development port in the 3000-8999 range, then help wire it into `.env`, package scripts, Vite, or other dev-server config. Part of [skill-publisher dev skills](https://example.com/skills/dev-skills) — by [example.com](https://example.com) ## Install ```bash npx skills add project-port -g -y ``` ## Usage ```bash ./scripts/hashport.sh ./scripts/hashport.sh my-project ``` The script prints the port to stdout and reports occupancy to stderr when `lsof` is available. ## Algorithm ```python port = 3000 + (sum(ord(c) * (i + 1) for i, c in enumerate(project_name)) % 6000) ``` The same project name always maps to the same port. ## Common Targets | File | Update | |---|---| | `.env` / `.env.local` | `PORT=<port>` | | `package.json` | add or update `--port <port>` in dev scripts | | `vite.config.ts` | set `server.port` | ## License MIT -
SKILL.md 3.3 KB
--- name: lov-project-port category: Dev Tools tagline: "Generate stable unique dev port (3000–8999) from project name." description: > Generate a stable unique dev port (3000-8999) from a project name and help update project config. Use when the user needs to set a project port, start a dev server, resolve port conflicts, initialize a new project, or mentions "端口", "port", "dev server", "端口冲突", "project port". license: MIT compatibility: > Requires bash for scripts/hashport.sh. Works on macOS/Linux; port occupancy reporting uses lsof when available. metadata: author: contributors version: "0.2.0" tags: dev-server ports project-setup --- # 端口管家 · Port Keeper 为项目生成稳定唯一的端口号(范围 3000-8999),同一项目名永远返回相同端口。 ## 端口生成算法 ```python def generate_port(project_name: str) -> int: hash_value = sum(ord(c) * (i + 1) for i, c in enumerate(project_name)) return 3000 + (hash_value % 6000) ``` ## 使用场景 ### 1. 查询项目端口 用户询问端口时,直接计算并告知: ``` 项目 "skill-publisher" 的端口号是:7965 ``` ### 2. 更新项目配置 检测并更新项目中的端口配置文件: | 文件 | 配置方式 | |------|----------| | `.env` / `.env.local` | `PORT=<port>` | | `package.json` | scripts 中的 `--port <port>` | | `vite.config.ts` | `server.port: <port>` | | `next.config.js` | 通常使用 .env | 更新时优先使用 `.env` 方式,最小侵入性。 ### 3. 启动开发服务器 ```bash PORT=$(scripts/hashport.sh) pnpm dev ``` ## 脚本 运行 `scripts/hashport.sh [project-name]` 生成端口: ```bash # 使用当前目录名 ./scripts/hashport.sh # 输出: 7965 # 指定项目名 ./scripts/hashport.sh my-project # 输出: 5123 ``` ## 端口冲突处理 若端口被占用: 1. 提示用户哪个进程占用了端口 2. 建议使用 `lsof -i :<port>` 查看 3. 可追加后缀生成备用端口:`generate_port("project-dev")` ## Runtime context (shared) 运行前读取本 Skill 包的 `skill.yaml`,由宿主提供 `skill-runtime/v1` 上下文。字段解析顺序为:当前请求、项目上下文、个人 Preferences、品牌 Profile、通用默认值。 - 只使用 Manifest 声明的字段;Profile 保存公开品牌事实,Preferences 保存个人工作偏好。 - `required: true` 字段缺失时,按 Manifest 的问题配置向用户提出一个聚焦问题;用户明确同意后再保存回答。 - 报错提供可复制的 `context_id`、字段路径与来源,诊断内容避开秘密、完整私人路径和原始配置。 ## 通用反馈闭环 用户在 Skill 驱动任务中提出修改意见时,继续当前产物前必须执行: 1. 先判断意见是 `task-specific`(仅本次)还是 `reusable`(可跨任务复用)。 2. `task-specific` 只修改当前任务,不改 Skill。 3. `reusable` 先确定作用域:领域规则先更新对应 canonical Skill;适用于所有 Skill 的规则先更新共享规范。 4. 完成规则更新、版本、lint 与分发核验后,再把修改应用到当前任务。 5. `reusable` 修改会使此前的“确认”“继续”“发吧”失效;完成当前产物修改和回读后必须停下,等待用户下一步指示,不自动进入发布、提交或其他外部写入。 -
skill.yaml 839 B
schema: skill-manifest/v1 id: lov-project-port version: "0.2.0" runtime: skill-runtime/v1 context: profile: fields: - path: identity.name required: false question: 如果本次输出需要品牌身份,请提供品牌名称。 - path: identity.logo required: false question: 如果需要使用品牌 Logo,请提供 Logo 地址或文件路径。 - path: brand.tone required: false question: 如果已有品牌语气或审美关键词,请提供它们。 preferences: namespace: lov_project_port fields: - path: user.language required: false question: 希望使用哪种语言输出? - path: user.timezone required: false question: 需要使用哪个时区处理日期和时间? interaction: ask_missing: true max_questions: 1
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.