{"id":"9965db94-91ba-4491-bd7d-218bfaa36aba","entityType":"agent","slug":"clawhub-skills-acastellana-genlayer-dev","name":"genlayer-dev","canonicalUrl":"https://www.xpersona.co/agent/clawhub-skills-acastellana-genlayer-dev","canonicalPath":"/agent/clawhub-skills-acastellana-genlayer-dev","generatedAt":"2026-10-09T13:24:39.739Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"GenLayer Intelligent Contracts --- name: genlayer-dev-claw-skill version: 1.0.0 description: Build GenLayer Intelligent Contracts - Python smart contracts with LLM calls and web access. Use for writing/deploying contracts, SDK reference, CLI commands, equivalence principles, storage types. Triggers: write intelligent contract, genlayer contract, genvm, gl.Contract, deploy genlayer, genlayer CLI, genlayer SDK, DynArray, TreeMap, gl.nondet, gl.eq_pr","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.","installCommand":"clawhub skill install skills:acastellana:genlayer-dev","sourceUrl":"https://github.com/openclaw/skills/tree/main/skills/acastellana/genlayer-dev","homepage":null,"primaryLinks":[{"label":"View on ClawHub","url":"https://github.com/openclaw/skills/tree/main/skills/acastellana/genlayer-dev","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":50,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"GenLayer Intelligent Contracts --- name: genlayer-dev-claw-skill version: 1.0.0 description: Build GenLayer Intelligent Contracts - Python smart contracts with "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"call","status":"self-declared"},{"label":"modify","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":3,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"call","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"modify","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:call|supported|profile capability:modify|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No source adoption metrics were available."},"stars":null,"forks":null,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-02-25T05:55:32.423Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-25T05:55:32.423Z","lastIndexedAt":null,"nextCrawlAt":"2026-02-26T05:55:32.423Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install skills:acastellana:genlayer-dev","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T13:24:39.739Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-acastellana-genlayer-dev/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"---\nname: genlayer-dev-claw-skill\nversion: 1.0.0\ndescription: Build GenLayer Intelligent Contracts - Python smart contracts with LLM calls and web access. Use for writing/deploying contracts, SDK reference, CLI commands, equivalence principles, storage types. Triggers: write intelligent contract, genlayer contract, genvm, gl.Contract, deploy genlayer, genlayer CLI, genlayer SDK, DynArray, TreeMap, gl.nondet, gl.eq_principle, prompt_comparative, strict_eq, genlayer deploy, genlayer up. (For explaining GenLayer concepts, use genlayer-claw-skill instead.)\n---\n\n# GenLayer Intelligent Contracts\n\nGenLayer enables **Intelligent Contracts** - Python smart contracts that can call LLMs, fetch web data, and handle non-deterministic operations while maintaining blockchain consensus.\n\n## Quick Start\n\n### Minimal Contract\n```python\n# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\n\nclass MyContract(gl.Contract):\n    value: str\n    \n    def __init__(self, initial: str):\n        self.value = initial\n    \n    @gl.public.view\n    def get_value(self) -> str:\n        return self.value\n    \n    @gl.public.write\n    def set_value(self, new_value: str) -> None:\n        self.value = new_value\n```\n\n### Contract with LLM\n```python\n# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\nimport json\n\nclass AIContract(gl.Contract):\n    result: str\n    \n    def __init__(self):\n        self.result = \"\"\n    \n    @gl.public.write\n    def analyze(self, text: str) -> None:\n        prompt = f\"Analyze this text and respond with JSON: {text}\"\n        \n        def get_analysis():\n            return gl.nondet.exec_prompt(prompt)\n        \n        # All validators must get the same result\n        self.result = gl.eq_principle.strict_eq(get_analysis)\n    \n    @gl.public.view\n    def get_result(self) -> str:\n        return self.result\n```\n\n### Contract with Web Access\n```python\n# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\n\nclass WebContract(gl.Contract):\n    content: str\n    \n    def __init__(self):\n        self.content = \"\"\n    \n    @gl.public.write\n    def fetch(self, url: str) -> None:\n        url_copy = url  # Capture for closure\n        \n        def get_page():\n            return gl.nondet.web.render(url_copy, mode=\"text\")\n        \n        self.content = gl.eq_principle.strict_eq(get_page)\n    \n    @gl.public.view\n    def get_content(self) -> str:\n        return self.content\n```\n\n## Core Concepts\n\n### Contract Structure\n1. **Version header**: `# v0.1.0` (required)\n2. **Dependencies**: `# { \"Depends\": \"py-genlayer:latest\" }`\n3. **Import**: `from genlayer import *`\n4. **Class**: Extend `gl.Contract` (only ONE per file)\n5. **State**: Class-level typed attributes\n6. **Constructor**: `__init__` (not public)\n7. **Methods**: Decorated with `@gl.public.view` or `@gl.public.write`\n\n### Method Decorators\n| Decorator | Purpose | Can Modify State |\n|-----------|---------|------------------|\n| `@gl.public.view` | Read-only queries | No |\n| `@gl.public.write` | State mutations | Yes |\n| `@gl.public.write.payable` | Receive value + mutate | Yes |\n\n### Storage Types\nReplace standard Python types with GenVM storage-compatible types:\n\n| Python Type | GenVM Type | Usage |\n|-------------|------------|-------|\n| `int` | `u32`, `u64`, `u256`, `i32`, `i64`, etc. | Sized integers |\n| `int` (unbounded) | `bigint` | Arbitrary precision (avoid) |\n| `list[T]` | `DynArray[T]` | Dynamic arrays |\n| `dict[K,V]` | `TreeMap[K,V]` | Ordered maps |\n| `str` | `str` | Strings (unchanged) |\n| `bool` | `bool` | Booleans (unchanged) |\n\n**⚠️ `int` is NOT supported!** Always use sized integers.\n\n### Address Type\n```python\n# Creating addresses\naddr = Address(\"0x03FB09251eC05ee9Ca36c98644070B89111D4b3F\")\n\n# Get sender\nsender = gl.message.sender_address\n\n# Conversions\nhex_str = addr.as_hex      # \"0x03FB...\"\nbytes_val = addr.as_bytes  # bytes\n```\n\n### Custom Data Types\n```python\nfrom dataclasses import dataclass\n\n@allow_storage\n@dataclass\nclass UserData:\n    name: str\n    balance: u256\n    active: bool\n\nclass MyContract(gl.Contract):\n    users: TreeMap[Address, UserData]\n```\n\n## Non-Deterministic Operations\n\n### The Problem\nLLMs and web fetches produce different results across validators. GenLayer solves this with the **Equivalence Principle**.\n\n### Equivalence Principles\n\n#### 1. Strict Equality (`strict_eq`)\nAll validators must produce **identical** results.\n```python\ndef get_data():\n    return gl.nondet.web.render(url, mode=\"text\")\n\nresult = gl.eq_principle.strict_eq(get_data)\n```\n\nBest for: Factual data, boolean results, exact matches.\n\n#### 2. Prompt Comparative (`prompt_comparative`)\nLLM compares leader's result against validators' results using criteria.\n```python\ndef get_analysis():\n    return gl.nondet.exec_prompt(prompt)\n\nresult = gl.eq_principle.prompt_comparative(\n    get_analysis,\n    \"The sentiment classification must match\"\n)\n```\n\nBest for: LLM tasks where semantic equivalence matters.\n\n#### 3. Prompt Non-Comparative (`prompt_non_comparative`)\nValidators verify the leader's result meets criteria (don't re-execute).\n```python\nresult = gl.eq_principle.prompt_non_comparative(\n    lambda: input_data,  # What to process\n    task=\"Summarize the key points\",\n    criteria=\"Summary must be under 100 words and factually accurate\"\n)\n```\n\nBest for: Expensive operations, subjective tasks.\n\n#### 4. Custom Leader/Validator Pattern\n```python\nresult = gl.vm.run_nondet(\n    leader=lambda: expensive_computation(),\n    validator=lambda leader_result: verify(leader_result)\n)\n```\n\n### Non-Deterministic Functions\n\n| Function | Purpose |\n|----------|---------|\n| `gl.nondet.exec_prompt(prompt)` | Execute LLM prompt |\n| `gl.nondet.web.render(url, mode)` | Fetch web page (`mode=\"text\"` or `\"html\"`) |\n\n**⚠️ Rules:**\n- Must be called inside equivalence principle functions\n- Cannot access storage directly\n- Copy storage data to memory first with `gl.storage.copy_to_memory()`\n\n## Contract Interactions\n\n### Call Other Contracts\n```python\n# Dynamic typing\nother = gl.get_contract_at(Address(\"0x...\"))\nresult = other.view().some_method()\n\n# Static typing (better IDE support)\n@gl.contract_interface\nclass TokenInterface:\n    class View:\n        def balance_of(self, owner: Address) -> u256: ...\n    class Write:\n        def transfer(self, to: Address, amount: u256) -> bool: ...\n\ntoken = TokenInterface(Address(\"0x...\"))\nbalance = token.view().balance_of(my_address)\n```\n\n### Emit Messages (Async Calls)\n```python\nother = gl.get_contract_at(addr)\nother.emit(on='accepted').update_status(\"active\")\nother.emit(on='finalized').confirm_transaction()\n```\n\n### Deploy Contracts\n```python\nchild_addr = gl.deploy_contract(code=contract_code, salt=u256(1))\n```\n\n### EVM Interop\n```python\n@gl.evm.contract_interface\nclass ERC20:\n    class View:\n        def balance_of(self, owner: Address) -> u256: ...\n    class Write:\n        def transfer(self, to: Address, amount: u256) -> bool: ...\n\ntoken = ERC20(evm_address)\nbalance = token.view().balance_of(addr)\ntoken.emit().transfer(recipient, u256(100))  # Messages only on finality\n```\n\n## CLI Commands\n\n### Setup\n```bash\nnpm install -g genlayer\ngenlayer init      # Download components\ngenlayer up        # Start local network\n```\n\n### Deployment\n```bash\n# Direct deploy\ngenlayer deploy --contract my_contract.py\n\n# With constructor args\ngenlayer deploy --contract my_contract.py --args \"Hello\" 42\n\n# To testnet\ngenlayer network set testnet-asimov\ngenlayer deploy --contract my_contract.py\n```\n\n### Interaction\n```bash\n# Read (view methods)\ngenlayer call --address 0x... --function get_value\n\n# Write\ngenlayer write --address 0x... --function set_value --args \"new_value\"\n\n# Get schema\ngenlayer schema --address 0x...\n\n# Check transaction\ngenlayer receipt --tx-hash 0x...\n```\n\n### Networks\n```bash\ngenlayer network                    # Show current\ngenlayer network list               # Available networks\ngenlayer network set localnet       # Local dev\ngenlayer network set studionet      # Hosted dev\ngenlayer network set testnet-asimov # Testnet\n```\n\n## Best Practices\n\n### Prompt Engineering\n```python\nprompt = f\"\"\"\nAnalyze this text and classify the sentiment.\n\nText: {text}\n\nRespond using ONLY this JSON format:\n{{\"sentiment\": \"positive\" | \"negative\" | \"neutral\", \"confidence\": float}}\n\nOutput ONLY valid JSON, no other text.\n\"\"\"\n```\n\n### Security: Prompt Injection\n- **Restrict inputs**: Minimize user-controlled text in prompts\n- **Restrict outputs**: Define exact output formats\n- **Validate**: Check parsed results match expected schema\n- **Simplify logic**: Clear contract flow reduces attack surface\n\n### Error Handling\n```python\nfrom genlayer import UserError\n\n@gl.public.write\ndef safe_operation(self, value: int) -> None:\n    if value <= 0:\n        raise UserError(\"Value must be positive\")\n    # ... proceed\n```\n\n### Memory Management\n```python\n# Copy storage to memory for non-det blocks\ndata_copy = gl.storage.copy_to_memory(self.some_data)\n\ndef process():\n    return gl.nondet.exec_prompt(f\"Process: {data_copy}\")\n\nresult = gl.eq_principle.strict_eq(process)\n```\n\n## Common Patterns\n\n### Token with AI Transfer Validation\nSee `references/examples.md` → LLM ERC20\n\n### Prediction Market\nSee `references/examples.md` → Football Prediction Market\n\n### Vector Search / Embeddings\nSee `references/examples.md` → Log Indexer\n\n## Debugging\n\n1. **GenLayer Studio**: Use `genlayer up` for local testing\n2. **Logs**: Filter by transaction hash, debug level\n3. **Print statements**: `print()` works in contracts (debug only)\n\n## Reference Files\n- `references/sdk-api.md` - Complete SDK API reference\n- `references/equivalence-principles.md` - Consensus patterns in depth\n- `references/examples.md` - Full annotated contract examples (incl. production oracle)\n- `references/deployment.md` - CLI, networks, deployment workflow\n- `references/genvm-internals.md` - VM architecture, storage, ABI details\n\n## Links\n- Docs: https://docs.genlayer.com\n- SDK: https://sdk.genlayer.com\n- Studio: https://studio.genlayer.com\n- GitHub: https://github.com/genlayerlabs\n","readmeExcerpt":"--- name: genlayer-dev-claw-skill version: 1.0.0 description: Build GenLayer Intelligent Contracts - Python smart contracts with LLM calls and web access. Use for writing/deploying contracts, SDK reference, CLI commands, equivalence principles, storage types. Triggers: write intelligent contract, genlayer contract, genvm, gl.Contract, deploy genlayer, genlayer CLI, genlayer SDK, DynArray, TreeMap, gl.nondet, gl.eq_pr","codeSnippets":[],"executableExamples":[{"language":"python","snippet":"# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\n\nclass MyContract(gl.Contract):\n    value: str\n    \n    def __init__(self, initial: str):\n        self.value = initial\n    \n    @gl.public.view\n    def get_value(self) -> str:\n        return self.value\n    \n    @gl.public.write\n    def set_value(self, new_value: str) -> None:\n        self.value = new_value"},{"language":"python","snippet":"# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\nimport json\n\nclass AIContract(gl.Contract):\n    result: str\n    \n    def __init__(self):\n        self.result = \"\"\n    \n    @gl.public.write\n    def analyze(self, text: str) -> None:\n        prompt = f\"Analyze this text and respond with JSON: {text}\"\n        \n        def get_analysis():\n            return gl.nondet.exec_prompt(prompt)\n        \n        # All validators must get the same result\n        self.result = gl.eq_principle.strict_eq(get_analysis)\n    \n    @gl.public.view\n    def get_result(self) -> str:\n        return self.result"},{"language":"python","snippet":"# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\n\nclass WebContract(gl.Contract):\n    content: str\n    \n    def __init__(self):\n        self.content = \"\"\n    \n    @gl.public.write\n    def fetch(self, url: str) -> None:\n        url_copy = url  # Capture for closure\n        \n        def get_page():\n            return gl.nondet.web.render(url_copy, mode=\"text\")\n        \n        self.content = gl.eq_principle.strict_eq(get_page)\n    \n    @gl.public.view\n    def get_content(self) -> str:\n        return self.content"},{"language":"python","snippet":"# Creating addresses\naddr = Address(\"0x03FB09251eC05ee9Ca36c98644070B89111D4b3F\")\n\n# Get sender\nsender = gl.message.sender_address\n\n# Conversions\nhex_str = addr.as_hex      # \"0x03FB...\"\nbytes_val = addr.as_bytes  # bytes"},{"language":"python","snippet":"from dataclasses import dataclass\n\n@allow_storage\n@dataclass\nclass UserData:\n    name: str\n    balance: u256\n    active: bool\n\nclass MyContract(gl.Contract):\n    users: TreeMap[Address, UserData]"},{"language":"python","snippet":"def get_data():\n    return gl.nondet.web.render(url, mode=\"text\")\n\nresult = gl.eq_principle.strict_eq(get_data)"}],"parameters":{},"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["typescript"],"docsSourceLabel":"CLAWHUB","editorialOverview":"GenLayer Intelligent Contracts --- name: genlayer-dev-claw-skill version: 1.0.0 description: Build GenLayer Intelligent Contracts - Python smart contracts with LLM calls and web access. Use for writing/deploying contracts, SDK reference, CLI commands, equivalence principles, storage types. Triggers: write intelligent contract, genlayer contract, genvm, gl.Contract, deploy genlayer, genlayer CLI, genlayer SDK, DynArray, TreeMap, gl.nondet, gl.eq_pr","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":359,"uniquenessScore":68,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:24:39.739Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}