Agent skill

Spanify Buffers

by nwjs in nwjs/chromium.src

Find and fix unsafe buffer operations in a C++ file by removing UNSAFETODO markers and replacing unsafe raw pointers/C-style functions with base::span and standard safe containers.

BSD-3-ClauseAuto-check passedDevelopment

Install Spanify Buffers

skills CLI
$ npx skills add nwjs/chromium.src --skill spanify-buffers -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install nwjs/chromium.src spanify-buffers --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/nwjs/chromium.src.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agents/projects/code-health/spanify-buffers .claude/skills/spanify-buffers && rm -rf skills-src

Use ~/.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/

Facts

Skill name
spanify-buffers
GitHub stars
160
Token cost
~3.7k tokens
SKILL.md length
1,580 words
Files
4 (incl. references)
Skills in repo
64
Repo updated
First seen
Licence
BSD-3-Clause

At a glance

Find and fix unsafe buffer operations in a C++ file by removing UNSAFETODO markers and replacing unsafe raw pointers/C-style functions with base::span and standard safe containers.

  • Works in 5 steps: Unsafe Function Signatures → C-Style Arrays → Unsafe Pointer Arithmetic and Access → …
  • The user asks to fix unsafe buffer warnings
  • SKILL.md covers Basic:, Search Strategy:, Build/Test and Investigate:, plus 1 more section
  • Calls git

What it does

Spanify Buffers is an agent skill from nwjs/chromium.src. Find and fix unsafe buffer operations in a C++ file by removing UNSAFETODO markers and replacing unsafe raw pointers/C-style functions with base::span and standard safe containers. Use when the user asks to fix unsafe buffer warnings or -Wunsafe-buffer-usage errors. Don't use for other types of memory safety bugs like Use-After-Free, locking, or data races.

Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/reviewer_guidelines.md` and `references/unsafe_buffers.md`).

It sits in Development, covering Code quality. It works with C++ and Git. 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.

When your agent uses it

  • The user asks to fix unsafe buffer warnings
  • -Wunsafe-buffer-usage errors
  • Other types of memory safety bugs like Use-After-Free

Example prompts

  • “/spanify-buffers”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Unsafe Function Signatures
  2. C-Style Arrays
  3. Unsafe Pointer Arithmetic and Access
  4. Unsafe C-Library Functions
  5. Unsafe Container Construction

What it can do on your machine

Read from SKILL.md and the folder at commit a9e8946. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Spanify Buffers loads about 3.7k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 95 tokens; SKILL.md has 1,580 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~95
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~11k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from nwjs/chromium.src at commit a9e8946, republished under its BSD-3-Clause licence (© nwjs). 1,580 words, ~3,740 tokens.

Download SKILL.mdSave it as .claude/skills/spanify-buffers/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
spanify-buffers
description
Find and fix unsafe buffer operations in a C++ file by removing UNSAFE_TODO markers and replacing unsafe raw pointers/C-style functions with base::span and standard safe containers. Use when the user asks to fix unsafe buffer warnings or `-Wunsafe-buffer-usage` errors. Don't use for other types of memory safety bugs like Use-After-Free, locking, or data races.

LLM Prompt: Fix Unsafe Buffer Usage in Chromium

Role: You are an expert C++ developer, specializing in memory safety and modern C++ idioms for the Chromium project.

Goal: Your task is to fix all unsafe buffer operations in a given C++ file. You will do this by removing UNSAFE_TODO() markers and #pragma allow_unsafe_buffers directives, and then resolving the resulting -Wunsafe-buffer-usage compiler errors by applying established patterns for safe, idiomatic, and high-quality buffer handling in Chromium.

Core Task: You will be given a single C++ file path.

  1. Find all unsafe code (marked by UNSAFE_TODO or #pragma allow_unsafe_buffers).
  2. Fix the code by applying the principles and patterns below.
  3. Verify your fix by compiling and testing.

Allowed tools/commands

Basic:

  • read_file
  • replace
  • write_file
  • run_shell_command(fdfind)
  • run_shell_command(rg)

CRITICAL: DO NOT USE grep. The Chromium repository is too large for grep -r, and it will cause a timeout. You MUST use rg (ripgrep) for all text searches.

Search Strategy:

  • Text Search: Use run_shell_command(rg "search_term").
  • Symbol Lookup: Use remote_code_search or codebase_investigator for more precise architectural lookups.
  • File Lookup: Use run_shell_command(fdfind "filename").

Build/Test

  • run_shell_command(autoninja)
  • run_shell_command(tools/autotest.py)
  • run_shell_command(./tools/autotest.py)

Investigate:

  • remote_code_search
  • codebase_investigator
  • run_debugging_agent
  • run_shell_command(git log)
  • run_shell_command(git diff)
  • run_shell_command(git show)
  • run_shell_command(ls),
  • run_shell_command(cat)
  • run_shell_command(head)
  • run_shell_command(tail)
  • run_shell_command(gn)
  • run_shell_command(git grep)

Cleanup:

  • run_shell_command(git cl format)

Workflow
  1. Read the File: Get the content of the file provided in the prompt.

  2. Identify -WUnsafe-buffer-usage opt-outs:

    • If you find UNSAFE_TODO(...): Remove the macro wrapper, leaving the code inside.
    • If you find #pragma allow_unsafe_buffers: Remove the entire #ifdef UNSAFE_BUFFERS_BUILD...#endif block.
  3. Check for a compiler error related to unsafe buffer usage. If none exists, report this to the user in your response/walkthrough, stating that no unsafe code was found.

  4. Fix the Code: Apply the Core Principles, Code Quality & Idioms, and Patterns & Fixes below. Use compiler errors as a guide, but also proactively improve the surrounding code.

    • Your primary goal is a robust and high-quality fix. While you should avoid large-scale, unrelated rewrites, you are encouraged to perform small, local refactorings if they result in a cleaner, safer, and more idiomatic solution. For example, changing a class member from a C-style array to std::array is a good refactoring.
    • If you change a function signature, you MUST use the codebase_investigator tool to find all its call sites and update them. This is critical for success.
    • After fixing the initial compiler error, you MUST scan the entire file for any other instances of unsafe buffer patterns (e.g., memcmp, strcmp, pointer arithmetic) and fix them as well.
  5. Verify the Fix: You should ensure your fix compiles. Verify your changes by compiling on one of the local build directories configured in the workspace (e.g., under the out/ directory, such as out/Default or out/linux-rel) to catch compilation errors early.

    Recommended Local Verification: You can build the entire target or just the object file to save time. Identify your local build directory (typically in out/):

    bash
    # Build the object file (fastest):
    autoninja -C out/<build-dir> obj/{path/to/file.o}
    
    # Or build the whole target:
    autoninja -C out/<build-dir> {target_name}

    Note: To find the object file path, you can use gn outputs out/<build-dir> {path/to/file.cc}.

    If this fails, analyze the error and iterate.

    Test: After a successful build, if you modified a test file, run:

    bash
    ./tools/autotest.py -C out/<build-dir> {test_file_path}

    If the test fails, you must fix the test code.

  6. Self-Review:

    • Read the reviewer guidelines located in references/reviewer_guidelines.md.
    • Perform a self-review of your generated patch against these guidelines to ensure it meets Chromium standards before declaring success.
  7. Format and Finalize:

    • Run git cl format to clean up your changes.
    • Review your changes using git diff to ensure they are correct and neat.

Core Principles (Your Most Important Rules)

Follow the Chromium guidelines on buffers located in references/unsafe_buffers.md

Readability and Simplicity

Your code must be easy to read and maintain.

  • Avoid over-engineering: Do not use complex template metaprogramming or obscure C++ features if a simpler base::span or std::ranges approach exists.
  • Self-documenting code: Use clear variable names and follow Chromium's naming conventions.
  • Surgical changes: Keep your diffs focused. Do not refactor unrelated code, but do ensure the code you touch is clean and modern.
  • Safety Comments: Every UNSAFE_BUFFERS() block MUST have a // SAFETY: comment that is clear, technically accurate, and easy for a human reviewer to verify.
Important Rules:

CRITICAL: You MUST use the exact, complete commands provided for verification. Do not add, remove, or change any arguments or flags.

CRITICAL: ALWAYS use base::span instead of std::span. std::span is forbidden in Chromium.

CRITICAL: The base::span(T* pointer, size_t size) constructor is also unsafe.

CRITICAL: Do not use std::<container>(pointer, pointer + size). This is not safe, but not yet marked as unsafe in the codebase.

CRITICAL: Do not use std::<container>(begin_iterator, end_iterator) where the iterators are from raw pointers. This is not safe, but not yet marked as unsafe in the codebase.

  • DON'T use UNSAFE_BUFFERS() if at all possible. If a safe fix is impossible (e.g., a complex third-party API), you may use it but you MUST justify in a // SAFETY: comment why other safe options (like subspan or span iterators) are not available, and why the code is safe. If you cannot fix it, inform the user in your response/walkthrough and explain why.
  • DON'T add new UNSAFE_TODO(...) markers. Your task is to eliminate them.
  • DON'T use raw pointer arithmetic (+, ++, ptr[i]).
  • DON'T use reinterpret_cast. Use safe casting functions like base::as_byte_span() or base::as_writable_byte_span().
  • DON'T change program logic. When replacing functions like sscanf, be mindful of subtle parsing behavior and ensure your replacement preserves the original logic.
  • You MUST check the return values of functions that can fail, such as base::SpanReader::Read...() methods, to ensure operations complete successfully.

Show full SKILL.md (784 more words)Show less
Code Quality & Idioms

Your goal is not just to make the code safe, but also to make it clean, modern, and idiomatic. Always prefer higher-level abstractions over manual operations.

  • Prefer Project-Specific Helpers: The base library has many powerful utilities. Use them whenever possible.
    • base::ToVector(span) instead of vector.assign(span.begin(), span.end()).
    • base::SpanWriter and base::SpanReader for serializing/deserializing data.
    • std::ranges::contains(container, element) instead of .find(...) != .npos.
    • base::wcslcpy instead of platform-specific APIs like lstrcpynW.
  • Use Modern C++ & Ranges: Prefer modern C++ features and standard algorithms for clarity and safety.
    • Range-based for loops: Prefer for (const auto& element : base_span) over index-based loops.
    • Standard Algorithms: Prefer std::ranges algorithms (e.g., std::ranges::copy, std::ranges::fill) over manual loops.
    • Use std::array for fixed-size stack arrays.
    • Use std::string_view for read-only string-like data. Use base::as_string_view(span_of_chars) to safely convert a span of characters to a view.
    • Prefer member functions over generic algorithms where appropriate (e.g., array.fill() instead of std::ranges::fill(array, ...)).
    • Use base::span features like .first(N) and .last(N) for expressiveness.
  • Const Correctness: Always prefer base::span<const T> if the underlying buffer is not modified.
  • Manage Headers: Whenever you introduce a new type, you MUST add its corresponding #include (e.g., <array>, <string_view>, "base/containers/span.h"). Remove any headers that are no longer used. Run git cl format to sort them.
  • Avoid Redundant Code: Do not add unnecessary checks or initializations. For example, base::span::copy_from is already safe for empty spans (no if (!span.empty()) needed), and smart pointers default to nullptr.

Patterns & Fixes (Additional "How-To" Guide)

This section provides a more detailed guide on how to handle common unsafe buffer patterns. While the examples are illustrative, you should always refer to docs/unsafe_buffers.md for the complete and authoritative guide.


1. Unsafe Function Signatures
  • Problem: A function takes a raw pointer and a size as separate arguments.

    cpp
    // Before
    void ProcessData(const uint8_t* data, size_t size);
  • Fix: Replace the pointer and size with a single base::span.

    cpp
    // After
    #include "base/containers/span.h"
    
    void ProcessData(base::span<const uint8_t> data);
  • Important: After changing a function signature, you must find and update all its call sites. Use the compiler errors to locate them.


2. C-Style Arrays
  • Problem: A local variable is declared as a C-style array.

    cpp
    // Before
    int scores[10];
  • Fix: Convert the C-style array to a std::array. If this array is a class member, refactor the class definition itself.

    cpp
    // After
    #include <array>
    
    std::array<int, 10> scores;
  • Tip: For string literals, prefer constexpr std::string_view or std::to_array.

    cpp
    // Example
    constexpr std::string_view kMyString = "Hello";
    constexpr auto kMyOtherString = std::to_array("World");

3. Unsafe Pointer Arithmetic and Access
  • Problem: Using pointer arithmetic (+, ++) or the subscript operator ([]) on a raw pointer.

    cpp
    // Before
    const char* p = "hello";
    char c = p[1]; // Unsafe access
    p++;           // Unsafe arithmetic
  • Fix: First, ensure the raw pointer is replaced by a safe container like base::span or std::string_view. Then, use the container's methods for safe access and manipulation.

    cpp
    // After
    std::string_view p = "hello";
    char c = p[1]; // Safe, bounds-checked access
    p = p.substr(1); // Safe manipulation
  • Tip: Use methods like .subspan(), .first(), and .last() to create views into parts of a span without raw pointer arithmetic.


4. Unsafe C-Library Functions
  • Problem: Usage of unsafe C-style memory functions.

  • Fix: Replace them with their safe C++ or base library equivalents.

    • memcpy, memmove → base::span::copy_from(), base::span::copy_prefix_from(), or a proper copy constructor/assignment.
    • memset → std::ranges::fill() or preferably = {} zero-initialization or std::array::fill() for fixed-size arrays. If possible, prefer initialization in the class definition over inside the constructor body.
    • memcmp, strcmp → operator== on two spans or std::string_views
    • strlen → .size() or .length() on the safe container
    cpp
    // Before
    char src[] = "test";
    char dst[5];
    memcpy(dst, src, 5);
    
    // After
    auto src_span = base::span(src);
    std::array<char, 5> dst;
    dst.copy_from(src_span);

5. Unsafe Container Construction
  • Problem: Constructing a container from a pair of raw pointers.

    cpp
    // Before
    const char* ptr = "some_string";
    std::vector<char> vec(ptr, ptr + 11);
  • Fix: This is a critical anti-pattern. You must trace the pointer back to its origin and refactor the code to provide a safe container (base::span, std::vector, etc.) from the start. Do not simply wrap the raw pointers in a base::span. Do not use std::begin()/end() on raw pointers or pointer arithmetic.

    cpp
    // After
    std::string_view str = "some_string";
    std::vector<char> vec = base::ToVector(str);

Tips for Success
  • Compiler Errors are Your Friend: When you change a function signature, the compiler will tell you exactly where you need to update the call sites. Use this information to guide your changes.

  • Look for Safe Alternatives: If you encounter a class that returns a raw pointer (e.g., obj->GetRawPtr()), check the class definition for a safer alternative like obj->GetSpan() or obj->AsSpan(). If you are forced to use .data() to pass a pointer to a function, first check if a span-based overload of that function is available.

  • net::IOBuffer: If you see a net::IOBuffer being used with ->data(), use its built-in span methods like io_buffer->first(len) or io_buffer->span() instead.

  • Small, Atomic Changes: Try to make small, incremental changes. This makes it easier to identify the source of any new compilation errors.

© 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

Files

SKILL.md and 3 other files (references) in agents/projects/code-health/spanify-buffers of nwjs/chromium.src.

  • SKILL.md
  • OWNERS
  • references/reviewer_guidelines.md
  • references/unsafe_buffers.md

Open the folder on GitHubat commit a9e8946

Compare with similar skills

Spanify Buffers 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.

Spanify Buffers compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Spanify Buffers this skillnwjs/chromium.src160—~3.7kAutomated safety check: PassBSD-3-Clause
Qt C++ Code Reviewx-tools-author/x-tools1.1k2 repos~4.3kAutomated safety check: PassBSD-3-Clause
WebRTC Include Cleanerwebrtc-sdk/webrtc4461 repos~545Automated safety check: PassBSD-3-Clause
Skill Doctorwarpdotdev/common-skills6082 repos~2.6kAutomated safety check: PassMIT
pybind11 Release Preparationpybind/pybind1118k—~1.7kAutomated safety check: PassCustom licence
Qt Cpp ReviewSerial-Studio/Serial-Studio7.2k—~4.3kAutomated safety check: PassCustom licence

Similar skills

  • Qt C++ Code Review

    x-tools-author/x-tools

    Read-only review of Qt6 C++ code that combines a deterministic lint script with six parallel analysis agents and reports only high-confidence issues.

    1.1k GitHub starsUsed in 2 repos~4.3k tokens
    DevelopmentAuto-check passed
  • WebRTC Include Cleaner

    webrtc-sdk/webrtc

    Runs the WebRTC include-cleaner tool to add missing and remove unused C++ include directives before uploading a CL or after refactoring.

    446 GitHub starsUsed in 1 repo~545 tokens
    DevelopmentAuto-check passed
  • Skill Doctor

    warpdotdev/common-skills

    Grades agent skills by scoring agent conversations for efficiency, code quality, procedure compliance, and verbosity, then drafts concrete skill edits and a shareable report.

    608 GitHub starsUsed in 2 repos~2.6k tokens
    DevelopmentAuto-check passed
  • Opens the pybind11 release-preparation pull request: picking the release base, bumping the version in common.h and integrating the changelog, following docs/release.rst.

    18k GitHub stars~1.7k tokensUpdated today
    DevelopmentAuto-check passed
  • Qt Cpp Review

    Serial-Studio/Serial-Studio

    Qt6/C++ deep code review for Serial Studio. An agent skill from Serial-Studio/Serial-Studio.

    7.2k GitHub stars~4.3k tokensUpdated today
    DevelopmentAuto-check passed
  • Walks a maintainer through publishing a pybind11 release after the preparation PR merges, with preflight checks, confirmations before each push and a GitHub release.

    18k GitHub stars~2.5k tokensUpdated today
    DevelopmentAuto-check passed

More from nwjs/chromium.src

All 64 skills in this repo
  • Analyzing SQL Traces

    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)…

    160 GitHub stars~2.9k tokensUpdated 4 days ago
    Auto-check passed
  • Autonomous multi-agent performance optimization loop for Chromium and V8.

    160 GitHub stars~4.2k tokensUpdated 4 days ago
    Auto-check passed
  • Automated Tracing

    nwjs/chromium.src

    Automated Tracing & Performance Telemetry in Chromium using Perfetto and Telemetry benchmarks.

    160 GitHub stars~1.5k tokensUpdated 4 days ago
    Auto-check passed
  • Chrome Releases

    nwjs/chromium.src

    Queries Chrome commit, version, release, and milestone metadata.

    160 GitHub stars~1.3k tokensUpdated 4 days ago
    Auto-check passed
  • Chromium Docs

    nwjs/chromium.src

    Search and reference Chromium documentation from the local docs index, including design docs, APIs, and development guides.

    160 GitHub stars~1.2k tokensUpdated 4 days ago
    Auto-check passed
  • Gn Deps Debugging

    nwjs/chromium.src

    Diagnose Chromium GN dependency and include-visibility failures, including BUILD.gn deps/publicdeps, DEPS include rules, private headers, and circular dependencies.

    160 GitHub stars~1.5k tokensUpdated 4 days ago
    Auto-check passed

Works with

Categories

Questions about Spanify Buffers

What does Spanify Buffers do?

Find and fix unsafe buffer operations in a C++ file by removing UNSAFETODO markers and replacing unsafe raw pointers/C-style functions with base::span and standard safe containers. src. Find and fix unsafe buffer operations in a C++ file by removing UNSAFETODO markers and replacing unsafe raw pointers/C-style functions with base::span and standard safe containers.

When should I use Spanify Buffers?

Spanify Buffers fits situations like: the user asks to fix unsafe buffer warnings; -Wunsafe-buffer-usage errors; other types of memory safety bugs like Use-After-Free.

How do I install Spanify Buffers in Claude Code?

Run `npx skills add nwjs/chromium.src --skill spanify-buffers -a claude-code`. Or copy the skill folder (agents/projects/code-health/spanify-buffers in nwjs/chromium.src) into .claude/skills/spanify-buffers in your project. Claude Code loads it when a task matches its description.

How do I install Spanify Buffers in Codex?

Run `npx skills add nwjs/chromium.src --skill spanify-buffers -a codex`. Or copy the skill folder (agents/projects/code-health/spanify-buffers in nwjs/chromium.src) into .agents/skills/spanify-buffers in your project. Codex loads it when a task matches its description.

Can I use Spanify Buffers in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nwjs/chromium.src --skill spanify-buffers -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/spanify-buffers, .gemini/skills/spanify-buffers, .github/skills/spanify-buffers and .opencode/skills/spanify-buffers in your project.

What does Spanify Buffers need to run?

Going by SKILL.md and its folder, Spanify Buffers needs the command-line tools its instructions call (git).

Does Spanify Buffers access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Spanify Buffers safe to install?

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.

What licence does Spanify Buffers use?

Spanify Buffers 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.

How many tokens does Spanify Buffers use?

About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.1k tokens, read only when the agent opens those files.

What are the alternatives to Spanify Buffers?

Skills that share tags, products or a category with Spanify Buffers: Qt C++ Code Review (x-tools-author/x-tools, 1.1k stars), WebRTC Include Cleaner (webrtc-sdk/webrtc, 446 stars), Skill Doctor (warpdotdev/common-skills, 608 stars) and pybind11 Release Preparation (pybind/pybind11, 18k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Spanify Buffers?

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.