{"owner":"genlayerlabs","repo":"genlayer-project-boilerplate","hasSkills":true,"totalSkillsCount":1,"totalTokensCount":1626,"categories":["claude-rule"],"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Quick Commands\n\n```bash\n# Linting\ngenvm-lint check contracts/football_bets.py    # Lint a contract\n\n# Testing\npytest tests/direct/ -v                        # Direct mode tests (fast, no Studio)\ngltest tests/integration/ -v -s                # Integration tests (requires Studio)\n\n# Deployment\ngenlayer network                               # Select network\ngenlayer deploy                                # Deploy contracts\n\n# Frontend\ncd frontend && npm run dev                     # Start frontend dev server\n```\n\n## Architecture\n\n```\ncontracts/          # Python intelligent contracts\ntests/\n  direct/           # Fast in-memory tests with web/LLM mocks\n  integration/      # Full tests against GenLayer Studio\nfrontend/           # Next.js 15 app (TypeScript, TanStack Query, Radix UI)\ndeploy/             # TypeScript deployment scripts\n```\n\n**Frontend stack**: Next.js 15, React 19, TypeScript, Tailwind CSS, TanStack Query, Wagmi/Viem, MetaMask wallet integration.\n\n## Development Workflow\n\n1. Write/modify contract in `contracts/`\n2. Lint: `genvm-lint check contracts/your_contract.py`\n3. Test direct: `pytest tests/direct/ -v`\n4. Start Studio and deploy: `genlayer deploy`\n5. Test integration: `gltest tests/integration/ -v -s`\n6. Run frontend: `cd frontend && npm run dev`\n\n## Contract Development\n\nContracts are Python files in `/contracts/` using the GenLayer SDK:\n\n```python\nfrom genlayer import *\n\nclass MyContract(gl.Contract):\n    data: TreeMap[Address, str]\n\n    def __init__(self):\n        self.data = TreeMap()\n\n    @gl.public.view\n    def get_data(self, addr: Address) -> str:\n        return self.data.get(addr, \"\")\n\n    @gl.public.write\n    def set_data(self, value: str):\n        self.data[gl.message.sender_address] = value\n```\n\n**Decorators**:\n- `@gl.public.view` — Read-only methods\n- `@gl.public.write` — State-modifying methods\n- `@gl.public.write.payable` — Methods accepting value\n\n**Storage types**: `TreeMap`, `DynArray`, `Array`, `u256`, `i256`, `@allow_storage` for custom classes\n\n## Writing Direct Mode Tests\n\nDirect mode runs contracts in-memory without Studio. Key APIs:\n\n```python\ndef test_example(direct_vm, direct_deploy, direct_alice):\n    contract = direct_deploy(\"contracts/my_contract.py\")\n\n    # Set sender\n    direct_vm.sender = direct_alice\n\n    # Mock web requests (regex on URL)\n    direct_vm.mock_web(r\".*example\\.com.*\", {\"status\": 200, \"body\": \"response\"})\n\n    # Mock LLM responses (regex on prompt)\n    direct_vm.mock_llm(r\".*analyze.*\", '{\"result\": \"positive\"}')\n\n    # Call contract methods directly\n    contract.some_write_method(\"arg1\")\n    result = contract.some_view_method()\n\n    # Assert expected failures\n    with direct_vm.expect_revert(\"Error message\"):\n        contract.invalid_method()\n\n    # Reset mocks between different scenarios\n    direct_vm.clear_mocks()\n```\n\nAvailable fixtures: `direct_vm`, `direct_deploy`, `direct_alice`, `direct_bob`, `direct_charlie`, `direct_owner`, `direct_accounts`\n\n## Linting\n\nThe GenVM linter catches contract issues before deployment:\n- Forbidden imports (`os`, `sys`, `subprocess`, etc.)\n- Non-deterministic calls outside equivalence principle blocks\n- Invalid storage types (must use `TreeMap`/`DynArray`, not `dict`/`list`)\n- Missing decorators and return type annotations\n- Bare Python exceptions (must use `gl.vm.UserError` or `Exception`)\n\n## Frontend Patterns\n\n- Contract interactions: `frontend/lib/contracts/FootballBets.ts`\n- React hooks: `frontend/lib/hooks/useFootballBets.ts`\n- Wallet context: `frontend/lib/genlayer/WalletProvider.tsx`\n- GenLayer client: `frontend/lib/genlayer/client.ts`\n\n## AI Agent Skills\n\nInstall the GenLayer development skills for enhanced agent-assisted workflows:\n\n```bash\n# In Claude Code:\n/plugin marketplace add genlayerlabs/skills\n/plugin install genlayer-dev@genlayerlabs\n```\n\nSkills available: `genvm-lint` (linting), `direct-tests` (direct mode testing), `integration-tests` (integration testing).\n\n---\n\n## GenLayer Technical Reference\n\n> **Can't solve an issue?** Always check the complete SDK API reference:\n> **https://sdk.genlayer.com/main/_static/ai/api.txt**\n>\n> Contains: all classes, methods, parameters, return types, changelogs, breaking changes.\n\n### Documentation URLs\n\n| Resource | URL |\n|----------|-----|\n| **SDK API (Complete)** | https://sdk.genlayer.com/main/_static/ai/api.txt |\n| Full Documentation | https://docs.genlayer.com/full-documentation.txt |\n| Main Docs | https://docs.genlayer.com/ |\n| GenLayerJS SDK | https://docs.genlayer.com/api-references/genlayer-js |\n\n### What is GenLayer?\n\nGenLayer is an AI-native blockchain where smart contracts can natively access the internet and make decisions using AI (LLMs). Contracts are Python-based and executed in the GenVM.\n\n### Web Access (`gl.nondet.web`)\n\n```python\ngl.nondet.web.get(url: str, *, headers: dict = {}) -> Response\ngl.nondet.web.post(url: str, *, body: str | bytes | None = None, headers: dict = {}) -> Response\ngl.nondet.web.render(url: str, *, mode: Literal['text', 'html']) -> str\ngl.nondet.web.render(url: str, *, mode: Literal['screenshot']) -> Image\n```\n\n### LLM Access (`gl.nondet`)\n\n```python\ngl.nondet.exec_prompt(prompt: str, *, images: Sequence[bytes | Image] | None = None) -> str\ngl.nondet.exec_prompt(prompt: str, *, response_format: Literal['json'], image: bytes | Image | None = None) -> dict\n```\n\n### Equivalence Principle\n\nValidation for non-deterministic outputs. Two approaches:\n\n**Custom leader/validator functions** (recommended for most cases):\n```python\nresult = gl.vm.run_nondet(leader_fn, validator_fn)\nresult = gl.vm.run_nondet_unsafe(leader_fn, validator_fn)  # no type matching\n```\n\n**Convenience functions** (for common patterns):\n| Type | Use Case | Function |\n|------|----------|----------|\n| Strict | Exact outputs | `gl.eq_principle.strict_eq()` |\n| Comparative | Similar outputs | `gl.eq_principle.prompt_comparative()` |\n| Non-Comparative | Subjective assessments | `gl.eq_principle.prompt_non_comparative()` |\n\n### Key Documentation Links\n\n- [Introduction to Intelligent Contracts](https://docs.genlayer.com/developers/intelligent-contracts/introduction)\n- [Storage](https://docs.genlayer.com/developers/intelligent-contracts/storage)\n- [Deploying Contracts](https://docs.genlayer.com/developers/intelligent-contracts/deploying)\n- [Crafting Prompts](https://docs.genlayer.com/developers/intelligent-contracts/crafting-prompts)\n- [Contract Examples](https://docs.genlayer.com/developers/intelligent-contracts/examples/storage)\n- [Testing Contracts](https://docs.genlayer.com/developers/decentralized-applications/testing)\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Quick Commands\n\n```bash\n# Linting\ngenvm-lint check contracts/football_bets.py    # Lint a contract\n\n# Testing\npytest tests/direct/ -v                        # Direct mode tests (fast, no Studio)\ngltest tests/integration/ -v -s                # Integration tests (requires Studio)\n\n# Deployment\ngenlayer network                               # Select network\ngenlayer deploy                                # Deploy contracts\n\n# Frontend\ncd frontend && npm run dev                     # Start frontend dev server\n```\n\n## Architecture\n\n```\ncontracts/          # Python intelligent contracts\ntests/\n  direct/           # Fast in-memory tests with web/LLM mocks\n  integration/      # Full tests against GenLayer Studio\nfrontend/           # Next.js 15 app (TypeScript, TanStack Query, Radix UI)\ndeploy/             # TypeScript deployment scripts\n```\n\n**Frontend stack**: Next.js 15, React 19, TypeScript, Tailwind CSS, TanStack Query, Wagmi/Viem, MetaMask wallet integration.\n\n## Development Workflow\n\n1. Write/modify contract in `contracts/`\n2. Lint: `genvm-lint check contracts/your_contract.py`\n3. Test direct: `pytest tests/direct/ -v`\n4. Start Studio and deploy: `genlayer deploy`\n5. Test integration: `gltest tests/integration/ -v -s`\n6. Run frontend: `cd frontend && npm run dev`\n\n## Contract Development\n\nContracts are Python files in `/contracts/` using the GenLayer SDK:\n\n```python\nfrom genlayer import *\n\nclass MyContract(gl.Contract):\n    data: TreeMap[Address, str]\n\n    def __init__(self):\n        self.data = TreeMap()\n\n    @gl.public.view\n    def get_data(self, addr: Address) -> str:\n        return self.data.get(addr, \"\")\n\n    @gl.public.write\n    def set_data(self, value: str):\n        self.data[gl.message.sender_address] = value\n```\n\n**Decorators**:\n- `@gl.public.view` — Read-only methods\n- `@gl.public.write` — State-modifying methods\n- `@gl.public.write.payable` — Methods accepting value\n\n**Storage types**: `TreeMap`, `DynArray`, `Array`, `u256`, `i256`, `@allow_storage` for custom classes\n\n## Writing Direct Mode Tests\n\nDirect mode runs contracts in-memory without Studio. Key APIs:\n\n```python\ndef test_example(direct_vm, direct_deploy, direct_alice):\n    contract = direct_deploy(\"contracts/my_contract.py\")\n\n    # Set sender\n    direct_vm.sender = direct_alice\n\n    # Mock web requests (regex on URL)\n    direct_vm.mock_web(r\".*example\\.com.*\", {\"status\": 200, \"body\": \"response\"})\n\n    # Mock LLM responses (regex on prompt)\n    direct_vm.mock_llm(r\".*analyze.*\", '{\"result\": \"positive\"}')\n\n    # Call contract methods directly\n    contract.some_write_method(\"arg1\")\n    result = contract.some_view_method()\n\n    # Assert expected failures\n    with direct_vm.expect_revert(\"Error message\"):\n        contract.invalid_method()\n\n    # Reset mocks between different scenarios\n    direct_vm.clear_mocks()\n```\n\nAvailable fixtures: `direct_vm`, `direct_deploy`, `direct_alice`, `direct_bob`, `direct_charlie`, `direct_owner`, `direct_accounts`\n\n## Linting\n\nThe GenVM linter catches contract issues before deployment:\n- Forbidden imports (`os`, `sys`, `subprocess`, etc.)\n- Non-deterministic calls outside equivalence principle blocks\n- Invalid storage types (must use `TreeMap`/`DynArray`, not `dict`/`list`)\n- Missing decorators and return type annotations\n- Bare Python exceptions (must use `gl.vm.UserError` or `Exception`)\n\n## Frontend Patterns\n\n- Contract interactions: `frontend/lib/contracts/FootballBets.ts`\n- React hooks: `frontend/lib/hooks/useFootballBets.ts`\n- Wallet context: `frontend/lib/genlayer/WalletProvider.tsx`\n- GenLayer client: `frontend/lib/genlayer/client.ts`\n\n## AI Agent Skills\n\nInstall the GenLayer development skills for enhanced agent-assisted workflows:\n\n```bash\n# In Claude Code:\n/plugin marketplace add genlayerlabs/skills\n/plugin install genlayer-dev@genlayerlabs\n```\n\nSkills available: `genvm-lint` (linting), `direct-tests` (direct mode testing), `integration-tests` (integration testing).\n\n---\n\n## GenLayer Technical Reference\n\n> **Can't solve an issue?** Always check the complete SDK API reference:\n> **https://sdk.genlayer.com/main/_static/ai/api.txt**\n>\n> Contains: all classes, methods, parameters, return types, changelogs, breaking changes.\n\n### Documentation URLs\n\n| Resource | URL |\n|----------|-----|\n| **SDK API (Complete)** | https://sdk.genlayer.com/main/_static/ai/api.txt |\n| Full Documentation | https://docs.genlayer.com/full-documentation.txt |\n| Main Docs | https://docs.genlayer.com/ |\n| GenLayerJS SDK | https://docs.genlayer.com/api-references/genlayer-js |\n\n### What is GenLayer?\n\nGenLayer is an AI-native blockchain where smart contracts can natively access the internet and make decisions using AI (LLMs). Contracts are Python-based and executed in the GenVM.\n\n### Web Access (`gl.nondet.web`)\n\n```python\ngl.nondet.web.get(url: str, *, headers: dict = {}) -> Response\ngl.nondet.web.post(url: str, *, body: str | bytes | None = None, headers: dict = {}) -> Response\ngl.nondet.web.render(url: str, *, mode: Literal['text', 'html']) -> str\ngl.nondet.web.render(url: str, *, mode: Literal['screenshot']) -> Image\n```\n\n### LLM Access (`gl.nondet`)\n\n```python\ngl.nondet.exec_prompt(prompt: str, *, images: Sequence[bytes | Image] | None = None) -> str\ngl.nondet.exec_prompt(prompt: str, *, response_format: Literal['json'], image: bytes | Image | None = None) -> dict\n```\n\n### Equivalence Principle\n\nValidation for non-deterministic outputs. Two approaches:\n\n**Custom leader/validator functions** (recommended for most cases):\n```python\nresult = gl.vm.run_nondet(leader_fn, validator_fn)\nresult = gl.vm.run_nondet_unsafe(leader_fn, validator_fn)  # no type matching\n```\n\n**Convenience functions** (for common patterns):\n| Type | Use Case | Function |\n|------|----------|----------|\n| Strict | Exact outputs | `gl.eq_principle.strict_eq()` |\n| Comparative | Similar outputs | `gl.eq_principle.prompt_comparative()` |\n| Non-Comparative | Subjective assessments | `gl.eq_principle.prompt_non_comparative()` |\n\n### Key Documentation Links\n\n- [Introduction to Intelligent Contracts](https://docs.genlayer.com/developers/intelligent-contracts/introduction)\n- [Storage](https://docs.genlayer.com/developers/intelligent-contracts/storage)\n- [Deploying Contracts](https://docs.genlayer.com/developers/intelligent-contracts/deploying)\n- [Crafting Prompts](https://docs.genlayer.com/developers/intelligent-contracts/crafting-prompts)\n- [Contract Examples](https://docs.genlayer.com/developers/intelligent-contracts/examples/storage)\n- [Testing Contracts](https://docs.genlayer.com/developers/decentralized-applications/testing)\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/genlayerlabs/genlayer-project-boilerplate/HEAD/CLAUDE.md","title":"Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Quick Commands\n\n```bash\n# Linting\ngenvm-lint check contracts/football_bets.py    # Lint a contract\n\n# Testing\npytest tests/direct/ -v                        # Direct mode tests (fast, no Studio)\ngltest tests/integration/ -v -s                # Integration tests (requires Studio)\n\n# Deployment\ngenlayer network                               # Select network\ngenlayer deploy                                # Deploy contracts\n\n# Frontend\ncd frontend && npm run dev                     # Start frontend dev server\n```\n\n## Architecture\n\n```\ncontracts/          # Python intelligent contracts\ntests/\n  direct/           # Fast in-memory tests with web/LLM mocks\n  integration/      # Full tests against GenLayer Studio\nfrontend/           # Next.js 15 app (TypeScript, TanStack Query, Radix UI)\ndeploy/             # TypeScript deployment scripts\n```\n\n**Frontend stack**: Next.js 15, React 19, TypeScript, Tailwind CSS, TanStack Query, Wagmi/Viem, MetaMask wallet integration.\n\n## Development Workflow\n\n1. Write/modify contract in `contracts/`\n2. Lint: `genvm-lint check contracts/your_contract.py`\n3. Test direct: `pytest tests/direct/ -v`\n4. Start Studio and deploy: `genlayer deploy`\n5. Test integration: `gltest tests/integration/ -v -s`\n6. Run frontend: `cd frontend && npm run dev`\n\n## Contract Development\n\nContracts are Python files in `/contracts/` using the GenLayer SDK:\n\n```python\nfrom genlayer import *\n\nclass MyContract(gl.Contract):\n    data: TreeMap[Address, str]\n\n    def __init__(self):\n        self.data = TreeMap()\n\n    @gl.public.view\n    def get_data(self, addr: Address) -> str:\n        return self.data.get(addr, \"\")\n\n    @gl.public.write\n    def set_data(self, value: str):\n        self.data[gl.message.sender_address] = value\n```\n\n**Decorators**:\n- `@gl.public.view` — Read-only methods\n- `@gl.public.write` — State-modifying methods\n- `@gl.public.write.payable` — Methods accepting value\n\n**Storage types**: `TreeMap`, `DynArray`, `Array`, `u256`, `i256`, `@allow_storage` for custom classes\n\n## Writing Direct Mode Tests\n\nDirect mode runs contracts in-memory without Studio. Key APIs:\n\n```python\ndef test_example(direct_vm, direct_deploy, direct_alice):\n    contract = direct_deploy(\"contracts/my_contract.py\")\n\n    # Set sender\n    direct_vm.sender = direct_alice\n\n    # Mock web requests (regex on URL)\n    direct_vm.mock_web(r\".*example\\.com.*\", {\"status\": 200, \"body\": \"response\"})\n\n    # Mock LLM responses (regex on prompt)\n    direct_vm.mock_llm(r\".*analyze.*\", '{\"result\": \"positive\"}')\n\n    # Call contract methods directly\n    contract.some_write_method(\"arg1\")\n    result = contract.some_view_method()\n\n    # Assert expected failures\n    with direct_vm.expect_revert(\"Error message\"):\n        contract.invalid_method()\n\n    # Reset mocks between different scenarios\n    direct_vm.clear_mocks()\n```\n\nAvailable fixtures: `direct_vm`, `direct_deploy`, `direct_alice`, `direct_bob`, `direct_charlie`, `direct_owner`, `direct_accounts`\n\n## Linting\n\nThe GenVM linter catches contract issues before deployment:\n- Forbidden imports (`os`, `sys`, `subprocess`, etc.)\n- Non-deterministic calls outside equivalence principle blocks\n- Invalid storage types (must use `TreeMap`/`DynArray`, not `dict`/`list`)\n- Missing decorators and return type annotations\n- Bare Python exceptions (must use `gl.vm.UserError` or `Exception`)\n\n## Frontend Patterns\n\n- Contract interactions: `frontend/lib/contracts/FootballBets.ts`\n- React hooks: `frontend/lib/hooks/useFootballBets.ts`\n- Wallet context: `frontend/lib/genlayer/WalletProvider.tsx`\n- GenLayer client: `frontend/lib/genlayer/client.ts`\n\n## AI Agent Skills\n\nInstall the GenLayer development skills for enhanced agent-assisted workflows:\n\n```bash\n# In Claude Code:\n/plugin marketplace add genlayerlabs/skills\n/plugin install genlayer-dev@genlayerlabs\n```\n\nSkills available: `genvm-lint` (linting), `direct-tests` (direct mode testing), `integration-tests` (integration testing).\n\n---\n\n## GenLayer Technical Reference\n\n> **Can't solve an issue?** Always check the complete SDK API reference:\n> **https://sdk.genlayer.com/main/_static/ai/api.txt**\n>\n> Contains: all classes, methods, parameters, return types, changelogs, breaking changes.\n\n### Documentation URLs\n\n| Resource | URL |\n|----------|-----|\n| **SDK API (Complete)** | https://sdk.genlayer.com/main/_static/ai/api.txt |\n| Full Documentation | https://docs.genlayer.com/full-documentation.txt |\n| Main Docs | https://docs.genlayer.com/ |\n| GenLayerJS SDK | https://docs.genlayer.com/api-references/genlayer-js |\n\n### What is GenLayer?\n\nGenLayer is an AI-native blockchain where smart contracts can natively access the internet and make decisions using AI (LLMs). Contracts are Python-based and executed in the GenVM.\n\n### Web Access (`gl.nondet.web`)\n\n```python\ngl.nondet.web.get(url: str, *, headers: dict = {}) -> Response\ngl.nondet.web.post(url: str, *, body: str | bytes | None = None, headers: dict = {}) -> Response\ngl.nondet.web.render(url: str, *, mode: Literal['text', 'html']) -> str\ngl.nondet.web.render(url: str, *, mode: Literal['screenshot']) -> Image\n```\n\n### LLM Access (`gl.nondet`)\n\n```python\ngl.nondet.exec_prompt(prompt: str, *, images: Sequence[bytes | Image] | None = None) -> str\ngl.nondet.exec_prompt(prompt: str, *, response_format: Literal['json'], image: bytes | Image | None = None) -> dict\n```\n\n### Equivalence Principle\n\nValidation for non-deterministic outputs. Two approaches:\n\n**Custom leader/validator functions** (recommended for most cases):\n```python\nresult = gl.vm.run_nondet(leader_fn, validator_fn)\nresult = gl.vm.run_nondet_unsafe(leader_fn, validator_fn)  # no type matching\n```\n\n**Convenience functions** (for common patterns):\n| Type | Use Case | Function |\n|------|----------|----------|\n| Strict | Exact outputs | `gl.eq_principle.strict_eq()` |\n| Comparative | Similar outputs | `gl.eq_principle.prompt_comparative()` |\n| Non-Comparative | Subjective assessments | `gl.eq_principle.prompt_non_comparative()` |\n\n### Key Documentation Links\n\n- [Introduction to Intelligent Contracts](https://docs.genlayer.com/developers/intelligent-contracts/introduction)\n- [Storage](https://docs.genlayer.com/developers/intelligent-contracts/storage)\n- [Deploying Contracts](https://docs.genlayer.com/developers/intelligent-contracts/deploying)\n- [Crafting Prompts](https://docs.genlayer.com/developers/intelligent-contracts/crafting-prompts)\n- [Contract Examples](https://docs.genlayer.com/developers/intelligent-contracts/examples/storage)\n- [Testing Contracts](https://docs.genlayer.com/developers/decentralized-applications/testing)\n","isInternal":false,"tokens":1626,"sizeBytes":6720}],"systemPromptSnippet":"<yakaai_skills repo=\"genlayerlabs/genlayer-project-boilerplate\">\n<!-- File: CLAUDE.md (Tokens: ~1626 | Category: claude-rule) -->\n# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Quick Commands\n\n```bash\n# Linting\ngenvm-lint check contracts/football_bets.py    # Lint a contract\n\n# Testing\npytest tests/direct/ -v                        # Direct mode tests (fast, no Studio)\ngltest tests/integration/ -v -s                # Integration tests (requires Studio)\n\n# Deployment\ngenlayer network                               # Select network\ngenlayer deploy                                # Deploy contracts\n\n# Frontend\ncd frontend && npm run dev                     # Start frontend dev server\n```\n\n## Architecture\n\n```\ncontracts/          # Python intelligent contracts\ntests/\n  direct/           # Fast in-memory tests with web/LLM mocks\n  integration/      # Full tests against GenLayer Studio\nfrontend/           # Next.js 15 app (TypeScript, TanStack Query, Radix UI)\ndeploy/             # TypeScript deployment scripts\n```\n\n**Frontend stack**: Next.js 15, React 19, TypeScript, Tailwind CSS, TanStack Query, Wagmi/Viem, MetaMask wallet integration.\n\n## Development Workflow\n\n1. Write/modify contract in `contracts/`\n2. Lint: `genvm-lint check contracts/your_contract.py`\n3. Test direct: `pytest tests/direct/ -v`\n4. Start Studio and deploy: `genlayer deploy`\n5. Test integration: `gltest tests/integration/ -v -s`\n6. Run frontend: `cd frontend && npm run dev`\n\n## Contract Development\n\nContracts are Python files in `/contracts/` using the GenLayer SDK:\n\n```python\nfrom genlayer import *\n\nclass MyContract(gl.Contract):\n    data: TreeMap[Address, str]\n\n    def __init__(self):\n        self.data = TreeMap()\n\n    @gl.public.view\n    def get_data(self, addr: Address) -> str:\n        return self.data.get(addr, \"\")\n\n    @gl.public.write\n    def set_data(self, value: str):\n        self.data[gl.message.sender_address] = value\n```\n\n**Decorators**:\n- `@gl.public.view` — Read-only methods\n- `@gl.public.write` — State-modifying methods\n- `@gl.public.write.payable` — Methods accepting value\n\n**Storage types**: `TreeMap`, `DynArray`, `Array`, `u256`, `i256`, `@allow_storage` for custom classes\n\n## Writing Direct Mode Tests\n\nDirect mode runs contracts in-memory without Studio. Key APIs:\n\n```python\ndef test_example(direct_vm, direct_deploy, direct_alice):\n    contract = direct_deploy(\"contracts/my_contract.py\")\n\n    # Set sender\n    direct_vm.sender = direct_alice\n\n    # Mock web requests (regex on URL)\n    direct_vm.mock_web(r\".*example\\.com.*\", {\"status\": 200, \"body\": \"response\"})\n\n    # Mock LLM responses (regex on prompt)\n    direct_vm.mock_llm(r\".*analyze.*\", '{\"result\": \"positive\"}')\n\n    # Call contract methods directly\n    contract.some_write_method(\"arg1\")\n    result = contract.some_view_method()\n\n    # Assert expected failures\n    with direct_vm.expect_revert(\"Error message\"):\n        contract.invalid_method()\n\n    # Reset mocks between different scenarios\n    direct_vm.clear_mocks()\n```\n\nAvailable fixtures: `direct_vm`, `direct_deploy`, `direct_alice`, `direct_bob`, `direct_charlie`, `direct_owner`, `direct_accounts`\n\n## Linting\n\nThe GenVM linter catches contract issues before deployment:\n- Forbidden imports (`os`, `sys`, `subprocess`, etc.)\n- Non-deterministic calls outside equivalence principle blocks\n- Invalid storage types (must use `TreeMap`/`DynArray`, not `dict`/`list`)\n- Missing decorators and return type annotations\n- Bare Python exceptions (must use `gl.vm.UserError` or `Exception`)\n\n## Frontend Patterns\n\n- Contract interactions: `frontend/lib/contracts/FootballBets.ts`\n- React hooks: `frontend/lib/hooks/useFootballBets.ts`\n- Wallet context: `frontend/lib/genlayer/WalletProvider.tsx`\n- GenLayer client: `frontend/lib/genlayer/client.ts`\n\n## AI Agent Skills\n\nInstall the GenLayer development skills for enhanced agent-assisted workflows:\n\n```bash\n# In Claude Code:\n/plugin marketplace add genlayerlabs/skills\n/plugin install genlayer-dev@genlayerlabs\n```\n\nSkills available: `genvm-lint` (linting), `direct-tests` (direct mode testing), `integration-tests` (integration testing).\n\n---\n\n## GenLayer Technical Reference\n\n> **Can't solve an issue?** Always check the complete SDK API reference:\n> **https://sdk.genlayer.com/main/_static/ai/api.txt**\n>\n> Contains: all classes, methods, parameters, return types, changelogs, breaking changes.\n\n### Documentation URLs\n\n| Resource | URL |\n|----------|-----|\n| **SDK API (Complete)** | https://sdk.genlayer.com/main/_static/ai/api.txt |\n| Full Documentation | https://docs.genlayer.com/full-documentation.txt |\n| Main Docs | https://docs.genlayer.com/ |\n| GenLayerJS SDK | https://docs.genlayer.com/api-references/genlayer-js |\n\n### What is GenLayer?\n\nGenLayer is an AI-native blockchain where smart contracts can natively access the internet and make decisions using AI (LLMs). Contracts are Python-based and executed in the GenVM.\n\n### Web Access (`gl.nondet.web`)\n\n```python\ngl.nondet.web.get(url: str, *, headers: dict = {}) -> Response\ngl.nondet.web.post(url: str, *, body: str | bytes | None = None, headers: dict = {}) -> Response\ngl.nondet.web.render(url: str, *, mode: Literal['text', 'html']) -> str\ngl.nondet.web.render(url: str, *, mode: Literal['screenshot']) -> Image\n```\n\n### LLM Access (`gl.nondet`)\n\n```python\ngl.nondet.exec_prompt(prompt: str, *, images: Sequence[bytes | Image] | None = None) -> str\ngl.nondet.exec_prompt(prompt: str, *, response_format: Literal['json'], image: bytes | Image | None = None) -> dict\n```\n\n### Equivalence Principle\n\nValidation for non-deterministic outputs. Two approaches:\n\n**Custom leader/validator functions** (recommended for most cases):\n```python\nresult = gl.vm.run_nondet(leader_fn, validator_fn)\nresult = gl.vm.run_nondet_unsafe(leader_fn, validator_fn)  # no type matching\n```\n\n**Convenience functions** (for common patterns):\n| Type | Use Case | Function |\n|------|----------|----------|\n| Strict | Exact outputs | `gl.eq_principle.strict_eq()` |\n| Comparative | Similar outputs | `gl.eq_principle.prompt_comparative()` |\n| Non-Comparative | Subjective assessments | `gl.eq_principle.prompt_non_comparative()` |\n\n### Key Documentation Links\n\n- [Introduction to Intelligent Contracts](https://docs.genlayer.com/developers/intelligent-contracts/introduction)\n- [Storage](https://docs.genlayer.com/developers/intelligent-contracts/storage)\n- [Deploying Contracts](https://docs.genlayer.com/developers/intelligent-contracts/deploying)\n- [Crafting Prompts](https://docs.genlayer.com/developers/intelligent-contracts/crafting-prompts)\n- [Contract Examples](https://docs.genlayer.com/developers/intelligent-contracts/examples/storage)\n- [Testing Contracts](https://docs.genlayer.com/developers/decentralized-applications/testing)\n</yakaai_skills>"}