iOS Dod
MacMagazine/app-iOS
Definition of Done verification for MacMagazine — build, test, lint, code-quality and git checks with real evidence.
Reference guide for ruby-git architecture, coding standards, design philosophy, key technical details, and compatibility requirements.
$ npx skills add ruby-git/ruby-git --skill project-context -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ruby-git/ruby-git project-context --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/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-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 "project-context" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/project-context into .claude/skills/project-context/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-context", 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/ruby-git/ruby-git/tree/main/.github/skills/project-contextType 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 ruby-git/ruby-git --skill project-context -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ruby-git/ruby-git project-context --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/project-context .agents/skills/project-context && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "project-context" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/project-context into .agents/skills/project-context/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-context", 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 ruby-git/ruby-git --skill project-context -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ruby-git/ruby-git project-context --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/project-context .cursor/skills/project-context && 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 "project-context" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/project-context into .cursor/skills/project-context/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-context", 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/ruby-git/ruby-git.git --path .github/skills/project-context--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 ruby-git/ruby-git --skill project-context -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ruby-git/ruby-git project-context --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/project-context .gemini/skills/project-context && 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 "project-context" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/project-context into .gemini/skills/project-context/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-context", 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 ruby-git/ruby-git project-contextInstalls 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 ruby-git/ruby-git --skill project-context -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/project-context .github/skills/project-context && 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 "project-context" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/project-context into .github/skills/project-context/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-context", 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 ruby-git/ruby-git --skill project-context -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ruby-git/ruby-git project-context --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/project-context .opencode/skills/project-context && 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 "project-context" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/project-context into .opencode/skills/project-context/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-context", 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.
project-contextReference 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. 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.
Read from SKILL.md and the folder at commit f3bf20f. 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:
gitbundleFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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 ruby-git/ruby-git at commit f3bf20f, republished under its MIT licence (© ruby-git). 2,459 words, ~5,420 tokens.
.claude/skills/project-context/SKILL.md (or your agent's skills folder).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.
Attach this file to your Copilot Chat context when you need architecture guidance, coding standard details, or implementation constraints.
Git::Repository::* facade methods, the gem's public API layerKey modules and their roles:
| Class | Role |
|---|---|
Git::Repository | Main 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::CommandLine | Subprocess execution: escaping, timeout, stdout/stderr capture |
Git::Parsers::* | Transform raw stdout into structured data |
Git::Object::* | Immutable Git objects (Commit, Tree, Blob) |
Git::StatusInfo | Immutable working-directory status returned by Git::Repository#status_info; holds one Git::StatusFileInfo per reported path |
Git::Diff | Diff operations (enumerable DiffFile collection) |
Git::Log | Chainable commit-history query builder |
Git::BranchInfo | Immutable branch entry returned by Git::Repository#branch_list; branch operations are name-based facade methods |
Git::RemoteInfo | Immutable remote entry returned by Git::Repository#remote_list; remote operations are name-based facade methods |
Git::WorktreeInfo | Immutable worktree entry returned by Git::Repository#worktree_list and #worktree_add; worktree operations are path-based facade methods |
Git::StashInfo | Immutable stash entry returned by Git::Repository#stash_list and #stash_push; stash operations are name-based facade methods |
Key directories:
lib/git/ — Core library codelib/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 helpersarchive/ — 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 decidedThe 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)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.--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.Git::Parsers::*): Transforms raw stdout/stderr into structured
Ruby data. No execution.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 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: truein the command;no_edit: truepassed from the facade call site.
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 Commands | Mechanism |
|---|---|
| Unknown options | validate_unsupported_options! in Arguments DSL |
| Required options | required: true in Arguments DSL |
| Type checking | type: in Arguments DSL |
| Option-like operand rejection | Automatic 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 groups | Git::FailedError |
| Value-set membership | Git::FailedError |
| Forbidden value combinations | Git::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.
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 test: does this argument appear in git's argv?
flag_option, value_option, etc.) — git can observe it and report
the error, so do not declare a constraint.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:
| Passed | What git does | Exit |
|---|---|---|
| both | ignores stdin, dumps the entire object database | 0 |
| neither | reads nothing from stdin, emits nothing | 0 |
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.
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.
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.
frozen_string_literal: true at the top of every Ruby fileprivate keyword form (not private :method_name)| Kind | Convention | Example |
|---|---|---|
| Class/Module | PascalCase | Git::CommandLine |
| Method/variable | snake_case | current_branch |
| Constant | UPPER_SNAKE_CASE | VERSION |
| Predicate | ends with ? | bare? |
| Mutating method | ends with ! | reset! |
Parsed metadata struct (top-level Git::) | *Info suffix | BranchInfo, TagInfo, StashInfo |
Mutating-operation outcome struct (top-level Git::) | *Result suffix | BranchDeleteResult, 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.Object — it shadows Ruby's ::Object.lib/git/; command classes in lib/git/commands/@param, @return, @raise, @example@overload with explicit keyword params when methods use **@api private on internal methodsSee CONTRIBUTING.md for authoritative, complete guidelines.
Summary:
git CLIgit add → Git::Repository#add; use prefix + suffix for
multi-purpose commands (#ls_files_untracked, #ls_files_staged)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 classGit::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 failedGit::UnexpectedResultError — git output did not parse, or a command succeeded
but the entry it should have produced is missing from the follow-up listingGit::VersionError — the installed git does not meet a version requirementArgumentError — 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:
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.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.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.tag_sha reads the
loose ref with a local rescue SystemCallError and falls through to
git show-ref. Never swallow an exception silently.Pathname objects on Git::RepositoryGit::EscapedPath for paths with special charactersrchardet for automatic encoding detectionGit::TimeoutError is raised on expiryGit::CommandLine; document implications in YARDVersion constraints live in git.gemspec; do not restate them here.
activesupport — utilities and deprecation handlingaddressable — URI parsingprocess_executer — subprocess execution with timeoutrchardet — character encoding detectionFile.join and forward slashes; avoid platform-specific paths in testsGit::CommandLine; do not shell out directlyFollow the three-layer pattern: command class (CLI contract) → parser (output
transform) → Git::Repository::* facade method (orchestration + rich object). See
Command Implementation.
Pathname; use Git::EscapedPath for special charsGit::CommandLine for all command execution — it handles proper escaping© 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
Just SKILL.md in .github/skills/project-context of ruby-git/ruby-git.
Open the folder on GitHubat commit f3bf20f
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Project Context this skillruby-git/ruby-git | 1.8k | — | ~5.4k | Automated safety check: Pass | MIT | |
| iOS DodMacMagazine/app-iOS | 171 | — | ~775 | Automated safety check: Notes | None | |
| Git PR ReviewerOneWave-AI/claude-skills | 322 | — | ~464 | Automated safety check: Notes | MIT | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Code Design Rationale Investigatorcursor/plugins | 10k | 9 repos | ~2.6k | Automated safety check: Pass | None | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT |
MacMagazine/app-iOS
Definition of Done verification for MacMagazine — build, test, lint, code-quality and git checks with real evidence.
OneWave-AI/claude-skills
Review pull requests for code quality, security issues, and best practices.
obra/superpowers
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.
cursor/plugins
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.
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
TryGhost/Ghost
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.
ruby-git/ruby-git
Addresses unresolved pull request review threads and suppressed (low-confidence) Copilot review comments on the current branch, folds each fix into the…
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.
ruby-git/ruby-git
Diagnoses and fixes failing GitHub Actions runs by identifying the failure, fetching only the relevant logs, finding the root cause and reproducing it locally.
ruby-git/ruby-git
Scaffolds and reviews `Git::Commands::*` classes in the ruby-git library, with unit tests, integration tests and YARD docs, using the Base command architecture.
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.
ruby-git/ruby-git
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.
Categories
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.
Project Context fits situations like: answering architecture questions; deciding where new code belongs; reviewing coding standards; understanding the layered command/parser/facade design.
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.
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.
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.
Going by SKILL.md and its folder, Project Context needs the command-line tools its instructions call (git and bundle).
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.
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.
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.
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.
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.
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.