{"id":"c1e0a10b-c8f3-4257-915f-a0378f37c945","entityType":"agent","slug":"crewai-swarmstate-swarmstate","name":"swarmstate","canonicalUrl":"https://www.xpersona.co/agent/crewai-swarmstate-swarmstate","canonicalPath":"/agent/crewai-swarmstate-swarmstate","generatedAt":"2026-10-09T21:52:49.286Z","source":"GITHUB_REPOS","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T14:54:07.812Z","emptyReason":null},"description":"Drop-in state backend for LangGraph, CrewAI & custom agent loops — Rust core, framework-agnostic, built for production. swarmstate $1 $1 $1 Drop-in state backend for LangGraph, CrewAI & custom agent loops - Rust core, framework-agnostic, built for production. **Constant-time checkpoint reads** — get_tuple stays at ~7 µs whether a thread holds 5 or 2 000 checkpoints, where LangGraph's InMemorySaver climbs from ~5 µs to ~40 µs — and **O(1)** state snapshots: ~0.5 µs at any size, against 50 ms to deepcopy a 50 000-entry state. Durable wr","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 10/9/2026.","installCommand":null,"sourceUrl":"https://github.com/swarmstate/swarmstate","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/swarmstate/swarmstate","kind":"source"}],"safetyScore":66,"overallRank":22.2,"popularityScore":0,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Drop-in state backend for LangGraph, CrewAI & custom agent loops — Rust core, framework-agnostic, built for production. swarmstate $1 $1 $1 Drop-in state backen"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T14:54:07.812Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"crewai","status":"self-declared"},{"label":"multi-agent","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":3,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"crewai","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"multi-agent","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:crewai|supported|profile capability:multi-agent|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-10-09T14:54:07.812Z","emptyReason":"No source adoption metrics were available."},"stars":0,"forks":0,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-10-09T14:54:07.807Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T14:54:07.812Z","lastCrawledAt":"2026-10-09T14:54:07.807Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-16T14:54:07.807Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"GITHUB REPOS","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":null,"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/crewai-swarmstate-swarmstate/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-swarmstate-swarmstate/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-swarmstate-swarmstate/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/crewai-swarmstate-swarmstate/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-swarmstate-swarmstate/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-swarmstate-swarmstate/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"GITHUB_REPOS","generatedAt":"2026-10-09T21:52:49.285Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/crewai-swarmstate-swarmstate/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-swarmstate-swarmstate/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-swarmstate-swarmstate/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-swarmstate-swarmstate/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":"GITHUB REPOS","verified":false,"confidence":"high","updatedAt":"2026-10-09T14:54:07.812Z","emptyReason":null},"readme":"# swarmstate\n\n[![PyPI](https://img.shields.io/pypi/v/swarmstate)](https://pypi.org/project/swarmstate/)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.22067264.svg)](https://doi.org/10.5281/zenodo.22067264)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n> Drop-in state backend for LangGraph, CrewAI & custom agent loops - Rust core, framework-agnostic, built for production.\n\n> **Constant-time checkpoint reads** — `get_tuple` stays at ~7 µs whether a thread holds 5 or\n> 2 000 checkpoints, where LangGraph's `InMemorySaver` climbs from ~5 µs to ~40 µs — and **O(1)**\n> state snapshots: ~0.5 µs at any size, against 50 ms to `deepcopy` a 50 000-entry state.\n> Durable writes land on par with `SqliteSaver` at the same fsync policy (~1.9× faster than\n> its shipped default, which buys stronger durability).\n> Method, hardware and raw numbers → **[`benchmarks/`](benchmarks/)**.\n\n`swarmstate` is a **state and checkpointing backend** with a Rust core and a Python API for multi-agent\nsystems. It does not compete with visible agent frameworks; it acts as low-level infrastructure - much\nlike engines such as DuckDB, ClickHouse, Arrow, or Polars sit underneath data applications without\nreplacing them.\n\nIt solves three production pains:\n\n1. **State lock-in across frameworks** - a framework-agnostic store so migrating frameworks doesn't lose state.\n2. **Checkpoint reads that get slower as threads grow** - a Rust-backed implementation of LangGraph's\n   checkpointer interface that resolves \"the latest checkpoint\" by lookup instead of scanning a thread's keys.\n3. **Deterministic routing paid for in tokens** - a native handoff graph that resolves rule-based transitions in microseconds.\n\n## Installation\n\n```bash\npip install swarmstate            # prebuilt abi3 wheels, no compiler required\nuv add swarmstate                 # or with uv\n```\n\nOptional extras: `swarmstate[langgraph]`, `swarmstate[crewai]`, `swarmstate[redis]`,\n`swarmstate[disk]`, `swarmstate[postgres]`, `swarmstate[otel]`, `swarmstate[all]`.\n\n## Usage\n\n```python\nimport swarmstate as ss\n\nstore = ss.Store()                              # in-memory, msgpack codec\nstore.set(\"workflow\", \"onboarding\", {\"step\": 3, \"data\": {...}})\nsnap = store.snapshot()                          # cheap, immutable snapshot\nstore.set(\"workflow\", \"onboarding\", {\"step\": 4})\nstore.restore(snap)                              # rollback\nstore.get(\"workflow\", \"onboarding\")              # -> {\"step\": 3, \"data\": {...}}\n\nsnap2 = store.snapshot()\nsnap2.diff(snap)                                 # {\"added\": [...], \"removed\": [...], \"changed\": [...]}\n\n# Retention is opt-in: a snapshot the store keeps pins the state it saw\nhist = ss.Store(max_history=10)                  # 0 (default) keeps none, None keeps all\nhist.history()                                   # -> [Snapshot, ...], oldest first\n\n# Batch ops: one GIL release / round-trip for the whole set\nstore.set_many([(\"workflow\", \"a\", {...}), (\"workflow\", \"b\", {...})])\nstore.get_many([(\"workflow\", \"a\"), (\"workflow\", \"b\")])   # -> [..., ...], order preserved\n\n# Deterministic, LLM-free routing (resolved natively in Rust)\ng = ss.HandoffGraph()\ng.add_edge(\"triage\", \"billing\", when=\"category == 'billing'\")\ng.add_edge(\"triage\", \"human\")                    # unconditional default\ng.route(\"triage\", {\"category\": \"billing\"})       # -> \"billing\"\n```\n\nDrop-in LangGraph checkpointer (`pip install \"swarmstate[langgraph]\"`):\n\n```python\nfrom swarmstate.integrations.langgraph import SwarmStateSaver\n\ngraph = builder.compile(checkpointer=SwarmStateSaver())   # replaces SqliteSaver, 1 line\n```\n\nBounded memory for long-running threads — checkpointers keep every step by\ndefault, which for a service that never restarts means growth without end:\n\n```python\nsaver = SwarmStateSaver(max_checkpoints_per_thread=8)     # keep the newest N per thread\n```\n\nOlder checkpoints are dropped with their pending writes and channel blobs. On a\n300-invocation thread that is **0.5 MB instead of 28 MB**, and the thread still\nresumes; time travel is limited to the retained window, so size it to taste.\n\nOptional metrics on checkpoint operations (opt-in, zero overhead when unused):\n\n```python\nfrom swarmstate.observability import InMemoryMetrics       # or OpenTelemetryMetrics\n\nmetrics = InMemoryMetrics()\nsaver = SwarmStateSaver(metrics=metrics)\n# ... run the graph ...\nmetrics.summary()   # {\"put\": {\"count\": 12, \"p50_ms\": 0.006, ...}, \"get_tuple\": {...}}\n```\n\nOpenTelemetry tracing (each checkpoint op becomes a `swarmstate.checkpoint.<op>` span):\n\n```python\nfrom swarmstate.observability import get_tracer     # needs swarmstate[otel]\n\nsaver = SwarmStateSaver(tracer=get_tracer())         # composes with metrics=...\n```\n\n## Status\n\nEarly development.\n\n- **M0 (scaffolding)** ✅ - Rust core builds; `import swarmstate` works.\n- **M1 (Rust store)** ✅ - concurrent KV store, msgpack codec, O(1) immutable snapshots,\n  incremental diffs, GIL released on hot paths.\n- **M2 (HandoffGraph)** ✅ - deterministic conditional routing with a safe Rust condition\n  evaluator (no `eval`), cycle detection.\n- **M3 (LangGraph adapter)** ✅ - `SwarmStateSaver`, a drop-in `BaseCheckpointSaver`\n  backed by the `Store`; snapshot/roll back the whole checkpoint DB at once.\n- **M4 (Benchmarks)** ✅ - durable-vs-durable and in-memory-vs-in-memory comparisons on\n  LangGraph's interface, read latency as a thread grows, `Store.snapshot()` vs `deepcopy`,\n  and concurrency scaling. Reproducible: [`benchmarks/run.py`](benchmarks/run.py); method\n  and results in [`benchmarks/README.md`](benchmarks/README.md).\n- **M5 (CrewAI adapter + backends)** ✅ - persistent, drop-in checkpointer backends\n  `RedisStore`, `DiskStore` (SQLite) and `PostgresStore`, all msgpack wire-format, plus\n  `SwarmStateStorage` (portable memory backed by a shared `Store`).\n- **M6 (docs · wheels · PyPI)** ✅ - full docs site, benchmarks, cross-platform abi3\n  wheels, and PyPI publishing via Trusted Publishing (OIDC).\n- **Observability** ✅ - opt-in metrics hooks and OpenTelemetry **tracing** on checkpoint\n  ops (`put` / `put_writes` / `get_tuple`): an in-memory sink, an OpenTelemetry metrics\n  sink, and per-op spans (`swarmstate[otel]`). Zero overhead when unused. Strict `mypy` in CI.\n- **Free-threaded (no-GIL) ready** ✅ - the Rust core declares free-threaded support, so on\n  a free-threaded CPython build (`cp313t`) the store **doesn't collapse under threads the way\n  the GIL build does**: on a set+get workload at 8 threads it sustains **~1.8M ops/s vs ~130k\n  on GIL Python (over 10x)**, where the GIL build gets *much slower* as threads are added.\n  (These workloads are allocation-bound, so neither scales linearly with cores; the win is\n  avoiding the GIL's collapse.) Version-specific `cp313t` and `cp314t` wheels ship for Linux\n  (x86_64/aarch64), macOS (arm64) and Windows (x64) alongside the abi3 ones.\n- **Batch API** ✅ - `Store.set_many` / `get_many` (and on every backend) amortize the\n  per-call overhead over a batch: one GIL release for the in-memory core, one round-trip for\n  networked backends. On free-threaded at 8 threads, `set_many` is ~3x the throughput of\n  individual sets. `SwarmStateSaver` uses it internally: `put_writes` (and the `incremental`\n  channel blobs) flush all writes of a step in a single `set_many`, so fan-out steps that emit\n  many pending writes pay one lock/round-trip instead of one per write.\n\n## Examples\n\nRunnable, offline, deterministic demos in [`examples/`](examples/):\n\n- [`support_triage.py`](examples/support_triage.py) - a LangGraph workflow tying together\n  `HandoffGraph` routing, `SwarmStateSaver` checkpointing and snapshot/restore time-travel.\n- [`state_portability.py`](examples/state_portability.py) - state as standard msgpack\n  bytes, read back and cross-checked against the `msgpack` package.\n\n## Documentation\n\nGuide, tutorials and API reference: **[swarmstate.github.io](https://swarmstate.github.io/)**\n— [the store](https://swarmstate.github.io/guide/store/),\n[snapshots & diffs](https://swarmstate.github.io/guide/snapshots/),\n[the LangGraph checkpointer](https://swarmstate.github.io/guide/langgraph/),\n[persistent backends](https://swarmstate.github.io/guide/disk/),\n[the handoff graph](https://swarmstate.github.io/guide/handoff/) and the\n[benchmark method](https://swarmstate.github.io/benchmarks/). The site is built from\n[`swarmstate/swarmstate.github.io`](https://github.com/swarmstate/swarmstate.github.io).\n\n## Development\n\n```bash\npython -m venv .venv && source .venv/bin/activate\npip install maturin pytest\nmaturin develop --release     # compile the Rust core and install it locally\ncargo test                    # Rust core tests\npytest -q                     # Python API tests\n\n```\n\n## Citing\n\nIf you use `swarmstate` in academic work, please cite it. GitHub's **\"Cite this\nrepository\"** button (from [`CITATION.cff`](CITATION.cff)) produces ready-made APA and\nBibTeX entries. To cite the archived software release, use its Zenodo DOI\n([10.5281/zenodo.22067264](https://doi.org/10.5281/zenodo.22067264)) — it always resolves\nto the latest version:\n\n```bibtex\n@software{salmeron_swarmstate,\n  author    = {Salmeron, Jose L.},\n  title     = {{swarmstate}: A state and checkpointing backend for multi-agent\n               systems with a Rust core},\n  year      = {2026},\n  publisher = {Zenodo},\n  doi       = {10.5281/zenodo.22067264},\n  url       = {https://github.com/swarmstate/swarmstate}\n}\n```\n\n<sub>The DOI is minted when the first release is archived on Zenodo. Replacing\n`10.5281/zenodo.XXXXXXXX` here, in [`CITATION.cff`](CITATION.cff) and on the docs site is\nall it takes — the placeholder is deliberate, so that\nnothing cites an identifier that does not resolve.</sub>\n\n## License\n\nMIT\n","readmeExcerpt":"swarmstate $1 $1 $1 Drop-in state backend for LangGraph, CrewAI & custom agent loops - Rust core, framework-agnostic, built for production. **Constant-time checkpoint reads** — get_tuple stays at ~7 µs whether a thread holds 5 or 2 000 checkpoints, where LangGraph's InMemorySaver climbs from ~5 µs to ~40 µs — and **O(1)** state snapshots: ~0.5 µs at any size, against 50 ms to deepcopy a 50 000-entry state. Durable wr","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"pip install swarmstate            # prebuilt abi3 wheels, no compiler required\nuv add swarmstate                 # or with uv"},{"language":"python","snippet":"import swarmstate as ss\n\nstore = ss.Store()                              # in-memory, msgpack codec\nstore.set(\"workflow\", \"onboarding\", {\"step\": 3, \"data\": {...}})\nsnap = store.snapshot()                          # cheap, immutable snapshot\nstore.set(\"workflow\", \"onboarding\", {\"step\": 4})\nstore.restore(snap)                              # rollback\nstore.get(\"workflow\", \"onboarding\")              # -> {\"step\": 3, \"data\": {...}}\n\nsnap2 = store.snapshot()\nsnap2.diff(snap)                                 # {\"added\": [...], \"removed\": [...], \"changed\": [...]}\n\n# Retention is opt-in: a snapshot the store keeps pins the state it saw\nhist = ss.Store(max_history=10)                  # 0 (default) keeps none, None keeps all\nhist.history()                                   # -> [Snapshot, ...], oldest first\n\n# Batch ops: one GIL release / round-trip for the whole set\nstore.set_many([(\"workflow\", \"a\", {...}), (\"workflow\", \"b\", {...})])\nstore.get_many([(\"workflow\", \"a\"), (\"workflow\", \"b\")])   # -> [..., ...], order preserved\n\n# Deterministic, LLM-free routing (resolved natively in Rust)\ng = ss.HandoffGraph()\ng.add_edge(\"triage\", \"billing\", when=\"category == 'billing'\")\ng.add_edge(\"triage\", \"human\")                    # unconditional default\ng.route(\"triage\", {\"category\": \"billing\"})       # -> \"billing\""},{"language":"python","snippet":"from swarmstate.integrations.langgraph import SwarmStateSaver\n\ngraph = builder.compile(checkpointer=SwarmStateSaver())   # replaces SqliteSaver, 1 line"},{"language":"python","snippet":"saver = SwarmStateSaver(max_checkpoints_per_thread=8)     # keep the newest N per thread"},{"language":"python","snippet":"from swarmstate.observability import InMemoryMetrics       # or OpenTelemetryMetrics\n\nmetrics = InMemoryMetrics()\nsaver = SwarmStateSaver(metrics=metrics)\n# ... run the graph ...\nmetrics.summary()   # {\"put\": {\"count\": 12, \"p50_ms\": 0.006, ...}, \"get_tuple\": {...}}"},{"language":"python","snippet":"from swarmstate.observability import get_tracer     # needs swarmstate[otel]\n\nsaver = SwarmStateSaver(tracer=get_tracer())         # composes with metrics=..."}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["python"],"docsSourceLabel":"GITHUB REPOS","editorialOverview":"Drop-in state backend for LangGraph, CrewAI & custom agent loops — Rust core, framework-agnostic, built for production. swarmstate $1 $1 $1 Drop-in state backend for LangGraph, CrewAI & custom agent loops - Rust core, framework-agnostic, built for production. **Constant-time checkpoint reads** — get_tuple stays at ~7 µs whether a thread holds 5 or 2 000 checkpoints, where LangGraph's InMemorySaver climbs from ~5 µs to ~40 µs — and **O(1)** state snapshots: ~0.5 µs at any size, against 50 ms to deepcopy a 50 000-entry state. Durable wr","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":365,"uniquenessScore":68,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T14:54:07.812Z","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-10-09T14:54:07.812Z","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-09T21:52:49.286Z","emptyReason":null},"items":[{"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-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"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":"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/github_repos","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}