[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6M5GAW7ZZ3580DVCMH51SFQ":3,"skill-same:01M6M5GAW7ZZ3580DVCMH51SFQ":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6M5GAW7ZZ3580DVCMH51SFQ","be-spring-shared",null,"Shared conventions for every backend-springboot-plugin agent and skill — tech stack, CQRS architecture, naming, coding standards, TDD, commit and build rules, state files. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.","ohmyhotelco\u002Fhare-cc-plugins","ohmyhotelco","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F258133233?v=4","01M6CR4HP2N9F9ZWNX1KRHQ2W1","01M6CR4HSJC5J80RVQMD5K9QRN",2,"MIT","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fbackend-springboot-plugin\u002Fskills\u002Fbe-spring-shared\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"be spring shared","spring","shared","files","frontmatter","for","hand","naming","tech","false","cqrs","commit","standards","Rules","coding","stack","coding standards","state","plugin","architecture","2026-11-10 10:12:30",false,"---\nname: be-spring-shared\ndescription: Shared conventions for every backend-springboot-plugin agent and skill — tech stack, CQRS architecture, naming, coding standards, TDD, commit and build rules, state files. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.\nuser-invocable: false\n---\n\n# Shared conventions (backend-springboot-plugin)\n\nAgents receive this skill through `skills: [be-spring-shared]`. The plugin-root `CLAUDE.md` is maintainer notes and reaches no agent.\n\n## Tech Stack\n\n### Language & Build\n- Java (version from config, default 21)\n- Build: Gradle (Kotlin DSL or Groovy DSL, from config)\n- Build command: `.\u002Fgradlew build` (configurable)\n- Test command: `.\u002Fgradlew test` (configurable)\n- Always set Bash tool timeout to 10 minutes (600000ms) for Gradle commands\n\n### Framework\n- Spring Boot (version from config)\n- Spring MVC (REST)\n- Spring Validation\n\n### Database & ORM\n- Database: configurable (default PostgreSQL)\n- ORM: Spring Data JPA (Hibernate)\n- Migration: configurable (default Flyway)\n- JPA Auditing: `@EnableJpaAuditing` for automatic `createdAt`\u002F`updatedAt`\n- `open-in-view: false` (mandatory)\n\n### Utilities\n- Lombok (configurable, default enabled)\n- UUID Creator for UUID v7 generation\n\n### Testing\n- JUnit 5 (no Mockito)\n- `@SpringBootTest` + `TestRestTemplate` for API integration tests\n- `@DataJpaTest` for repository tests\n- AssertJ for assertions\n- `@ParameterizedTest` + `@ValueSource` \u002F `@MethodSource` for multi-value scenarios\n\n### Code Quality\n- Checkstyle (configurable, default enabled) with zero tolerance (maxErrors=0, maxWarnings=0)\n\n## Architecture: CQRS Pattern\n\nRead `architecture` from `.claude\u002Fbackend-springboot-plugin.json`. Default is `cqrs`.\n\n### Package Structure (CQRS)\n\n```\n{basePackage}\u002F\n├── {App}Application.java\n├── command\u002F                    \u003C- Request command DTOs (records)\n│   └── Create{Entity}.java\n├── commandmodel\u002F               \u003C- Command execution logic\n│   └── Create{Entity}CommandExecutor.java\n├── query\u002F                      \u003C- Request query DTOs (records)\n│   ├── Get{Entity}Page.java\n│   └── Find{Entity}.java\n├── querymodel\u002F                 \u003C- Query processing logic\n│   ├── Get{Entity}PageQueryProcessor.java\n│   └── Find{Entity}QueryProcessor.java\n├── view\u002F                       \u003C- Response view DTOs (records)\n│   └── {Entity}View.java\n├── data\u002F                       \u003C- Entities and repositories\n│   ├── {Entity}.java\n│   ├── {Entity}Repository.java\n│   └── BaseEntity.java\n├── config\u002F                     \u003C- Spring configuration beans\n├── {domain}\u002F                   \u003C- Domain-specific business logic\n│   ├── api\u002F                    \u003C- REST controllers\n│   │   └── {Entity}Controller.java\n│   ├── {Description}Exception.java\n│   └── {Entity}PropertyValidator.java\n└── ...\n```\n\n### Data Flow\n\n```\nHTTP Request\n  → Controller (record class, DI via constructor)\n    → Command\u002FQuery DTO\n      → CommandExecutor \u002F QueryProcessor (@Component record)\n        → Repository (Spring Data JPA)\n          → Entity\n    → View DTO (response)\n```\n\n## Naming Conventions\n\n| Type | Pattern | Example |\n|------|---------|---------|\n| Entity | `{Name}` | `Employee` |\n| Repository | `{Name}Repository` | `EmployeeRepository` |\n| Command | `{Action}{Name}` | `CreateEmployee` |\n| Command Executor | `{Command}CommandExecutor` | `CreateEmployeeCommandExecutor` |\n| Query | `{Action}{Name}` | `GetEmployeePage` |\n| Query Processor | `{Query}QueryProcessor` | `GetEmployeePageQueryProcessor` |\n| View | `{Name}View` | `EmployeeView` |\n| Controller | `{Name}Controller` (record) | `EmployeeController` |\n| Exception | `{Description}Exception` | `DuplicateEmailException` |\n| Test | `{HttpMethod}Tests` | `PostTests` |\n\n## Coding Standards\n\n- Use `var` when the type is obvious from context; avoid when it harms readability\n- Use Java `record` for all DTO-like classes (Command, View, Query)\n- Use Lombok `@Getter @Setter` for entities (when `lombokEnabled: true`)\n- Use `snake_case` for test method names: `duplicate_email_returns_409_Conflict`\n- Always add a final newline when creating a new code file\n- Write self-explanatory code; avoid comments unless requested\n- Work in the smallest possible increments\n\n### Entity Conventions\n\nUnless explicitly overridden in the feature document:\n- Extends `BaseEntity` (`createdAt`, `updatedAt` via JPA Auditing)\n- `sequence`: Long, `@GeneratedValue(IDENTITY)` -- DB primary key (internal only)\n- `id`: UUID v7, unique -- external identifier (immutable)\n- `@Table(name = \"snake_case\")` -- table name matches entity name in snake_case\n- Column naming: Spring default `camelCase` to `snake_case` (implicit naming strategy)\n- Indexes and unique constraints: define per entity in feature document\n\n### DTO Conventions\n\n```java\npublic record CreateEmployee(String email, String displayName) {}\npublic record EmployeeView(UUID id, String email, String displayName) {}\n```\n\n### Controller Conventions (Record-based DI)\n\n```java\n@RestController\npublic record EmployeeController(\n    CreateEmployeeCommandExecutor createExecutor,\n    GetEmployeePageQueryProcessor pageProcessor,\n    FindEmployeeQueryProcessor findProcessor\n) {\n    @PostMapping(\"\u002Fhr\u002Femployees\")\n    @ResponseStatus(HttpStatus.CREATED)\n    public void create(@RequestBody CreateEmployee command) {\n        createExecutor.execute(command);\n    }\n}\n```\n\n## API Conventions\n\n- RESTful style: HTTP methods define the action\n  - `POST` -- create (201 Created)\n  - `GET` -- read (200 OK)\n  - `PUT` -- full replace (200 OK)\n  - `PATCH` -- partial update (200 OK)\n  - `DELETE` -- remove (204 No Content)\n- URL: kebab-case, plural resources: `\u002Fhr\u002Femployees\u002F{id}\u002Fprofile-image`\n- Error responses: domain exceptions mapped to HTTP status codes via `@ExceptionHandler`\n\n## Test-Driven Development\n\n### TDD Process\n\n1. Write a list of the test scenarios you want to cover\n2. Turn exactly one item on the list into an actual, concrete, runnable test\n3. Change the code to make the test (and all previous tests) pass\n4. Optionally refactor to improve the implementation design\n5. Until the list is empty, go back to step 2\n\n### TDD Rules\n\n- The list of test scenarios must be prepared in advance\n- Do not write more than one test at a time\n- Do not write code that is not required to pass a test (no speculative code)\n- Never modify a failed test; if a test needs to change, update it manually\n\n### TDD Implementation Workflow\n\n1. Select one incomplete test scenario (`- [ ]` item)\n2. If the minimum method signature is not defined, add only the method(s) needed for that scenario (empty body or default return). Do not add methods for other scenarios.\n3. In an interactive session, if you defined a method signature in step 2, request a review\n4. Convert the selected scenario into a concrete, executable test\n5. Run the test and check the result\n6. Confirm that the test fails. If it passes unexpectedly, stop and request review\n7. Understand the failure cause and write minimum code to make the test pass\n8. Run the entire test class: `.\u002Fgradlew test --tests {fullTestClassName}` (10-minute timeout)\n9. Do not run individual test methods -- always run the entire test class\n10. If the test does not pass after 3 attempts, stop and request review\n11. If the build fails, analyze and fix. Repeat until the build succeeds\n12. Mark the scenario as completed: `- [x] scenario description`\n\n### Test Scenario Writing Rules\n\n1. Write one scenario at a time (most important first)\n2. Write in a single sentence\n3. Write in English\n4. Use the present tense\n5. Refer to the system under test as `sut`\n6. Do not start with a capital letter (usable as test method name)\n7. Write as concisely as possible while preserving meaning\n8. Write as a to-do item: `- [ ] scenario description`\n\n### Test Structure\n\nTest directory mirrors the API URL path:\n\n```\nAPI URL                     Test path\nPOST \u002Fhr\u002Femployees    ->    test\u002F{basePackage}\u002Fhr\u002Fapi\u002Femployees\u002FPostTests.java\nGET  \u002Fhr\u002Femployees    ->    test\u002F{basePackage}\u002Fhr\u002Fapi\u002Femployees\u002FGetTests.java\n```\n\nTest patterns:\n- `@SpringBootTest(webEnvironment = RANDOM_PORT)` + `TestRestTemplate`\n- No Mockito -- pure integration tests with real Spring context\n- Test doubles: `@TestComponent @Primary` fakes (e.g., `FakeEmailSender`)\n- Generators: atomic counter-based test data factories (`EmailGenerator`, etc.)\n\n## Commit Standards\n\n1. Write in English\n2. Use present tense in the subject line (\"Add feature\" not \"Added feature\")\n3. Keep the subject line to 50 characters or less\n4. Add a blank line between the subject and body\n5. Keep the body to 72 characters or less per line\n6. Only break lines within a paragraph when exceeding 72 characters\n7. Do not mention test code in commit messages\n8. Do not use any prefix (fix:, feat:, docs:, etc.) in the subject line\n9. Start with an uppercase letter (exception: lowercase identifiers with justification)\n10. Do not include tool advertisements, branding, or promotional content\n11. Only operate on already-staged changes -- never stage additional files\n12. Ensure all intended changes are staged before invoking commit\n13. Use separate git commands to stage files before committing\n\n## Build Standards\n\n- Execute build command with 10-minute Bash tool timeout (600000ms)\n- Always run full build before committing changes\n- Address all errors and warnings systematically\n- Categorize errors: compilation, test failures, dependency issues, configuration problems, checkstyle violations\n- Apply systematic error resolution with targeted fixes\n\nReport a check's result from its output in this run. A check that did not run is reported as not run.\n\n## State Files\n\nRunning a skill from an earlier pipeline stage demotes the status. Skills must warn the user and obtain confirmation before demotion. For example, running `be-code` when status is `verified` resets the pipeline to `implementing`, discarding verification and review progress.\n\n**Lock file**: Skills that modify progress files must acquire `{workDocDir}\u002F.progress\u002F.lock` before writing. Release on completion or failure. Stale locks (older than 30 minutes) are automatically removed.\n\nLock file format:\n```json\n{ \"lockedAt\": \"{ISO 8601}\", \"operation\": \"be-code\", \"feature\": \"{feature}\" }\n```\n\n## Communication Language\n\nSkills read `workingLanguage` from config. All user-facing output (summaries, questions, feedback, next-step guidance) must be in the working language.\n\nLanguage mapping: `en` = English, `ko` = Korean, `vi` = Vietnamese.\n","# Shared conventions (backend-springboot-plugin)\n\nAgents receive this skill through `skills: [be-spring-shared]`. The plugin-root `CLAUDE.md` is maintainer notes and reaches no agent.\n\n## Tech Stack\n\n### Language & Build\n- Java (version from config, default 21)\n- Build: Gradle (Kotlin DSL or Groovy DSL, from config)\n- Build command: `.\u002Fgradlew build` (configurable)\n- Test command: `.\u002Fgradlew test` (configurable)\n- Always set Bash tool timeout to 10 minutes (600000ms) for Gradle commands\n\n### Framework\n- Spring Boot (version from config)\n- Spring MVC (REST)\n- Spring Validation\n\n### Database & ORM\n- Database: configurable (default PostgreSQL)\n- ORM: Spring Data JPA (Hibernate)\n- Migration: configurable (default Flyway)\n- JPA Auditing: `@EnableJpaAuditing` for automatic `createdAt`\u002F`updatedAt`\n- `open-in-view: false` (mandatory)\n\n### Utilities\n- Lombok (configurable, default enabled)\n- UUID Creator for UUID v7 generation\n\n### Testing\n- JUnit 5 (no Mockito)\n- `@SpringBootTest` + `TestRestTemplate` for API integration tests\n- `@DataJpaTest` for repository tests\n- AssertJ for assertions\n- `@ParameterizedTest` + `@ValueSource` \u002F `@MethodSource` for multi-value scenarios\n\n### Code Quality\n- Checkstyle (configurable, default enabled) with zero tolerance (maxErrors=0, maxWarnings=0)\n\n## Architecture: CQRS Pattern\n\nRead `architecture` from `.claude\u002Fbackend-springboot-plugin.json`. Default is `cqrs`.\n\n### Package Structure (CQRS)\n\n```\n{basePackage}\u002F\n├── {App}Application.java\n├── command\u002F                    \u003C- Request command DTOs (records)\n│   └── Create{Entity}.java\n├── commandmodel\u002F               \u003C- Command execution logic\n│   └── Create{Entity}CommandExecutor.java\n├── query\u002F                      \u003C- Request query DTOs (records)\n│   ├── Get{Entity}Page.java\n│   └── Find{Entity}.java\n├── querymodel\u002F                 \u003C- Query processing logic\n│   ├── Get{Entity}PageQueryProcessor.java\n│   └── Find{Entity}QueryProcessor.java\n├── view\u002F                       \u003C- Response view DTOs (records)\n│   └── {Entity}View.java\n├── data\u002F                       \u003C- Entities and repositories\n│   ├── {Entity}.java\n│   ├── {Entity}Repository.java\n│   └── BaseEntity.java\n├── config\u002F                     \u003C- Spring configuration beans\n├── {domain}\u002F                   \u003C- Domain-specific business logic\n│   ├── api\u002F                    \u003C- REST controllers\n│   │   └── {Entity}Controller.java\n│   ├── {Description}Exception.java\n│   └── {Entity}PropertyValidator.java\n└── ...\n```\n\n### Data Flow\n\n```\nHTTP Request\n  → Controller (record class, DI via constructor)\n    → Command\u002FQuery DTO\n      → CommandExecutor \u002F QueryProcessor (@Component record)\n        → Repository (Spring Data JPA)\n          → Entity\n    → View DTO (response)\n```\n\n## Naming Conventions\n\n| Type | Pattern | Example |\n|------|---------|---------|\n| Entity | `{Name}` | `Employee` |\n| Repository | `{Name}Repository` | `EmployeeRepository` |\n| Command | `{Action}{Name}` | `CreateEmployee` |\n| Command Executor | `{Command}CommandExecutor` | `CreateEmployeeCommandExecutor` |\n| Query | `{Action}{Name}` | `GetEmployeePage` |\n| Query Processor | `{Query}QueryProcessor` | `GetEmployeePageQueryProcessor` |\n| View | `{Name}View` | `EmployeeView` |\n| Controller | `{Name}Controller` (record) | `EmployeeController` |\n| Exception | `{Description}Exception` | `DuplicateEmailException` |\n| Test | `{HttpMethod}Tests` | `PostTests` |\n\n## Coding Standards\n\n- Use `var` when the type is obvious from context; avoid when it harms readability\n- Use Java `record` for all DTO-like classes (Command, View, Query)\n- Use Lombok `@Getter @Setter` for entities (when `lombokEnabled: true`)\n- Use `snake_case` for test method names: `duplicate_email_returns_409_Conflict`\n- Always add a final newline when creating a new code file\n- Write self-explanatory code; avoid comments unless requested\n- Work in the smallest possible increments\n\n### Entity Conventions\n\nUnless explicitly overridden in the feature document:\n- Extends `BaseEntity` (`createdAt`, `updatedAt` via JPA Auditing)\n- `sequence`: Long, `@GeneratedValue(IDENTITY)` -- DB primary key (internal only)\n- `id`: UUID v7, unique -- external identifier (immutable)\n- `@Table(name = \"snake_case\")` -- table name matches entity name in snake_case\n- Column naming: Spring default `camelCase` to `snake_case` (implicit naming strategy)\n- Indexes and unique constraints: define per entity in feature document\n\n### DTO Conventions\n\n```java\npublic record CreateEmployee(String email, String displayName) {}\npublic record EmployeeView(UUID id, String email, String displayName) {}\n```\n\n### Controller Conventions (Record-based DI)\n\n```java\n@RestController\npublic record EmployeeController(\n    CreateEmployeeCommandExecutor createExecutor,\n    GetEmployeePageQueryProcessor pageProcessor,\n    FindEmployeeQueryProcessor findProcessor\n) {\n    @PostMapping(\"\u002Fhr\u002Femployees\")\n    @ResponseStatus(HttpStatus.CREATED)\n    public void create(@RequestBody CreateEmployee command) {\n        createExecutor.execute(command);\n    }\n}\n```\n\n## API Conventions\n\n- RESTful style: HTTP methods define the action\n  - `POST` -- create (201 Created)\n  - `GET` -- read (200 OK)\n  - `PUT` -- full replace (200 OK)\n  - `PATCH` -- partial update (200 OK)\n  - `DELETE` -- remove (204 No Content)\n- URL: kebab-case, plural resources: `\u002Fhr\u002Femployees\u002F{id}\u002Fprofile-image`\n- Error responses: domain exceptions mapped to HTTP status codes via `@ExceptionHandler`\n\n## Test-Driven Development\n\n### TDD Process\n\n1. Write a list of the test scenarios you want to cover\n2. Turn exactly one item on the list into an actual, concrete, runnable test\n3. Change the code to make the test (and all previous tests) pass\n4. Optionally refactor to improve the implementation design\n5. Until the list is empty, go back to step 2\n\n### TDD Rules\n\n- The list of test scenarios must be prepared in advance\n- Do not write more than one test at a time\n- Do not write code that is not required to pass a test (no speculative code)\n- Never modify a failed test; if a test needs to change, update it manually\n\n### TDD Implementation Workflow\n\n1. Select one incomplete test scenario (`- [ ]` item)\n2. If the minimum method signature is not defined, add only the method(s) needed for that scenario (empty body or default return). Do not add methods for other scenarios.\n3. In an interactive session, if you defined a method signature in step 2, request a review\n4. Convert the selected scenario into a concrete, executable test\n5. Run the test and check the result\n6. Confirm that the test fails. If it passes unexpectedly, stop and request review\n7. Understand the failure cause and write minimum code to make the test pass\n8. Run the entire test class: `.\u002Fgradlew test --tests {fullTestClassName}` (10-minute timeout)\n9. Do not run individual test methods -- always run the entire test class\n10. If the test does not pass after 3 attempts, stop and request review\n11. If the build fails, analyze and fix. Repeat until the build succeeds\n12. Mark the scenario as completed: `- [x] scenario description`\n\n### Test Scenario Writing Rules\n\n1. Write one scenario at a time (most important first)\n2. Write in a single sentence\n3. Write in English\n4. Use the present tense\n5. Refer to the system under test as `sut`\n6. Do not start with a capital letter (usable as test method name)\n7. Write as concisely as possible while preserving meaning\n8. Write as a to-do item: `- [ ] scenario description`\n\n### Test Structure\n\nTest directory mirrors the API URL path:\n\n```\nAPI URL                     Test path\nPOST \u002Fhr\u002Femployees    ->    test\u002F{basePackage}\u002Fhr\u002Fapi\u002Femployees\u002FPostTests.java\nGET  \u002Fhr\u002Femployees    ->    test\u002F{basePackage}\u002Fhr\u002Fapi\u002Femployees\u002FGetTests.java\n```\n\nTest patterns:\n- `@SpringBootTest(webEnvironment = RANDOM_PORT)` + `TestRestTemplate`\n- No Mockito -- pure integration tests with real Spring context\n- Test doubles: `@TestComponent @Primary` fakes (e.g., `FakeEmailSender`)\n- Generators: atomic counter-based test data factories (`EmailGenerator`, etc.)\n\n## Commit Standards\n\n1. Write in English\n2. Use present tense in the subject line (\"Add feature\" not \"Added feature\")\n3. Keep the subject line to 50 characters or less\n4. Add a blank line between the subject and body\n5. Keep the body to 72 characters or less per line\n6. Only break lines within a paragraph when exceeding 72 characters\n7. Do not mention test code in commit messages\n8. Do not use any prefix (fix:, feat:, docs:, etc.) in the subject line\n9. Start with an uppercase letter (exception: lowercase identifiers with justification)\n10. Do not include tool advertisements, branding, or promotional content\n11. Only operate on already-staged changes -- never stage additional files\n12. Ensure all intended changes are staged before invoking commit\n13. Use separate git commands to stage files before committing\n\n## Build Standards\n\n- Execute build command with 10-minute Bash tool timeout (600000ms)\n- Always run full build before committing changes\n- Address all errors and warnings systematically\n- Categorize errors: compilation, test failures, dependency issues, configuration problems, checkstyle violations\n- Apply systematic error resolution with targeted fixes\n\nReport a check's result from its output in this run. A check that did not run is reported as not run.\n\n## State Files\n\nRunning a skill from an earlier pipeline stage demotes the status. Skills must warn the user and obtain confirmation before demotion. For example, running `be-code` when status is `verified` resets the pipeline to `implementing`, discarding verification and review progress.\n\n**Lock file**: Skills that modify progress files must acquire `{workDocDir}\u002F.progress\u002F.lock` before writing. Release on completion or failure. Stale locks (older than 30 minutes) are automatically removed.\n\nLock file format:\n```json\n{ \"lockedAt\": \"{ISO 8601}\", \"operation\": \"be-code\", \"feature\": \"{feature}\" }\n```\n\n## Communication Language\n\nSkills read `workingLanguage` from config. All user-facing output (summaries, questions, feedback, next-step guidance) must be in the working language.\n\nLanguage mapping: `en` = English, `ko` = Korean, `vi` = Vietnamese.\n",{"name":5,"description":7,"user-invocable":47},"main","eaef2a5b6092b72972ff2f25ef79803753bc9bbf","backend-springboot-plugin\u002Fskills\u002Fbe-spring-shared",0,"https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins","https:\u002F\u002Fgithub.com\u002Fohmyhotelco","2026-11-13 16:34:32",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add ohmyhotelco\u002Fhare-cc-plugins --skill be-spring-shared",{"tool":64,"command":65},"bunx","bunx skills add ohmyhotelco\u002Fhare-cc-plugins --skill be-spring-shared",{"tool":67,"command":68},"pnpm","pnpm dlx skills add ohmyhotelco\u002Fhare-cc-plugins --skill be-spring-shared","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fbackend-springboot-plugin\u002Fskills\u002Fbe-spring-shared\u002FSKILL.md",true,[],[73,90,113,135,156,170],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":46},"01M6M5QVXQNQMJBP1JZP9T440T","hp-shared","Shared conventions for every homepage-plugin agent and skill — stack, code conventions, state-file writes, check commands and how to report them. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fhomepage-plugin\u002Fskills\u002Fhp-shared\u002FSKILL.md",[],[28,80,43,41,44,81,31,82,83,84,85,86,35,30,87,88,32,89],"hp shared","how","report","code conventions","commands","how to","conventions","file","code","check",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":102,"publishedAt":46},"01M6M5PZTN1M0G4AHJV08VF1HV","fe-shared","Shared conventions for every frontend-react-plugin agent and skill — code conventions, state files and locks, accepted deviations, design principles, build working directory, router-mode command matrix, TypeScript check. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Ffrontend-react-plugin\u002Fskills\u002Ffe-shared\u002FSKILL.md",[96,99],{"categoryNo":97,"categoryName":98,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":100,"categoryName":101,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",[28,103,31,104,83,105,106,107,29,35,88,32,108,89,109,43,44,110,111,112],"fe shared","mode","frontend","design","design principles","react","router","principles","command","build",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":46},"01M6FNV58QMW8K71SA9FGTXMF4","pp-translate","Use after directly editing the working language spec to sync changes to other supported languages.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fplanning-plugin\u002Fskills\u002Fpp-translate\u002FSKILL.md",[],[120,121,122,123,124,125,126,127,128,129,130,131,87,132,133,134],"pp","pp translate","translate","feature","name","editing","read","spec","write","edit","sync","use","language","true","changes",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":142,"publishedAt":46},"01M6FNV0PGRKR2MW0AEPS6XP0Q","pp-sync-stitch","Use when wireframes were manually edited on the Stitch website and need to be re-fetched to the local project.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fplanning-plugin\u002Fskills\u002Fpp-sync-stitch\u002FSKILL.md",[141],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[143,120,144,130,145,146,123,147,148,149,150,131,151,152,153,154,155,124,126,133],"pp sync stitch","stitch","projects","get","project","re","local","MCP","Bash","id","wireframes","website","screen",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":163,"publishedAt":46},"01M6FNTWW2KHS9XRAR72X33G0B","pp-sync-notion","Use when a specification needs to be published or re-synced to Notion after finalization or manual edits.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fplanning-plugin\u002Fskills\u002Fpp-sync-notion\u002FSKILL.md",[162],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[120,164,130,165,123,148,166,167,150,131,168,124,126,128,129,169,133],"notion","pp sync notion","search","manual","specification","grep",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":176,"publishedAt":46},"01M6FNTSCFW0RGR0EKTTBTPKZX","pp-spec","Use when starting a new feature or project that needs a functional specification before implementation.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fplanning-plugin\u002Fskills\u002Fpp-spec\u002FSKILL.md",[],[120,127,177,123,147,131,151,168,178,179,126,128,129,169,180,133],"pp spec","new feature","functional","implementation"]