Agent skill

Check Bounds Safety

by r3bl-org in r3bl-org/r3bl-open-core

Apply type-safe bounds checking patterns using VPIndex/VPLength types instead of usize.

Apache-2.0Auto-check passedDevelopment

Install Check Bounds Safety

skills CLI
$ npx skills add r3bl-org/r3bl-open-core --skill check-bounds-safety -a claude-code

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

GitHub CLI
$ gh skill install r3bl-org/r3bl-open-core check-bounds-safety --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/r3bl-org/r3bl-open-core.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/check-bounds-safety .claude/skills/check-bounds-safety && 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
check-bounds-safety
GitHub stars
485
Token cost
~4.1k tokens
SKILL.md length
878 words
Files
2
Skills in repo
25
Repo updated
First seen
Licence
Apache-2.0

At a glance

Apply type-safe bounds checking patterns using VPIndex/VPLength types instead of usize.

  • Works in 5 steps: Use Index types (0-based) instead of usize → Use Length types (1-based) instead of… → Type-safe comparisons → …
  • Working with arrays
  • SKILL.md covers When to Use, The Problem, The Solution and Core Principles, plus 11 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Check Bounds Safety is an agent skill from r3bl-org/r3bl-open-core. Apply type-safe bounds checking patterns using VPIndex/VPLength types instead of usize. Use when working with arrays, buffers, cursors, viewports, or any code that handles indices and lengths.

Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `decision-trees.md`).

It sits in Development, covering Type safety. The repository describes itself as: TUI framework and developer productivity apps in Rust 🦀. The licence is Apache-2.0.

When your agent uses it

  • Working with arrays
  • Any code that handles indices and lengths

Example prompts

  • “/check-bounds-safety”

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Use Index types (0-based) instead of usize
  2. Use Length types (1-based) instead of usize
  3. Type-safe comparisons
  4. Use .is_zero() for zero checks
  5. Distinguish navigation from measurement

What it can do on your machine

Read from SKILL.md and the folder at commit 89db352. 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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are rust).

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

  • Network

    No URLs in SKILL.md.

    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

Check Bounds Safety loads about 4.1k tokens when it runs. Until then it costs about 53 tokens; SKILL.md has 878 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~53
When it runs · the whole SKILL.md, loaded when a task matches
~4.1k

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 r3bl-org/r3bl-open-core at commit 89db352, republished under its Apache-2.0 licence (© r3bl-org). 878 words, ~4,069 tokens.

Download SKILL.mdSave it as .claude/skills/check-bounds-safety/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
check-bounds-safety
description
Apply type-safe bounds checking patterns using VPIndex/VPLength types instead of usize. Use when working with arrays, buffers, cursors, viewports, or any code that handles indices and lengths.

Type-Safe Bounds Checking

When to Use

  • Working with array access or buffer operations
  • Implementing cursor positioning logic (text editors, terminal emulators)
  • Handling viewport rendering and scrolling
  • Dealing with 0-based indices vs 1-based lengths
  • Validating range boundaries
  • Converting VT-100 ranges to Rust ranges
  • Before creating commits with bounds-sensitive code
  • When user asks about "bounds checking", "type safety", "off-by-one errors", etc.

The Problem

Raw usize values are ambiguous and error-prone:

rust
// ❌ Bad - What is `x`? Index or length?
let x = 10_usize;
if x < length {  // Off-by-one error waiting to happen
    buffer[x]
}

// Is this an index (0-based) or a length (1-based)?
// The type system can't help us!

The Solution

Use type-safe wrappers from tui/src/core/coordinates/bounds_check/:

rust
// ✅ Good - Types make it clear
use r3bl_tui::{vp_idx, vp_len, ArrayBoundsCheck};

let index = vp_idx(10);      // Clearly an index (0-based)
let length = vp_len(100);    // Clearly a length (1-based)

if index.overflows(length) {
    // Safely caught! Can't accidentally compare incompatible types
}

Core Principles

Follow these principles when working with indices and lengths:

  1. Use Index types (0-based) instead of usize

    • VPRow, VPCol, VPIndex
    • Construct with row(), col(), vp_idx()
  2. Use Length types (1-based) instead of usize

    • VPHeight, VPWidth, VPLength
    • Construct with height(), width(), vp_len()
  3. Type-safe comparisons

    • Cannot compare VPRow with VPWidth (compile error!)
    • Prevents category errors like "is row 5 < width 10?"
  4. Use .is_zero() for zero checks

    • Instead of == 0
    • More idiomatic with newtype wrappers
  5. Distinguish navigation from measurement

    • Navigation (index - offset → index): Moving backward in position space
    • Measurement (index.distance_from(other) → length): Calculating distance between positions
    • Use - for cursor movement, use distance_from() for calculating spans

Common Imports

rust
use std::ops::Range;
use r3bl_tui::{
    // Traits
    ArrayBoundsCheck, CursorBoundsCheck, ViewportBoundsCheck,
    RangeBoundsExt, RangeConvertExt, RangeExt, IndexOps, LengthOps,

    // Status enums
    ArrayOverflowResult, CursorPositionBoundsStatus,
    RangeValidityStatus, RangeBoundsResult,

    // Type constructors
    col, row, width, height, vp_idx, vp_len,

    // Terminal delta types (relative cursor movement)
    TermRowDelta, TermColDelta, term_row_delta, term_col_delta,
};

Quick Pattern Reference

Use CaseTraitKey MethodWhen to Use
Array accessArrayBoundsCheckindex.overflows(length)Validating buffer[index] access (index < length)
Cursor positioningCursorBoundsChecklength.check_cursor_position_bounds(pos)Text editing where cursor can be at end (index <= length)
Viewport visibilityViewportBoundsCheckindex.check_viewport_bounds(start, size)Rendering optimization (is content on-screen?)
Range validationRangeBoundsExtrange.check_range_is_valid_for_length(len)Iterator bounds, algorithm parameters
Range membershipRangeBoundsExtrange.check_index_is_within(index)VT-100 scroll regions, text selections
Range conversionRangeConvertExtinclusive_range.to_exclusive()Converting VT-100 ranges for Rust iteration
Slice indexingRangeExtrange.as_usize_range()Converting strongly-typed index ranges into raw [usize] ranges for slice indexing
Relative movementTermRowDelta/TermColDeltaTermRowDelta::new(n) returns OptionANSI cursor movement preventing CSI zero bug

Detailed Examples

Example 1: Array Bounds Checking

Use ArrayBoundsCheck when validating buffer access.

rust
use r3bl_tui::{idx, len, ArrayBoundsCheck, ArrayOverflowResult};

let buffer_length = len(100);
let index = idx(50);

match index.overflows(buffer_length) {
    ArrayOverflowResult::Within => {
        // Safe to access: buffer[50]
        let value = buffer[index.value()];
    }
    ArrayOverflowResult::Overflows => {
        // Out of bounds! Handle error
        eprintln!("Index {} overflows buffer length {}", index, buffer_length);
    }
}

Mathematical law:

  • For valid access: 0 <= index < length
  • Or equivalently: index < length (since Index is always >= 0)
Example 2: Cursor Position Bounds

Use CursorBoundsCheck for text cursor positioning.

rust
use r3bl_tui::{idx, len, CursorBoundsCheck, CursorPositionBoundsStatus};

let text_length = len(10);  // Text has 10 characters
let cursor = idx(10);        // Cursor at position 10 (after last char)

match text_length.check_cursor_position_bounds(cursor) {
    CursorPositionBoundsStatus::Within => {
        // Valid! Cursor CAN be at position 10 (after char 9)
        // User can insert text here
    }
    CursorPositionBoundsStatus::Overflows => {
        // Invalid cursor position
    }
}

Mathematical law:

  • For valid cursor: 0 <= position <= length
  • Note: Cursor CAN be at length (after the last character)

Key difference from array access:

  • Array access: index < length (strict inequality)
  • Cursor position: index <= length (includes equality)
Example 3: Viewport Visibility Check

Use ViewportBoundsCheck to optimize rendering.

rust
use r3bl_tui::{idx, len, ViewportBoundsCheck};

let line_index = idx(150);      // Line 150 in document
let viewport_start = idx(100);  // Viewport starts at line 100
let viewport_size = len(50);    // Viewport shows 50 lines

if line_index.check_viewport_bounds(viewport_start, viewport_size) {
    // Line 150 is visible (100 <= 150 < 150)
    // Render this line
} else {
    // Line is off-screen, skip rendering
}

Mathematical law:

  • Visible if: viewport_start <= index < viewport_start + viewport_size
Example 4: Range Validation

Use RangeBoundsExt to validate range boundaries.

rust
use r3bl_tui::{len, RangeBoundsExt, RangeValidityStatus};

let buffer_length = len(100);
let range = 10..50;  // Want to process elements 10-49

match range.check_range_is_valid_for_length(buffer_length) {
    RangeValidityStatus::Valid => {
        // Range is valid for this buffer
        for i in range {
            process(buffer[i]);
        }
    }
    RangeValidityStatus::Invalid(reason) => {
        eprintln!("Invalid range: {}", reason);
    }
}
Example 5: Range Membership

Use RangeBoundsExt to check if index is within a range.

rust
use r3bl_tui::{idx, RangeBoundsExt};

// VT-100 scroll region: lines 5-15
let scroll_region = 5..=15;  // Inclusive range
let cursor_row = idx(10);

if scroll_region.check_index_is_within(cursor_row) {
    // Cursor is within scroll region
    // Apply scroll behavior
} else {
    // Cursor outside scroll region
}
Example 6: Range Conversion

Use RangeConvertExt to convert inclusive to exclusive ranges.

rust
use r3bl_tui::RangeConvertExt;

// VT-100 uses inclusive ranges: 1..=10 means lines 1 through 10
let vt100_range = 1..=10;

// Rust iterators use exclusive ranges: 1..11
let rust_range = vt100_range.to_exclusive();

// Now can use in Rust iteration
for line in rust_range {
    process_line(line);
}
Example 7: Navigation vs Measurement

Use - for navigation (moving cursor), distance_from() for measurement (calculating spans).

rust
use r3bl_tui::{row, height, RowIndex, RowHeight};

// Navigation: Move cursor backward by offset (returns RowIndex).
let cursor_pos = row(10);
let new_pos = cursor_pos - row(3);  // row(7) - moved 3 positions back
// Uses saturating subtraction: row(2) - row(5) = row(0), not overflow

// Measurement: Calculate distance between two positions (returns RowHeight).
let start = row(5);
let end = row(15);
let distance: RowHeight = end.distance_from(start);  // height(10) - 10 rows apart
// Panics if start > end (negative distance)

When to use which:

  • Moving cursor up/down/left/right → - operator
  • Calculating scroll amount, viewport span, selection size → distance_from()
Example 8: Terminal Cursor Movement (Make Illegal States Unrepresentable)

Use TermRowDelta/TermColDelta for relative cursor movement in ANSI sequences.

The CSI zero problem: ANSI cursor movement commands interpret parameter 0 as 1:

  • CSI 0 A (CursorUp with n=0) moves cursor 1 row up, not 0
  • CSI 0 C (CursorForward with n=0) moves cursor 1 column right, not 0

Solution: TermRowDelta and TermColDelta wrap NonZeroU16 internally, making zero-valued deltas impossible to represent. Construction is fallible:

rust
use r3bl_tui::{TermRowDelta, TermColDelta, CsiSequence};
use std::io::Write;

// Calculate cursor movement from position on 80-column terminal.
let position: u16 = 240;  // 240 chars from start
let term_width: u16 = 80;

// Fallible construction - must handle the None case.
// For position 240: rows = 3 (Some), cols = 0 (None).
if let Some(delta) = TermRowDelta::new(position / term_width) {
    // delta is guaranteed non-zero, safe to emit
    term.write_all(CsiSequence::CursorDown(delta).to_string().as_bytes())?;
}
if let Some(delta) = TermColDelta::new(position % term_width) {
    // This branch is NOT taken for position 240 (cols = 0)
    // Zero cannot be represented, so the bug is prevented at the type level!
    term.write_all(CsiSequence::CursorForward(delta).to_string().as_bytes())?;
}

Using the ONE constant for common case:

rust
use r3bl_tui::{TermRowDelta, TermColDelta, CsiSequence};

// For the common case of moving exactly 1 row/column, use the ONE constant.
// This avoids the need for fallible construction or unwrap().
let up_one = CsiSequence::CursorUp(TermRowDelta::ONE);
let right_one = CsiSequence::CursorForward(TermColDelta::ONE);

Mathematical law:

  • Zero deltas cannot exist - prevented at compile time by NonZeroU16 wrapper
  • new() returns None for zero, Some(delta) for non-zero

Key difference from absolute positioning:

  • TermRow/TermCol: 1-based absolute coordinates (for CursorPosition)
  • TermRowDelta/TermColDelta: Relative movement amounts (for CursorUp/Down/Forward/Backward)
Show full SKILL.md (317 more words)Show less
Example 9: Slice Indexing with Coordinate Ranges

Use RangeExt to convert strongly-typed index ranges into primitive usize ranges for slice indexing.

rust
use r3bl_tui::{vp_idx, RangeExt};

let index_range = vp_idx(2)..vp_idx(5); // Range<VPIndex>

// Convert to standard Range<usize> cleanly:
for item in &mut buffer[index_range.as_usize_range()] {
    process(item);
}

Supported range types:

  • Range<I> (e.g. start..end)
  • RangeInclusive<I> (e.g. start..=end)
  • RangeFrom<I> (e.g. start..)
  • RangeTo<I> (e.g. ..end)

Decision Trees

See the accompanying decision-trees.md file for flowcharts showing which trait to use for each scenario.

Detailed Reference

For comprehensive documentation, decision trees, and more examples, see:

tui/src/core/units/bounds_check/mod.rs

This module contains:

  • Complete API documentation
  • Mathematical laws for each trait
  • Visual decision trees
  • Edge case handling
  • Performance notes

Common Mistakes

❌ Mistake 1: Using raw usize
rust
// Bad - ambiguous types
let index: usize = 10;
let length: usize = 100;
if index < length {  // Works, but no type safety
    // ...
}

Fix:

rust
// Good - clear types
let index = idx(10);
let length = len(100);
if !index.overflows(length) {  // Type-safe!
    // ...
}
❌ Mistake 2: Array bounds used for cursor
rust
// Bad - cursor can be at end!
let cursor = idx(10);
let text_length = len(10);
if cursor.overflows(text_length) {  // Wrong! Cursor at end is valid
    return Err("Invalid cursor");
}

Fix:

rust
// Good - cursor bounds check
if text_length.check_cursor_position_bounds(cursor) == CursorPositionBoundsStatus::Overflows {
    return Err("Invalid cursor");
}
❌ Mistake 3: Comparing incompatible types
rust
// Bad - this won't compile (good!)
let row = row(5);
let width = width(10);
if row < width {  // Compile error! Can't compare VPRow with VPWidth
    // ...
}

This is actually GOOD - the type system prevents nonsensical comparisons!

❌ Mistake 4: Using - when you need distance
rust
// Bad - using subtraction to calculate distance.
// This returns VPRow, not VPHeight!
let current_row = row(5);
let target_row = row(15);
let rows_to_scroll = target_row - current_row;  // Returns row(10), a position!

Fix:

rust
// Good - use distance_from() for measurement.
let rows_to_scroll: VPHeight = target_row.distance_from(current_row);  // height(10)
❌ Mistake 5: Emitting CSI zero for cursor movement
rust
// Bad - CSI 0 C moves 1 column right, not 0!
// This won't even compile now - CursorForward requires TermColDelta, not u16!
let cols = position % term_width;  // Could be 0!
let seq = CsiSequence::CursorForward(cols);  // Compile error!

Fix:

rust
// Good - use fallible delta construction (zero is unrepresentable)
if let Some(delta) = TermColDelta::new(position % term_width) {
    // delta is guaranteed non-zero
    term.write_all(CsiSequence::CursorForward(delta).to_string().as_bytes())?;
}
// No sequence emitted when cols = 0 (correct behavior - branch not taken)

Reporting Results

When applying bounds checking:

  • ✅ All bounds checked with types → "Bounds safety verified with type-safe checks!"
  • 🔧 Converted raw usize to VPIndex/VPLength types → Report conversions made
  • 📝 Added bounds checks → List where checks were added

Supporting Files in This Skill

This skill includes additional reference material:

  • decision-trees.md - Visual decision trees and flowcharts for choosing the right bounds checking approach: main decision tree (which trait?), array vs cursor bounds comparison, index vs length visual diagrams, viewport visibility flowchart, range validation flowchart, comparison table, edge case reference, and quick reference card. Read this when:
    • Not sure which trait to use → Main decision tree
    • Array access vs cursor positioning confusion → Visual comparison diagrams
    • Viewport visibility logic → Viewport flowchart
    • Range validation → Range validation flowchart
    • Edge cases (empty arrays, cursor at end, zero-sized viewport) → Edge cases section
    • Quick lookup of which method for which scenario → Comparison table
  • check-code-quality - Includes testing bounds-checking code
  • write-documentation - For documenting bounds-checking logic

No dedicated command, but used throughout the codebase for safe index/length handling.

Additional Resources

  • Main implementation: tui/src/core/units/bounds_check/mod.rs
  • Type definitions: tui/src/core/units/
  • Examples in tests: tui/src/core/units/bounds_check/tests/
  • Terminal delta types: tui/src/core/coordinates/vt_100_ansi_coords/term_row_delta.rs and term_col_delta.rs

© r3bl-org, Apache-2.0. 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 1 other file in .agents/skills/check-bounds-safety of r3bl-org/r3bl-open-core.

  • SKILL.md
  • decision-trees.md

Open the folder on GitHubat commit 89db352

Compare with similar skills

Check Bounds Safety 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.

Check Bounds Safety compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Check Bounds Safety this skillr3bl-org/r3bl-open-core485—~4.1kAutomated safety check: PassApache-2.0
Typescript Advanced Typesrolling-scopes/rsschool-app10k25 repos~4.2kAutomated safety check: PassMPL-2.0
Minimizing Ty Ecosystem Changesastral-sh/ruff50k—~4.6kAutomated safety check: PassMIT
RTK Rust Design Patternsrtk-ai/rtk83k—~1.9kAutomated safety check: PassApache-2.0
Kedro Babysitkedro-org/kedro11k—~4kAutomated safety check: PassCustom licence
Dignified Python Standardsdocling-project/docling69k—~1.5kAutomated safety check: PassApache-2.0

Similar skills

  • Typescript Advanced Types

    rolling-scopes/rsschool-app

    Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.

    10k GitHub starsUsed in 25 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Official

    A skill your agent uses when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypyprimer difference"…

    50k GitHub stars~4.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Describes seven Rust design patterns for the RTK CLI filter modules, with when to use each, RTK examples, and notes on when a pattern is overkill.

    83k GitHub stars~1.9k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Kedro Babysit

    kedro-org/kedro

    Run Kedro's local lint / format / type-check / tests on changed files (uses the project's pre-commit hooks, ruff, mypy, pytest, lint-imports, detect-secrets, Make targets — in the right venv), or…

    11k GitHub stars~4k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Dignified Python Standards

    docling-project/docling

    Applies opinionated production Python conventions chosen by the project's Python version: modern type syntax, pathlib, explicit checks and interface guidance.

    69k GitHub stars~1.5k tokensUpdated today
    DevelopmentAuto-check passed
  • Walks through adding a Wagmi feature across its layers: a Viem-based core action, TanStack Query options, and React and Vue bindings.

    6.8k GitHub stars~3.8k tokensUpdated 9 days ago
    DevelopmentAuto-check passed

More from r3bl-org/r3bl-open-core

All 25 skills in this repo
  • Analyze Log Files

    r3bl-org/r3bl-open-core

    Analyze log files by stripping ANSI escape sequences first. An agent skill from r3bl-org/r3bl-open-core.

    485 GitHub stars~632 tokensUpdated yesterday
    Auto-check: notes
  • Analyze Performance

    r3bl-org/r3bl-open-core

    Establish performance baselines and detect regressions using flamegraph analysis.

    485 GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • Release Crate

    r3bl-org/r3bl-open-core

    Publish a crate release to crates.io with changelog, standalone release notes, git tag, and GitHub release.

    485 GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed
  • Organize Modules

    r3bl-org/r3bl-open-core

    Apply private modules with public re-exports (barrel export) pattern for clean API design.

    485 GitHub stars~5.8k tokensUpdated yesterday
    Auto-check passed
  • Check Code Quality

    r3bl-org/r3bl-open-core

    Run comprehensive Rust code quality checks including compilation, linting, documentation, and tests.

    485 GitHub stars~3.8k tokensUpdated yesterday
    Auto-check passed
  • Check Test Coverage

    r3bl-org/r3bl-open-core

    Audit and verify test coverage for a specific file or module, ensuring all custom logic branches, state transitions, and boundary conditions are covered while strictly eliminating dependency test…

    485 GitHub stars~1.7k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Check Bounds Safety

What does Check Bounds Safety do?

Apply type-safe bounds checking patterns using VPIndex/VPLength types instead of usize. Check Bounds Safety is an agent skill from r3bl-org/r3bl-open-core. Apply type-safe bounds checking patterns using VPIndex/VPLength types instead of usize.

When should I use Check Bounds Safety?

Check Bounds Safety fits situations like: working with arrays; any code that handles indices and lengths.

How do I install Check Bounds Safety in Claude Code?

Run `npx skills add r3bl-org/r3bl-open-core --skill check-bounds-safety -a claude-code`. Or copy the skill folder (.agents/skills/check-bounds-safety in r3bl-org/r3bl-open-core) into .claude/skills/check-bounds-safety in your project. Claude Code loads it when a task matches its description.

How do I install Check Bounds Safety in Codex?

Run `npx skills add r3bl-org/r3bl-open-core --skill check-bounds-safety -a codex`. Or copy the skill folder (.agents/skills/check-bounds-safety in r3bl-org/r3bl-open-core) into .agents/skills/check-bounds-safety in your project. Codex loads it when a task matches its description.

Can I use Check Bounds Safety 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 r3bl-org/r3bl-open-core --skill check-bounds-safety -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/check-bounds-safety, .gemini/skills/check-bounds-safety, .github/skills/check-bounds-safety and .opencode/skills/check-bounds-safety in your project.

What does Check Bounds Safety need to run?

SKILL.md names no scripts, command-line tools or credentials: Check Bounds Safety is instructions for the agent only.

Does Check Bounds Safety access the network?

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.

Is Check Bounds Safety 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 Check Bounds Safety use?

Check Bounds Safety is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Check Bounds Safety use?

About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Check Bounds Safety?

Skills that share tags, products or a category with Check Bounds Safety: Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars), Minimizing Ty Ecosystem Changes (astral-sh/ruff, 50k stars), RTK Rust Design Patterns (rtk-ai/rtk, 83k stars) and Kedro Babysit (kedro-org/kedro, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Check Bounds Safety?

r3bl-org (a GitHub organization) maintains it in r3bl-org/r3bl-open-core, which has 485 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 9, 2026.

Source: r3bl-org/r3bl-open-core on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.