Fory Release
apache/fory
Prepare an Apache Fory release candidate from a clean release branch, including the version bump, RC tag, JVM staging, ASF source artifacts, SVN upload, and vote email.
How to use @JniType annotations for ergonomic JNI. An agent skill from nwjs/chromium.src.
$ npx skills add nwjs/chromium.src --skill jni-type-conversion -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nwjs/chromium.src jni-type-conversion --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/nwjs/chromium.src.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agents/skills/jni-type-conversion .claude/skills/jni-type-conversion && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "jni-type-conversion" agent skill from https://github.com/nwjs/chromium.src/tree/main/agents/skills/jni-type-conversion into .claude/skills/jni-type-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jni-type-conversion", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/nwjs/chromium.src/tree/main/agents/skills/jni-type-conversionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add nwjs/chromium.src --skill jni-type-conversion -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nwjs/chromium.src jni-type-conversion --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nwjs/chromium.src.git skills-src && mkdir -p .agents/skills && cp -r skills-src/agents/skills/jni-type-conversion .agents/skills/jni-type-conversion && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "jni-type-conversion" agent skill from https://github.com/nwjs/chromium.src/tree/main/agents/skills/jni-type-conversion into .agents/skills/jni-type-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jni-type-conversion", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nwjs/chromium.src --skill jni-type-conversion -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nwjs/chromium.src jni-type-conversion --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nwjs/chromium.src.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/agents/skills/jni-type-conversion .cursor/skills/jni-type-conversion && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "jni-type-conversion" agent skill from https://github.com/nwjs/chromium.src/tree/main/agents/skills/jni-type-conversion into .cursor/skills/jni-type-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jni-type-conversion", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/nwjs/chromium.src.git --path agents/skills/jni-type-conversion--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add nwjs/chromium.src --skill jni-type-conversion -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nwjs/chromium.src jni-type-conversion --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nwjs/chromium.src.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/agents/skills/jni-type-conversion .gemini/skills/jni-type-conversion && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "jni-type-conversion" agent skill from https://github.com/nwjs/chromium.src/tree/main/agents/skills/jni-type-conversion into .gemini/skills/jni-type-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jni-type-conversion", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install nwjs/chromium.src jni-type-conversionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add nwjs/chromium.src --skill jni-type-conversion -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nwjs/chromium.src.git skills-src && mkdir -p .github/skills && cp -r skills-src/agents/skills/jni-type-conversion .github/skills/jni-type-conversion && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "jni-type-conversion" agent skill from https://github.com/nwjs/chromium.src/tree/main/agents/skills/jni-type-conversion into .github/skills/jni-type-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jni-type-conversion", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nwjs/chromium.src --skill jni-type-conversion -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nwjs/chromium.src jni-type-conversion --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nwjs/chromium.src.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/agents/skills/jni-type-conversion .opencode/skills/jni-type-conversion && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "jni-type-conversion" agent skill from https://github.com/nwjs/chromium.src/tree/main/agents/skills/jni-type-conversion into .opencode/skills/jni-type-conversion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jni-type-conversion", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
jni-type-conversionHow to use @JniType annotations for ergonomic JNI. An agent skill from nwjs/chromium.src.
Jni Type Conversion is an agent skill from nwjs/chromium.src. How to use @JniType annotations for ergonomic JNI. Relevant for Java files that use @NativeMethods or @CalledByNative.
Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with Java and C++. The repository describes itself as: Chromium codebase with NW.js modifications. Based on https://chromium.googlesource.com/chromium/src.git. The licence is BSD-3-Clause.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a9e8946. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
rgFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Jni Type Conversion loads about 1.6k tokens when it runs. Until then it costs about 35 tokens; SKILL.md has 588 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from nwjs/chromium.src at commit a9e8946, republished under its BSD-3-Clause licence (© nwjs). 588 words, ~1,643 tokens.
.claude/skills/jni-type-conversion/SKILL.md (or your agent's skills folder).This skill guides the process of replacing explicit JNI conversion logic (like
ConvertJavaStringToUTF8) with @JniType annotations in Java and corresponding
native types in C++.
You must first read the prerequisite skill:
//third_party/jni_zero/skills/jni-zero.
@NativeMethods or @CalledByNative) that take or return types that are
currently being explicitly converted in C++.@JniType
conversion defined, search the codebase for FromJniType or ToJniType
definitions for that C++ type:rg -g "*.h" "\binline .*(From|To)JniType"ConvertJavaStringToUTF8 -> std::stringConvertJavaStringToUTF16 -> std::u16stringJavaIntArrayToIntVector -> std::vector<int32_t>ToJavaArrayOfStrings -> std::vector<std::string>base::android::ConvertJavaStringToUTF8 -> std::stringif block that might skip
it).TRACE_EVENT macros). Moving
these to @JniType makes the conversion eager, which can impact
performance.@JniType("cpp_type") to the parameter or return type.int in @JniType should always be
int32_t (e.g., @JniType("std::vector<int32_t>") instead of
@JniType("std::vector<int>")).List<T> over object arrays (T[]) for collection
parameters and return types (e.g.,
@JniType("std::vector") List<SuggestedTabInfo> suggestedTabs instead of
SuggestedTabInfo[]), especially when Java passes or stores it as a List
(avoiding Arrays.asList(...)).@Nullable Types:String parameters, @JniType("std::string") automatically converts
Java null to C++ "". Prefer this over std::optional<std::string>
unless the C++ logic specifically distinguishes between null and empty.@JniType("std::vector") automatically converts
Java null to an empty vector. Prefer empty containers over
std::optional<> unless the C++ logic specifically distinguishes between
null and empty, since std::optional<> has larger binary size.jni_zero::JavaRef, unless they are
already converted to std::optional<T>, in which case use
@JniType("std::optional<...>") @Nullable.org.jni_zero.JniType is imported.const std::string&, std::vector<int32_t>&, base::OnceClosure).JNIEnv* env parameter used to be used,
but is no longer used after @JniType additions, it should be removed from
the C++ function signature.@NativeMethods, the caller
parameter is usually unnecessary. Remove it from Java and C++ to reduce
boilerplate.using base::android::ConvertStringToUTF8;)._jni.h file.base/android/jni_string.h for all string conversions.third_party/jni_zero/default_conversions.h for containers
(std::vector, std::optional, base::span).base/android/callback_android.h for callback conversions.autoninja -C OUTPUT_DIR ../../path/to/foo.cc^ ../../path/to/Foo.java^ ...OUTPUT_DIR (e.g. start with ../../)OUTPUT_DIR; you must have been told it.@JniType("std::string") String uuidbase::Uuid::ParseLowercase(uuid_string) (incoming) or
uuid.AsLowercaseString() (outgoing).std::vector <-> List<T> / T[])List<T> over object arrays (T[]) for collection parameters and
return types.@JniType("std::vector") (or @JniType("std::vector<...>")) works for both
@CalledByNative and @NativeMethods parameters and return types.Prefer:
@CalledByNative
private void onSuggestedTabsUpdated(@JniType("std::vector") List<SuggestedTabInfo> suggestedTabs) {
mSuggestedTabsSupplier.set(suggestedTabs);
}Over:
@CalledByNative
private void onSuggestedTabsUpdated(@JniType("std::vector") SuggestedTabInfo[] suggestedTabs) {
mSuggestedTabsSupplier.set(Arrays.asList(suggestedTabs));
}Java:
void zeroArg(@JniType("base::OnceClosure&&") Runnable c1);
void oneArg(@JniType("base::OnceCallback<void(int32_t)>&&") Callback<Integer> c2);
void twoArgs(@JniType("base::OnceCallback<void(bool, int32_t)>&&") Callback2<Boolean, Integer> c3);C++:
#include "base/android/callback_android.h"
void JNI_MyClass_ZeroArg(base::OnceClosure&& callback) {
std::move(callback).Run();
}
void JNI_MyClass_OneArg(base::OnceCallback<void(int32_t)>&& callback) {
std::move(callback).Run(0);
}
void JNI_MyClass_TwoArgs(base::OnceCallback<void(bool, int32_t)>&& callback) {
std::move(callback).Run(true, 67);
}© nwjs, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in agents/skills/jni-type-conversion of nwjs/chromium.src.
Open the folder on GitHubat commit a9e8946
Jni Type Conversion next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Jni Type Conversion this skillnwjs/chromium.src | 160 | — | ~1.6k | Automated safety check: Pass | BSD-3-Clause | |
| Fory Releaseapache/fory | 4.6k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Code Audit3stoneBrother/code-audit | 893 | 1 repos | ~2.7k | Automated safety check: Pass | None | |
| CodeQL Security Scantrailofbits/skills | 7.4k | — | ~4.6k | Automated safety check: Notes | CC-BY-SA-4.0 | |
| Fory Version Bumpapache/fory | 4.6k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Fory Performance Optimizationapache/fory | 4.6k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 |
apache/fory
Prepare an Apache Fory release candidate from a clean release branch, including the version bump, RC tag, JVM staging, ASF source artifacts, SVN upload, and vote email.
3stoneBrother/code-audit
Professional code security audit skill covering 55+ vulnerability types.
trailofbits/skills
Scans a codebase for vulnerabilities with CodeQL's data flow and taint tracking in run-all or important-only modes, including data extensions for project-specific sources and sinks.
apache/fory
Bump Apache Fory release or post-release development versions across Java, Kotlin, Scala, Python, Rust, Go, C++, C, Dart, JavaScript, Swift, integration tests, examples, and source docs.
apache/fory
Run profile-driven bottleneck optimization across Apache Fory implementations (Java, C++, Python/Cython, Go, Rust, Swift, C, JavaScript/TypeScript, Dart, Kotlin, Scala).
Railly/tinte
Generate code screenshots via ray.tinte.dev API. An agent skill from Railly/tinte.
nwjs/chromium.src
Extracts raw trace data from Perfetto traces, runs arbitrary SQL queries for custom follow-up analysis, and applies expert cognitive principles (Tiered Flow Analysis, Semantic Mismatch, Redundancy)…
nwjs/chromium.src
Autonomous multi-agent performance optimization loop for Chromium and V8.
nwjs/chromium.src
Automated Tracing & Performance Telemetry in Chromium using Perfetto and Telemetry benchmarks.
nwjs/chromium.src
Queries Chrome commit, version, release, and milestone metadata.
nwjs/chromium.src
Search and reference Chromium documentation from the local docs index, including design docs, APIs, and development guides.
nwjs/chromium.src
Diagnose Chromium GN dependency and include-visibility failures, including BUILD.gn deps/publicdeps, DEPS include rules, private headers, and circular dependencies.
How to use @JniType annotations for ergonomic JNI. An agent skill from nwjs/chromium.src. src. How to use @JniType annotations for ergonomic JNI.
Run `npx skills add nwjs/chromium.src --skill jni-type-conversion -a claude-code`. Or copy the skill folder (agents/skills/jni-type-conversion in nwjs/chromium.src) into .claude/skills/jni-type-conversion in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nwjs/chromium.src --skill jni-type-conversion -a codex`. Or copy the skill folder (agents/skills/jni-type-conversion in nwjs/chromium.src) into .agents/skills/jni-type-conversion in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nwjs/chromium.src --skill jni-type-conversion -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/jni-type-conversion, .gemini/skills/jni-type-conversion, .github/skills/jni-type-conversion and .opencode/skills/jni-type-conversion in your project.
Going by SKILL.md and its folder, Jni Type Conversion needs the command-line tools its instructions call (rg).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Jni Type Conversion is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Jni Type Conversion: Fory Release (apache/fory, 4.6k stars), Code Audit (3stoneBrother/code-audit, 893 stars), CodeQL Security Scan (trailofbits/skills, 7.4k stars) and Fory Version Bump (apache/fory, 4.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nwjs (a GitHub organization) maintains it in nwjs/chromium.src, which has 160 GitHub stars. The repository holds 64 skills in this directory. The repository was last updated on October 3, 2026.
Source: nwjs/chromium.src on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.