Agent skill

Project Context

by ruby-git in ruby-git/ruby-git

Reference guide for ruby-git architecture, coding standards, design philosophy, key technical details, and compatibility requirements.

MITAuto-check passedDevelopment

Install Project Context

skills CLI
$ npx skills add ruby-git/ruby-git --skill project-context -a claude-code

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

GitHub CLI
$ gh skill install ruby-git/ruby-git project-context --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/ruby-git/ruby-git.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/project-context .claude/skills/project-context && 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
project-context
GitHub stars
1.8k
Token cost
~5.4k tokens
SKILL.md length
2,459 words
Files
1
Skills in repo
30
Repo updated
First seen
Licence
MIT

At a glance

Reference guide for ruby-git architecture, coding standards, design philosophy, key technical details, and compatibility requirements.

  • Answering architecture questions
  • SKILL.md covers Contents, How to use this skill, Related skills and Architecture & Module…, plus 7 more sections
  • Calls git and bundle
  • Deciding where new code belongs

What it does

Project Context is an agent skill from ruby-git/ruby-git. Reference guide for ruby-git architecture, coding standards, design philosophy, key technical details, and compatibility requirements. Use when answering architecture questions, deciding where new code belongs, reviewing coding standards, or understanding the layered command/parser/facade design.

Its SKILL.md is about 5.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Code quality and Git workflow. It works with Git and Ruby. The repository describes itself as: Ruby/Git is a Ruby library that can be used to create, read and manipulate Git repositories by wrapping system calls to the git binary. The licence is MIT.

When your agent uses it

  • Answering architecture questions
  • Deciding where new code belongs
  • Reviewing coding standards
  • Understanding the layered command/parser/facade design

Example prompts

  • “/project-context”

What it can do on your machine

Read from SKILL.md and the folder at commit f3bf20f. 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
    • bundle

    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

Project Context loads about 5.4k tokens when it runs. Until then it costs about 78 tokens; SKILL.md has 2,459 words of instructions outside code blocks.

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

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 ruby-git/ruby-git at commit f3bf20f, republished under its MIT licence (© ruby-git). 2,459 words, ~5,420 tokens.

Download SKILL.mdSave it as .claude/skills/project-context/SKILL.md (or your agent's skills folder).
name
project-context
description
Reference guide for ruby-git architecture, coding standards, design philosophy, key technical details, and compatibility requirements. Use when answering architecture questions, deciding where new code belongs, reviewing coding standards, or understanding the layered command/parser/facade design.

Project Context

Reference for ruby-git's architecture, coding standards, design philosophy, and technical constraints. Load this skill when answering questions about code structure, where logic belongs, or how the layers interact.

Contents

How to use this skill

Attach this file to your Copilot Chat context when you need architecture guidance, coding standard details, or implementation constraints.

Architecture & Module Organization

Key modules and their roles:

ClassRole
Git::RepositoryMain facade — entry point for all user-facing operations; methods live in Git::Repository::* topic modules under lib/git/repository/, included into the class
Git::ExecutionContext::*Configured subprocess runner; holds binary path, env vars, and global opts; provides #command_capturing/#command_streaming to command classes
Git::Commands::*Command classes: define CLI API, bind args, execute → return Git::CommandLine::Result
Git::CommandLineSubprocess execution: escaping, timeout, stdout/stderr capture
Git::Parsers::*Transform raw stdout into structured data
Git::Object::*Immutable Git objects (Commit, Tree, Blob)
Git::StatusInfoImmutable working-directory status returned by Git::Repository#status_info; holds one Git::StatusFileInfo per reported path
Git::DiffDiff operations (enumerable DiffFile collection)
Git::LogChainable commit-history query builder
Git::BranchInfoImmutable branch entry returned by Git::Repository#branch_list; branch operations are name-based facade methods
Git::RemoteInfoImmutable remote entry returned by Git::Repository#remote_list; remote operations are name-based facade methods
Git::WorktreeInfoImmutable worktree entry returned by Git::Repository#worktree_list and #worktree_add; worktree operations are path-based facade methods
Git::StashInfoImmutable stash entry returned by Git::Repository#stash_list and #stash_push; stash operations are name-based facade methods

Key directories:

  • lib/git/ — Core library code
  • lib/git/commands/ — Command classes (new architecture)
  • lib/git/repository/ — Facade topic modules (Git::Repository::*)
  • spec/unit/ — RSpec unit tests (mocked execution context)
  • spec/integration/ — RSpec integration tests (real git repositories)
  • spec/support/ — Shared test contexts and helpers
  • archive/ — Frozen records of completed projects, such as archive/v5-redesign/. History, not current policy; current standards live in .github/skills/
  • docs/adr/ — decision records (ADRs): why something was decided

Layer Responsibilities

The three-layer architecture separates concerns cleanly:

Git::Repository (facade — topic modules under lib/git/repository/)
  └── Git::Commands::* (defines CLI API, binds args, executes via execution_context)
        └── Git::ExecutionContext::* (configured subprocess runner: env, binary, global opts)
              └── Git::CommandLine (subprocess execution)
  • Commands layer (Git::Commands::*): Owns the git CLI contract. Declares arguments via DSL, executes command, returns Git::CommandLine::Result. No parsing.
    • literal entries are only for operation selectors (subcommand names, mode flags like --delete that define what the class does). Output-format flags, parser-contract options, and other caller-controlled options belong as flag_option / value_option — not as literal entries.
    • Each command class represents one operation, not one output format. Output-mode flags (--patch, --numstat, --raw, --format=…) are options declared in the DSL; the facade chooses which to pass. Separate subclasses for the same operation with different output modes are an anti-pattern.
  • Parser layer (Git::Parsers::*): Transforms raw stdout/stderr into structured Ruby data. No execution.
  • Facade layer (Git::Repository::*): Pre-processes caller arguments, invokes the right command class, calls parsers, constructs rich response objects. Parser-contract options (e.g. no_color: true, pretty: 'raw', format: FORMAT_STRING) are passed explicitly at the facade call site — this makes the parser contract auditable by reading the topic module method. What a facade method leaves behind when it fails partway through is decided in ADR-0009: it leaves whatever the caller can use.

Git::Commands::Base provides default #initialize(execution_context) and #call. Command classes that need non-zero successful exits declare allow_exit_status <Range> with a rationale comment.

Command-layer neutrality

Command classes are neutral, faithful representations of the git CLI. They declare options via the DSL but never embed policy choices (output-control flags, editor suppression, progress, verbose mode). The facade (Git::Repository::*) sets safe defaults at each call site. Some defaults are fixed (not in ALLOWED_OPTS — rejected by assert_valid_opts! before reaching the command); others are overridable (in ALLOWED_OPTS, placed before the caller's **opts so the caller's value wins). The execution layer (GIT_EDITOR='true') is an unconditional safety net.

Anti-pattern: literal '--no-edit', literal '--verbose', literal '--no-progress' inside a command class.

Correct pattern: flag_option :edit, negatable: true in the command; no_edit: true passed from the facade call site.

Validation Boundaries

This section is the authority on what command classes validate and what they delegate to git. Skills that need the rule link here. Because multiple skills depend on this section by link, editing it changes their meaning without touching their files — after edits, rerun bundle exec rake markdown:links and audit the linking skills with the Reviewing Skills skill.

Command classes use per-argument validation parameters (required:, type:, allow_nil:, etc.) and operand format validation. They generally do not declare cross-argument constraint methods (conflicts, requires, requires_one_of, requires_exactly_one_of, forbid_values, allowed_values) — git is the single source of truth for its own option semantics, subject only to the two exceptions defined under Exception criteria for constraint declarations.

Validated by CommandsMechanism
Unknown optionsvalidate_unsupported_options! in Arguments DSL
Required optionsrequired: true in Arguments DSL
Type checkingtype: in Arguments DSL
Option-like operand rejectionAutomatic for operands before --
Delegated to git (semantic)Surfaced as
Option conflicts (--soft vs --hard)Git::FailedError
Option dependencies (--all-match requires --grep)Git::FailedError
At-least-one-of groupsGit::FailedError
Value-set membershipGit::FailedError
Forbidden value combinationsGit::FailedError

The constraint DSL infrastructure (conflicts, requires, requires_one_of, requires_exactly_one_of, forbid_values, allowed_values) remains available in Git::Commands::Arguments and is kept intact, but command classes reach for it only under the exception criteria below.

Exception criteria for constraint declarations

Two exceptions, each defined in its own subsection below, permit a constraint declaration: the argv-invisible exception and the silent-wrong-result exception. Skills that reference an individual exception link to it by these names and anchors.

The argv-invisible exception

The test: does this argument appear in git's argv?

  • Yes (normal flag_option, value_option, etc.) — git can observe it and report the error, so do not declare a constraint.
  • No — the argument is consumed entirely on the Ruby side and has no argv representation at all: skip_cli: true operands, execution_option entries, and anything else that never becomes a token git can see. Git has no mechanism to detect incompatibilities, so Ruby must enforce them with a constraint declaration.

This is about presence in argv, not about transformation. Every DSL entry transforms something — flag_option :force turns force: true into --force — and those still belong to the Yes branch, because --force reaches git and git can object to it.

The canonical case is skip_cli: true operands routed via stdin. cat-file --batch commands declare both conflicts :object, :batch_all_objects and requires_one_of :object, :batch_all_objects. :object is skip_cli: true, so it reaches git over stdin rather than in argv — git does receive the object names, but it has no argv token to reason about them with, and --batch-all-objects makes it discard stdin unread. Both failure modes are therefore silent:

PassedWhat git doesExit
bothignores stdin, dumps the entire object database0
neitherreads nothing from stdin, emits nothing0

Neither is an error git can report, so Ruby must enforce those constraints.

The distinction matters when reasoning about a new command: skip_cli: true means absent from argv, not invisible to git. A stdin-fed value git still reads is covered by this exception because git cannot correlate it with the argv flags, not because git never receives it.

Git::Commands::Archive is the other shape: it declares conflicts :output, :out because :out is an execution_option naming a Ruby IO object to stream into. Only --output reaches argv, so git cannot see that both were requested.

The silent-wrong-result exception

If a combination of git-visible arguments causes git to silently discard data or produce a wrong result (no error, wrong answer), a constraint declaration MAY be added with a code comment explaining why, a reference to the git version(s) where the behavior was verified, and a test.

A flag that is invalid in the selected mode is still not this exception, whether git rejects the combination loudly (delegation's normal case) or accepts the flag and silently ignores it (a no-op produces no wrong answer). Delegate both. Git::Commands::CatFile::Raw once declared requires_one_of :t, :s, when: :allow_unknown_type, duplicating a check git 2.28-2.49 performs itself and git 2.50 removed along with the unknown-type feature; the constraint was removed and the flag passed through until v6.0.0 removed the option — see the note in Command Implementation.

Why the semantic checks are delegated

The decision and its rationale are recorded in ADR-0003: duplicated rules go stale under git's moving semantics, partial coverage creates a false promise of safety, and a constraint violation is a programming error the developer must fix whichever exception reports it.

The operational consequence: every semantic rejection in the delegated table above surfaces the same way — Git::FailedError carrying git's actual message — rather than as a mix of Ruby constraint errors and git rejections. The per-argument checks in the first table still raise ArgumentError; the split is between "this call is malformed" and "git says no", not between two arbitrary error classes.

Coding Standards

Ruby Style
  • frozen_string_literal: true at the top of every Ruby file
  • Ruby 3.3.0+ idioms; keyword arguments for multi-parameter methods
  • private keyword form (not private :method_name)
  • Pattern matching for complex conditionals where appropriate
Show full SKILL.md (997 more words)Show less
Naming
KindConventionExample
Class/ModulePascalCaseGit::CommandLine
Method/variablesnake_casecurrent_branch
ConstantUPPER_SNAKE_CASEVERSION
Predicateends with ?bare?
Mutating methodends with !reset!
Parsed metadata struct (top-level Git::)*Info suffixBranchInfo, TagInfo, StashInfo
Mutating-operation outcome struct (top-level Git::)*Result suffixBranchDeleteResult, TagDeleteResult

Result class constraints:

  • *Info / *Result suffixes are reserved for top-level Git:: data structs. Never apply them to Git::Commands::* classes — command classes are subprocess runners, not data structs, and a name like Commands::Foo::BarInfo misleads readers.
  • Never name a sub-command class Object — it shadows Ruby's ::Object.
Code Organization
  • Single-responsibility classes; one public class per file as a general rule
  • Tightly-coupled helper classes may share a file
  • Core code in lib/git/; command classes in lib/git/commands/
Documentation
  • YARD for all public methods: @param, @return, @raise, @example
  • Use @overload with explicit keyword params when methods use **
  • @api private on internal methods
  • Document edge cases, platform differences, security considerations

Design Philosophy

See CONTRIBUTING.md for authoritative, complete guidelines.

Summary:

  • Lightweight wrapper — minimal abstraction over git CLI
  • Principle of least surprise — predictable, follows git conventions
  • Direct CLI mapping — git add → Git::Repository#add; use prefix + suffix for multi-purpose commands (#ls_files_untracked, #ls_files_staged)
  • Parameter naming mirrors long CLI options
  • Rich output objects — translate git output to Ruby objects when useful to callers
  • No unnecessary extensions — stay close to git's actual behavior

Key Technical Details

Error Hierarchy

This section is the authority on which errors the gem raises and how errors from outside the gem are converted. The reason is recorded in ADR-0008.

The gem raises only ArgumentError or errors that subclass Git::Error:

  • Git::Error — base class for every runtime failure. Git::GitExecuteError is a deprecated alias of it, not a separate class
  • Git::CommandLineError — git ran and did not succeed; carries the command, output, and status. Subclasses: Git::FailedError (non-zero exit), Git::SignaledError (killed by signal), Git::TimeoutError (exceeded timeout, subclass of SignaledError)
  • Git::ProcessIOError — I/O with the git process failed
  • Git::UnexpectedResultError — git output did not parse, or a command succeeded but the entry it should have produced is missing from the follow-up listing
  • Git::VersionError — the installed git does not meet a version requirement
  • ArgumentError — a caller mistake. Deliberately not a Git::Error, so a broad rescue Git::Error cannot hide a programming error. A deprecated call under the raise deprecation behavior raises ActiveSupport::DeprecationException for the same reason.

Converting errors from outside the gem:

  • Any error a standard library or gem call can raise is converted at that call, to ArgumentError for a caller mistake or to Git::Error (or a subclass) otherwise, with the underlying error as cause. The class the library chose does not decide which one: a foreign ArgumentError is converted like any other class when the failure is not a caller mistake. No site is exempt because its failure is unlikely or because the caller chose the path.
  • Wrap every call the gem initiates that can raise SystemCallError in Git::SystemCallGuard.call. The guard converts only that family; a call that can raise another class, such as Zlib::Error, needs its own rescue. Predicates such as File.file? do not raise and stay unwrapped. When the method yields to a caller's block, yield inside guard.unguarded so an error raised by the caller's code passes through unchanged.
  • Parsers convert the ArgumentError from Time.iso8601 to Git::UnexpectedResultError, because a malformed date in git's output is not a caller mistake. Subprocess errors are converted in Git::CommandLine; command classes do not convert them again.
  • Git::Deprecation.warn is not a conversion site. Under the raise deprecation behavior it raises ActiveSupport::DeprecationException, which passes through unchanged because the caller configured that behavior.
  • A site may recover instead of raise when it has a fallback. tag_sha reads the loose ref with a local rescue SystemCallError and falls through to git show-ref. Never swallow an exception silently.
Path Handling
  • Working-directory paths: relative to repo working directory
  • Paths stored as Pathname objects on Git::Repository
  • Git::EscapedPath for paths with special characters
  • Handle Windows path separators; test with Unicode filenames
Encoding
  • Use rchardet for automatic encoding detection
  • Handle UTF-8, ASCII, and platform-default encodings
  • Be aware of binary vs. text mode differences on Windows
Timeouts
  • Global timeout configurable; per-command override available
  • Git::TimeoutError is raised on expiry
  • Built into Git::CommandLine; document implications in YARD
Dependencies

Version constraints live in git.gemspec; do not restate them here.

  • activesupport — utilities and deprecation handling
  • addressable — URI parsing
  • process_executer — subprocess execution with timeout
  • rchardet — character encoding detection

Compatibility

  • Minimum Ruby (language level): 3.3.0
  • Supported Rubies: MRI (macOS, Linux, Windows); JRuby and TruffleRuby on Linux from the earliest release whose Ruby compatibility target is at or above the MRI floor (the CI matrix pins the exact versions tested)
  • Minimum Git: 2.43.0
  • Platforms: macOS, Linux, Windows (JRuby/TruffleRuby officially supported on Linux only)
  • Use File.join and forward slashes; avoid platform-specific paths in tests
  • Windows has different path handling, file-system behavior, and line endings; JRuby on Windows is not supported
  • Document git version requirements for features that need newer git
  • Deprecating or removing public API follows the deprecation policy in Breaking Change Analysis, Step 4; the user-facing statements are the README's Deprecation policy and Release support policy subsections

Performance

Commands and subprocesses
  • Commands execute with global or per-command configurable timeout
  • Subprocess execution is handled by Git::CommandLine; do not shell out directly
  • Clean up resources (file handles, temp files) after every operation
  • Handle large repository operations efficiently
Memory
  • Lazy-load Git objects when possible; cache appropriately
  • Stream large outputs rather than buffering everything
  • Be mindful of memory with large diffs and logs
Repository operations
  • Minimize Git command executions; use batch operations where possible
  • Cache Git objects when appropriate
  • Consider performance implications of deep history traversal

Implementation Notes

Adding new commands

Follow the three-layer pattern: command class (CLI contract) → parser (output transform) → Git::Repository::* facade method (orchestration + rich object). See Command Implementation.

Working with paths
  • Store as Pathname; use Git::EscapedPath for special chars
  • Test with Unicode filenames and Windows separators
Working with repository objects
  • Handle missing/invalid objects gracefully
  • Test with all object types (commits, trees, blobs, tags)
Security
  • Use Git::CommandLine for all command execution — it handles proper escaping
  • Validate and sanitize user-supplied paths and arguments
  • Document security implications in YARD
  • Be aware of git hook execution risks

© ruby-git, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .github/skills/project-context of ruby-git/ruby-git.

Open the folder on GitHubat commit f3bf20f

Compare with similar skills

Project Context 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.

Project Context compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Project Context this skillruby-git/ruby-git1.8k—~5.4kAutomated safety check: PassMIT
iOS DodMacMagazine/app-iOS171—~775Automated safety check: NotesNone
Git PR ReviewerOneWave-AI/claude-skills322—~464Automated safety check: NotesMIT
Finishing a Development Branchobra/superpowers296k5 repos~1.9kAutomated safety check: PassMIT
Code Design Rationale Investigatorcursor/plugins10k9 repos~2.6kAutomated safety check: PassNone
Contributor-First PR MergeHKUDS/OpenHarness16k1 repos~847Automated safety check: PassMIT

Similar skills

  • iOS Dod

    MacMagazine/app-iOS

    Definition of Done verification for MacMagazine — build, test, lint, code-quality and git checks with real evidence.

    171 GitHub stars~775 tokensUpdated today
    DevelopmentAuto-check: notes
  • Git PR Reviewer

    OneWave-AI/claude-skills

    Review pull requests for code quality, security issues, and best practices.

    322 GitHub stars~464 tokensUpdated 5 days ago
    DevelopmentAuto-check: notes
  • Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.

    296k GitHub starsUsed in 5 repos~1.9k tokens
    DevelopmentAuto-check passed
  • Official

    Digs into why code is shaped the way it is by checking git history, pull requests and connected tools in parallel, then reporting a cited read on the tradeoffs.

    10k GitHub starsUsed in 9 repos~2.6k tokens
    DevelopmentAuto-check passed
  • Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.

    16k GitHub starsUsed in 1 repo~847 tokens
    DevelopmentAuto-check passed
  • Moves a package from another TryGhost repository into Ghost as an internal workspace package while keeping its Git history, with checkpoints for the steps that need an administrator.

    55k GitHub stars~3.8k tokensUpdated today
    DevelopmentAuto-check passed

More from ruby-git/ruby-git

All 30 skills in this repo
  • Addresses unresolved pull request review threads and suppressed (low-confidence) Copilot review comments on the current branch, folds each fix into the…

    1.8k GitHub stars~657 tokensUpdated 5 days ago
    Auto-check passed
  • Breaking Change Analysis

    ruby-git/ruby-git

    Assesses what an API change would break before it is made, finds every usage, documents the impact and plans a deprecation or migration path.

    1.8k GitHub stars~1.7k tokensUpdated 5 days ago
    Auto-check passed
  • Diagnoses and fixes failing GitHub Actions runs by identifying the failure, fetching only the relevant logs, finding the root cause and reproducing it locally.

    1.8k GitHub stars~1.9k tokensUpdated 5 days ago
    Auto-check passed
  • Scaffolds and reviews `Git::Commands::*` classes in the ruby-git library, with unit tests, integration tests and YARD docs, using the Base command architecture.

    1.8k GitHub stars~3k tokensUpdated 5 days ago
    Auto-check passed
  • Gem Dependency Management

    ruby-git/ruby-git

    Workflow for updating gem dependencies and fixing CVEs in the ruby-git project: assess with bundle outdated and audit, edit the gemspec, test, then commit with conventional messages.

    1.8k GitHub stars~806 tokensUpdated 5 days ago
    Auto-check passed
  • Migrates a direct command call in Ruby Git's Git::Lib to a Git::Commands class, as part of a Strangler Fig redesign, with a plan, legacy tests and a pull request.

    1.8k GitHub stars~4.4k tokensUpdated 5 days ago
    Auto-check passed

Works with

Categories

Questions about Project Context

What does Project Context do?

Reference guide for ruby-git architecture, coding standards, design philosophy, key technical details, and compatibility requirements. Project Context is an agent skill from ruby-git/ruby-git. Reference guide for ruby-git architecture, coding standards, design philosophy, key technical details, and compatibility requirements.

When should I use Project Context?

Project Context fits situations like: answering architecture questions; deciding where new code belongs; reviewing coding standards; understanding the layered command/parser/facade design.

How do I install Project Context in Claude Code?

Run `npx skills add ruby-git/ruby-git --skill project-context -a claude-code`. Or copy the skill folder (.github/skills/project-context in ruby-git/ruby-git) into .claude/skills/project-context in your project. Claude Code loads it when a task matches its description.

How do I install Project Context in Codex?

Run `npx skills add ruby-git/ruby-git --skill project-context -a codex`. Or copy the skill folder (.github/skills/project-context in ruby-git/ruby-git) into .agents/skills/project-context in your project. Codex loads it when a task matches its description.

Can I use Project Context 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 ruby-git/ruby-git --skill project-context -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/project-context, .gemini/skills/project-context, .github/skills/project-context and .opencode/skills/project-context in your project.

What does Project Context need to run?

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

Does Project Context 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 Project Context 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 Project Context use?

Project Context is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Project Context use?

About 5.4k tokens (SKILL.md is roughly 22k 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 Project Context?

Skills that share tags, products or a category with Project Context: iOS Dod (MacMagazine/app-iOS, 171 stars), Git PR Reviewer (OneWave-AI/claude-skills, 322 stars), Finishing a Development Branch (obra/superpowers, 296k stars) and Code Design Rationale Investigator (cursor/plugins, 10k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Project Context?

ruby-git (a GitHub organization) maintains it in ruby-git/ruby-git, which has 1,799 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on October 2, 2026.

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