kleros/foresight/indexer-schema

Claude Code and agent skill by kleros/foresight

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Use when defining or editing schema.graphql. Entity types, scalar types, enums, relationships, @derivedFrom, @index, @config directives, array rules, naming conventions, and schema-to-TypeScript type mapping.

Install

npx vskill@latest install kleros/foresight/indexer-schema

SKILL.md

Schema Reference (schema.graphql)

Entity Rules

  • Every type is an entity — no `@entity` decorator (unlike TheGraph)
  • Must have id: ID! as first field
  • Names: 1-63 chars, alphanumeric + underscore, no reserved words
  • Relationship fields use the entity type directly: collection: NftCollection! — never add _id in the schema field name
  • The _id suffix only appears in TypeScript handlers (added by codegen): schema field collection → handler field collection_id

Scalar Types

Schema TypeTypeScript TypeNotes
ID!stringRequired on every entity
String!string
Int!number
Float!number
Boolean!boolean
BigInt!bigintUse @config(precision: N) for custom precision
BigDecimal!BigDecimalUse @config(precision: N, scale: M)
Bytes!stringHex-encoded
Timestamp!Date
Json!any

Enums

graphql
enum Status {
Active
Inactive
Paused
}
type Pool {
id: ID!
status: Status!
allowedStatuses: [Status!]! # enum arrays supported
}

@derivedFrom

Virtual reverse-lookup — cannot access in handlers, only in API queries:

graphql
type Pool {
id: ID!
swaps: [Swap!]! @derivedFrom(field: "pool")
}
type Swap {
id: ID!
pool: Pool! # entity reference — field name matches @derivedFrom "field" arg
}

Critical rules:

  • The field argument must match the schema field name on the child entity — which is the entity reference name ("pool"), not "pool_id"
  • In TypeScript handlers, set this relationship using the _id suffix: pool_id: poolEntity.id — codegen transforms pool: Pool! → pool_id in the TypeScript type
  • Never write `pool_id: String!` in the schema when using `@derivedFrom(field: "pool")`. The schema field must be pool: Pool!; the _id is a codegen artifact for handlers only

@index

Single-field index for faster queries:

graphql
type Transfer {
id: ID!
from: String! @index
to: String! @index
timestamp: BigInt! @index
}

Composite index with optional DESC direction:

graphql
type Trade @index(fields: ["poolId", ["date", "DESC"]]) {
id: ID!
poolId: String!
date: BigInt!
volume: BigDecimal!
}
  • Fields default to ASC; use ["field", "DESC"] for descending
  • IDs and @derivedFrom fields are automatically indexed
  • Only id and @index fields are queryable via context.Entity.getWhere()

@config

Customize precision for numeric types:

graphql
type Token {
id: ID!
totalSupply: BigInt! @config(precision: 100)
price: BigDecimal! @config(precision: 30, scale: 15)
}
  • BigInt default precision: 76 digits
  • BigDecimal default: precision 76, scale 32

Array Rules

  • Supported: [Type!]! — non-nullable elements, non-nullable array
  • Not supported: [Type]! (nullable elements), nested arrays, [Boolean!]!, [Timestamp!]!
  • Entity arrays require @derivedFrom — bare [Swap!]! without it causes a codegen error

Example

graphql
enum PoolType {
UniswapV2
UniswapV3
}
type Token {
id: ID!
symbol: String!
}
type Pool @index(fields: ["token0", "token1"]) {
id: ID!
poolType: PoolType!
token0: Token! # entity reference — handler uses token0_id
token1: Token! # entity reference — handler uses token1_id
reserve0: BigInt!
reserve1: BigInt!
totalValueLocked: BigDecimal! @config(precision: 30, scale: 15)
swaps: [Swap!]! @derivedFrom(field: "pool") # "pool" matches Swap.pool field name
}
type Swap {
id: ID!
pool: Pool! @index # entity reference — handler uses pool_id; @derivedFrom field arg = "pool"
sender: String! @index
amount0In: BigInt!
amount1In: BigInt!
timestamp: BigInt! @index
}

Schema vs handler field names:

Schema fieldSchema typeTypeScript handler field
poolPool!pool_id: string
token0Token!token0_id: string
collectionNftCollection!collection_id: string

Codegen always appends _id to entity reference field names in the TypeScript types. Do not add _id yourself in the schema.

If something is unclear, use the envio-docs skill to search and read the latest documentation.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/kleros/foresight/indexer-schema/badge)](https://verified-skill.com/skills/kleros/foresight/indexer-schema)

Something wrong with this skill or its page? Tell us.