[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EMCFVX3MJ97XTV9YA09TEH":3,"skill-same:01M6EMCFVX3MJ97XTV9YA09TEH":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6EMCFVX3MJ97XTV9YA09TEH","env-config",null,"Use when setting up environment configuration, loading .env files, or managing\napplication settings across environments.\nTriggers for: .env setup, loading environment variables, Pydantic BaseSettings,\nconfiguration validation, or secret management.\nNOT for: code-specific logic, feature flags, or runtime feature toggles.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fawais68\u002Fenv-config\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"env config","env","config","flags","environment variables","env setup","triggers","feature","runtime","logic","across","files","up","use","environment","settings","feature flags","Pydantic","validation","code","2026-11-10 10:12:30",false,"---\nname: env-config\ndescription: |\n  Use when setting up environment configuration, loading .env files, or managing\n  application settings across environments.\n  Triggers for: .env setup, loading environment variables, Pydantic BaseSettings,\n  configuration validation, or secret management.\n  NOT for: code-specific logic, feature flags, or runtime feature toggles.\n---\n\n# Environment Configuration Skill\n\nExpert environment configuration management for Python\u002FFastAPI projects with secure secrets handling and multi-environment support.\n\n## Quick Reference\n\n| Pattern | Usage |\n|---------|-------|\n| Load .env | `load_dotenv()` at application start |\n| Access var | `settings.DB_URL`, `settings.JWT_SECRET` |\n| Required var | `Field(..., description=\"Database URL\")` |\n| Optional var | `DB_HOST: str = \"localhost\"` |\n| Secret type | `SecretStr` for sensitive values |\n\n## Project Structure\n\n```\nproject\u002F\n├── .env                  # Local development (NOT committed)\n├── .env.example          # Template with all required vars (committed)\n├── .env.staging          # Staging environment\n├── .env.production       # Production environment (managed by infra)\n└── config\u002F\n    ├── __init__.py\n    └── settings.py       # Pydantic BaseSettings\n```\n\n## settings.py - Base Configuration\n\n```python\n# config\u002Fsettings.py\nfrom functools import lru_cache\nfrom pydantic import Field, SecretStr\nfrom pydantic_settings import BaseSettings, SettingsConfigDict\n\n\nclass Settings(BaseSettings):\n    model_config = SettingsConfigDict(\n        env_file=\".env\",\n        env_file_encoding=\"utf-8\",\n        extra=\"ignore\",\n    )\n\n    # Application\n    APP_NAME: str = \"ERP System\"\n    DEBUG: bool = False\n    API_V1_PREFIX: str = \"\u002Fv1\"\n\n    # Database\n    DB_URL: str = Field(\n        ...,\n        description=\"PostgreSQL connection URL\",\n        examples=[\"postgresql:\u002F\u002Fuser:pass@localhost:5432\u002Fdbname\"],\n    )\n    DB_POOL_SIZE: int = Field(default=5, ge=1, le=100)\n\n    # JWT Authentication\n    JWT_SECRET_KEY: SecretStr = Field(\n        ...,\n        description=\"Secret key for JWT signing\",\n    )\n    JWT_ALGORITHM: str = \"HS256\"\n    JWT_EXPIRATION_MINUTES: int = Field(default=15, ge=1)\n\n    # Redis (Optional)\n    REDIS_URL: str | None = None\n\n    # Logging\n    LOG_LEVEL: str = Field(default=\"INFO\", pattern=\"^(DEBUG|INFO|WARNING|ERROR)$\")\n\n    # CORS\n    CORS_ORIGINS: list[str] = [\"http:\u002F\u002Flocalhost:3000\"]\n\n    @property\n    def is_production(self) -> bool:\n        return not self.DEBUG\n\n\n@lru_cache\ndef get_settings() -> Settings:\n    \"\"\"Cached settings instance for application lifecycle.\"\"\"\n    return Settings()\n```\n\n\n## .env.example - Template File\n\n```bash\n# .env.example - Copy to .env and fill in values\n# DO NOT commit actual secrets!\n\n# Application\nAPP_NAME=\"ERP System\"\nDEBUG=false\nAPI_V1_PREFIX=\"\u002Fv1\"\n\n# Database (required)\nDB_URL=\"postgresql:\u002F\u002Fuser:password@localhost:5432\u002Ferp_db\"\n\n# JWT Authentication (required - generate with: openssl rand -hex 32)\nJWT_SECRET_KEY=\"your-secret-key-here-generate-with-openssl-rand-hex-32\"\nJWT_ALGORITHM=\"HS256\"\nJWT_EXPIRATION_MINUTES=15\n\n# Redis (optional)\n# REDIS_URL=\"redis:\u002F\u002Flocalhost:6379\u002F0\"\n\n# Logging\nLOG_LEVEL=\"INFO\"\n\n# CORS\nCORS_ORIGINS=\"http:\u002F\u002Flocalhost:3000\"\n```\n\n## .env - Local Development\n\n```bash\n# .env - Local development only\n# NEVER commit this file to version control\n\nAPP_NAME=\"ERP System\"\nDEBUG=true\nAPI_V1_PREFIX=\"\u002Fv1\"\n\n# Local PostgreSQL\nDB_URL=\"postgresql:\u002F\u002Fpostgres:postgres@localhost:5432\u002Ferp_dev\"\n\n# Generate with: openssl rand -hex 32\nJWT_SECRET_KEY=\"local-dev-secret-key-change-in-production\"\nJWT_ALGORITHM=\"HS256\"\nJWT_EXPIRATION_MINUTES=15\n\n# Local Redis (if using)\nREDIS_URL=\"redis:\u002F\u002Flocalhost:6379\u002F0\"\n\nLOG_LEVEL=\"DEBUG\"\n\nCORS_ORIGINS=\"http:\u002F\u002Flocalhost:3000,http:\u002F\u002Flocalhost:5173\"\n```\n\n## Usage in Application\n\n### FastAPI Application\n\n```python\n# main.py\nfrom contextlib import asynccontextmanager\nfrom dotenv import load_dotenv\n\nload_dotenv()  # Load .env file\n\nfrom config.settings import get_settings\n\n\n@asynccontextmanager\nasync def lifespan(app):\n    settings = get_settings()\n    print(f\"Starting {settings.APP_NAME} in {'DEBUG' if settings.DEBUG else 'PROD'} mode\")\n    yield\n    print(\"Shutting down...\")\n\n\napp = FastAPI(\n    title=get_settings().APP_NAME,\n    lifespan=lifespan,\n)\n\n\n# Include routers\nfrom app.routers import fees, students\napp.include_router(fees.router, prefix=get_settings().API_V1_PREFIX)\napp.include_router(students.router, prefix=get_settings().API_V1_PREFIX)\n```\n\n### Database Connection\n\n```python\n# database.py\nfrom sqlmodel import create_engine, Session\nfrom config.settings import get_settings\n\nsettings = get_settings()\n\nengine = create_engine(\n    settings.DB_URL.get_secret_value() if hasattr(settings.DB_URL, 'get_secret_value') else settings.DB_URL,\n    pool_size=settings.DB_POOL_SIZE,\n    max_overflow=10,\n)\n\n\ndef get_session():\n    with Session(engine) as session:\n        yield session\n```\n\n### JWT Configuration\n\n```python\n# auth\u002Fjwt.py\nfrom datetime import timedelta\nfrom config.settings import get_settings\n\nsettings = get_settings()\n\nJWT_SECRET = settings.JWT_SECRET_KEY.get_secret_value()\nJWT_ALGORITHM = settings.JWT_ALGORITHM\nACCESS_TOKEN_EXPIRE_MINUTES = settings.JWT_EXPIRATION_MINUTES\n\n\ndef create_access_token(data: dict, expires_delta: timedelta | None = None) -> str:\n    # ... token creation logic\n    pass\n```\n\n## Multi-Environment Support\n\n### Environment-Specific Configs\n\n```python\n# config\u002Fsettings.py\n\nclass Settings(BaseSettings):\n    # ... shared settings\n\n    @classmethod\n    def from_env(cls, env: str = \"development\") -> \"Settings\":\n        \"\"\"Load settings for specific environment.\"\"\"\n        env_file = {\n            \"development\": \".env\",\n            \"staging\": \".env.staging\",\n            \"production\": \".env.production\",\n        }.get(env, \".env\")\n\n        return cls(_env_file=env_file)\n```\n\n### Production Override\n\n```bash\n# Production should use environment variables, not .env files\n# Set these in your deployment platform (Docker, K8s, Cloud Run, etc.)\n\nexport DB_URL=\"postgresql:\u002F\u002Fprod_user:prod_pass@prod-db.example.com:5432\u002Ferp_prod\"\nexport JWT_SECRET_KEY=\"production-secret-key-from-secrets-manager\"\nexport DEBUG=false\nexport LOG_LEVEL=\"WARNING\"\n```\n\n## Secret Management\n\n### Generate Secrets\n\n```bash\n# Generate secure random secret\nopenssl rand -hex 32  # For JWT_SECRET_KEY\n\n# Generate database password\nopenssl rand -base64 32\n```\n\n### Secret Rotation Script\n\n```python\n# scripts\u002Frotate_secret.py\n\"\"\"Rotate a secret in all environments.\"\"\"\nimport os\nimport re\n\ndef rotate_secret(env_file: str, key: str, new_value: str):\n    \"\"\"Replace secret value in .env file.\"\"\"\n    with open(env_file, \"r\") as f:\n        content = f.read()\n\n    # Pattern to match KEY=value\n    pattern = f\"^{key}=.*$\"\n    replacement = f\"{key}={new_value}\"\n\n    new_content = re.sub(pattern, replacement, content, flags=re.MULTILINE)\n\n    with open(env_file, \"w\") as f:\n        f.write(new_content)\n\n    print(f\"Rotated {key} in {env_file}\")\n\n\nif __name__ == \"__main__\":\n    import sys\n    if len(sys.argv) != 4:\n        print(\"Usage: rotate_secret.py \u003Cenv_file> \u003Ckey> \u003Cnew_value>\")\n        sys.exit(1)\n\n    rotate_secret(sys.argv[1], sys.argv[2], sys.argv[3])\n```\n\n## Quality Checklist\n\n- [ ] **Validation on load**: All required fields have `Field(..., ...)` validation\n- [ ] **No leaks in logs**: Use `SecretStr` for sensitive values, never print settings\n- [ ] **.env.example committed**: Template shows all required variables\n- [ ] **.env.gitignored**: Local development file excluded from version control\n- [ ] **Secrets generated**: JWT secrets use `openssl rand -hex 32`\n- [ ] **Environment isolation**: Different configs for dev\u002Fstaging\u002Fproduction\n- [ ] **Type safety**: All settings have proper type annotations\n\n## Integration with Other Skills\n\n| Skill | Integration Point |\n|-------|-------------------|\n| `@jwt-auth` | JWT_SECRET_KEY from settings |\n| `@sqlmodel-crud` | DB_URL from settings |\n| `@fastapi-app` | All app settings from settings |\n| `@db-migration` | Database URL for migrations |\n| `@api-route-design` | API prefix, CORS origins |\n\n## Security Best Practices\n\n### DO\n\n- Use `SecretStr` for passwords, API keys, tokens\n- Rotate secrets regularly\n- Use different secrets per environment\n- Store production secrets in secrets manager\n- Validate all required settings at startup\n\n### DON'T\n\n- Never commit `.env` files to version control\n- Never hardcode secrets in source code\n- Never log settings or environment variables\n- Never use default\u002Fplaceholder secrets in production\n- Never expose configuration details in error messages\n\n## Startup Validation\n\n```python\n# config\u002Fvalidate.py\n\"\"\"Validate required configuration at startup.\"\"\"\nfrom pydantic import ValidationError\nfrom config.settings import Settings\n\n\ndef validate_settings() -> bool:\n    \"\"\"Ensure all required settings are configured.\"\"\"\n    try:\n        settings = Settings()\n        return True\n    except ValidationError as e:\n        print(\"Configuration validation failed:\")\n        for error in e.errors():\n            print(f\"  - {error['loc'][0]}: {error['msg']}\")\n        return False\n\n\nif __name__ == \"__main__\":\n    if not validate_settings():\n        exit(1)\n```\n","# Environment Configuration Skill\n\nExpert environment configuration management for Python\u002FFastAPI projects with secure secrets handling and multi-environment support.\n\n## Quick Reference\n\n| Pattern | Usage |\n|---------|-------|\n| Load .env | `load_dotenv()` at application start |\n| Access var | `settings.DB_URL`, `settings.JWT_SECRET` |\n| Required var | `Field(..., description=\"Database URL\")` |\n| Optional var | `DB_HOST: str = \"localhost\"` |\n| Secret type | `SecretStr` for sensitive values |\n\n## Project Structure\n\n```\nproject\u002F\n├── .env                  # Local development (NOT committed)\n├── .env.example          # Template with all required vars (committed)\n├── .env.staging          # Staging environment\n├── .env.production       # Production environment (managed by infra)\n└── config\u002F\n    ├── __init__.py\n    └── settings.py       # Pydantic BaseSettings\n```\n\n## settings.py - Base Configuration\n\n```python\n# config\u002Fsettings.py\nfrom functools import lru_cache\nfrom pydantic import Field, SecretStr\nfrom pydantic_settings import BaseSettings, SettingsConfigDict\n\n\nclass Settings(BaseSettings):\n    model_config = SettingsConfigDict(\n        env_file=\".env\",\n        env_file_encoding=\"utf-8\",\n        extra=\"ignore\",\n    )\n\n    # Application\n    APP_NAME: str = \"ERP System\"\n    DEBUG: bool = False\n    API_V1_PREFIX: str = \"\u002Fv1\"\n\n    # Database\n    DB_URL: str = Field(\n        ...,\n        description=\"PostgreSQL connection URL\",\n        examples=[\"postgresql:\u002F\u002Fuser:pass@localhost:5432\u002Fdbname\"],\n    )\n    DB_POOL_SIZE: int = Field(default=5, ge=1, le=100)\n\n    # JWT Authentication\n    JWT_SECRET_KEY: SecretStr = Field(\n        ...,\n        description=\"Secret key for JWT signing\",\n    )\n    JWT_ALGORITHM: str = \"HS256\"\n    JWT_EXPIRATION_MINUTES: int = Field(default=15, ge=1)\n\n    # Redis (Optional)\n    REDIS_URL: str | None = None\n\n    # Logging\n    LOG_LEVEL: str = Field(default=\"INFO\", pattern=\"^(DEBUG|INFO|WARNING|ERROR)$\")\n\n    # CORS\n    CORS_ORIGINS: list[str] = [\"http:\u002F\u002Flocalhost:3000\"]\n\n    @property\n    def is_production(self) -> bool:\n        return not self.DEBUG\n\n\n@lru_cache\ndef get_settings() -> Settings:\n    \"\"\"Cached settings instance for application lifecycle.\"\"\"\n    return Settings()\n```\n\n\n## .env.example - Template File\n\n```bash\n# .env.example - Copy to .env and fill in values\n# DO NOT commit actual secrets!\n\n# Application\nAPP_NAME=\"ERP System\"\nDEBUG=false\nAPI_V1_PREFIX=\"\u002Fv1\"\n\n# Database (required)\nDB_URL=\"postgresql:\u002F\u002Fuser:password@localhost:5432\u002Ferp_db\"\n\n# JWT Authentication (required - generate with: openssl rand -hex 32)\nJWT_SECRET_KEY=\"your-secret-key-here-generate-with-openssl-rand-hex-32\"\nJWT_ALGORITHM=\"HS256\"\nJWT_EXPIRATION_MINUTES=15\n\n# Redis (optional)\n# REDIS_URL=\"redis:\u002F\u002Flocalhost:6379\u002F0\"\n\n# Logging\nLOG_LEVEL=\"INFO\"\n\n# CORS\nCORS_ORIGINS=\"http:\u002F\u002Flocalhost:3000\"\n```\n\n## .env - Local Development\n\n```bash\n# .env - Local development only\n# NEVER commit this file to version control\n\nAPP_NAME=\"ERP System\"\nDEBUG=true\nAPI_V1_PREFIX=\"\u002Fv1\"\n\n# Local PostgreSQL\nDB_URL=\"postgresql:\u002F\u002Fpostgres:postgres@localhost:5432\u002Ferp_dev\"\n\n# Generate with: openssl rand -hex 32\nJWT_SECRET_KEY=\"local-dev-secret-key-change-in-production\"\nJWT_ALGORITHM=\"HS256\"\nJWT_EXPIRATION_MINUTES=15\n\n# Local Redis (if using)\nREDIS_URL=\"redis:\u002F\u002Flocalhost:6379\u002F0\"\n\nLOG_LEVEL=\"DEBUG\"\n\nCORS_ORIGINS=\"http:\u002F\u002Flocalhost:3000,http:\u002F\u002Flocalhost:5173\"\n```\n\n## Usage in Application\n\n### FastAPI Application\n\n```python\n# main.py\nfrom contextlib import asynccontextmanager\nfrom dotenv import load_dotenv\n\nload_dotenv()  # Load .env file\n\nfrom config.settings import get_settings\n\n\n@asynccontextmanager\nasync def lifespan(app):\n    settings = get_settings()\n    print(f\"Starting {settings.APP_NAME} in {'DEBUG' if settings.DEBUG else 'PROD'} mode\")\n    yield\n    print(\"Shutting down...\")\n\n\napp = FastAPI(\n    title=get_settings().APP_NAME,\n    lifespan=lifespan,\n)\n\n\n# Include routers\nfrom app.routers import fees, students\napp.include_router(fees.router, prefix=get_settings().API_V1_PREFIX)\napp.include_router(students.router, prefix=get_settings().API_V1_PREFIX)\n```\n\n### Database Connection\n\n```python\n# database.py\nfrom sqlmodel import create_engine, Session\nfrom config.settings import get_settings\n\nsettings = get_settings()\n\nengine = create_engine(\n    settings.DB_URL.get_secret_value() if hasattr(settings.DB_URL, 'get_secret_value') else settings.DB_URL,\n    pool_size=settings.DB_POOL_SIZE,\n    max_overflow=10,\n)\n\n\ndef get_session():\n    with Session(engine) as session:\n        yield session\n```\n\n### JWT Configuration\n\n```python\n# auth\u002Fjwt.py\nfrom datetime import timedelta\nfrom config.settings import get_settings\n\nsettings = get_settings()\n\nJWT_SECRET = settings.JWT_SECRET_KEY.get_secret_value()\nJWT_ALGORITHM = settings.JWT_ALGORITHM\nACCESS_TOKEN_EXPIRE_MINUTES = settings.JWT_EXPIRATION_MINUTES\n\n\ndef create_access_token(data: dict, expires_delta: timedelta | None = None) -> str:\n    # ... token creation logic\n    pass\n```\n\n## Multi-Environment Support\n\n### Environment-Specific Configs\n\n```python\n# config\u002Fsettings.py\n\nclass Settings(BaseSettings):\n    # ... shared settings\n\n    @classmethod\n    def from_env(cls, env: str = \"development\") -> \"Settings\":\n        \"\"\"Load settings for specific environment.\"\"\"\n        env_file = {\n            \"development\": \".env\",\n            \"staging\": \".env.staging\",\n            \"production\": \".env.production\",\n        }.get(env, \".env\")\n\n        return cls(_env_file=env_file)\n```\n\n### Production Override\n\n```bash\n# Production should use environment variables, not .env files\n# Set these in your deployment platform (Docker, K8s, Cloud Run, etc.)\n\nexport DB_URL=\"postgresql:\u002F\u002Fprod_user:prod_pass@prod-db.example.com:5432\u002Ferp_prod\"\nexport JWT_SECRET_KEY=\"production-secret-key-from-secrets-manager\"\nexport DEBUG=false\nexport LOG_LEVEL=\"WARNING\"\n```\n\n## Secret Management\n\n### Generate Secrets\n\n```bash\n# Generate secure random secret\nopenssl rand -hex 32  # For JWT_SECRET_KEY\n\n# Generate database password\nopenssl rand -base64 32\n```\n\n### Secret Rotation Script\n\n```python\n# scripts\u002Frotate_secret.py\n\"\"\"Rotate a secret in all environments.\"\"\"\nimport os\nimport re\n\ndef rotate_secret(env_file: str, key: str, new_value: str):\n    \"\"\"Replace secret value in .env file.\"\"\"\n    with open(env_file, \"r\") as f:\n        content = f.read()\n\n    # Pattern to match KEY=value\n    pattern = f\"^{key}=.*$\"\n    replacement = f\"{key}={new_value}\"\n\n    new_content = re.sub(pattern, replacement, content, flags=re.MULTILINE)\n\n    with open(env_file, \"w\") as f:\n        f.write(new_content)\n\n    print(f\"Rotated {key} in {env_file}\")\n\n\nif __name__ == \"__main__\":\n    import sys\n    if len(sys.argv) != 4:\n        print(\"Usage: rotate_secret.py \u003Cenv_file> \u003Ckey> \u003Cnew_value>\")\n        sys.exit(1)\n\n    rotate_secret(sys.argv[1], sys.argv[2], sys.argv[3])\n```\n\n## Quality Checklist\n\n- [ ] **Validation on load**: All required fields have `Field(..., ...)` validation\n- [ ] **No leaks in logs**: Use `SecretStr` for sensitive values, never print settings\n- [ ] **.env.example committed**: Template shows all required variables\n- [ ] **.env.gitignored**: Local development file excluded from version control\n- [ ] **Secrets generated**: JWT secrets use `openssl rand -hex 32`\n- [ ] **Environment isolation**: Different configs for dev\u002Fstaging\u002Fproduction\n- [ ] **Type safety**: All settings have proper type annotations\n\n## Integration with Other Skills\n\n| Skill | Integration Point |\n|-------|-------------------|\n| `@jwt-auth` | JWT_SECRET_KEY from settings |\n| `@sqlmodel-crud` | DB_URL from settings |\n| `@fastapi-app` | All app settings from settings |\n| `@db-migration` | Database URL for migrations |\n| `@api-route-design` | API prefix, CORS origins |\n\n## Security Best Practices\n\n### DO\n\n- Use `SecretStr` for passwords, API keys, tokens\n- Rotate secrets regularly\n- Use different secrets per environment\n- Store production secrets in secrets manager\n- Validate all required settings at startup\n\n### DON'T\n\n- Never commit `.env` files to version control\n- Never hardcode secrets in source code\n- Never log settings or environment variables\n- Never use default\u002Fplaceholder secrets in production\n- Never expose configuration details in error messages\n\n## Startup Validation\n\n```python\n# config\u002Fvalidate.py\n\"\"\"Validate required configuration at startup.\"\"\"\nfrom pydantic import ValidationError\nfrom config.settings import Settings\n\n\ndef validate_settings() -> bool:\n    \"\"\"Ensure all required settings are configured.\"\"\"\n    try:\n        settings = Settings()\n        return True\n    except ValidationError as e:\n        print(\"Configuration validation failed:\")\n        for error in e.errors():\n            print(f\"  - {error['loc'][0]}: {error['msg']}\")\n        return False\n\n\nif __name__ == \"__main__\":\n    if not validate_settings():\n        exit(1)\n```\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fawais68\u002Fenv-config",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill env-config",{"tool":59,"command":60},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill env-config",{"tool":62,"command":63},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill env-config","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fawais68\u002Fenv-config\u002FSKILL.md",true,[67,73,79],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"references\u002FFORMAT.md","REFERENCE","参考文档",1852,"https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Fcodex\u002Forc\u002Fcontent\u002Fskills\u002Fproject-context\u002Freferences\u002FFORMAT.md",{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"scripts\u002Fverify.py","SCRIPT","脚本",1902,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fawais68\u002Fenv-config\u002Fscripts\u002Fverify.py",{"path":80,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":81,"sourceHtmlUrl":82},"skill-report.json",10605,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fawais68\u002Fenv-config\u002Fskill-report.json",[84,98,108,117,123,130],{"skillNo":85,"name":86,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":94,"publishedAt":39},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[95,96,97],"model","model hierarchy","model hierarchy skill",{"skillNo":99,"name":100,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":104,"publishedAt":39},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[103],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},[105,106,107],"MCP","zoom","zoom mcp",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":39},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[114,115,116,106],"sdk","zoom apps sdk","apps",{"skillNo":118,"name":119,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":39},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[119],{"skillNo":124,"name":125,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":129,"publishedAt":39},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[128],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},[125],{"skillNo":131,"name":132,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":39},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[132]]