[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EDSW8C2VGTZDVPTVN6QAJB":3,"skill-same:01M6EDSW8C2VGTZDVPTVN6QAJB":71},{"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":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":52,"ownerHtmlUrl":53,"ownerBlogUrl":54,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M6EDSW8C2VGTZDVPTVN6QAJB","lerd-add-service",null,"Add or edit a lerd service preset (database, cache, search engine, admin dashboard) as YAML in the lerd-services store. Use whenever the task is to add a new service, a new version of a service, or wire a service into projects — never add services in Go.","lerd-env\u002Flerd","lerd-env","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F295201541?v=4","01M6EDSM8JFPD2Y57QMB2TMKH5","Lerd","01M6EDSMD3WKYZ4W9K3SA8MMCP",1512,"MIT","https:\u002F\u002Fgithub.com\u002Flerd-env\u002Flerd\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Flerd-add-service\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"add service","lerd add service","add","service","use","new","search engine","store","as","task","never","version","dashboard","edit","engine","projects","services","cache","yaml","admin","search","database","preset","2026-11-10 10:12:30",false,"---\nname: lerd-add-service\ndescription: Add or edit a lerd service preset (database, cache, search engine, admin dashboard) as YAML in the lerd-services store. Use whenever the task is to add a new service, a new version of a service, or wire a service into projects — never add services in Go.\n---\n\n# Add a lerd service preset\n\nServices are submitted to the **lerd-env\u002Fservices** repo\n(https:\u002F\u002Fgithub.com\u002Flerd-env\u002Fservices) as `services\u002F\u003Cname>.yaml`,\none file per service. They are **data, not Go**. lerd ships only the default stack\n(mysql, postgres, redis, meilisearch, rustfs, mailpit); everything else is a preset\nthere and reaches every install within ~24h with no binary release.\n\nThe `lerd-services\u002F` directory in the lerd repo is a local checkout you can edit\nand test against, but the pull request goes to **lerd-env\u002Fservices**.\n\n## Procedure\n\n1. **Find the closest existing preset and copy it.** The existing YAML is the\n   schema of record — do not invent fields. For a Redis-alike copy `valkey.yaml`;\n   for a database copy `mariadb.yaml` or `mongo.yaml`; for an admin dashboard\n   copy `phpmyadmin.yaml` \u002F `pgadmin.yaml`.\n\n2. **Fill the core fields** (see `valkey.yaml` for the minimal shape):\n   - `name`, `description`, `family` (family groups alternates + admin UIs)\n   - `image` (pin a specific tag), `ports` (`\"host:container\"`)\n   - `data_dir` for the persistent volume\n   - `env_vars` — the host\u002Fport\u002Fcredentials injected into a linked site's `.env`\n   - `connection_url` where applicable\n\n3. **Avoid host-port collisions.** If the service shares a protocol\u002Fport with a\n   default (e.g. Valkey vs Redis on 6379), publish it on a shifted host port so\n   both can coexist, and note why in a short comment. lerd also auto-shifts\n   collisions, but pick a sane default.\n\n4. **Declare dependencies and mounted config** if the preset needs them (an admin\n   dashboard depends on its database family; some presets mount a generated\n   config file for auto-login). Copy the pattern from the matching existing preset.\n\n   For a **database engine**, also add an `introspect.list_databases` command so it\n   appears in the web UI's Databases tab. It runs via `sh -c` inside the container\n   and must print one `name\u003CTAB>size_bytes` row per user database, filtering the\n   engine's own system databases. Copy the block from `mariadb.yaml` (MySQL family),\n   `postgres-pgvector.yaml` (Postgres), or `mongo.yaml` (Mongo). lerd passes the\n   `lerd` admin password via the exec env, so no inline credentials are needed for\n   MySQL\u002FPostgres.\n\n5. **Give it its mark and its colour.** `category` places it in a discovery\n   section and `color` is its brand tint, a plain hex literal (`#00758f`) and\n   nothing else — a colour function or CSS variable is dropped. For the mark,\n   either name a built-in glyph with `icon:` or ship the service's own as\n   `services\u002F\u003Cname>.svg` beside the YAML. That file is **monochrome**: a single\n   silhouette of filled paths with no `fill`, `stroke`, `style` or `class` of its\n   own, in a bare `\u003Csvg viewBox=\"…\">`, since lerd strips everything but the\n   geometry on the way in and paints it in the declared colour. Not a full-colour\n   brand mark; it renders beside the built-in glyphs and has to flip themes.\n\n6. **Update the store README table** in the lerd-env\u002Fservices `README.md` so the\n   new service is listed.\n\n7. **Validate end-to-end** with a real lerd install:\n   ```bash\n   lerd service search \u003Cname>\n   lerd service preset \u003Cname>\n   ```\n   Confirm the container starts, the port is reachable, and a linked site's `.env`\n   gets the expected vars.\n\n## Rules\n\n- The PR goes to **lerd-env\u002Fservices**, not the lerd binary repo.\n- One service per file. No Go changes. No new mergers.\n- Pin image tags; never rely on `latest`.\n- Keep `description` one line; it shows in `lerd service search`.\n","# Add a lerd service preset\n\nServices are submitted to the **lerd-env\u002Fservices** repo\n(https:\u002F\u002Fgithub.com\u002Flerd-env\u002Fservices) as `services\u002F\u003Cname>.yaml`,\none file per service. They are **data, not Go**. lerd ships only the default stack\n(mysql, postgres, redis, meilisearch, rustfs, mailpit); everything else is a preset\nthere and reaches every install within ~24h with no binary release.\n\nThe `lerd-services\u002F` directory in the lerd repo is a local checkout you can edit\nand test against, but the pull request goes to **lerd-env\u002Fservices**.\n\n## Procedure\n\n1. **Find the closest existing preset and copy it.** The existing YAML is the\n   schema of record — do not invent fields. For a Redis-alike copy `valkey.yaml`;\n   for a database copy `mariadb.yaml` or `mongo.yaml`; for an admin dashboard\n   copy `phpmyadmin.yaml` \u002F `pgadmin.yaml`.\n\n2. **Fill the core fields** (see `valkey.yaml` for the minimal shape):\n   - `name`, `description`, `family` (family groups alternates + admin UIs)\n   - `image` (pin a specific tag), `ports` (`\"host:container\"`)\n   - `data_dir` for the persistent volume\n   - `env_vars` — the host\u002Fport\u002Fcredentials injected into a linked site's `.env`\n   - `connection_url` where applicable\n\n3. **Avoid host-port collisions.** If the service shares a protocol\u002Fport with a\n   default (e.g. Valkey vs Redis on 6379), publish it on a shifted host port so\n   both can coexist, and note why in a short comment. lerd also auto-shifts\n   collisions, but pick a sane default.\n\n4. **Declare dependencies and mounted config** if the preset needs them (an admin\n   dashboard depends on its database family; some presets mount a generated\n   config file for auto-login). Copy the pattern from the matching existing preset.\n\n   For a **database engine**, also add an `introspect.list_databases` command so it\n   appears in the web UI's Databases tab. It runs via `sh -c` inside the container\n   and must print one `name\u003CTAB>size_bytes` row per user database, filtering the\n   engine's own system databases. Copy the block from `mariadb.yaml` (MySQL family),\n   `postgres-pgvector.yaml` (Postgres), or `mongo.yaml` (Mongo). lerd passes the\n   `lerd` admin password via the exec env, so no inline credentials are needed for\n   MySQL\u002FPostgres.\n\n5. **Give it its mark and its colour.** `category` places it in a discovery\n   section and `color` is its brand tint, a plain hex literal (`#00758f`) and\n   nothing else — a colour function or CSS variable is dropped. For the mark,\n   either name a built-in glyph with `icon:` or ship the service's own as\n   `services\u002F\u003Cname>.svg` beside the YAML. That file is **monochrome**: a single\n   silhouette of filled paths with no `fill`, `stroke`, `style` or `class` of its\n   own, in a bare `\u003Csvg viewBox=\"…\">`, since lerd strips everything but the\n   geometry on the way in and paints it in the declared colour. Not a full-colour\n   brand mark; it renders beside the built-in glyphs and has to flip themes.\n\n6. **Update the store README table** in the lerd-env\u002Fservices `README.md` so the\n   new service is listed.\n\n7. **Validate end-to-end** with a real lerd install:\n   ```bash\n   lerd service search \u003Cname>\n   lerd service preset \u003Cname>\n   ```\n   Confirm the container starts, the port is reachable, and a linked site's `.env`\n   gets the expected vars.\n\n## Rules\n\n- The PR goes to **lerd-env\u002Fservices**, not the lerd binary repo.\n- One service per file. No Go changes. No new mergers.\n- Pin image tags; never rely on `latest`.\n- Keep `description` one line; it shows in `lerd service search`.\n",{"name":5,"description":7},"main","42002a83742a4b695919dfe85fefd0764874dbdd",".claude\u002Fskills\u002Flerd-add-service",97,"https:\u002F\u002Fgithub.com\u002Flerd-env\u002Flerd","http:\u002F\u002Flerd.sh","https:\u002F\u002Fgithub.com\u002Flerd-env","https:\u002F\u002Flerd.sh","Open source local PHP development environment for Linux and macOS","2026-11-11 22:35:41",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add lerd-env\u002Flerd --skill lerd-add-service",{"tool":63,"command":64},"bunx","bunx skills add lerd-env\u002Flerd --skill lerd-add-service",{"tool":66,"command":67},"pnpm","pnpm dlx skills add lerd-env\u002Flerd --skill lerd-add-service","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flerd-env\u002Flerd\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Flerd-add-service\u002FSKILL.md",true,[],[72,86,119,143],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":42},"01M6EDT7MBV4DY2DEB1Y8AH6WQ","lerd-hello","Greets lerd sites. Use when the user asks to greet a site.","https:\u002F\u002Fgithub.com\u002Flerd-env\u002Flerd\u002Fblob\u002Fmain\u002Finternal\u002Fplugins\u002Fskeleton\u002FSKILL.md",[],[79,80,81,82,23,83,84,85],"lerd hello","hello","sites","greet","user","site","when",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":42},"01M6EDT4B5EW664Z9S4KCM9SCC","lerd-preflight","Run the full local verification gate for lerd before committing — build, test, vet, gofmt, UI tests, installer tests, then install the local build and smoke-test. Use before every commit or PR, and whenever asked to \"verify\", \"check CI locally\", or \"make sure it's green\".","https:\u002F\u002Fgithub.com\u002Flerd-env\u002Flerd\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Flerd-preflight\u002FSKILL.md",[],[93,94,23,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118],"lerd preflight","preflight","build","install","verification gate","check","verify","ci","ui","verification","run","pr","commit","test","make","check ci locally","for","sure","smoke","tests","vet","full","local","green","gate","installer",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":42},"01M6EDT0CJRTDGAXGZF2HJZ16B","lerd-open-pr","Draft and open a pull request the lerd way — issue-first, correct issue linking, human prose, none of the banned sections. Use when asked to open, prepare, or draft a PR for lerd. Never creates anything on GitHub without explicit per-action approval.","https:\u002F\u002Fgithub.com\u002Flerd-env\u002Flerd\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Flerd-open-pr\u002FSKILL.md",[],[104,126,127,128,85,129,130,109,131,132,133,134,135,29,23,136,137,138,139,140,141,142],"lerd open pr","open pr","open","request","approval","action","human","draft","prose","issue","linking","correct","first","pull","pull request","prepare","github",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":42},"01M6EDSR4GW8FY3HPXCEY0XGKV","lerd-add-framework","Add or extend a lerd framework definition (a new PHP framework or a new major version) as versioned YAML in the lerd-frameworks store. Use whenever the task involves framework detection, per-framework workers, env wiring, doctor checks, custom commands, or scaffolding — never branch on a framework name in Go.","https:\u002F\u002Fgithub.com\u002Flerd-env\u002Flerd\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Flerd-add-framework\u002FSKILL.md",[],[150,151,21,152,28,153,154,26,155,156,27,157,158,159,160,161,29,30,23,162,163,37,164,24,165],"framework","lerd add framework","go","wiring","custom","name","env","commands","scaffolding","frameworks","definition","workers","branch","detection","doctor","extend"]