Claude Skill

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".

LLM Mart · 0 points · 10 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download lovstudio-skills-skills_project-port-0b16007.zip · 4 KB
Part of lovstudio/skills — 83 skills

Install

skills CLI npx skills add https://github.com/lovstudio/skills/tree/main/skills/project-port
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install lovstudio-skills@llmmart
Git 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

Version

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

端口冲突处理

若端口被占用:

  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 修改会使此前的“确认”“继续”“发吧”失效;完成当前产物修改和回读后必须停下,等待用户下一步指示,不自动进入发布、提交或其他外部写入。
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
    
    ![Version](https://img.shields.io/badge/version-0.2.0-CC785C)
    
    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.

No comments yet.

Reviews (0)

No reviews yet.

Related