Gaia Research

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Repository Purpose

gaia-research is the public-facing lab/portal for the Gaia ecosystem. It is:

  1. A Jekyll-served GitHub Pages site (see _config.yml, robots.txt, sitemap.xml) that currently ships the README as the landing page at https://gaia-research.github.io/gaia-research/.
  2. A staging repository for a future Next.js App Router sitesrc/, content/, docs/, and experiments/ are being populated for the migration described in CONSOLIDATION_PRD.md. There is no package.json, next.config.*, or Next.js runtime present yet; do not assume npm run dev works.
  3. A Skill Benchmark Ingest Layer — standalone TypeScript scripts under scripts/ that fetch benchmark schemas from the sibling gaia-skill-tree repo and validate contributor submissions.

Common Commands

Everything runnable today is a one-off tsx script. There is no build, no test suite, and no lint config in-tree.

# Refresh benchmark-result schema (from sibling gaia-skill-tree checkout or raw GitHub)
# and regenerate content/templates/{gsb,benchmark}-submission.json boilerplates.
npx tsx scripts/generate-templates.ts

# Ingest tool docs (skill-fuse, gaia-operator) into content/tools/.
npx tsx scripts/ingest-tool-docs.ts

# Validate a submission JSON. The script auto-detects GSB vs. general benchmark
# from the top-level "benchmark" field ("GSB" / "Gaia Skill Bench" -> GSB schema).
npx tsx scripts/validate-submissions.ts content/templates/gsb-submission.json
npx tsx scripts/validate-submissions.ts content/templates/benchmark-submission.json

generate-templates.ts looks for ../gaia-skill-tree as a sibling working copy first (via git show dev/sprint-d-benchmark-leaderboard:...), then falls back to the raw GitHub URL, then to a hardcoded fallback schema. If you are offline and the sibling repo is missing, the fallback still produces valid output — but the schema may be out of date relative to upstream.

Ecosystem Context (why this matters for edits)

There is a strict repository boundary enforced by convention (see README.md, ARCHITECTURE.md, CONSOLIDATION_PRD.md):

gaia-research  ──►  marketing-tasks  ──►  gaia-skill-tree

Content & Data Model

Submission validation semantics

scripts/validate-submissions.ts is a hand-rolled validator, not a generic JSON Schema library — the schema files in content/schemas/ are documentation for contributors and the upstream registry, but the validator hardcodes the rules it actually enforces. Notable specifics:

If you change the schema JSON files, mirror the change in the validator (or vice versa) — they can silently drift.

Brand & Voice

PRODUCT.md and DESIGN.md define the mascot voice (Milim — high-energy, playful-rigorous) and the visual system (Milim Pink #ec4899, Rimuru Blue #38bdf8, obsidian dark canvas, Bebas Neue + Syne typography). Copy and UI work in this repo should match that register; the ledger-side (/atlas in the future app) uses a more solemn palette per CONSOLIDATION_PRD.md.

Image Generation & Asset Production

When generating or refining images for this repo, use the project skill/playbook and helper scripts:

Hard rule: always use image gen 2 / gpt-image-2; never use nano-banana or nano-banana-2 for Gaia Research production assets. If using omniflash, set model_id: "gpt-image-2". If using pi-image-gen / image_generate, confirm the active default model is image gen 2 before generating; if it cannot be confirmed, ask before proceeding.

Generated experiments and intermediate variants should go in assets/workbench/ first. Promote reviewed outputs to assets/generated/ or assets/brand/, then run the asset ledger sync/check scripts.

GitHub Pages

The site is served by Jekyll with the jekyll-seo-tag plugin (_config.yml). baseurl is /gaia-research — any absolute paths in future content need to account for that prefix. sitemap.xml and robots.txt are hand-maintained.