{"owner":"spring-projects","repo":"spring-framework","hasSkills":true,"totalSkillsCount":4,"totalTokensCount":1970,"categories":["root-instruction","mcp-config","marketplace","plugin-manifest"],"hasMcp":true,"mcpConfig":{"mcpServers":{"spring-framework":{"command":"npx","args":["-y","@modelcontextprotocol/server-spring-framework"]}}},"found":["AGENTS.md",".cursor/mcp.json",".claude-plugin/marketplace.json",".claude-plugin/plugin.json"],"skills":{"AGENTS.md":"# Spring Framework agent guidelines\n\nConcise extract of [CONTRIBUTING.md](CONTRIBUTING.md), which remains the reference for humans.\n\n## Build\n\n- Gradle build, JDK from `.sdkmanrc` (currently JDK 25, `sdk env install` / `sdk env`); artifacts target Java 17+.\n- Scope builds to the modules you touched: `./gradlew :spring-webmvc:test`, a single test with `--tests <fully.qualified.ClassTests>`.\n- Run `./gradlew :<module>:check` before finishing: it runs tests and Checkstyle (`src/checkstyle/checkstyle.xml`), which enforces most of the code style below.\n- NullAway null-safety checks run during compilation; fix reported errors instead of suppressing them.\n- Do not run `clean` unless needed; the build is incremental and cached.\n- Reference docs: `./gradlew antora`, output in `framework-docs/build/site/index.html`.\n\n## Code style\n\n- Match surrounding code; do not reformat unrelated code; a file should look like it was written by a single author.\n- Tabs, LF, UTF-8, no trailing whitespace.\n- Aim for 90 characters per line for code (105 acceptable, 120 max) and ~80 for Javadoc.\n- Wrap lines after separators (`,` `+` `?` `:` `&&` `||`), never before.\n- K&R braces, with `else`, `catch`, and `finally` on a new line.\n- Two blank lines before fields, constructors, `static {}` blocks, and inner classes; one blank line after a multiline method signature.\n- Import order, groups separated by a blank line: `java.*`, then `javax.*` + `jakarta.*`, then others, then `org.springframework.*`, then static imports.\n- No wildcard imports. No static imports in production code except constants/enum constants and third-party DSL factory methods; use them in tests (e.g. `assertThat`).\n- Every source file: Apache 2.0 license header (`Copyright 2002-present the original author or authors.`, copy from an existing file), package, imports, exactly one top-level class.\n- Always reference fields with `this.`, never methods. Always add `@Override`.\n- No `var` in production code. No single-character variable names. Wrap ternaries in parentheses with the non-null condition first: `(foo != null ? foo : \"default\")`.\n- Argument checks: `Assert.notNull(event, \"Event must not be null\")`; state checks: `Assert.state(...)`.\n- Null-safety with JSpecify: packages are `@NullMarked` in `package-info.java`, use `org.jspecify.annotations.Nullable` explicitly (e.g. `private @Nullable String name;`), repeat super method nullness on overrides, `@Contract` where useful.\n- Static utility classes: `abstract`, `Utils` suffix, private constructor.\n- No `System.out`/`System.err` or `printStackTrace()`.\n\n## Javadoc\n\n- First sentence in imperative style (\"Return\", not \"Returns\"); `<p>` to start extra paragraphs; `{@code}` for code and `null`.\n- No blank line between method description and tags; do not indent wrapped tag descriptions.\n- Add `@since` to new classes and new public/protected methods; omit a `.0` patch version (`@since 7.1`, not `7.1.0`).\n- Tag order for types: `@author`, `@since`, `@param`, `@see`, `@deprecated`; for members: `@param`, `@return`, `@throws`, `@since`, `@see`, `@deprecated`.\n\n## Tests\n\n- Add or update tests for any code change.\n- JUnit Jupiter, AssertJ (including `assertThatIllegalArgumentException()` and similar), Mockito. No JUnit 4/Jupiter/TestNG assertions, no Hamcrest.\n- Test class names end with `Tests`.\n- Use the standard Mockito API (`when(...).thenReturn(...)`), not `BDDMockito` (`given(...)`), in new test code; do not migrate existing `BDDMockito` usage.\n\n## Docs\n\n- Reference docs are AsciiDoc in `framework-docs/modules/ROOT`; code snippets for `include-code::` live in `framework-docs/src/main/{java,kotlin}`.\n\n## Commits and pull requests\n\n- Pull requests target `main`.\n- Subject: imperative, capitalized verb, at most 55 characters, no `fix:`/`docs:` prefixes, no issue/PR number, no trailing period.\n- Body wrapped at 72 characters explaining the motivation, followed by `Closes gh-123` (or `See gh-123`), then a `Signed-off-by: Name <email>` trailer (DCO, use `git commit -s`).\n- Never write annotations verbatim in commit messages or PR titles (it mentions GitHub users): enclose them in backticks, as in `` `@Override` ``.\n- Changes must be reviewed by a human who remains accountable for them before being submitted.\n",".cursor/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.cursor/mcp.json)",".claude-plugin/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/marketplace.json)",".claude-plugin/plugin.json":"# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/plugin.json)"},"files":{"AGENTS.md":"# Spring Framework agent guidelines\n\nConcise extract of [CONTRIBUTING.md](CONTRIBUTING.md), which remains the reference for humans.\n\n## Build\n\n- Gradle build, JDK from `.sdkmanrc` (currently JDK 25, `sdk env install` / `sdk env`); artifacts target Java 17+.\n- Scope builds to the modules you touched: `./gradlew :spring-webmvc:test`, a single test with `--tests <fully.qualified.ClassTests>`.\n- Run `./gradlew :<module>:check` before finishing: it runs tests and Checkstyle (`src/checkstyle/checkstyle.xml`), which enforces most of the code style below.\n- NullAway null-safety checks run during compilation; fix reported errors instead of suppressing them.\n- Do not run `clean` unless needed; the build is incremental and cached.\n- Reference docs: `./gradlew antora`, output in `framework-docs/build/site/index.html`.\n\n## Code style\n\n- Match surrounding code; do not reformat unrelated code; a file should look like it was written by a single author.\n- Tabs, LF, UTF-8, no trailing whitespace.\n- Aim for 90 characters per line for code (105 acceptable, 120 max) and ~80 for Javadoc.\n- Wrap lines after separators (`,` `+` `?` `:` `&&` `||`), never before.\n- K&R braces, with `else`, `catch`, and `finally` on a new line.\n- Two blank lines before fields, constructors, `static {}` blocks, and inner classes; one blank line after a multiline method signature.\n- Import order, groups separated by a blank line: `java.*`, then `javax.*` + `jakarta.*`, then others, then `org.springframework.*`, then static imports.\n- No wildcard imports. No static imports in production code except constants/enum constants and third-party DSL factory methods; use them in tests (e.g. `assertThat`).\n- Every source file: Apache 2.0 license header (`Copyright 2002-present the original author or authors.`, copy from an existing file), package, imports, exactly one top-level class.\n- Always reference fields with `this.`, never methods. Always add `@Override`.\n- No `var` in production code. No single-character variable names. Wrap ternaries in parentheses with the non-null condition first: `(foo != null ? foo : \"default\")`.\n- Argument checks: `Assert.notNull(event, \"Event must not be null\")`; state checks: `Assert.state(...)`.\n- Null-safety with JSpecify: packages are `@NullMarked` in `package-info.java`, use `org.jspecify.annotations.Nullable` explicitly (e.g. `private @Nullable String name;`), repeat super method nullness on overrides, `@Contract` where useful.\n- Static utility classes: `abstract`, `Utils` suffix, private constructor.\n- No `System.out`/`System.err` or `printStackTrace()`.\n\n## Javadoc\n\n- First sentence in imperative style (\"Return\", not \"Returns\"); `<p>` to start extra paragraphs; `{@code}` for code and `null`.\n- No blank line between method description and tags; do not indent wrapped tag descriptions.\n- Add `@since` to new classes and new public/protected methods; omit a `.0` patch version (`@since 7.1`, not `7.1.0`).\n- Tag order for types: `@author`, `@since`, `@param`, `@see`, `@deprecated`; for members: `@param`, `@return`, `@throws`, `@since`, `@see`, `@deprecated`.\n\n## Tests\n\n- Add or update tests for any code change.\n- JUnit Jupiter, AssertJ (including `assertThatIllegalArgumentException()` and similar), Mockito. No JUnit 4/Jupiter/TestNG assertions, no Hamcrest.\n- Test class names end with `Tests`.\n- Use the standard Mockito API (`when(...).thenReturn(...)`), not `BDDMockito` (`given(...)`), in new test code; do not migrate existing `BDDMockito` usage.\n\n## Docs\n\n- Reference docs are AsciiDoc in `framework-docs/modules/ROOT`; code snippets for `include-code::` live in `framework-docs/src/main/{java,kotlin}`.\n\n## Commits and pull requests\n\n- Pull requests target `main`.\n- Subject: imperative, capitalized verb, at most 55 characters, no `fix:`/`docs:` prefixes, no issue/PR number, no trailing period.\n- Body wrapped at 72 characters explaining the motivation, followed by `Closes gh-123` (or `See gh-123`), then a `Signed-off-by: Name <email>` trailer (DCO, use `git commit -s`).\n- Never write annotations verbatim in commit messages or PR titles (it mentions GitHub users): enclose them in backticks, as in `` `@Override` ``.\n- Changes must be reviewed by a human who remains accountable for them before being submitted.\n",".cursor/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.cursor/mcp.json)",".claude-plugin/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/marketplace.json)",".claude-plugin/plugin.json":"# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/plugin.json)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# Spring Framework agent guidelines\n\nConcise extract of [CONTRIBUTING.md](CONTRIBUTING.md), which remains the reference for humans.\n\n## Build\n\n- Gradle build, JDK from `.sdkmanrc` (currently JDK 25, `sdk env install` / `sdk env`); artifacts target Java 17+.\n- Scope builds to the modules you touched: `./gradlew :spring-webmvc:test`, a single test with `--tests <fully.qualified.ClassTests>`.\n- Run `./gradlew :<module>:check` before finishing: it runs tests and Checkstyle (`src/checkstyle/checkstyle.xml`), which enforces most of the code style below.\n- NullAway null-safety checks run during compilation; fix reported errors instead of suppressing them.\n- Do not run `clean` unless needed; the build is incremental and cached.\n- Reference docs: `./gradlew antora`, output in `framework-docs/build/site/index.html`.\n\n## Code style\n\n- Match surrounding code; do not reformat unrelated code; a file should look like it was written by a single author.\n- Tabs, LF, UTF-8, no trailing whitespace.\n- Aim for 90 characters per line for code (105 acceptable, 120 max) and ~80 for Javadoc.\n- Wrap lines after separators (`,` `+` `?` `:` `&&` `||`), never before.\n- K&R braces, with `else`, `catch`, and `finally` on a new line.\n- Two blank lines before fields, constructors, `static {}` blocks, and inner classes; one blank line after a multiline method signature.\n- Import order, groups separated by a blank line: `java.*`, then `javax.*` + `jakarta.*`, then others, then `org.springframework.*`, then static imports.\n- No wildcard imports. No static imports in production code except constants/enum constants and third-party DSL factory methods; use them in tests (e.g. `assertThat`).\n- Every source file: Apache 2.0 license header (`Copyright 2002-present the original author or authors.`, copy from an existing file), package, imports, exactly one top-level class.\n- Always reference fields with `this.`, never methods. Always add `@Override`.\n- No `var` in production code. No single-character variable names. Wrap ternaries in parentheses with the non-null condition first: `(foo != null ? foo : \"default\")`.\n- Argument checks: `Assert.notNull(event, \"Event must not be null\")`; state checks: `Assert.state(...)`.\n- Null-safety with JSpecify: packages are `@NullMarked` in `package-info.java`, use `org.jspecify.annotations.Nullable` explicitly (e.g. `private @Nullable String name;`), repeat super method nullness on overrides, `@Contract` where useful.\n- Static utility classes: `abstract`, `Utils` suffix, private constructor.\n- No `System.out`/`System.err` or `printStackTrace()`.\n\n## Javadoc\n\n- First sentence in imperative style (\"Return\", not \"Returns\"); `<p>` to start extra paragraphs; `{@code}` for code and `null`.\n- No blank line between method description and tags; do not indent wrapped tag descriptions.\n- Add `@since` to new classes and new public/protected methods; omit a `.0` patch version (`@since 7.1`, not `7.1.0`).\n- Tag order for types: `@author`, `@since`, `@param`, `@see`, `@deprecated`; for members: `@param`, `@return`, `@throws`, `@since`, `@see`, `@deprecated`.\n\n## Tests\n\n- Add or update tests for any code change.\n- JUnit Jupiter, AssertJ (including `assertThatIllegalArgumentException()` and similar), Mockito. No JUnit 4/Jupiter/TestNG assertions, no Hamcrest.\n- Test class names end with `Tests`.\n- Use the standard Mockito API (`when(...).thenReturn(...)`), not `BDDMockito` (`given(...)`), in new test code; do not migrate existing `BDDMockito` usage.\n\n## Docs\n\n- Reference docs are AsciiDoc in `framework-docs/modules/ROOT`; code snippets for `include-code::` live in `framework-docs/src/main/{java,kotlin}`.\n\n## Commits and pull requests\n\n- Pull requests target `main`.\n- Subject: imperative, capitalized verb, at most 55 characters, no `fix:`/`docs:` prefixes, no issue/PR number, no trailing period.\n- Body wrapped at 72 characters explaining the motivation, followed by `Closes gh-123` (or `See gh-123`), then a `Signed-off-by: Name <email>` trailer (DCO, use `git commit -s`).\n- Never write annotations verbatim in commit messages or PR titles (it mentions GitHub users): enclose them in backticks, as in `` `@Override` ``.\n- Changes must be reviewed by a human who remains accountable for them before being submitted.\n","isInternal":false,"tokens":1070,"sizeBytes":4262},{"name":"marketplace.json","path":".claude-plugin/marketplace.json","rawUrl":"https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/marketplace.json","title":"Claude Plugin Marketplace Catalog","category":"marketplace","format":"json","content":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/marketplace.json)","tokens":300,"sizeBytes":211},{"name":"plugin.json","path":".claude-plugin/plugin.json","rawUrl":"https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/plugin.json","title":"claude-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/plugin.json)","tokens":300,"sizeBytes":197},{"name":"mcp.json","path":".cursor/mcp.json","rawUrl":"https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.cursor/mcp.json","title":"Model Context Protocol (MCP) Configuration","category":"mcp-config","format":"json","content":"# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.cursor/mcp.json)","tokens":300,"sizeBytes":190}],"systemPromptSnippet":"<yakaai_skills repo=\"spring-projects/spring-framework\">\n<!-- File: AGENTS.md (Tokens: ~1070 | Category: root-instruction) -->\n# Spring Framework agent guidelines\n\nConcise extract of [CONTRIBUTING.md](CONTRIBUTING.md), which remains the reference for humans.\n\n## Build\n\n- Gradle build, JDK from `.sdkmanrc` (currently JDK 25, `sdk env install` / `sdk env`); artifacts target Java 17+.\n- Scope builds to the modules you touched: `./gradlew :spring-webmvc:test`, a single test with `--tests <fully.qualified.ClassTests>`.\n- Run `./gradlew :<module>:check` before finishing: it runs tests and Checkstyle (`src/checkstyle/checkstyle.xml`), which enforces most of the code style below.\n- NullAway null-safety checks run during compilation; fix reported errors instead of suppressing them.\n- Do not run `clean` unless needed; the build is incremental and cached.\n- Reference docs: `./gradlew antora`, output in `framework-docs/build/site/index.html`.\n\n## Code style\n\n- Match surrounding code; do not reformat unrelated code; a file should look like it was written by a single author.\n- Tabs, LF, UTF-8, no trailing whitespace.\n- Aim for 90 characters per line for code (105 acceptable, 120 max) and ~80 for Javadoc.\n- Wrap lines after separators (`,` `+` `?` `:` `&&` `||`), never before.\n- K&R braces, with `else`, `catch`, and `finally` on a new line.\n- Two blank lines before fields, constructors, `static {}` blocks, and inner classes; one blank line after a multiline method signature.\n- Import order, groups separated by a blank line: `java.*`, then `javax.*` + `jakarta.*`, then others, then `org.springframework.*`, then static imports.\n- No wildcard imports. No static imports in production code except constants/enum constants and third-party DSL factory methods; use them in tests (e.g. `assertThat`).\n- Every source file: Apache 2.0 license header (`Copyright 2002-present the original author or authors.`, copy from an existing file), package, imports, exactly one top-level class.\n- Always reference fields with `this.`, never methods. Always add `@Override`.\n- No `var` in production code. No single-character variable names. Wrap ternaries in parentheses with the non-null condition first: `(foo != null ? foo : \"default\")`.\n- Argument checks: `Assert.notNull(event, \"Event must not be null\")`; state checks: `Assert.state(...)`.\n- Null-safety with JSpecify: packages are `@NullMarked` in `package-info.java`, use `org.jspecify.annotations.Nullable` explicitly (e.g. `private @Nullable String name;`), repeat super method nullness on overrides, `@Contract` where useful.\n- Static utility classes: `abstract`, `Utils` suffix, private constructor.\n- No `System.out`/`System.err` or `printStackTrace()`.\n\n## Javadoc\n\n- First sentence in imperative style (\"Return\", not \"Returns\"); `<p>` to start extra paragraphs; `{@code}` for code and `null`.\n- No blank line between method description and tags; do not indent wrapped tag descriptions.\n- Add `@since` to new classes and new public/protected methods; omit a `.0` patch version (`@since 7.1`, not `7.1.0`).\n- Tag order for types: `@author`, `@since`, `@param`, `@see`, `@deprecated`; for members: `@param`, `@return`, `@throws`, `@since`, `@see`, `@deprecated`.\n\n## Tests\n\n- Add or update tests for any code change.\n- JUnit Jupiter, AssertJ (including `assertThatIllegalArgumentException()` and similar), Mockito. No JUnit 4/Jupiter/TestNG assertions, no Hamcrest.\n- Test class names end with `Tests`.\n- Use the standard Mockito API (`when(...).thenReturn(...)`), not `BDDMockito` (`given(...)`), in new test code; do not migrate existing `BDDMockito` usage.\n\n## Docs\n\n- Reference docs are AsciiDoc in `framework-docs/modules/ROOT`; code snippets for `include-code::` live in `framework-docs/src/main/{java,kotlin}`.\n\n## Commits and pull requests\n\n- Pull requests target `main`.\n- Subject: imperative, capitalized verb, at most 55 characters, no `fix:`/`docs:` prefixes, no issue/PR number, no trailing period.\n- Body wrapped at 72 characters explaining the motivation, followed by `Closes gh-123` (or `See gh-123`), then a `Signed-off-by: Name <email>` trailer (DCO, use `git commit -s`).\n- Never write annotations verbatim in commit messages or PR titles (it mentions GitHub users): enclose them in backticks, as in `` `@Override` ``.\n- Changes must be reviewed by a human who remains accountable for them before being submitted.\n\n<!-- File: .claude-plugin/marketplace.json (Tokens: ~300 | Category: marketplace) -->\n# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/marketplace.json)\n\n<!-- File: .claude-plugin/plugin.json (Tokens: ~300 | Category: plugin-manifest) -->\n# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.claude-plugin/plugin.json)\n\n<!-- File: .cursor/mcp.json (Tokens: ~300 | Category: mcp-config) -->\n# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/spring-projects/spring-framework/HEAD/.cursor/mcp.json)\n</yakaai_skills>"}