Git Command Class Implementation
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.
Program robots with GaP (graph-as-policy) — compile natural-language tasks into typed, verified robot skill graphs and run them on simulators or real robots.
$ npx skills add graph-robots/graph-as-policy --skill gap -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install graph-robots/graph-as-policy gap --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/graph-robots/graph-as-policy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agent/skills/gap .claude/skills/gap && 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 "gap" agent skill from https://github.com/graph-robots/graph-as-policy/tree/main/agent/skills/gap into .claude/skills/gap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gap", 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/graph-robots/graph-as-policy/tree/main/agent/skills/gapType 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 graph-robots/graph-as-policy --skill gap -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install graph-robots/graph-as-policy gap --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/graph-robots/graph-as-policy.git skills-src && mkdir -p .agents/skills && cp -r skills-src/agent/skills/gap .agents/skills/gap && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "gap" agent skill from https://github.com/graph-robots/graph-as-policy/tree/main/agent/skills/gap into .agents/skills/gap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gap", 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 graph-robots/graph-as-policy --skill gap -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install graph-robots/graph-as-policy gap --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/graph-robots/graph-as-policy.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/agent/skills/gap .cursor/skills/gap && 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 "gap" agent skill from https://github.com/graph-robots/graph-as-policy/tree/main/agent/skills/gap into .cursor/skills/gap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gap", 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/graph-robots/graph-as-policy.git --path agent/skills/gap--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 graph-robots/graph-as-policy --skill gap -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install graph-robots/graph-as-policy gap --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/graph-robots/graph-as-policy.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/agent/skills/gap .gemini/skills/gap && 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 "gap" agent skill from https://github.com/graph-robots/graph-as-policy/tree/main/agent/skills/gap into .gemini/skills/gap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gap", 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 graph-robots/graph-as-policy gapInstalls 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 graph-robots/graph-as-policy --skill gap -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/graph-robots/graph-as-policy.git skills-src && mkdir -p .github/skills && cp -r skills-src/agent/skills/gap .github/skills/gap && 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 "gap" agent skill from https://github.com/graph-robots/graph-as-policy/tree/main/agent/skills/gap into .github/skills/gap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gap", 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 graph-robots/graph-as-policy --skill gap -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install graph-robots/graph-as-policy gap --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/graph-robots/graph-as-policy.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/agent/skills/gap .opencode/skills/gap && 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 "gap" agent skill from https://github.com/graph-robots/graph-as-policy/tree/main/agent/skills/gap into .opencode/skills/gap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gap", 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.
gapProgram robots with GaP (graph-as-policy) — compile natural-language tasks into typed, verified robot skill graphs and run them on simulators or real robots.
Gap is an agent skill from graph-robots/graph-as-policy. Program robots with GaP (graph-as-policy) — compile natural-language tasks into typed, verified robot skill graphs and run them on simulators or real robots. Use when the user mentions GaP or graph-as-policy, robot manipulation, robot skills, robot tools or capabilities, skill registries, open-robot-skills, LIBERO or MuJoCo manipulation sims, pick-and-place, grasping or perception strategies, generating or hand-authoring robot task graphs, robot benchmarks, or asks what a robot can do. Covers searching registries…
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/authoring-bundles.md`, `references/authoring-graphs.md` and `references/cli.md`).
It sits in Development, covering Project scaffolding, Skill management and Unit testing. The repository describes itself as: gap — graph as policy: compile language instructions into typed, verified robot skill graphs and execute them on simulators or real robots. The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c8b5515. 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:
uvgitFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
OPENROUTER_API_KEYHF_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Gap loads about 3.3k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 229 tokens; SKILL.md has 1,155 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 graph-robots/graph-as-policy at commit c8b5515, republished under its MIT licence (© graph-robots). 1,155 words, ~3,304 tokens.
.claude/skills/gap/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.GaP compiles robot tasks into typed, verified skill graphs and executes them. The policy is the graph: nodes call tools (perception models, planners, robot motions) or run skill scripts; postcondition checkpoints verify progress against the simulator state. Two kinds of repos exist:
graph-as-policy, imports as gap) — CLI, runtime,
builder, codegen, connectors (LIBERO sim / real Franka & UR);skills/<name>/SKILL.md
strategies, tools/<name>/SKILL.md model-backed tools).
open-robot-skills is
the canonical public registry, normally cloned side-by-side with the
engine and auto-discovered. Any number of registries layer by precedence.Ground truth: gap <command> --help is authoritative;
references/cli.md here is a generated snapshot. When working inside a
checkout, prefer its docs/ (design.md, runtime.md, skills.md, safety.md)
over the digests in this skill.
gap run --real ... or gap.connector.real(...) unless the
human has explicitly confirmed that specific run in this conversation.
Real-robot work requires a human with the E-stop in hand and
docs/safety.md read. Do not weaken this gate, ever.gap run <graph> --validate-only), then sim
(--sim), and only then discuss real hardware.--checkpoints raise on anything real; warn (the default) in sim.sim.check_success, or gap benchmark --gate.Always start by finding out what exists and what can run:
uv run gap check # inside a checkout (or just `gap check` if on PATH)
gap check --format json # machine-readable; parse this when decidingIf the CLI is missing, set up from scratch (Linux; GPU needed for sim):
git clone --recurse-submodules https://github.com/graph-robots/graph-as-policy.git
git clone https://github.com/graph-robots/open-robot-skills.git # side-by-side
cd graph-as-policy
uv sync --extra quickstart # engine + sim + sam3/grounding-dino/geometry
uv run gap skills check --download # verify bundles + prefetch model weightsGotchas: cloning without --recurse-submodules breaks uv sync
("does not appear to be a Python project") — run
git submodule update --init; --extra grocery|all need CUDA_HOME set
(cuRobo compiles CUDA at install); sim runs want MUJOCO_GL=egl.
Env vars that matter: OPENROUTER_API_KEY (default codegen provider) /
Vertex via gcloud ADC + GOOGLE_CLOUD_PROJECT;
GAP_LLM_PROVIDER + GAP_LLM_MODEL pin a non-default provider per
shell (vertex also needs uv run --extra vertex); GAP_SKILLS_PATH
(colon-separated registry roots); HF_TOKEN (gated weights);
GAP_LLM_CACHE_DIR, GAP_LLM_NO_CACHE.
gap registry list # active registries, precedence order
gap skills list # every bundle (skills + tools) + registry
gap skills table --format markdown # paste-ready catalog
gap tools list # flat tool catalog with live schemas
gap tools show geometry.compute_obb # full input/output schema + runnability
gap check # what is operational HERE + fix hintsgap check is the decision input: a bundle is READY (deps importable,
declared GPU/env requirements met) or NOT READY with a fix hint; each
skill is READY or BLOCKED by the tool bundles it needs. Apply the fix
hints (uv sync --extra X, export KEY=...) before attempting tasks that
need those bundles. Resolution precedence for registries: --skills
flags > $GAP_SKILLS_PATH > project pyproject [tool.gap].registries >
~/.config/gap/registries.toml > the side-by-side open-robot-skills
checkout. Details: references/registries.md.
MUJOCO_GL=egl uv run gap run examples/libero_quickstart/graph \
--sim libero_object/0 --checkpoints warn--validate-only first when in doubt — structural validation without a
robot.--inputs key=value binds top-level workflow inputs.--record-video (sim only) saves <trace-dir>/run_video.mp4 of the run.dag_trace.json + per-node assets) under
--trace-dir (default outputs/run_<timestamp>). Read it for node
inputs/outputs, checkpoint results, and failures.gap viz serves an interactive trial browser at localhost:9432.examples/ each have a README: libero_quickstart (start
here), grocery_fulfillment (benchmark-gated), steered_policy,
collect_and_train, cable_ur, real_franka_pick_place.Programmatic equivalent:
import gap
conn = gap.connector.sim("libero", task="libero_object/0")
result = gap.execute("examples/libero_quickstart/graph", conn,
checkpoints="warn")
print(result.success, result.exit_status, result.trace_path)When this skill is running inside Claude Code, you are the codegen
pipeline — do NOT call gap generate. Turning a task into a graph is a
§4 hand-authoring job: read the task, pick skills from the active
registries, build the nodes with gap.builder, attach checkpoints, and
drive gap run --validate-only to a clean pass. You are a stronger model
than the one gap generate would dispatch to, and you stay in the loop to
fix validation errors — so author directly, don't shell out.
gap generate is the headless path: benchmark grids, cron, or
gap.agent.generate_sync() called from code — any run with no interactive
model present. It dispatches a coordinator → per-subgraph → checkpoint
pipeline to the configured provider's API (--provider/--model; see
gap check for what's configured). Reach for it only when there is no
Claude in the loop.
# headless only — NOT the path to use from inside Claude Code:
uv run gap generate "pick up the alphabet soup and put it in the basket" \
--provider openrouter --out outputs/soupThis is how you turn a task into a graph. The loop:
gap skills list). Canonical pick-and-place shape: perceive target →
perceive container → grasp → transport.gap tools show <tool> gives exact input/output fields (what you bind with Ref); each
chosen skill's SKILL.md gives its recommended inner state flow and
canonical scripts. Mirror them — they are the contract the skill was
validated with.Subgraphs and the top-level Workflow, then write a
script file for every type="script" node.validate=True checkpoints per subgraph so success is
verified against sim ground truth, not assumed (a grasp/place with no
checkpoint is unverified).gap run --validate-only) until clean,
then sim.from gap.builder import Workflow, Subgraph, Ref
sg = Subgraph(name="grasp_sg", skill="grasping-direct-ik")
sg.add_input("target_obb", type_name="OrientedBoundingBox")
sg.add_node("open", type="tool", tool="robot.open_gripper")
sg.add_node("grasp", type="tool", tool="geometry.top_down_grasp_candidates",
inputs={"obb": Ref("in.target_obb")})
sg.add_exit("grasped")
sg.set_on_error("failed")
sg.add_edge("START", "open"); sg.add_edge("open", "grasp")
sg.add_edge("grasp", "grasped"); sg.add_edge("grasped", "END")
wf = Workflow(name="my_task")
wf.add_subgraph(sg)
wf.add_node("grasp_node", type="subgraph", ref="grasp_sg")
wf.add_node("done", type="end", status="success")
wf.add_edge("START", "grasp_node")
wf.add_conditional_edges("grasp_node", {"grasped": "done", "failed": "done"},
router_field="exit")
wf.save("my_graph/workflow.json")Iterate against the validator until clean — failures cite rule codes (workflow W1–W8, subgraph S1–S11):
uv run gap run my_graph --validate-onlyWire tool names exactly as gap tools list reports them; bind dataflow
with Ref("node.field") / Ref("in.<input>"). Add postcondition
checkpoints (sg.add_checkpoint(...)) so success is verified, not
assumed. Full surface + rule digest: references/authoring-graphs.md.
uv run gap skills new my-skill --kind skill # or --kind tool
# targets the highest-precedence registry; --registry NAME to chooseThe scaffold includes SKILL.md, scripts/example.py (or tools.py), and
a unit-test skeleton tests/test_my_skill.py. Then:
name == dirname; description must contain a
"Use when …" sentence (it is the planner's entire view of the
bundle); GaP extensions only under the gap: key; declare
gap.requires: ({gpu: true, env: [KEY], env_any: [...], weights: true},
or {}) so gap check can vouch for it.def run(ctx, *, typed_kwargs) -> TypedDict,
call tools via ctx.tool("bundle.fn", ...), load prompt templates via
load_prompt(__package__, name, **vars). Tool bundles:
@tool(name="bundle.fn", summary=..., tags=...) with lazy heavy
imports — importing tools.py must never import torch (test-enforced).pyproject.toml ([] when no deps) and run uv lock.gap.testing.FakeContext (canned tool responses,
call assertions) and make_test_observation (synthetic RGB-D);
GPU/LLM smokes go behind the gpu/llm markers (deselected by
default).gap skills check && gap skills test my-skill && gap check.Full contract, test patterns, PR checklist: references/authoring-bundles.md.
gap registry init ~/my-lab-skills --name my-lab-skills --add # new registry
gap registry add lab ~/existing-skills # layer existing
gap registry list # inspectRegistries are local directories (clone remote ones yourself). Multiple
registries merge; earlier entries shadow same-named bundles (loud
warning) — fork-and-shadow one bundle instead of forking the whole
public registry. Projects pin their set in pyproject.toml
[tool.gap].registries = ["./skills", "../open-robot-skills"].
--validate-only (digest table in references/authoring-graphs.md).dag_trace.json in the trace dir (per-node
inputs/outputs/subcalls), or browse with gap viz.gap trace-diff <trace_a> <trace_b>.references/troubleshooting.md. gap check's fix hints are
the first stop.Only after ALL of: the human explicitly confirmed this exact command in
this conversation; the same graph passed in sim; --validate-only is
clean; --checkpoints raise; the human has read docs/safety.md
(E-stop, clear workspace; robot.go_home is disabled on real robots by
design). Reference setups: examples/real_franka_pick_place/
(Franka + Robotiq via robots_realtime), examples/cable_ur/
(UR + ZED, perception-only).
references/cli.md — generated --help for every commandreferences/registries.md — the registry model + config filesreferences/authoring-graphs.md — builder API, workflow v3, W*/S* rulesreferences/authoring-bundles.md — SKILL.md contract, tests, PR checklistreferences/troubleshooting.md — failure → fix table, trace anatomydocs/design.md, docs/runtime.md, docs/skills.md,
docs/safety.md, examples/*/README.md© graph-robots, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (references) in agent/skills/gap of graph-robots/graph-as-policy.
Open the folder on GitHubat commit c8b5515
Gap 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 |
|---|---|---|---|---|---|---|
| Gap this skillgraph-robots/graph-as-policy | 155 | — | ~3.3k | Automated safety check: Pass | MIT | |
| Git Command Class Implementationruby-git/ruby-git | 1.8k | — | ~3k | Automated safety check: Pass | MIT | |
| Git::Repository Facade Methodsruby-git/ruby-git | 1.8k | — | ~3.4k | Automated safety check: Pass | MIT | |
| Exp Test Maintainabilitydotnet/skills | 5.6k | 1 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Npx CLIjwynia/agent-skills | 165 | — | ~2.4k | Automated safety check: Pass | None | |
| Create Saleor Packagesaleor/apps | 162 | — | ~608 | Automated safety check: Pass | Custom licence |
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
Scaffolds and reviews facade methods on Git::Repository in ruby-git, with unit tests, integration tests and YARD documentation.
dotnet/skills
Detects duplicate boilerplate, copy-paste tests, and structural maintainability issues across .NET test suites.
jwynia/agent-skills
Build and publish npx-executable CLI tools using Bun as the primary toolchain with npm-compatible output.
saleor/apps
Scaffold a new shared package in the saleor-apps monorepo under ./packages/.
wislertt/leetcode-py
Generates Python LeetCode practice environments and manages a 307-problem catalog with the lcpy CLI.
Categories
Program robots with GaP (graph-as-policy) — compile natural-language tasks into typed, verified robot skill graphs and run them on simulators or real robots. Gap is an agent skill from graph-robots/graph-as-policy. Program robots with GaP (graph-as-policy) — compile natural-language tasks into typed, verified robot skill graphs and run them on simulators or real robots.
Gap fits situations like: the user mentions GaP; graph-as-policy; robot manipulation; skill registries.
Run `npx skills add graph-robots/graph-as-policy --skill gap -a claude-code`. Or copy the skill folder (agent/skills/gap in graph-robots/graph-as-policy) into .claude/skills/gap in your project. Claude Code loads it when a task matches its description.
Run `npx skills add graph-robots/graph-as-policy --skill gap -a codex`. Or copy the skill folder (agent/skills/gap in graph-robots/graph-as-policy) into .agents/skills/gap 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 graph-robots/graph-as-policy --skill gap -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/gap, .gemini/skills/gap, .github/skills/gap and .opencode/skills/gap in your project.
Going by SKILL.md and its folder, Gap needs the command-line tools its instructions call (uv and git) and credentials named OPENROUTER_API_KEY and HF_TOKEN. Our summary lists: Python 3; A credential in OPENROUTER_API_KEY.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. 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.
Gap is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k 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 9.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Gap: Git Command Class Implementation (ruby-git/ruby-git, 1.8k stars), Git::Repository Facade Methods (ruby-git/ruby-git, 1.8k stars), Exp Test Maintainability (dotnet/skills, 5.6k stars) and Npx CLI (jwynia/agent-skills, 165 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
graph-robots (a GitHub organization) maintains it in graph-robots/graph-as-policy, which has 155 GitHub stars. The repository was last updated on September 30, 2026.
Source: graph-robots/graph-as-policy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.