Ar Io Gateway Operator
ar-io/ar-io-node
Operate any AR.IO node deployment — architecture, daily ops, diagnostics, and recurring pitfalls that apply to every operator.
A skill your agent uses when building or maintaining The Graph subgraphs.
$ npx skills add ccashwell/evm-cortex --skill subgraph-patterns -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ccashwell/evm-cortex subgraph-patterns --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/ccashwell/evm-cortex.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/subgraph-patterns .claude/skills/subgraph-patterns && 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 "subgraph-patterns" agent skill from https://github.com/ccashwell/evm-cortex/tree/main/skills/subgraph-patterns into .claude/skills/subgraph-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subgraph-patterns", 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/ccashwell/evm-cortex/tree/main/skills/subgraph-patternsType 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 ccashwell/evm-cortex --skill subgraph-patterns -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ccashwell/evm-cortex subgraph-patterns --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccashwell/evm-cortex.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/subgraph-patterns .agents/skills/subgraph-patterns && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "subgraph-patterns" agent skill from https://github.com/ccashwell/evm-cortex/tree/main/skills/subgraph-patterns into .agents/skills/subgraph-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subgraph-patterns", 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 ccashwell/evm-cortex --skill subgraph-patterns -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ccashwell/evm-cortex subgraph-patterns --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccashwell/evm-cortex.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/subgraph-patterns .cursor/skills/subgraph-patterns && 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 "subgraph-patterns" agent skill from https://github.com/ccashwell/evm-cortex/tree/main/skills/subgraph-patterns into .cursor/skills/subgraph-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subgraph-patterns", 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/ccashwell/evm-cortex.git --path skills/subgraph-patterns--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 ccashwell/evm-cortex --skill subgraph-patterns -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ccashwell/evm-cortex subgraph-patterns --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccashwell/evm-cortex.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/subgraph-patterns .gemini/skills/subgraph-patterns && 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 "subgraph-patterns" agent skill from https://github.com/ccashwell/evm-cortex/tree/main/skills/subgraph-patterns into .gemini/skills/subgraph-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subgraph-patterns", 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 ccashwell/evm-cortex subgraph-patternsInstalls 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 ccashwell/evm-cortex --skill subgraph-patterns -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ccashwell/evm-cortex.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/subgraph-patterns .github/skills/subgraph-patterns && 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 "subgraph-patterns" agent skill from https://github.com/ccashwell/evm-cortex/tree/main/skills/subgraph-patterns into .github/skills/subgraph-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subgraph-patterns", 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 ccashwell/evm-cortex --skill subgraph-patterns -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ccashwell/evm-cortex subgraph-patterns --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccashwell/evm-cortex.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/subgraph-patterns .opencode/skills/subgraph-patterns && 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 "subgraph-patterns" agent skill from https://github.com/ccashwell/evm-cortex/tree/main/skills/subgraph-patterns into .opencode/skills/subgraph-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subgraph-patterns", 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.
subgraph-patternsA skill your agent uses when building or maintaining The Graph subgraphs.
Subgraph Patterns is an agent skill from ccashwell/evm-cortex. Use when building or maintaining The Graph subgraphs. Covers subgraph.yaml manifest, schema.graphql design, AssemblyScript mappings, event handlers, data source templates, testing with matchstick, deployment, and indexing optimization.
Its SKILL.md is about 2.1k 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 Backend & APIs, covering GraphQL and Deployment. It works with GraphQL. The repository describes itself as: Ethereum protocol engineering squad for AI coding assistants. The licence is MIT.
Read from SKILL.md and the folder at commit f8f3301. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are graphql, typescript, yaml and bash).
From 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:
api.thegraph.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
DEPLOY_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Subgraph Patterns loads about 2.1k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 114 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 ccashwell/evm-cortex at commit f8f3301, republished under its MIT licence (© ccashwell). 114 words, ~2,076 tokens.
.claude/skills/subgraph-patterns/SKILL.md (or your agent's skills folder).my-subgraph/
├── subgraph.yaml # Manifest: data sources, event handlers
├── schema.graphql # Entity definitions (GraphQL)
├── src/
│ └── mappings.ts # Event handler logic (AssemblyScript)
├── tests/
│ └── mappings.test.ts # Matchstick unit tests
├── abis/
│ └── MyContract.json # Contract ABIs
└── networks.json # Multi-network configspecVersion: 1.0.0
indexerHints:
prune: auto
schema:
file: ./schema.graphql
dataSources:
- kind: ethereum
name: MyProtocol
network: base
source:
address: "0xContractAddress"
abi: MyProtocol
startBlock: 12345678 # Block contract was deployed
mapping:
kind: ethereum/events
apiVersion: 0.0.9
language: wasm/assemblyscript
entities:
- Deposit
- Withdrawal
- User
abis:
- name: MyProtocol
file: ./abis/MyProtocol.json
- name: ERC20
file: ./abis/ERC20.json
eventHandlers:
- event: Deposit(indexed address,uint256,uint256)
handler: handleDeposit
- event: Withdrawal(indexed address,uint256)
handler: handleWithdrawal
file: ./src/mappings.ts
templates:
- kind: ethereum
name: Vault
network: base
source:
abi: Vault
mapping:
kind: ethereum/events
apiVersion: 0.0.9
language: wasm/assemblyscript
entities:
- VaultDeposit
abis:
- name: Vault
file: ./abis/Vault.json
eventHandlers:
- event: VaultDeposit(indexed address,uint256)
handler: handleVaultDeposit
file: ./src/vault-mappings.tstype Protocol @entity {
id: Bytes! # Use Bytes! for addresses
totalDeposited: BigDecimal!
totalUsers: BigInt!
vaults: [Vault!]! @derivedFrom(field: "protocol")
}
type User @entity {
id: Bytes! # user address
deposits: [Deposit!]! @derivedFrom(field: "user")
totalDeposited: BigDecimal!
firstDepositAt: BigInt!
lastActiveAt: BigInt!
}
type Vault @entity {
id: Bytes! # vault address
protocol: Protocol!
asset: Bytes!
totalAssets: BigDecimal!
deposits: [Deposit!]! @derivedFrom(field: "vault")
createdAt: BigInt!
createdAtBlock: BigInt!
}
type Deposit @entity(immutable: true) {
id: Bytes! # tx hash + log index
user: User!
vault: Vault!
amount: BigDecimal!
shares: BigInt!
timestamp: BigInt!
blockNumber: BigInt!
transactionHash: Bytes!
}
type DailySnapshot @entity {
id: String! # "YYYY-MM-DD"
date: BigInt!
totalDeposited: BigDecimal!
depositCount: BigInt!
uniqueUsers: BigInt!
}Key schema patterns:
@entity(immutable: true) for event logs (faster indexing)@derivedFrom for reverse lookups (no storage cost)Bytes! for addresses, BigDecimal! for token amountstxHash + logIndeximport { BigDecimal, BigInt, Bytes, Address } from "@graphprotocol/graph-ts";
import { Deposit as DepositEvent, Withdrawal } from "../generated/MyProtocol/MyProtocol";
import { Deposit, User, Protocol, Vault } from "../generated/schema";
import { Vault as VaultTemplate } from "../generated/templates";
let ZERO_BD = BigDecimal.zero();
let ZERO_BI = BigInt.zero();
let ONE_BI = BigInt.fromI32(1);
function getOrCreateProtocol(): Protocol {
let protocol = Protocol.load(Bytes.fromHexString("0x01"));
if (protocol == null) {
protocol = new Protocol(Bytes.fromHexString("0x01"));
protocol.totalDeposited = ZERO_BD;
protocol.totalUsers = ZERO_BI;
}
return protocol;
}
function getOrCreateUser(address: Address, timestamp: BigInt): User {
let user = User.load(address);
if (user == null) {
user = new User(address);
user.totalDeposited = ZERO_BD;
user.firstDepositAt = timestamp;
user.lastActiveAt = timestamp;
let protocol = getOrCreateProtocol();
protocol.totalUsers = protocol.totalUsers.plus(ONE_BI);
protocol.save();
}
return user;
}
export function handleDeposit(event: DepositEvent): void {
let user = getOrCreateUser(event.params.user, event.block.timestamp);
let amount = event.params.amount.toBigDecimal().div(BigDecimal.fromString("1e18"));
let deposit = new Deposit(
event.transaction.hash.concatI32(event.logIndex.toI32())
);
deposit.user = user.id;
deposit.vault = event.address;
deposit.amount = amount;
deposit.shares = event.params.shares;
deposit.timestamp = event.block.timestamp;
deposit.blockNumber = event.block.number;
deposit.transactionHash = event.transaction.hash;
deposit.save();
user.totalDeposited = user.totalDeposited.plus(amount);
user.lastActiveAt = event.block.timestamp;
user.save();
let protocol = getOrCreateProtocol();
protocol.totalDeposited = protocol.totalDeposited.plus(amount);
protocol.save();
}For dynamically created contracts (e.g., factory-deployed vaults):
import { VaultCreated } from "../generated/Factory/Factory";
import { Vault as VaultTemplate } from "../generated/templates";
import { Vault } from "../generated/schema";
export function handleVaultCreated(event: VaultCreated): void {
// Start indexing the new vault contract
VaultTemplate.create(event.params.vault);
let vault = new Vault(event.params.vault);
vault.protocol = Bytes.fromHexString("0x01");
vault.asset = event.params.asset;
vault.totalAssets = BigDecimal.zero();
vault.createdAt = event.block.timestamp;
vault.createdAtBlock = event.block.number;
vault.save();
}import { assert, test, clearStore, beforeEach } from "matchstick-as/assembly/index";
import { Address, BigInt, Bytes, ethereum } from "@graphprotocol/graph-ts";
import { handleDeposit } from "../src/mappings";
import { Deposit } from "../generated/MyProtocol/MyProtocol";
function createDepositEvent(user: string, amount: BigInt, shares: BigInt): Deposit {
let event = changetype<Deposit>(newMockEvent());
event.parameters = new Array();
event.parameters.push(new ethereum.EventParam("user", ethereum.Value.fromAddress(Address.fromString(user))));
event.parameters.push(new ethereum.EventParam("amount", ethereum.Value.fromUnsignedBigInt(amount)));
event.parameters.push(new ethereum.EventParam("shares", ethereum.Value.fromUnsignedBigInt(shares)));
return event;
}
beforeEach(() => { clearStore(); });
test("handleDeposit creates entities", () => {
let event = createDepositEvent("0x0000000000000000000000000000000000000001", BigInt.fromString("1000000000000000000"), BigInt.fromString("1000000000000000000"));
handleDeposit(event);
assert.entityCount("Deposit", 1);
assert.entityCount("User", 1);
});# Build
graph codegen && graph build
# Deploy to Subgraph Studio
graph auth --studio $DEPLOY_KEY
graph deploy --studio my-subgraph
# Deploy to hosted service (deprecated, use Studio)
graph deploy --node https://api.thegraph.com/deploy/ my-org/my-subgraph{
deposits(first: 10, orderBy: timestamp, orderDirection: desc) {
id
user { id totalDeposited }
amount
timestamp
}
protocol(id: "0x01") {
totalDeposited
totalUsers
}
}Pagination for large datasets:
{
deposits(first: 1000, where: { id_gt: "0xlastId" }, orderBy: id) {
id
amount
}
}@entity(immutable: true) — 30-50% faster indexingBytes over String for addresses and hashesstore.get calls — batch reads where possiblestartBlock to contract deployment block (skip empty blocks)indexerHints.prune: auto to reduce storage© ccashwell, 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 skills/subgraph-patterns of ccashwell/evm-cortex.
Open the folder on GitHubat commit f8f3301
Subgraph Patterns 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 |
|---|---|---|---|---|---|---|
| Subgraph Patterns this skillccashwell/evm-cortex | 131 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Ar Io Gateway Operatorar-io/ar-io-node | 127 | — | ~8.2k | Automated safety check: Notes | AGPL-3.0 | |
| Thegraph MCP Skillholon-run/uxc | 115 | — | ~1.1k | Automated safety check: Pass | MIT | |
| DagsterVectorSpaceLab/AREX-Skill | 328 | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Railway APImajiayu000/claude-skill-registry | 666 | 1 repos | ~2k | Automated safety check: Pass | MIT | |
| Subgraph Development Guidenirholas/three.ws | 226 | — | ~2.1k | Automated safety check: Pass | MIT |
ar-io/ar-io-node
Operate any AR.IO node deployment — architecture, daily ops, diagnostics, and recurring pitfalls that apply to every operator.
holon-run/uxc
Use The Graph Subgraph MCP through UXC via native SSE with a fixed linked command for subgraph discovery, schema retrieval, deployment selection, and GraphQL query execution with help-first…
VectorSpaceLab/AREX-Skill
A skill your agent uses when working with Dagster OSS: assets, jobs, Definitions, config/resources, schedules/sensors, automation, CLI/local development, deployment operations, GraphQL/webserver…
majiayu000/claude-skill-registry
Railway.com GraphQL API automation for projects, services, deployments, and environment variables.
nirholas/three.ws
Guide to building blockchain data indexes with The Graph — subgraph architecture, schema design, mapping handlers, deployment, and querying.
Jeffallan/claude-skills
Designs REST and GraphQL APIs from resource modeling to an OpenAPI 3.1 contract, with versioning, pagination and RFC 7807 error handling.
ccashwell/evm-cortex
A skill your agent uses when preparing for a security audit, performing reconnaissance on a new codebase, or creating a protocol overview.
ccashwell/evm-cortex
A skill your agent uses when integrating with Aave V3 for lending, borrowing, flash loans, or building on top of Aave markets.
ccashwell/evm-cortex
Access control design patterns for Solidity protocols. An agent skill from ccashwell/evm-cortex.
ccashwell/evm-cortex
A skill your agent uses when running a local Ethereum node with Anvil.
ccashwell/evm-cortex
A skill your agent uses when performing systematic breadth-first review of all contracts during a security audit.
ccashwell/evm-cortex
A skill your agent uses when performing deep analysis of specific findings or high-risk areas during a security audit.
Works with
Categories
A skill your agent uses when building or maintaining The Graph subgraphs. Subgraph Patterns is an agent skill from ccashwell/evm-cortex. Use when building or maintaining The Graph subgraphs.
Subgraph Patterns fits situations like: maintaining The Graph subgraphs; tasks that involve GraphQL; tasks that involve Deployment.
Run `npx skills add ccashwell/evm-cortex --skill subgraph-patterns -a claude-code`. Or copy the skill folder (skills/subgraph-patterns in ccashwell/evm-cortex) into .claude/skills/subgraph-patterns in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ccashwell/evm-cortex --skill subgraph-patterns -a codex`. Or copy the skill folder (skills/subgraph-patterns in ccashwell/evm-cortex) into .agents/skills/subgraph-patterns 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 ccashwell/evm-cortex --skill subgraph-patterns -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/subgraph-patterns, .gemini/skills/subgraph-patterns, .github/skills/subgraph-patterns and .opencode/skills/subgraph-patterns in your project.
Going by SKILL.md and its folder, Subgraph Patterns needs credentials named DEPLOY_KEY. Our summary lists: A credential in DEPLOY_KEY.
SKILL.md names 1 domain. In commands or code: api.thegraph.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.
Subgraph Patterns is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.3k 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 Subgraph Patterns: Ar Io Gateway Operator (ar-io/ar-io-node, 127 stars), Thegraph MCP Skill (holon-run/uxc, 115 stars), Dagster (VectorSpaceLab/AREX-Skill, 328 stars) and Railway API (majiayu000/claude-skill-registry, 666 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ccashwell (a GitHub user) maintains it in ccashwell/evm-cortex, which has 131 GitHub stars. The repository holds 89 skills in this directory. The repository was last updated on September 30, 2026.
Source: ccashwell/evm-cortex on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.