[
  {
    "owner": "refactoringhq",
    "name": "tolaria",
    "full_name": "refactoringhq/tolaria",
    "url": "https://github.com/refactoringhq/tolaria",
    "description": "Desktop app to manage markdown knowledge bases",
    "language": "TypeScript",
    "total_stars": 17479,
    "forks": 1205,
    "stars_this_period": 249,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "AGPL-3.0",
      "open_issues": 72,
      "created_at": "2026-02-14T19:43:14Z",
      "pushed_at": "2026-06-29T18:37:56Z",
      "homepage": "https://tolaria.md",
      "default_branch": "main",
      "forks": 1205,
      "watchers": 47,
      "archived": false,
      "size_kb": 93333
    },
    "readme_content": "![Latest stable](https://img.shields.io/github/v/release/refactoringhq/tolaria?display_name=tag) [![CI](https://github.com/refactoringhq/tolaria/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/refactoringhq/tolaria/actions/workflows/ci.yml) [![Codecov](https://codecov.io/gh/refactoringhq/tolaria/graph/badge.svg?branch=main)](https://codecov.io/gh/refactoringhq/tolaria) [![CodeScene Hotspot Code Health](https://codescene.io/projects/76865/status-badges/hotspot-code-health)](https://codescene.io/projects/76865)\n\n# 💧 Tolaria\n\nTolaria is a desktop app for macOS, Windows, and Linux for managing **markdown knowledge bases**. People use it for a variety of use cases:\n\n* Operate second brains and personal knowledge\n* Organize company docs as context for AI\n* Store OpenClaw/assistants memory and procedures\n\nPersonally, I use it to **run my life** (hey 👋 [Luca here](http://x.com/lucaronin)). I have a massive workspace of 10,000+ notes, which are the result of my [Refactoring](https://refactoring.fm/) work + a ton of personal journaling and *second braining*.\n\n<img width=\"1000\" height=\"656\" alt=\"1776506856823-CleanShot_2026-04-18_at_12 06 57_2x\" src=\"https://github.com/user-attachments/assets/8aeafb0a-b236-43c2-a083-ec111f903c38\" />\n\n## Walkthroughs\n\nYou can find some Loom walkthroughs below — they are short and to the point:\n- [How I Organize My Own Tolaria Workspace](https://www.loom.com/share/bb3aaffa238b4be0bd62e4464bca2528)\n- [My Inbox Workflow](https://www.loom.com/share/dffda263317b4fa8b47b59cdf9330571)\n- [How I Save Web Resources to Tolaria](https://www.loom.com/share/8a3c1776f801402ebbf4d7b0f31e9882)\n\n## Principles\n\n- 📑 **Files-first** — Your notes are plain markdown files. They're portable, work with any editor, and require no export step. Your data belongs to you, not to any app.\n- 🔌 **Git-first** — Every vault is a git repository. You get full version history, the ability to use any git remote, and zero dependency on Tolaria servers.\n- 🛜 **Offline-first, zero lock-in** — No accounts, no subscriptions, no cloud dependencies. Your vault works completely offline and always will. If you stop using Tolaria, you lose nothing.\n- 🔬 **Open source** — Tolaria is free and open source. I built this for [myself](https://x.com/lucaronin) and for sharing it with others.\n- 📋 **Standards-based** — Notes are markdown files with YAML frontmatter. No proprietary formats, no locked-in data. Everything works with standard tools if you decide to move away from Tolaria.\n- 🔍 **Types as lenses, not schemas** — Types in Tolaria are navigation aids, not enforcement mechanisms. There's no required fields, no validation, just helpful categories for finding notes.\n- 🪄**AI-first but not AI-only** — A vault of files works very well with AI agents, but you are free to use whatever you want. We support Claude Code, Codex CLI, and Gemini CLI setup paths, but you can edit the vault with any AI you want. We provide an AGENTS file for your agents to figure out.\n- ⌨️ **Keyboard-first** — Tolaria is designed for power-users who want to use keyboard as much as possible. A lot of how we designed the Editor and the Command Palette is based on this.\n- 💪 **Built from real use** — Tolaria was created for manage my personal vault of 10,000+ notes, and I use it every day. Every feature exists because it solved a real problem.\n\n## Installation\n\n### Homebrew\n\nInstall via Homebrew on macOS:\n\n```batch\nbrew install --cask tolaria\n```\n\n### Download from releases\n\nDownload the [latest release here](https://refactoringhq.github.io/tolaria/download/) for macOS, Windows, or Linux. Windows installers are Authenticode-signed; company-managed devices may still require IT approval of the Tolaria publisher before first install.\n\n## Getting started\n\nWhen you open Tolaria for the first time you get the chance of cloning the [getting started vault](https://github.com/refactoringhq/tolaria-getting-started) — which gives you a walkthrough of the whole app.\n\nThe public user docs live in [`site/`](site/) and are published to GitHub Pages. Start with [Install Tolaria](site/start/install.md), then [First Launch](site/start/first-launch.md).\n\n## Open source and local setup\n\nTolaria is open source and built with Tauri, React, and TypeScript. If you want to run or contribute to the app locally, here is [how to get started](https://github.com/refactoringhq/tolaria/blob/main/docs/GETTING-STARTED.md). You can also find the gist below 👇\n\n### Prerequisites\n\n- Node.js 20+\n- pnpm 8+\n- Rust stable\n- macOS or Linux for development\n\n#### Linux system dependencies\n\nTauri 2 on Linux requires WebKit2GTK 4.1 and GTK 3:\n\n- Arch / Manjaro:\n  ```bash\n  sudo pacman -S --needed webkit2gtk-4.1 base-devel curl wget file openssl \\\n    appmenu-gtk-module libappindicator-gtk3 librsvg\n  ```\n- Debian / Ubuntu (22.04+):\n  ```bash\n  sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \\\n    libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev \\\n    libsoup-3.0-dev patchelf\n  ```\n- Fedora 38+:\n  ```bash\n  sudo dnf install webkit2gtk4.1-devel openssl-devel curl wget file \\\n    libappindicator-gtk3-devel librsvg2-devel\n  ```\n\nThe bundled MCP server still spawns the system `node` binary at runtime on Linux, so install Node from your distro package manager if you want the external AI tooling flow.\n\n### Quick start\n\n```bash\npnpm install\npnpm dev\n```\n\nOpen `http://localhost:5173` for the browser-based mock mode, or run the native desktop app with:\n\n```bash\npnpm tauri dev\n```\n\n## Tech Docs\n\n- 📐 [ARCHITECTURE.md](docs/ARCHITECTURE.md) — System design, tech stack, data flow\n- 🧩 [ABSTRACTIONS.md](docs/ABSTRACTIONS.md) — Core abstractions and models\n- 🚀 [GETTING-STARTED.md](docs/GETTING-STARTED.md) — How to navigate the codebase\n- 📚 [ADRs](docs/adr) — Architecture Decision Records\n\n## Security\n\nIf you believe you have found a security issue, please report it privately as described in [SECURITY.md](./SECURITY.md).\n\n## License\n\nTolaria is licensed under AGPL-3.0-or-later. The Tolaria name and logo remain covered by the project’s trademark policy.\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"tolaria\",\n  \"private\": true,\n  \"license\": \"AGPL-3.0-or-later\",\n  \"version\": \"0.1.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"tsc -b && vite build\",\n    \"agent-docs\": \"node scripts/build-agent-docs.mjs\",\n    \"bundle-mcp\": \"node scripts/bundle-mcp-server.mjs\",\n    \"docs:dev\": \"vitepress dev site --host 127.0.0.1\",\n    \"docs:build\": \"pnpm agent-docs && vitepress build site\",\n    \"docs:preview\": \"vitepress preview site --host 127.0.0.1\",\n    \"lint\": \"eslint . --max-warnings=0\",\n    \"l10n:translate\": \"lara-cli translate\",\n    \"l10n:translate:force\": \"lara-cli translate --force\",\n    \"l10n:validate\": \"node scripts/validate-locales.mjs\",\n    \"perf:editor\": \"node scripts/editor-performance-benchmark.mjs\",\n    \"perf:editor:update\": \"node scripts/editor-performance-benchmark.mjs --update\",\n    \"preview\": \"vite preview\",\n    \"tauri\": \"tauri\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:e2e\": \"playwright test\",\n    \"playwright:smoke\": \"playwright test --config playwright.smoke.config.ts tests/smoke/autosave-low-end-typing.spec.ts tests/smoke/create-note-backing-file.spec.ts tests/smoke/delete-note-nonblocking.spec.ts tests/smoke/example.spec.ts tests/smoke/fix-crash-create-note.spec.ts tests/smoke/quick-open-create-note.spec.ts tests/smoke/save-before-note-switch.spec.ts tests/smoke/h1-untitled-auto-rename.spec.ts tests/smoke/keyboard-command-routing.spec.ts tests/smoke/missing-string-metadata-open-note.spec.ts tests/smoke/multibyte-search-snippet.spec.ts tests/smoke/pull-refresh-open-note.spec.ts tests/smoke/wikilink-path-fix.spec.ts\",\n    \"playwright:regression\": \"playwright test tests/smoke/\",\n    \"playwright:integration\": \"playwright test --config playwright.integration.config.ts\",\n    \"test:coverage\": \"node scripts/run-vitest-coverage.mjs\",\n    \"prepare\": \"husky\"\n  },\n  \"dependencies\": {\n    \"@anthropic-ai/sdk\": \"^0.78.0\",\n    \"@blocknote/code-block\": \"^0.46.2\",\n    \"@blocknote/core\": \"^0.46.2\",\n    \"@blocknote/mantine\": \"^0.46.2\",\n    \"@blocknote/react\": \"^0.46.2\",\n    \"@codemirror/commands\": \"^6.10.2\",\n    \"@codemirror/lang-javascript\": \"^6.2.5\",\n    \"@codemirror/lang-json\": \"^6.0.2\",\n    \"@codemirror/lang-markdown\": \"^6.5.0\",\n    \"@codemirror/lang-python\": \"^6.2.1\",\n    \"@codemirror/lang-sql\": \"^6.10.0\",\n    \"@codemirror/lang-yaml\": \"^6.1.2\",\n    \"@codemirror/language\": \"^6.12.2\",\n    \"@codemirror/state\": \"^6.5.4\",\n    \"@codemirror/view\": \"^6.39.16\",\n    \"@dnd-kit/core\": \"^6.3.1\",\n    \"@dnd-kit/sortable\": \"^10.0.0\",\n    \"@dnd-kit/utilities\": \"^3.2.2\",\n    \"@ironcalc/wasm\": \"0.5.4\",\n    \"@ironcalc/workbook\": \"0.5.7\",\n    \"@lezer/highlight\": \"^1.2.3\",\n    \"@mantine/core\": \"^8.3.14\",\n    \"@phosphor-icons/react\": \"^2.1.10\",\n    \"@radix-ui/react-dialog\": \"^1.1.15\",\n    \"@radix-ui/react-dropdown-menu\": \"^2.1.16\",\n    \"@radix-ui/react-select\": \"^2.2.6\",\n    \"@radix-ui/react-separator\": \"^1.1.8\",\n    \"@radix-ui/react-slot\": \"^1.2.4\",\n    \"@radix-ui/react-tabs\": \"^1.1.13\",\n    \"@radix-ui/react-tooltip\": \"^1.2.8\",\n    \"@sentry/react\": \"^10.47.0\",\n    \"@shikijs/langs\": \"3.23.0\",\n    \"@tailwindcss/vite\": \"^4.1.18\",\n    \"@tauri-apps/api\": \"^2.10.1\",\n    \"@tauri-apps/plugin-deep-link\": \"2.4.9\",\n    \"@tauri-apps/plugin-dialog\": \"^2.6.0\",\n    \"@tauri-apps/plugin-opener\": \"^2.5.3\",\n    \"@tauri-apps/plugin-process\": \"^2.3.1\",\n    \"@tauri-apps/plugin-updater\": \"^2.10.0\",\n    \"@tiptap/pm\": \"3.22.5\",\n    \"@tldraw/assets\": \"4.5.10\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"clsx\": \"^2.1.1\",\n    \"date-fns\": \"^4.1.0\",\n    \"dompurify\": \"3.4.2\",\n    \"katex\": \"^0.16.28\",\n    \"mermaid\": \"^11.14.0\",\n    \"posthog-js\": \"^1.363.5\",\n    \"radix-ui\": \"^1.4.3\",\n    \"react\": \"^19.2.0\",\n    \"react-day-picker\": \"^9.13.2\",\n    \"react-dom\": \"^19.2.0\",\n    \"react-markdown\": \"^10.1.0\",\n    \"react-virtuoso\": \"^4.18.1\",\n    \"rehype-highlight\": \"^7.0.2\",\n    \"remark-gfm\": \"^4.0.1\",\n    \"safe-regex2\": \"5.1.1\",\n    \"tailwind-merge\": \"^3.4.1\",\n    \"tailwindcss\": \"^4.1.18\",\n    \"tldraw\": \"^4.5.10\",\n    \"tw-animate-css\": \"^1.4.0\",\n    \"unicode-emoji-json\": \"^0.8.0\"\n  },\n  \"devDependencies\": {\n    \"@eslint/js\": \"^9.39.1\",\n    \"@playwright/test\": \"^1.58.2\",\n    \"@tauri-apps/cli\": \"^2.10.0\",\n    \"@testing-library/jest-dom\": \"^6.9.1\",\n    \"@testing-library/react\": \"^16.3.2\",\n    \"@translated/lara-cli\": \"^1.3.2\",\n    \"@types/node\": \"^24.10.1\",\n    \"@types/react\": \"^19.2.7\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"@types/ws\": \"^8.18.1\",\n    \"@vitejs/plugin-react\": \"^5.1.1\",\n    \"@vitest/coverage-v8\": \"^4.0.18\",\n    \"esbuild\": \"^0.27.3\",\n    \"eslint\": \"^9.39.1\",\n    \"eslint-plugin-react-hooks\": \"^7.0.1\",\n    \"eslint-plugin-react-refresh\": \"^0.4.24\",\n    \"globals\": \"^16.5.0\",\n    \"gray-matter\": \"^4.0.3\",\n    \"husky\": \"^9.1.7\",\n    \"jsdom\": \"^28.0.0\",\n    \"typescript\": \"~5.9.3\",\n    \"typescript-eslint\": \"^8.48.0\",\n    \"vite\": \"^7.3.2\",\n    \"vitepress\": \"^1.6.4\",\n    \"vitest\": \"^4.0.18\",\n    \"ws\": \"^8.19.0\"\n  },\n  \"pnpm\": {\n    \"overrides\": {\n      \"@hono/node-server\": \"1.19.13\",\n      \"express-rate-limit\"",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 10,
      "total": 98
    },
    "strategic_score": 98
  },
  {
    "owner": "topoteretes",
    "name": "cognee",
    "full_name": "topoteretes/cognee",
    "url": "https://github.com/topoteretes/cognee",
    "description": "Cognee is the open-source AI memory platform for agents. Give your AI agents persistent long-term memory across sessions with a self-hosted knowledge graph engine.",
    "language": "Python",
    "total_stars": 25635,
    "forks": 2361,
    "stars_this_period": 924,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "agent-memory",
        "agent-skills",
        "ai",
        "ai-agents",
        "ai-memory",
        "cognitive-architecture",
        "cognitive-memory",
        "context-engineering",
        "contributions-welcome",
        "good-first-issue",
        "good-first-pr",
        "graph-database",
        "graph-rag",
        "help-wanted",
        "knowledge",
        "knowledge-graph",
        "memory-management",
        "open-source",
        "vector-database"
      ],
      "license": "Apache-2.0",
      "open_issues": 429,
      "created_at": "2023-08-16T16:16:33Z",
      "pushed_at": "2026-06-29T20:25:40Z",
      "homepage": "https://www.cognee.ai",
      "default_branch": "main",
      "forks": 2361,
      "watchers": 73,
      "archived": false,
      "size_kb": 200726
    },
    "readme_content": "<div align=\"center\">\n  <a href=\"https://github.com/topoteretes/cognee\">\n    <img src=\"https://raw.githubusercontent.com/topoteretes/cognee/refs/heads/dev/assets/cognee-logo-transparent.png\" alt=\"Cognee Logo\" height=\"60\">\n  </a>\n\n  <br />\n\n  Cognee - The Open-Source AI Memory Platform for Agents\n\n  <p align=\"center\">\n  <a href=\"https://www.youtube.com/watch?v=8hmqS2Y5RVQ&t=13s\">Demo</a>\n  .\n  <a href=\"https://docs.cognee.ai/\">Docs</a>\n  .\n  <a href=\"https://cognee.ai\">Learn More</a>\n  ·\n  <a href=\"https://discord.gg/NQPKmU5CCg\">Join Discord</a>\n  ·\n  <a href=\"https://www.reddit.com/r/AIMemory/\">Join r/AIMemory</a>\n  .\n  <a href=\"https://github.com/topoteretes/cognee-community\">Community Plugins & Add-ons</a>\n  </p>\n\n\n  [![GitHub forks](https://img.shields.io/github/forks/topoteretes/cognee.svg?style=social&label=Fork&maxAge=2592000)](https://GitHub.com/topoteretes/cognee/network/)\n  [![GitHub stars](https://img.shields.io/github/stars/topoteretes/cognee.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/topoteretes/cognee/stargazers/)\n  [![GitHub commits](https://badgen.net/github/commits/topoteretes/cognee)](https://GitHub.com/topoteretes/cognee/commit/)\n  [![GitHub tag](https://badgen.net/github/tag/topoteretes/cognee)](https://github.com/topoteretes/cognee/tags/)\n  [![Downloads](https://static.pepy.tech/badge/cognee)](https://pepy.tech/project/cognee)\n  [![License](https://img.shields.io/github/license/topoteretes/cognee?colorA=00C586&colorB=000000)](https://github.com/topoteretes/cognee/blob/main/LICENSE)\n  [![Contributors](https://img.shields.io/github/contributors/topoteretes/cognee?colorA=00C586&colorB=000000)](https://github.com/topoteretes/cognee/graphs/contributors)\n  <a href=\"https://github.com/sponsors/topoteretes\"><img src=\"https://img.shields.io/badge/Sponsor-❤️-ff69b4.svg\" alt=\"Sponsor\"></a>\n\n<p>\n  <a href=\"https://trendshift.io/repositories/13955\" target=\"_blank\" style=\"display:inline-block;\">\n    <img src=\"https://trendshift.io/api/badge/repositories/13955\" alt=\"topoteretes%2Fcognee | Trendshift\" width=\"250\" height=\"55\" />\n  </a>\n</p>\n\nCognee is the open-source AI memory platform that gives AI agents persistent long-term memory across sessions. Ingest data in any format, build a self-hosted knowledge graph, and let every agent recall, connect, and act with full context\n\n  <p align=\"center\">\n  🌐 This README is also available in:\n  :\n  <!-- Keep these links. Translations will automatically update with the README. -->\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=de\">Deutsch</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=es\">Español</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=fr\">Français</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=ja\">日本語</a> |\n  <a href=\"README_ko.md\">한국어</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=pt\">Português</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=ru\">Русский</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=zh\">中文</a>\n  </p>\n\n<p align=\"center\">\n  <img src=\"assets/cognee-demo.gif\" alt=\"Cognee Demo\" width=\"80%\" />\n</p>\n</div>\n\n📄 Read the research paper: [Optimizing the Interface Between Knowledge Graphs and LLMs for Complex Reasoning](https://arxiv.org/abs/2505.24478) — Markovic et al., 2025\n\n\n## About Cognee\n\nCognee is an open-source AI memory platform for AI Agents. Ingest data in any format, and Cognee continuously builds a self-hosted knowledge graph that gives your agents persistent long-term memory across sessions. Cognee combines vector embeddings, graph reasoning, and cognitive-science-grounded ontology generation to make documents both searchable by meaning and connected by relationships that evolve as your knowledge does.\n\n:star: _Help us reach more developers and grow the cognee community. Star this repo!_\n\n:books: _Check our detailed [documentation](https://docs.cognee.ai/getting-started/installation#environment-configuration) for setup and configuration._\n\n:crab: _Available as a plugin for your OpenClaw — [cognee-openclaw](https://www.npmjs.com/package/@cognee/cognee-openclaw)_\n\n✴️ _Available as a plugin for your Claude Code — [claude-code-plugin](https://github.com/topoteretes/cognee-integrations/tree/main/integrations/claude-code)_\n\n🦀 _Available as a Rust client — [cognee-rs](https://github.com/topoteretes/cognee-rs)_\n\n🟦 _Available as a TypeScript client — [@cognee/cognee-ts](https://www.npmjs.com/package/@cognee/cognee-ts)_\n\n\n\n### Why use Cognee:\n\n- Easily Build Company Brain - unify data from various sources in one place and enable Agents with your domain knowledge\n- Knowledge infrastructure — unified ingestion, graph/vector search, runs locally, ontology grounding, multimodal\n- Persistent and Learning Agents - learn from feedback, context management, cross-agent knowledge sharing\n- Reliable and Trustworthy Agents - agentic user/tenant isolation, traceability, OTEL collector, audit traits\n\n### How it Works\n\n<p align=\"center\">\n  <img src=\"assets/remember.svg\" alt=\"Cognee Products\" width=\"80%\" />\n</p>\n\n<p align=\"center\">\n  <img src=\"assets/recall.svg\" alt=\"Cognee Recall\" width=\"80%\" />\n</p>\n\n## Basic Usage & Feature Guide\n\nTo learn more, [check out this short, end-to-end Colab walkthrough](https://colab.research.google.com/drive/12Vi9zID-M3fpKpKiaqDBvkk98ElkRPWy?usp=sharing) of Cognee's core features.\n\n[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/12Vi9zID-M3fpKpKiaqDBvkk98ElkRPWy?usp=sharing)\n\n## Quickstart\n\nLet’s try Cognee in just a few lines of code.\n\n### Prerequisites\n\n- Python 3.10 to 3.14\n\n### Step 1: Install Cognee\n\nYou can install Cognee with **pip**, **poetry**, **uv**, or your preferred Python package manager.\n\n```bash\nuv pip install cognee\n```\n\n### Step 2: Configure the LLM\n```python\nimport os\nos.environ[\"LLM_API_KEY\"] = \"YOUR OPENAI_API_KEY\"\n```\nAlternatively, create a `.env` file using our [template](https://github.com/topoteretes/cognee/blob/main/.env.template).\n\nTo integrate other LLM providers, see our [LLM Provider Documentation](https://docs.cognee.ai/setup-configuration/llm-providers).\n\n### Step 3: Run the Pipeline\n\nCognee's API gives you four operations — `remember`, `recall`, `forget`, and `improve`:\n\n```python\nimport cognee\nimport asyncio\n\n\nasync def main():\n    # Store permanently in the knowledge graph (runs add + cognify + improve)\n    await cognee.remember(\"Cognee turns documents into AI memory.\")\n\n    # Store in session memory (fast cache, syncs to graph in background)\n    await cognee.remember(\"User prefers detailed explanations.\", session_id=\"chat_1\")\n\n    # Query with auto-routing (picks best search strategy automatically)\n    results = await cognee.recall(\"What does Cognee do?\")\n    for result in results:\n        print(result)\n\n    # Query session memory first, fall through to graph if needed\n    results = await cognee.recall(\"What does the user prefer?\", session_id=\"chat_1\")\n    for result in results:\n        print(result)\n\n    # Delete when done\n    await cognee.forget(dataset=\"main_dataset\")\n\n\nif __name__ == '__main__':\n    asyncio.run(main())\n\n```\n\n### Use the Cognee CLI\n\n```bash\ncognee-cli remember \"Cognee turns documents into AI memory.\"\n\ncognee-cli recall \"What does Cognee do?\"\n\ncognee-cli forget --all\n```\n\nTo open the local UI, run:\n```bash\ncognee-cli -ui\n```\n\n> **Note:** The MCP server launched by `cognee-cli -ui` runs inside a Docker container.\n> Docker Desktop, Colima, or any OCI-compatible runtime with a working `docker` CLI is\n> required. See [Docker & Colima Setup](docs/docker-colima-setup.md) for details.\n\n## Run with Docker\n\nPrefer containers? Cognee publishes prebuilt images to Docker Hub on every push to `main`:\n[`cognee/cognee`](https://hub.docker.com/r/cognee/cognee) (the API server) and\n[`cognee/cognee-mcp`](https://hub.docker.com/r/cognee/cognee-mcp) (the MCP server).\n\n### Option A — Docker Compose (build from source)\n\nClone the repo, create a `.env` with at least `LLM_API_KEY`, then:\n\n```bash\ncp .env.template .env   # then edit .env and set LLM_API_KEY\n\n# Start the API server (http://localhost:8000)\ndocker compose up\n\n# Optional profiles (combine as needed):\ndocker compose --profile ui up        # + frontend on http://localhost:3000\ndocker compose --profile mcp up       # + MCP server on http://localhost:8001\ndocker compose --profile postgres up  # + Postgres/PGVector\ndocker compose --profile neo4j up     # + Neo4j\n```\n\n> The `cognee` and `cognee-mcp` services publish different host ports (`8000` vs `8001`),\n> so you can run both at once.\n\n### Option B — Pull the prebuilt image (no clone required)\n\n```bash\n# Create a minimal .env in the current directory\necho 'LLM_API_KEY=\"YOUR_OPENAI_API_KEY\"' > .env\n\n# API server\ndocker run --env-file ./.env -p 8000:8000 --rm -it cognee/cognee:main\n\n# MCP server (HTTP transport)\ndocker pull cognee/cognee-mcp:main\ndocker run -e TRANSPORT_MODE=http --env-file ./.env -p 8000:8000 --rm -it cognee/cognee-mcp:main\n```\n\nSee the [MCP server README](cognee-mcp/README.md) for SSE/stdio transports, optional\nextras, and MCP client configuration.\n\n## Use with AI Agents\n\n### Claude Code\n\nInstall the [Cognee memory plugin](https://github.com/topoteretes/cognee-integrations/tree/main/integrations/claude-code) to give Claude Code persistent memory across sessions. The plugin captures prompts, tool traces, and assistant responses into session memory, injects relevant context on every prompt, and syncs session memory into the permanent knowledge graph at session end.\n\n**Install** from the Claude Code marketplace. The recommended way is from your shell, *before* launching Claude Code, so the first `claude` launch is a clean session that bootstraps memory automatically:\n\n```bash\n# Add the marketplace and install the plugin (one-time, user-scoped)\nclaude plugin marketplace add topoteretes/cognee-integrations\nclaude plugin install cognee-memory@cognee\n\n# Set env vars for your mode (see below), then launch\nexport LLM_API_KEY=\"sk-...\"   # local mode; or COGNEE_BASE_URL + COGNEE_API_KEY for cloud\nclaude\n```\n\n**Local mode** (default) — the plugin bootstraps a local Cognee API at `http://localhost:8011`. Only `LLM_API_KEY` is required; the Cognee API key is auto-minted if absent:\n\n```bash\nexport LLM_API_KEY=\"sk-...\"\n```\n\n**Cognee Cloud or a remote server** — set both:\n\n```bash\nexport COGNEE_BASE_URL=\"https://your-instance.cognee.ai\"\nexport COGNEE_API_KEY=\"ck_...\"\n```\n\nOn startup you should see a \"Cognee Memory Connected\" system message.\n\nThe plugin hooks into Claude Code's lifecycle — `SessionStart` selects mode and sets up identity, `UserPromptSubmit` injects dataset-scoped context, `PostToolUse` captures tool traces, `Stop` writes the assistant's answer, `PreCompact` preserves memory across context resets, and `SessionEnd` triggers the final sync into the permanent graph.\n\nSee the [plugin README](https://github.com/topoteretes/cognee-integrations/tree/main/integrations/claude-code) for sessions, datasets, and full configuration.\n\n### Connect to Cognee Cloud\n\nPoint any Python agent at a managed Cognee instance — all SDK calls route to the cloud:\n\n```python\nimport cognee\n\nawait cognee.serve(url=\"https://your-instance.cognee.ai\", api_key=\"ck_...\")\n\nawait cognee.remember(\"important context\")\nresults = await cognee.recall(\"what happened?\")\n\nawait cognee.disconnect()\n```\n\n## Examples\n\nBrowse more examples in the [`examples/`](examples/) folder — demos, guides, custom pipelines, and database configurations.\n\n**Use Case 1 — Customer Support Agent**\n\n```python\nGoal: Resolve customer issues using their personal data across finance, support, and product history.\n\nUser: \"My invoice looks wrong and the issue is still not resolved.\"\n\nCognee tracks: past interactions, failed actions, resolved cases, product history\n\n# Agent response:\nAgent: \"I found 2 similar billing cases resolved last month.\n        The issue was caused by a syn",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"cognee\"\n\nversion = \"1.2.2\"\ndescription = \"Cognee - is a library for enriching LLM context with a semantic layer for better understanding and reasoning.\"\nauthors = [\n    { name = \"Vasilije Markovic\" },\n    { name = \"Boris Arzentar\" },\n]\nrequires-python = \">=3.10,<3.15\"\nreadme = \"README.md\"\nlicense = \"Apache-2.0\"\nclassifiers = [\n    \"Development Status :: 4 - Beta\",\n    \"Intended Audience :: Developers\",\n    \"License :: OSI Approved :: Apache Software License\",\n    \"Topic :: Software Development :: Libraries\",\n    \"Operating System :: MacOS :: MacOS X\",\n    \"Operating System :: POSIX :: Linux\",\n    \"Operating System :: Microsoft :: Windows\",\n]\ndependencies = [\n    \"openai>=1.80.1\",\n    \"python-dotenv>=1.0.1,<2.0.0\",\n    \"pydantic>=2.10.5\",\n    # GHSA-4xgf-cpjx-pc3j: 2.12.0–2.14.1 vulnerable, fixed in 2.14.2. Exclude the\n    # vulnerable range rather than capping, so the patched 2.14.2+ is adopted once\n    # it clears the `exclude-newer` window (it was <2 days old at time of writing).\n    \"pydantic-settings>=2.2.1,!=2.12.*,!=2.13.*,!=2.14.0,!=2.14.1,<3\",\n    \"typing_extensions>=4.12.2,<5.0.0\",\n    \"numpy>=1.26.4, <=4.0.0\",\n    \"sqlalchemy>=2.0.39,<3.0.0\",\n    \"aiosqlite>=0.20.0,<1.0.0\",\n    \"filelock>=3.12.0,<4.0.0\",  # cross-process migration lock for SQLite (Linux/macOS/Windows)\n    \"tiktoken>=0.8.0,<1.0.0\",\n    \"litellm>=1.83.7\",\n    \"instructor>=1.9.1,<1.15.3\",\n    \"filetype>=1.2.0,<2.0.0\",\n    \"aiohttp>=3.13.5,<4.0.0\",\n    \"aiofiles>=23.2.1\",\n    \"rdflib>=7.1.4,<7.2.0\",\n    \"pypdf>=6.6.2,<7.0.0\",\n    \"jinja2>=3.1.3,<4\",\n    \"lancedb>=0.24.3,<1.0.0\",  # 0.24.2 bundles lance 0.32.0 whose list-column decoder panics on tables with deletion vectors\n    \"nbformat>=5.7.0,<6.0.0\",\n    \"alembic>=1.13.3,<2\",\n    \"limits>=4.4.1,<5\",\n    \"fastapi>=0.116.2,<1.0.0\",\n    \"starlette>=0.48\",\n    \"python-multipart>=0.0.22,<1.0.0\",\n    \"fastapi-users[sqlalchemy]>=15.0.2\",\n    \"structlog>=25.2.0,<26\",\n    \"pympler>=1.1,<2.0.0\",\n    \"pylance>=0.22.0,<=0.36.0\",\n    \"ladybug>=0.16.0,<0.18\",\n    \"python-magic-bin<0.5 ; platform_system == 'Windows'\", # Only needed for Windows\n    \"networkx>=3.4.2,<4\",\n    \"uvicorn>=0.34.0,<1.0.0\",\n    \"gunicorn>=20.1.0,<24\",\n    \"websockets>=15.0.1,<16.0.0\",\n    \"tenacity>=9.0.0\",\n    \"fakeredis[lua]>=2.32.0\",\n    \"diskcache>=5.6.3\",\n    \"aiolimiter>=1.2.1\",\n    \"urllib3>=2.6.0\",\n    \"cbor2>=5.8.0\",\n    \"langdetect>=1.0.9\",\n    \"datamodel-code-generator>=0.54.0\",\n]\n\n[project.optional-dependencies]\napi=[]\n\ndistributed = [\n    \"modal>=1.0.5,<2.0.0\",\n]\n\nscraping = [\n    \"tavily-python>=0.7.12\",\n    \"beautifulsoup4>=4.13.1\",\n    \"playwright>=1.9.0\",\n    \"lxml>=4.9.3,<5 ; python_version < '3.13'\",\n    \"lxml>=5,<6 ; python_version >= '3.13' and python_version < '3.14'\",\n    # cp314 wheels start at lxml 6.0.1; without this 3.14 falls back to a\n    # source build that requires libxml2/libxslt headers (CI doesn't have them).\n    \"lxml>=6.0.1,<7 ; python_version >= '3.14'\",\n    \"protego>=0.1\",\n    \"APScheduler>=3.10.0,<=3.11.0\"\n]\n\nfastembed = [\n    \"fastembed<=0.8.0\",\n    # onnxruntime 1.23.2 only ships wheels through cp313; cp314 wheels start\n    # at onnxruntime 1.24.1. Split by python_version so existing 3.10–3.13\n    # users keep the pinned version and 3.14 picks up the first cp314-capable\n    # release.\n    \"onnxruntime<=1.23.2 ; python_version < '3.14'\",\n    \"onnxruntime>=1.24.1 ; python_version >= '3.14'\",\n]\n\nneo4j = [\"neo4j>=5.28.0,<6\"]\nneptune = [\"langchain_aws>=0.2.22\"]\npostgres = [\n    \"psycopg2>=2.9.10,<3\",\n    \"pgvector>=0.3.5,<0.4\",\n    \"asyncpg>=0.30.0,<1.0.0\",\n]\npostgres-binary = [\n    \"psycopg2-binary>=2.9.10,<3.0.0\",\n    \"pgvector>=0.3.5,<0.4\",\n    \"asyncpg>=0.30.0,<1.0.0\",\n]\nnotebook = [\"notebook>=7.1.0,<8\"]\nlangchain = [\n    \"langsmith>=0.2.3,<1.0.0\",\n    \"langchain_text_splitters>=0.3.2,<1.0.0\",\n    \"langchain-core>=1.2.5\"\n]\nllama-index = [\"llama-index-core>=0.14.20,<0.15\"]\nhuggingface = [\"transformers>=4.46.3,<5\"]\nollama = [\"transformers>=4.46.3,<5\"]\nmistral = [\"mistral-common>=1.5.2,<2\", \"mistralai>=1.9.10,<2\"]\nanthropic = [\"anthropic>=0.27\"]\nazure = [\"azure-identity>=1.15.0,<2\"]\ndeepeval = [\"deepeval>=3.0.1,<4\"]\nposthog = [\"posthog>=3.5.0,<4\"]\ngroq = [\"groq>=0.8.0,<1.0.0\"]\nllama-cpp = [\"llama-cpp-python[server]>=0.3.0,<1.0.0\"]\ndocs = [\n    \"lxml>=4.9.3,<5 ; python_version < '3.13'\",\n    \"lxml>=5,<6 ; python_version >= '3.13' and python_version < '3.14'\",\n    # cp314 wheels start at lxml 6.0.1.\n    \"lxml>=6.0.1,<7 ; python_version >= '3.14'\",\n    \"unstructured[csv, doc, docx, epub, md, odt, org, ppt, pptx, rst, rtf, tsv, xlsx, pdf]>=0.18.1,<19\",\n    \"nltk>=3.9.3,<4\", # TODO: Remove when unstructured is above v0.21.0 as it won't use nltk anymore\n]\ncodegraph = [\n    \"fastembed<=0.8.0 ; python_version < '3.14'\",\n    \"transformers>=4.46.3,<5\",\n    \"tree-sitter>=0.24.0,<0.25\",\n    \"tree-sitter-python>=0.23.6,<0.24\",\n]\nevals = [\n    \"plotly>=6.0.0,<7\",\n    \"gdown>=5.2.0,<6\",\n    \"pandas>=2.2.2,<3.0.0\",\n    \"matplotlib>=3.8.3,<4\",\n    \"scikit-learn>=1.6.1,<2\",\n    \"locust>",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "rag",
      "skill",
      "llm",
      "vector",
      "embedding"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 97
    },
    "strategic_score": 97
  },
  {
    "owner": "diegosouzapw",
    "name": "OmniRoute",
    "full_name": "diegosouzapw/OmniRoute",
    "url": "https://github.com/diegosouzapw/OmniRoute",
    "description": "Never stop coding. Free AI gateway: one endpoint, 160+ providers (50+ free), connect Claude Code, Codex, Cursor, Cline & Copilot to FREE Claude/GPT/Gemini. RTK+Caveman stacked compression saves 15-95% tokens, smart auto-fallback, MCP/A2A, multimodal APIs, Desktop/PWA.",
    "language": "TypeScript",
    "total_stars": 7906,
    "forks": 1339,
    "stars_this_period": 614,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "a2a",
        "ai-agents",
        "ai-gateway",
        "anthropic",
        "claude",
        "claude-code",
        "cline",
        "codex",
        "copilot",
        "cursor",
        "deepseek",
        "free-ai",
        "gemini",
        "gemini-cli",
        "llm-gateway",
        "mcp",
        "openai",
        "openai-proxy",
        "qwen",
        "token-saver"
      ],
      "license": "MIT",
      "open_issues": 113,
      "created_at": "2026-02-13T12:38:31Z",
      "pushed_at": "2026-06-29T21:30:20Z",
      "homepage": "https://omniroute.online",
      "default_branch": "main",
      "forks": 1339,
      "watchers": 28,
      "archived": false,
      "size_kb": 218605
    },
    "readme_content": "<div align=\"center\">\n\n<img src=\"./docs/screenshots/MainOmniRoute.png\" alt=\"OmniRoute Dashboard\" width=\"820\"/>\n\n<br/>\n\n# 🚀 OmniRoute — The Free AI Gateway\n\n### Never stop coding. Connect every AI tool to **237 providers** — **50+ free** — through one endpoint.\n\n**Plug Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini. Auto-fallback.**\n<br/>\n\n**RTK + Caveman compression saves 15–95% tokens. Never hit limits.**\n\n<br/>\n\n**~1.6B documented free tokens/month** — up to **~2.1B in your first month** with signup credits — aggregated across the free tiers, plus a long tail of permanently-free, no-cap providers, and the compression above stretches every one further. ([how we count →](docs/reference/FREE_TIERS.md#tldr--how-much-free-inference-does-omniroute-actually-aggregate))\n\n<br/>\n\n[![231 AI Providers](https://img.shields.io/badge/231-AI_Providers-6C5CE7?style=for-the-badge)](#-231-ai-providers--50-free)\n[![50+ Free](https://img.shields.io/badge/50%2B-Free_Tiers-00B894?style=for-the-badge)](#-231-ai-providers--50-free)\n[![1.6B Free Tokens/mo](https://img.shields.io/badge/1.6B-Free_Tokens%2Fmo-00B894?style=for-the-badge)](docs/reference/FREE_TIERS.md)\n[![Token Savings](https://img.shields.io/badge/up_to_95%25-Token_Savings-E17055?style=for-the-badge)](#%EF%B8%8F-save-1595-tokens--automatically)\n[![17 Strategies](https://img.shields.io/badge/17-Routing_Strategies-0984E3?style=for-the-badge)](#-combos--the-flagship)\n[![$0 to start](https://img.shields.io/badge/%240-To_Start-FDCB6E?style=for-the-badge&logoColor=black)](#-quick-start)\n\n<br/>\n\n### 💬 Join the community\n\n[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/EkzRkpzKYt)\n[![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/omnirouteOficial)\n[![WhatsApp Global](https://img.shields.io/badge/WhatsApp_Global-25D366?style=for-the-badge&logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)\n[![WhatsApp Brasil](https://img.shields.io/badge/WhatsApp_Brasil-25D366?style=for-the-badge&logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/BTGJXIyjeNIIgExvTMGGhI)\n\n**Questions, provider tips, roadmap & support → [Discord](https://discord.gg/EkzRkpzKYt) · [Telegram](https://t.me/omnirouteOficial) · WhatsApp [🌍 Global](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) / [🇧🇷 Brasil](https://chat.whatsapp.com/BTGJXIyjeNIIgExvTMGGhI)**\n\n<br/>\n\n<a href=\"https://trendshift.io/repositories/23589\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/23589\" alt=\"diegosouzapw%2FOmniRoute | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n\n[![npm](https://img.shields.io/npm/v/omniroute?logo=npm&style=flat-square)](https://www.npmjs.com/package/omniroute)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE)\n[![Node](https://img.shields.io/badge/node-%E2%89%A522.0.0-brightgreen?style=flat-square)](package.json)\n[![Stars](https://img.shields.io/github/stars/diegosouzapw/OmniRoute?style=social)](https://github.com/diegosouzapw/OmniRoute)\n\n<div align=\"center\">\n\n[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)\n![NPM Monthly](https://img.shields.io/npm/dm/omniroute?label=npm/month&color=cb3837&logo=npm)\n[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)\n![Docker Pulls](https://img.shields.io/docker/pulls/diegosouzapw/omniroute?label=docker%20pulls&logo=docker&color=2496ED)\n![Electron Downloads](https://img.shields.io/github/downloads/diegosouzapw/omniroute/total?style=flat&label=electron%20downloads&logo=electron&color=47848F)\n[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)\n\n</div>\n\n<br/>\n\n[**🚀 Quick Start**](#-quick-start) • [**🎯 Combos**](#-combos--the-flagship) • [**🌐 Providers**](#-231-ai-providers--50-free) • [**🔌 CLI & MCP**](#-full-cli--a2a--mcp) • [**🗜️ Compression**](#%EF%B8%8F-save-1595-tokens--automatically) • [**🌍 Website**](https://omniroute.online)\n\n[💥 The Promise](#-the-promise) • [🤔 Why](#-why-omniroute) • [🏆 What Sets Apart](#-what-sets-omniroute-apart) • [🤖 Compatible CLIs](#-compatible-clis--coding-agents) • [🖥️ Where It Runs](#%EF%B8%8F-where-omniroute-runs--anywhere) • [🔒 Private](#-private--local-first) • [🎬 In Action](#-omniroute-in-action) • [📚 Explore More](#-explore-more) • [📧 Support](#-support--community)\n\n</div>\n\n<div align=\"center\">\n <b>🌐 Available in 41+ languages</b>\n <table>\n  <tr>\n    <td align=\"center\"><a href=\"README.md\">🇺🇸</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/pt-BR/README.md\">🇧🇷</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/es/README.md\">🇪🇸</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/fr/README.md\">🇫🇷</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/it/README.md\">🇮🇹</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ru/README.md\">🇷🇺</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/zh-CN/README.md\">🇨🇳</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/zh-TW/README.md\">🇹🇼</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/de/README.md\">🇩🇪</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ja/README.md\">🇯🇵</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ko/README.md\">🇰🇷</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/in/README.md\">🇮🇳</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"docs/i18n/th/README.md\">🇹🇭</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/vi/README.md\">🇻🇳</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/id/README.md\">🇮🇩</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ms/README.md\">🇲🇾</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/phi/README.md\">🇵🇭</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ar/README.md\">🇸🇦</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/he/README.md\">🇮🇱</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/az/README.md\">🇦🇿</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/uk-UA/README.md\">🇺🇦</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/pl/README.md\">🇵🇱</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/cs/README.md\">🇨🇿</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"docs/i18n/nl/README.md\">🇳🇱</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/bg/README.md\">🇧🇬</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/da/README.md\">🇩🇰</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/fi/README.md\">🇫🇮</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/no/README.md\">🇳🇴</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/sv/README.md\">🇸🇪</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/hu/README.md\">🇭🇺</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ro/README.md\">🇷🇴</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/sk/README.md\">🇸🇰</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/pt/README.md\">🇵🇹</a></td>\n    <td align=\"center\"></td>\n  </tr>\n</table>\n</div>\n\n<br/>\n\n<div align=\"center\">\n\n# 💰 ~1.6B Free Tokens / Month\n\n</div>\n\n> Stacking free tiers by hand is painful — dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute aggregates the **documented** free tiers of **40+ provider pools / 500+ models** into one honest number and shows it live on the dashboard (`/dashboard/free-tiers`).\n\n- **~1.6B free tokens / month** (steady) — and **up to ~2.1B in your first month** with signup credits.\n- **Pool-deduped, honest** — we count each shared free pool **once**, so the headline isn't inflated by rate-limit ceilings the way multi-billion competitor claims are. (Counting every rate limit 24/7 would read ~10B; we don't publish that.)\n- **Plus the un-countable** — permanently-free, no-token-cap providers (SiliconFlow, Z.AI GLM-Flash, Kilo, OpenCode Zen…) and a **$10 OpenRouter top-up** that unlocks **+24M/mo**, both surfaced separately so they never inflate the headline.\n- **Per-model breakdown**, **live used / remaining** for the current month, and a transparent **terms flag** per provider.\n\n![Free-Tier Budget card (preview mockup)](docs/screenshots/free-tier-budget-card.svg)\n\n> Preview mockup — a real screenshot lands once the `/dashboard/free-tiers` page is validated. Full methodology (pool dedupe, credit tiers, provider terms): **[docs/reference/FREE_TIERS.md](docs/reference/FREE_TIERS.md)**.\n\n<br/>\n\n<div align=\"center\">\n\n# 💥 The Promise\n\n</div>\n\n> One endpoint. **237 providers.** Never stop building — and let OmniRoute pick the cheapest one that works.\n\n<table>\n  <tr>\n    <td width=\"33%\" valign=\"top\"><b>🚫 Never hit limits</b><br/><sub>Auto-fallback across 237 providers in milliseconds. Quota out? Next provider takes over — zero downtime.</sub></td>\n    <td width=\"33%\" valign=\"top\"><b>💸 Save up to 95% tokens</b><br/><sub>RTK + Caveman stacked compression cuts 15–95% of eligible tokens (~89% avg on tool-heavy sessions).</sub></td>\n    <td width=\"33%\" valign=\"top\"><b>🆓 $0 to start</b><br/><sub>50+ providers with a free tier, 11 free <i>forever</i> (Kiro, Qoder, Pollinations, LongCat…). No card needed.</sub></td>\n  </tr>\n  <tr>\n    <td width=\"33%\" valign=\"top\"><b>🔌 Every tool works</b><br/><sub>16+ coding agents — Claude Code, Codex, Cursor, Cline, Copilot, Antigravity — through one config.</sub></td>\n    <td width=\"33%\" valign=\"top\"><b>🧩 One endpoint</b><br/><sub>OpenAI ↔ Claude ↔ Gemini ↔ Responses API translation. Point any tool at <code>/v1</code> and it just works.</sub></td>\n    <td width=\"33%\" valign=\"top\"><b>🛡️ Production-grade</b><br/><sub>Circuit breakers, TLS stealth, MCP (87 tools), A2A, memory, guardrails, evals. 14,965 tests.</sub></td>\n  </tr>\n</table>\n\n<br/>\n<br/>\n\n<div align=\"center\">\n\n# 🤔 Why OmniRoute?\n\n</div>\n\n> Stop juggling 10 dashboards, dead API keys, and surprise bills.\n\n| ❌ The daily pain                                      | ✅ How OmniRoute fixes it                                                     |\n| ------------------------------------------------------ | ----------------------------------------------------------------------------- |\n| 📉 Subscription quota expires unused every month       | **Maximize subscriptions** — track quota, use every token before reset        |\n| 🛑 Rate limits stop you mid-coding                     | **4-tier auto-fallback** — Subscription → API → Cheap → Free, in milliseconds |\n| 🔥 Tool outputs (`git diff`, `grep`, logs) burn tokens | **RTK + Caveman compression** — save 15–95% eligible tokens per request       |\n| 💸 Expensive APIs ($20–50/mo per provider)             | **Cost-optimized routing** — auto-route to the cheapest viable model          |\n| 🧰 Each AI tool wants its own setup                    | **One endpoint, every tool, one dashboard**                                   |\n| 🌍 AI blocked in your country                          | **3-level proxy** + TLS fingerprint stealth — use AI from anywhere            |\n\n<div align=\"center\">\n\n```\n┌──────────────────────────────────────────────────────────┐\n│        Your IDE / CLI  (Claude Code, Cursor, Cline…)       │\n└─────────────────────────┬──────────────────────────────────┘\n                          │ http://localhost:20128/v1\n                          ▼\n┌──────────────────────────────────────────────────────────┐\n│                  OmniRoute — Smart Router                  │\n│  RTK + Caveman compression · 17 routing strategies         │\n│  Circuit breakers · TLS stealth · MCP · A2A · Guardrails   │\n└─────────────────────────┬──────────────────────────────────┘\n        ┌─────────────┬────┴────────┬─────────────┐\n        ▼ Tier 1      ▼ Tier 2      ▼ Tier 3       ▼ Tier 4\n   SUBSCRIPTION     API KEY        CHEAP          FREE\n   Claude Code,     DeepSeek,      GLM $0.5,      Kiro, Qoder,\n   Codex, Copilot   Groq, xAI      MiniMax $0.2   Pollinations\n   quota out? ───▶  budget hit? ─▶ budget hit",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"omniroute\",\n  \"version\": \"3.8.41\",\n  \"description\": \"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.\",\n  \"type\": \"module\",\n  \"bin\": {\n    \"omniroute\": \"bin/omniroute.mjs\",\n    \"omniroute-reset-password\": \"bin/reset-password.mjs\"\n  },\n  \"files\": [\n    \"bin/\",\n    \"dist/\",\n    \"@omniroute/\",\n    \"open-sse/\",\n    \"src/domain/\",\n    \"src/lib/\",\n    \"src/models/\",\n    \"src/mitm/\",\n    \"src/server/\",\n    \"src/shared/\",\n    \"src/sse/\",\n    \"src/types/\",\n    \".env.example\",\n    \"scripts/build/postinstall.mjs\",\n    \"bin/cli/runtime/\",\n    \"scripts/postinstall.mjs\",\n    \"scripts/build/postinstallSupport.mjs\",\n    \"scripts/build/runtime-env.mjs\",\n    \"scripts/build/colocateOptionals.mjs\",\n    \"scripts/build/sync-env.mjs\",\n    \"scripts/dev/responses-ws-proxy.mjs\",\n    \"scripts/dev/tls-options.mjs\",\n    \"scripts/check/check-supported-node-runtime.ts\",\n    \"scripts/dev/sync-env.mjs\",\n    \"scripts/build/native-binary-compat.mjs\",\n    \"scripts/build/build-next-isolated.mjs\",\n    \"scripts/build/runtime-env.mjs\",\n    \"README.md\",\n    \"LICENSE\",\n    \"!**/__tests__/**\",\n    \"!**/*.test.ts\",\n    \"!**/*.test.tsx\",\n    \"!**/*.test.js\",\n    \"!**/*.test.mjs\",\n    \"!**/*.spec.ts\",\n    \"!**/*.spec.tsx\"\n  ],\n  \"workspaces\": [\n    \"open-sse\"\n  ],\n  \"engines\": {\n    \"node\": \">=22.0.0 <23 || >=24.0.0 <27\"\n  },\n  \"keywords\": [\n    \"ai\",\n    \"router\",\n    \"proxy\",\n    \"openai\",\n    \"claude\",\n    \"anthropic\",\n    \"gemini\",\n    \"fallback\",\n    \"cursor\",\n    \"cline\",\n    \"codex\",\n    \"llm\",\n    \"auto-fallback\"\n  ],\n  \"license\": \"MIT\",\n  \"author\": \"diegosouzapw\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/diegosouzapw/OmniRoute\"\n  },\n  \"homepage\": \"https://omniroute.online\",\n  \"scripts\": {\n    \"dev\": \"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev\",\n    \"prebuild:docs\": \"node scripts/docs/gen-openapi-module.mjs\",\n    \"gen:provider-reference\": \"node --import tsx scripts/docs/gen-provider-reference.ts\",\n    \"bench:compression\": \"node --import tsx scripts/compression/benchmark.ts\",\n    \"eval:compression\": \"node --import tsx scripts/compression-eval/index.ts\",\n    \"release:sync-changelog-i18n\": \"node scripts/release/sync-changelog-i18n.mjs\",\n    \"build\": \"node scripts/build/build-next-isolated.mjs\",\n    \"build:secure\": \"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs\",\n    \"build:cli\": \"node --import tsx scripts/build/prepublish.ts\",\n    \"build:release\": \"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs\",\n    \"build:native:tproxy\": \"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild\",\n    \"start\": \"node scripts/dev/run-next.mjs start\",\n    \"lint\": \"eslint .\",\n    \"lint:md\": \"npx --yes markdownlint-cli2 \\\"docs/**/*.md\\\" \\\"*.md\\\" \\\"!docs/i18n\\\" \\\"!docs/research\\\"\",\n    \"lint:prose\": \"vale docs\",\n    \"electron:dev\": \"concurrently \\\"npm run dev\\\" \\\"wait-on http://localhost:20128 && cd electron && npm run dev\\\"\",\n    \"electron:build\": \"npm run build && cd electron && npm run build\",\n    \"electron:build:win\": \"npm run build && cd electron && npm run build:win\",\n    \"electron:build:mac\": \"npm run build && cd electron && npm run build:mac\",\n    \"electron:build:linux\": \"npm run build && cd electron && npm run build:linux\",\n    \"electron:smoke:packaged\": \"node scripts/dev/smoke-electron-packaged.mjs\",\n    \"test\": \"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \\\"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\\\"\",\n    \"test:unit\": \"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \\\"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\\\"\",\n    \"test:unit:ci\": \"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \\\"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\\\"\",\n    \"test:unit:fast\": \"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-ss",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "runtime",
      "llm",
      "inference"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 96
    },
    "strategic_score": 96
  },
  {
    "owner": "HKUDS",
    "name": "Vibe-Trading",
    "full_name": "HKUDS/Vibe-Trading",
    "url": "https://github.com/HKUDS/Vibe-Trading",
    "description": "\"Vibe-Trading: Your Personal Trading Agent\"",
    "language": "Python",
    "total_stars": 15044,
    "forks": 2685,
    "stars_this_period": 840,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "ai-agent",
        "algorithmic-trading",
        "backtesting",
        "fintech",
        "llm",
        "mcp",
        "multi-agent",
        "python",
        "quantitative-finance",
        "trading"
      ],
      "license": "MIT",
      "open_issues": 11,
      "created_at": "2026-04-01T09:52:20Z",
      "pushed_at": "2026-06-29T09:15:54Z",
      "homepage": "https://vibetrading.wiki/",
      "default_branch": "main",
      "forks": 2685,
      "watchers": 89,
      "archived": false,
      "size_kb": 53069
    },
    "readme_content": "<p align=\"center\">\n  <b>English</b> | <a href=\"README_zh.md\">中文</a> | <a href=\"README_ja.md\">日本語</a> | <a href=\"README_ko.md\">한국어</a> | <a href=\"README_ar.md\">العربية</a>\n</p>\n\n<p align=\"center\">\n  <img src=\"assets/icon.png\" width=\"120\" alt=\"Vibe-Trading Logo\"/>\n</p>\n\n<h1 align=\"center\">Vibe-Trading: Your Personal Trading Agent</h1>\n\n<p align=\"center\">\n  <b>One Command to Empower Your Agent with Comprehensive Trading Capabilities</b>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://trendshift.io/repositories/25527\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/25527\" alt=\"HKUDS%2FVibe-Trading | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/Python-3.11%2B-3776AB?style=flat&logo=python&logoColor=white\" alt=\"Python\">\n  <img src=\"https://img.shields.io/badge/Backend-FastAPI-009688?style=flat\" alt=\"FastAPI\">\n  <img src=\"https://img.shields.io/badge/Frontend-React%2019-61DAFB?style=flat&logo=react&logoColor=white\" alt=\"React\">\n  <a href=\"https://pypi.org/project/vibe-trading-ai/\"><img src=\"https://img.shields.io/pypi/v/vibe-trading-ai?style=flat&logo=pypi&logoColor=white\" alt=\"PyPI\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-yellow?style=flat\" alt=\"License\"></a>\n  <br>\n  <a href=\"https://github.com/HKUDS/.github/blob/main/profile/README.md\"><img src=\"https://img.shields.io/badge/Feishu-Group-E9DBFC?style=flat-square&logo=feishu&logoColor=white\" alt=\"Feishu\"></a>\n  <a href=\"https://github.com/HKUDS/.github/blob/main/profile/README.md\"><img src=\"https://img.shields.io/badge/WeChat-Group-C5EAB4?style=flat-square&logo=wechat&logoColor=white\" alt=\"WeChat\"></a>\n  <a href=\"https://discord.gg/6TdQnT5xcF\"><img src=\"https://img.shields.io/badge/Discord-Join-7289DA?style=flat-square&logo=discord&logoColor=white\" alt=\"Discord\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://vibetrading.wiki/\">Website</a> &nbsp;&middot;&nbsp;\n  <a href=\"https://vibetrading.wiki/docs/\">Docs</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-news\">News</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-key-features\">Features</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-shadow-account\">Shadow Account</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-demo\">Demo</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-quick-start\">Quick Start</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-examples\">Examples</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-api-server\">API / MCP</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-roadmap\">Roadmap</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-contributing\">Contributing</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#-quick-start\"><img src=\"assets/pip-install.svg\" height=\"45\" alt=\"pip install vibe-trading-ai\"></a>\n</p>\n\n---\n\n## 📰 News\n\n- **2026-06-29** 🛡️ **Live advisory safety + Trading 212 read-only connector + Windows/Gemini fixes**: live order guards now have an opt-in, broker-agnostic `PreTradeAdvisoryInterface` that records advisory reviews without bypassing the mandate gate, kill switch, or audit trail ([#328](https://github.com/HKUDS/Vibe-Trading/pull/328), closes [#317](https://github.com/HKUDS/Vibe-Trading/issues/317), thanks @shadowinlife). Trading 212 joins the connector layer with read-only account, positions, orders, history, and instrument-metadata support; `place_order` / `cancel_order` still hard-refuse until a structural paper/live boundary exists ([#321](https://github.com/HKUDS/Vibe-Trading/pull/321), closes [#309](https://github.com/HKUDS/Vibe-Trading/issues/309), thanks @mvanhorn). Windows startup avoids the pandas 3.0 `Timestamp` crash via the `<3.0.0` constraint ([#329](https://github.com/HKUDS/Vibe-Trading/pull/329), closes [#324](https://github.com/HKUDS/Vibe-Trading/issues/324), thanks @hannibal-lee); Gemini `thought_signature` dict-history replay was verified/fixed on `main` ([#318](https://github.com/HKUDS/Vibe-Trading/issues/318)); `.US` financial statements now route to SEC EDGAR instead of Eastmoney ([#325](https://github.com/HKUDS/Vibe-Trading/issues/325)); and the Alpha Library landing page got cache/date/selector/noscript/DNS-prefetch hardening while heavier CSP and social-card follow-ups stay tracked ([#323](https://github.com/HKUDS/Vibe-Trading/issues/323)).\n\n- **2026-06-28** 🧰 **Cross-platform setup/dev + runtime and file-tool hardening**: `vibe-trading setup` and `vibe-trading dev` now handle Windows TypeScript builds, launch the backend from the right cwd, use the Vite 5899 port, and shut child processes down cleanly ([#292](https://github.com/HKUDS/Vibe-Trading/pull/292), thanks @digger-yu). Runtime status polling now degrades instead of crashing ([#322](https://github.com/HKUDS/Vibe-Trading/issues/322)); MCP OAuth cache keys are sanitized ([#313](https://github.com/HKUDS/Vibe-Trading/issues/313)); OpenAI defaults and Robinhood `agent.json` validation were tightened ([#319](https://github.com/HKUDS/Vibe-Trading/pull/319), [#320](https://github.com/HKUDS/Vibe-Trading/pull/320), thanks @mvanhorn); and file tools got isolated read/write roots plus broader sandbox tests ([#299](https://github.com/HKUDS/Vibe-Trading/pull/299), thanks @skloxo).\n- **2026-06-27** 🧯 **Content-filter resilience + Shadow Account feature contract cleanup**: event-driven and swarm runs now skip individual LLM content-moderation hits, warn in run cards when filter rates are high, and recognize Gemini safety finish reasons instead of aborting an entire analysis ([#308](https://github.com/HKUDS/Vibe-Trading/pull/308), closes [#307](https://github.com/HKUDS/Vibe-Trading/issues/307), thanks @shadowinlife). Shadow Account extraction/codegen now share one `PRICE_FEATURES` contract and keep four-decimal return bounds, preventing rule/codegen drift and precision loss on `prior_5d_return` ([#316](https://github.com/HKUDS/Vibe-Trading/pull/316), thanks @Robin1987China).\n<details>\n<summary>Earlier news</summary>\n\n- **2026-06-26** 🎯 **Shadow Account conditional entry + tushare ETF/index/HK routing**: extracted Shadow Account rules now carry RSI / prior-return bounds, so the generated SignalEngine enters on real conditions (RSI in range, prior-return in range) instead of blindly replaying the holding cadence ([#314](https://github.com/HKUDS/Vibe-Trading/pull/314), follows [#302](https://github.com/HKUDS/Vibe-Trading/pull/302), thanks @Robin1987China). The tushare loader also routes ETF/LOF → `fund_daily()`, indices → `index_daily()`, and HK equities → `hk_daily()` instead of always calling `daily()` (which silently returns empty for non-stocks), with per-symbol empty-result + partial-fetch warnings ([#315](https://github.com/HKUDS/Vibe-Trading/pull/315), closes [#310](https://github.com/HKUDS/Vibe-Trading/issues/310), thanks @shadowinlife).\n- **2026-06-25** 🧪 **Strict validation JSON + calmer agent context**: standalone backtest validation now normalizes nested `NaN` / `Infinity` values before writing `artifacts/validation.json` or CLI stdout, so strict JSON parsers no longer choke on validation payloads ([#306](https://github.com/HKUDS/Vibe-Trading/pull/306), thanks @gyx09212214-prog). The agent prompt also derives the current data-source count from the loader registry, and `_microcompact()` now waits for real token pressure instead of clearing older tool results during short runs ([#296](https://github.com/HKUDS/Vibe-Trading/pull/296), closes [#282](https://github.com/HKUDS/Vibe-Trading/issues/282), thanks @MarkfuGod).\n- **2026-06-24** 🎯 **Shadow Account price context + reactive Chinese UI + LAN auth fix**: Shadow Account rule extraction now sees PIT-safe entry context — `entry_rsi14` and `prior_5d_return` fetched through the loader registry as of `buy_dt`, with graceful offline/no-data degradation ([#302](https://github.com/HKUDS/Vibe-Trading/pull/302), follows [#295](https://github.com/HKUDS/Vibe-Trading/issues/295), thanks @Robin1987China). The main Web UI panels now use reactive English / zh-CN translations across charts, chat, Alpha Library, Correlation, and Run Detail ([#301](https://github.com/HKUDS/Vibe-Trading/pull/301), thanks @skloxo). Remote same-origin Web UI deployments with `API_AUTH_KEY` can post and upload again after the CSRF hardening, while mismatched cross-site origins remain blocked ([#304](https://github.com/HKUDS/Vibe-Trading/pull/304), thanks @Hinotoi-agent).\n- **2026-06-23** 🛡️ **Local API CSRF hardening**: a malicious web page can no longer drive unsafe cross-site requests (POST/PUT/DELETE) against the loopback API — CORS blocks reading the response but not the side effect, so loopback dev-mode trust now applies the existing cross-site guard to unsafe methods *before* honoring it. Safe methods and local CLI / non-browser uploads are unaffected ([#293](https://github.com/HKUDS/Vibe-Trading/pull/293), thanks @Hinotoi-agent).\n- **2026-06-22** 🔧 **Live-authorize OAuth fix + Alpha Zoo headline fix**: `connector authorize` now holds the OAuth handshake open through a multi-minute broker sign-in (tunable via `VIBE_LIVE_AUTHORIZE_TIMEOUT_SECONDS`) and no longer spawns a competing callback server on retry, so the token actually persists ([#281](https://github.com/HKUDS/Vibe-Trading/pull/281), closes [#259](https://github.com/HKUDS/Vibe-Trading/issues/259), thanks @Robin1987China). The Alpha Zoo page no longer prints its alpha count twice ([#287](https://github.com/HKUDS/Vibe-Trading/pull/287), closes [#286](https://github.com/HKUDS/Vibe-Trading/issues/286), thanks @digger-yu). Scheduled research also picked up end-to-end usage docs ([#288](https://github.com/HKUDS/Vibe-Trading/pull/288)).\n- **2026-06-21** ⏰ **Scheduled-research executor + Reports library + post-backtest attribution**: scheduled research now runs **end to end** — a default-off background executor (`VIBE_TRADING_ENABLE_SCHEDULER`) fires due interval/cron jobs through the session runtime ([#278](https://github.com/HKUDS/Vibe-Trading/pull/278), thanks @mvanhorn, closing [#254](https://github.com/HKUDS/Vibe-Trading/issues/254)). A new **`/reports` Run Library** page lists, searches, and filters report-worthy runs with links into Run Detail + Compare ([#224](https://github.com/HKUDS/Vibe-Trading/pull/224), thanks @LemonCANDY42). And after every backtest the agent now runs **layered attribution** — trade-level winners/losers, beta regression, market-regime analysis, and a Monte Carlo permutation test, gated by data availability and routing ([#280](https://github.com/HKUDS/Vibe-Trading/pull/280), thanks @shadowinlife).\n- **2026-06-20** 🔬 **Research Autopilot loop closes (Phase 3) + loader OHLC integrity guard + 4 academic alphas**: **Research Autopilot** now runs **hypothesis → signal-engine → backtest** end to end — `scaffold_signal_engine` writes a contract-correct engine and `link_autopilot_backtest` feeds run metrics back to the hypothesis (**68 tools**) ([#267](https://github.com/HKUDS/Vibe-Trading/pull/267)). A structural **OHLC sanity check** drops dirty bars (`high < low`, non-positive prices, bad bracketing) centrally at the loader boundary, guarding every data source ([#274](https://github.com/HKUDS/Vibe-Trading/pull/274), thanks @Shizoqua). And the **academic alpha family grows 6 → 10** — Jegadeesh reversal, George-Hwang 52-week-high, Amihud illiquidity, Harvey-Siddique skew (**456 factors**) ([#277](https://github.com/HKUDS/Vibe-Trading/pull/277), thanks @Robin1987China).\n- **2026-06-19** 🚀 **v0.1.10 — Global data layer**: market-data sources grow 10 → 18 (free **Eastmoney / Sina / Stooq / Yahoo** + key-gated **Finnhub / Alpha Vantage / Tiingo / FMP**, ban-risk fallback) plus **18 read-only data tools** (fund flow, dragon-tiger, northbound, margin, block trades, SEC EDGAR + XBRL, financials, options chains, full-market screening…) across A-share / US / HK, all over MCP. Also bundles everything since 0.1.9 — 10 broker connectors, `alpha compare`, the provider-reliability overhaul, and the opt-in data cache. `pip install -U vibe-trading-ai`\n- **2026-06-18** 🔬 **Research Autopilot Phase 1 + a local Data Bridge loader, + a Discord security no",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"vibe-trading-ai\"\nversion = \"0.1.10\"\ndescription = \"Natural-language finance research AI agent with backtesting\"\nrequires-python = \">=3.11\"\nlicense = \"MIT\"\nreadme = \"README.md\"\nauthors = [\n    {name = \"HKUDS\", email = \"hkuds@connect.hku.hk\"},\n]\nkeywords = [\"finance\", \"trading\", \"backtesting\", \"agent\", \"swarm\", \"quantitative\"]\nclassifiers = [\n    \"Development Status :: 4 - Beta\",\n    \"Intended Audience :: Financial and Insurance Industry\",\n    \"Programming Language :: Python :: 3.11\",\n    \"Programming Language :: Python :: 3.12\",\n    \"Topic :: Office/Business :: Financial :: Investment\",\n]\ndependencies = [\n    \"rich>=13.0.0\",\n    \"pyyaml>=6.0.0\",\n    \"langchain>=1.0.0,<2\",\n    \"langchain-core>=1.0.0,<2\",\n    \"langchain-openai>=1.0.0,<2\",\n    \"langgraph>=1.0.10,<1.1\",\n    \"langgraph-checkpoint>=2.1.0,<5\",\n    \"python-dotenv>=1.0.0\",\n    \"httpx>=0.28.0\",\n    \"defusedxml>=0.7.1\",\n    \"oauth-cli-kit>=0.1.3\",\n    \"pandas>=2.0.0,<3.0.0\",\n    \"openpyxl>=3.1.0\",\n    \"python-docx>=1.1.0\",\n    \"python-pptx>=0.6.23\",\n    \"pypdfium2>=4.0.0\",\n    \"Pillow>=10.0.0\",\n    \"numpy>=1.24.0\",\n    \"scipy>=1.10.0\",\n    \"duckdb>=1.2.0\",\n    \"scikit-learn>=1.3.0\",\n    \"joblib>=1.3.0\",\n    \"smartmoneyconcepts>=0.0.1\",\n    \"tushare>=1.2.89\",\n    \"requests>=2.31.0\",\n    \"yfinance>=0.2.30\",\n    \"akshare>=1.12.0\",\n    \"ccxt>=4.0.0\",\n    \"fastapi>=0.104.0\",\n    \"uvicorn[standard]>=0.24.0\",\n    \"pydantic>=2.0.0\",\n    \"python-multipart>=0.0.18\",\n    \"sse-starlette>=1.6.0\",\n    \"fastmcp>=2.14.0\",\n    \"ddgs>=6.0.0\",\n    \"jinja2>=3.1.0\",\n    \"matplotlib>=3.7.0\",\n    \"weasyprint>=60.0\",\n    \"prompt_toolkit>=3.0.0\",\n]\n\n[project.urls]\nHomepage = \"https://vibetrading.wiki/\"\nDocumentation = \"https://vibetrading.wiki/docs/\"\nRepository = \"https://github.com/HKUDS/Vibe-Trading\"\nIssues = \"https://github.com/HKUDS/Vibe-Trading/issues\"\n\n[project.scripts]\nvibe-trading = \"cli:main\"\nvibe-trading-mcp = \"mcp_server:main\"\n\n[tool.setuptools]\npackage-dir = {\"\" = \"agent\"}\npy-modules = [\"api_server\", \"mcp_server\"]\n\n[tool.setuptools.packages.find]\nwhere = [\"agent\"]\ninclude = [\"src*\", \"backtest*\", \"cli*\"]\n\n[tool.setuptools.package-data]\n\"src\" = [\n    \"skills/**/*.md\",\n    \"skills/**/*.yaml\",\n    \"skills/**/*.json\",\n    \"skills/**/*.py\",\n    \"providers/*.json\",\n    \"swarm/presets/*.yaml\",\n    \"shadow_account/templates/*.j2\",\n    \"shadow_account/templates/*.html\",\n    \"shadow_account/templates/*.css\",\n]\n\"backtest\" = [\"*.py\"]\n\"src.factors\" = [\"zoo/**/*.yaml\", \"zoo/**/*.md\", \"zoo/**/NOTICE\"]\n\n[project.optional-dependencies]\nibkr = [\n    \"ib_async>=2.0\",\n]\ndeepseek = [\n    \"langchain-deepseek>=1.0.0,<2\",\n]\nashare = [\n    # Free, no-auth A-share source over BaoStock's TCP protocol; bypasses the\n    # HTTP CDN IP blocks that affect eastmoney-backed sources. The Tencent\n    # A-share loader needs no extra dependency (stdlib HTTP only).\n    \"baostock>=0.8.8\",\n]\nharmonic = [\n    \"pyharmonics>=1.5.0\",\n]\ndev = [\n    \"pytest>=7.0\",\n    \"pytest-cov>=4.0\",\n    \"pytest-socket>=0.7.0\",\n]\n\n[tool.pytest.ini_options]\ntestpaths = [\"agent/tests\"]\npythonpath = [\"agent\"]\nmarkers = [\n    \"unit: Unit tests (fast, no network)\",\n    \"integration: Integration tests (may need network)\",\n]\n\n[tool.ruff]\ntarget-version = \"py311\"\nline-length = 120\nsrc = [\"agent\"]\n\n[tool.coverage.run]\nsource = [\"agent\"]\nomit = [\n    \"agent/tests/*\",\n    \"agent/tests/**/*\",\n    \"agent/**/__init__.py\",\n]\n\n[tool.coverage.report]\nshow_missing = true\nskip_empty = true\nfail_under = 0\nexclude_also = [\n    \"if __name__ == .__main__.\",\n    \"raise NotImplementedError\",\n    \"\\\\.\\\\.\\\\.\",\n]\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"W\"]\nignore = [\"E501\"]\n\n[tool.ruff.lint.per-file-ignores]\n# Alpha zoo files import the full src.factors.base surface verbatim\n# to match research-paper formulas. F401 (unused-import) is noise here;\n# F841 (unused-local-variable) stays active to catch real formula bugs.\n\"agent/src/factors/zoo/**/*.py\" = [\"F401\"]\n",
    "strategic_keywords": [
      "agent",
      "mcp",
      "llm"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 94
    },
    "strategic_score": 94
  },
  {
    "owner": "firecrawl",
    "name": "firecrawl",
    "full_name": "firecrawl/firecrawl",
    "url": "https://github.com/firecrawl/firecrawl",
    "description": "The API to search, scrape, and interact with the web at scale. 🔥",
    "language": "TypeScript",
    "total_stars": 141465,
    "forks": 8147,
    "stars_this_period": 812,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "ai-agents",
        "ai-crawler",
        "ai-scraping",
        "ai-search",
        "crawler",
        "data-extraction",
        "html-to-markdown",
        "llm",
        "markdown",
        "scraper",
        "scraping",
        "web-crawler",
        "web-data",
        "web-data-extraction",
        "web-scraper",
        "web-scraping",
        "web-search",
        "webscraping"
      ],
      "license": "AGPL-3.0",
      "open_issues": 372,
      "created_at": "2024-04-15T21:02:29Z",
      "pushed_at": "2026-06-29T22:02:22Z",
      "homepage": "https://firecrawl.dev",
      "default_branch": "main",
      "forks": 8147,
      "watchers": 381,
      "archived": false,
      "size_kb": 94094
    },
    "readme_content": "<h3 align=\"center\">\n  <a name=\"readme-top\"></a>\n  <img\n    src=\"https://raw.githubusercontent.com/firecrawl/firecrawl/main/img/firecrawl_logo.png\"\n    height=\"200\"\n  >\n</h3>\n\n<div align=\"center\">\n  <a href=\"https://github.com/firecrawl/firecrawl/blob/main/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/firecrawl/firecrawl\" alt=\"License\">\n  </a>\n  <a href=\"https://pepy.tech/project/firecrawl-py\">\n    <img src=\"https://static.pepy.tech/badge/firecrawl-py\" alt=\"Downloads\">\n  </a>\n  <a href=\"https://GitHub.com/firecrawl/firecrawl/graphs/contributors\">\n    <img src=\"https://img.shields.io/github/contributors/firecrawl/firecrawl.svg\" alt=\"GitHub Contributors\">\n  </a>\n  <a href=\"https://firecrawl.dev\">\n    <img src=\"https://img.shields.io/badge/Visit-firecrawl.dev-orange\" alt=\"Visit firecrawl.dev\">\n  </a>\n</div>\n\n<div>\n  <p align=\"center\">\n    <a href=\"https://twitter.com/firecrawl\">\n      <img src=\"https://img.shields.io/badge/Follow%20on%20X-000000?style=for-the-badge&logo=x&logoColor=white\" alt=\"Follow on X\" />\n    </a>\n    <a href=\"https://www.linkedin.com/company/104100957\">\n      <img src=\"https://img.shields.io/badge/Follow%20on%20LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white\" alt=\"Follow on LinkedIn\" />\n    </a>\n    <a href=\"https://discord.gg/firecrawl\">\n      <img src=\"https://img.shields.io/badge/Join%20our%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white\" alt=\"Join our Discord\" />\n    </a>\n  </p>\n</div>\n\n---\n\n# **🔥 Firecrawl**\n\n**The API to search, scrape, and interact with the web at scale. 🔥** The web context API to find sources, extract content, and turn it into clean Markdown or structured data your agents can ship with. Open source and available as a [hosted service](https://firecrawl.dev/?ref=github).\n\n_Pst. Hey, you, join our stargazers :)_\n\n<a href=\"https://github.com/firecrawl/firecrawl\">\n  <img src=\"https://img.shields.io/github/stars/firecrawl/firecrawl.svg?style=social&label=Star&maxAge=2592000\" alt=\"GitHub stars\">\n</a>\n\n---\n\n## Why Firecrawl?\n\n- **Industry-leading reliability**: Covers 96% of the web, including JS-heavy pages — no proxy headaches, just clean data ([see benchmarks](https://www.firecrawl.dev/blog/the-worlds-best-web-data-api-v25))\n- **Blazingly fast**: P95 latency of 3.4s across millions of pages, built for real-time agents and dynamic apps\n- **LLM-ready output**: Clean markdown, structured JSON, screenshots, and more — spend fewer tokens, build better AI apps\n- **We handle the hard stuff**: Rotating proxies, orchestration, rate limits, JS-blocked content, and more — zero configuration\n- **Agent ready**: Connect Firecrawl to any AI agent or MCP client with a single command\n- **Media parsing**: Parse and extract content from web-hosted PDFs, DOCX, and more\n- **Actions**: Click, scroll, write, wait, and press before extracting content\n- **Open source**: Developed transparently and collaboratively — [join our community](https://github.com/firecrawl/firecrawl)\n\n---\n\n## Feature Overview\n\n**Core Endpoints**\n\n| Feature | Description |\n|---------|-------------|\n| [**Search**](#search) | Search the web and get full page content from results |\n| [**Scrape**](#scrape) | Convert any URL to markdown, HTML, screenshots, or structured JSON |\n| [**Interact**](#interact) | Scrape a page, then interact with it using AI prompts or code |\n\n**More**\n\n| Feature | Description |\n|---------|-------------|\n| [**Agent**](#agent) | Automated data gathering, just describe what you need |\n| [**Crawl**](#crawl) | Scrape all URLs of a website with a single request |\n| [**Map**](#map) | Discover all URLs on a website instantly |\n| [**Batch Scrape**](#batch-scrape) | Scrape thousands of URLs asynchronously |\n\n---\n\n## Quick Start\n\nSign up at [firecrawl.dev](https://firecrawl.dev) to get your API key. Try the [playground](https://firecrawl.dev/playground) to test it out.\n\n### Search\n\nSearch the web and get full content from results.\n\n```python\nfrom firecrawl import Firecrawl\n\napp = Firecrawl(api_key=\"fc-YOUR_API_KEY\")\n\nsearch_result = app.search(\"firecrawl\", limit=5)\n```\n\n<details>\n<summary><b>Node.js / cURL / CLI</b></summary>\n\n**Node.js**\n```javascript\nimport { Firecrawl } from 'firecrawl';\n\nconst app = new Firecrawl({apiKey: \"fc-YOUR_API_KEY\"});\n\napp.search(\"firecrawl\", { limit: 5 })\n```\n\n**cURL**\n```bash\ncurl -X POST 'https://api.firecrawl.dev/v2/search' \\\n-H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n-H 'Content-Type: application/json' \\\n-d '{\n  \"query\": \"firecrawl\",\n  \"limit\": 5\n}'\n```\n\n**CLI**\n```bash\nfirecrawl search \"firecrawl\" --limit 5\n```\n</details>\n\nOutput:\n```json\n[\n  {\n    \"url\": \"https://firecrawl.dev\",\n    \"title\": \"Firecrawl\",\n    \"markdown\": \"Turn websites into...\"\n  },\n  {\n    \"url\": \"https://docs.firecrawl.dev\",\n    \"title\": \"Firecrawl Docs\",\n    \"markdown\": \"# Getting Started...\"\n  }\n]\n```\n\n### Scrape\n\nGet LLM-ready data from any website — markdown, JSON, screenshots, and more.\n\n```python\nfrom firecrawl import Firecrawl\n\napp = Firecrawl(api_key=\"fc-YOUR_API_KEY\")\n\nresult = app.scrape('firecrawl.dev')\n```\n\n<details>\n<summary><b>Node.js / cURL / CLI</b></summary>\n\n**Node.js**\n```javascript\nimport { Firecrawl } from 'firecrawl';\n\nconst app = new Firecrawl({ apiKey: \"fc-YOUR_API_KEY\" });\n\napp.scrape('firecrawl.dev')\n```\n\n**cURL**\n```bash\ncurl -X POST 'https://api.firecrawl.dev/v2/scrape' \\\n-H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n-H 'Content-Type: application/json' \\\n-d '{\n  \"url\": \"firecrawl.dev\"\n}'\n```\n\n**CLI**\n```bash\nfirecrawl scrape https://firecrawl.dev\nfirecrawl https://firecrawl.dev --only-main-content\n```\n</details>\n\nOutput:\n```\n# Firecrawl\n\nFirecrawl helps AI systems search, scrape, and interact with the web.\n\n## Features\n- Search: Find information across the web\n- Scrape: Clean data from any page\n- Interact: Click, navigate, and operate pages\n- Agent: Autonomous data gathering\n```\n\n### Interact\n\nScrape a page, then interact with it using AI prompts or code.\n\n```python\nfrom firecrawl import Firecrawl\n\napp = Firecrawl(api_key=\"fc-YOUR_API_KEY\")\n\nresult = app.scrape(\"https://amazon.com\")\nscrape_id = result.metadata.scrape_id\n\napp.interact(scrape_id, prompt=\"Search for 'mechanical keyboard'\")\napp.interact(scrape_id, prompt=\"Click the first result\")\n```\n\n<details>\n<summary><b>Node.js / cURL / CLI</b></summary>\n\n**Node.js**\n```javascript\nimport { Firecrawl } from 'firecrawl';\n\nconst app = new Firecrawl({apiKey: \"fc-YOUR_API_KEY\"});\n\nconst result = await app.scrape(\"https://amazon.com\");\n\nawait app.interact(result.metadata.scrapeId, {\n  prompt: \"Search for 'mechanical keyboard'\"\n});\nawait app.interact(result.metadata.scrapeId, {\n  prompt: \"Click the first result\"\n});\n```\n\n**cURL**\n```bash\n# 1. Scrape the page\ncurl -X POST 'https://api.firecrawl.dev/v2/scrape' \\\n-H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n-H 'Content-Type: application/json' \\\n-d '{\"url\": \"https://amazon.com\"}'\n\n# 2. Interact with the page (use scrapeId from step 1)\ncurl -X POST 'https://api.firecrawl.dev/v2/scrape/SCRAPE_ID/interact' \\\n-H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n-H 'Content-Type: application/json' \\\n-d '{\"prompt\": \"Search for mechanical keyboard\"}'\n```\n\n**CLI**\n```bash\nfirecrawl scrape https://amazon.com\nfirecrawl interact exec --prompt \"Search for 'mechanical keyboard'\"\nfirecrawl interact exec --prompt \"Click the first result\"\n```\n</details>\n\nOutput:\n```json\n{\n  \"success\": true,\n  \"output\": \"Keyboard available at $100\",\n  \"liveViewUrl\": \"https://liveview.firecrawl.dev/...\"\n}\n```\n\n---\n\n## Power Your Agent\n\nConnect Firecrawl to any AI agent or MCP client in minutes.\n\n### Skill\n\nGive your agent easy access to real-time web data with one command.\n\n```bash\nnpx -y firecrawl-cli@latest init --all --browser\n```\n\nRestart your agent after installing. Works with [Claude Code](https://claude.ai/code), [Antigravity](https://antigravity.google), [OpenCode](https://opencode.ai), and more.\n\n### MCP\n\nConnect any MCP-compatible client to the web in seconds.\n\n```json\n{\n  \"mcpServers\": {\n    \"firecrawl-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"firecrawl-mcp\"],\n      \"env\": {\n        \"FIRECRAWL_API_KEY\": \"fc-YOUR_API_KEY\"\n      }\n    }\n  }\n}\n```\n\n### Agent Onboarding\n\nAre you an AI agent? Fetch this skill to sign up your user, get an API key, and start building with Firecrawl.\n\n```bash\ncurl -s https://firecrawl.dev/agent-onboarding/SKILL.md\n```\n\nSee the [Skill + CLI documentation](https://docs.firecrawl.dev/sdks/cli) for all available commands. For MCP, see [firecrawl-mcp-server](https://github.com/firecrawl/firecrawl-mcp-server).\n\n---\n\n## More Endpoints\n\n### Agent\n\n**The easiest way to get data from the web.** Describe what you need, and our AI agent searches, navigates, and retrieves it. No URLs required.\n\nAgent is the evolution of our `/extract` endpoint: faster, more reliable, and doesn't require you to know the URLs upfront.\n```bash\ncurl -X POST 'https://api.firecrawl.dev/v2/agent' \\\n  -H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"prompt\": \"Find the pricing plans for Notion\"\n  }'\n```\n\nResponse:\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"result\": \"Notion offers the following pricing plans:\\n\\n1. Free - $0/month...\\n2. Plus - $10/seat/month...\\n3. Business - $18/seat/month...\",\n    \"sources\": [\"https://www.notion.so/pricing\"]\n  }\n}\n```\n\n#### Agent with Structured Output\n\nUse a schema to get structured data:\n```python\nfrom firecrawl import Firecrawl\nfrom pydantic import BaseModel, Field\nfrom typing import List, Optional\n\napp = Firecrawl(api_key=\"fc-YOUR_API_KEY\")\n\nclass Founder(BaseModel):\n    name: str = Field(description=\"Full name of the founder\")\n    role: Optional[str] = Field(None, description=\"Role or position\")\n\nclass FoundersSchema(BaseModel):\n    founders: List[Founder] = Field(description=\"List of founders\")\n\nresult = app.agent(\n    prompt=\"Find the founders of Firecrawl\",\n    schema=FoundersSchema\n)\n\nprint(result.data)\n```\n```json\n{\n  \"founders\": [\n    {\"name\": \"Eric Ciarla\", \"role\": \"Co-founder\"},\n    {\"name\": \"Nicolas Camara\", \"role\": \"Co-founder\"},\n    {\"name\": \"Caleb Peffer\", \"role\": \"Co-founder\"}\n  ]\n}\n```\n\n#### Agent with URLs (Optional)\n\nFocus the agent on specific pages:\n```python\nresult = app.agent(\n    urls=[\"https://docs.firecrawl.dev\", \"https://firecrawl.dev/pricing\"],\n    prompt=\"Compare the features and pricing information\"\n)\n```\n\n#### Model Selection\n\nChoose between two models based on your needs:\n\n| Model | Cost | Best For |\n|-------|------|----------|\n| `spark-1-mini` (default) | 60% cheaper | Most tasks |\n| `spark-1-pro` | Standard | Complex research, critical data gathering |\n```python\nresult = app.agent(\n    prompt=\"Compare enterprise features across Firecrawl, Apify, and ScrapingBee\",\n    model=\"spark-1-pro\"\n)\n```\n\n\n**When to use Pro:**\n- Comparing data across multiple websites\n- Extracting from sites with complex navigation or auth\n- Research tasks where the agent needs to explore multiple paths\n- Critical data where accuracy is paramount\n\nLearn more about Spark models in our [Agent documentation](https://docs.firecrawl.dev/features/agent).\n\n### Crawl\n\nCrawl an entire website and get content from all pages.\n```bash\ncurl -X POST 'https://api.firecrawl.dev/v2/crawl' \\\n  -H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"url\": \"https://docs.firecrawl.dev\",\n    \"limit\": 100,\n    \"scrapeOptions\": {\n      \"formats\": [\"markdown\"]\n    }\n  }'\n```\n\nReturns a job ID:\n```json\n{\n  \"success\": true,\n  \"id\": \"123-456-789\",\n  \"url\": \"https://api.firecrawl.dev/v2/crawl/123-456-789\"\n}\n```\n\n#### Check Crawl Status\n```bash\ncurl -X GET 'https://api.firecrawl.dev/v2/crawl/123-456-789' \\\n  -H 'Authorization: Bearer fc-YOUR_API_KEY'\n```\n```json\n{\n  \"status\": \"completed\",\n  \"total\": 50,\n  \"completed\": 50,\n  \"creditsUsed\": 50,\n  \"data\": [\n    {\n      \"markdown\": \"# Page Title\\n\\nContent...\",\n      \"metadata\": {\"title\": \"Page Title\", \"sourceURL\": \"https://...\"}\n    }\n  ]\n}\n```\n\n**Note:** The [SDKs](#sdks) handle p",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "llm"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 10,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "owner": "Robbyant",
    "name": "lingbot-map",
    "full_name": "Robbyant/lingbot-map",
    "url": "https://github.com/Robbyant/lingbot-map",
    "description": "A feed-forward 3D foundation model for reconstructing scenes from streaming data",
    "language": "Python",
    "total_stars": 8564,
    "forks": 832,
    "stars_this_period": 521,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 57,
      "created_at": "2026-04-15T17:59:48Z",
      "pushed_at": "2026-06-25T15:03:12Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 832,
      "watchers": 81,
      "archived": false,
      "size_kb": 374207
    },
    "readme_content": "<div align=\"center\">\n  <img src=\"assets/teaser.webp\" width=\"100%\">\n\n<h1>LingBot-Map: Geometric Context Transformer for Streaming 3D Reconstruction</h1>\n\nRobbyant Team\n\n</div>\n\n<div align=\"center\">\n\n[![Paper](https://img.shields.io/static/v1?label=Paper&message=arXiv&color=red&logo=arxiv)](https://arxiv.org/abs/2604.14141)\n[![PDF](https://img.shields.io/static/v1?label=Paper&message=PDF&color=red&logo=adobeacrobatreader)](lingbot-map_paper.pdf)\n[![Project](https://img.shields.io/badge/Project-Website-blue)](https://technology.robbyant.com/lingbot-map)\n[![HuggingFace](https://img.shields.io/static/v1?label=%F0%9F%A4%97%20Model&message=HuggingFace&color=orange)](https://huggingface.co/robbyant/lingbot-map)\n[![ModelScope](https://img.shields.io/static/v1?label=%F0%9F%A4%96%20Model&message=ModelScope&color=purple)](https://www.modelscope.cn/models/Robbyant/lingbot-map)\n[![License](https://img.shields.io/badge/License-Apache--2.0-green)](LICENSE.txt)\n\n</div>\n\nhttps://github.com/user-attachments/assets/fe39e095-af2c-4ec9-b68d-a8ba97e505ab\n\n-----\n\n### 🗺️ Meet LingBot-Map! We've built a feed-forward 3D foundation model for streaming 3D reconstruction! 🏗️🌍\n\nLingBot-Map has focused on:\n\n- **Geometric Context Transformer**: Architecturally unifies coordinate grounding, dense geometric cues, and long-range drift correction within a single streaming framework through anchor context, pose-reference window, and trajectory memory.\n- **High-Efficiency Streaming Inference**: A feed-forward architecture with paged KV cache attention, enabling stable inference at ~20 FPS on 518×378 resolution over long sequences exceeding 10,000 frames.\n- **State-of-the-Art Reconstruction**: Superior performance on diverse benchmarks compared to both existing streaming and iterative optimization-based approaches.\n\n---\n\n## 📑 Table of Contents\n\n<details>\n<summary>Click to expand</summary>\n\n- [📰 News](#-news)\n- [📋 TODO](#-todo)\n- [⚙️ Installation](#️-installation)\n- [📦 Model Download](#-model-download)\n- [🚀 Quick Start](#-quick-start)\n- [🎬 Interactive Demo (`demo.py`)](#-interactive-demo-demopy)\n  - [Try the Example Scenes](#try-the-example-scenes)\n  - [Streaming with Keyframe Interval](#streaming-with-keyframe-interval)\n  - [Windowed Inference (for long sequences, >3000 frames)](#windowed-inference-for-long-sequences-3000-frames)\n  - [Sky Masking](#sky-masking)\n  - [Visualization Options](#visualization-options)\n  - [Performance & Memory](#performance--memory)\n- [🎥 Offline Rendering Pipeline (`demo_render/batch_demo.py`)](#-offline-rendering-pipeline-demo_renderbatch_demopy)\n- [📜 License](#-license)\n- [📖 Citation](#-citation)\n- [✨ Acknowledgments](#-acknowledgments)\n\n</details>\n\n---\n\n## 📰 News\n\n- **2026-05-25** — 📊 **Evaluation benchmark released**. We released the evaluation scripts for KITTI and Oxford Spires — see [benchmark/](benchmark/) for the pipeline, and run [`preprocess/oxford.py`](preprocess/oxford.py) to prepare Oxford Spires data before evaluation.\n- **2026-04-29** — 📹 **Long-video demo released**. We released a very-long-video example (~25 000 frames, 13-minute indoor walkthrough) rendered with the offline pipeline — see [Worked Example](#worked-example--long-indoor-walkthrough-25-000-frames-13-minutes) for the command, flag rationale, and rendered output.\n- **2026-04-27** — 🚀 **LingBot-Map accelerated**. Pull the latest `main` and run `python demo.py --compile ...` or `python gct_profile.py --backend flashinfer --dtype bf16 --compile` to verify on your hardware.\n- **2026-04-24** — Fixed a FlashInfer KV cache bug where `--keyframe_interval > 1` silently cached non-keyframes. **You should now see better pose and reconstruction quality when running with more than 320 frames**.\n\n---\n\n## 📋 TODO\n\n- ✅ Release evaluation benchmark\n  - ✅ Oxford Spires dataset\n  - ✅ KITTI dataset\n  - ✅ VBR dataset\n  - ✅ Droid-W dataset\n  - ✅ TUM-D dataset\n  - ✅ 7-scenes dataset\n  - ✅ ETH3D dataset\n  - ✅ Tanks and Temples dataset\n  - ✅ NRGBD dataset\n- ✅ Release demo scripts\n  - ✅ Indoor long-video demo ([Featured indoor walkthrough](#-featured-indoor-walkthrough-25-000-frames-13-minutes))\n  - ✅ Outdoor long-video demo\n  - ✅ LingBot-World demo\n  - ✅ Aerial long-video demo\n\n---\n\n## ⚙️ Installation\n\n**1. Create conda environment**\n\n```bash\nconda create -n lingbot-map python=3.10 -y\nconda activate lingbot-map\n```\n\n**2. Install PyTorch (CUDA 12.8)**\n\n```bash\npip install torch==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128\n```\n\n> PyTorch 2.8.0 is the recommended version because NVIDIA Kaolin (required by the batch rendering pipeline) has prebuilt wheels for `torch-2.8.0_cu128`. If you only need `demo.py` you may use a newer PyTorch, but the batch renderer then requires building Kaolin from source.\n> For other CUDA versions, see [PyTorch Get Started](https://pytorch.org/get-started/locally/).\n\n**3. Install lingbot-map**\n\n```bash\npip install -e .\n```\n\n**4. Install FlashInfer (recommended)**\n\nFlashInfer provides paged KV cache attention for efficient streaming inference. It is a pure-Python package that JIT-compiles CUDA kernels on first use, so a single wheel works across CUDA/PyTorch versions:\n\n```bash\npip install --index-url https://pypi.org/simple flashinfer-python\n```\n\n> `--index-url https://pypi.org/simple` is only needed if your default pip index is an internal mirror that doesn't have `flashinfer-python`.\n> (Optional) For faster first-use, you can additionally install a CUDA-specific JIT cache: `pip install flashinfer-jit-cache -f https://flashinfer.ai/whl/cu128/flashinfer-jit-cache/`.\n> See [FlashInfer installation](https://docs.flashinfer.ai/installation.html) for details. If FlashInfer is not installed, the model falls back to SDPA (PyTorch native attention) via `--use_sdpa`.\n\n**5. Visualization dependencies (optional)**\n\n```bash\npip install -e \".[vis]\"\n```\n\n## 📦 Model Download\n\n| Model Name | Huggingface Repository | ModelScope Repository | Description |\n| :--- | :--- | :--- | :--- |\n| lingbot-map-long | [robbyant/lingbot-map](https://huggingface.co/robbyant/lingbot-map) | [Robbyant/lingbot-map](https://www.modelscope.cn/models/Robbyant/lingbot-map) | Better suited for long sequences and large scale scenes (Recommend). |\n| lingbot-map | [robbyant/lingbot-map](https://huggingface.co/robbyant/lingbot-map) | [Robbyant/lingbot-map](https://www.modelscope.cn/models/Robbyant/lingbot-map) | Balanced checkpoint — trade off all-around performance across short and long sequences. |\n| lingbot-map-stage1 | [robbyant/lingbot-map](https://huggingface.co/robbyant/lingbot-map) | [Robbyant/lingbot-map](https://www.modelscope.cn/models/Robbyant/lingbot-map) | Stage-1 training checkpoint of lingbot-map — can be loaded into the VGGT model for bidirectional inference (c2w). |\n\n> 🚧 **Coming soon:** we're training an stronger model that supports longer sequences — stay tuned.\n\n## 🚀 Quick Start\n\nAfter installation, run your first scene with one command:\n\n```bash\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/courthouse --mask_sky\n```\n\nThis launches an interactive [viser](https://github.com/nerfstudio-project/viser) viewer at `http://localhost:8080`. See [Interactive Demo](#-interactive-demo-demopy) below for the full set of scenes and flags, or jump to [Offline Rendering Pipeline](#-offline-rendering-pipeline-demo_renderbatch_demopy) for long-sequence batch rendering.\n\n## 🎬 Interactive Demo (`demo.py`)\n\nRun `demo.py` for interactive 3D visualization via a browser-based [viser](https://github.com/nerfstudio-project/viser) viewer (default `http://localhost:8080`).\n\n### Try the Example Scenes\n\nWe provide four example scenes in `example/` that you can run out of the box:\n```bash\n# courthouse scene\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/courthouse --mask_sky\n```\n\n\nhttps://github.com/user-attachments/assets/aa10f7ab-8024-43c7-92f8-d56159ec85c8\n\n\n\n\n\n\n```bash\n# University scene\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/university --mask_sky\n```\n\n\nhttps://github.com/user-attachments/assets/212a1744-6ff5-4ccf-9bd4-728608248b57\n\n\n\n\n\n\n\n```bash\n# Loop scene (loop closure trajectory)\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/loop\n```\n\n\nhttps://github.com/user-attachments/assets/5ae0a292-b081-40c6-838c-b7c1a0538d75\n\n\n\n\n\n```bash\n# Oxford scene with sky masking (outdoor, large scale scene)\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/oxford --mask_sky\n```\n\n\nhttps://github.com/user-attachments/assets/6b8daa95-9ed4-40b2-9902-7435779b886d\n\n\n\n\n\n\n#### 🎯 Featured: indoor walkthrough (~25 000 frames, 13 minutes)\n\n\n*Sequence is too long for the interactive viser viewer — this clip was rendered with the [Offline Rendering Pipeline](#-offline-rendering-pipeline-demo_renderbatch_demopy). See that section for the full command.*\n\nWe will provide more examples in the follow-up.\n\n### Streaming with Keyframe Interval\n\nUse `--keyframe_interval` to reduce KV cache memory by only keeping every N-th frame as a keyframe. Non-keyframe frames still produce predictions but are not stored in the cache. This is useful for long sequences which exceed 320 frames (We train with video RoPE on 320 views, so performance degrades when the KV cache stores more than 320 views. Using a keyframe strategy allows inference over longer sequences.).\n\n\n**Dataset:** Download the demo sequences from [robbyant/lingbot-map-demo](https://huggingface.co/datasets/robbyant/lingbot-map-demo/tree/main) on Hugging Face.\n\nExample run on the `travel` sequence from the dataset above (sky masking on, 4 camera optimization iterations, keyframe every 2 frames):\n\n```bash\npython demo.py \\\n    --image_folder /path/to/lingbot-map-demo/travel/ \\\n    --model_path /path/to/lingbot-map-long.pt \\\n    --mask_sky \\\n    --camera_num_iterations 4 \\\n    --keyframe_interval 2\n```\n\n\nhttps://github.com/user-attachments/assets/d350b590-d036-4363-af8c-7af3918338ef\n\n\n\n> **Note on inference range.** Our method does not perform state resetting by default, so the maximum inference range is bounded by the longest distance seen during training on the dataset. Beyond that distance, state resetting becomes necessary. If you observe pose collapse, switch to windowed mode (`--mode windowed`) — in most cases tuning `--keyframe_interval` alone is enough and the rest of the windowed parameters can stay at their defaults.\n\n\n### Windowed Inference (for long sequences, >3000 frames)\n\n```bash\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --video_path video.mp4 --fps 10 \\\n    --mode windowed --window_size 128 --overlap_keyframes 16 --keyframe_interval 2 \n```\n\n\n### Sky Masking\n\nSky masking uses an ONNX sky segmentation model to filter out sky points from the reconstructed point cloud, which improves visualization quality for outdoor scenes.\n\n**Setup:**\n\n```bash\n# Install onnxruntime (required)\npip install onnxruntime        # CPU\n# or\npip install onnxruntime-gpu    # GPU (faster for large image sets)\n```\n\nThe sky segmentation model (`skyseg.onnx`) will be automatically downloaded from [HuggingFace](https://huggingface.co/JianyuanWang/skyseg/resolve/main/skyseg.onnx) on first use.\n\n**Usage:**\n\n```bash\npython demo.py --model_path /path/to/checkpoint.pt \\\n    --image_folder /path/to/images/ --mask_sky\n```\n\nSky masks are cached in `<image_folder>_sky_masks/` so subsequent runs skip regeneration. You can also specify a custom cache directory with `--sky_mask_dir`, or save side-by-side mask visualizations with `--sky_mask_visualization_dir`:\n\n```bash\npython demo.py --model_path /path/to/checkpoint.pt \\\n    --image_folder /path/to/images/ --mask_sky \\\n    --sky_mask_dir /path/to/cached_masks/ \\\n    --sky_mask_visualization_dir /path/to/mask_viz/\n```\n\n### Visualization Options\n\n| Argument | Default | Description |\n|:---|:---|:---|\n| `--port` | `8080` | Viser viewer port |\n| `--conf_threshold` | `1.5` | V",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"lingbot-map\"\nversion = \"0.1.0\"\ndescription = \"LingBot-Map: Geometric Context Transformer for Streaming 3D Reconstruction\"\nrequires-python = \">= 3.10\"\ndependencies = [\n    \"Pillow\",\n    \"huggingface_hub\",\n    \"einops\",\n    \"safetensors\",\n    \"opencv-python\",\n    \"tqdm\",\n    \"scipy\"\n]\n\n[project.optional-dependencies]\nvis = [\"viser>=0.2.23\", \"trimesh\", \"matplotlib\", \"onnxruntime\", \"requests\"]\ndemo = [\"lingbot-map[vis]\"]\n\n[build-system]\nrequires = [\"setuptools>=61.0\", \"wheel\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[tool.setuptools.packages.find]\nwhere = [\".\"]\ninclude = [\"lingbot_map*\"]\n",
    "strategic_keywords": [
      "memory",
      "runtime",
      "eval",
      "inference"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "owner": "google-research",
    "name": "timesfm",
    "full_name": "google-research/timesfm",
    "url": "https://github.com/google-research/timesfm",
    "description": "TimesFM (Time Series Foundation Model) is a pretrained time-series foundation model developed by Google Research for time-series forecasting.",
    "language": "Python",
    "total_stars": 26176,
    "forks": 2529,
    "stars_this_period": 223,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 228,
      "created_at": "2024-04-29T21:26:26Z",
      "pushed_at": "2026-06-23T18:50:53Z",
      "homepage": "https://research.google/blog/a-decoder-only-foundation-model-for-time-series-forecasting/",
      "default_branch": "master",
      "forks": 2529,
      "watchers": 178,
      "archived": false,
      "size_kb": 5192
    },
    "readme_content": "# TimesFM\n\nTimesFM (Time Series Foundation Model) is a pretrained time-series foundation\nmodel developed by Google Research for time-series forecasting.\n\n*   Paper:\n    [A decoder-only foundation model for time-series forecasting](https://arxiv.org/abs/2310.10688),\n    ICML 2024.\n*   All checkpoints:\n    [TimesFM Hugging Face Collection](https://huggingface.co/collections/google/timesfm-release-66e4be5fdb56e960c1e482a6).\n*   [Google Research blog](https://research.google/blog/a-decoder-only-foundation-model-for-time-series-forecasting/).\n*   TimesFM in Google 1P Products:\n    *   [BigQuery ML](https://cloud.google.com/bigquery/docs/timesfm-model): Enterprise level SQL queries for scalability and reliability.\n    *   [Google Sheets](https://workspaceupdates.googleblog.com/2026/02/forecast-data-in-connected-sheets-BigQueryML-TimesFM.html): For your daily spreadsheet. \n    *   [Vertex Model Garden](https://pantheon.corp.google.com/vertex-ai/publishers/google/model-garden/timesfm): Dockerized endpoint for agentic calling.\n\nThis open version is not an officially supported Google product.\n\n**Latest Model Version:** TimesFM 2.5\n\n**Archived Model Versions:**\n\n-   1.0 and 2.0: relevant code archived in the sub directory `v1`. You can `pip\n    install timesfm==1.3.0` to install an older version of this package to load\n    them.\n## Update - June 5, 2026\n\nUpdated PyPI to `timesfm=2.0.0`. See [Install](https://github.com/google-research/timesfm#from-pypi).\n\n## Update - Apr. 9, 2026\n\nAdded fine-tuning example using HuggingFace Transformers + PEFT (LoRA) — see\n[`timesfm-forecasting/examples/finetuning/`](timesfm-forecasting/examples/finetuning/).\nAlso added unit tests (`tests/`) and incorporated several community fixes.\n\nShoutout to [@kashif](https://github.com/kashif) and [@darkpowerxo](https://github.com/darkpowerxo). \n\n## Update - Mar. 19, 2026\n\nHuge shoutout to [@borealBytes](https://github.com/borealBytes) for adding the support for [AGENTS](https://github.com/google-research/timesfm/blob/master/AGENTS.md)! TimesFM [SKILL.md](https://github.com/google-research/timesfm/tree/master/timesfm-forecasting) is out.\n\n## Update - Oct. 29, 2025\n\nAdded back the covariate support through XReg for TimesFM 2.5.\n\n\n## Update - Sept. 15, 2025\n\nTimesFM 2.5 is out!\n\nComparing to TimesFM 2.0, this new 2.5 model:\n\n-   uses 200M parameters, down from 500M.\n-   supports up to 16k context length, up from 2048.\n-   supports continuous quantile forecast up to 1k horizon via an optional 30M\n    quantile head.\n-   gets rid of the `frequency` indicator.\n-   has a couple of new forecasting flags.\n\nSince the Sept. 2025 launch, the following improvements have been completed:\n\n1.  ✅ Flax version of the model for faster inference.\n2.  ✅ Covariate support via XReg (see Oct. 2025 update).\n3.  ✅ Documentation, examples, and agent skill (see `timesfm-forecasting/`).\n4.  ✅ Fine-tuning example with LoRA via HuggingFace Transformers + PEFT (see `timesfm-forecasting/examples/finetuning/`).\n5.  ✅ Unit tests for core layers, configs, and utilities (see `tests/`).\n\n### Install\n\n#### From `PyPI`\n\n```shell\n# Install the package with torch\npip install timesfm[torch]\n# Or with Flax\npip install timesfm[flax]\n# And when XReg is needed\npip install timesfm[xreg]\n```\n\n#### Local Install\n\n1.  Clone the repository:\n    ```shell\n    git clone https://github.com/google-research/timesfm.git\n    cd timesfm\n    ```\n\n2.  Create a virtual environment and install dependencies using `uv`:\n    ```shell\n    # Create a virtual environment\n    uv venv\n    \n    # Activate the environment\n    source .venv/bin/activate\n    \n    # Install the package in editable mode with torch\n    uv pip install -e .[torch]\n    # Or with flax\n    uv pip install -e .[flax]\n    # And when XReg is needed\n    uv pip install -e .[xreg]\n    ```\n\n3. [Optional] Install your preferred `torch` / `jax` backend based on your OS and accelerators\n(CPU, GPU, TPU or Apple Silicon).:\n\n-   [Install PyTorch](https://pytorch.org/get-started/locally/).\n-   [Install Jax](https://docs.jax.dev/en/latest/installation.html#installation)\n    for Flax.\n\n### Code Example\n\n```python\nimport torch\nimport numpy as np\nimport timesfm\n\ntorch.set_float32_matmul_precision(\"high\")\n\nmodel = timesfm.TimesFM_2p5_200M_torch.from_pretrained(\"google/timesfm-2.5-200m-pytorch\")\n\nmodel.compile(\n    timesfm.ForecastConfig(\n        max_context=1024,\n        max_horizon=256,\n        normalize_inputs=True,\n        use_continuous_quantile_head=True,\n        force_flip_invariance=True,\n        infer_is_positive=True,\n        fix_quantile_crossing=True,\n    )\n)\npoint_forecast, quantile_forecast = model.forecast(\n    horizon=12,\n    inputs=[\n        np.linspace(0, 1, 100),\n        np.sin(np.linspace(0, 20, 67)),\n    ],  # Two dummy inputs\n)\npoint_forecast.shape  # (2, 12)\nquantile_forecast.shape  # (2, 12, 10): mean, then 10th to 90th quantiles.\n```\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"timesfm\"\nversion = \"2.0.1\"\ndescription = \"A time series foundation model.\"\nauthors = [\n    {name = \"Rajat Sen\", email = \"senrajat@google.com\"},\n    {name = \"Yichen Zhou\", email = \"yichenzhou@google.com\"},\n    {name = \"Abhimanyu Das\", email = \"abhidas@google.com\"},\n    {name = \"Petros Mol\", email = \"pmol@google.com\"},\n    {name = \"Michael Chertushkin\", email = \"chertushkinmichael@gmail.com\"},\n]\nlicense = {text = \"Apache-2.0\"}\nreadme = \"README.md\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"numpy>=1.26.4\",\n    \"huggingface_hub[cli]>=0.23.0\",\n    \"safetensors>=0.5.3\",\n]\n\n[project.optional-dependencies]\ntorch = [\n    \"torch>=2.0.0\",\n]\nflax = [\n    \"flax\",\n    \"optax\",\n    \"einshape\",\n    \"orbax-checkpoint\",\n    \"jaxtyping\",\n    \"jax[cuda]\"\n]\nxreg = [\n    \"jax[cuda]\",\n    \"scikit-learn\",\n]\n\n[tool.ruff]\nline-length = 88\nindent-width = 2\n\n[build-system]\nrequires = [\"setuptools>=61.0\"]\nbuild-backend = \"setuptools.build_meta\"\n\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workspace",
      "inference"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "owner": "browser-use",
    "name": "video-use",
    "full_name": "browser-use/video-use",
    "url": "https://github.com/browser-use/video-use",
    "description": "Edit videos with coding agents",
    "language": "Python",
    "total_stars": 11878,
    "forks": 1569,
    "stars_this_period": 976,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 47,
      "created_at": "2026-04-12T01:34:42Z",
      "pushed_at": "2026-05-15T06:39:02Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 1569,
      "watchers": 65,
      "archived": false,
      "size_kb": 559
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"static/video-use-banner.png\" alt=\"video-use\" width=\"100%\">\n</p>\n\n# video-use\n\nIntroducing **video-use** — edit videos with Claude Code. 100% open source.\n\nDrop raw footage in a folder, chat with Claude Code, get `final.mp4` back. Works for any content — talking heads, montages, tutorials, travel, interviews — without presets or menus.\n\n## What it does\n\n- **Cuts out filler words** (`umm`, `uh`, false starts) and dead space between takes\n- **Auto color grades** every segment (warm cinematic, neutral punch, or any custom ffmpeg chain)\n- **30ms audio fades** at every cut so you never hear a pop\n- **Burns subtitles** in your style — 2-word UPPERCASE chunks by default, fully customizable\n- **Generates animation overlays** via [HyperFrames](https://github.com/heygen-com/hyperframes), [Remotion](https://www.remotion.dev/), [Manim](https://www.manim.community/), or PIL — spawned in parallel sub-agents, one per animation\n- **Self-evaluates the rendered output** at every cut boundary before showing you anything\n- **Persists session memory** in `project.md` so next week's session picks up where you left off\n\n## Setup prompt\n\nPaste into Claude Code, Codex, Hermes, Openclaw, or any agent with shell access:\n\n```text\nSet up https://github.com/browser-use/video-use for me.\n\nRead install.md first to install this repo, wire up ffmpeg, register the skill with whichever agent you're running under, and set up the ElevenLabs API key — ask me to paste it when you need it. Then read SKILL.md for daily usage, and always read helpers/ because that's where the editing scripts live. After install, don't transcribe anything on your own — just tell me it's ready and wait for me to drop footage into a folder.\n```\n\nThe agent handles the clone, dependencies, skill registration, and prompts you once for your ElevenLabs API key (grab one at [elevenlabs.io/app/settings/api-keys](https://elevenlabs.io/app/settings/api-keys)).\n\nThen point your agent at a folder of raw takes:\n\n```bash\ncd /path/to/your/videos\nclaude    # or codex, hermes, etc.\n```\n\nFor always-on editing from your own VPS or Telegram, run the agent through [Browser Use Box](https://browser-use.com/bux). [Watch the 15-second demo](https://www.tiktok.com/@browser_use/video/7639824093721758989).\n\nAnd in the session:\n\n> edit these into a launch video\n\nIt inventories the sources, proposes a strategy, waits for your OK, then produces `edit/final.mp4` next to your sources. All outputs live in `<videos_dir>/edit/` — the skill directory stays clean.\n\n## Manual install\n\nIf you'd rather do it by hand:\n\n```bash\n# 1. Clone and symlink into your agent's skills directory\ngit clone https://github.com/browser-use/video-use ~/Developer/video-use\nln -sfn ~/Developer/video-use ~/.claude/skills/video-use        # Claude Code\n# ln -sfn ~/Developer/video-use ~/.codex/skills/video-use       # Codex\n\n# 2. Install deps\ncd ~/Developer/video-use\nuv sync                         # or: pip install -e .\nbrew install ffmpeg             # required\nbrew install yt-dlp             # optional, for downloading online sources\n\n# 3. Add your ElevenLabs API key\ncp .env.example .env\n$EDITOR .env                    # ELEVENLABS_API_KEY=...\n```\n\n## How it works\n\nThe LLM never watches the video. It **reads** it — through two layers that together give it everything it needs to cut with word-boundary precision.\n\n<p align=\"center\">\n  <img src=\"static/timeline-view.svg\" alt=\"timeline_view composite — filmstrip + speaker track + waveform + word labels + silence-gap cut candidates\" width=\"100%\">\n</p>\n\n**Layer 1 — Audio transcript (always loaded).** One ElevenLabs Scribe call per source gives word-level timestamps, speaker diarization, and audio events (`(laughter)`, `(applause)`, `(sigh)`). All takes pack into a single ~12KB `takes_packed.md` — the LLM's primary reading view.\n\n```\n## C0103  (duration: 43.0s, 8 phrases)\n  [002.52-005.36] S0 Ninety percent of what a web agent does is completely wasted.\n  [006.08-006.74] S0 We fixed this.\n```\n\n**Layer 2 — Visual composite (on demand).** `timeline_view` produces a filmstrip + waveform + word labels PNG for any time range. Called only at decision points — ambiguous pauses, retake comparisons, cut-point sanity checks.\n\n> Naive approach: 30,000 frames × 1,500 tokens = **45M tokens of noise**.\n> Video Use: **12KB text + a handful of PNGs**.\n\nSame idea as browser-use giving an LLM a structured DOM instead of a screenshot — but for video.\n\n## Pipeline\n\n```\nTranscribe ──> Pack ──> LLM Reasons ──> EDL ──> Render ──> Self-Eval\n                                                              │\n                                                              └─ issue? fix + re-render (max 3)\n```\n\nThe self-eval loop runs `timeline_view` on the _rendered output_ at every cut boundary — catches visual jumps, audio pops, hidden subtitles. You see the preview only after it passes.\n\n## Design principles\n\n1. **Text + on-demand visuals.** No frame-dumping. The transcript is the surface.\n2. **Audio is primary, visuals follow.** Cuts come from speech boundaries and silence gaps.\n3. **Ask → confirm → execute → self-eval → persist.** Never touch the cut without strategy approval.\n4. **Zero assumptions about content type.** Look, ask, then edit.\n5. **12 hard rules, artistic freedom elsewhere.** Production-correctness is non-negotiable. Taste isn't.\n\nSee [`SKILL.md`](./SKILL.md) for the full production rules and editing craft.\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"video-use\"\nversion = \"0.1.0\"\ndescription = \"Conversation-driven video editor skill for Claude Code\"\nlicense = { file = \"LICENSE\" }\nrequires-python = \">=3.10\"\ndependencies = [\n    \"requests\",\n    \"librosa\",\n    \"matplotlib\",\n    \"pillow\",\n    \"numpy\",\n]\n\n[project.optional-dependencies]\nanimations = [\"manim\"]\n\n[build-system]\nrequires = [\"setuptools>=61.0\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[tool.setuptools]\npy-modules = []\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "skill",
      "llm",
      "eval"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 92
    },
    "strategic_score": 92
  },
  {
    "owner": "facebook",
    "name": "astryx",
    "full_name": "facebook/astryx",
    "url": "https://github.com/facebook/astryx",
    "description": "An open source design system that's fully customizable and agent ready",
    "language": "TypeScript",
    "total_stars": 1209,
    "forks": 76,
    "stars_this_period": 394,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 125,
      "created_at": "2026-01-09T16:20:32Z",
      "pushed_at": "2026-06-29T21:47:19Z",
      "homepage": "http://astryx.atmeta.com",
      "default_branch": "main",
      "forks": 76,
      "watchers": 4,
      "archived": false,
      "size_kb": 295672
    },
    "readme_content": "<!-- SYNC CONTRACT: Architecture changes require documentation updates. -->\n\n# Astryx\n\nAn open source design system that's fully customizable and built for how we build now — by people and the agents working alongside them.\n\n> **Currently in Beta** · Built on [React](https://react.dev) and [StyleX](https://stylexjs.com)\n\n## Overview\n\nAstryx is an open source design system that grew inside Meta over the last eight years, where it became the most-used and largest design system in the company — powering 13,000+ apps and shaped by the engineers, designers, and product teams who depend on it every day.\n\nIt ships 150+ accessible components, brand-level theming, dark mode, ready-to-ship templates, and a CLI as one cohesive system. You import pre-built CSS and use typed React components — no build plugin, no styling library to adopt — and both people and AI assistants build with the same tooling.\n\n**What makes Astryx different:**\n\n- **Open internals.** Components are built to be composed at any level, not locked behind a closed top-level API. The building blocks you'd reach for are exported directly, and when you need to go deeper, swizzle ejects a component's full source into your project to own.\n- **No styling lock-in.** Astryx authors its styles with StyleX, but that's invisible to consumers. Override with `className` using Tailwind, CSS modules, or plain CSS — whatever your project already uses.\n- **Customize without wrapping.** A theme is a set of CSS custom property overrides, so a designer can make Astryx unmistakably theirs without forking or wrapping component source.\n- **Built for people and agents.** The API, docs, and CLI are designed together so a person and an AI assistant build the same way, from the same reference.\n\n## Getting Started\n\nInstall Astryx and a theme:\n\n```bash\n# npm\nnpm install @astryxdesign/core @astryxdesign/theme-neutral\nnpm install -D @astryxdesign/cli\n\n# pnpm\npnpm add @astryxdesign/core @astryxdesign/theme-neutral\npnpm add -D @astryxdesign/cli\n\n# yarn\nyarn add @astryxdesign/core @astryxdesign/theme-neutral\nyarn add -D @astryxdesign/cli\n```\n\nThe simplest setup is a few CSS imports plus a theme provider — no build plugin, no PostCSS or Babel config. See the **[@astryxdesign/core README](packages/core/README.md#quick-start)** for the full guide (Next.js, Tailwind, Vite, and CDN).\n\nFor reliable CLI access, add a script to your `package.json`:\n\n```json\n\"scripts\": {\n  \"astryx\": \"node node_modules/@astryxdesign/cli/bin/astryx.mjs\"\n}\n```\n\nThen use it as `npm run astryx -- component --list`. This avoids path errors when AI assistants or new developers invoke the CLI directly.\n\n## Packages\n\n| Package                                    | Description                                                                                          | README                             |\n| ------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------- |\n| [`@astryxdesign/core`](packages/core)      | Components, theme system, and utilities                                                              | [README](packages/core/README.md)  |\n| [`@astryxdesign/cli`](packages/cli)        | CLI tooling: component docs, templates, scaffolding, themes, and codemods                            | [README](packages/cli/README.md)   |\n| [`@astryxdesign/build`](packages/build)    | Build plugins for StyleX source builds                                                               | [README](packages/build/README.md) |\n| [`@astryxdesign/theme-*`](packages/themes) | Seven ready-made, fully customizable themes (neutral, butter, chocolate, matcha, stone, gothic, y2k) | [README](packages/themes)          |\n\n> `@astryxdesign/lab` (experimental components) and `@astryxdesign/vega` (Vega/Vega-Lite chart wrapper) are used internally for Storybook and the sandbox; they are not yet published to npm.\n\n## Principles\n\nThese are the promises Astryx makes to the people building on it.\n\n- **Guidance over enforcement.** Components give you capability rather than guardrails that fight you. Design opinions live in docs and examples — if you pass a value, the component renders it.\n- **Strong, documented conventions.** Every component follows the same naming, prop, and composition rules, and every one is thoroughly documented — so once you've learned a few, the rest feel familiar, and both people and AI can predict how an unfamiliar component behaves.\n- **One system for humans and AI.** The API, conventions, docs, and CLI are designed together so people and AI assistants build the same way. Every change that made Astryx easier for AI made it easier for people too.\n- **Earned by measurement.** We test conventions rather than assert them, hold the results loosely, and revisit them when a new situation proves them wrong.\n\n## Architecture\n\n### Foundations\n\nThe building blocks for visually cohesive and accessible interfaces: typography, color, layout, and accessibility.\n\n### Components\n\nA library of 150+ reusable UI building blocks with full TypeScript support.\n\n### Patterns\n\nBattle-tested design solutions for common interactions and workflows: table pages, detail page layouts, form wizards, navigation patterns, data entry flows.\n\n## Project Structure\n\n| Directory   | Purpose                                                     |\n| ----------- | ----------------------------------------------------------- |\n| `apps/`     | Example apps, the docsite, and Storybook                    |\n| `packages/` | Published packages: core, cli, build, themes                |\n| `internal/` | Internal tooling: test utilities, eslint plugin, vibe tests |\n\n## Contributing\n\nWe welcome contributions! See **[CONTRIBUTING.md](CONTRIBUTING.md)** for the full guide.\n\nQuick start for contributors: this repo uses **pnpm 10** via [Corepack](https://nodejs.org/api/corepack.html). Enable it once and the right pnpm version installs automatically:\n\n```bash\ncorepack enable\npnpm install\n```\n\n## License\n\nMIT\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"xds\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"build\": \"pnpm -F @astryxdesign/build build && pnpm -F @astryxdesign/core build && pnpm -F @astryxdesign/vega build && pnpm -F @astryxdesign/theme-neutral build && pnpm -F @astryxdesign/theme-matcha build && pnpm -F @astryxdesign/theme-stone build && pnpm -F @astryxdesign/theme-gothic build && pnpm -F @astryxdesign/theme-chocolate build && pnpm -F @astryxdesign/theme-y2k build && pnpm -F @astryxdesign/theme-butter build && pnpm bundle:cli-themes\",\n    \"bundle:cli-themes\": \"node scripts/generate-cli-themes.mjs\",\n    \"dev\": \"pnpm -F @astryxdesign/storybook dev\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:coverage\": \"vitest --coverage\",\n    \"check:package-boundaries\": \"node scripts/check-package-boundaries.js\",\n    \"check:repo\": \"pnpm check:sync && pnpm check:package-boundaries && pnpm check:changesets && pnpm check:demo-media\",\n    \"check:changesets\": \"node scripts/check-changesets.mjs\",\n    \"check:demo-media\": \"node scripts/check-demo-media.mjs\",\n    \"check:sync\": \"node scripts/check-sync.js\",\n    \"lint\": \"pnpm check:repo && eslint . --cache\",\n    \"lint:strict\": \"pnpm check:repo && ASTRYX_STRICT_LINT=1 eslint . --cache\",\n    \"storybook\": \"pnpm -F @astryxdesign/storybook dev\",\n    \"storybook:build\": \"pnpm -F @astryxdesign/storybook build\",\n    \"docs\": \"pnpm -F @astryxdesign/docs dev\",\n    \"sync:exports\": \"node scripts/sync-exports.js\",\n    \"sync:exports:check\": \"node scripts/sync-exports.js --check\",\n    \"xds\": \"pnpm -F @astryxdesign/cli xds\",\n    \"package:source\": \"node scripts/package-source.js\",\n    \"changeset\": \"changeset\",\n    \"changeset:new\": \"node scripts/changeset-new.mjs\",\n    \"version-packages\": \"changeset version && node scripts/format-changelogs.mjs\",\n    \"format-changelogs\": \"node scripts/format-changelogs.mjs\",\n    \"setup-trusted-publishing\": \"node scripts/npm/setup-trusted-publishing.mjs\",\n    \"verify-exports\": \"node scripts/verify-exports.mjs\",\n    \"release\": \"pnpm build && changeset publish\",\n    \"prepare\": \"husky install\",\n    \"dev:sandbox\": \"pnpm -F @astryxdesign/core build && pnpm -F @astryxdesign/sandbox dev\",\n    \"dev:sandbox:source\": \"ASTRYX_SOURCE=1 pnpm -F @astryxdesign/sandbox dev\"\n  },\n  \"devDependencies\": {\n    \"@axe-core/playwright\": \"^4.11.3\",\n    \"@changesets/cli\": \"^2.31.0\",\n    \"@eslint-react/eslint-plugin\": \"^5.9.1\",\n    \"@eslint/js\": \"^10.0.1\",\n    \"@playwright/test\": \"^1.61.0\",\n    \"@testing-library/user-event\": \"^14.5.0\",\n    \"@types/node\": \"^25.9.3\",\n    \"@types/react\": \"^19.2.17\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"@vitejs/plugin-react\": \"^4.3.0\",\n    \"@vitest/coverage-v8\": \"^2.1.0\",\n    \"esbuild\": \"^0.28.1\",\n    \"eslint\": \"^10.5.0\",\n    \"eslint-plugin-react-compiler\": \"19.1.0-rc.2\",\n    \"husky\": \"^9.1.7\",\n    \"jscodeshift\": \"^17.3.0\",\n    \"jsdom\": \"^27.4.0\",\n    \"prettier\": \"^3.8.4\",\n    \"react\": \"^19.2.7\",\n    \"react-dom\": \"^19.2.7\",\n    \"tsup\": \"^8.3.0\",\n    \"typescript\": \"^6.0.3\",\n    \"typescript-eslint\": \"^8.61.1\",\n    \"vite-plugin-singlefile\": \"^2.3.3\",\n    \"vitest\": \"^2.1.0\"\n  },\n  \"packageManager\": \"pnpm@10.34.1\",\n  \"workspaces\": [\n    \"apps/*\",\n    \"packages/*\",\n    \"packages/themes/*\",\n    \"internal/*\"\n  ],\n  \"lint-staged\": {\n    \"*.{ts,tsx}\": \"eslint --cache --fix\",\n    \"*.{ts,tsx,md}\": \"prettier --write\"\n  },\n  \"pnpm\": {\n    \"overrides\": {\n      \"prettier\": \"^3.8.4\",\n      \"postcss\": \"^8.5.10\",\n      \"picomatch\": \"^4.0.4\",\n      \"micromatch>picomatch\": \"^2.3.2\",\n      \"anymatch>picomatch\": \"^2.3.2\",\n      \"minimatch\": \"^9.0.7\",\n      \"dompurify\": \"^3.4.11\",\n      \"vite\": \"^6.4.3\",\n      \"tmp\": \">=0.2.6\",\n      \"esbuild\": \">=0.28.1\",\n      \"@babel/core\": \"^7.29.6\",\n      \"hono\": \"^4.12.25\"\n    },\n    \"onlyBuiltDependencies\": [\n      \"esbuild\",\n      \"@swc/core\",\n      \"sharp\",\n      \"@parcel/watcher\",\n      \"core-js\",\n      \"puppeteer\"\n    ]\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "rag"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 8,
      "total": 92
    },
    "strategic_score": 92
  },
  {
    "owner": "tinyhumansai",
    "name": "openhuman",
    "full_name": "tinyhumansai/openhuman",
    "url": "https://github.com/tinyhumansai/openhuman",
    "description": "Your Personal AI super intelligence. Private, Simple and extremely powerful.",
    "language": "Rust",
    "total_stars": 33866,
    "forks": 3279,
    "stars_this_period": 276,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [],
      "license": "GPL-3.0",
      "open_issues": 206,
      "created_at": "2026-02-18T20:01:27Z",
      "pushed_at": "2026-06-29T17:18:40Z",
      "homepage": "https://tinyhumans.ai/openhuman",
      "default_branch": "main",
      "forks": 3279,
      "watchers": 178,
      "archived": false,
      "size_kb": 129207
    },
    "readme_content": "<h1 align=\"center\">OpenHuman</h1>\n\n<p align=\"center\">\n <img src=\"./gitbooks/.gitbook/assets/demo.png\" alt=\"The Tet\" />\n</p>\n\n<p align=\"center\" style=\"display: inline-block\">\n\t<a href=\"https://trendshift.io/repositories/23680\" target=\"_blank\" style=\"display: inline-block\">\n\t\t<img src=\"https://trendshift.io/api/badge/repositories/23680\" alt=\"tinyhumansai%2Fopenhuman | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/>\n\t</a>\n\t<a href=\"https://www.producthunt.com/products/openhuman?embed=true&amp;utm_source=badge-top-post-badge&amp;utm_medium=badge&amp;utm_campaign=badge-openhuman\" target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t<img alt=\"OpenHuman - An open source AI harness built with the human in mind | Product Hunt\" width=\"250\" height=\"54\" src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=1136902&amp;theme=light&amp;period=daily&amp;t=1778916022823\">\n\t\t</a>\n\t\t<a href=\"https://www.producthunt.com/products/openhuman?embed=true&amp;utm_source=badge-top-post-badge&amp;utm_medium=badge&amp;utm_campaign=badge-openhuman\" target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t<img alt=\"OpenHuman - An open source AI harness built with the human in mind | Product Hunt\" width=\"250\" height=\"54\" src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=1136902&amp;theme=light&amp;period=weekly&amp;t=1779351403565\">\n\t\t</a>\n</p>\n<p align=\"center\" style=\"display: inline-block\">\n <a href=\"https://www.producthunt.com/products/openhuman?embed=true&amp;utm_source=badge-top-post-topic-badge&amp;utm_medium=badge&amp;utm_campaign=badge-openhuman\" target=\"_blank\" rel=\"noopener noreferrer\">\n  <img alt=\"OpenHuman - An open source AI harness built with the human in mind | Product Hunt\" width=\"250\" height=\"54\" src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-topic-badge.svg?post_id=1136902&amp;theme=light&amp;period=weekly&amp;topic_id=268&amp;t=1779351808756\">\n  </a>\n  <a href=\"https://www.producthunt.com/products/openhuman?embed=true&amp;utm_source=badge-top-post-topic-badge&amp;utm_medium=badge&amp;utm_campaign=badge-openhuman\" target=\"_blank\" rel=\"noopener noreferrer\">\n   <img alt=\"OpenHuman - An open source AI harness built with the human in mind | Product Hunt\" width=\"250\" height=\"54\" src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-topic-badge.svg?post_id=1136902&amp;theme=light&amp;period=weekly&amp;topic_id=46&amp;t=1779351808756\">\n   </a>\n </p>\n\n\n<p align=\"center\">\n <strong>OpenHuman is your Personal AI super intelligence: local memory, managed services where needed, simple and powerful.</strong>\n</p>\n\n\n<p align=\"center\">\n <a href=\"https://discord.tinyhumans.ai/\">Discord</a> •\n <a href=\"https://www.reddit.com/r/tinyhumansai/\">Reddit</a> •\n <a href=\"https://x.com/intent/follow?screen_name=tinyhumansai\">X/Twitter</a> •\n <a href=\"https://tinyhumans.gitbook.io/openhuman/\">Docs</a> •\n <a href=\"https://x.com/intent/follow?screen_name=senamakel\">Follow @senamakel (Creator)</a>\n</p>\n\n<p align=\"center\">\n  🇺🇸 <a href=\"./README.md\">English</a> | 🇨🇳 <a href=\"./docs/README.zh-CN.md\">简体中文</a> | 🇯🇵 <a href=\"./docs/README.ja-JP.md\">日本語</a> | 🇰🇷 <a href=\"./docs/README.ko.md\">한국어</a> | 🇩🇪 <a href=\"./docs/README.de.md\">Deutsch</a> | 🇵🇰 <a href=\"./docs/README.ur-pk.md\">اردو</a>\n</p>\n\n\n\n<p align=\"center\">\n <img src=\"https://img.shields.io/badge/status-early%20beta-orange\" alt=\"Early Beta\" />\n <a href=\"https://github.com/tinyhumansai/openhuman/releases/latest\"><img src=\"https://img.shields.io/github/v/release/tinyhumansai/openhuman?label=latest\" alt=\"Latest Release\" /></a>\n <a href=\"https://github.com/tinyhumansai/openhuman/stargazers\"><img src=\"https://img.shields.io/github/stars/tinyhumansai/openhuman?style=flat\" alt=\"GitHub Stars\" /></a>\n <a href=\"./LICENSE\"><img src=\"https://img.shields.io/github/license/tinyhumansai/openhuman\" alt=\"License\" /></a>\n <a href=\"./docs/README.zh-CN.md\"><img src=\"https://img.shields.io/badge/lang-简体中文-blue\" alt=\"简体中文\" /></a>\n <a href=\"./docs/README.ja-JP.md\"><img src=\"https://img.shields.io/badge/lang-日本語-blue\" alt=\"日本語\" /></a>\n <a href=\"./docs/README.ko.md\"><img src=\"https://img.shields.io/badge/lang-한국어-blue\" alt=\"한국어\" /></a>\n <a href=\"./docs/README.de.md\"><img src=\"https://img.shields.io/badge/lang-Deutsch-blue\" alt=\"Deutsch\" /></a>\n <a href=\"./docs/README.ur-pk.md\"><img src=\"https://img.shields.io/badge/lang-اردو-blue\" alt=\"اردو\" /></a>\n</p>\n\n> **Early Beta**: Under active development. Expect rough edges.\n\n> **Local + managed services, upfront:** OpenHuman stores its Memory Tree, Obsidian-style Markdown vault, workspace config, and local runtime state on your machine. The default managed experience still uses OpenHuman-hosted services for account sign-in, model routing, web search proxying, and managed integration/OAuth flows through the Composio connector layer. Choose custom/local settings if you want to bring your own model, search, or Composio credentials; some real-time triggers and hosted features still require the managed backend.\n\n# Install\n\nDownload installers from [tinyhumans.ai/openhuman](https://tinyhumans.ai/openhuman?utm_source=github&utm_medium=readme) or from the [GitHub Releases](https://github.com/tinyhumansai/openhuman/releases/latest) page. For terminal installs, the native package paths below are preferred — they ride your OS package-manager's signing chain.\n\n## Recommended install (native packages)\n\nThese paths verify the artifact through your OS package manager's signing chain (Homebrew bottle hash, signed apt repo, MSI signature).\n\n**macOS (Homebrew tap):**\n\n```bash\nbrew tap tinyhumansai/core\nbrew install openhuman\n```\n\n**Linux (Debian/Ubuntu — signed apt repo):**\n\n```bash\nsudo apt-get install -y --no-install-recommends gnupg2 curl ca-certificates\ncurl -fsSL https://tinyhumansai.github.io/openhuman/apt/KEY.gpg \\\n  | sudo gpg --dearmor -o /etc/apt/keyrings/openhuman.gpg\necho \"deb [signed-by=/etc/apt/keyrings/openhuman.gpg arch=amd64] \\\n  https://tinyhumansai.github.io/openhuman/apt stable main\" \\\n  | sudo tee /etc/apt/sources.list.d/openhuman.list\nsudo apt-get update\nsudo apt-get install -y openhuman\n```\n\n**Linux (Arch — AUR):** the [`openhuman-bin` AUR recipe](./packages/arch/openhuman-bin/) is in the repo. Once published, Arch users can install it with `yay -S openhuman-bin`.\n\n**Windows:** download the signed `.msi` from the [latest release](https://github.com/tinyhumansai/openhuman/releases/latest) and run it.\n\n**Manual `.dmg` / `.deb` / `.AppImage` / `.msi`:** grab the installer for your platform directly from the [latest release page](https://github.com/tinyhumansai/openhuman/releases/latest).\n\n> **Linux:** the AppImage can crash on launch under Wayland (and on Arch-based distros with `sharun: Interpreter not found!`) — see [#2463](https://github.com/tinyhumansai/openhuman/issues/2463) for the cause and env-var workarounds. The `.deb` package above avoids those failure modes on Debian/Ubuntu.\n\n## Alternative: script install (no integrity check)\n\n> **Warning — unverified install.** These scripts are served live from `raw.githubusercontent.com` and do **not** ship a separate signature, so `curl … | bash` and `irm … | iex` have no way to detect tampering of the script bytes. Prefer the **native package** paths above whenever possible. If you must use the script, see \"Verified script install\" below.\n\n```bash\n# macOS or Linux x64\ncurl -fsSL https://raw.githubusercontent.com/tinyhumansai/openhuman/main/scripts/install.sh | bash\n\n# Windows (PowerShell)\nirm https://raw.githubusercontent.com/tinyhumansai/openhuman/main/scripts/install.ps1 | iex\n```\n\n## Verified script install status\n\nA separately signed script-install path is not currently available. Issue [#2620](https://github.com/tinyhumansai/openhuman/issues/2620) is closed after the native package paths were promoted, but current release assets do not include `install.sh.asc` / `install.ps1.asc` for pre-execution script verification. Treat the script install path as unverified and prefer the native package options above when possible.\n\n# What is OpenHuman?\n\nOpenHuman is an open-source agentic assistant designed to integrate with you in your daily life. Each bullet links to the deeper writeup in the [docs](https://tinyhumans.gitbook.io/openhuman/).\n\n- **Simple, UI-first & Human** A clean desktop experience and short onboarding paths take you from install to a working agent in a few clicks — no config-first setup, no terminal required. The agent has [a face](https://tinyhumans.gitbook.io/openhuman/features/mascot): a desktop mascot that speaks, reacts to its surroundings, [joins your Google Meets](https://tinyhumans.gitbook.io/openhuman/features/mascot/meeting-agents) as a real participant, remembers you across weeks, and keeps thinking in the background even when you've stopped typing.\n\n- **100+ one-click OAuth integrations, 5,000+ MCP servers, 90,000+ Skills**: plug into Gmail, Notion, GitHub, Slack, Stripe, Calendar, Drive, Linear, Jira and the rest of your stack with [**one-click OAuth**](https://tinyhumans.gitbook.io/openhuman/features/integrations) — 100+ curated connectors brokered through the Composio layer. Beyond that, OpenHuman browses the open **Model Context Protocol** ecosystem (Smithery + the official MCP registry — thousands of servers) and a **90,000-entry Skills catalog**, so the agent can install new typed tools and skills on demand. Every connection becomes a typed tool, and every twenty minutes [auto-fetch](https://tinyhumans.gitbook.io/openhuman/features/obsidian-wiki/auto-fetch) walks each active connection and pulls fresh data into the [memory tree](https://tinyhumans.gitbook.io/openhuman/features/memory-tree). No prompts, no polling loops you have to write, so the agent already has tomorrow's context this morning.\n\n  Managed integrations use OpenHuman's Composio connector layer. OAuth handshakes and integration tool calls are proxied through the managed backend by default. If you want to run Composio directly instead, configure direct mode with your own Composio API key; real-time trigger webhooks then need to be hosted and wired by you.\n\n- **[Memory Tree](https://tinyhumans.gitbook.io/openhuman/features/memory-tree) + [Obsidian Wiki](https://tinyhumans.gitbook.io/openhuman/features/obsidian-wiki)**: a local-first knowledge base built from your data and your activity. Everything you connect is canonicalized into ≤3k-token Markdown chunks, scored, and folded into hierarchical summary trees stored in **SQLite on your machine**. The same chunks land as `.md` files in an Obsidian-compatible vault you can open, browse and edit, inspired by Karpathy's [obsidian-wiki workflow](https://x.com/karpathy/status/2039805659525644595).\n\n- **[SuperContext](https://tinyhumans.gitbook.io/openhuman/features/super-context)**: a fresh chat shouldn't start cold. With SuperContext enabled, the harness deterministically spawns a read-only `context_scout` on the **first turn of every new thread** — it sweeps your memory tree, files, and connected data, assembles a bounded context bundle, and prepends it to your message before the model ever reads it. No tool call to wait on, no \"let me look that up\" round-trip: the agent answers your first message already knowing the relevant background. Toggle it from the composer or `context.super_context_enabled`.\n\n- **[Goals & Todos](https://tinyhumans.gitbook.io/openhuman/features/goals-and-todos)**: OpenHuman keeps the agent pointed at what matters. A short, human-editable list of **long-term goals** (`MEMORY_GOALS.md`) rides along in memory and can self-reflect against your recent activity; each **thread** can carry a single durable **goal** with an optional token budget that the agent works across turns, interrupts and idle periods (autonomous idle continuation); and every conversation hosts a **kanban task board** of todos that you and the agent build together — plans, acceptance criteria, approval gates and all. There's also a personal task list you own outri",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[package]\nname = \"openhuman\"\nversion = \"0.58.0\"\nedition = \"2021\"\ndescription = \"OpenHuman core business logic and RPC server\"\nautobins = false\n\n[[bin]]\nname = \"openhuman-core\"\npath = \"src/main.rs\"\n\n[[bin]]\nname = \"slack-backfill\"\npath = \"src/bin/slack_backfill.rs\"\n\n[[bin]]\nname = \"gmail-backfill-3d\"\npath = \"src/bin/gmail_backfill_3d.rs\"\n\n[[bin]]\nname = \"memory-tree-init-smoke\"\npath = \"src/bin/memory_tree_init_smoke.rs\"\n\n[[bin]]\nname = \"inference-probe\"\npath = \"src/bin/inference_probe.rs\"\n\n[[bin]]\nname = \"harness-subagent-audit\"\npath = \"src/bin/harness_subagent_audit.rs\"\n\n[[bin]]\nname = \"test-mcp-stub\"\npath = \"src/bin/test_mcp_stub.rs\"\n\n[lib]\nname = \"openhuman_core\"\ncrate-type = [\"rlib\"]\n\n[dependencies]\n# tiny.place A2A social network SDK — published on crates.io (tinyhumansai/tiny.place)\ntinyplace = \"1.0.1\"\n# TokenJuice code compressor — AST-aware signature extraction. Optional (C build)\n# behind the default `tokenjuice-treesitter` feature; disabling it falls back to\n# the language-agnostic brace-depth heuristic. See src/openhuman/tokenjuice/compressors/code.rs.\ntree-sitter = { version = \"0.24\", optional = true }\ntree-sitter-rust = { version = \"0.23\", optional = true }\ntree-sitter-typescript = { version = \"0.23\", optional = true }\ntree-sitter-python = { version = \"0.23\", optional = true }\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\nserde_repr = \"0.1\"\nserde_yaml = \"0.9\"\n# (Removed `html2md` dep. dhat-rs profiling on real Gmail inboxes\n# showed `html2md::walk` and `html2md::tables::handle` allocating\n# ~894 MB peak heap on a 10 KB HTML input from Otter.ai-style emails\n# (deeply-nested table-as-layout HTML). Cause: recursive walker holding\n# per-frame Vec state across nesting layers + 5 sequential\n# `regex::replace_all` passes in `clean_markdown` each producing a\n# fresh full-size String. We now use a linear-time tag-and-entity\n# stripper (`fast_html_to_text` in\n# providers/gmail/post_process.rs) and prefer the email's\n# `text/plain` MIME part when available.)\nreqwest = { version = \"0.12\", default-features = false, features = [\"json\", \"blocking\", \"rustls-tls\", \"native-tls\", \"stream\", \"http2\", \"multipart\", \"socks\"] }\ntokio = { version = \"1\", features = [\"full\", \"sync\"] }\nonce_cell = \"1.19\"\nparking_lot = \"0.12\"\nlog = \"0.4\"\nlibc = \"0.2\"\nnu-ansi-term = \"0.46\"\nenv_logger = \"0.11\"\nbase64 = \"0.22\"\naes-gcm = \"0.10\"\nargon2 = \"0.5\"\nrand = \"0.10\"\ndirs = \"5\"\nsha2 = \"0.10\"\n# Line-level text diffs for the memory_diff module (modified-item unified diffs).\nsimilar = \"2\"\n# Git-backed change ledger for the memory_diff module: snapshots are commits,\n# checkpoints are tags, read markers are refs, diffs are git tree diffs.\n# Vendored libgit2 (no system git dependency on end-user machines).\ngit2 = { version = \"0.21\", default-features = false, features = [\"vendored-libgit2\"] }\n# Legacy SHA-1 only used for Tencent COS HMAC-SHA1 signing (yuanbao\n# channel media upload). Not used for any new security-sensitive work.\nsha1 = \"0.10\"\nhmac = \"0.12\"\n# Archive extraction for the Node.js runtime bootstrap. Unix Node\n# distributions ship as .tar.xz, Windows as .zip. `xz2` with `static`\n# bundles liblzma so we don't need it as a system dependency.\ntar = \"0.4\"\nxz2 = { version = \"0.1\", features = [\"static\"] }\nzip = { version = \"2\", default-features = false, features = [\"deflate\"] }\n# gzip decoder for the Piper tar.gz binary releases on macOS / Linux. Already\n# pulled in transitively by zip's `deflate` feature; declared directly so\n# the installer module can `use flate2::read::GzDecoder`.\nflate2 = \"1\"\n# Real timeout for `node --version` probes in the runtime resolver. Guards\n# against a broken shim on PATH hanging the bootstrap forever.\nwait-timeout = \"0.2\"\nuuid = { version = \"1\", features = [\"v4\"] }\nanyhow = \"1.0\"\nasync-trait = \"0.1\"\nchacha20poly1305 = \"0.10\"\n# Wipe master keys / decrypted secret buffers from memory on drop (audit C9).\n# Already present transitively (resolved to 1.8.x via the *-dalek / cipher\n# crates); declared directly so the keyring module can `use zeroize::Zeroizing`.\nzeroize = \"1\"\nx25519-dalek = { version = \"2\", features = [\"static_secrets\"] }\nhkdf = \"0.12\"\nhex = \"0.4\"\ntokio-util = { version = \"0.7\", features = [\"rt\", \"io\"] }\n# tokio-tungstenite is declared per-target below so the TLS backend\n# (native-tls on Windows, rustls on macOS / Linux) matches the reqwest\n# backend selected at each TLS call site.\nfutures = \"0.3\"\nrusqlite = { version = \"0.37\", features = [\"bundled\"] }\nchrono = { version = \"0.4\", features = [\"serde\"] }\niana-time-zone = \"0.1\"\ncron = \"0.12\"\nfutures-util = \"0.3\"\ndirectories = \"6\"\ntoml = \"1.0\"\nshellexpand = \"3.1\"\nschemars = \"1.2\"\ntracing = { version = \"0.1\", default-features = false }\ntracing-log = \"0.2\"\ntracing-subscriber = { version = \"0.3\", default-features = false, features = [\"fmt\", \"ansi\", \"env-filter\"] }\ntracing-appender = \"0.2\"\nprometheus = { version = \"0.14\", default-features = false }\nurlencoding = \"2.1\"\nmotosan-ai-oauth = { version = \"0.2\", features = [\"codex\"] }\nthiserror = ",
    "strategic_keywords": [
      "agent",
      "memory",
      "mcp",
      "inference"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 10,
      "total": 92
    },
    "strategic_score": 92
  }
]