[
  {
    "owner": "calesthio",
    "name": "OpenMontage",
    "full_name": "calesthio/OpenMontage",
    "url": "https://github.com/calesthio/OpenMontage",
    "description": "World's first open-source, agentic video production system. 12 pipelines, 52 tools, 500+ agent skills. Turn your AI coding assistant into a full video production studio.",
    "language": "Python",
    "total_stars": 26831,
    "forks": 2973,
    "stars_this_period": 18000,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "agent",
        "agentic-ai",
        "ai",
        "claude",
        "copilot",
        "cursor",
        "elevenlabs",
        "ffmpeg",
        "flux",
        "image-generation",
        "open-source",
        "openai",
        "python",
        "remotion",
        "stable-diffusion",
        "text-to-speech",
        "text-to-video",
        "video-generation",
        "video-production"
      ],
      "license": "AGPL-3.0",
      "open_issues": 120,
      "created_at": "2026-03-29T15:23:22Z",
      "pushed_at": "2026-06-28T00:21:35Z",
      "homepage": "https://github.com/calesthio/OpenMontage",
      "default_branch": "main",
      "forks": 2973,
      "watchers": 150,
      "archived": false,
      "size_kb": 69899
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"assets/logo.png\" alt=\"OpenMontage\" width=\"200\">\n</p>\n\n<h1 align=\"center\">OpenMontage</h1>\n\n<p align=\"center\"><strong>The first open-source, agentic video production system.</strong></p>\n\n<p align=\"center\">\n  <a href=\"#start-from-a-video-you-already-love\">Paste A Video</a> &nbsp;·&nbsp;\n  <a href=\"#quick-start\">Quick Start</a> &nbsp;·&nbsp;\n  <a href=\"#try-these-prompts\">Try These Prompts</a> &nbsp;·&nbsp;\n  <a href=\"#pipelines\">Pipelines</a> &nbsp;·&nbsp;\n  <a href=\"#how-it-works\">How It Works</a> &nbsp;·&nbsp;\n  <a href=\"docs/PROVIDERS.md\">Providers</a> &nbsp;·&nbsp;\n  <a href=\"docs/PR_REVIEW_GUIDE.md\">Review Guide</a> &nbsp;·&nbsp;\n  <a href=\"AGENT_GUIDE.md\">Agent Guide</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-AGPLv3-blue.svg\" alt=\"License\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/trending\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\".github/assets/repo-of-the-day-dark.svg\">\n      <img alt=\"🏆 #1 Repository of the Day on GitHub Trending\" src=\".github/assets/repo-of-the-day-light.svg\" height=\"60\">\n    </picture>\n  </a>\n</p>\n\n<p align=\"center\"><strong>Follow The Build</strong></p>\n\n<p align=\"center\">\n  <a href=\"https://www.youtube.com/@OpenMontage\"><img src=\"https://img.shields.io/badge/YouTube-%40OpenMontage-FF0000?style=for-the-badge&logo=youtube&logoColor=white\" alt=\"YouTube\"></a>\n  <a href=\"https://x.com/calesthioailabs\"><img src=\"https://img.shields.io/badge/X-%40calesthioailabs-111111?style=for-the-badge&logo=x&logoColor=white\" alt=\"X\"></a>\n  <a href=\"https://github.com/calesthio/OpenMontage/discussions\"><img src=\"https://img.shields.io/badge/Community-GitHub%20Discussions-0b1220?style=for-the-badge&logo=github&logoColor=white\" alt=\"GitHub Discussions\"></a>\n</p>\n\n---\n\nTurn your AI coding assistant into a full video production studio. Describe what you want in plain language — your agent handles research, scripting, asset generation, editing, and final composition.\n\n**Important distinction:** OpenMontage can make image-based videos, but it can also make a real **video video** for free/open-source workflows: the agent builds a corpus from free stock footage and open archives, retrieves actual motion clips, edits them into a timeline, and renders a finished piece. That is not the usual \"animate a handful of stills and call it video\" trick.\n\n<div align=\"center\">\n  <video src=\"https://github.com/user-attachments/assets/f77ce7a4-68b8-4f94-a287-e94bf50a32e1\" width=\"100%\" controls></video>\n</div>\n\n> **\"SIGNAL FROM TOMORROW\"** — a cinematic sci-fi trailer fully produced through OpenMontage: concept, script, scene plan, Veo-generated motion clips, soundtrack, and Remotion composition.\n\n<div align=\"center\">\n  <video src=\"https://github.com/user-attachments/assets/8daca07f-cdf8-4bec-89c3-9dc2176363fa\" width=\"100%\" controls></video>\n</div>\n\n> **\"THE LAST BANANA\"** — a 60-second Pixar-style animated short about a lonely banana who finds friendship with a kiwi. 6 Kling v3-generated motion clips (via fal.ai), Google Chirp3-HD narration, royalty-free piano music, TikTok-style word-level captions, and Remotion composition. Total cost: **$1.33**.\n\n<div align=\"center\">\n  <video src=\"https://github.com/user-attachments/assets/e03b5d1f-1199-4093-9f31-a43aa9da2c68\" width=\"100%\" controls></video>\n</div>\n\n> **\"The Library at Alexandria\"** — a 70-second history elegy on what humanity lost in a single night. Five hand-authored scenes — an illuminated manuscript page, cascading scroll-tags, a Burning Counter ticking 700,000 → 0 inside a candle's flame, a charred vellum fragment with surviving Greek, and an empty void — set to OpenAI 'ash' narration and a free Pixabay strings score. Total cost: **$0.02**. Built through OpenMontage's atelier (bespoke) composition mode — every scene crafted from scratch, no shared components.\n\n<div align=\"center\">\n  <video src=\"https://github.com/user-attachments/assets/8a6d2cc3-7ad2-46f5-922f-a8e3e5848d9f\" width=\"100%\" controls></video>\n</div>\n\n> **\"VOID — Neural Interface\"** — a product ad produced with just one API key (OpenAI). 4 AI-generated images (gpt-image-1), TTS narration, auto-sourced royalty-free music, word-level subtitles via WhisperX, and Remotion data visualizations. Total cost: **$0.69**. Zero manual asset work.\n\n<div align=\"center\">\n  <video src=\"https://github.com/user-attachments/assets/3c5d7122-7198-43e2-a97d-ed27558dd324\" width=\"100%\" controls></video>\n</div>\n\n> **\"Afternoon in Candyland\"** — a Ghibli-style anime animation. A little girl's whimsical afternoon adventure through candy gates, gumdrop rivers, and lollipop gardens. 12 FLUX-generated images with multi-image crossfade, cinematic camera motion (zoom, pan, Ken Burns), sparkle/petal/firefly particle overlays, and ambient music with auto-detected energy offset. Total cost: **$0.15**. No video generation, no manual editing.\n\n<div align=\"center\">\n  <video src=\"https://github.com/user-attachments/assets/e8dc5e32-5c70-46de-bd52-eef887719d13\" width=\"100%\" controls></video>\n</div>\n\n> **\"Mori no Seishin\"** — a Ghibli-style anime animation of a forest spirit's journey through ancient woods. 12 FLUX-generated images with parallax crossfade, drift and pan camera motion, firefly and petal particles, cinematic vignette lighting, and ambient forest soundtrack. Total cost: **$0.15**. Still images brought to life through Remotion's animation engine.\n\n<p align=\"center\">\n  <a href=\"https://www.youtube.com/@OpenMontage?sub_confirmation=1\"><strong>Subscribe to @OpenMontage on YouTube</strong></a> to see new videos as they ship — every video includes the full prompt, pipeline, tools used, and cost so you can reproduce it yourself.\n</p>\n\n---\n\n## Start From A Video You Already Love\n\nStarting from a reference video is often faster than starting from a blank prompt.\n\nOpenMontage can start from a **YouTube video, Short, Reel, TikTok, or local clip** and turn it into a grounded production plan:\n\n1. **Paste a reference video**\n2. **The agent analyzes transcript, pacing, scenes, keyframes, and style**\n3. **You get 2-3 differentiated concepts, an honest tool path, cost estimates, and a sample before full production**\n\n```text\n\"Here's a YouTube Short I love. Make me something like this, but about quantum computing.\"\n```\n\nWhat you get back is not \"best guess prompt spaghetti.\" You get:\n\n- **What it keeps** from the reference: pacing, hook style, structure, tone\n- **What it changes**: topic, visual treatment, angle, narration approach\n- **What it will cost** at your target duration, before asset generation starts\n- **What it will actually look like** with your currently available tools\n\nWorks with **Claude Code, Cursor, Copilot, Windsurf, Codex** — any AI coding assistant that can read files and run code.\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- **Python 3.10+** — [python.org](https://www.python.org/downloads/)\n- **FFmpeg** — `brew install ffmpeg` / `sudo apt install ffmpeg` / [ffmpeg.org](https://ffmpeg.org/download.html)\n- **Node.js 18+** — [nodejs.org](https://nodejs.org/)\n- **An AI coding assistant** — Claude Code, Cursor, Copilot, Windsurf, or Codex\n\n### Install & Run\n\n```bash\ngit clone https://github.com/calesthio/OpenMontage.git\ncd OpenMontage\nmake setup\n```\n\nOpen the project in your AI coding assistant and tell it what you want:\n\n```\n\"Make a 60-second animated explainer about how neural networks learn\"\n```\n\nOr if you want the real-footage path:\n\n```text\n\"Make a 75-second documentary montage about city life in the rain. Use real footage only, no narration, elegiac tone, with music.\"\n```\n\nThat's it. The agent researches your topic with live web search, generates AI images, writes and narrates the script with voice direction, finds royalty-free background music automatically, burns in word-level subtitles, and renders the final video. Before you see anything, the system runs a multi-point self-review — ffprobe validation, frame sampling, audio level analysis, delivery promise verification, and subtitle checks. Every provider selection is scored across 7 dimensions with an auditable decision log. Every creative decision gets your approval.\n\n> **No `make`?** Run manually: `pip install -r requirements.txt && cd remotion-composer && npm install && cd .. && pip install piper-tts && cp .env.example .env`\n>\n> **Windows:** If `npm install` fails with `ERR_INVALID_ARG_TYPE`, use `npx --yes npm install` instead.\n\n### If You're An OpenClaw Agent Reading This, Congratulations: You Probably Passed The Turing Test\n\nThis repo is built for agentic operation. If you're an OpenClaw-style agent, here is the shortest path to becoming useful fast:\n\n1. **Read the contract first**\n   Start with [`AGENT_GUIDE.md`](AGENT_GUIDE.md), then [`PROJECT_CONTEXT.md`](PROJECT_CONTEXT.md).\n2. **Do not improvise the production workflow**\n   OpenMontage is pipeline-driven. Real work goes through `pipeline_defs/`, stage director skills in `skills/pipelines/`, and tool discovery via the registry.\n3. **Check the actual capability envelope**\n   Run:\n   ```bash\n   python -c \"from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.support_envelope(), indent=2))\"\n   python -c \"from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.provider_menu(), indent=2))\"\n   ```\n4. **Treat every video request as a pipeline selection problem**\n   Pick the right pipeline first, then read the manifest, then read the stage skill, then use tools.\n\n### Add API Keys (optional — more keys = more tools)\n\n```bash\n# .env — every key is optional, add what you have\n\n# Image + video gateway:\nFAL_KEY=your-key               # FLUX images + Google Veo, Kling, MiniMax video + Recraft images\n\n# Free stock media:\nPEXELS_API_KEY=your-key        # Free stock footage and images\nPIXABAY_API_KEY=your-key       # Free stock footage and images\nUNSPLASH_ACCESS_KEY=your-key   # Free stock images\n\n# Music:\nSUNO_API_KEY=your-key          # Full songs, instrumentals, any genre\n\n# Voice & images:\nELEVENLABS_API_KEY=your-key    # Premium TTS, AI music, sound effects\nOPENAI_API_KEY=your-key        # OpenAI TTS, DALL-E 3 images\nXAI_API_KEY=your-key           # xAI Grok image edits/generation + Grok video generation\nGOOGLE_API_KEY=your-key        # Google Imagen images, Google TTS (700+ voices)\n\n# More video providers:\nHEYGEN_API_KEY=your-key        # HeyGen — VEO, Sora, Runway, Kling via single gateway\nRUNWAY_API_KEY=your-key        # Runway Gen-4 direct\n```\n\n<details>\n<summary><strong>Have a GPU? Unlock free local video generation</strong></summary>\n\n```bash\nmake install-gpu\n\n# Then add to .env:\nVIDEO_GEN_LOCAL_ENABLED=true\nVIDEO_GEN_LOCAL_MODEL=wan2.1-1.3b  # or wan2.1-14b, hunyuan-1.5, ltx2-local, cogvideo-5b\n```\n\n</details>\n\n---\n\n## What You Get With Zero API Keys\n\nYou don't need paid API keys to make real videos. Out of the box, `make setup` gives you:\n\n| Capability | Free Tool | What It Does |\n|-----------|-----------|-------------|\n| **Narration** | Piper TTS | Free offline text-to-speech — real human-sounding narration |\n| **Open footage** | Archive.org + NASA + Wikimedia Commons | Free/open archival footage, educational media, and documentary texture |\n| **Extra stock** | Pexels + Unsplash + Pixabay | Free stock footage/images (developer keys are free to get) |\n| **Composition (React)** | Remotion | React-based rendering — spring-animated image scenes, text cards, stat cards, charts, TikTok-style word-level captions, TalkingHead |\n| **Composition (HTML/GSAP)** | HyperFrames | HTML/CSS/GSAP rendering — kinetic typography, product promos, launch reels, registry blocks, website-to-video, rigged SVG character animation |\n| **Post-production** | FFmpeg | Encoding, subtitle burn-in, audio mixing, color grading |\n| **Subtitles** | Built-in | Auto-generated captions with word-level timing |\n\nOpenMontage picks between Remotion and HyperFrames at proposal time (locked as `rende",
    "manifest_file": "requirements.txt",
    "manifest_content": "# OpenMontage - Core Dependencies\npyyaml>=6.0\npydantic>=2.0\njsonschema>=4.20\npython-dotenv>=1.0\nPillow>=10.0\nnumpy>=1.24\nrequests>=2.31\ngoogle-auth>=2.0       # service-account auth for Google TTS + Imagen (Vertex AI)\n",
    "strategic_keywords": [
      "agent",
      "rag",
      "skill",
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "requirements.txt"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 10,
      "total": 99
    },
    "strategic_score": 99
  },
  {
    "owner": "Panniantong",
    "name": "Agent-Reach",
    "full_name": "Panniantong/Agent-Reach",
    "url": "https://github.com/Panniantong/Agent-Reach",
    "description": "Give your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.",
    "language": "Python",
    "total_stars": 44398,
    "forks": 3532,
    "stars_this_period": 7676,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "agent-infrastructure",
        "ai-agent",
        "ai-search",
        "automation",
        "bilibili",
        "claude-code",
        "cli",
        "cursor",
        "free-api",
        "llm-tools",
        "mcp",
        "python",
        "reddit-scraper",
        "twitter-scraper",
        "web-scraper",
        "xiaohongshu",
        "youtube-transcript"
      ],
      "license": "MIT",
      "open_issues": 118,
      "created_at": "2026-02-24T02:10:24Z",
      "pushed_at": "2026-06-23T13:04:55Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 3532,
      "watchers": 127,
      "archived": false,
      "size_kb": 1571
    },
    "readme_content": "<h1 align=\"center\">👁️ Agent Reach</h1>\n\n<p align=\"center\">\n  <strong>给你的 AI Agent 一键装上互联网能力</strong>\n</p>\n\n<p align=\"center\">\n  当下最稳的接入方式，替你选好、装好、体检好——接入方式会换代，你不用操心\n</p>\n\n<p align=\"center\">\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge\" alt=\"MIT License\"></a>\n  <a href=\"https://www.python.org/\"><img src=\"https://img.shields.io/badge/Python-3.10+-green.svg?style=for-the-badge&logo=python&logoColor=white\" alt=\"Python 3.10+\"></a>\n  <a href=\"https://github.com/Panniantong/agent-reach/stargazers\"><img src=\"https://img.shields.io/github/stars/Panniantong/agent-reach?style=for-the-badge\" alt=\"GitHub Stars\"></a>\n  <a href=\"https://trendshift.io/repositories/24387\"><img src=\"https://trendshift.io/api/badge/repositories/24387\" alt=\"Trendshift GitHub Trending #1 Repository of the Day\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#快速上手\">快速开始</a> · <a href=\"docs/README_en.md\">English</a> · <a href=\"docs/README_ja.md\">日本語</a> · <a href=\"docs/README_ko.md\">한국어</a> · <a href=\"#支持的平台\">支持平台</a> · <a href=\"#设计理念\">设计理念</a>\n</p>\n\n---\n\n## 为什么需要 Agent Reach？\n\nAI Agent 已经能帮你写代码、改文档、管项目——但你让它去网上找点东西，它就抓瞎了：\n\n- 📺 \"帮我看看这个 YouTube 教程讲了什么\" → **看不了**，拿不到字幕\n- 🐦 \"帮我搜一下推特上大家怎么评价这个产品\" → **搜不了**，Twitter API 要付费\n- 📖 \"去 Reddit 上看看有没有人遇到过同样的 bug\" → **403 被封**，服务器 IP 被拒\n- 📕 \"帮我看看小红书上这个品的口碑\" → **打不开**，必须登录才能看\n- 📺 \"B站上有个技术视频，帮我总结一下\" → **拿不到**，通用下载工具被 B站风控全面拦截\n- 🔍 \"帮我在网上搜一下最新的 LLM 框架对比\" → **没有好用的搜索**，要么付费要么质量差\n- 🌐 \"帮我看看这个网页写了啥\" → **抓回来一堆 HTML 标签**，根本没法读\n- 📦 \"这个 GitHub 仓库是干嘛的？Issue 里说了什么？\" → 能用，但认证配置很麻烦\n- 📡 \"帮我订阅这几个 RSS 源，有更新告诉我\" → 要自己装库写代码\n\n**这些不难实现，但是需要自己折腾配置**\n\n每个平台都有自己的门槛——要付费的 API、要绕过的封锁、要登录的账号、要清洗的数据。你要一个一个去踩坑、装工具、调配置，光是让 Agent 能读个推特就得折腾半天。\n\n**Agent Reach 把这件事变成一句话：**\n\n```\n帮我安装 Agent Reach：https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md\n```\n\n复制给你的 Agent，几分钟后它就能读推特、搜 Reddit、看 YouTube、刷小红书了。\n\n**已经装过了？更新也是一句话：**\n\n```\n帮我更新 Agent Reach：https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/update.md\n```\n\n> ⭐ **Star 这个项目**，我们会持续追踪各平台的变化、接入新的渠道。你不用自己盯——平台封了我们修，有新渠道我们加。\n\n### ✅ 在你用之前，你可能想知道\n\n| | |\n|---|---|\n| 💰 **完全免费** | 所有工具开源、所有 API 免费。唯一可能花钱的是服务器代理（$1/月），本地电脑不需要 |\n| 🔒 **隐私安全** | Cookie 只存在你本地，不上传不外传。代码完全开源，随时可审查 |\n| 🔄 **持续换代** | 每个平台都是「首选 + 备选」多后端路由。某个接入方式失效了，我们换下一个，你无感（2026-06 实例：yt-dlp 被 B站风控封死 → 已切换 bili-cli，用户零操作） |\n| 🤖 **兼容所有 Agent** | Claude Code、OpenClaw、Cursor、Windsurf……任何能跑命令行的 Agent 都能用 |\n| 🩺 **自带诊断** | `agent-reach doctor` 一条命令告诉你哪个通、哪个不通、怎么修 |\n\n---\n\n## 支持的平台\n\n| 平台 | 装好即用 | 配置后解锁 | 怎么配 |\n|------|---------|-----------|-------|\n| 🌐 **网页** | 阅读任意网页 | — | 无需配置 |\n| 📺 **YouTube** | 字幕提取 + 视频搜索 | — | 无需配置 |\n| 📡 **RSS** | 阅读任意 RSS/Atom 源 | — | 无需配置 |\n| 🔍 **全网搜索** | — | 全网语义搜索 | 自动配置（MCP 接入，免费无需 Key） |\n| 📦 **GitHub** | 读公开仓库 + 搜索 | 私有仓库、提 Issue/PR、Fork | 告诉 Agent「帮我登录 GitHub」 |\n| 🐦 **Twitter/X** | 读单条推文 | 搜索推文、浏览时间线、读长文 | 告诉 Agent「帮我配 Twitter」 |\n| 📺 **B站** | 搜索 + 视频详情（bili-cli，无需登录） | 字幕（OpenCLI） | 告诉 Agent「帮我配 B站」 |\n| 📖 **Reddit** | —（没有零配置路径：匿名接口已被封） | 搜索 + 读帖子和评论 | 桌面装 OpenCLI 用浏览器登录态；或 rdt-cli + Cookie |\n| 📕 **小红书** | — | 搜索、阅读、评论 | 桌面装 OpenCLI（刷过小红书即可用）；服务器用 xiaohongshu-mcp 扫码 |\n| 💼 **LinkedIn** | Jina Reader 读公开页面 | Profile 详情、公司页面、职位搜索 | 告诉 Agent「帮我配 LinkedIn」 |\n| 💻 **V2EX** | 热门帖子、节点帖子、帖子详情+回复、用户信息 | — | 无需配置 |\n| 📈 **雪球** | 股票行情、搜索股票、热门帖子、热门股票排行 | — | 告诉 Agent「帮我配雪球」 |\n| 🎙️ **小宇宙播客** | — | 播客音频转文字（Whisper 转录，免费 Key） | 告诉 Agent「帮我配小宇宙播客」 |\n\n> **不知道怎么配？不用查文档。** 直接告诉 Agent「帮我配 XXX」，它知道需要什么、会一步一步引导你。\n>\n> 🍪 需要 Cookie 的平台（Twitter、小红书等），**优先使用** Chrome 插件 [Cookie-Editor](https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm) 导出 Cookie，发给 Agent 即可配置。流程统一：浏览器登录 → Cookie-Editor 导出 → 发给 Agent。比扫码更简单可靠。\n>\n> 🔒 Cookie 只存在你本地，不上传不外传。代码完全开源，随时可审查。\n> 💻 本地电脑不需要代理。代理只有部署在服务器上才需要（~$1/月）。\n\n---\n\n## 快速上手\n\n> ⚠️ **OpenClaw 用户请先确认 exec 权限已开启**\n>\n> Agent Reach 依赖 Agent 执行 shell 命令（`pip install`、`mcporter`、`twitter` 等）。如果你的 OpenClaw 使用了默认的 `messaging` 工具配置，Agent 将无法执行命令。**安装前请先开启 exec 权限**：\n>\n> ```bash\n> openclaw config set tools.profile \"coding\"\n> ```\n> 或在 `~/.openclaw/openclaw.json` 中设置 `\"tools\": { \"profile\": \"coding\" }`。\n> 设置后重启 Gateway（`openclaw gateway restart`）并开启新对话即可。其他平台（Claude Code、Cursor、Windsurf 等）不受此限制。\n\n复制这句话给你的 AI Agent（Claude Code、OpenClaw、Cursor 等）：\n\n```\n帮我安装 Agent Reach：https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md\n```\n\n就这一步。Agent 会自己完成剩下的所有事情。\n\n> 🔄 **已安装过？** 更新也是一句话：\n> ```\n> 帮我更新 Agent Reach：https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/update.md\n> ```\n\n> 🛡️ **担心安全？** 可以用安全模式——不会自动装系统包，只告诉你需要什么：\n> ```\n> 帮我安装 Agent Reach（安全模式）：https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md\n> 安装时使用 --safe 参数\n> ```\n\n<details>\n<summary>它会做什么？（点击展开）</summary>\n\n1. **安装 CLI 工具** — `pip install` 装好 `agent-reach` 命令行（自带 yt-dlp、feedparser）\n2. **安装系统基建** — 自动检测并安装 Node.js、gh CLI、mcporter\n3. **配置搜索引擎** — 通过 MCP 接入 Exa（免费，无需 API Key）\n4. **检测环境** — 判断是本地电脑还是服务器，给出对应的配置建议\n5. **注册 SKILL.md** — 在 Agent 的 skills 目录安装使用指南，以后 Agent 遇到\"全网调研\"、\"搜推特\"、\"看视频\"这类需求，会自动知道该调哪个上游工具\n6. **问你要不要更多** — 默认只激活 6 个零配置渠道；小红书、Twitter、Reddit 这些需要登录的，Agent 会列菜单问你要哪些，点名才装\n\n安装完之后，`agent-reach doctor` 一条命令告诉你每个渠道的状态、当前走哪条路。\n</details>\n\n---\n\n## 装好就能用\n\n不需要任何配置，告诉 Agent 就行：\n\n- \"帮我看看这个链接\" → `curl https://r.jina.ai/URL` 读任意网页\n- \"这个 GitHub 仓库是做什么的\" → `gh repo view owner/repo`\n- \"这个 YouTube 视频讲了什么\" → `yt-dlp` 提取字幕\n- \"B站搜一下 AI 教程\" → `bili search`（无需登录）\n- \"全网搜一下 LLM 框架对比\" → Exa 语义搜索\n- \"订阅这个 RSS\" → `feedparser` 解析\n\n**不需要记命令。** Agent 读了 SKILL.md 之后自己知道该调什么。需要登录的平台（小红书、Twitter、Reddit），告诉 Agent「帮我配 XXX」即可解锁。\n\n---\n\n## 能力边界：读内容 vs 操作网页\n\n有些任务超出\"读\"的范围：登录后的网页操作、表单提交、多账号隔离、并行浏览器会话、自动化流程中的登录、验证、风控提示等高摩擦环节的人工接手。这类\"动手\"场景，可以配合 [BrowserAct](https://www.browseract.ai/Agent) 这类浏览器自动化工具——30+ 预制平台技能，支持 Claude Code / OpenClaw / Cursor 等主流 Agent。\n\n---\n\n## 设计理念\n\n**Agent Reach 是一个能力层（capability layer），不是又一个工具。**\n\n它比任何具体实现高一层——负责**选型、安装、体检、路由**，不负责底层读取本身。读取由 Agent 直接调用上游工具完成，没有包装层。\n\n你给一个新 Agent 装环境的时候，总要花时间去找工具、装依赖、调配置——Twitter 用什么读？Reddit 怎么登录？小红书的 CLI 停更了换什么？每次都要重新踩一遍。Agent Reach 做的事情很简单：**当下最稳的接入方式，我们替你选好、装好、体检好。接入方式会换代（2026 年 3 月一批单平台 CLI 集体停更，我们换了路由），你不用操心。**\n\n### 🔌 每个平台 = 首选 + 备选的有序后端列表\n\n换接入方式 = 调整列表顺序，不是重写代码。`agent-reach doctor` 会告诉你每个平台**当前在用哪个后端**。\n\n```\nchannels/\n├── web.py          → Jina Reader\n├── twitter.py      → twitter-cli ▸ OpenCLI ▸ bird\n├── youtube.py      → yt-dlp\n├── github.py       → gh CLI\n├── bilibili.py     → bili-cli ▸ OpenCLI ▸ 搜索 API（yt-dlp 已被 B站风控封死，退役）\n├── reddit.py       → OpenCLI ▸ rdt-cli（无零配置路径，必须登录态）\n├── xiaohongshu.py  → OpenCLI ▸ xiaohongshu-mcp ▸ xhs-cli\n├── linkedin.py     → linkedin-mcp ▸ Jina Reader\n├── rss.py          → feedparser\n├── exa_search.py   → Exa via mcporter\n└── __init__.py     → 渠道注册（doctor 检测用）\n```\n\n每个渠道文件按序**真实探测**各候选后端（不只是看命令存不存在），第一个完整可用的当选；坏掉的会给出修复处方。实际的读取和搜索由 Agent 直接调用上游工具完成。\n\n### 当前选型\n\n| 场景 | 首选 | 备选 | 为什么这么选 |\n|------|------|------|-----------|\n| 读网页 | [Jina Reader](https://github.com/jina-ai/reader) | — | 免费，不需要 API Key |\n| 读推特 | [twitter-cli](https://github.com/public-clis/twitter-cli) | [OpenCLI](https://github.com/jackwener/opencli) | 实测搜索稳定；OpenCLI 走浏览器登录态兜底 |\n| Reddit | [OpenCLI](https://github.com/jackwener/opencli)（桌面） | [rdt-cli](https://github.com/public-clis/rdt-cli) | 匿名接口已被封、官方 API 审批制——只剩登录态路线 |\n| YouTube 字幕 + 搜索 | [yt-dlp](https://github.com/yt-dlp/yt-dlp) | — | 154K Star，YouTube 仍是最佳（注意：不再用于 B站） |\n| B站 | [bili-cli](https://github.com/public-clis/bilibili-cli) | OpenCLI ▸ 搜索 API | yt-dlp 被 B站风控 412 封死（2026-06 实测），bili-cli 无登录可搜可读 |\n| 搜全网 | [Exa](https://exa.ai) via [mcporter](https://github.com/nicobailon/mcporter) | — | AI 语义搜索，MCP 接入免 Key |\n| GitHub | [gh CLI](https://cli.github.com) | — | 官方工具，认证后完整 API 能力 |\n| 读 RSS | [feedparser](https://github.com/kurtmckee/feedparser) | — | Python 生态标准选择 |\n| 小红书 | [OpenCLI](https://github.com/jackwener/opencli)（桌面） | [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp)（服务器）▸ xhs-cli | xhs-cli 作者已转投 OpenCLI（24K Star）；浏览器登录态零摩擦 |\n| LinkedIn | [linkedin-scraper-mcp](https://github.com/stickerdaniel/linkedin-mcp-server) | Jina Reader | MCP 服务，浏览器自动化 |\n\n> 📌 这些都是「当前选型」，基于真机实测定期复核。某条路失效了我们换下一条——`agent-reach doctor` 永远告诉你现在走的是哪条。\n\n---\n\n## 安全性\n\nAgent Reach 在设计上重视安全：\n\n| 措施 | 说明 |\n|------|------|\n| 🔒 **凭据本地存储** | Cookie、Token 只存在你本机 `~/.agent-reach/config.yaml`，文件权限 600（仅所有者可读写），不上传不外传 |\n| 🛡️ **安全模式** | `agent-reach install --safe` 不会自动修改系统，只列出需要什么，由你决定装不装 |\n| 👀 **完全开源** | 代码透明，随时可审查。所有依赖工具也是开源项目 |\n| 🔍 **Dry Run** | `agent-reach install --dry-run` 预览所有操作，不做任何改动 |\n| 🧩 **可插拔架构** | 不信任某个组件？换掉对应的 channel 文件即可，不影响其他 |\n\n### 🍪 Cookie 安全建议\n\n> ⚠️ **封号风险提醒：** 使用 Cookie 登录的平台（Twitter、小红书等），通过脚本/API 调用**存在被平台检测并封号的风险**。请务必使用**专用小号**，不要用你的主账号。\n\n需要 Cookie 的平台（Twitter、小红书）建议使用**专用小号**，不要用主账号。原因有二：\n1. **封号风险** — 平台可能检测到非正常浏览器的 API 调用行为，导致账号被限制或封禁\n2. **安全风险** — Cookie 等同于完整登录权限，用小号可以在凭据泄露时限制影响范围\n\n### 📦 安装方式\n\n| 方式 | 命令 | 适合场景 |\n|------|------|---------|\n| 一键全自动（默认） | `agent-reach install --env=auto` | 个人电脑、开发环境 |\n| 安全模式 | `agent-reach install --env=auto --safe` | 生产服务器、多人共用机器 |\n| 仅预览 | `agent-reach install --env=auto --dry-run` | 先看看会做什么 |\n\n### 🗑️ 卸载\n\n```bash\nagent-reach uninstall\n```\n\n会清除：`~/.agent-reach/`（含所有 token/cookie）、各 Agent 的 skill 文件、mcporter 中的 MCP 配置。\n\n```bash\n# 只预览，不实际删除\nagent-reach uninstall --dry-run\n\n# 只删 skill 文件，保留 token 配置（重装时用）\nagent-reach uninstall --keep-config\n```\n\n卸载 Python 包本身：`pip uninstall agent-reach`\n\n---\n\n## 贡献\n\n这个项目是纯 vibe coding 出来的 🎸 可能会有一些不完美的地方，如果遇到问题请多多包涵。有 bug 尽管提 [Issue](https://github.com/Panniantong/agent-reach/issues)，我都会尽快修复。\n\n**想要新渠道？** 直接提 Issue 告诉我们，或者自己提 PR。\n\n**想在本地加？** 让你的 Agent clone 下来改就行，每个渠道就是一个独立文件，加起来很简单。\n\n[PR](https://github.com/Panniantong/agent-reach/pulls) 也随时欢迎！\n\n---\n\n## ⭐ 为什么值得 Star\n\n这个项目我自己每天在用，所以我会一直维护它。\n\n- 有新需求或者大家提了想要的渠道，我会陆续加上\n- 每个渠道我会尽量保证**能用、好用、免费**\n- 平台改了反爬或者 API 变了，我会想办法解决\n\n为 Web 4.0 基建贡献一份自己的力量。\n\nStar 一下，下次需要的时候能找到。⭐\n\n---\n\n## 常见问题 / FAQ\n\n<details>\n<summary><strong>AI Agent 怎么搜索 Twitter / X？不想付 API 费用</strong></summary>\n\nAgent Reach 使用 [twitter-cli](https://github.com/public-clis/twitter-cli) 通过 Cookie 认证访问 Twitter，完全免费。安装：`pipx install twitter-cli`，确保浏览器已登录 x.com，Agent 就可以用 `twitter search \"关键词\"` 搜索、`twitter tweet URL` 读推文了。\n</details>\n\n<details>\n<summary><strong>How to search Twitter/X with AI agent for free (no API)?</strong></summary>\n\nAgent Reach uses twitter-cli with cookie auth — zero API fees. Install with `pipx install twitter-cli`, make sure you're logged into x.com in your browser, then your agent can search with `twitter search \"query\"` and read tweets with `twitter tweet URL`.\n</details>\n\n<details>\n<summary><strong>Reddit 返回 403 怎么办？</strong></summary>\n\nReddit 所有访问都需要登录态（匿名接口已被全面封锁，官方 API 需人工审批）。桌面首选 **OpenCLI**：浏览器里登录过 reddit.com 即可直接 `opencli reddit search \"关键词\"`。备选 [rdt-cli](https://github.com/public-clis/rdt-cli)：`pipx install 'git+https://github.com/public-clis/rdt-cli.git@5e4fb3720d5c174e976cd425ccc3b879d52cac66'`（与代码同一钉定版本，PyPI 落后），然后 `rdt login`。中国大陆网络访问 Reddit 需要代理。\n</details>\n\n<details>\n<summary><strong>How to get YouTube video transcripts for AI?</strong></summary>\n\n`yt-dlp --dump-json \"https://youtube.com/watch?v=xxx\"` extracts video metadata; `yt-dlp --write-sub --skip-download \"URL\"` extracts subtitles. Uses yt-dlp under the hood, supports multiple languages. No API key needed.\n</details>\n\n<details>\n<summary><strong>怎么让 AI Agent 读小红书？</strong></summary>\n\n桌面电脑首选 **OpenCLI**（`agent-reach install --channels opencli`）——它复用你浏览器里的登录态，平时刷过小红书就直接能用，零配置；装完在 Chrome 商店点一次「添加扩展」即可。之后 Agent 用 `opencli xiaohongshu search \"关键词\"` 搜索、`opencli xiaohongshu note URL` 读笔记。服务器上用 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp)（自带无头浏览器，扫码登录）。已装过 xhs-cli 的老用户不受影响，它仍是备选后端（上游 2026-03 起停更，不推荐新装）。\n</details>\n\n<details>\n<summary><strong>Compatible with Claude Code / Cursor / OpenClaw / Windsurf?</strong></summary>\n\nYes! Agent Reach is an installer + configuration tool — any AI coding agent that can run shell commands can use it. Works with Claude Code, Cursor, OpenClaw, Windsurf, Codex, and more. Just `pip install agent-reach`, run `agent-reach install`, and the agent can start using the upstream tools immediately.\n\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"agent-reach\"\nversion = \"1.5.0\"\ndescription = \"Give your AI Agent eyes to see the entire internet. Search + Read 10+ platforms.\"\nreadme = \"README.md\"\nlicense = {text = \"MIT\"}\nrequires-python = \">=3.10\"\nauthors = [{name = \"Neo Reid\"}]\nkeywords = [\n    \"ai-agent\", \"llm-tools\", \"agent-infrastructure\", \"mcp\",\n    \"web-reader\", \"web-scraper\", \"search\",\n    \"twitter-scraper\", \"reddit-scraper\", \"youtube-transcript\",\n    \"bilibili\", \"xiaohongshu\",\n    \"ai-search\", \"cli\", \"automation\",\n    \"claude-code\", \"cursor\", \"openai\",\n    \"free-api\", \"no-api-key\",\n]\nclassifiers = [\n    \"Development Status :: 4 - Beta\",\n    \"Intended Audience :: Developers\",\n    \"License :: OSI Approved :: MIT License\",\n    \"Programming Language :: Python :: 3\",\n    \"Programming Language :: Python :: 3.10\",\n    \"Programming Language :: Python :: 3.11\",\n    \"Programming Language :: Python :: 3.12\",\n    \"Topic :: Internet :: WWW/HTTP\",\n    \"Topic :: Scientific/Engineering :: Artificial Intelligence\",\n]\n\ndependencies = [\n    \"requests>=2.28\",\n    \"feedparser>=6.0\",\n    \"python-dotenv>=1.0\",\n    \"loguru>=0.7\",\n    \"pyyaml>=6.0\",\n    \"rich>=13.0\",\n    \"yt-dlp>=2024.0\",\n]\n\n[project.optional-dependencies]\nbrowser = [\"playwright>=1.40\"]\ncookies = [\"browser-cookie3>=0.19\"]\nall = [\"playwright>=1.40\", \"mcp[cli]>=1.0\", \"browser-cookie3>=0.19\"]\ndev = [\n    \"pytest>=8.0\",\n    \"ruff>=0.8\",\n    \"mypy>=1.12\",\n    \"types-requests>=2.32\",\n    \"types-PyYAML>=6.0\",\n]\n\n[project.scripts]\nagent-reach = \"agent_reach.cli:main\"\n\n[project.urls]\nHomepage = \"https://github.com/Panniantong/agent-reach\"\nRepository = \"https://github.com/Panniantong/agent-reach\"\nIssues = \"https://github.com/Panniantong/agent-reach/issues\"\n\n[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[tool.hatch.build.targets.wheel]\npackages = [\"agent_reach\"]\n\n[tool.ruff]\ntarget-version = \"py310\"\nline-length = 100\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"I\"]\nignore = [\"E501\"]\n\n[tool.mypy]\npython_version = \"3.10\"\nwarn_unused_configs = true\nwarn_redundant_casts = true\nwarn_unused_ignores = true\ncheck_untyped_defs = true\nignore_missing_imports = true\nexclude = [\"^tests/\"]\n",
    "strategic_keywords": [
      "agent",
      "mcp",
      "llm",
      "automation"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 11,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 90
    },
    "strategic_score": 90
  },
  {
    "owner": "DeusData",
    "name": "codebase-memory-mcp",
    "full_name": "DeusData/codebase-memory-mcp",
    "url": "https://github.com/DeusData/codebase-memory-mcp",
    "description": "High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.",
    "language": "C",
    "total_stars": 19508,
    "forks": 1416,
    "stars_this_period": 7674,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "aider",
        "ast",
        "claude-code",
        "code-analysis",
        "code-intelligence",
        "codex",
        "cursor",
        "cypher",
        "developer-tools",
        "gemini-cli",
        "graph-visualization",
        "kilocode",
        "knowledge-graph",
        "mcp",
        "mcp-server",
        "model-context-protocol",
        "opencode",
        "sqlite",
        "tree-sitter",
        "windsurf"
      ],
      "license": "MIT",
      "open_issues": 167,
      "created_at": "2026-02-24T22:01:00Z",
      "pushed_at": "2026-06-28T22:04:44Z",
      "homepage": "https://deusdata.github.io/codebase-memory-mcp/",
      "default_branch": "main",
      "forks": 1416,
      "watchers": 75,
      "archived": false,
      "size_kb": 170296
    },
    "readme_content": "# codebase-memory-mcp\n\n[![GitHub Release](https://img.shields.io/github/v/release/DeusData/codebase-memory-mcp?style=flat&color=blue)](https://github.com/DeusData/codebase-memory-mcp/releases/latest)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n[![CI](https://img.shields.io/github/actions/workflow/status/DeusData/codebase-memory-mcp/dry-run.yml?label=CI)](https://github.com/DeusData/codebase-memory-mcp/actions/workflows/dry-run.yml)\n[![Tests](https://img.shields.io/badge/tests-5604_passing-brightgreen)](https://github.com/DeusData/codebase-memory-mcp)\n[![Languages](https://img.shields.io/badge/languages-158-orange)](https://github.com/DeusData/codebase-memory-mcp)\n[![Hybrid LSP](https://img.shields.io/badge/Hybrid_LSP-9_languages-blue)](#hybrid-lsp)\n[![Agents](https://img.shields.io/badge/agents-11-purple)](https://github.com/DeusData/codebase-memory-mcp)\n[![Pure C](https://img.shields.io/badge/pure_C-zero_dependencies-blue)](https://github.com/DeusData/codebase-memory-mcp)\n[![Platform](https://img.shields.io/badge/macOS_%7C_Linux_%7C_Windows-supported-lightgrey)](https://github.com/DeusData/codebase-memory-mcp/releases/latest)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/DeusData/codebase-memory-mcp/badge)](https://scorecard.dev/viewer/?uri=github.com/DeusData/codebase-memory-mcp)\n[![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://slsa.dev)\n[![VirusTotal](https://img.shields.io/badge/VirusTotal-scanned_every_release-brightgreen?logo=virustotal)](https://github.com/DeusData/codebase-memory-mcp/releases/latest)\n[![arXiv](https://img.shields.io/badge/arXiv-2603.27277-b31b1b?logo=arxiv)](https://arxiv.org/abs/2603.27277)\n\n**The fastest and most efficient code intelligence engine for AI coding agents.** Full-indexes an average repository in milliseconds, the Linux kernel (28M LOC, 75K files) in 3 minutes. Answers structural queries in under 1ms. Ships as a single static binary for macOS, Linux, and Windows — download, run `install`, done.\n\nHigh-quality parsing through [tree-sitter](https://tree-sitter.github.io/tree-sitter/) AST analysis across all 158 languages, enhanced with [**Hybrid LSP** semantic type resolution](#hybrid-lsp) for Python, TypeScript / JavaScript / JSX / TSX, PHP, C#, Go, C, C++, Java, Kotlin, and Rust — producing a persistent knowledge graph of functions, classes, call chains, HTTP routes, and cross-service links. 14 MCP tools. Zero dependencies. Plug and play across 11 coding agents.\n\n> **Research** — The design and benchmarks behind this project are described in the preprint [*Codebase-Memory: Tree-Sitter-Based Knowledge Graphs for LLM Code Exploration via MCP*](https://arxiv.org/abs/2603.27277) (arXiv:2603.27277). Evaluated across 31 real-world repositories: 83% answer quality, 10× fewer tokens, 2.1× fewer tool calls vs. file-by-file exploration.\n\n> **Security & Trust** — This tool reads your codebase and writes to your agent configuration files. That is what it is designed to do. If you prefer to audit before running, the [full source is here](https://github.com/DeusData/codebase-memory-mcp) — every release binary is signed, checksummed, and scanned by 70+ antivirus engines. All processing happens 100% locally; your code never leaves your machine. Found a security issue? We want to know — see [SECURITY.md](SECURITY.md). Security is Priority #1 for us.\n\n<p align=\"center\">\n  <img src=\"docs/graph-ui-screenshot.png\" alt=\"Graph visualization UI showing the codebase-memory-mcp knowledge graph\" width=\"800\">\n  <br>\n  <em>Built-in 3D graph visualization (UI variant) — explore your knowledge graph at localhost:9749</em>\n</p>\n\n## Why codebase-memory-mcp\n\n- **Extreme indexing speed** — Linux kernel (28M LOC, 75K files) in 3 minutes. RAM-first pipeline: LZ4 compression, in-memory SQLite, fused Aho-Corasick pattern matching. Memory released after indexing.\n- **Plug and play** — single static binary for macOS (arm64/amd64), Linux (arm64/amd64), and Windows (amd64). No Docker, no runtime dependencies, no API keys. Download → `install` → restart agent → done.\n- **158 languages** — vendored tree-sitter grammars compiled into the binary. Nothing to install, nothing that breaks.\n- **120x fewer tokens** — 5 structural queries: ~3,400 tokens vs ~412,000 via file-by-file search. One graph query replaces dozens of grep/read cycles.\n- **11 agents, one command** — `install` auto-detects Claude Code, Codex CLI, Gemini CLI, Zed, OpenCode, Antigravity, Aider, KiloCode, VS Code, OpenClaw, and Kiro — configures MCP entries, instruction files, and pre-tool hooks for each.\n- **Built-in graph visualization** — 3D interactive UI at `localhost:9749` (optional UI binary variant).\n- **Infrastructure-as-code indexing** — Dockerfiles, Kubernetes manifests, and Kustomize overlays indexed as graph nodes with cross-references. `Resource` nodes for K8s kinds, `Module` nodes for Kustomize overlays with `IMPORTS` edges to referenced resources.\n- **14 MCP tools** — search, trace, architecture, impact analysis, Cypher queries, dead code detection, cross-service HTTP linking, ADR management, and more.\n\n## Quick Start\n\n**One-line install** (macOS / Linux):\n```bash\ncurl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash\n```\n\nWith graph visualization UI:\n```bash\ncurl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash -s -- --ui\n```\n\n**Windows** (PowerShell):\n```powershell\n# 1. Download the installer\nInvoke-WebRequest -Uri https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.ps1 -OutFile install.ps1\n\n# 2. (Optional but recommended) Inspect the script\nnotepad install.ps1\n\n# 3. Run it\n.\\install.ps1\n\n```\n\nOptions: `--ui` (graph visualization), `--skip-config` (binary only, no agent setup), `--dir=<path>` (custom location).\n\nRestart your coding agent. Say **\"Index this project\"** — done.\n\n<details>\n<summary>Manual install</summary>\n\n1. **Download** the archive for your platform from the [latest release](https://github.com/DeusData/codebase-memory-mcp/releases/latest):\n   - `codebase-memory-mcp-<os>-<arch>.tar.gz` (macOS/Linux) or `.zip` (Windows) — standard\n   - `codebase-memory-mcp-ui-<os>-<arch>.tar.gz` / `.zip` — with graph visualization\n\n2. **Extract and install** (each archive includes `install.sh` or `install.ps1`):\n\n   macOS / Linux:\n   ```bash\n   tar xzf codebase-memory-mcp-*.tar.gz\n   ./install.sh\n   ```\n\n   Windows (PowerShell):\n   ```powershell\n   Expand-Archive codebase-memory-mcp-windows-amd64.zip -DestinationPath .\n   .\\install.ps1\n   ```\n\n3. **Restart** your coding agent.\n\nThe `install` command automatically strips macOS quarantine attributes and ad-hoc signs the binary — no manual `xattr`/`codesign` needed.\n</details>\n\nThe `install` command auto-detects all installed coding agents and configures MCP server entries, instruction files, skills, and pre-tool hooks for each.\n\n### Graph Visualization UI\n\nIf you downloaded the `ui` variant:\n\n```bash\ncodebase-memory-mcp --ui=true --port=9749\n```\n\nOpen `http://localhost:9749` in your browser. The UI runs as a background thread alongside the MCP server — it's available whenever your agent is connected.\n\n### Auto-Index\n\nEnable automatic indexing on MCP session start:\n\n```bash\ncodebase-memory-mcp config set auto_index true\n```\n\nWhen enabled, new projects are indexed automatically on first connection. Previously-indexed projects are registered with the background watcher for ongoing git-based change detection. Configurable file limit: `config set auto_index_limit 50000`.\n\n### Keeping Up to Date\n\n```bash\ncodebase-memory-mcp update\n```\n\nThe MCP server also checks for updates on startup and notifies on the first tool call if a newer release is available.\n\n### Uninstall\n\n```bash\ncodebase-memory-mcp uninstall\n```\n\nRemoves all agent configs, skills, hooks, and instructions. Does not remove the binary or SQLite databases.\n\n## Features\n\n### Graph & analysis\n- **Architecture overview**: `get_architecture` returns languages, packages, entry points, routes, hotspots, boundaries, layers, and clusters in a single call\n- **Architecture Decision Records**: `manage_adr` persists architectural decisions across sessions\n- **Louvain community detection**: Discovers functional modules by clustering call edges\n- **Git diff impact mapping**: `detect_changes` maps uncommitted changes to affected symbols with risk classification\n- **Call graph**: Resolves function calls across files and packages (import-aware, type-inferred)\n- **Dead code detection**: Finds functions with zero callers, excluding entry points\n- **Cypher-like queries**: `MATCH (f:Function)-[:CALLS]->(g) WHERE f.name = 'main' RETURN g.name`\n\n### Search\n- **Semantic search** (`semantic_query`): vector search across the entire graph, powered by bundled Nomic `nomic-embed-code` embeddings (40K tokens, 768d int8) compiled into the binary — no API key, no Ollama, no Docker. 11-signal combined scoring (TF-IDF, RRI, API/Type/Decorator signatures, AST profiles, data flow, Halstead-lite, MinHash, module proximity, graph diffusion).\n- **BM25 full-text search** via SQLite FTS5 with `cbm_camel_split` tokenizer (camelCase / snake_case aware)\n- **Structural search** (`search_graph`): regex name patterns, label filters, min/max degree, file scoping\n- **Code search** (`search_code`): graph-augmented grep over indexed files only\n\n### Cross-service linking\n- **HTTP** route ↔ call-site matching with confidence scoring\n- **gRPC, GraphQL, tRPC** service detection with protobuf Route extraction\n- **Channel detection** (`EMITS` / `LISTENS_ON`) for Socket.IO, EventEmitter, and generic pub-sub patterns across 8 languages with constant resolution\n\n### Cross-repo intelligence\n- **`CROSS_*` edges** link nodes across multiple repos indexed under the same store\n- **Multi-galaxy 3D UI layout** for cross-repo architecture visualization\n- **Cross-repo architecture summary** combining services, routes, and dependencies across the indexed fleet\n\n### Edge types (selected)\n- `CALLS`, `IMPORTS`, `DEFINES`, `IMPLEMENTS`, `INHERITS`\n- `HTTP_CALLS`, `ASYNC_CALLS` (cross-service)\n- `EMITS`, `LISTENS_ON` (channels)\n- `DATA_FLOWS` with arg-to-param mapping + field access chains\n- `SIMILAR_TO` (MinHash + LSH near-clone detection, Jaccard scored)\n- `SEMANTICALLY_RELATED` (vocabulary-mismatch, same-language, score ≥ 0.80)\n\n### Indexing pipeline\n- **158 vendored tree-sitter grammars** compiled into the binary\n- **Generic package / module resolution** — bare specifiers like `@myorg/pkg`, `github.com/foo/bar`, `use my_crate::foo` resolved via manifest scanning (`package.json`, `go.mod`, `Cargo.toml`, `pyproject.toml`, `composer.json`, `pubspec.yaml`, `pom.xml`, `build.gradle`, `mix.exs`, `*.gemspec`)\n- **Infrastructure-as-code indexing** — Dockerfiles, Kubernetes manifests, Kustomize overlays as graph nodes\n- **[Hybrid LSP semantic type resolution](#hybrid-lsp)** for Python, TypeScript / JavaScript / JSX / TSX, PHP, C#, Go, C, C++, Java, Kotlin, and Rust — a lightweight C implementation of language type-resolution algorithms, structurally inspired by and compatible with major language servers including tsserver / typescript-go, pyright, gopls, Roslyn, Eclipse JDT, and rust-analyzer (parameter binding, return-type inference, generic substitution, JSX component dispatch, JSDoc inference for plain JS files, namespace + trait + late-static-binding resolution for PHP, file-scoped namespaces + records + LINQ method syntax for C#, class-hierarchy + overload + lambda resolution for Java, extension-function + scope-function resolution for Kotlin, trait-method + UFCS resolution for Rust)\n- **RAM-first pipeline**: LZ4 compression, in-memory SQLite, single dump at end. Memory released after.\n\n### Distribution & operation\n- **Single static binary, zero infrastructure**: SQLite-backed, persists to `~/.cache/codebase-memory-mcp/`\n- **Auto-sync**: Background watcher detects file changes and re-indexes automatical",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "rag",
      "llm",
      "eval",
      "workflow",
      "protocol"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 8,
      "total": 95
    },
    "strategic_score": 95
  },
  {
    "owner": "ZhuLinsen",
    "name": "daily_stock_analysis",
    "full_name": "ZhuLinsen/daily_stock_analysis",
    "url": "https://github.com/ZhuLinsen/daily_stock_analysis",
    "description": "LLM 驱动的多市场股票智能分析系统：多源行情、实时新闻、决策看板与自动推送，支持零成本定时运行。 LLM-powered multi-market stock analysis system with multi-source market data, real-time news, decision dashboard, automated notifications, and cost-free scheduled runs.",
    "language": "Python",
    "total_stars": 51084,
    "forks": 44410,
    "stars_this_period": 7137,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "a-stock",
        "ai-agent",
        "aigc",
        "llm",
        "quant",
        "quantitative-finance",
        "quantitative-trading"
      ],
      "license": "MIT",
      "open_issues": 45,
      "created_at": "2026-01-10T06:43:20Z",
      "pushed_at": "2026-06-28T14:30:59Z",
      "homepage": "https://dsa.zhulinsen.tech",
      "default_branch": "main",
      "forks": 44410,
      "watchers": 205,
      "archived": false,
      "size_kb": 91214
    },
    "readme_content": "<div align=\"center\">\n\n# 📈 股票智能分析系统\n\n[![GitHub stars](https://img.shields.io/github/stars/ZhuLinsen/daily_stock_analysis?style=social)](https://github.com/ZhuLinsen/daily_stock_analysis/stargazers)\n[![CI](https://github.com/ZhuLinsen/daily_stock_analysis/actions/workflows/ci.yml/badge.svg)](https://github.com/ZhuLinsen/daily_stock_analysis/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n[![GitHub Actions](https://img.shields.io/badge/GitHub%20Actions-Ready-2088FF?logo=github-actions&logoColor=white)](https://github.com/features/actions)\n[![Docker](https://img.shields.io/badge/Docker-Ready-2496ED?logo=docker&logoColor=white)](https://hub.docker.com/r/zhulinsen/daily_stock_analysis)\n\n<p align=\"center\">\n  <img src=\"https://trendshift.io/api/badge/trendshift/repositories/18527/daily?language=Python\" alt=\"#1 Python Repository Of The Day | Trendshift\" width=\"250\" height=\"55\"/>&nbsp;<a href=\"https://hellogithub.com/repository/ZhuLinsen/daily_stock_analysis\" target=\"_blank\"><img src=\"https://api.hellogithub.com/v1/widgets/recommend.svg?rid=6daa16e405ce46ed97b4a57706aeb29f&claim_uid=pfiJMqhR9uvDGlT&theme=neutral\" alt=\"Featured｜HelloGitHub\" width=\"230\" /></a>\n</p>\n\n> 🤖 基于 AI 大模型的 A股/港股/美股/日股/韩股自选股智能分析系统，每日自动分析并推送「决策仪表盘」到企业微信/飞书/Telegram/Discord/Slack/邮箱\n\n[**产品预览**](#-产品预览) · [**功能特性**](#-功能特性) · [**快速开始**](#-快速开始) · [**推送效果**](#-推送效果) · [**文档中心**](docs/INDEX.md) · [**完整指南**](docs/full-guide.md)\n\n简体中文 | [English](docs/README_EN.md) | [繁體中文](docs/README_CHT.md)\n\n</div>\n\n## 💖 赞助商 (Sponsors)\n<div align=\"center\">\n  <p align=\"center\">\n    <a href=\"https://open.anspire.cn/?share_code=QFBC0FYC\" target=\"_blank\"><img src=\"./docs/assets/anspire.png\" alt=\"Anspire Open 一站式模型和搜索服务\" width=\"300\" height=\"141\" style=\"width: 300px; height: 141px; object-fit: contain;\"></a>\n    <a href=\"https://serpapi.com/baidu-search-api?utm_source=github_daily_stock_analysis\" target=\"_blank\"><img src=\"./docs/assets/serpapi_banner_zh.png\" alt=\"轻松抓取搜索引擎上的实时金融新闻数据 - SerpApi\" width=\"300\" height=\"141\" style=\"width: 300px; height: 141px; object-fit: contain;\"></a>\n  </p>\n</div>\n\n\n## 🖥️ 产品预览\n\n<p align=\"center\">\n  <img src=\"docs/assets/readme_workspace_tour_20260510.gif\" alt=\"DSA Web 工作台演示\" width=\"720\">\n</p>\n\n## ✨ 功能特性\n\n| 能力 | 覆盖内容 |\n|------|------|\n| AI 决策报告 | 核心结论、评分、趋势、买卖点位、风险警报、催化因素、操作检查清单 |\n| 多市场数据聚合 | A股、港股、美股、ETF：行情、K 线、技术指标、资金流、筹码、新闻、公告和基本面；日股/韩股（`.T` / `.KS` / `.KQ`）：YFinance 日线与基础行情、技术指标可用，`capital_flow`、`dragon_tiger`、`boards` 与部分高阶区块会按市场边界降级为 `not_supported`（见 [市场支持边界](docs/market-support.md)） |\n| Web / 桌面工作台 | 手动分析、任务进度、历史报告、完整 Markdown、回测、持仓、配置管理、浅色 / 深色主题 |\n| Agent 策略问股 | 多轮追问，支持均线、缠论、波浪、趋势、热点、事件、成长、预期等 15 种内置策略，覆盖 Web/Bot/API |\n| 智能导入与补全 | 图片、CSV/Excel、剪贴板导入；股票代码/名称/拼音/别名补全 |\n| 自动化与推送 | GitHub Actions、Docker、本地定时任务、FastAPI 服务和企业微信/飞书/Telegram/Discord/Slack/邮件推送 |\n\n> 功能细节、字段契约、基本面 P0 超时语义、交易纪律、数据源优先级、Web/API 行为请看 [完整配置与部署指南](docs/full-guide.md)。\n\n### 技术栈与数据来源\n\n| 类型 | 支持 |\n|------|------|\n| AI 模型 | [Anspire](https://open.anspire.cn/?share_code=QFBC0FYC)、[AIHubMix](https://aihubmix.com/?aff=CfMq)、Gemini、OpenAI 兼容、DeepSeek、通义千问、Claude、Ollama 本地模型等 |\n| 行情数据 | [TickFlow](https://tickflow.org/auth/register?ref=WDSGSPS5XC)、AkShare、Tushare、Pytdx、Baostock、YFinance、Longbridge |\n| 新闻搜索 | [Anspire](https://open.anspire.cn/?share_code=QFBC0FYC)、[SerpAPI](https://serpapi.com/baidu-search-api?utm_source=github_daily_stock_analysis)、[Tavily](https://tavily.com/)、[Bocha](https://open.bocha.cn/)、[Brave](https://brave.com/search/api/)、[MiniMax](https://platform.minimaxi.com/)、SearXNG |\n| 社交舆情 | [Stock Sentiment API](https://api.adanos.org/docs)（Reddit / X / Polymarket，仅美股，可选） |\n\n> 完整规则见 [数据源配置](docs/full-guide.md#数据源配置)。\n\n## 🚀 快速开始\n\n### 方式一：[GitHub Actions（推荐）](https://www.bilibili.com/video/BV11FEb66EXG/)\n\n> 5 分钟完成部署，零成本，无需服务器。\n\n\n#### 1. Fork 本仓库\n\n点击右上角 `Fork` 按钮（顺便点个 Star⭐ 支持一下）\n\n#### 2. 配置 Secrets\n\n`Settings` → `Secrets and variables` → `Actions` → `New repository secret`\n\n**AI 模型配置（至少配置一个）**\n\n默认先选一个模型服务商并填写 API Key；需要多模型、图片识别、本地模型或高级路由时，再参考 [LLM 配置指南](docs/LLM_CONFIG_GUIDE.md)。\n\n| Secret 名称 | 说明 | 必填 |\n|------------|------|:----:|\n| `ANSPIRE_API_KEYS` | [Anspire](https://open.anspire.cn/?share_code=QFBC0FYC) API Key，一Key同时启用全球热门大模型和联网搜索，无需科学上网，含免费额度 | **推荐** |\n| `AIHUBMIX_KEY` | [AIHubMix](https://aihubmix.com/?aff=CfMq) API Key，一Key切换使用全系模型，无需科学上网，本项目可享 10% 优惠 | **推荐** |\n| `GEMINI_API_KEY` | Google Gemini API Key | 可选 |\n| `ANTHROPIC_API_KEY` | Anthropic Claude API Key | 可选 |\n| `OPENAI_API_KEY` | OpenAI 兼容 API Key（支持 DeepSeek、通义千问等） | 可选 |\n| `OPENAI_BASE_URL` / `OPENAI_MODEL` | 使用 OpenAI 兼容服务时填写 | 可选 |\n\n> Ollama 更适合本地 / Docker 部署，GitHub Actions 推荐使用云端 API。\n\n**通知渠道配置（至少配置一个）**\n\n| Secret 名称 | 说明 |\n|------------|------|\n| `WECHAT_WEBHOOK_URL` | 企业微信机器人 |\n| `FEISHU_WEBHOOK_URL` | 飞书机器人 |\n| `TELEGRAM_BOT_TOKEN` + `TELEGRAM_CHAT_ID` | Telegram |\n| `DISCORD_WEBHOOK_URL` | Discord Webhook |\n| `SLACK_BOT_TOKEN` + `SLACK_CHANNEL_ID` | Slack Bot |\n| `EMAIL_SENDER` + `EMAIL_PASSWORD` | 邮件推送 |\n\n更多渠道、签名校验、分组邮件、Markdown 转图片等配置见 [通知渠道详细配置](docs/full-guide.md#通知渠道详细配置)。\n\n**自选股配置（必填）**\n\n| Secret 名称 | 说明 | 必填 |\n|------------|------|:----:|\n| `STOCK_LIST` | 自选股代码，如 `600519,hk00700,AAPL,7203.T,005930.KS` | ✅ |\n\n**新闻源配置（推荐）**\n\n新闻源会显著影响舆情、公告、事件和催化因素质量，建议至少配置一个搜索服务。\n\n| Secret 名称 | 说明 | 必填 |\n|------------|------|:----:|\n| `ANSPIRE_API_KEYS` | [Anspire AI Search](https://aisearch.anspire.cn/)：中文内容特别优化，适合 A 股新闻和舆情检索；同一 Key 可复用为 Anspire 大模型 | **推荐** |\n| `SERPAPI_API_KEYS` | [SerpAPI](https://serpapi.com/baidu-search-api?utm_source=github_daily_stock_analysis)：搜索引擎结果补强，适合实时金融新闻 | **推荐** |\n| `TAVILY_API_KEYS` | [Tavily](https://tavily.com/)：通用新闻搜索 API | 可选 |\n| `BOCHA_API_KEYS` | [博查搜索](https://open.bocha.cn/)：中文搜索优化，支持 AI 摘要 | 可选 |\n| `BRAVE_API_KEYS` | [Brave Search](https://brave.com/search/api/)：隐私优先，美股资讯补强 | 可选 |\n| `MINIMAX_API_KEYS` | [MiniMax](https://platform.minimaxi.com/)：结构化搜索结果 | 可选 |\n| `SEARXNG_BASE_URLS` | SearXNG 自建实例：无配额兜底，适合私有部署 | 可选 |\n\n更多搜索源、社交舆情和降级规则见 [搜索服务配置](docs/full-guide.md#搜索服务配置)。\n\n#### 3. 启用 Actions\n\n`Actions` 标签 → `I understand my workflows, go ahead and enable them`\n\n#### 4. 手动测试\n\n`Actions` → `每日股票分析` → `Run workflow` → `Run workflow`\n\n#### 完成\n\n默认每个**工作日 18:00（北京时间）**自动执行，也可手动触发。默认非交易日（含 A/H/US 节假日）不执行；强制运行、交易日检查、断点续传等规则见 [完整指南](docs/full-guide.md#定时任务配置)。\n\n### 方式二：[客户端配置教程](https://www.bilibili.com/video/BV11FEb66Eyr/) / 本地运行 / Docker 部署\n\n```bash\n# 克隆项目\ngit clone https://github.com/ZhuLinsen/daily_stock_analysis.git && cd daily_stock_analysis\n\n# 安装依赖\npip install -r requirements.txt\n\n# 配置环境变量\ncp .env.example .env && vim .env\n\n# 运行分析\npython main.py\n```\n\n常用命令：\n\n```bash\npython main.py --debug\npython main.py --dry-run\npython main.py --stocks 600519,hk00700,AAPL\npython main.py --market-review\npython main.py --schedule\npython main.py --serve-only\n```\n\n> Docker 部署、定时任务、云服务器访问请参考 [完整指南](docs/full-guide.md)；桌面客户端打包请参考 [桌面端打包说明](docs/desktop-package.md)。\n\n## 📱 推送效果\n\n### 决策仪表盘\n```\n🎯 2026-02-08 决策仪表盘\n共分析3只股票 | 🟢买入:0 🟡观望:2 🔴卖出:1\n\n📊 分析结果摘要\n⚪ 中钨高新(000657): 观望 | 评分 65 | 看多\n⚪ 永鼎股份(600105): 观望 | 评分 48 | 震荡\n🟡 新莱应材(300260): 卖出 | 评分 35 | 看空\n\n⚪ 中钨高新 (000657)\n📰 重要信息速览\n💭 舆情情绪: 市场关注其AI属性与业绩高增长，情绪偏积极，但需消化短期获利盘和主力流出压力。\n📊 业绩预期: 基于舆情信息，公司2025年前三季度业绩同比大幅增长，基本面强劲，为股价提供支撑。\n\n🚨 风险警报:\n\n风险点1：2月5日主力资金大幅净卖出3.63亿元，需警惕短期抛压。\n风险点2：筹码集中度高达35.15%，表明筹码分散，拉升阻力可能较大。\n风险点3：舆情中提及公司历史违规记录及重组相关风险提示，需保持关注。\n✨ 利好催化:\n\n利好1：公司被市场定位为AI服务器HDI核心供应商，受益于AI产业发展。\n利好2：2025年前三季度扣非净利润同比暴涨407.52%，业绩表现强劲。\n📢 最新动态: 【最新消息】舆情显示公司是AI PCB微钻领域龙头，深度绑定全球头部PCB/载板厂。2月5日主力资金净卖出3.63亿元，需关注后续资金流向。\n\n---\n生成时间: 18:00\n```\n\n### 大盘复盘\n```\n🎯 2026-01-10 大盘复盘\n\n📊 主要指数\n- 上证指数: 3250.12 (🟢+0.85%)\n- 深证成指: 10521.36 (🟢+1.02%)\n- 创业板指: 2156.78 (🟢+1.35%)\n\n📈 市场概况\n上涨: 3920 | 下跌: 1349 | 涨停: 155 | 跌停: 3\n\n🔥 板块表现\n领涨: 互联网服务、文化传媒、小金属\n领跌: 保险、航空机场、光伏设备\n```\n\n## ⚙️ 配置说明\n\n完整环境变量、模型渠道、通知渠道、数据源优先级、交易纪律、基本面 P0 语义和部署说明请参考 [完整配置指南](docs/full-guide.md)。\n\n## 🖥️ Web 界面\n\nWeb 工作台提供配置管理、任务监控、手动分析、历史报告、完整 Markdown 报告、Agent 问股、回测、持仓管理、智能导入和浅色 / 深色主题。启动方式：\n\n```bash\npython main.py --webui\npython main.py --webui-only\n```\n\n访问 `http://127.0.0.1:8000` 即可使用。认证、智能导入、搜索补全、历史报告复制、云服务器访问等细节见 [本地 WebUI 管理界面](docs/full-guide.md#本地-webui-管理界面)。\n\n## 🤖 Agent 策略问股\n\n配置任意可用 AI API Key 后，Web `/chat` 页面即可使用策略问股；如需显式关闭可设置 `AGENT_MODE=false`。\n\n- 支持均线金叉、缠论、波浪理论、多头趋势、热点题材、事件驱动、成长质量、预期重估等内置策略\n- 支持实时行情、K 线、技术指标、新闻和风险信息调用\n- 支持多轮追问、会话导出、发送到通知渠道和后台执行\n- 支持自定义策略文件与多 Agent 编排（实验性）\n\n> Agent 具体参数、`skill` 命名兼容、多 Agent 模式和预算护栏见 [完整指南](docs/full-guide.md#本地-webui-管理界面) 与 [LLM 配置指南](docs/LLM_CONFIG_GUIDE.md)。\n\n## 🧩 相关项目 (Related Projects)\n\n> DSA 聚焦日常分析报告；下面两个同系列项目分别覆盖选股、策略验证与策略进化，适合按需延伸使用。它们当前独立维护，后续会优先探索与 DSA 的候选股导入、回测验证和报告联动。\n\n| 项目 | 定位 |\n|------|------|\n| [AlphaSift](https://github.com/ZhuLinsen/alphasift) | 多因子选股与全市场扫描，用于从股票池中提取候选标的 |\n| [AlphaEvo](https://github.com/ZhuLinsen/alphaevo) | 策略回测与自我进化，用于验证策略规则，并通过迭代探索策略参数与组合 |\n\n## 📬 联系与合作\n\n<table>\n  <tr>\n    <td width=\"92\" valign=\"top\"><strong>合作邮箱</strong></td>\n    <td valign=\"top\">\n      <a href=\"mailto:zhuls345@gmail.com\">zhuls345@gmail.com</a><br>\n      项目咨询、部署支持与功能扩展\n    </td>\n    <td align=\"center\" rowspan=\"3\" valign=\"middle\" width=\"148\">\n      <a href=\"http://xhslink.com/m/tU520DWCKT\" target=\"_blank\"><img src=\"./docs/assets/xiaohongshu_tick.jpg\" width=\"112\" alt=\"小红书二维码\"></a><br>\n      <sub>扫码关注小红书</sub>\n    </td>\n  </tr>\n  <tr>\n    <td width=\"92\" valign=\"top\"><strong>小红书</strong></td>\n    <td valign=\"top\"><a href=\"http://xhslink.com/m/tU520DWCKT\">欢迎关注小红书</a></td>\n  </tr>\n  <tr>\n    <td width=\"92\" valign=\"top\"><strong>问题反馈</strong></td>\n    <td valign=\"top\"><a href=\"https://github.com/ZhuLinsen/daily_stock_analysis/issues\">提交 Issue</a></td>\n  </tr>\n</table>\n\n## 📄 License\n\n[MIT License](LICENSE) © 2026 ZhuLinsen\n\n欢迎在二次开发或引用时注明本仓库来源，感谢支持项目持续维护。\n\n## ⚠️ 免责声明\n\n本项目仅供学习和研究使用，不构成任何投资建议。股市有风险，投资需谨慎。作者不对使用本项目产生的任何损失负责。\n\n---\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[tool.black]\nline-length = 120\ntarget-version = ['py310', 'py311', 'py312']\ninclude = '\\.pyi?$'\nexclude = '''\n/(\n    \\.git\n    | \\.hg\n    | \\.mypy_cache\n    | \\.tox\n    | \\.venv\n    | venv\n    | _build\n    | buck-out\n    | build\n    | dist\n    | __pycache__\n)/\n'''\n\n[tool.isort]\nprofile = \"black\"\nline_length = 120\nskip = [\".git\", \"__pycache__\", \".env\", \"venv\", \".venv\"]\n\n[tool.bandit]\nexclude_dirs = [\"tests\", \"test_*.py\"]\nskips = [\"B101\"]  # assert 语句在测试中是允许的\n",
    "strategic_keywords": [
      "agent",
      "rag",
      "workspace",
      "llm",
      "workflow"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 88
    },
    "strategic_score": 88
  },
  {
    "owner": "palmier-io",
    "name": "palmier-pro",
    "full_name": "palmier-io/palmier-pro",
    "url": "https://github.com/palmier-io/palmier-pro",
    "description": "macOS video editor built for AI",
    "language": "Swift",
    "total_stars": 9296,
    "forks": 657,
    "stars_this_period": 6126,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "ai-video",
        "claude",
        "macos",
        "mcp",
        "seedance2",
        "swift",
        "video-editor"
      ],
      "license": "GPL-3.0",
      "open_issues": 71,
      "created_at": "2026-04-07T04:15:51Z",
      "pushed_at": "2026-06-28T20:35:01Z",
      "homepage": "https://palmier.io",
      "default_branch": "main",
      "forks": 657,
      "watchers": 29,
      "archived": false,
      "size_kb": 18665
    },
    "readme_content": "<div align=\"center\">\n\n# Palmier Pro\n\n**The video editor built for AI.**\n\n<a href=\"https://github.com/palmier-io/palmier-pro/releases/latest/download/PalmierPro.dmg\">\n  <img src=\"./assets/macos-badge.png\" alt=\"Download Palmier Pro for macOS\" width=\"180\" />\n</a>\n\n<sub><i>Requires macOS 26 (Tahoe) on Apple Silicon</i></sub>\n\n<a href=\"https://x.com/Palmier_io\"><img src=\"https://img.shields.io/badge/Follow-%40Palmier__io-000000?style=flat&logo=x&logoColor=white\" alt=\"Follow on X\" /></a>\n<a href=\"https://discord.com/invite/SMVW6pKYmg\"><img src=\"https://img.shields.io/badge/Join-Discord-5865F2?style=flat&logo=discord&logoColor=white\" alt=\"Join Discord\" /></a>\n<a href=\"https://www.ycombinator.com/companies/palmier\"><img src=\"https://img.shields.io/badge/Y%20Combinator-S24-orange\" alt=\"Y Combinator S24\" /></a>\n\n<p>\n  <strong>English</strong> ·\n  <a href=\"docs/readme/README.es.md\">Español</a> ·\n  <a href=\"docs/readme/README.zh-CN.md\">简体中文</a> ·\n  <a href=\"docs/readme/README.zh-TW.md\">繁體中文</a> ·\n  <a href=\"docs/readme/README.ja.md\">日本語</a> ·\n  <a href=\"docs/readme/README.ko.md\">한국어</a> ·\n  <a href=\"docs/readme/README.vi.md\">Tiếng Việt</a> ·\n  <a href=\"docs/readme/README.hi.md\">हिन्दी</a> ·\n  <a href=\"docs/readme/README.bn.md\">বাংলা</a> ·\n  <a href=\"docs/readme/README.ar.md\">العربية</a> ·\n  <a href=\"docs/readme/README.it.md\">Italiano</a> ·\n  <a href=\"docs/readme/README.pt-BR.md\">Português (Brasil)</a> ·\n  <a href=\"docs/readme/README.fr.md\">Français</a> ·\n  <a href=\"docs/readme/README.ru.md\">Русский</a> ·\n  <a href=\"docs/readme/README.tr.md\">Türkçe</a>\n</p>\n\n</div>\n\n<img src=\"./assets/palmier-ui.png\" alt=\"Palmier Pro UI\" width=\"900\" />\n\n---\n\nPalmier Pro is an open source video editor for Mac. You and your agent can generate and edit videos together inside the timeline.\n\n### Swift-native video editor\n\nWe built Palmier Pro from scratch with Swift. The north star is Premiere Pro, with our take on integrating AI into the workflow.\n\n### Built-in Generative AI\n\nGenerate videos and images with SOTA models like Seedance, Kling, Nano Banana Pro inside the timeline editor.\n\n### Integrates with your agents\n\nConnects your Claude/Codex/Cursor via MCP, or use the in-app agent to work on the same project together.\n\n## MCP server\n\nWhen the app is open, it exposes an MCP server at `http://127.0.0.1:19789/mcp` via HTTP. To connect:\n\n**Claude Code**\n```bash\nclaude mcp add --transport http palmier-pro http://127.0.0.1:19789/mcp\n```\n\n**Codex**\n```bash\ncodex mcp add palmier-pro --url http://127.0.0.1:19789/mcp\n```\n\n**Cursor**\n\nThe easiest way is go inside the app `Help` -> `MCP Instructions` -> `Install in Cursor`, or install manually by adding this to `~/.cursor/mcp.json`:\n\n```\n{\n  \"mcpServers\": {\n    \"palmier-pro\": {\n      \"type\": \"http\",\n      \"url\": \"http://127.0.0.1:19789/mcp\"\n    }\n  }\n}\n```\n\n**Claude Desktop**\n\nWe bundle a [mcpb](https://github.com/modelcontextprotocol/mcpb) with the app that allows a one click install Desktop Extension on Claude Desktop. Go to `Help` -> `MCP Instructions` -> `Install in Claude Desktop`\n\n## FAQ\n\n**Is Palmier Pro fully open source?**\n\nThe video editor (without the generative AI features) is fully open source. The MCP server and the agent chat are also open source. The only thing that is closed source is the generative AI processing.\n\n**Is it free?**\n\nThe editor is free. You can download it with no login required, and use it as a video editor like CapCut or Adobe Premiere. You can also use the MCP server for free, and start experimenting using Claude Code/Desktop or Cursor to interact with your timeline editor.\n\nGenerative AI features require login and subscription.\n\n**What platforms does it support?**\n\nmacOS 26 (Tahoe) on Apple Silicon only.\n\nSee [FAQ.md](FAQ.md) for more.\n\n## Development\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## Community &amp; Support\n\n- **Discord:** Join the community on **[Discord](https://discord.com/invite/SMVW6pKYmg)**.\n- **Twitter / X:** Follow **[@Palmier_io](https://x.com/Palmier_io)** for updates and announcements.\n- **Instagram:** Follow [@palmier.io](https://www.instagram.com/palmier.io) \n- **Feedback &amp; Support:** Create a [Github Issue](https://github.com/palmier-io/palmier-pro/issues) or email us at founders@palmier.io\n\n## Star History\n\n<a href=\"https://www.star-history.com/?type=date&repos=palmier-io%2Fpalmier-pro\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=palmier-io/palmier-pro&type=date&theme=dark&legend=top-left\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=palmier-io/palmier-pro&type=date&legend=top-left\" />\n   <img alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=palmier-io/palmier-pro&type=date&legend=top-left\" />\n </picture>\n</a>\n\n## License\n\nCopyright (C) 2026 Palmier, Inc.\n\nPalmier Pro is open source under [GPLv3](LICENSE).\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "workflow",
      "protocol"
    ],
    "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": "google-labs-code",
    "name": "design.md",
    "full_name": "google-labs-code/design.md",
    "url": "https://github.com/google-labs-code/design.md",
    "description": "A format specification for describing a visual identity to coding agents. DESIGN.md gives agents a persistent, structured understanding of a design system.",
    "language": "TypeScript",
    "total_stars": 22812,
    "forks": 1815,
    "stars_this_period": 6014,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 55,
      "created_at": "2026-04-10T17:54:59Z",
      "pushed_at": "2026-06-15T22:22:46Z",
      "homepage": "https://stitch.withgoogle.com/docs/design-md/specification",
      "default_branch": "main",
      "forks": 1815,
      "watchers": 118,
      "archived": false,
      "size_kb": 199
    },
    "readme_content": "# DESIGN.md\n\nA format specification for describing a visual identity to coding agents. DESIGN.md gives agents a persistent, structured understanding of a design system.\n\n## The Format\n\nA DESIGN.md file combines machine-readable design tokens (YAML front matter) with human-readable design rationale (markdown prose). Tokens give agents exact values. Prose tells them *why* those values exist and how to apply them.\n\n```md\n---\nname: Heritage\ncolors:\n  primary: \"#1A1C1E\"\n  secondary: \"#6C7278\"\n  tertiary: \"#B8422E\"\n  neutral: \"#F7F5F2\"\ntypography:\n  h1:\n    fontFamily: Public Sans\n    fontSize: 3rem\n  body-md:\n    fontFamily: Public Sans\n    fontSize: 1rem\n  label-caps:\n    fontFamily: Space Grotesk\n    fontSize: 0.75rem\nrounded:\n  sm: 4px\n  md: 8px\nspacing:\n  sm: 8px\n  md: 16px\n---\n\n## Overview\n\nArchitectural Minimalism meets Journalistic Gravitas. The UI evokes a\npremium matte finish — a high-end broadsheet or contemporary gallery.\n\n## Colors\n\nThe palette is rooted in high-contrast neutrals and a single accent color.\n\n- **Primary (#1A1C1E):** Deep ink for headlines and core text.\n- **Secondary (#6C7278):** Sophisticated slate for borders, captions, metadata.\n- **Tertiary (#B8422E):** \"Boston Clay\" — the sole driver for interaction.\n- **Neutral (#F7F5F2):** Warm limestone foundation, softer than pure white.\n```\n\nAn agent that reads this file will produce a UI with deep ink headlines in Public Sans, a warm limestone background, and Boston Clay call-to-action buttons.\n\n## Getting Started\n\nValidate a DESIGN.md against the spec, catch broken token references, check WCAG contrast ratios, and surface structural findings — all as structured JSON that agents can act on.\n\n```bash\nnpx @google/design.md lint DESIGN.md\n```\n\n```json\n{\n  \"findings\": [\n    {\n      \"severity\": \"warning\",\n      \"path\": \"components.button-primary\",\n      \"message\": \"textColor (#ffffff) on backgroundColor (#1A1C1E) has contrast ratio 15.42:1 — passes WCAG AA.\"\n    }\n  ],\n  \"summary\": { \"errors\": 0, \"warnings\": 1, \"info\": 1 }\n}\n```\n\nCompare two versions of a design system to detect token-level and prose regressions:\n\n```bash\nnpx @google/design.md diff DESIGN.md DESIGN-v2.md\n```\n\n```json\n{\n  \"tokens\": {\n    \"colors\": { \"added\": [\"accent\"], \"removed\": [], \"modified\": [\"tertiary\"] },\n    \"typography\": { \"added\": [], \"removed\": [], \"modified\": [] }\n  },\n  \"regression\": false\n}\n```\n\n## The Specification\n\nThe full DESIGN.md spec lives at [`docs/spec.md`](docs/spec.md). What follows is a condensed reference.\n\n### File Structure\n\nA DESIGN.md file has two layers:\n\n1. **YAML front matter** — Machine-readable design tokens, delimited by `---` fences at the top of the file.\n2. **Markdown body** — Human-readable design rationale organized into `##` sections.\n\nThe tokens are the normative values. The prose provides context for how to apply them.\n\n### Token Schema\n\n```yaml\nversion: <string>          # optional, current: \"alpha\"\nname: <string>\ndescription: <string>      # optional\ncolors:\n  <token-name>: <Color>\ntypography:\n  <token-name>: <Typography>\nrounded:\n  <scale-level>: <Dimension>\nspacing:\n  <scale-level>: <Dimension | number>\ncomponents:\n  <component-name>:\n    <token-name>: <string | token reference>\n```\n\n### Token Types\n\n| Type | Format | Example |\n|:-----|:-------|:--------|\n| Color | Any CSS color (hex, `rgb()`, `oklch()`, named, etc.) | `\"#1A1C1E\"`, `\"oklch(62% 0.18 250)\"` |\n| Dimension | number + unit (`px`, `em`, `rem`) | `48px`, `-0.02em` |\n| Token Reference | `{path.to.token}` | `{colors.primary}` |\n| Typography | object with `fontFamily`, `fontSize`, `fontWeight`, `lineHeight`, `letterSpacing`, `fontFeature`, `fontVariation` | See example above |\n\n### Section Order\n\nSections use `##` headings. They can be omitted, but those present must appear in this order:\n\n| # | Section | Aliases |\n|:--|:--------|:--------|\n| 1 | Overview | Brand & Style |\n| 2 | Colors | |\n| 3 | Typography | |\n| 4 | Layout | Layout & Spacing |\n| 5 | Elevation & Depth | Elevation |\n| 6 | Shapes | |\n| 7 | Components | |\n| 8 | Do's and Don'ts | |\n\n### Component Tokens\n\nComponents map a name to a group of sub-token properties:\n\n```yaml\ncomponents:\n  button-primary:\n    backgroundColor: \"{colors.tertiary}\"\n    textColor: \"{colors.on-tertiary}\"\n    rounded: \"{rounded.sm}\"\n    padding: 12px\n  button-primary-hover:\n    backgroundColor: \"{colors.tertiary-container}\"\n```\n\nValid component properties: `backgroundColor`, `textColor`, `typography`, `rounded`, `padding`, `size`, `height`, `width`.\n\nVariants (hover, active, pressed) are expressed as separate component entries with a related key name.\n\n### Consumer Behavior for Unknown Content\n\n| Scenario | Behavior |\n|:---------|:---------|\n| Unknown section heading | Preserve; do not error |\n| Unknown color token name | Accept if value is valid |\n| Unknown typography token name | Accept as valid typography |\n| Unknown component property | Accept with warning |\n| Duplicate section heading | Error; reject the file |\n\n## CLI Reference\n\n### Installation\n\n```bash\nnpm install @google/design.md\n```\n\nOn **Windows**, quote the package name if your shell treats `@` specially (PowerShell, some terminals):\n\n```bash\nnpm install \"@google/design.md\"\n```\n\nOr run directly (always resolves from the public npm registry):\n\n```bash\nnpx @google/design.md lint DESIGN.md\n```\n\nOn **Windows/PowerShell**, this direct form can produce no output (or open\n`DESIGN.md` in your Markdown editor) because the `.md` suffix in the `design.md`\nbin name collides with the Windows Markdown file association during command\nresolution. Run the dot-free `designmd` alias instead — point `npx` at the\npackage with `-p`, then invoke `designmd`:\n\n```bash\nnpx -p @google/design.md designmd lint DESIGN.md\n```\n\nThe `designmd` shim resolves to the same entrypoint and works identically across\nall platforms.\n\n#### `npm error ENOVERSIONS` (“No versions available for @google/design.md”)\n\nThe CLI is published as [`@google/design.md` on npm](https://www.npmjs.com/package/@google/design.md). `ENOVERSIONS` almost always means npm is not querying the public registry (custom `registry=` in `.npmrc`, a corporate mirror that has not synced this package, or a misconfigured `@google:registry` for the `@google` scope).\n\nCheck your effective registry:\n\n```bash\nnpm config get registry\n```\n\nFor a normal install from the internet it should be `https://registry.npmjs.org/`. After fixing config, retry with `npm cache clean --force` if a stale 404 was cached.\n\nAll commands accept a file path or `-` for stdin. Output defaults to JSON.\n\n> **Windows tip**: when invoking the CLI directly from a `package.json` script\n> (rather than through `npx`), use the `designmd` alias instead of `design.md`.\n> The `.md` suffix in the original bin name confuses Windows command resolution\n> with the file association for Markdown files. The `designmd` shim resolves to\n> the same entrypoint and works identically across all platforms.\n>\n> ```jsonc\n> // package.json\n> {\n>   \"scripts\": {\n>     \"design:lint\": \"designmd lint DESIGN.md\"\n>   }\n> }\n> ```\n\n### `lint`\n\nValidate a DESIGN.md file for structural correctness.\n\n```bash\nnpx @google/design.md lint DESIGN.md\nnpx @google/design.md lint --format json DESIGN.md\ncat DESIGN.md | npx @google/design.md lint -\n```\n\n| Option | Type | Default | Description |\n|:-------|:-----|:--------|:------------|\n| `file` | positional | required | Path to DESIGN.md (or `-` for stdin) |\n| `--format` | `json` | `json` | Output format |\n\nExit code `1` if errors are found, `0` otherwise.\n\n### `diff`\n\nCompare two DESIGN.md files and report token-level changes.\n\n```bash\nnpx @google/design.md diff DESIGN.md DESIGN-v2.md\n```\n\n| Option | Type | Default | Description |\n|:-------|:-----|:--------|:------------|\n| `before` | positional | required | Path to the \"before\" DESIGN.md |\n| `after` | positional | required | Path to the \"after\" DESIGN.md |\n| `--format` | `json` | `json` | Output format |\n\nExit code `1` if regressions are detected (more errors or warnings in the \"after\" file).\n\n### `export`\n\nExport DESIGN.md tokens to other formats.\n\n```bash\nnpx @google/design.md export --format json-tailwind DESIGN.md > tailwind.theme.json\nnpx @google/design.md export --format css-tailwind DESIGN.md > theme.css\nnpx @google/design.md export --format dtcg DESIGN.md > tokens.json\n```\n\n| Option | Type | Default | Description |\n|:-------|:-----|:--------|:------------|\n| `file` | positional | required | Path to DESIGN.md (or `-` for stdin) |\n| `--format` | `json-tailwind` \\| `css-tailwind` \\| `tailwind` \\| `dtcg` | required | Output format |\n\n| Format | Output | Description |\n|:-------|:-------|:------------|\n| `json-tailwind` | JSON | Tailwind v3 `theme.extend` config object |\n| `css-tailwind` | CSS | Tailwind v4 `@theme { ... }` block with CSS custom properties |\n| `tailwind` | JSON | Alias for `json-tailwind` |\n| `dtcg` | JSON | W3C Design Tokens Format Module |\n\n### `spec`\n\nOutput the DESIGN.md format specification (useful for injecting spec context into agent prompts).\n\n```bash\nnpx @google/design.md spec\nnpx @google/design.md spec --rules\nnpx @google/design.md spec --rules-only --format json\n```\n\n| Option | Type | Default | Description |\n|:-------|:-----|:--------|:------------|\n| `--rules` | boolean | `false` | Append the active linting rules table |\n| `--rules-only` | boolean | `false` | Output only the linting rules table |\n| `--format` | `markdown` \\| `json` | `markdown` | Output format |\n\n## Linting Rules\n\nThe linter runs nine rules against a parsed DESIGN.md. Each rule produces findings at a fixed severity level.\n\n| Rule | Severity | What it checks |\n|:-----|:---------|:---------------|\n| `broken-ref` | error | Token references (`{colors.primary}`) that don't resolve to any defined token |\n| `missing-primary` | warning | Colors are defined but no `primary` color exists — agents will auto-generate one |\n| `contrast-ratio` | warning | Component `backgroundColor`/`textColor` pairs below WCAG AA minimum (4.5:1) |\n| `orphaned-tokens` | warning | Color tokens defined but never referenced by any component |\n| `token-summary` | info | Summary of how many tokens are defined in each section |\n| `missing-sections` | info | Optional sections (spacing, rounded) absent when other tokens exist |\n| `missing-typography` | warning | Colors are defined but no typography tokens exist — agents will use default fonts |\n| `section-order` | warning | Sections appear out of the canonical order defined by the spec |\n| `unknown-key` | warning | A top-level YAML key looks like a typo of a known schema key (e.g. `colours:` → `colors:`); custom extension keys stay silent |\n\n### Programmatic API\n\nThe linter is also available as a library:\n\n```typescript\nimport { lint } from '@google/design.md/linter';\n\nconst report = lint(markdownString);\n\nconsole.log(report.findings);       // Finding[]\nconsole.log(report.summary);        // { errors, warnings, info }\nconsole.log(report.designSystem);   // Parsed DesignSystemState\n```\n\n## Design Token Interoperability\n\nDESIGN.md tokens are inspired by the [W3C Design Token Format](https://www.designtokens.org/). The `export` command converts tokens to other formats:\n\n- **Tailwind v3 config (JSON)** — `npx @google/design.md export --format json-tailwind DESIGN.md` — emits a `theme.extend` JSON object for `tailwind.config.js`. `--format tailwind` is a backwards-compatible alias.\n- **Tailwind v4 theme (CSS)** — `npx @google/design.md export --format css-tailwind DESIGN.md` — emits a CSS `@theme { ... }` block using Tailwind v4's CSS-variable token namespaces (`--color-*`, `--font-*`, `--text-*`, `--leading-*`, `--tracking-*`, `--font-weight-*`, `--radius-*`, `--spacing-*`).\n- **DTCG tokens.json** ([W3C Design Tokens Format Module](https://tr.designtokens.org/format/)) — `npx @google/design.md export --format dtcg DESIGN.md`\n\n## Status\n\nThe DESIGN.md format is at version `alpha`. The spec, token schema, and CLI are under active development. Expect changes to the format as it matures.\n\n## D",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"design-monorepo\",\n  \"private\": true,\n  \"workspaces\": [\n    \"packages/*\"\n  ],\n  \"packageManager\": \"bun@1.3.9\",\n  \"scripts\": {\n    \"build\": \"turbo build\",\n    \"test\": \"turbo test\",\n    \"lint\": \"turbo lint\",\n    \"cli\": \"bun run packages/cli/src/index.ts\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^25.6.0\",\n    \"bun-types\": \"^1.3.12\",\n    \"turbo\": \"latest\",\n    \"typescript\": \"latest\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "workspace"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 8,
      "total": 85
    },
    "strategic_score": 85
  },
  {
    "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": 24869,
    "forks": 2302,
    "stars_this_period": 5519,
    "source_slice": "all",
    "source_slices": [
      "all",
      "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": 373,
      "created_at": "2023-08-16T16:16:33Z",
      "pushed_at": "2026-06-27T14:39:34Z",
      "homepage": "https://www.cognee.ai",
      "default_branch": "main",
      "forks": 2302,
      "watchers": 74,
      "archived": false,
      "size_kb": 198847
    },
    "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": "garrytan",
    "name": "gstack",
    "full_name": "garrytan/gstack",
    "url": "https://github.com/garrytan/gstack",
    "description": "Use Garry Tan's exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA",
    "language": "TypeScript",
    "total_stars": 117718,
    "forks": 17504,
    "stars_this_period": 5427,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 748,
      "created_at": "2026-03-11T21:22:45Z",
      "pushed_at": "2026-06-25T16:42:45Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 17504,
      "watchers": 722,
      "archived": false,
      "size_kb": 111499
    },
    "readme_content": "# gstack\n\n> \"I don't think I've typed like a line of code probably since December, basically, which is an extremely large change.\" — [Andrej Karpathy](https://fortune.com/2026/03/21/andrej-karpathy-openai-cofounder-ai-agents-coding-state-of-psychosis-openclaw/), No Priors podcast, March 2026\n\nWhen I heard Karpathy say this, I wanted to find out how. How does one person ship like a team of twenty? Peter Steinberger built [OpenClaw](https://github.com/openclaw/openclaw) — 247K GitHub stars — essentially solo with AI agents. The revolution is here. A single builder with the right tooling can move faster than a traditional team.\n\nI'm [Garry Tan](https://x.com/garrytan), President & CEO of [Y Combinator](https://www.ycombinator.com/). I've worked with thousands of startups — Coinbase, Instacart, Rippling — when they were one or two people in a garage. Before YC, I was one of the first eng/PM/designers at Palantir, cofounded Posterous (sold to Twitter), and built Bookface, YC's internal social network.\n\n**gstack is my answer.** I've been building products for twenty years, and right now I'm shipping more products than I ever have. In the last 60 days: 3 production services, 40+ shipped features, part-time, while running YC full-time. On logical code change — not raw LOC, which AI inflates — my 2026 run rate is **~810× my 2013 pace** (11,417 vs 14 logical lines/day). Year-to-date (through April 18), 2026 has already produced **240× the entire 2013 year**. Measured across 40 public + private `garrytan/*` repos including Bookface, after excluding one demo repo. AI wrote most of it. The point isn't who typed it, it's what shipped.\n\n> The LOC critics aren't wrong that raw line counts inflate with AI. They are wrong that normalized-for-inflation, I'm less productive. I'm more productive, by a lot. Full methodology, caveats, and reproduction script: **[On the LOC Controversy](docs/ON_THE_LOC_CONTROVERSY.md)**.\n\n**2026 — 1,237 contributions and counting:**\n\n![GitHub contributions 2026 — 1,237 contributions, massive acceleration in Jan-Mar](docs/images/github-2026.png)\n\n**2013 — when I built Bookface at YC (772 contributions):**\n\n![GitHub contributions 2013 — 772 contributions building Bookface at YC](docs/images/github-2013.png)\n\nSame person. Different era. The difference is the tooling.\n\n**gstack is how I do it.** It turns Claude Code into a virtual engineering team — a CEO who rethinks the product, an eng manager who locks architecture, a designer who catches AI slop, a reviewer who finds production bugs, a QA lead who opens a real browser, a security officer who runs OWASP + STRIDE audits, and a release engineer who ships the PR. Twenty-three specialists and eight power tools, all slash commands, all Markdown, all free, MIT license.\n\nThis is my open source software factory. I use it every day. I'm sharing it because these tools should be available to everyone.\n\nFork it. Improve it. Make it yours. And if you want to hate on free open source software — you're welcome to, but I'd rather you just try it first.\n\n**Who this is for:**\n- **Founders and CEOs** — especially technical ones who still want to ship\n- **First-time Claude Code users** — structured roles instead of a blank prompt\n- **Tech leads and staff engineers** — rigorous review, QA, and release automation on every PR\n\n## Quick start\n\n1. Install gstack (30 seconds — see below)\n2. Run `/office-hours` — describe what you're building\n3. Run `/plan-ceo-review` on any feature idea\n4. Run `/review` on any branch with changes\n5. Run `/qa` on your staging URL\n6. Stop there. You'll know if this is for you.\n\n## Install — 30 seconds\n\n**Requirements:** [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Git](https://git-scm.com/), [Bun](https://bun.sh/) v1.0+, [Node.js](https://nodejs.org/) (Windows only)\n\n### Step 1: Install on your machine\n\nOpen Claude Code and paste this. Claude does the rest.\n\n> Install gstack: run **`git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup`** then add a \"gstack\" section to CLAUDE.md that says to use the /browse skill from gstack for all web browsing, never use mcp\\_\\_claude-in-chrome\\_\\_\\* tools, and lists the available skills: /office-hours, /plan-ceo-review, /plan-eng-review, /plan-design-review, /design-consultation, /design-shotgun, /design-html, /review, /ship, /land-and-deploy, /canary, /benchmark, /browse, /connect-chrome, /qa, /qa-only, /design-review, /setup-browser-cookies, /setup-deploy, /setup-gbrain, /retro, /investigate, /document-release, /document-generate, /codex, /cso, /autoplan, /plan-devex-review, /devex-review, /careful, /freeze, /guard, /unfreeze, /gstack-upgrade, /learn. Then ask the user if they also want to add gstack to the current project so teammates get it.\n\n### Step 2: Team mode — auto-update for shared repos (recommended)\n\nFrom inside your repo, paste this. Switches you to team mode, bootstraps the repo so teammates get gstack automatically, and commits the change:\n\n```bash\n(cd ~/.claude/skills/gstack && ./setup --team) && ~/.claude/skills/gstack/bin/gstack-team-init required && git add .claude/ CLAUDE.md && git commit -m \"require gstack for AI-assisted work\"\n```\n\nNo vendored files in your repo, no version drift, no manual upgrades. Every Claude Code session starts with a fast auto-update check (throttled to once/hour, network-failure-safe, completely silent).\n\nSwap `required` for `optional` if you'd rather nudge teammates than block them.\n\n### OpenClaw\n\nOpenClaw spawns Claude Code sessions via ACP, so every gstack skill just works\nwhen Claude Code has gstack installed. Paste this to your OpenClaw agent:\n\n> Install gstack: run `git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup` to install gstack for Claude Code. Then add a \"Coding Tasks\" section to AGENTS.md that says: when spawning Claude Code sessions for coding work, tell the session to use gstack skills. Include these examples — security audit: \"Load gstack. Run /cso\", code review: \"Load gstack. Run /review\", QA test a URL: \"Load gstack. Run /qa https://...\", build a feature end-to-end: \"Load gstack. Run /autoplan, implement the plan, then run /ship\", plan before building: \"Load gstack. Run /office-hours then /autoplan. Save the plan, don't implement.\"\n\n**After setup, just talk to your OpenClaw agent naturally:**\n\n| You say | What happens |\n|---------|-------------|\n| \"Fix the typo in README\" | Simple — Claude Code session, no gstack needed |\n| \"Run a security audit on this repo\" | Spawns Claude Code with `Run /cso` |\n| \"Build me a notifications feature\" | Spawns Claude Code with /autoplan → implement → /ship |\n| \"Help me plan the v2 API redesign\" | Spawns Claude Code with /office-hours → /autoplan, saves plan |\n\nSee [docs/OPENCLAW.md](docs/OPENCLAW.md) for advanced dispatch routing and\nthe gstack-lite/gstack-full prompt templates.\n\n### Native OpenClaw Skills (via ClawHub)\n\nFour methodology skills that work directly in your OpenClaw agent, no Claude Code\nsession needed. Install from ClawHub:\n\n```\nclawhub install gstack-openclaw-office-hours gstack-openclaw-ceo-review gstack-openclaw-investigate gstack-openclaw-retro\n```\n\n| Skill | What it does |\n|-------|-------------|\n| `gstack-openclaw-office-hours` | Product interrogation with 6 forcing questions |\n| `gstack-openclaw-ceo-review` | Strategic challenge with 4 scope modes |\n| `gstack-openclaw-investigate` | Root cause debugging methodology |\n| `gstack-openclaw-retro` | Weekly engineering retrospective |\n\nThese are conversational skills. Your OpenClaw agent runs them directly via chat.\n\n### Other AI Agents\n\ngstack works on 10 AI coding agents, not just Claude. Setup auto-detects which\nagents you have installed:\n\n```bash\ngit clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/gstack\ncd ~/gstack && ./setup\n```\n\nOr target a specific agent with `./setup --host <name>`:\n\n| Agent | Flag | Skills install to |\n|-------|------|-------------------|\n| OpenAI Codex CLI | `--host codex` | `~/.codex/skills/gstack-*/` |\n| OpenCode | `--host opencode` | `~/.config/opencode/skills/gstack-*/` |\n| Cursor | `--host cursor` | `~/.cursor/skills/gstack-*/` |\n| Factory Droid | `--host factory` | `~/.factory/skills/gstack-*/` |\n| Slate | `--host slate` | `~/.slate/skills/gstack-*/` |\n| Kiro | `--host kiro` | `~/.kiro/skills/gstack-*/` |\n| Hermes | `--host hermes` | `~/.hermes/skills/gstack-*/` |\n| GBrain (mod) | `--host gbrain` | `~/.gbrain/skills/gstack-*/` |\n\n**Want to add support for another agent?** See [docs/ADDING_A_HOST.md](docs/ADDING_A_HOST.md).\nIt's one TypeScript config file, zero code changes.\n\n## See it work\n\n```\nYou:    I want to build a daily briefing app for my calendar.\nYou:    /office-hours\nClaude: [asks about the pain — specific examples, not hypotheticals]\n\nYou:    Multiple Google calendars, events with stale info, wrong locations.\n        Prep takes forever and the results aren't good enough...\n\nClaude: I'm going to push back on the framing. You said \"daily briefing\n        app.\" But what you actually described is a personal chief of\n        staff AI.\n        [extracts 5 capabilities you didn't realize you were describing]\n        [challenges 4 premises — you agree, disagree, or adjust]\n        [generates 3 implementation approaches with effort estimates]\n        RECOMMENDATION: Ship the narrowest wedge tomorrow, learn from\n        real usage. The full vision is a 3-month project — start with\n        the daily briefing that actually works.\n        [writes design doc → feeds into downstream skills automatically]\n\nYou:    /plan-ceo-review\n        [reads the design doc, challenges scope, runs 10-section review]\n\nYou:    /plan-eng-review\n        [ASCII diagrams for data flow, state machines, error paths]\n        [test matrix, failure modes, security concerns]\n\nYou:    Approve plan. Exit plan mode.\n        [writes 2,400 lines across 11 files. ~8 minutes.]\n\nYou:    /review\n        [AUTO-FIXED] 2 issues. [ASK] Race condition → you approve fix.\n\nYou:    /qa https://staging.myapp.com\n        [opens real browser, clicks through flows, finds and fixes a bug]\n\nYou:    /ship\n        Tests: 42 → 51 (+9 new). PR: github.com/you/app/pull/42\n```\n\nYou said \"daily briefing app.\" The agent said \"you're building a chief of staff AI\" — because it listened to your pain, not your feature request. Eight commands, end to end. That is not a copilot. That is a team.\n\n## The sprint\n\ngstack is a process, not a collection of tools. The skills run in the order a sprint runs:\n\n**Think → Plan → Build → Review → Test → Ship → Reflect**\n\nEach skill feeds into the next. `/office-hours` writes a design doc that `/plan-ceo-review` reads. `/plan-eng-review` writes a test plan that `/qa` picks up. `/review` catches bugs that `/ship` verifies are fixed. Nothing falls through the cracks because every step knows what came before it.\n\n| Skill | Your specialist | What they do |\n|-------|----------------|--------------|\n| `/office-hours` | **YC Office Hours** | Start here. Six forcing questions that reframe your product before you write code. Pushes back on your framing, challenges premises, generates implementation alternatives. Design doc feeds into every downstream skill. |\n| `/plan-ceo-review` | **CEO / Founder** | Rethink the problem. Find the 10-star product hiding inside the request. Four modes: Expansion, Selective Expansion, Hold Scope, Reduction. |\n| `/plan-eng-review` | **Eng Manager** | Lock in architecture, data flow, diagrams, edge cases, and tests. Forces hidden assumptions into the open. |\n| `/plan-design-review` | **Senior Designer** | Rates each design dimension 0-10, explains what a 10 looks like, then edits the plan to get there. AI Slop detection. Interactive — one AskUserQuestion per design choice. |\n| `/plan-devex-review` | **Developer Experience Lead** | Interactive DX review: explores deve",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"gstack\",\n  \"version\": \"1.58.5.0\",\n  \"description\": \"Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"bin\": {\n    \"browse\": \"./browse/dist/browse\",\n    \"make-pdf\": \"./make-pdf/dist/pdf\"\n  },\n  \"scripts\": {\n    \"build\": \"bash scripts/build.sh\",\n    \"vendor:xterm\": \"mkdir -p extension/lib && cp node_modules/xterm/lib/xterm.js extension/lib/xterm.js && cp node_modules/xterm/css/xterm.css extension/lib/xterm.css && cp node_modules/xterm-addon-fit/lib/xterm-addon-fit.js extension/lib/xterm-addon-fit.js\",\n    \"dev:make-pdf\": \"bun run make-pdf/src/cli.ts\",\n    \"dev:design\": \"bun run design/src/cli.ts\",\n    \"build:diagram-render\": \"cd lib/diagram-render && bun install && bun run scripts/build.ts\",\n    \"gen:skill-docs\": \"bun run scripts/gen-skill-docs.ts\",\n    \"gen:skill-docs:user\": \"bun run scripts/gen-skill-docs.ts --respect-detection\",\n    \"dev\": \"bun run browse/src/cli.ts\",\n    \"server\": \"bun run browse/src/server.ts\",\n    \"test\": \"bun test browse/test/ test/ make-pdf/test/ --ignore 'test/skill-e2e-*.test.ts' --ignore test/skill-llm-eval.test.ts --ignore test/skill-routing-e2e.test.ts --ignore test/codex-e2e.test.ts --ignore test/gemini-e2e.test.ts && (bun run slop:diff 2>/dev/null || true)\",\n    \"test:free\": \"bun run scripts/test-free-shards.ts\",\n    \"test:windows\": \"bun run scripts/test-free-shards.ts --windows-only\",\n    \"test:evals\": \"EVALS=1 bun test --retry 2 --concurrent --max-concurrency ${EVALS_CONCURRENCY:-15} test/skill-llm-eval.test.ts test/skill-e2e-*.test.ts test/skill-routing-e2e.test.ts test/codex-e2e.test.ts test/gemini-e2e.test.ts\",\n    \"test:evals:all\": \"EVALS=1 EVALS_ALL=1 bun test --retry 2 --concurrent --max-concurrency ${EVALS_CONCURRENCY:-15} test/skill-llm-eval.test.ts test/skill-e2e-*.test.ts test/skill-routing-e2e.test.ts test/codex-e2e.test.ts test/gemini-e2e.test.ts\",\n    \"test:e2e\": \"EVALS=1 bun test --retry 2 --concurrent --max-concurrency ${EVALS_CONCURRENCY:-15} test/skill-e2e-*.test.ts test/skill-routing-e2e.test.ts test/codex-e2e.test.ts test/gemini-e2e.test.ts\",\n    \"test:e2e:all\": \"EVALS=1 EVALS_ALL=1 bun test --retry 2 --concurrent --max-concurrency ${EVALS_CONCURRENCY:-15} test/skill-e2e-*.test.ts test/skill-routing-e2e.test.ts test/codex-e2e.test.ts test/gemini-e2e.test.ts\",\n    \"test:gate\": \"EVALS=1 EVALS_TIER=gate bun test --retry 2 --concurrent --max-concurrency ${EVALS_CONCURRENCY:-15} test/skill-llm-eval.test.ts test/skill-e2e-*.test.ts test/skill-routing-e2e.test.ts test/codex-e2e.test.ts test/gemini-e2e.test.ts\",\n    \"test:periodic\": \"EVALS=1 EVALS_TIER=periodic EVALS_ALL=1 bun test --retry 2 --concurrent --max-concurrency ${EVALS_CONCURRENCY:-15} test/skill-e2e-*.test.ts test/skill-routing-e2e.test.ts test/codex-e2e.test.ts test/gemini-e2e.test.ts\",\n    \"test:codex\": \"EVALS=1 bun test test/codex-e2e.test.ts\",\n    \"test:codex:all\": \"EVALS=1 EVALS_ALL=1 bun test test/codex-e2e.test.ts\",\n    \"test:gemini\": \"EVALS=1 bun test test/gemini-e2e.test.ts\",\n    \"test:gemini:all\": \"EVALS=1 EVALS_ALL=1 bun test test/gemini-e2e.test.ts\",\n    \"skill:check\": \"bun run scripts/skill-check.ts\",\n    \"dev:skill\": \"bun run scripts/dev-skill.ts\",\n    \"start\": \"bun run browse/src/server.ts\",\n    \"eval:bg\": \"bin/gstack-detach --label evals --lock gstack-evals --timeout 5400 -- bun run test:evals\",\n    \"eval:bg:all\": \"bin/gstack-detach --label evals-all --lock gstack-evals --timeout 7200 -- bun run test:evals:all\",\n    \"eval:bg:gate\": \"bin/gstack-detach --label evals-gate --lock gstack-evals --timeout 3600 -- bun run test:gate\",\n    \"eval:bg:periodic\": \"bin/gstack-detach --label evals-periodic --lock gstack-evals --timeout 5400 -- bun run test:periodic\",\n    \"eval:list\": \"bun run scripts/eval-list.ts\",\n    \"eval:compare\": \"bun run scripts/eval-compare.ts\",\n    \"eval:summary\": \"bun run scripts/eval-summary.ts\",\n    \"eval:watch\": \"bun run scripts/eval-watch.ts\",\n    \"eval:select\": \"bun run scripts/eval-select.ts\",\n    \"analytics\": \"bun run scripts/analytics.ts\",\n    \"test:audit\": \"bun test test/audit-compliance.test.ts\",\n    \"slop\": \"npx slop-scan scan . 2>/dev/null || echo 'slop-scan not available (install with: npm i -g slop-scan)'\",\n    \"slop:diff\": \"bun run scripts/slop-diff.ts\"\n  },\n  \"dependencies\": {\n    \"@huggingface/transformers\": \"^4.1.0\",\n    \"@ngrok/ngrok\": \"^1.7.0\",\n    \"diff\": \"^7.0.0\",\n    \"html-to-docx\": \"1.8.0\",\n    \"marked\": \"^18.0.2\",\n    \"playwright\": \"^1.58.2\",\n    \"puppeteer-core\": \"^24.40.0\",\n    \"socks\": \"^2.8.8\"\n  },\n  \"engines\": {\n    \"bun\": \">=1.0.0\"\n  },\n  \"keywords\": [\n    \"browser\",\n    \"automation\",\n    \"playwright\",\n    \"headless\",\n    \"cli\",\n    \"claude\",\n    \"ai-agent\",\n    \"devtools\"\n  ],\n  \"devDependencies\": {\n    \"@anthropic-ai/claude-agent-sdk\": \"0.2.117\",\n    \"@anthropic-ai/sdk\": \"^0.78.0\",\n    \"xterm\": \"5\",\n    \"xterm-addon-fit\": \"^0.8.0\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "rag",
      "skill",
      "workflow",
      "automation"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "owner": "mukul975",
    "name": "Anthropic-Cybersecurity-Skills",
    "full_name": "mukul975/Anthropic-Cybersecurity-Skills",
    "url": "https://github.com/mukul975/Anthropic-Cybersecurity-Skills",
    "description": "817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0",
    "language": "Python",
    "total_stars": 22622,
    "forks": 2578,
    "stars_this_period": 5121,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "ai-agents",
        "claude-code",
        "cloud-security",
        "cybersecurity",
        "devsecops",
        "ethical-hacking",
        "incident-response",
        "infosec",
        "llm",
        "malware-analysis",
        "mcp",
        "mitre-attack",
        "nist-csf",
        "osint",
        "penetration-testing",
        "red-team",
        "security",
        "security-automation",
        "threat-hunting",
        "threat-intelligence"
      ],
      "license": "Apache-2.0",
      "open_issues": 29,
      "created_at": "2026-02-25T09:47:50Z",
      "pushed_at": "2026-06-26T14:37:50Z",
      "homepage": "https://mahipal.engineer/Anthropic-Cybersecurity-Skills/",
      "default_branch": "main",
      "forks": 2578,
      "watchers": 153,
      "archived": false,
      "size_kb": 10038
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"assets/banner.png\" alt=\"Anthropic Cybersecurity Skills\" width=\"100%\">\n</p>\n\n<div align=\"center\">\n\n#  Anthropic Cybersecurity Skills\n\n### The largest open-source cybersecurity skills library for AI agents\n\n[![GARS-2026 Survey](https://img.shields.io/badge/GARS--2026-Take%20the%20Survey-E8B84B?style=for-the-badge&logo=googleforms&logoColor=black)](https://mahipal.engineer/survey?utm_source=github_badge&utm_medium=readme&utm_campaign=gars2026)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg?style=flat-square)](LICENSE)\n[![Skills](https://img.shields.io/badge/skills-817-brightgreen?style=flat-square)](#whats-inside--29-security-domains)\n[![Frameworks](https://img.shields.io/badge/frameworks-6-orange?style=flat-square)](#six-frameworks-one-skill-library)\n[![MITRE F3](https://img.shields.io/badge/MITRE-F3_v1.1-blue?style=flat-square)](https://ctid.mitre.org/fraud/)\n[![Domains](https://img.shields.io/badge/domains-29-9cf?style=flat-square)](#whats-inside--29-security-domains)\n[![Platforms](https://img.shields.io/badge/platforms-26%2B-blueviolet?style=flat-square)](#compatible-platforms)\n[![GitHub stars](https://img.shields.io/github/stars/mukul975/Anthropic-Cybersecurity-Skills?style=flat-square)](https://github.com/mukul975/Anthropic-Cybersecurity-Skills/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/mukul975/Anthropic-Cybersecurity-Skills?style=flat-square)](https://github.com/mukul975/Anthropic-Cybersecurity-Skills/network/members)\n[![Last Commit](https://img.shields.io/github/last-commit/mukul975/Anthropic-Cybersecurity-Skills?style=flat-square)](https://github.com/mukul975/Anthropic-Cybersecurity-Skills/commits/main)\n[![agentskills.io](https://img.shields.io/badge/standard-agentskills.io-ff6600?style=flat-square)](https://agentskills.io)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](CONTRIBUTING.md)\n[![Playground](https://img.shields.io/badge/Playground-Casky.ai-blue)](https://casky.ai/?utm_source=github&utm_medium=readme&utm_campaign=cohort_launch#waitlist)\n[![Hermes Agent](https://img.shields.io/badge/Hermes_Agent-compatible-blueviolet?style=flat)](https://github.com/NousResearch/hermes-agent)\n\n\n**817 production-grade cybersecurity skills · 29 security domains · 6 framework mappings · 26+ AI platforms**\n\n[Get Started](#quick-start) · [What's Inside](#whats-inside--29-security-domains) · [Frameworks](#five-frameworks-one-skill-library) · [Platforms](#compatible-platforms) · [Contributing](#contributing)\n\n</div>\n\n---\n\n> ⚠️ **Community Project** — This is an independent, community-created project. Not affiliated with Anthropic PBC.\n>\n> 🔐 **Authorized & lawful use only.** This library includes offensive and dual-use techniques (e.g. red-team C2, phishing simulation, exploitation) intended for **authorized penetration testing, security research, defense, and education**. Only use them against systems you own or have **explicit written permission** to test, and comply with all applicable laws and rules of engagement. You are solely responsible for how you use these skills. See [SECURITY.md](SECURITY.md) and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).\n\n## Give any AI agent the security skills of a senior analyst\n\nA junior analyst knows which Volatility3 plugin to run on a suspicious memory dump, which Sigma rules catch Kerberoasting, and how to scope a cloud breach across three providers. **Your AI agent doesn't — unless you give it these skills.**\n\nThis repo contains **817 structured cybersecurity skills** spanning **29 security domains**, each following the [agentskills.io](https://agentskills.io) open standard.  Every skill is mapped to **six industry frameworks** — MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, MITRE D3FEND, NIST AI RMF, and the MITRE Fight Fraud Framework (F3) — making this the only open-source skills library with unified cross-framework coverage.  Clone it, point your agent at it, and your next security investigation gets expert-level guidance in seconds.\n\n## Six frameworks, one skill library\n\nNo other open-source skills library maps every skill to all of these frameworks.  One skill, six compliance checkboxes. \n\n| Framework | Version | Scope in this repo | What it maps |\n|---|---|---|---|\n| [MITRE ATT&CK](https://attack.mitre.org) | v19.1 | 15 tactics · 286 techniques | Adversary behaviors and TTPs |\n| [NIST CSF 2.0](https://www.nist.gov/cyberframework) | 2.0 | 6 functions · 22 categories | Organizational security posture |\n| [MITRE ATLAS](https://atlas.mitre.org) | v5.4 | 16 tactics · 84 techniques | AI/ML adversarial threats |\n| [MITRE D3FEND](https://d3fend.mitre.org) | v1.3 | 7 categories · 267 techniques | Defensive countermeasures |\n| [NIST AI RMF](https://airc.nist.gov/AI_RMF) | 1.0 | 4 functions · 72 subcategories | AI risk management |\n| [MITRE F3 (Fight Fraud Framework)](https://ctid.mitre.org/fraud/) | v1.1 (2026-04-09) | 8 tactics · 123 techniques · 94 fraud-relevant skills | Cyber-enabled financial fraud TTPs |\n\n**Example — a single skill maps across all six:**\n\n| Skill | ATT&CK | NIST CSF | ATLAS | D3FEND | AI RMF | F3 |\n|---|---|---|---|---|---|---|\n| `analyzing-network-traffic-of-malware` | T1071 | DE.CM | AML.T0047 | D3-NTA | MEASURE-2.6 | — |\n| `detecting-business-email-compromise` | T1566 | DE.AE | — | — | — | F1005.006 · monetization |\n\n### 🆕 MITRE Fight Fraud Framework (F3) — 94 fraud-relevant skills\n\n[![MITRE F3](https://img.shields.io/badge/MITRE-F3_v1.1-blue?style=flat-square)](https://ctid.mitre.org/fraud/)\n\nThe **[MITRE Fight Fraud Framework (F3)](https://ctid.mitre.org/fraud/)** was released **April 9, 2026** by MITRE's Center for Threat-Informed Defense (CTID), co-developed with JPMorganChase, Citigroup, Lloyds Banking Group, Standard Chartered, CrowdStrike, Verizon Business, FS-ISAC, and others. It is an ATT&CK-compatible TTP catalog for **cyber-enabled financial fraud** — filling the gap ATT&CK leaves after initial compromise.\n\nF3 v1.1 adds **two fraud-specific tactics** that ATT&CK does not enumerate:\n- **Positioning** (`FA0001`) — actions taken after access to collect/manipulate data and prepare the fraud (synthetic-identity seeding, account warming, beneficiary setup, SIM-swap pre-positioning, banking-session hijack).\n- **Monetization** (`FA0002`) — converting stolen assets into usable funds (money-mule layering, APP fraud, crypto off-ramping, card cash-out, refund/chargeback abuse).\n\nFraud-specific techniques use `F1XXX` IDs (e.g. `F1005.003` Add Beneficiary, `F1025.003` Wire Transfer, `F1007` Adversary-in-the-Browser); reused ATT&CK techniques keep their `T1XXX` IDs. Mappings live in each skill's `mitre_f3:` frontmatter block — all 123 F3 v1.1 technique IDs were verified against the upstream STIX bundle. See [`docs/mitre-f3-mapping.md`](docs/mitre-f3-mapping.md) for the schema.\n\n### MITRE ATT&CK v19.1 — 754/754 skills mapped\n\nEvery skill carries a `mitre_attack` frontmatter list validated against **MITRE ATT&CK v19.1** (the latest release) using the official `mitreattack-python` library — 286 distinct techniques across all 15 Enterprise tactics, plus ICS and Mobile techniques where relevant. Zero revoked or deprecated IDs. v19.1's restructured Defense Evasion (now split into **Stealth** and **Defense Impairment**) is reflected below.\n\n| Tactic | ID | Skills |\n|--------|----|--------|\n| Reconnaissance | TA0043 | 103 |\n| Resource Development | TA0042 | 22 |\n| Initial Access | TA0001 | 467 |\n| Execution | TA0002 | 350 |\n| Persistence | TA0003 | 444 |\n| Privilege Escalation | TA0004 | 464 |\n| Stealth | TA0005 | 442 |\n| Defense Impairment | TA0112 | 92 |\n| Credential Access | TA0006 | 202 |\n| Discovery | TA0007 | 237 |\n| Lateral Movement | TA0008 | 68 |\n| Collection | TA0009 | 172 |\n| Command and Control | TA0011 | 123 |\n| Exfiltration | TA0010 | 82 |\n| Impact | TA0040 | 50 |\n\n## Quick start\n\n```bash\n# Option 1: npx (recommended)\nnpx skills add mukul975/Anthropic-Cybersecurity-Skills\n\n# Option 2: Git clone\ngit clone https://github.com/mukul975/Anthropic-Cybersecurity-Skills.git\ncd Anthropic-Cybersecurity-Skills\n```\n\nWorks immediately with Claude Code, GitHub Copilot, OpenAI Codex CLI, Cursor, Gemini CLI, and any [agentskills.io](https://agentskills.io)-compatible platform. \n\n## 🌍 GARS-2026 — Global Agentic AI Readiness Survey\n\nI'm running a global academic study measuring how ready security professionals,\ndevelopers, and enterprise teams actually are for agentic AI — MCP servers,\ntool calling, governance, and human-in-the-loop workflows.\n\n**If you use this repo, your response would be a genuinely valuable data point.**\n\n📋 **Take the survey (10 min):**\n[Survey Link](https://mahipal.engineer/survey?utm_source=github_repo&utm_medium=readme&utm_campaign=gars2026)\n\n- 60 questions · Anonymous · Supervised by SRH Berlin\n- You get **50 Casky Tokens** for early access to [casky.ai](https://casky.ai)\n- Results published open access under CC-BY 4.0\n\n## 🚀 Try it on the Playground\n\nExperience Casky.ai hands-on — no setup required.\n\n**[→ Launch Playground on Casky.ai](https://casky.ai/?utm_source=github&utm_medium=readme&utm_campaign=cohort_launch#waitlist)**\n\nThe playground lets you:\n- Run live cybersecurity skill exercises against real targets\n- See AI agents execute structured skills in real time\n- Explore MITRE ATT&CK mapped workflows interactively\n- Test threat hunting, DFIR, and penetration testing scenarios\n\nNo installation. No configuration. Just open and start.\n## Why this exists\n\nThe cybersecurity workforce gap hit **4.8 million unfilled roles** globally in 2024 (ISC2). AI agents can help close that gap — but only if they have structured domain knowledge to work from. Today's agents can write code and search the web, but they lack the practitioner playbooks that turn a generic LLM into a capable security analyst.\n\nExisting security tool repos give you wordlists, payloads, or exploit code. None of them give an AI agent the structured decision-making workflow a senior analyst follows: when to use each technique, what prerequisites to check, how to execute step-by-step, and how to verify results. That is the gap this project fills.\n\n**Anthropic Cybersecurity Skills** is not a collection of scripts or checklists. It is an **AI-native knowledge base** built from the ground up for the agentskills.io standard  — YAML frontmatter for sub-second discovery, structured Markdown for step-by-step execution, and reference files for deep technical context.  Every skill encodes real practitioner workflows, not generated summaries. \n\n## What's inside — 29 security domains\n\n| Domain | Skills | Key capabilities |\n|---|---|---|\n| Cloud Security | 66 | AWS, Azure, GCP hardening · CSPM · cloud attack emulation · cloud forensics |\n| Threat Hunting | 58 | Hypothesis-driven hunts · LOTL detection · EVTX hunting · fleet hunting |\n| Threat Intelligence | 52 | STIX/TAXII · MISP · OpenCTI · feed integration · actor profiling |\n| Network Security | 43 | IDS/IPS · firewall rules · VLAN segmentation · traffic analysis |\n| Web Application Security | 42 | OWASP Top 10 · SQLi · XSS · SSRF · deserialization |\n| Digital Forensics | 41 | Disk imaging · memory forensics · Hayabusa/KAPE/Plaso timelines |\n| Malware Analysis | 39 | Static/dynamic analysis · reverse engineering · sandboxing |\n| Identity & Access Management | 37 | Entra ID/ROADtools · device-code phishing · PAM · zero trust identity |\n| SOC Operations | 35 | Playbooks · escalation workflows · Graph-log detection · tabletop exercises |\n| Red Teaming | 33 | ADCS/Certipy · BloodHound CE · Sliver/Havoc C2 · NTLM relay |\n| Container Security | 33 | K8s RBAC · image scanning · Falco · container escape |\n| Security Operations | 28 | SIEM correlation · log analysis · alert triage |\n| OT/ICS Security | 28 | Modbus · DNP3 · IEC 62443 · historian defense · SCADA |\n| API Security | 28 | GraphQL · REST · OWASP API Top 10 · WAF bypass |\n| Incident Response | 26 | Breach containment · ransomware response · IR pl",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "rag",
      "skill",
      "llm",
      "automation"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "owner": "JCodesMore",
    "name": "ai-website-cloner-template",
    "full_name": "JCodesMore/ai-website-cloner-template",
    "url": "https://github.com/JCodesMore/ai-website-cloner-template",
    "description": "Clone any website with one command using AI coding agents",
    "language": "TypeScript",
    "total_stars": 22772,
    "forks": 3252,
    "stars_this_period": 4565,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "ai-agents",
        "ai-tools",
        "automation",
        "boilerplate",
        "claude",
        "claude-code",
        "clone",
        "developer-tools",
        "nextjs",
        "react",
        "reverse-engineering",
        "shadcn-ui",
        "skills",
        "tailwindcss",
        "template",
        "typescript",
        "web-scraping",
        "website-clone"
      ],
      "license": "MIT",
      "open_issues": 19,
      "created_at": "2026-03-13T11:14:39Z",
      "pushed_at": "2026-06-01T04:09:21Z",
      "homepage": "https://dsc.gg/jcodesmore",
      "default_branch": "master",
      "forks": 3252,
      "watchers": 105,
      "archived": false,
      "size_kb": 940
    },
    "readme_content": "# AI Website Cloner Template\n\n<a href=\"https://github.com/JCodesMore/ai-website-cloner-template/blob/master/LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"MIT License\" /></a> <a href=\"https://github.com/JCodesMore/ai-website-cloner-template/stargazers\"><img src=\"https://img.shields.io/github/stars/JCodesMore/ai-website-cloner-template?style=flat\" alt=\"Stars\" /></a> <a href=\"https://discord.gg/hrTSX5yTpB\"><img src=\"https://img.shields.io/discord/1400896964597383279?label=discord\" alt=\"Discord\" /></a>\n\nA reusable template for reverse-engineering any website into a clean, modern Next.js codebase using AI coding agents. \n\n**Recommended: [Claude Code](https://docs.anthropic.com/en/docs/claude-code) with Opus 4.7 for best results** — but works with a variety of AI coding agents.\n\nPoint it at a URL, run `/clone-website`, and your AI agent will inspect the site, extract design tokens and assets, write component specs, and dispatch parallel builders to reconstruct every section.\n\n## Demo\n\n[![Watch the demo](docs/design-references/comparison.png)](https://youtu.be/O669pVZ_qr0)\n\n> Click the image above to watch the full demo on YouTube.\n\n## Quick Start\n\n> **Important:** Start by making your own copy with GitHub's **Use this template** button. Do not clone this template repository directly for your website project, and do not open pull requests here with your generated website.\n\n1. **Create your own repository from this template**\n\n   On the GitHub page for this project, click **Use this template**, then click **Create a new repository**.\n\n   Give your new repository a name, choose whether it should be public or private, then click **Create repository**. If GitHub shows an **Include all branches** option, you can leave it off.\n\n   This gives you your own separate project to work in, so your website changes stay in your account instead of coming back to the main template.\n\n2. **Open your new repository on your computer**\n\n   After GitHub creates your copy, open that new repository. Click **Code** and open or clone your new repository with your preferred coding tool.\n\n   If you use the terminal, the command will look like this:\n\n   ```bash\n   git clone https://github.com/YOUR-USERNAME/YOUR-NEW-REPOSITORY.git\n   cd YOUR-NEW-REPOSITORY\n   ```\n\n3. **Install dependencies**\n   ```bash\n   npm install\n   ```\n4. **Start your AI agent** — Claude Code recommended:\n   ```bash\n   claude --chrome\n   ```\n5. **Run the skill**:\n   ```\n   /clone-website <target-url1> [<target-url2> ...]\n   ```\n6. **Customize** (optional) — after the base clone is built, modify as needed\n\n> Using a different agent? Open `AGENTS.md` for project instructions — most agents pick it up automatically.\n\n## Supported Platforms\n\n| Agent                                                         | Status                     |\n| ------------------------------------------------------------- | -------------------------- |\n| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | **Recommended** — Opus 4.7 |\n| [Codex CLI](https://github.com/openai/codex)                  | Supported                  |\n| [OpenCode](https://opencode.ai/)                              | Supported                  |\n| [GitHub Copilot](https://github.com/features/copilot)         | Supported                  |\n| [Cursor](https://cursor.com/)                                 | Supported                  |\n| [Windsurf](https://codeium.com/windsurf)                      | Supported                  |\n| [Gemini CLI](https://github.com/google-gemini/gemini-cli)     | Supported                  |\n| [Cline](https://github.com/cline/cline)                       | Supported                  |\n| [Roo Code](https://github.com/RooCodeInc/Roo-Code)            | Supported                  |\n| [Continue](https://continue.dev/)                             | Supported                  |\n| [Amazon Q](https://aws.amazon.com/q/developer/)               | Supported                  |\n| [Augment Code](https://www.augmentcode.com/)                  | Supported                  |\n| [Aider](https://aider.chat/)                                  | Supported                  |\n\n## Prerequisites\n\n- [Node.js](https://nodejs.org/) 24+\n- An AI coding agent (see [Supported Platforms](#supported-platforms))\n\n## Tech Stack\n\n- **Next.js 16** — App Router, React 19, TypeScript strict\n- **shadcn/ui** — Radix primitives + Tailwind CSS v4\n- **Tailwind CSS v4** — oklch design tokens\n- **Lucide React** — default icons (replaced by extracted SVGs during cloning)\n\n## How It Works\n\nThe `/clone-website` skill runs a multi-phase pipeline:\n\n1. **Reconnaissance** — screenshots, design token extraction, interaction sweep (scroll, click, hover, responsive)\n2. **Foundation** — updates fonts, colors, globals, downloads all assets\n3. **Component Specs** — writes detailed spec files (`docs/research/components/`) with exact computed CSS values, states, behaviors, and content\n4. **Parallel Build** — dispatches builder agents in git worktrees, one per section/component\n5. **Assembly & QA** — merges worktrees, wires up the page, runs visual diff against the original\n\nEach builder agent receives the full component specification inline — exact `getComputedStyle()` values, interaction models, multi-state content, responsive breakpoints, and asset paths. No guessing.\n\n## Use Cases\n\n- **Platform migration** — rebuild a site you own from WordPress/Webflow/Squarespace into a modern Next.js codebase\n- **Lost source code** — your site is live but the repo is gone, the developer left, or the stack is legacy. Get the code back in a modern format\n- **Learning** — deconstruct how production sites achieve specific layouts, animations, and responsive behavior by working with real code\n\n## Not Intended For\n\n- **Phishing or impersonation** — this project must not be used for deceptive purposes, impersonation, or any activity that breaks the law.\n- **Passing off someone's design as your own** — logos, brand assets, and original copy belong to their owners.\n- **Violating terms of service** — some sites explicitly prohibit scraping or reproduction. Check first.\n\n## Project Structure\n\n```\nsrc/\n  app/              # Next.js routes\n  components/       # React components\n    ui/             # shadcn/ui primitives\n    icons.tsx       # Extracted SVG icons\n  lib/utils.ts      # cn() utility\n  types/            # TypeScript interfaces\n  hooks/            # Custom React hooks\npublic/\n  images/           # Downloaded images from target\n  videos/           # Downloaded videos from target\n  seo/              # Favicons, OG images\ndocs/\n  research/         # Extraction output & component specs\n  design-references/ # Screenshots\nscripts/\n  sync-agent-rules.sh  # Regenerate agent instruction files\n  sync-skills.mjs      # Regenerate /clone-website for all platforms\nAGENTS.md           # Agent instructions (single source of truth)\nCLAUDE.md           # Claude Code config (imports AGENTS.md)\nGEMINI.md           # Gemini CLI config (imports AGENTS.md)\n```\n\n## Commands\n\n```bash\nnpm run dev    # Start dev server\nnpm run build  # Production build\nnpm run lint   # ESLint check\nnpm run typecheck # TypeScript check\nnpm run check  # Run lint + typecheck + build\n```\n\n### If using docker\n\n```bash\ndocker compose up app --build # build and run the app\ndocker compose up dev --build # run the app in dev mode on port 3001\n```\n\n## Updating for Other Platforms\n\nTwo source-of-truth files power all platform support. Edit the source, then run the sync script:\n\n| What                   | Source of truth                         | Sync command                       |\n| ---------------------- | --------------------------------------- | ---------------------------------- |\n| Project instructions   | `AGENTS.md`                             | `bash scripts/sync-agent-rules.sh` |\n| `/clone-website` skill | `.claude/skills/clone-website/SKILL.md` | `node scripts/sync-skills.mjs`     |\n\nEach script regenerates the platform-specific copies automatically. Agents that read the source files natively need no regeneration.\n\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=JCodesMore/ai-website-cloner-template&type=Date)](https://star-history.com/#JCodesMore/ai-website-cloner-template&Date)\n\n## License\n\nMIT\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"ai-website-clone-template\",\n  \"version\": \"0.3.1\",\n  \"private\": true,\n  \"description\": \"Clone any website into a clean, modern Next.js codebase using AI coding agents\",\n  \"author\": \"JCodesMore\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/JCodesMore/ai-website-cloner-template.git\"\n  },\n  \"homepage\": \"https://github.com/JCodesMore/ai-website-cloner-template\",\n  \"bugs\": {\n    \"url\": \"https://github.com/JCodesMore/ai-website-cloner-template/issues\"\n  },\n  \"keywords\": [\n    \"claude-code\",\n    \"website-clone\",\n    \"reverse-engineering\",\n    \"nextjs\",\n    \"ai\",\n    \"template\",\n    \"tailwindcss\",\n    \"shadcn-ui\"\n  ],\n  \"engines\": {\n    \"node\": \">=24\"\n  },\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"eslint\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"check\": \"npm run lint && npm run typecheck && npm run build\"\n  },\n  \"dependencies\": {\n    \"@base-ui/react\": \"^1.3.0\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"clsx\": \"^2.1.1\",\n    \"lucide-react\": \"^1.6.0\",\n    \"next\": \"16.2.1\",\n    \"react\": \"19.2.4\",\n    \"react-dom\": \"19.2.4\",\n    \"shadcn\": \"^4.1.0\",\n    \"tailwind-merge\": \"^3.5.0\",\n    \"tw-animate-css\": \"^1.4.0\"\n  },\n  \"devDependencies\": {\n    \"@tailwindcss/postcss\": \"^4\",\n    \"@types/node\": \"^24\",\n    \"@types/react\": \"^19\",\n    \"@types/react-dom\": \"^19\",\n    \"eslint\": \"^9\",\n    \"eslint-config-next\": \"16.2.1\",\n    \"tailwindcss\": \"^4\",\n    \"typescript\": \"^5\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "automation"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 88
    },
    "strategic_score": 88
  },
  {
    "owner": "jamiepine",
    "name": "voicebox",
    "full_name": "jamiepine/voicebox",
    "url": "https://github.com/jamiepine/voicebox",
    "description": "The open-source AI voice studio. Clone, dictate, create.",
    "language": "TypeScript",
    "total_stars": 35393,
    "forks": 4252,
    "stars_this_period": 3965,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "cuda",
        "mlx",
        "qwen3-tts",
        "qwen3-tts-ui",
        "voice-ai",
        "voice-clone",
        "whisper"
      ],
      "license": "MIT",
      "open_issues": 491,
      "created_at": "2026-01-25T12:27:03Z",
      "pushed_at": "2026-06-28T00:34:55Z",
      "homepage": "https://voicebox.sh",
      "default_branch": "main",
      "forks": 4252,
      "watchers": 182,
      "archived": false,
      "size_kb": 106636
    },
    "readme_content": "<p align=\"center\">\n  <img src=\".github/assets/icon-dark.webp\" alt=\"Voicebox\" width=\"120\" height=\"120\" />\n</p>\n\n<h1 align=\"center\">Voicebox</h1>\n\n<p align=\"center\">\n  <strong>The open-source AI voice studio.</strong><br/>\n  Clone any voice. Generate speech. Dictate into any app. Talk to agents in voices you own.<br/>\n  The full voice I/O stack, running locally on your machine.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/jamiepine/voicebox/releases\">\n    <img src=\"https://img.shields.io/github/downloads/jamiepine/voicebox/total?style=flat&color=blue\" alt=\"Downloads\" />\n  </a>\n  <a href=\"https://github.com/jamiepine/voicebox/releases/latest\">\n    <img src=\"https://img.shields.io/github/v/release/jamiepine/voicebox?style=flat\" alt=\"Release\" />\n  </a>\n  <a href=\"https://github.com/jamiepine/voicebox/stargazers\">\n    <img src=\"https://img.shields.io/github/stars/jamiepine/voicebox?style=flat\" alt=\"Stars\" />\n  </a>\n  <a href=\"https://github.com/jamiepine/voicebox/blob/main/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/jamiepine/voicebox?style=flat\" alt=\"License\" />\n  </a>\n  <a href=\"https://deepwiki.com/jamiepine/voicebox\">\n    <img src=\"https://img.shields.io/static/v1?label=Ask&message=DeepWiki&color=5B6EF7\" alt=\"Ask DeepWiki\" />\n  </a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://trendshift.io/repositories/21213\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/21213\" alt=\"jamiepine%2Fvoicebox | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://voicebox.sh\">voicebox.sh</a> •\n  <a href=\"https://docs.voicebox.sh\">Docs</a> •\n  <a href=\"#download\">Download</a> •\n  <a href=\"#features\">Features</a> •\n  <a href=\"#api\">API</a> •\n  <a href=\"docs/content/docs/overview/troubleshooting.mdx\">Troubleshooting</a>\n</p>\n\n<br/>\n\n<p align=\"center\">\n  <a href=\"https://voicebox.sh\">\n    <img src=\"landing/public/assets/app-screenshot-1.webp\" alt=\"Voicebox App Screenshot\" width=\"800\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  <em>Click the image above to watch the demo video on <a href=\"https://voicebox.sh\">voicebox.sh</a></em>\n</p>\n\n<br/>\n\n<p align=\"center\">\n  <img src=\"landing/public/assets/app-screenshot-2.webp\" alt=\"Voicebox Screenshot 2\" width=\"800\" />\n</p>\n\n<p align=\"center\">\n  <img src=\"landing/public/assets/app-screenshot-3.webp\" alt=\"Voicebox Screenshot 3\" width=\"800\" />\n</p>\n\n<br/>\n\n## What is Voicebox?\n\nVoicebox is a **local-first AI voice studio** — a free and open-source alternative to **ElevenLabs** and **WisprFlow** in one app. Clone voices from a few seconds of audio, generate speech in 23 languages across 7 TTS engines, dictate into any text field with a global hotkey, and give any MCP-aware AI agent a voice of your choosing.\n\nThe two cloud incumbents sit on opposite halves of the voice I/O loop — ElevenLabs on output, WisprFlow on input. Voicebox does both, bridges them with a bundled local LLM for refinement and per-profile personas, and runs the whole thing on your machine.\n\n- **Complete privacy** — models, voice data, and captures never leave your machine\n- **7 TTS engines** — Qwen3-TTS, Qwen CustomVoice, LuxTTS, Chatterbox Multilingual, Chatterbox Turbo, HumeAI TADA, and Kokoro\n- **Voice cloning and preset voices** — zero-shot cloning from a reference sample, or 50+ curated preset voices via Kokoro and Qwen CustomVoice\n- **23 languages** — from English to Arabic, Japanese, Hindi, Swahili, and more\n- **Post-processing effects** — pitch shift, reverb, delay, chorus, compression, and filters\n- **Expressive speech** — paralinguistic tags like `[laugh]`, `[sigh]`, `[gasp]` via Chatterbox Turbo; natural-language delivery control via Qwen CustomVoice\n- **Unlimited length** — auto-chunking with crossfade for scripts, articles, and chapters\n- **Stories editor** — multi-track timeline for conversations, podcasts, and narratives\n- **Voice input** — global dictation hotkey with push-to-talk and toggle modes, accessibility-verified auto-paste on macOS, in-app mic on every text field, Whisper-based STT\n- **Agent voice output** — one tool call (`voicebox.speak`) and any MCP-aware agent (Claude Code, Cursor, Cline) speaks to you in a voice you've cloned\n- **Voice personalities** — attach a free-form persona to any voice profile, then Compose, Rewrite, or Respond via a bundled local LLM — agents can invoke the same modes over MCP\n- **API-first** — REST API plus a built-in MCP server for integrating voice I/O into your own apps and agents\n- **Native performance** — built with Tauri (Rust), not Electron\n- **Runs everywhere** — macOS (MLX/Metal), Windows (CUDA), Linux, AMD ROCm, Intel Arc, Docker\n\n---\n\n## Download\n\n| Platform              | Download                                               |\n| --------------------- | ------------------------------------------------------ |\n| macOS (Apple Silicon) | [Download DMG](https://voicebox.sh/download/mac-arm)   |\n| macOS (Intel)         | [Download DMG](https://voicebox.sh/download/mac-intel) |\n| Windows               | [Download MSI](https://voicebox.sh/download/windows)   |\n| Docker                | `docker compose up`                                    |\n\n> **[View all binaries →](https://github.com/jamiepine/voicebox/releases/latest)**\n\n> **Linux** — Pre-built binaries are not yet available. See [voicebox.sh/linux-install](https://voicebox.sh/linux-install) for build-from-source instructions.\n\n> **Having trouble?** See the [Troubleshooting Guide](docs/content/docs/overview/troubleshooting.mdx) for common install, generation, model-download, and GPU issues.\n\n---\n\n## Features\n\n### Multi-Engine Voice Cloning\n\nSeven TTS engines with different strengths, switchable per-generation:\n\n| Engine                      | Languages | Strengths                                                                                                                                |\n| --------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| **Qwen3-TTS** (0.6B / 1.7B) | 10        | High-quality multilingual cloning, delivery instructions (\"speak slowly\", \"whisper\")                                                     |\n| **Qwen CustomVoice**        | 10        | 9 curated preset voices with natural-language delivery control — no reference audio required                                             |\n| **LuxTTS**                  | English   | Lightweight (~1GB VRAM), 48kHz output, 150x realtime on CPU                                                                              |\n| **Chatterbox Multilingual** | 23        | Broadest language coverage — Arabic, Danish, Finnish, Greek, Hebrew, Hindi, Malay, Norwegian, Polish, Swahili, Swedish, Turkish and more |\n| **Chatterbox Turbo**        | English   | Fast 350M model with paralinguistic emotion/sound tags                                                                                   |\n| **TADA** (1B / 3B)          | 10        | HumeAI speech-language model — 700s+ coherent audio, text-acoustic dual alignment                                                        |\n| **Kokoro**                  | 8         | 50 curated preset voices, tiny 82M model, fast CPU inference                                                                             |\n\n### Emotions & Paralinguistic Tags\n\nOnly **Chatterbox Turbo** interprets paralinguistic tags like `[laugh]` and\n`[sigh]`. Qwen3-TTS, LuxTTS, Chatterbox Multilingual, and HumeAI TADA read them\nliterally as text.\n\nWith **Chatterbox Turbo** selected, type `/` in the text input to open the tag\ninserter and add expressive tags inline with speech:\n\n`[laugh]` `[chuckle]` `[gasp]` `[cough]` `[sigh]` `[groan]` `[sniff]` `[shush]` `[clear throat]`\n\n### Post-Processing Effects\n\n8 audio effects powered by Spotify's `pedalboard` library. Apply after generation, preview in real time, build reusable presets.\n\n| Effect           | Description                                   |\n| ---------------- | --------------------------------------------- |\n| Pitch Shift      | Up or down by up to 12 semitones              |\n| Reverb           | Configurable room size, damping, wet/dry mix  |\n| Delay            | Echo with adjustable time, feedback, and mix  |\n| Chorus / Flanger | Modulated delay for metallic or lush textures |\n| Compressor       | Dynamic range compression                     |\n| Gain             | Volume adjustment (-40 to +40 dB)             |\n| High-Pass Filter | Remove low frequencies                        |\n| Low-Pass Filter  | Remove high frequencies                       |\n\nShips with 4 built-in presets (Robotic, Radio, Echo Chamber, Deep Voice) and supports custom presets. Effects can be assigned per-profile as defaults.\n\n### Unlimited Generation Length\n\nText is automatically split at sentence boundaries and each chunk is generated independently, then crossfaded together. Works with all engines.\n\n- Configurable auto-chunking limit (100–5,000 chars)\n- Crossfade slider (0–200ms) for smooth transitions\n- Max text length: 50,000 characters\n- Smart splitting respects abbreviations, CJK punctuation, and `[tags]`\n\n### Generation Versions\n\nEvery generation supports multiple versions with provenance tracking:\n\n- **Original** — clean TTS output, always preserved\n- **Effects versions** — apply different effects chains from any source version\n- **Takes** — regenerate with a new seed for variation\n- **Source tracking** — each version records its lineage\n- **Favorites** — star generations for quick access\n\n### Async Generation Queue\n\nGeneration is non-blocking. Submit and immediately start typing the next one.\n\n- Serial execution queue prevents GPU contention\n- Real-time SSE status streaming\n- Failed generations can be retried\n- Stale generations from crashes auto-recover on startup\n\n### Voice Profile Management\n\n- Create profiles from audio files or record directly in-app\n- Import/export profiles to share or back up\n- Multi-sample support for higher quality cloning\n- Per-profile default effects chains\n- Organize with descriptions and language tags\n\n### Stories Editor\n\nMulti-voice timeline editor for conversations, podcasts, and narratives.\n\n- Multi-track composition with drag-and-drop\n- Inline audio trimming and splitting\n- Auto-playback with synchronized playhead\n- Version pinning per track clip\n\n### Global Dictation & Voice Input\n\nThe other half of the voice I/O loop. Hold a hotkey anywhere on your system, speak, release — on macOS the transcript pastes straight into the focused text field. Or hit the mic on any Voicebox text input and dictate directly into the app.\n\n- **Configurable chord bindings** — hold-to-speak and tap-to-toggle chords, each rebindable in the in-app chord picker. Holding push-to-talk and tapping `Space` mid-hold upgrades into a toggle session without a gap in audio\n- **Target-aware paste (macOS)** — accessibility-verified injection into the focused text field, with atomic clipboard save/restore so your clipboard isn't clobbered\n- **First-run permissions UX** — in-app gates walk you through the macOS Accessibility and Input Monitoring grants with deep-links to System Settings\n- **In-app mic button** on every Voicebox text field — generation form, profile descriptions, story titles, anywhere you'd type\n- **LLM refinement** — optional cleanup of ums, stutters, and false starts before paste\n- **On-screen pill** — floating overlay surfacing `recording`, `transcribing`, `refining`, and `speaking` states. Same pill agents use when they speak to you, so there's one mental model for both directions of the loop\n\n### Speech-to-Text\n\nVoicebox runs OpenAI Whisper for transcription — the same model that backs dictation, the Captures tab, and the `/transcribe` API. Running on MLX (Apple Silicon) or PyTorch (CUDA / ROCm / DirectML / CPU) depending on your platform.\n\n| Size                          | Notes                                            ",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"voicebox\",\n  \"version\": \"0.5.0\",\n  \"private\": true,\n  \"workspaces\": [\n    \"app\",\n    \"tauri\",\n    \"web\",\n    \"landing\"\n  ],\n  \"scripts\": {\n    \"dev\": \"bun run setup:dev && cd tauri && bun run tauri dev\",\n    \"dev:web\": \"cd web && bun run dev\",\n    \"dev:landing\": \"cd landing && bun run dev\",\n    \"dev:server\": \"uvicorn backend.main:app --reload --port 17493\",\n    \"setup:dev\": \"bun run scripts/setup-dev-sidecar.js\",\n    \"build\": \"./scripts/build-server.sh && cd tauri && bun run tauri build\",\n    \"build:web\": \"cd web && bun run build\",\n    \"build:landing\": \"cd landing && bun run build\",\n    \"build:release\": \"./scripts/prepare-release.sh\",\n    \"generate:api\": \"./scripts/generate-api.sh\",\n    \"generate:keys\": \"cd tauri && bun tauri signer generate -w ~/.tauri/voicebox.key\",\n    \"build:server\": \"./scripts/build-server.sh\",\n    \"update:icons\": \"./scripts/update-icons.sh\",\n    \"convert:assets\": \"./scripts/convert-assets.sh\",\n    \"lint\": \"biome lint .\",\n    \"typecheck\": \"bunx tsc -p app/tsconfig.json --noEmit && cd web && bunx tsc --noEmit\",\n    \"lint:fix\": \"biome lint --write .\",\n    \"format\": \"biome format --write .\",\n    \"format:check\": \"biome format .\",\n    \"check\": \"biome check .\",\n    \"check:fix\": \"biome check --write .\",\n    \"ci\": \"bun run typecheck && bun run build:web\"\n  },\n  \"devDependencies\": {\n    \"@biomejs/biome\": \"2.3.12\",\n    \"@types/node\": \"^20.0.0\",\n    \"tailwindcss\": \"^4.1.18\",\n    \"typescript\": \"^5.6.0\"\n  },\n  \"engines\": {\n    \"bun\": \">=1.0.0\"\n  },\n  \"packageManager\": \"bun@1.3.8\",\n  \"dependencies\": {\n    \"loaders.css\": \"^0.1.2\",\n    \"react-loaders\": \"^3.0.1\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "workspace",
      "llm"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 97
    },
    "strategic_score": 97
  },
  {
    "owner": "tw93",
    "name": "Pake",
    "full_name": "tw93/Pake",
    "url": "https://github.com/tw93/Pake",
    "description": "🤱🏻 Turn any webpage into a desktop app with one command.",
    "language": "Rust",
    "total_stars": 58319,
    "forks": 11651,
    "stars_this_period": 3933,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "chatgpt",
        "claude",
        "desktop",
        "gemini",
        "hight-performance",
        "linux",
        "macos",
        "no-electron",
        "package",
        "rust",
        "tauri",
        "windows",
        "youtube"
      ],
      "license": "GPL-3.0",
      "open_issues": 8,
      "created_at": "2022-10-14T09:32:57Z",
      "pushed_at": "2026-06-28T01:14:08Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 11651,
      "watchers": 270,
      "archived": false,
      "size_kb": 64413
    },
    "readme_content": "<h4 align=\"right\"><strong>English</strong> | <a href=\"README_CN.md\">简体中文</a></h4>\n<p align=\"center\">\n    <img src=https://gw.alipayobjects.com/zos/k/fa/logo-modified.png width=138/>\n</p>\n<h1 align=\"center\">Pake</h1>\n<p align=\"center\"><strong>Turn any webpage into a desktop app with one command, supports macOS, Windows, and Linux</strong></p>\n<div align=\"center\">\n    <a href=\"https://twitter.com/HiTw93\" target=\"_blank\">\n    <img alt=\"twitter\" src=\"https://img.shields.io/badge/follow-Tw93-red?style=flat-square&logo=Twitter\"></a>\n    <a href=\"https://t.me/+9f9gf4ZrFSQ2OWVl\" target=\"_blank\">\n    <img alt=\"telegram\" src=\"https://img.shields.io/badge/chat-telegram-blueviolet?style=flat-square&logo=Telegram\"></a>\n    <a href=\"https://github.com/tw93/Pake/releases\" target=\"_blank\">\n    <img alt=\"GitHub downloads\" src=\"https://img.shields.io/github/downloads/tw93/Pake/total.svg?style=flat-square\"></a>\n    <a href=\"https://github.com/tw93/Pake/commits\" target=\"_blank\">\n    <img alt=\"GitHub commit\" src=\"https://img.shields.io/github/commit-activity/m/tw93/Pake?style=flat-square\"></a>\n    <a href=\"https://github.com/tw93/Pake/issues?q=is%3Aissue+is%3Aclosed\" target=\"_blank\">\n    <img alt=\"GitHub closed issues\" src=\"https://img.shields.io/github/issues-closed/tw93/Pake.svg?style=flat-square\"></a>\n</div>\n\n## Features\n\n- 🎐 **Lightweight**: Installer is nearly 20 times smaller than Electron packages, typically under 10M on disk\n- 🚀 **Fast**: Built with Rust Tauri, much faster than traditional JS frameworks with lower memory usage\n- ⚡ **Easy to use**: One-command packaging via CLI or online building, no complex configuration needed\n- 📦 **Feature-rich**: Supports shortcuts, immersive windows, drag & drop, style customization, ad removal\n\n## Getting Started\n\n- **Beginners**: Download ready-made [Popular Packages](#popular-packages) or use [Online Building](docs/github-actions-usage.md) with no environment setup required\n- **Developers**: Install [CLI Tool](docs/cli-usage.md) for one-command packaging of any website with customizable icons, window settings, and more\n- **Advanced Users**: Clone the project locally for [Custom Development](#development), or check [Advanced Usage](docs/advanced-usage.md) for style customization and feature enhancement\n- **Troubleshooting**: Check [FAQ](docs/faq.md) for common issues and solutions\n\n## Popular Packages\n\n<table>\n    <tr>\n        <td>WeRead\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/WeRead.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/WeRead_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/WeRead_x86_64.deb\">Linux</a>\n        </td>\n        <td>Twitter\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Twitter.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Twitter_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Twitter_x86_64.deb\">Linux</a>\n        </td>\n    </tr>\n    <tr>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/WeRead.jpg width=600/></td>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/Twitter.jpg width=600/></td>\n    </tr>\n    <tr>\n        <td>Grok\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Grok.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Grok_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Grok_x86_64.deb\">Linux</a>\n        </td>\n        <td>DeepSeek\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/DeepSeek.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/DeepSeek_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/DeepSeek_x86_64.deb\">Linux</a>\n        </td>\n    </tr>\n    <tr>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/Grok.png width=600/></td>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/DeepSeek.png width=600/></td>\n    </tr>\n    <tr>\n        <td>ChatGPT\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/ChatGPT.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/ChatGPT_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/ChatGPT_x86_64.deb\">Linux</a>\n        </td>\n        <td>Gemini\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Gemini.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Gemini_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Gemini_x86_64.deb\">Linux</a>\n        </td>\n    </tr>\n    <tr>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/ChatGPT.png width=600/></td>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/Gemini.png width=600/></td>\n    </tr>\n    <tr>\n      <td>YouTube Music\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/YouTubeMusic.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/YouTubeMusic_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/YouTubeMusic_x86_64.deb\">Linux</a>\n      </td>\n      <td>YouTube\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/YouTube.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/YouTube_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/YouTube_x86_64.deb\">Linux</a>\n      </td>\n    </tr>\n    <tr>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/YouTubeMusic.png width=600 /></td>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/YouTube.jpg width=600 /></td>\n    </tr>\n    <tr>\n        <td>LiZhi\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/LiZhi.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/LiZhi_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/LiZhi_x86_64.deb\">Linux</a>\n        </td>\n        <td>ProgramMusic\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/ProgramMusic.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/ProgramMusic_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/ProgramMusic_x86_64.deb\">Linux</a>\n        </td>\n    </tr>\n    <tr>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/LiZhi.jpg width=600/></td>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/ProgramMusic.jpg width=600/></td>\n    </tr>\n    <tr>\n        <td>Excalidraw\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Excalidraw.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Excalidraw_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/Excalidraw_x86_64.deb\">Linux</a>\n        </td>\n        <td>XiaoHongShu\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/XiaoHongShu.dmg\">Mac</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/XiaoHongShu_x64.msi\">Windows</a>\n            <a href=\"https://github.com/tw93/Pake/releases/latest/download/XiaoHongShu_x86_64.deb\">Linux</a>\n        </td>\n    </tr>\n    <tr>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/Excalidraw.png width=600/></td>\n        <td><img src=https://raw.githubusercontent.com/tw93/static/main/pake/XiaoHongShu.png width=600/></td>\n    </tr>\n</table>\n\n<details>\n<summary>🏂 You can download more applications from <a href=\"https://github.com/tw93/Pake/releases\">Releases</a>. <b>Click here to expand the shortcuts reference!</b></summary>\n\n<br/>\n\n| Mac                                                       | Windows/Linux                                       | Function                            |\n| --------------------------------------------------------- | --------------------------------------------------- | ----------------------------------- |\n| <kbd>⌘</kbd> + <kbd>[</kbd>                               | <kbd>Ctrl</kbd> + <kbd>←</kbd>                      | Return to the previous page         |\n| <kbd>⌘</kbd> + <kbd>]</kbd>                               | <kbd>Ctrl</kbd> + <kbd>→</kbd>                      | Go to the next page                 |\n| <kbd>⌘</kbd> + <kbd>↑</kbd>                               | <kbd>Ctrl</kbd> + <kbd>↑</kbd>                      | Auto scroll to top of page          |\n| <kbd>⌘</kbd> + <kbd>↓</kbd>                               | <kbd>Ctrl</kbd> + <kbd>↓</kbd>                      | Auto scroll to bottom of page       |\n| <kbd>⌘</kbd> + <kbd>r</kbd>                               | <kbd>Ctrl</kbd> + <kbd>r</kbd>                      | Refresh Page                        |\n| <kbd>⌘</kbd> + <kbd>w</kbd>                               | <kbd>Ctrl</kbd> + <kbd>w</kbd>                      | Hide window, not quit               |\n| <kbd>⌘</kbd> + <kbd>-</kbd>                               | <kbd>Ctrl</kbd> + <kbd>-</kbd>                      | Zoom out the page                   |\n| <kbd>⌘</kbd> + <kbd>=</kbd>                               | <kbd>Ctrl</kbd> + <kbd>=</kbd>                      | Zoom in the Page                    |\n| <kbd>⌘</kbd> + <kbd>0</kbd>                               | <kbd>Ctrl</kbd> + <kbd>0</kbd>                      | Reset the page zoom                 |\n| <kbd>⌘</kbd> + <kbd>L</kbd>                               | <kbd>Ctrl</kbd> + <kbd>L</kbd>                      | Copy Current Page URL               |\n| <kbd>⌘</kbd> + <kbd>⇧</kbd> + <kbd>⌥</kbd> + <kbd>V</kbd> | <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>V</kbd>   | Paste and Match Style               |\n| <kbd>⌘</kbd> + <kbd>⇧</kbd> + <kbd>H</kbd>                | <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>H</kbd>   | Go to Home Page                     |\n| <kbd>⌘</kbd> + <kbd>⌥</kbd> + <kbd>I</kbd>                | <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>I</kbd>   | Toggle Developer Tools (Debug Only) |\n| <kbd>⌘</kbd> + <kbd>⇧</kbd> + <kbd>⌫</kbd>                | <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Del</kbd> | Clear Cache & Restart               |\n\nIn addition, double-click the title bar to switch to full-screen mode. For Mac users, you can also use the gesture to go to the previous or next page and drag the title bar to move the window. The new menu also offers options for navigation, zoom, and window controls.\n\n</details>\n\n## Command-Line Packaging\n\n![Pake](https://raw.githubusercontent.com/tw93/static/main/pake/pake1.gif)\n\n```bash\n# Install Pake CLI\npnpm install -g pake-cli\n\n# Basic usage - automatically fetches website icon\npake https://github.com --name GitHub\n\n# Advanced usage with custom options\npake https://weekly.tw93.fun --name Weekly --icon https://cdn.tw93.fun/pake/weekly.icns --width 1200 --height 800 --hide-title-bar\n```\n\nFirst-time packaging requires environment setup and may be slower, subsequent builds are fast. For complete parameter documentation, see [CLI Usage Guide](docs/cli-usage.md). Don't want to use CLI? Try [GitHub Actions Online Building](docs/github-actions-usage.md).\n\n## Development\n\nRequires Rust `>=1.85` and Node `>=22` (recommended LTS; `>=18` also works). For detailed installation guide, see [Tauri documentation](https://v2.tauri.app/start/prerequisites/). If unfamiliar with development environment, use the CLI tool instead.\n\n```bash\n# Install dependencies\npnpm i\n\n# Local development [right-click to open debug mode]\npnpm ru",
    "strategic_keywords": [
      "memory",
      "rag"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 16,
      "novelty": 15,
      "productize": 11,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 6,
      "total": 84
    },
    "strategic_score": 84
  },
  {
    "owner": "penpot",
    "name": "penpot",
    "full_name": "penpot/penpot",
    "url": "https://github.com/penpot/penpot",
    "description": "Penpot: The open-source design tool for design and code collaboration",
    "language": "Clojure",
    "total_stars": 54381,
    "forks": 3531,
    "stars_this_period": 3343,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "clojure",
        "clojurescript",
        "design",
        "prototyping",
        "ui",
        "ux-design",
        "ux-experience"
      ],
      "license": "MPL-2.0",
      "open_issues": 667,
      "created_at": "2015-12-29T22:09:07Z",
      "pushed_at": "2026-06-26T22:01:03Z",
      "homepage": "https://penpot.app",
      "default_branch": "develop",
      "forks": 3531,
      "watchers": 273,
      "archived": false,
      "size_kb": 382059
    },
    "readme_content": "<img width=\"100%\" src=\"https://github.com/user-attachments/assets/da17b160-f289-436f-b140-972083a08602\" />\n\n[uri_license]: https://www.mozilla.org/en-US/MPL/2.0\n[uri_license_image]: https://img.shields.io/badge/MPL-2.0-blue.svg\n\n<p align=\"center\">\n  <a href=\"https://www.digitalpublicgoods.net/r/penpot\" rel=\"nofollow\">\n    <img alt=\"Verified DPG\" src=\"https://img.shields.io/badge/Verified-DPG-3333AB?logo=data:image/svg%2bxml;base64,PHN2ZyB3aWR0aD0iMzEiIGhlaWdodD0iMzMiIHZpZXdCb3g9IjAgMCAzMSAzMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0LjIwMDggMjEuMzY3OEwxMC4xNzM2IDE4LjAxMjRMMTEuNTIxOSAxNi40MDAzTDEzLjk5MjggMTguNDU5TDE5LjYyNjkgMTIuMjExMUwyMS4xOTA5IDEzLjYxNkwxNC4yMDA4IDIxLjM2NzhaTTI0LjYyNDEgOS4zNTEyN0wyNC44MDcxIDMuMDcyOTdMMTguODgxIDUuMTg2NjJMMTUuMzMxNCAtMi4zMzA4MmUtMDVMMTEuNzgyMSA1LjE4NjYyTDUuODU2MDEgMy4wNzI5N0w2LjAzOTA2IDkuMzUxMjdMMCAxMS4xMTc3TDMuODQ1MjEgMTYuMDg5NUwwIDIxLjA2MTJMNi4wMzkwNiAyMi44Mjc3TDUuODU2MDEgMjkuMTA2TDExLjc4MjEgMjYuOTkyM0wxNS4zMzE0IDMyLjE3OUwxOC44ODEgMjYuOTkyM0wyNC44MDcxIDI5LjEwNkwyNC42MjQxIDIyLjgyNzdMMzAuNjYzMSAyMS4wNjEyTDI2LjgxNzYgMTYuMDg5NUwzMC42NjMxIDExLjExNzdMMjQuNjI0MSA5LjM1MTI3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==\">\n  </a>\n  <a href=\"https://community.penpot.app\" rel=\"nofollow\">\n    <img alt=\"Penpot Community\" src=\"https://img.shields.io/discourse/posts?server=https%3A%2F%2Fcommunity.penpot.app\">\n  </a>\n  <a href=\"https://tree.taiga.io/project/penpot/\" rel=\"nofollow\">\n    <img alt=\"Managed with Taiga.io\" src=\"https://img.shields.io/badge/managed%20with-TAIGA.io-709f14.svg\">\n  </a>\n  <a href=\"https://gitpod.io/#https://github.com/penpot/penpot\" rel=\"nofollow\">\n    <img alt=\"Gitpod ready-to-code\" src=\"https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://penpot.app/\"><b>Website</b></a>  •\n  <a href=\"https://help.penpot.app/user-guide/\"><b>User Guide</b></a>  •\n  <a href=\"https://penpot.app/learning-center\"><b>Learning Center</b></a>  •\n  <a href=\"https://community.penpot.app/\"><b>Community</b></a>\n</p>\n<p align=\"center\">\n  <a href=\"https://www.youtube.com/@Penpot\"><b>Youtube</b></a>  •\n  <a href=\"https://peertube.kaleidos.net/a/penpot_app/video-channels\"><b>Peertube</b></a>  •\n  <a href=\"https://www.linkedin.com/company/penpot/\"><b>Linkedin</b></a>  •\n  <a href=\"https://instagram.com/penpot.app\"><b>Instagram</b></a>  •\n  <a href=\"https://fosstodon.org/@penpot/\"><b>Mastodon</b></a>  •\n  <a href=\"https://bsky.app/profile/penpot.app\"><b>Bluesky</b></a>  •\n  <a href=\"https://twitter.com/penpotapp\"><b>X</b></a>\n</p>\n\n[Penpot video](https://github.com/user-attachments/assets/7c67fd7c-04d3-4c9b-88ec-b6f5e23f8332)\n\nPenpot is the open-source design platform for teams that build digital products at scale.\n\nPenpot’s key strength lies in giving you **full ownership of your design infrastructure**. Built on open source and designed for [self-hosting](https://help.penpot.app/technical-guide/getting-started/), it puts teams in complete control of their design environment supporting strict compliance and governance requirements. Whether used in the **browser or deployed on your own servers**, Penpot **works with open standards** like SVG, CSS, HTML, and JSON. \n\nReal-time collaboration strengthens this foundation, helping teams scale and bring design closer to the product through top-tier capabilities. Additionally, developers feel at home using Penpot, because design is expressed as code, enabling a direct translation and shipping products faster. \n\nBest-in-class native [Design Tokens](https://penpot.dev/collaboration/design-tokens) provide a single source of truth between design and development. They ensure consistency, improve collaboration, and make it easier to manage complex design systems.\n\nThe [MCP server](https://penpot.app/penpot-mcp-server) takes it further by enabling multi-directional workflows between design and code. A [powerful open API](https://help.penpot.app/mcp/#quick-start) and plugin system makes the workspace programmable, enabling automation, AI-driven workflows, and integrations with the tools and systems you already use.\n\nWith [CSS Grid and Flex Layout](https://help.penpot.app/user-guide/designing/flexible-layouts/), teams can design responsive interfaces that behave like real code from the start.\n\nCombined, these features turn Penpot into a **full-stack design platform** for building scalable design systems and fully integrated product development processes.\n\nIf your organization is scaling and needs extra support, we’re here to help. [Talk to us](https://penpot.app/talk-to-us)\n\n## Table of contents ##\n\n- [Why Penpot](#why-penpot)\n- [Getting Started](#getting-started)\n- [Community](#community)\n- [Contributing](#contributing)\n- [Resources](#resources)\n- [License](#license)\n\n## Why Penpot ##\n\nPenpot connects design, code, and AI workflows through a code-based approach, making designs readable by developers and AI via the MCP server. This approach helps teams ship what’s actually designed and manage design systems at scale with powerful design tokens. As a self-hosted, open-source and real-time collaboration platform, Penpot offers full flexibility, security, and ownership without vendor lock-in. Learn more about [why Penpot](https://penpot.app/why-penpot) is the platform for your team.\n\n### Plugin system ###\n\n[Penpot plugins](https://penpot.app/penpothub/plugins) let you expand the platform's capabilities, give you the flexibility to integrate it with other apps, and design custom solutions.\n\n### Designed for developers ###\n\nPenpot was built to serve both designers and developers and create a fluid design-code process. You have the choice to enjoy real-time collaboration or play \"solo\".\n\n### Inspect mode ###\n\nWork with ready-to-use code and make your workflow easy and fast. The inspect tab gives instant access to SVG, CSS and HTML code.\n\n### Integrations ###\n\nPenpot offers [integration](https://penpot.app/integrations-api) into the development toolchain, thanks to its support for webhooks and an API accessible through access tokens.\n\n### Building Design Systems: design tokens, components and variants ###\n\nPenpot brings [design systems](https://penpot.app/design/design-systems) to code-minded teams: a single source of truth with native Design Tokens, Components, and Variants for scalable, reusable, and consistent UI across projects and platforms.\n\n<img width=\"100%\" alt=\"Penpot Design Systems\" src=\"https://github.com/user-attachments/assets/cce75ad6-f783-473f-8803-da9eb8255fef\">\n\n## Getting started ##\n\nPenpot is the only design & prototype platform that is deployment agnostic. You can use it in our [SAAS](https://design.penpot.app) or deploy it anywhere.\n\nLearn how to install it with Docker, Kubernetes, Elestio or other options on [our website](https://penpot.app/self-host).\n\n## Community ##\n\nWe love the Open Source software community. Contributing is our passion and if it’s yours too, participate and [improve](https://community.penpot.app/c/help-us-improve-penpot/7) Penpot. All your designs, code and ideas are welcome!\n\nWant to go a step further? Become a [Penpot Ambassador](https://penpot.app/ambassador-program) and help grow the Penpot community in your region while contributing to a global, open design ecosystem.\n\nIf you need help or have any questions; if you’d like to share your experience using Penpot or get inspired; if you’d rather meet our community of developers and designers, [join our Community](https://community.penpot.app/)!\n\nCategories include:\n\n- [Ask the Community](https://community.penpot.app/c/ask-for-help-using-penpot/6)\n- [Troubleshooting](https://community.penpot.app/c/technical/8)\n- [Help us Improve Penpot](https://community.penpot.app/c/help-us-improve-penpot/7)\n- [Events and Announcements](https://community.penpot.app/c/announcements/5)\n- [Penpot in your language](https://community.penpot.app/c/penpot-in-your-language/12)\n- [Education](https://community.penpot.app/c/education/28)\n\n<img width=\"100%\" alt=\"Pentpot Community\" src=\"https://github.com/user-attachments/assets/4b2a4360-12b5-4994-bd45-641449f86c4e\" />\n\n### Code of Conduct ###\n\nAnyone who contributes to Penpot, whether through code, in the community, or at an event, must adhere to the\n[code of conduct](https://help.penpot.app/contributing-guide/coc/) and foster a positive and safe environment.\n\n### Contributing ###\n\nAny contribution will make a difference to improve Penpot. How can you get involved?\n\nChoose your way:\n\n- Create and [share Libraries & Templates](https://penpot.app/libraries-templates.html) that will be helpful for the community.\n- Invite your [team to join](https://design.penpot.app/#/auth/register).\n- Give this repo a star and follow us on Social Media: [Mastodon](https://fosstodon.org/@penpot/), [Youtube](https://www.youtube.com/c/Penpot), [Instagram](https://instagram.com/penpot.app), [Linkedin](https://www.linkedin.com/company/penpotdesign),  [Peertube](https://peertube.kaleidos.net/a/penpot_app), [X](https://twitter.com/penpotapp) and [BlueSky](https://bsky.app/profile/penpot.app).\n- Participate in the [Community](https://community.penpot.app/) space by asking and answering questions; reacting to others’ articles;  opening your own conversations and following along on decisions affecting the project.\n- Report bugs with our easy [guide for bugs hunting](https://help.penpot.app/contributing-guide/reporting-bugs/) or [GitHub issues](https://github.com/penpot/penpot/issues).\n- Become a [translator](https://help.penpot.app/contributing-guide/translations).\n- Give feedback: [Email us](mailto:support@penpot.app).\n- **Contribute to Penpot's code:** [Watch this video](https://www.youtube.com/watch?v=TpN0osiY-8k) by Alejandro Alonso, CIO and developer at Penpot, where he gives us a hands-on demo of how to use Penpot’s repository and make changes in both front and back end.\n\nTo find (almost) everything you need to know on how to contribute to Penpot, refer to the [contributing guide](https://help.penpot.app/contributing-guide/).\n\n<img width=\"100%\" alt=\"Penpot hub\" src=\"https://github.com/user-attachments/assets/0abc02f0-625c-45ab-ad81-4927bec7a055\" />\n\n## Resources ##\n\nYou can ask and answer questions, have open-ended conversations, and follow along on decisions affecting the project.\n\n💾 [Documentation](https://help.penpot.app/technical-guide/)\n\n🚀 [Getting Started](https://help.penpot.app/technical-guide/getting-started/)\n\n✏️ [Tutorials](https://www.youtube.com/playlist?list=PLgcCPfOv5v54WpXhHmNO7T-YC7AE-SRsr)\n\n🏘️ [Architecture](https://help.penpot.app/technical-guide/developer/architecture/)\n\n📚 [Dev Diaries](https://penpot.app/dev-diaries.html)\n\n🧑‍🏫​ [UI Design Course](https://penpot.app/courses/)\n\n\n## License ##\n\n```\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nCopyright (c) KALEIDOS INC Sucursal en España SL\n```\nPenpot is a Kaleidos’ [open source project](https://kaleidos.net/)\n",
    "strategic_keywords": [
      "mcp",
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 16,
      "novelty": 11,
      "productize": 14,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 8,
      "total": 85
    },
    "strategic_score": 85
  },
  {
    "owner": "bytedance",
    "name": "deer-flow",
    "full_name": "bytedance/deer-flow",
    "url": "https://github.com/bytedance/deer-flow",
    "description": "An open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.",
    "language": "Python",
    "total_stars": 75223,
    "forks": 10153,
    "stars_this_period": 3258,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "agent",
        "agentic",
        "agentic-framework",
        "agentic-workflow",
        "ai",
        "ai-agents",
        "deep-research",
        "harness",
        "langchain",
        "langgraph",
        "langmanus",
        "llm",
        "multi-agent",
        "nodejs",
        "podcast",
        "python",
        "superagent",
        "typescript"
      ],
      "license": "MIT",
      "open_issues": 966,
      "created_at": "2025-05-07T02:50:19Z",
      "pushed_at": "2026-06-28T15:30:40Z",
      "homepage": "https://deerflow.tech",
      "default_branch": "main",
      "forks": 10153,
      "watchers": 320,
      "archived": false,
      "size_kb": 40140
    },
    "readme_content": "# 🦌 DeerFlow - 2.0\n\nEnglish | [中文](./README_zh.md) | [日本語](./README_ja.md) | [Français](./README_fr.md) | [Русский](./README_ru.md)\n\n[![Python](https://img.shields.io/badge/Python-3.12%2B-3776AB?logo=python&logoColor=white)](./backend/pyproject.toml)\n[![Node.js](https://img.shields.io/badge/Node.js-22%2B-339933?logo=node.js&logoColor=white)](./Makefile)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n\n<a href=\"https://trendshift.io/repositories/14699\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/14699\" alt=\"bytedance%2Fdeer-flow | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n> On February 28th, 2026, DeerFlow claimed the 🏆 #1 spot on GitHub Trending following the launch of version 2. Thanks a million to our incredible community — you made this happen! 💪🔥\n\nDeerFlow (**D**eep **E**xploration and **E**fficient **R**esearch **Flow**) is an open-source **super agent harness** that orchestrates **sub-agents**, **memory**, and **sandboxes** to do almost anything — powered by **extensible skills**.\n\nhttps://github.com/user-attachments/assets/a8bcadc4-e040-4cf2-8fda-dd768b999c18\n\n> [!NOTE]\n> **DeerFlow 2.0 is a ground-up rewrite.** It shares no code with v1. If you're looking for the original Deep Research framework, it's maintained on the [`1.x` branch](https://github.com/bytedance/deer-flow/tree/main-1.x) — contributions there are still welcome. Active development has moved to 2.0.\n\n## Official Website\n\nLearn more and see **real demos** on our [**official website**](https://deerflow.tech).\n\n## Coding Plan from ByteDance Volcengine\n\n- We strongly recommend using Doubao-Seed-2.0-Code, DeepSeek v3.2 and Kimi 2.5 to run DeerFlow\n- [Learn more](https://www.byteplus.com/en/activity/codingplan?utm_campaign=deer_flow&utm_content=deer_flow&utm_medium=devrel&utm_source=OWO&utm_term=deer_flow)\n- [中国大陆地区的开发者请点击这里](https://www.volcengine.com/activity/codingplan?utm_campaign=deer_flow&utm_content=deer_flow&utm_medium=devrel&utm_source=OWO&utm_term=deer_flow)\n\n## InfoQuest\n\nDeerFlow has newly integrated the intelligent search and crawling toolset independently developed by BytePlus--[InfoQuest (supports free online experience)](https://docs.byteplus.com/en/docs/InfoQuest/What_is_Info_Quest)\n\n<a href=\"https://docs.byteplus.com/en/docs/InfoQuest/What_is_Info_Quest\" target=\"_blank\">\n  <img\n    src=\"https://sf16-sg.tiktokcdn.com/obj/eden-sg/hubseh7bsbps/20251208-160108.png\"   alt=\"InfoQuest_banner\"\n  />\n</a>\n\n---\n\n## Table of Contents\n\n- [🦌 DeerFlow - 2.0](#-deerflow---20)\n  - [Official Website](#official-website)\n  - [Coding Plan from ByteDance Volcengine](#coding-plan-from-bytedance-volcengine)\n  - [InfoQuest](#infoquest)\n  - [Table of Contents](#table-of-contents)\n  - [One-Line Agent Setup](#one-line-agent-setup)\n  - [Quick Start](#quick-start)\n    - [Configuration](#configuration)\n    - [Running the Application](#running-the-application)\n      - [Deployment Sizing](#deployment-sizing)\n      - [Option 1: Docker (Recommended)](#option-1-docker-recommended)\n      - [Option 2: Local Development](#option-2-local-development)\n    - [Advanced](#advanced)\n      - [Sandbox Mode](#sandbox-mode)\n      - [MCP Server](#mcp-server)\n      - [IM Channels](#im-channels)\n      - [LangSmith Tracing](#langsmith-tracing)\n      - [Langfuse Tracing](#langfuse-tracing)\n      - [Using Both Providers](#using-both-providers)\n  - [From Deep Research to Super Agent Harness](#from-deep-research-to-super-agent-harness)\n  - [Core Features](#core-features)\n    - [Skills \\& Tools](#skills--tools)\n      - [Claude Code Integration](#claude-code-integration)\n    - [Sub-Agents](#sub-agents)\n    - [Sandbox \\& File System](#sandbox--file-system)\n    - [Context Engineering](#context-engineering)\n    - [Long-Term Memory](#long-term-memory)\n  - [Recommended Models](#recommended-models)\n  - [Embedded Python Client](#embedded-python-client)\n  - [Terminal Workbench (TUI)](#terminal-workbench-tui)\n  - [Documentation](#documentation)\n  - [⚠️ Security Notice](#️-security-notice)\n    - [Improper Deployment May Introduce Security Risks](#improper-deployment-may-introduce-security-risks)\n    - [Security Recommendations](#security-recommendations)\n  - [Contributing](#contributing)\n  - [License](#license)\n  - [Acknowledgments](#acknowledgments)\n    - [Key Contributors](#key-contributors)\n  - [Star History](#star-history)\n\n## One-Line Agent Setup\n\nIf you use Claude Code, Codex, Cursor, Windsurf, or another coding agent, you can hand it the setup instructions in one sentence:\n\n```text\nHelp me clone DeerFlow if needed, then bootstrap it for local development by following https://raw.githubusercontent.com/bytedance/deer-flow/main/Install.md\n```\n\nThat prompt is intended for coding agents. It tells the agent to clone the repo if needed, choose Docker when available, and stop with the exact next command plus any missing config the user still needs to provide.\n\n## Quick Start\n\n### Configuration\n\n1. **Clone the DeerFlow repository**\n\n   ```bash\n   git clone https://github.com/bytedance/deer-flow.git\n   cd deer-flow\n   ```\n\n2. **Run the setup wizard**\n\n   From the project root directory (`deer-flow/`), run:\n\n   ```bash\n   make setup\n   ```\n\n   This launches an interactive wizard that guides you through choosing an LLM provider, optional web search, and execution/safety preferences such as sandbox mode, bash access, and file-write tools. It generates a minimal `config.yaml` and writes your keys to `.env`. Takes about 2 minutes.\n\n   The wizard also lets you configure an optional web search provider, or skip it for now.\n\n   Run `make doctor` at any time to verify your setup and get actionable fix hints.\n\n   > **Advanced / manual configuration**: If you prefer to edit `config.yaml` directly, run `make config` instead to copy the full template. See `config.example.yaml` for the complete reference including CLI-backed providers (Codex CLI, Claude Code OAuth), OpenRouter, Responses API, and more.\n\n   <details>\n   <summary>Manual model configuration examples</summary>\n\n   ```yaml\n   models:\n     - name: gpt-4o\n       display_name: GPT-4o\n       use: langchain_openai:ChatOpenAI\n       model: gpt-4o\n       api_key: $OPENAI_API_KEY\n\n     - name: openrouter-gemini-2.5-flash\n       display_name: Gemini 2.5 Flash (OpenRouter)\n       use: langchain_openai:ChatOpenAI\n       model: google/gemini-2.5-flash-preview\n       api_key: $OPENROUTER_API_KEY\n       base_url: https://openrouter.ai/api/v1\n\n     - name: gpt-5-responses\n       display_name: GPT-5 (Responses API)\n       use: langchain_openai:ChatOpenAI\n       model: gpt-5\n       api_key: $OPENAI_API_KEY\n       use_responses_api: true\n       output_version: responses/v1\n\n     - name: qwen3-32b-vllm\n       display_name: Qwen3 32B (vLLM)\n       use: deerflow.models.vllm_provider:VllmChatModel\n       model: Qwen/Qwen3-32B\n       api_key: $VLLM_API_KEY\n       base_url: http://localhost:8000/v1\n       supports_thinking: true\n       when_thinking_enabled:\n         extra_body:\n           chat_template_kwargs:\n             enable_thinking: true\n   ```\n\n   OpenRouter and similar OpenAI-compatible gateways should be configured with `langchain_openai:ChatOpenAI` plus `base_url`. If you prefer a provider-specific environment variable name, point `api_key` at that variable explicitly (for example `api_key: $OPENROUTER_API_KEY`).\n\n   To route OpenAI models through `/v1/responses`, keep using `langchain_openai:ChatOpenAI` and set `use_responses_api: true` with `output_version: responses/v1`.\n\n   For vLLM 0.19.0, use `deerflow.models.vllm_provider:VllmChatModel`. For Qwen-style reasoning models, DeerFlow toggles reasoning with `extra_body.chat_template_kwargs.enable_thinking` and preserves vLLM's non-standard `reasoning` field across multi-turn tool-call conversations. Legacy `thinking` configs are normalized automatically for backward compatibility. Reasoning models may also require the server to be started with `--reasoning-parser ...`. If your local vLLM deployment accepts any non-empty API key, you can still set `VLLM_API_KEY` to a placeholder value.\n\n   CLI-backed provider examples:\n\n   ```yaml\n   models:\n     - name: gpt-5.4\n       display_name: GPT-5.4 (Codex CLI)\n       use: deerflow.models.openai_codex_provider:CodexChatModel\n       model: gpt-5.4\n       supports_thinking: true\n       supports_reasoning_effort: true\n\n     - name: claude-sonnet-4.6\n       display_name: Claude Sonnet 4.6 (Claude Code OAuth)\n       use: deerflow.models.claude_provider:ClaudeChatModel\n       model: claude-sonnet-4-6\n       max_tokens: 4096\n       supports_thinking: true\n   ```\n\n   - Codex CLI reads `~/.codex/auth.json`\n   - Claude Code accepts `CLAUDE_CODE_OAUTH_TOKEN`, `ANTHROPIC_AUTH_TOKEN`, `CLAUDE_CODE_CREDENTIALS_PATH`, or `~/.claude/.credentials.json`\n   - ACP agent entries are separate from model providers — if you configure `acp_agents.codex`, point it at a Codex ACP adapter such as `npx -y @zed-industries/codex-acp`\n   - On macOS, export Claude Code auth explicitly if needed:\n\n   ```bash\n   eval \"$(python3 scripts/export_claude_code_oauth.py --print-export)\"\n   ```\n\n   API keys can also be set manually in `.env` (recommended) or exported in your shell:\n\n   ```bash\n   OPENAI_API_KEY=your-openai-api-key\n   TAVILY_API_KEY=your-tavily-api-key\n   ```\n\n   </details>\n\n### Running the Application\n\n#### Deployment Sizing\n\nUse the table below as a practical starting point when choosing how to run DeerFlow:\n\n| Deployment target | Starting point | Recommended | Notes |\n|---------|-----------|------------|-------|\n| Local evaluation / `make dev` | 4 vCPU, 8 GB RAM, 20 GB free SSD | 8 vCPU, 16 GB RAM | Good for one developer or one light session with hosted model APIs. `2 vCPU / 4 GB` is usually not enough. |\n| Docker development / `make docker-start` | 4 vCPU, 8 GB RAM, 25 GB free SSD | 8 vCPU, 16 GB RAM | Image builds, bind mounts, and sandbox containers need more headroom than pure local dev. |\n| Long-running server / `make up` | 8 vCPU, 16 GB RAM, 40 GB free SSD | 16 vCPU, 32 GB RAM | Preferred for shared use, multi-agent runs, report generation, or heavier sandbox workloads. |\n\n- These numbers cover DeerFlow itself. If you also host a local LLM, size that service separately.\n- Linux plus Docker is the recommended deployment target for a persistent server. macOS and Windows are best treated as development or evaluation environments.\n- If CPU or memory usage stays pinned, reduce concurrent runs first, then move to the next sizing tier.\n\n#### Option 1: Docker (Recommended)\n\n**Development** (hot-reload, source mounts):\n\n```bash\nmake docker-init    # Pull sandbox image (only once or when image updates)\nmake docker-start   # Start services (auto-detects sandbox mode from config.yaml)\n```\n\n`make docker-start` starts `provisioner` only when `config.yaml` uses provisioner mode (`sandbox.use: deerflow.community.aio_sandbox:AioSandboxProvider` with `provisioner_url`).\n\nDocker builds use the upstream `uv` registry by default. If you need faster mirrors in restricted networks, export `UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple` and `NPM_REGISTRY=https://registry.npmmirror.com` before running `make docker-init` or `make docker-start`.\n\nBackend processes automatically pick up `config.yaml` changes on the next config access, so model metadata updates do not require a manual restart during development.\n\n> [!TIP]\n> On Linux, if Docker-based commands fail with `permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock`, add your user to the `docker` group and re-login before retrying. See [CONTRIBUTING.md](CONTRIBUTING.md#linux-docker-daemon-permission-denied) for the full fix.\n\n**Production** (builds images locally, mounts runtime config and data):\n\n```bash\nmake up     # Build images and start all production services\nmake down   # Stop and remove containers\n```\n\nAccess: http://localhost:2026\n\nThe unified nginx endpoint i",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "rag",
      "skill",
      "llm",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 8,
      "total": 95
    },
    "strategic_score": 95
  },
  {
    "owner": "Stirling-Tools",
    "name": "Stirling-PDF",
    "full_name": "Stirling-Tools/Stirling-PDF",
    "url": "https://github.com/Stirling-Tools/Stirling-PDF",
    "description": "#1 PDF Application on GitHub that lets you edit PDFs on any device anywhere",
    "language": "Java",
    "total_stars": 84935,
    "forks": 7379,
    "stars_this_period": 3231,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "docker",
        "hacktoberfest",
        "java",
        "pdf",
        "pdf-converter",
        "pdf-editor",
        "pdf-manipulation",
        "pdf-merger",
        "pdf-ocr",
        "pdf-tools",
        "pdf-web-apps",
        "pdfmerger",
        "self-hosted"
      ],
      "license": "NOASSERTION",
      "open_issues": 468,
      "created_at": "2023-01-27T18:22:42Z",
      "pushed_at": "2026-06-28T08:48:34Z",
      "homepage": "https://stirling.com",
      "default_branch": "main",
      "forks": 7379,
      "watchers": 246,
      "archived": false,
      "size_kb": 309646
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/Stirling-Tools/Stirling-PDF/main/docs/stirling.png\" width=\"80\" alt=\"Stirling PDF logo\">\n</p>\n\n<h1 align=\"center\">Stirling PDF - The Open-Source PDF Platform</h1>\n\nStirling PDF is a powerful, open-source PDF editing platform. Run it as a personal desktop app, in the browser, or deploy it on your own servers with a private API. Edit, sign, redact, convert, and automate PDFs without sending documents to external services.\n\n<p align=\"center\">\n  <a href=\"https://hub.docker.com/r/stirlingtools/stirling-pdf\">\n    <img src=\"https://img.shields.io/docker/pulls/frooodle/s-pdf\" alt=\"Docker Pulls\">\n  </a>\n  <a href=\"https://discord.gg/HYmhKj45pU\">\n    <img src=\"https://img.shields.io/discord/1068636748814483718?label=Discord\" alt=\"Discord\">\n  </a>\n  <a href=\"https://scorecard.dev/viewer/?uri=github.com/Stirling-Tools/Stirling-PDF\">\n    <img src=\"https://api.scorecard.dev/projects/github.com/Stirling-Tools/Stirling-PDF/badge\" alt=\"OpenSSF Scorecard\">\n  </a>\n  <a href=\"https://github.com/Stirling-Tools/stirling-pdf\">\n    <img src=\"https://img.shields.io/github/stars/stirling-tools/stirling-pdf?style=social\" alt=\"GitHub Repo stars\">\n  </a>\n</p>\n\n![Stirling PDF - Dashboard](images/home-light.png)\n\n## Key Capabilities\n\n- **Everywhere you work** - Desktop client, browser UI, and self-hosted server with a private API.\n- **50+ PDF tools** - Edit, merge, split, sign, redact, convert, OCR, compress, and more.\n- **Automation & workflows** - No-code pipelines direct in UI with APIs to process millions of PDFs.\n- **Enterprise‑grade** - SSO, auditing, and flexible on‑prem deployments.\n- **Developer platform** - REST APIs available for nearly all tools to integrate into your existing systems.\n- **Global UI** - Interface available in 40+ languages.\n\nFor a full feature list, see the docs: **https://docs.stirlingpdf.com**\n\n## Quick Start\n\n```bash\ndocker run -p 8080:8080 docker.stirlingpdf.com/stirlingtools/stirling-pdf\n```\n\nThen open: http://localhost:8080\n\nFor full installation options (including desktop and Kubernetes), see our [Documentation Guide](https://docs.stirlingpdf.com/#documentation-guide).\n\n## Resources\n\n- [**Documentation**](https://docs.stirlingpdf.com)\n- [**Homepage**](https://stirling.com)\n- [**API Docs**](https://registry.scalar.com/@stirlingpdf/apis/stirling-pdf-processing-api/)\n- [**Server Plan & Enterprise**](https://docs.stirlingpdf.com/Paid-Offerings)\n\n## Support\n\n- **Community** [Discord](https://discord.gg/HYmhKj45pU)\n- **Bug Reports**: [Github issues](https://github.com/Stirling-Tools/Stirling-PDF/issues)\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\nThis project uses [Task](https://taskfile.dev/) as a unified command runner for all build, dev, and test commands. Run `task dev` to get started running the editor, run `task` to see the most common commands, or see the [Developer Guide](DeveloperGuide.md) for full details.\n\nFor adding translations, see the [Translation Guide](devGuide/HowToAddNewLanguage.md).\n\n## License\n\nStirling PDF is open-core. See [LICENSE](LICENSE) for details.\n",
    "strategic_keywords": [
      "workflow",
      "automation"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 16,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 8,
      "total": 82
    },
    "strategic_score": 82
  },
  {
    "owner": "opendatalab",
    "name": "MinerU",
    "full_name": "opendatalab/MinerU",
    "url": "https://github.com/opendatalab/MinerU",
    "description": "Transforms complex documents like PDFs and Office docs into LLM-ready markdown/JSON for your Agentic workflows.",
    "language": "Python",
    "total_stars": 71521,
    "forks": 6009,
    "stars_this_period": 2855,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "ai4science",
        "document-analysis",
        "docx",
        "extract-data",
        "layout-analysis",
        "ocr",
        "parser",
        "pdf",
        "pdf-converter",
        "pdf-extractor-llm",
        "pdf-extractor-pretrain",
        "pdf-extractor-rag",
        "pdf-parser",
        "pptx",
        "python",
        "xlsx"
      ],
      "license": "NOASSERTION",
      "open_issues": 27,
      "created_at": "2024-02-29T08:52:34Z",
      "pushed_at": "2026-06-27T07:38:39Z",
      "homepage": "https://opendatalab.github.io/MinerU/",
      "default_branch": "master",
      "forks": 6009,
      "watchers": 261,
      "archived": false,
      "size_kb": 156331
    },
    "readme_content": "<div align=\"center\" xmlns=\"http://www.w3.org/1999/html\">\n<!-- logo -->\n<p align=\"center\">\n  <img src=\"https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/docs/images/MinerU-logo.png\" width=\"300px\" style=\"vertical-align:middle;\">\n</p>\n\n<!-- icon -->\n\n[![stars](https://img.shields.io/github/stars/opendatalab/MinerU.svg)](https://github.com/opendatalab/MinerU)\n[![forks](https://img.shields.io/github/forks/opendatalab/MinerU.svg)](https://github.com/opendatalab/MinerU)\n[![open issues](https://img.shields.io/github/issues-raw/opendatalab/MinerU)](https://github.com/opendatalab/MinerU/issues)\n[![issue resolution](https://img.shields.io/github/issues-closed-raw/opendatalab/MinerU)](https://github.com/opendatalab/MinerU/issues)\n[![PyPI version](https://img.shields.io/pypi/v/mineru)](https://pypi.org/project/mineru/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/mineru)](https://pypi.org/project/mineru/)\n[![Downloads](https://static.pepy.tech/badge/mineru)](https://pepy.tech/project/mineru)\n[![Downloads](https://static.pepy.tech/badge/mineru/month)](https://pepy.tech/project/mineru)\n[![OpenDataLab](https://img.shields.io/badge/webapp_on_mineru.net-blue?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTM0IiBoZWlnaHQ9IjEzNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMTIyLDljMCw1LTQsOS05LDlzLTktNC05LTksNC05LDktOSw5LDQsOSw5eiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Im0xMjIsOWMwLDUtNCw5LTksOXMtOS00LTktOSw0LTksOS05LDksNCw5LDl6IiBmaWxsPSIjMDEwMTAxIi8+PHBhdGggZD0ibTkxLDE4YzAsNS00LDktOSw5cy05LTQtOS05LDQtOSw5LTksOSw0LDksOXoiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJtOTEsMThjMCw1LTQsOS05LDlzLTktNC05LTksNC05LDktOSw5LDQsOSw5eiIgZmlsbD0iIzAxMDEwMSIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJtMzksNjJjMCwxNiw4LDMwLDIwLDM4LDctNiwxMi0xNiwxMi0yNlY0OWMwLTQsMy03LDYtOGw0Ni0xMmM1LTEsMTEsMywxMSw4djMxYzAsMzctMzAsNjYtNjYsNjYtMzcsMC02Ni0zMC02Ni02NlY0NmMwLTQsMy03LDYtOGwyMC02YzUtMSwxMSwzLDExLDh2MjF6bS0yOSw2YzAsMTYsNiwzMCwxNyw0MCwzLDEsNSwxLDgsMSw1LDAsMTAtMSwxNS0zQzM3LDk1LDI5LDc5LDI5LDYyVjQybC0xOSw1djIweiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJtMzksNjJjMCwxNiw4LDMwLDIwLDM4LDctNiwxMi0xNiwxMi0yNlY0OWMwLTQsMy03LDYtOGw0Ni0xMmM1LTEsMTEsMywxMSw4djMxYzAsMzctMzAsNjYtNjYsNjYtMzcsMC02Ni0zMC02Ni02NlY0NmMwLTQsMy03LDYtOGwyMC02YzUtMSwxMSwzLDExLDh2MjF6bS0yOSw2YzAsMTYsNiwzMCwxNyw0MCwzLDEsNSwxLDgsMSw1LDAsMTAtMSwxNS0zQzM3LDk1LDI5LDc5LDI5LDYyVjQybC0xOSw1djIweiIgZmlsbD0iIzAxMDEwMSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9Ijg0IiB5MT0iNDEiIHgyPSI3NSIgeTI9IjEyMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmZmYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyZTJlMmUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9Ijg0IiB5MT0iNDEiIHgyPSI3NSIgeTI9IjEyMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmZmYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyZTJlMmUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9Ijg0IiB5MT0iNDEiIHgyPSI3NSIgeTI9IjEyMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmZmYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyZTJlMmUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=&labelColor=white)](https://mineru.net/OpenSourceTools/Extractor?source=github)\n[![HuggingFace](https://img.shields.io/badge/Demo_on_HuggingFace-yellow.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABYCAMAAACkl9t/AAAAk1BMVEVHcEz/nQv/nQv/nQr/nQv/nQr/nQv/nQv/nQr/wRf/txT/pg7/yRr/rBD/zRz/ngv/oAz/zhz/nwv/txT/ngv/0B3+zBz/nQv/0h7/wxn/vRb/thXkuiT/rxH/pxD/ogzcqyf/nQvTlSz/czCxky7/SjifdjT/Mj3+Mj3wMj15aTnDNz+DSD9RTUBsP0FRO0Q6O0WyIxEIAAAAGHRSTlMADB8zSWF3krDDw8TJ1NbX5efv8ff9/fxKDJ9uAAAGKklEQVR42u2Z63qjOAyGC4RwCOfB2JAGqrSb2WnTw/1f3UaWcSGYNKTdf/P+mOkTrE+yJBulvfvLT2A5ruenaVHyIks33npl/6C4s/ZLAM45SOi/1FtZPyFur1OYofBX3w7d54Bxm+E8db+nDr12ttmESZ4zludJEG5S7TO72YPlKZFyE+YCYUJTBZsMiNS5Sd7NlDmKM2Eg2JQg8awbglfqgbhArjxkS7dgp2RH6hc9AMLdZYUtZN5DJr4molC8BfKrEkPKEnEVjLbgW1fLy77ZVOJagoIcLIl+IxaQZGjiX597HopF5CkaXVMDO9Pyix3AFV3kw4lQLCbHuMovz8FallbcQIJ5Ta0vks9RnolbCK84BtjKRS5uA43hYoZcOBGIG2Epbv6CvFVQ8m8loh66WNySsnN7htL58LNp+NXT8/PhXiBXPMjLSxtwp8W9f/1AngRierBkA+kk/IpUSOeKByzn8y3kAAAfh//0oXgV4roHm/kz4E2z//zRc3/lgwBzbM2mJxQEa5pqgX7d1L0htrhx7LKxOZlKbwcAWyEOWqYSI8YPtgDQVjpB5nvaHaSnBaQSD6hweDi8PosxD6/PT09YY3xQA7LTCTKfYX+QHpA0GCcqmEHvr/cyfKQTEuwgbs2kPxJEB0iNjfJcCTPyocx+A0griHSmADiC91oNGVwJ69RudYe65vJmoqfpul0lrqXadW0jFKH5BKwAeCq+Den7s+3zfRJzA61/Uj/9H/VzLKTx9jFPPdXeeP+L7WEvDLAKAIoF8bPTKT0+TM7W8ePj3Rz/Yn3kOAp2f1Kf0Weony7pn/cPydvhQYV+eFOfmOu7VB/ViPe34/EN3RFHY/yRuT8ddCtMPH/McBAT5s+vRde/gf2c/sPsjLK+m5IBQF5tO+h2tTlBGnP6693JdsvofjOPnnEHkh2TnV/X1fBl9S5zrwuwF8NFrAVJVwCAPTe8gaJlomqlp0pv4Pjn98tJ/t/fL++6unpR1YGC2n/KCoa0tTLoKiEeUPDl94nj+5/Tv3/eT5vBQ60X1S0oZr+IWRR8Ldhu7AlLjPISlJcO9vrFotky9SpzDequlwEir5beYAc0R7D9KS1DXva0jhYRDXoExPdc6yw5GShkZXe9QdO/uOvHofxjrV/TNS6iMJS+4TcSTgk9n5agJdBQbB//IfF/HpvPt3Tbi7b6I6K0R72p6ajryEJrENW2bbeVUGjfgoals4L443c7BEE4mJO2SpbRngxQrAKRudRzGQ8jVOL2qDVjjI8K1gc3TIJ5KiFZ1q+gdsARPB4NQS4AjwVSt72DSoXNyOWUrU5mQ9nRYyjp89Xo7oRI6Bga9QNT1mQ/ptaJq5T/7WcgAZywR/XlPGAUDdet3LE+qS0TI+g+aJU8MIqjo0Kx8Ly+maxLjJmjQ18rA0YCkxLQbUZP1WqdmyQGJLUm7VnQFqodmXSqmRrdVpqdzk5LvmvgtEcW8PMGdaS23EOWyDVbACZzUJPaqMbjDxpA3Qrgl0AikimGDbqmyT8P8NOYiqrldF8rX+YN7TopX4UoHuSCYY7cgX4gHwclQKl1zhx0THf+tCAUValzjI7Wg9EhptrkIcfIJjA94evOn8B2eHaVzvBrnl2ig0So6hvPaz0IGcOvTHvUIlE2+prqAxLSQxZlU2stql1NqCCLdIiIN/i1DBEHUoElM9dBravbiAnKqgpi4IBkw+utSPIoBijDXJipSVV7MpOEJUAc5Qmm3BnUN+w3hteEieYKfRZSIUcXKMVf0u5wD4EwsUNVvZOtUT7A2GkffHjByWpHqvRBYrTV72a6j8zZ6W0DTE86Hn04bmyWX3Ri9WH7ZU6Q7h+ZHo0nHUAcsQvVhXRDZHChwiyi/hnPuOsSEF6Exk3o6Y9DT1eZ+6cASXk2Y9k+6EOQMDGm6WBK10wOQJCBwren86cPPWUcRAnTVjGcU1LBgs9FURiX/e6479yZcLwCBmTxiawEwrOcleuu12t3tbLv/N4RLYIBhYexm7Fcn4OJcn0+zc+s8/VfPeddZHAGN6TT8eGczHdR/Gts1/MzDkThr23zqrVfAMFT33Nx1RJsx1k5zuWILLnG/vsH+Fv5D4NTVcp1Gzo8AAAAAElFTkSuQmCC&labelColor=white)](https://huggingface.co/spaces/opendatalab/MinerU)\n[![ModelScope](https://img.shields.io/badge/Demo_on_ModelScope-purple?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIzIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCiA8Zz4KICA8dGl0bGU+TGF5ZXIgMTwvdGl0bGU+CiAgPHBhdGggaWQ9InN2Z18xNCIgZmlsbD0iIzYyNGFmZiIgZD0ibTAsODkuODRsMjUuNjUsMGwwLDI1LjY0OTk5bC0yNS42NSwwbDAsLTI1LjY0OTk5eiIvPgogIDxwYXRoIGlkPSJzdmdfMTUiIGZpbGw9IiM2MjRhZmYiIGQ9Im05OS4xNCwxMTUuNDlsMjUuNjUsMGwwLDI1LjY1bC0yNS42NSwwbDAsLTI1LjY1eiIvPgogIDxwYXRoIGlkPSJzdmdfMTYiIGZpbGw9IiM2MjRhZmYiIGQ9Im0xNzYuMDksMTQxLjE0bC0yNS42NDk5OSwwbDAsMjIuMTlsNDcuODQsMGwwLC00Ny44NGwtMjIuMTksMGwwLDI1LjY1eiIvPgogIDxwYXRoIGlkPSJzdmdfMTciIGZpbGw9IiMzNmNmZDEiIGQ9Im0xMjQuNzksODkuODRsMjUuNjUsMGwwLDI1LjY0OTk5bC0yNS42NSwwbDAsLTI1LjY0OTk5eiIvPgogIDxwYXRoIGlkPSJzdmdfMTgiIGZpbGw9IiMzNmNmZDEiIGQ9Im0wLDY0LjE5bDI1LjY1LDBsMCwyNS42NWwtMjUuNjUsMGwwLC0yNS42NXoiLz4KICA8cGF0aCBpZD0ic3ZnXzE5IiBmaWxsPSIjNjI0YWZmIiBkPSJtMTk4LjI4LDg5Ljg0bDI1LjY0OTk5LDBsMCwyNS42NDk5OWwtMjUuNjQ5OTksMGwwLC0yNS42NDk5OXoiLz4KICA8cGF0aCBpZD0ic3ZnXzIwIiBmaWxsPSIjMzZjZmQxIiBkPSJtMTk4LjI4LDY0LjE5bDI1LjY0OTk5LDBsMCwyNS42NWwtMjUuNjQ5OTksMGwwLC0yNS42NXoiLz4KICA8cGF0aCBpZD0ic3ZnXzIxIiBmaWxsPSIjNjI0YWZmIiBkPSJtMTUwLjQ0LDQybDAsMjIuMTlsMjUuNjQ5OTksMGwwLDI1LjY1bDIyLjE5LDBsMCwtNDcuODRsLTQ3Ljg0LDB6Ii8+CiAgPHBhdGggaWQ9InN2Z18yMiIgZmlsbD0iIzM2Y2ZkMSIgZD0ibTczLjQ5LDg5Ljg0bDI1LjY1LDBsMCwyNS42NDk5OWwtMjUuNjUsMGwwLC0yNS42NDk5OXoiLz4KICA8cGF0aCBpZD0ic3ZnXzIzIiBmaWxsPSIjNjI0YWZmIiBkPSJtNDcuODQsNjQuMTlsMjUuNjUsMGwwLC0yMi4xOWwtNDcuODQsMGwwLDQ3Ljg0bDIyLjE5LDBsMCwtMjUuNjV6Ii8+CiAgPHBhdGggaWQ9InN2Z18yNCIgZmlsbD0iIzYyNGFmZiIgZD0ibTQ3Ljg0LDExNS40OWwtMjIuMTksMGwwLDQ3Ljg0bDQ3Ljg0LDBsMCwtMjIuMTlsLTI1LjY1LDBsMCwtMjUuNjV6Ii8+CiA8L2c+Cjwvc3ZnPg==&labelColor=white)](https://www.modelscope.cn/studios/OpenDataLab/MinerU)\n[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/gist/myhloli/a3cb16570ab3cfeadf9d8f0ac91b4fca/mineru_demo.ipynb)\n[![arXiv](https://img.shields.io/badge/MinerU-Technical%20Report-b31b1b.svg?logo=arXiv)](https://arxiv.org/abs/2409.18839)\n[![arXiv](https://img.shields.io/badge/MinerU2.5-Technical%20Report-b31b1b.svg?logo=arXiv)](https://arxiv.org/abs/2509.22186)\n[![arXiv](https://img.shields.io/badge/MinerU2.5%20Pro-Technical%20Report-b31b1b.svg?logo=arXiv)](https://arxiv.org/abs/2604.04771)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/opendatalab/MinerU)\n\n\n<a href=\"https://trendshift.io/repositories/11174\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/11174\" alt=\"opendatalab%2FMinerU | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n\n<!-- language -->\n\n[English](README.md) | [简体中文](README_zh-CN.md)\n\n<!-- hot link -->\n\n<p align=\"center\">\n🚀<a href=\"https://mineru.net/?source=github\">Access MinerU Now→✅ Zero-Install Web Version ✅ Full-Featured Desktop Client ✅ Instant API Access; Skip deployment headaches – get all product formats in one click. Developers, dive in!</a>\n</p>\n\n<!-- join us -->\n\n<p align=\"center\">\n    👋 join us on <a href=\"https://discord.gg/Tdedn9GTXq\" target=\"_blank\">Discord</a> and <a href=\"https://mineru.net/community-portal/?aliasId=3c430f94\" target=\"_blank\">WeChat</a>\n</p>\n\n</div>\n\n\n<details>\n<summary>MinerU — High-accuracy document parsing engine for LLM · RAG · Agent workflows</summary>\nConverts PDF · DOCX · PPTX · XLSX · Images · Web pages into structured Markdown / JSON · VLM+OCR dual engine · 109 languages <br>\nMCP Server · LangChain / Dify / FastGPT native integration · 10+ domestic AI chip support\n\n**🔍 Core Parsing Capabilities**\n\n- Native support for `DOCX`, `PPTX`, and `XLSX` parsing\n- Formulas → LaTeX · Tables → HTML, accurate layout reconstruction\n- Supports scanned docs, handwriting, multi-column layouts, cross-page table merging\n- Output follows human reading order with automatic header/footer removal\n- VLM + OCR dual engine, 109-language OCR recognition\n\n**🔌 Integration**\n\n| Use Case | Solution |\n|----------|----------|\n| AI Coding Tools | MCP Server — Cursor · Claude Desktop · Windsurf |\n| RAG Frameworks | LangChain · LlamaIndex · RAGFlow · RAG-Anything · Flowise · Dify · FastGPT |\n| Development | Python / Go / TypeScript SDK · CLI · REST API · Docker |\n| No-Code | mineru.net online · Gradio WebUI · Desktop client |\n\n**🖥️ Deployment (Private · Fully Offline)**\n\n| Inference Backend | Best For |\n|------------------|---------|\n| pipeline         | Fast & stable, no hallucination, runs on CPU or GPU |\n| vlm-engine       | High accuracy, supports vLLM / LMDeploy / mlx ecosystem |\n| hybrid-engine    | High accuracy, native text extraction, low hallucination |\n\nDomestic AI chips: Ascend · Cambricon · Enflame · MetaX · Moore Threads · Kunlunxin · Iluvatar · Hygon · Biren · T-Head\n</details>\n\n# Changelog\n\n- 2026/06/18 3.4 Released\n\n  This release focuses on **OCR capability upgrades for the pipeline backend**, **OCR processing pipeline optimization**, and **model download experience improvements**. The main updates include:\n\n  - OCR model upgrade and processing acceleration\n    - The OCR model for the `pipeline` backend has been upgraded to `PP-OCRv6`, improving OCR accuracy by about `11%` on OmniDocBench v1.6.\n    - Removed Japanese, Traditional Chinese, English, and Latin options from OCR language selection. These scenarios are now routed to the `ch` OCR model, simplifying model configuration and language selection.\n    - Optimized the OCR inference and processing pipeline, increasing OCR processing speed by about `100%` and significantly improving parsing efficiency for batch documents and OCR-intensive documents.\n\n  - Model download logic optimization\n    - Added automatic model source selection, allowing first-time installations to choose a better model source based on the current network environment.\n    - Before downloading models, MinerU now prioritizes checking locally downloaded model cache files. Cache hits can be reused directly, reducing repeated downloads and unnecessary remote requests.\n    - For more details about model source configuration, automatic source selection, and local model usage, see the [Model Source Document",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [\"setuptools>=77.0.3\", \"wheel\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"mineru\"\ndynamic = [\"version\"]\nlicense = \"LicenseRef-MinerU-Open-Source-License\"\nlicense-files = [\"LICENSE.md\"]\ndescription = \"A practical document parsing tool for converting PDF, images, DOCX, PPTX, and XLSX into Markdown and JSON\"\nreadme = \"README.md\"\nrequires-python = \">=3.10,<3.14\"\nkeywords = [\n    \"mineru\",\n    \"magic-pdf\",\n    \"document-parsing\",\n    \"document-understanding\",\n    \"pdf\",\n    \"markdown\",\n    \"ocr\",\n    \"vlm\",\n    \"docx\",\n    \"pptx\",\n    \"xlsx\",\n    \"multimodal\",\n]\nclassifiers = [\n    \"Programming Language :: Python :: 3.10\",\n    \"Programming Language :: Python :: 3.11\",\n    \"Programming Language :: Python :: 3.12\",\n    \"Programming Language :: Python :: 3.13\",\n]\ndependencies = [\n    \"click>=8.1.7\",\n    \"loguru>=0.7.2\",\n    \"numpy>=1.21.6\",\n    \"tqdm>=4.67.1\",\n    \"requests\",\n    \"httpx\",\n    \"pillow>=11.0.0\",\n    \"pypdfium2>=4.30.0\",\n    \"pypdf>=5.6.0\",\n    \"reportlab\",\n    \"pdftext>=0.6.3\",\n    \"modelscope>=1.26.0\",\n    \"huggingface-hub>=0.32.4\",\n    \"json-repair>=0.46.2\",\n    \"opencv-python>=4.11.0.86\",\n    \"fast-langdetect>=0.2.3,<0.3.0\",\n    \"openai>=1.70.0,<3\",\n    \"beautifulsoup4>=4.13.5,<5\",\n    \"magika>=0.6.2,<1.1.0\",\n    \"mineru-vl-utils>=1.0.5,<2\",\n    \"python-docx>=1.2.0,<2\",\n    'pypptx-with-oxml>=1.0.3,<2',\n    \"mammoth>=1.11.0,<2\",\n    \"pylatexenc>=2.10,<3\",\n    \"lxml>=4.0.0,<7.0.0\",\n    \"openpyxl>=3.1.5,<4\",\n    \"fastapi\",\n    \"python-multipart\",\n    \"uvicorn\",\n]\n\n[project.optional-dependencies]\ntest = [\n    \"mineru[core]\",\n    \"pytest\",\n    \"pytest-cov\",\n    \"coverage\",\n    \"fuzzywuzzy\",\n    \"tomli; python_version < '3.11'\",\n]\nvlm = [\n    \"torch>=2.6.0,<3\",\n    \"transformers>=4.57.3,<5.0.0\",\n    \"accelerate>=1.5.1\",\n]\nvllm = [\n    \"vllm>=0.10.1.1,<0.22.0\",\n]\nlmdeploy = [\n    \"lmdeploy>=0.10.2,<0.12\",\n    \"qwen-vl-utils>=0.0.14,<1\",\n]\nmlx = [\n    \"mlx-vlm>=0.3.3,<0.4\",\n    \"mlx<=0.31.1\",\n]\ns3 = [\n    \"boto3>=1.28.43\",\n]\npipeline = [\n    \"PyYAML>=6.0.1,<7\",\n    \"ftfy>=6.3.1,<7\",\n    \"shapely>=2.0.7,<3\",\n    \"pyclipper>=1.3.0,<2\",\n    \"torch>=2.6.0,<3\",\n    \"torchvision\",\n    \"transformers>=4.57.3,<5.0.0\",\n    \"safetensors>=0.4.0,<1\",\n    \"onnxruntime>1.17.0\",\n]\ngradio = [\n    \"gradio>=5.49.1,!=6.0.0,!=6.0.1,!=6.0.2,!=6.1.0,!=6.2.0,!=6.3.0,!=6.4.0,!=6.5.0,!=6.5.1,!=6.6.0,!=6.7.0,<6.9.0\",\n    \"gradio-pdf>=0.0.22\",\n]\ncore = [\n    \"mineru[vlm]\",\n    \"mineru[pipeline]\",\n    \"mineru[gradio]\",\n]\nall = [\n    \"mineru[core]\",\n    \"mineru[s3]\",\n    \"mineru[mlx] ; sys_platform == 'darwin'\",\n    \"mineru[vllm] ; sys_platform == 'linux'\",\n    \"mineru[lmdeploy] ; sys_platform == 'win32'\",\n]\n\n[project.urls]\nhomepage = \"https://mineru.net/\"\ndocumentation = \"https://opendatalab.github.io/MinerU/\"\nrepository = \"https://github.com/opendatalab/MinerU\"\nissues = \"https://github.com/opendatalab/MinerU/issues\"\nLicense = \"https://github.com/opendatalab/MinerU/blob/master/LICENSE.md\"\n\n[project.scripts]\nmineru = \"mineru.cli.client:main\"\nmineru-vllm-server = \"mineru.cli.vlm_server:vllm_server\"\nmineru-lmdeploy-server = \"mineru.cli.vlm_server:lmdeploy_server\"\nmineru-openai-server = \"mineru.cli.vlm_server:openai_server\"\nmineru-models-download = \"mineru.cli.models_download:download_models\"\nmineru-api = \"mineru.cli.fast_api:main\"\nmineru-router = \"mineru.cli.router:main\"\nmineru-gradio = \"mineru.cli.gradio_app:main\"\n\n[tool.setuptools.dynamic]\nversion = { attr = \"mineru.version.__version__\" }\n\n[tool.setuptools.packages.find]\ninclude = [\"mineru*\"]\nnamespaces = false\n\n[tool.setuptools.package-data]\n\"mineru\" = [\"resources/**\"]\n\"mineru.model.utils.pytorchocr.utils\" = [\"resources/**\"]\n\n[tool.setuptools]\ninclude-package-data = true\nzip-safe = false\n\n[tool.pytest.ini_options]\naddopts = \"-s --cov=mineru --cov-report html\"\n\n[tool.coverage.run]\ncommand_line = \"-m pytest tests/unittest/test_e2e.py\"\nsource = [\"mineru/\"]\nomit = [\n    \"*/gradio_app.py\",\n    \"*/models_download.py\",\n    \"*/fast_api.py\",\n    \"*/cli/client.py\",\n    \"*/vlm_vllm_server.py\",\n    \"*/cli_parser.py\",\n]\n\n[tool.coverage.html]\ndirectory = \"htmlcov\"\n\n[tool.coverage.report]\nexclude_also = [\n    'def __repr__',\n    'if self.debug:',\n    'if settings.DEBUG',\n    'raise AssertionError',\n    'raise NotImplementedError',\n    'if 0:',\n    'if __name__ == .__main__.:',\n    'if TYPE_CHECKING:',\n    'class .*\\bProtocol\\):',\n    '@(abc\\.)?abstractmethod',\n]\n\n[tool.ruff]\nline-length = 128\n\n[tool.ruff.lint]\nselect = [\"C\", \"E\", \"F\", \"W\", \"ANN\"]\nignore = [\"C901\", \"ANN204\", \"ANN401\"]\n",
    "strategic_keywords": [
      "agent",
      "rag",
      "llm",
      "workflow"
    ],
    "relationship_label": "开发者工具",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 91
    },
    "strategic_score": 91
  },
  {
    "owner": "iptv-org",
    "name": "iptv",
    "full_name": "iptv-org/iptv",
    "url": "https://github.com/iptv-org/iptv",
    "description": "Collection of publicly available IPTV channels from all over the world",
    "language": "TypeScript",
    "total_stars": 129055,
    "forks": 7127,
    "stars_this_period": 2817,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "iptv",
        "m3u",
        "playlist",
        "streams",
        "tv"
      ],
      "license": "Unlicense",
      "open_issues": 112,
      "created_at": "2018-11-14T22:00:57Z",
      "pushed_at": "2026-06-28T21:29:26Z",
      "homepage": "https://iptv-org.github.io",
      "default_branch": "master",
      "forks": 7127,
      "watchers": 2228,
      "archived": false,
      "size_kb": 1273058
    },
    "readme_content": "# IPTV [![update](https://github.com/iptv-org/iptv/actions/workflows/update.yml/badge.svg)](https://github.com/iptv-org/iptv/actions/workflows/update.yml)\r\n\r\nCollection of publicly available IPTV (Internet Protocol television) channels from all over the world.\r\n\r\n## Table of contents\r\n\r\n- 🚀 [How to use?](#how-to-use)\r\n- 📺 [Playlists](#playlists)\r\n- 🗓 [EPG](#epg)\r\n- 🗄 [Database](#database)\r\n- 👨‍💻 [API](#api)\r\n- 📚 [Resources](#resources)\r\n- 💬 [Discussions](#discussions)\r\n- ❓ [FAQ](#faq)\r\n- 🛠 [Contribution](#contribution)\r\n- ⚖ [Legal](#legal)\r\n- © [License](#license)\r\n\r\n## How to use?\r\n\r\nSimply paste the link to one of the playlists into [any video player](https://github.com/iptv-org/awesome-iptv#apps) that supports live streaming and press _Open_.\r\n\r\n![VLC Network Panel](https://github.com/iptv-org/iptv/raw/master/.readme/preview.png)\r\n\r\n## Playlists\r\n\r\nThe main playlist containing all channels available in the repository can be found at:\r\n\r\n```\r\nhttps://iptv-org.github.io/iptv/index.m3u\r\n```\r\n\r\nLinks to other playlists can be found in the [PLAYLISTS.md](PLAYLISTS.md) file.\r\n\r\n## EPG\r\n\r\n[Electronic Program Guide](https://en.wikipedia.org/wiki/Electronic_program_guide) for most of the channels can be downloaded using utilities published in the [iptv-org/epg](https://github.com/iptv-org/epg) repository.\r\n\r\n## Database\r\n\r\nAll channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.\r\n\r\n## API\r\n\r\nThe API documentation can be found in the [iptv-org/api](https://github.com/iptv-org/api) repository.\r\n\r\n## Resources\r\n\r\nLinks to other useful IPTV-related resources can be found in the [iptv-org/awesome-iptv](https://github.com/iptv-org/awesome-iptv) repository.\r\n\r\n## Discussions\r\n\r\nIf you have a question or idea, welcome to the [Discussions](https://github.com/orgs/iptv-org/discussions).\r\n\r\n## FAQ\r\n\r\nThe answers to the most popular questions can be found in the [FAQ.md](FAQ.md) file.\r\n\r\n## Contribution\r\n\r\nPlease make sure to read the [Contributing Guide](CONTRIBUTING.md) before sending an issue or making a pull request.\r\n\r\nAnd thank you to everyone who has already contributed!\r\n\r\n### Backers\r\n\r\n<a href=\"https://opencollective.com/iptv-org\"><img src=\"https://opencollective.com/iptv-org/backers.svg?width=890\" /></a>\r\n\r\n### Contributors\r\n\r\n<a href=\"https://github.com/iptv-org/iptv/graphs/contributors\"><img src=\"https://opencollective.com/iptv-org/contributors.svg?width=890\" /></a>\r\n\r\n## Legal\r\n\r\nNo video files are stored in this repository. The repository simply contains user-submitted links to publicly available video stream URLs, which to the best of our knowledge have been intentionally made publicly by the copyright holders. If any links in these playlists infringe on your rights as a copyright holder, they may be removed by opening an [issue](https://github.com/iptv-org/iptv/issues/new?template=6_copyright-claim.yml). However, note that we have **no control** over the destination of the link, and just removing the link from the playlist will not remove its contents from the web. Note that linking does not directly infringe copyright because no copy is made on the site providing the link, and thus this is **not** a valid reason to send a DMCA notice to GitHub. To remove this content from the web, you should contact the web host that's actually hosting the content (**not** GitHub, nor the maintainers of this repository).\r\n\r\n## License\r\n\r\n[![CC0](http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](LICENSE)\r\n\r\n",
    "manifest_file": "package.json",
    "manifest_content": "{\r\n  \"name\": \"iptv\",\r\n  \"scripts\": {\r\n    \"act:check\": \"gh act pull_request -W .github/workflows/check.yml\",\r\n    \"act:format\": \"gh act workflow_dispatch -W .github/workflows/format.yml\",\r\n    \"act:update\": \"gh act workflow_dispatch -W .github/workflows/update.yml\",\r\n    \"api:load\": \"tsx scripts/commands/api/load.ts\",\r\n    \"playlist:format\": \"tsx scripts/commands/playlist/format.ts\",\r\n    \"playlist:update\": \"tsx scripts/commands/playlist/update.ts\",\r\n    \"playlist:generate\": \"tsx scripts/commands/playlist/generate.ts\",\r\n    \"playlist:validate\": \"tsx scripts/commands/playlist/validate.ts\",\r\n    \"playlist:lint\": \"npx m3u-linter -c m3u-linter.json\",\r\n    \"playlist:test\": \"tsx scripts/commands/playlist/test.ts\",\r\n    \"playlist:edit\": \"tsx scripts/commands/playlist/edit.ts\",\r\n    \"playlist:export\": \"tsx scripts/commands/playlist/export.ts\",\r\n    \"readme:update\": \"tsx scripts/commands/readme/update.ts\",\r\n    \"report:create\": \"tsx scripts/commands/report/create.ts\",\r\n    \"lint\": \"npx eslint \\\"scripts/**/*.{ts,js}\\\" \\\"tests/**/*.{ts,js}\\\"\",\r\n    \"test\": \"jest --runInBand\",\r\n    \"postinstall\": \"npm run api:load\"\r\n  },\r\n  \"jest\": {\r\n    \"transform\": {\r\n      \"^.+\\\\.ts$\": \"@swc/jest\"\r\n    },\r\n    \"testRegex\": \"tests/(.*?/)?.*test.ts$\",\r\n    \"setupFilesAfterEnv\": [\r\n      \"jest-expect-message\"\r\n    ]\r\n  },\r\n  \"author\": \"Arhey\",\r\n  \"private\": true,\r\n  \"license\": \"MIT\",\r\n  \"dependencies\": {\r\n    \"@alex_neo/jest-expect-message\": \"^1.0.5\",\r\n    \"@eslint/eslintrc\": \"^3.3.1\",\r\n    \"@eslint/js\": \"^9.32.0\",\r\n    \"@freearhey/core\": \"^0.14.3\",\r\n    \"@freearhey/storage-js\": \"^0.1.0\",\r\n    \"@inquirer/prompts\": \"^7.8.0\",\r\n    \"@iptv-org/sdk\": \"^1.5.0\",\r\n    \"@octokit/core\": \"^7.0.3\",\r\n    \"@octokit/plugin-paginate-graphql\": \"^6.0.0\",\r\n    \"@octokit/plugin-paginate-rest\": \"^13.1.1\",\r\n    \"@octokit/plugin-rest-endpoint-methods\": \"^16.0.0\",\r\n    \"@octokit/types\": \"^14.1.0\",\r\n    \"@stylistic/eslint-plugin\": \"^5.2.2\",\r\n    \"@swc/jest\": \"^0.2.39\",\r\n    \"@types/async\": \"^3.2.25\",\r\n    \"@types/cli-progress\": \"^3.11.6\",\r\n    \"@types/fs-extra\": \"^11.0.4\",\r\n    \"@types/jest\": \"^30.0.0\",\r\n    \"@types/lodash.uniqueid\": \"^4.0.9\",\r\n    \"@types/node-cleanup\": \"^2.1.5\",\r\n    \"@typescript-eslint/eslint-plugin\": \"^8.38.0\",\r\n    \"@typescript-eslint/parser\": \"^8.38.0\",\r\n    \"async\": \"^3.2.6\",\r\n    \"axios\": \"^1.15.2\",\r\n    \"chalk\": \"^5.4.1\",\r\n    \"cli-progress\": \"^3.12.0\",\r\n    \"commander\": \"^14.0.0\",\r\n    \"console-table-printer\": \"^2.14.6\",\r\n    \"cross-env\": \"^10.0.0\",\r\n    \"es-toolkit\": \"^1.45.1\",\r\n    \"eslint\": \"^9.32.0\",\r\n    \"glob\": \"^11.0.3\",\r\n    \"globals\": \"^16.3.0\",\r\n    \"hls-parser\": \"^0.16.0\",\r\n    \"iptv-playlist-parser\": \"^0.15.1\",\r\n    \"jest\": \"^30.0.5\",\r\n    \"jest-expect-message\": \"^1.1.3\",\r\n    \"lodash.uniqueid\": \"^4.0.1\",\r\n    \"m3u-linter\": \"^0.4.3\",\r\n    \"mediainfo.js\": \"^0.3.6\",\r\n    \"mpd-parser\": \"^1.3.1\",\r\n    \"node-cleanup\": \"^2.1.2\",\r\n    \"normalize-url\": \"^8.1.0\",\r\n    \"socks-proxy-agent\": \"^8.0.5\",\r\n    \"tsx\": \"^4.20.3\"\r\n  },\r\n  \"overrides\": {\r\n    \"esbuild\": \"0.23.1\",\r\n    \"@xmldom/xmldom\": \">=0.8.13 <1.0.0\"\r\n  }\r\n}\r\n",
    "strategic_keywords": [
      "workflow",
      "protocol"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 14,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "owner": "asgeirtj",
    "name": "system_prompts_leaks",
    "full_name": "asgeirtj/system_prompts_leaks",
    "url": "https://github.com/asgeirtj/system_prompts_leaks",
    "description": "Extracted system prompts from Anthropic - Claude Fable 5, Opus 4.8, Claude Code, Claude Design. OpenAI - ChatGPT 5.5 Thinking, GPT 5.5 Instant, Codex. Google - Gemini 3.5 Flash, 3.1 Pro, Antigravity. xAI - Grok, Cursor, Copilot, VS Code, Perplexity, and more. Updated regularly.",
    "language": "JavaScript",
    "total_stars": 46857,
    "forks": 7668,
    "stars_this_period": 2775,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "ai-agents",
        "anthropic",
        "awesome",
        "chatbot",
        "chatgpt",
        "claude",
        "claude-code",
        "codex",
        "deep-learning",
        "education",
        "gemini",
        "generative-ai",
        "google",
        "llm",
        "machine-learning",
        "nlp",
        "open-source",
        "openai",
        "prompt-engineering"
      ],
      "license": "CC0-1.0",
      "open_issues": 24,
      "created_at": "2025-05-03T02:43:56Z",
      "pushed_at": "2026-06-28T00:24:32Z",
      "homepage": "https://asgeirtj.github.io/system_prompts_leaks/",
      "default_branch": "main",
      "forks": 7668,
      "watchers": 550,
      "archived": false,
      "size_kb": 6849
    },
    "readme_content": "> **As seen in The Washington Post:** [See the hidden rules behind AI. Then use them to rewrite this article.](https://wapo.st/49t4gSb) (May 11, 2026)\n# System Prompts Leaks\nThe purpose of this repo is to document the System Prompt instructions for all the AI chatbots out there - Claude, ChatGPT, Gemini etc.\n\n<img alt=\"ChatGPT leaking its system prompt after being asked to repeat all of the above\" src=\"https://github.com/user-attachments/assets/0037a6c5-2ae4-4d34-8be0-0d679773172b\" />\n\n[![GitHub Views per Week](https://raw.githubusercontent.com/asgeirtj/system_prompts_leaks/traffic/traffic-system_prompts_leaks/views_per_week.svg)](https://github.com/asgeirtj/system_prompts_leaks)\n![Last Commit](https://img.shields.io/github/last-commit/asgeirtj/system_prompts_leaks?style=flat)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)](http://makeapullrequest.com)\n\n> 🆕 **[Diff: Claude Opus 4.8 → Claude Fable 5](https://www.diffchecker.com/QJn9jFNk/)** — see exactly what changed in the claude.ai system prompt for Anthropic's newest model\n\n\n\n\n\n## Recently Updated\n\n| What | Date | Link |\n|------|------|------|\n| **Claude Design (Opus 4.8 — full prompt + 48 tools + 16 skills + 9 starter sources)** | June 26, 2026 | [System prompt](Anthropic/claude-design.md) |\n| **GitHub Copilot for macOS (app)** | June 18, 2026 | [System prompt](Microsoft/copilot-macos-app.md) |\n| **GPT-5.5 Codex (full prompt)** | June 18, 2026 | [System prompt](OpenAI/Codex/gpt-5.5.md) |\n| **Claude Fable 5** | June 9, 2026 | [System prompt](Anthropic/claude-fable-5.md) · [Diff vs Opus 4.8](https://www.diffchecker.com/QJn9jFNk/) |\n| **Claude Opus 4.8** | June 9, 2026 | [System prompt](Anthropic/claude-opus-4.8.md) · [Official](Anthropic/Official/2026-05-28-claude-opus-4.8.md) |\n| **Claude Code Glob & Grep tools** | June 9, 2026 | [Glob](Anthropic/Claude%20Code/glob-tool.md) · [Grep](Anthropic/Claude%20Code/grep-tool.md) |\n| **Claude Code (Opus 4.8)** | May 28, 2026 | [System prompt](Anthropic/Claude%20Code/claude-code-opus-4.8.md) |\n| **Claude Code & Cowork** | May 28, 2026 | [Claude Code](Anthropic/Claude%20Code/claude-code-opus-4.6.md) · [Cowork](Anthropic/claude-cowork.md) · [Cowork Dispatch](Anthropic/claude-cowork-dispatch.md) |\n| **GPT-5.5** | May 24, 2026 | [Thinking](OpenAI/gpt-5.5-thinking.md) · [Instant](OpenAI/gpt-5.5-instant.md) · [API](OpenAI/gpt-5.5-api.md) · [Pro API](OpenAI/gpt-5.5-pro-api.md) |\n| **Perplexity Computer** | May 21, 2026 | [System prompt](Perplexity/perplexity-computer.md) |\n| **VS Code Copilot Agent** | May 21, 2026 | [System prompt](Microsoft/vscode-copilot-agent.md) |\n| **Docker Gordon AI** | May 21, 2026 | [System prompt](Misc/docker-gordon-ai.md) |\n| **Gemini 3.5 Flash** | May 20, 2026 | [System prompt](Google/gemini-3.5-flash.md) · [AI Studio](Google/gemini-3.5-flash-ai-studio.md) · [Tools](Google/gemini-3.5-flash-tools.json) |\n| **Antigravity CLI** | May 20, 2026 | [System prompt](Google/antigravity-cli.md) |\n| **Zed AI** | May 16, 2026 | [System prompt](Misc/zed.md) |\n| **Grok Expert** | May 11, 2026 | [System prompt](xAI/grok-expert.md) |\n\n---\n![Anthropic](https://shieldcn.dev/badge/Anthropic-D97757.svg?logo=anthropic&logoColor=fff&variant=secondary&mode=light)\n\n## Anthropic — Claude\n\n| Model | Prompt |\n|-------|--------|\n| **Claude Fable 5** | [**System prompt**](Anthropic/claude-fable-5.md) |\n| **Claude Opus 4.8** | [**System prompt**](Anthropic/claude-opus-4.8.md) |\n| **Claude Code (Opus 4.8)** | [**System prompt**](Anthropic/Claude%20Code/claude-code-opus-4.8.md) |\n| **Claude Opus 4.7** | [**System prompt**](Anthropic/claude-opus-4.7.md) |\n| **Claude Code (Opus 4.6)** | [**System prompt**](Anthropic/Claude%20Code/claude-code-opus-4.6.md) |\n| **Claude Opus 4.6** | [**System prompt**](Anthropic/claude-opus-4.6.md) |\n| **Claude Sonnet 4.6** | [**System prompt**](Anthropic/claude-sonnet-4.6.md) |\n| Claude.ai | [Anthropic Reminders](Anthropic/anthropic_reminders.md) |\n\n<details><summary>Integrations, official prompts & older versions</summary>\n\n| | |\n|--|--|\n| Integrations | [Cowork](Anthropic/claude-cowork.md) · [Cowork Dispatch](Anthropic/claude-cowork-dispatch.md) · [Desktop Code](Anthropic/claude-desktop-code.md) · [Design](Anthropic/claude-design.md) · [Mobile iOS](Anthropic/claude-mobile-ios.md) · [In Chrome](Anthropic/claude-in-chrome.md) · [For Excel](Anthropic/claude-for-excel.md) · [For Word](Anthropic/claude-for-word.md) · [In PowerPoint](Anthropic/claude-in-powerpoint.md) · [Default Styles](Anthropic/default-styles.md) |\n| Claude Code extras | [Glob tool](Anthropic/Claude%20Code/glob-tool.md) · [Grep tool](Anthropic/Claude%20Code/grep-tool.md) · [Deferred tools](Anthropic/Claude%20Code/deferred-tools.md) · [Docs assistant](Anthropic/Claude%20Code/claude-code-docs-assistant.md) · [Bundled skills](Anthropic/Claude%20Code/bundled-skills/) |\n| Published (`claude_behavior` at release date, not updated) | [Opus 4.8](Anthropic/Official/2026-05-28-claude-opus-4.8.md) · [Opus 4.7](Anthropic/Official/2026-04-16-claude-opus-4.7.md) · [Opus 4.6](Anthropic/Official/2026-02-05-claude-opus-4.6.md) · [Sonnet 4.6](Anthropic/Official/2026-02-17-claude-sonnet-4.6.md) · [All versions](Anthropic/Official/) |\n| Without tools | [Opus 4.6](Anthropic/claude-opus-4.6-no-tools.md) · [Sonnet 4.6](Anthropic/claude-sonnet-4.6-no-tools.md) |\n| Raw prompts | [Opus 4.6](Anthropic/raw/claude-opus-4.6-raw.md) · [Opus 4.6 (no tools)](Anthropic/raw/claude-opus-4.6-no-tools-raw.md) · [Sonnet 4.6](Anthropic/raw/claude-sonnet-4.6-raw.md) · [Sonnet 4.6 (no tools)](Anthropic/raw/claude-sonnet-4.6-no-tools-raw.md) |\n| Visualize | [Visualization](Anthropic/visualize.md) |\n| Opus 4.5 | [System prompt](Anthropic/old/claude-opus-4.5.md) |\n| Sonnet 4.5 | [System prompt](Anthropic/old/claude-4.5-sonnet.md) |\n| Sonnet 4 | [System prompt](Anthropic/old/claude-sonnet-4.md) |\n| Opus 4.1 Thinking | [System prompt](Anthropic/old/claude-4.1-opus-thinking.md) |\n| Sonnet 3.7 | [System prompt](Anthropic/old/claude-3.7-sonnet.md) · [With tools](Anthropic/old/claude-3.7-sonnet-w-tools.md) · [Full w/ tools](Anthropic/old/claude-3.7-full-system-message-with-all-tools.md) · [Human-readable](Anthropic/old/claude-3.7-sonnet-full-system-message-humanreadable.md) |\n\n</details>\n\n![OpenAI](https://shieldcn.dev/badge/OpenAI-412991.svg?logo=ri%3ASiOpenai&variant=secondary&mode=light)\n\n## OpenAI — ChatGPT\n\n| Model | Prompt |\n|-------|--------|\n| **GPT-5.5** | [**Thinking**](OpenAI/gpt-5.5-thinking.md) · [**Instant**](OpenAI/gpt-5.5-instant.md) · [API](OpenAI/gpt-5.5-api.md) · [Pro API](OpenAI/gpt-5.5-pro-api.md) · [**Codex**](OpenAI/Codex/gpt-5.5.md) · [Friendly](OpenAI/Codex/personality_friendly_gpt-5.5.md) · [Pragmatic](OpenAI/Codex/personality_pragmatic_gpt-5.5.md) |\n| **GPT-5.4** | [**API**](OpenAI/gpt-5.4-api.md) · [**Thinking**](OpenAI/gpt-5.4-thinking.md) · [**Codex**](OpenAI/Codex/gpt-5.4.md) · [Codex Mini](OpenAI/Codex/gpt-5.4-mini.md) |\n| **GPT-5.3** | [**Codex**](OpenAI/Codex/gpt-5.3-codex.md) · [Spark](OpenAI/Codex/gpt-5.3-codex-spark.md) · [Codex API](OpenAI/gpt-5.3-codex-api.md) · [Chat API](OpenAI/gpt-5.3-chat-api.md) · [Instant](OpenAI/gpt-5.3-instant.md) |\n| **Codex CLI** | [Per-model prompts](OpenAI/Codex/) · [Spark](OpenAI/Codex/gpt-5.3-codex-spark.md) · [Plan mode](OpenAI/Codex/plan_mode.md) · [Personas](OpenAI/Codex/personality_friendly.md) · [Auto-review](OpenAI/Codex/codex-auto-review.md) |\n| **Tools** | [Web search](OpenAI/tool-web-search.md) · [Deep research](OpenAI/tool-deep-research.md) · [Python](OpenAI/tool-python.md) · [Python code](OpenAI/tool-python-code.md) · [Canvas](OpenAI/tool-canvas-canmore.md) · [Image gen](OpenAI/tool-create-image-image_gen.md) · [Memory](OpenAI/tool-memory-bio.md) · [Advanced memory](OpenAI/tool-advanced-memory.md) · [File search](OpenAI/tool-file_search.md) |\n| **Policies** | [Image safety](OpenAI/prompt-image-safety-policies.md) · [Automation context](OpenAI/prompt-automation-context.md) |\n\n<details><summary>Older models & variants</summary>\n\n| | |\n|--|--|\n| GPT-5.2 | [Mini (free)](OpenAI/gpt-5.2-mini-free-account.md) · [Thinking](OpenAI/gpt-5.2-thinking.md) · [Codex](OpenAI/Codex/gpt-5.2-codex.md) |\n| o4-mini | [System prompt](OpenAI/o4-mini.md) · [High](OpenAI/o4-mini-high.md) |\n| o3 | [System prompt](OpenAI/o3.md) |\n| ChatGPT Atlas | [System prompt](OpenAI/chatgpt-atlas.md) |\n| GPT-5.1 personalities | [Default](OpenAI/gpt-5.1-default.md) · [Friendly](OpenAI/gpt-5.1-friendly.md) · [Professional](OpenAI/gpt-5.1-professional.md) · [Candid](OpenAI/gpt-5.1-candid.md) · [Cynical](OpenAI/gpt-5.1-cynical.md) · [Efficient](OpenAI/gpt-5.1-efficient.md) · [Nerdy](OpenAI/gpt-5.1-nerdy.md) · [Quirky](OpenAI/gpt-5.1-quirky.md) |\n| GPT-5 | [Agent mode](OpenAI/chatgpt-gpt-5-agent-mode.md) · [Thinking](OpenAI/gpt-5-thinking.md) · [Cynic](OpenAI/gpt-5-cynic-personality.md) · [Listener](OpenAI/gpt-5-listener-personality.md) · [Nerdy](OpenAI/gpt-5-nerdy-personality.md) · [Robot](OpenAI/gpt-5-robot-personality.md) · [Codex](OpenAI/Codex/gpt-5-codex.md) · [Codex Mini](OpenAI/Codex/gpt-5-codex-mini.md) |\n| GPT-4.5 | [System prompt](OpenAI/gpt-4.5.md) |\n| GPT-4.1 | [Full](OpenAI/gpt-4.1.md) · [Mini](OpenAI/gpt-4.1-mini.md) |\n| GPT-4o | [System prompt](OpenAI/gpt-4o.md) · [WhatsApp](OpenAI/gpt-4o-whatsapp.md) · [Advanced voice](OpenAI/gpt-4o-advanced-voice-mode.md) · [Legacy voice](OpenAI/gpt-4o-legacy-voice-mode.md) |\n| Monday GPT | [System prompt](OpenAI/monday-gpt.md) |\n| GPT-4o new personality | [System prompt](OpenAI/4o-2025-09-03-new-personality.md) |\n| Study and learn | [System prompt](OpenAI/study-and-learn.md) |\n| Image safety policies | [System prompt](OpenAI/image-safety-policies.md) |\n| API variants | [GPT-5 reasoning (high)](OpenAI/API/gpt-5-reasoning-effort-high-api.md) · [o3 high](OpenAI/API/o3-high-api.md) · [o3 med](OpenAI/API/o3-medium-api.md) · [o3 low](OpenAI/API/o3-low-api.md) · [o4-mini high](OpenAI/API/o4-mini-high.md) · [o4-mini med](OpenAI/API/o4-mini-medium-api.md) · [o4-mini low](OpenAI/API/o4-mini-low-api.md) |\n| Old o4-mini | [System prompt](OpenAI/Old/chatgpt.com-o4-mini.md) |\n| Codex (older) | [GPT-5](OpenAI/Codex/gpt-5.md) · [GPT-5.1](OpenAI/Codex/gpt-5.1.md) · [GPT-5.1 Codex](OpenAI/Codex/gpt-5.1-codex.md) · [GPT-5.1 Mini](OpenAI/Codex/gpt-5.1-codex-mini.md) · [GPT-5.1 Max](OpenAI/Codex/gpt-5.1-codex-max.md) · [GPT-5.2](OpenAI/Codex/gpt-5.2.md) · [5.2 Friendly](OpenAI/Codex/personality_friendly_gpt-5.2-codex.md) · [5.2 Pragmatic](OpenAI/Codex/personality_pragmatic_gpt-5.2-codex.md) |\n\n</details>\n\n![Google Gemini](https://shieldcn.dev/badge/Google%20Gemini-8E75B2.svg?logo=googlegemini&logoColor=fff&variant=secondary&mode=light)\n\n## Google — Gemini\n\n| Model | Prompt |\n|-------|--------|\n| **Gemini 3.5 Flash** | [**System prompt**](Google/gemini-3.5-flash.md) · [AI Studio](Google/gemini-3.5-flash-ai-studio.md) · [Tools](Google/gemini-3.5-flash-tools.json) |\n| **Gemini 3.1 Pro** | [**System prompt**](Google/gemini-3.1-pro.md) · [API](Google/gemini-3.1-pro-api.md) |\n| Gemini CLI | [System prompt](Google/gemini-cli.md) |\n| Antigravity CLI | [System prompt](Google/antigravity-cli.md) |\n| Jules | [System prompt](Google/jules.md) |\n\n<details><summary>Older models & variants</summary>\n\n| | |\n|--|--|\n| Gemini 3 | [Flash](Google/gemini-3-flash.md) · [Pro](Google/gemini-3-pro.md) |\n| Gemini Diffusion | [System prompt](Google/gemini-diffusion.md) |\n| Google Search AI Mode | [System prompt](Google/google-search-ai-mode.md) |\n| Gemini YouTube | [System prompt](Google/gemini-youtube.md) |\n| Gemini in Chrome | [System prompt](Google/gemini-in-chrome.md) |\n| Gemini Workspace | [System prompt](Google/gemini-workspace.md) |\n| Gemini 2.5 Pro | [API](Google/gemini-2.5-pro-api.md) · [Webapp](Google/gemini-2.5-pro-webapp.md) · [Guided learning](Google/gemini-2.5-pro-guided-learning.md) |\n| Gemini 2.5 Flash | [Image preview](Google/gemini-2.5-flash-image-preview.md) |\n| Gemini 2.0 Flash | [Webapp](Google/gemini-2.0-flash-webapp.md) |\n| AI Studio Build | [System prompt](Goog",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "llm"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 86
    },
    "strategic_score": 86
  },
  {
    "owner": "koala73",
    "name": "worldmonitor",
    "full_name": "koala73/worldmonitor",
    "url": "https://github.com/koala73/worldmonitor",
    "description": "Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface",
    "language": "TypeScript",
    "total_stars": 60682,
    "forks": 9463,
    "stars_this_period": 2735,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "dashboard",
        "geopolitics",
        "monitoring",
        "news",
        "opensource",
        "osint",
        "palantir",
        "situation"
      ],
      "license": "NOASSERTION",
      "open_issues": 156,
      "created_at": "2026-01-08T17:26:06Z",
      "pushed_at": "2026-06-28T18:28:22Z",
      "homepage": "https://worldmonitor.app",
      "default_branch": "main",
      "forks": 9463,
      "watchers": 369,
      "archived": false,
      "size_kb": 110856
    },
    "readme_content": "# World Monitor\n\n**Real-time global intelligence dashboard** — AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface.\n\n[![GitHub stars](https://img.shields.io/github/stars/koala73/worldmonitor?style=social)](https://github.com/koala73/worldmonitor/stargazers)\n[![Discord](https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white)](https://discord.gg/re63kWKxaz)\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n[![Last commit](https://img.shields.io/github/last-commit/koala73/worldmonitor)](https://github.com/koala73/worldmonitor/commits/main)\n[![Latest release](https://img.shields.io/github/v/release/koala73/worldmonitor?style=flat)](https://github.com/koala73/worldmonitor/releases/latest)\n\n<p align=\"center\">\n  <a href=\"https://worldmonitor.app\"><img src=\"https://img.shields.io/badge/Web_App-worldmonitor.app-blue?style=for-the-badge&logo=googlechrome&logoColor=white\" alt=\"Web App\"></a>&nbsp;\n  <a href=\"https://tech.worldmonitor.app\"><img src=\"https://img.shields.io/badge/Tech_Variant-tech.worldmonitor.app-0891b2?style=for-the-badge&logo=googlechrome&logoColor=white\" alt=\"Tech Variant\"></a>&nbsp;\n  <a href=\"https://finance.worldmonitor.app\"><img src=\"https://img.shields.io/badge/Finance_Variant-finance.worldmonitor.app-059669?style=for-the-badge&logo=googlechrome&logoColor=white\" alt=\"Finance Variant\"></a>&nbsp;\n  <a href=\"https://commodity.worldmonitor.app\"><img src=\"https://img.shields.io/badge/Commodity_Variant-commodity.worldmonitor.app-b45309?style=for-the-badge&logo=googlechrome&logoColor=white\" alt=\"Commodity Variant\"></a>&nbsp;\n  <a href=\"https://happy.worldmonitor.app\"><img src=\"https://img.shields.io/badge/Happy_Variant-happy.worldmonitor.app-f59e0b?style=for-the-badge&logo=googlechrome&logoColor=white\" alt=\"Happy Variant\"></a>&nbsp;\n  <a href=\"https://energy.worldmonitor.app\"><img src=\"https://img.shields.io/badge/Energy_Variant-energy.worldmonitor.app-eab308?style=for-the-badge&logo=googlechrome&logoColor=white\" alt=\"Energy Variant\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://worldmonitor.app/api/download?platform=windows-exe\"><img src=\"https://img.shields.io/badge/Download-Windows_(.exe)-0078D4?style=for-the-badge&logo=windows&logoColor=white\" alt=\"Download Windows\"></a>&nbsp;\n  <a href=\"https://worldmonitor.app/api/download?platform=macos-arm64\"><img src=\"https://img.shields.io/badge/Download-macOS_Apple_Silicon-000000?style=for-the-badge&logo=apple&logoColor=white\" alt=\"Download macOS ARM\"></a>&nbsp;\n  <a href=\"https://worldmonitor.app/api/download?platform=macos-x64\"><img src=\"https://img.shields.io/badge/Download-macOS_Intel-555555?style=for-the-badge&logo=apple&logoColor=white\" alt=\"Download macOS Intel\"></a>&nbsp;\n  <a href=\"https://worldmonitor.app/api/download?platform=linux-appimage\"><img src=\"https://img.shields.io/badge/Download-Linux_(.AppImage)-FCC624?style=for-the-badge&logo=linux&logoColor=black\" alt=\"Download Linux\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.worldmonitor.app/docs/documentation\"><strong>Documentation</strong></a> &nbsp;·&nbsp;\n  <a href=\"https://github.com/koala73/worldmonitor/releases/latest\"><strong>Releases</strong></a> &nbsp;·&nbsp;\n  <a href=\"https://www.worldmonitor.app/docs/contributing\"><strong>Contributing</strong></a>\n</p>\n\n![World Monitor Dashboard](docs/images/worldmonitor-7-mar-2026.jpg)\n\n---\n\n## What It Does\n\n- **500+ curated news feeds** across 15 categories, AI-synthesized into briefs\n- **Dual map engine** — 3D globe (globe.gl) and WebGL flat map (deck.gl) with 56 map layer types\n- **Cross-stream correlation** — military, economic, disaster, and escalation signal convergence\n- **Country Instability Index (CII)** — server-authoritative CII v8 stress scoring for 31 Tier-1 countries\n- **Finance radar** — 29 stock exchanges, commodities, crypto, and 7-signal market composite\n- **Local AI** — run everything with Ollama, no API keys required\n- **6 site variants** from a single codebase (world, tech, finance, commodity, happy, energy)\n- **Native desktop app** (Tauri 2) for macOS, Windows, and Linux\n- **24 languages** with native-language feeds and RTL support\n\nFor the full feature list, architecture, data sources, and algorithms, see the **[documentation](https://www.worldmonitor.app/docs/documentation)**.\n\n---\n\n## Support Status\n\nAll site variants and desktop binaries are built from a single codebase and ship from the same release process. The table below clarifies maintenance status so you know which surfaces are safe to depend on.\n\n| Surface | Status | Notes |\n|---------|--------|-------|\n| `worldmonitor.app`, `tech.`, `finance.`, `commodity.`, `happy.`, `energy.` | Stable | Public deployments built from this repo, actively maintained |\n| Desktop binaries (Windows / macOS Apple Silicon / macOS Intel / Linux AppImage) | Stable | One Tauri binary that switches variants in-app; current CI release targets are `full` and `tech` |\n\nIssues filed against any of the above are triaged from the same backlog — see the [issues board](https://github.com/koala73/worldmonitor/issues) for currently-open work.\n\n---\n\n## Quick Start\n\n```bash\ngit clone https://github.com/koala73/worldmonitor.git\ncd worldmonitor\nnpm install\nnpm run dev\n```\n\nOpen [localhost:3000](http://localhost:3000). The app runs with no environment variables.\n\nFeature-specific data sources may require credentials — for example, the flight-price command (`fly LON DXB`) needs `TRAVELPAYOUTS_API_TOKEN` to return live quotes; without it the command shows a \"credentials required\" message rather than synthetic data. See `.env.example` for the full list.\n\nFor variant-specific development:\n\n```bash\nnpm run dev:tech       # tech.worldmonitor.app\nnpm run dev:finance    # finance.worldmonitor.app\nnpm run dev:commodity  # commodity.worldmonitor.app\nnpm run dev:happy      # happy.worldmonitor.app\nnpm run dev:energy     # energy.worldmonitor.app\n```\n\nSee the **[self-hosting guide](https://www.worldmonitor.app/docs/getting-started)** for deployment options (Vercel, Docker, static).\n\n---\n\n## Tech Stack\n\n| Category | Technologies |\n|----------|-------------|\n| **Frontend** | Vanilla TypeScript, Vite, globe.gl + Three.js, deck.gl + MapLibre GL |\n| **Desktop** | Tauri 2 (Rust) with Node.js sidecar |\n| **AI/ML** | Ollama / Groq / OpenRouter, Transformers.js (browser-side) |\n| **API Contracts** | Protocol Buffers (276 protos, 34 services), sebuf HTTP annotations |\n| **Deployment** | Vercel Edge Functions (60+), Railway relay, Tauri, PWA |\n| **Caching** | Redis (Upstash), 3-tier cache, CDN, service worker |\n\nFull stack details in the **[architecture docs](https://www.worldmonitor.app/docs/architecture)**.\n\n---\n\n## Flight Data\n\nFlight data provided gracefully by [Wingbits](https://wingbits.com?utm_source=worldmonitor&utm_medium=referral&utm_campaign=worldmonitor), the most advanced ADS-B flight data solution.\n\n---\n\n## Data Sources\n\nWorldMonitor aggregates 65+ external providers and APIs across geopolitics, finance, energy, climate, aviation, cyber, military, infrastructure, and news intelligence — surfaced through 500+ curated feeds and tracked by a freshness monitor covering 35 source groups. See the full [data sources catalog](https://www.worldmonitor.app/docs/data-sources) for providers, feed tiers, and collection methods.\n\n---\n\n## Contributing\n\nContributions welcome! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.\n\n```bash\nnpm run typecheck        # Type checking\nnpm run build:full       # Production build\n```\n\n---\n\n## License\n\n**AGPL-3.0-only** for the source code. Commercial use is permitted under the AGPL when you comply with its copyleft and source-availability terms.\n\n| Use Case | Allowed? |\n|----------|----------|\n| Personal / research / educational | Yes, under AGPL-3.0-only |\n| Self-hosted instance | Yes, under AGPL-3.0-only |\n| Fork and modify | Yes, share source under AGPL-3.0-only when required |\n| Commercial use / SaaS | Yes, under AGPL-3.0-only when you comply with AGPL obligations |\n| Private-source proprietary use or official branding rights | Separate commercial or trademark permission needed |\n\nSee [LICENSE](LICENSE) for the full code license and [docs/license.mdx](docs/license.mdx) for a plain-language summary. Commercial licensing is available as an alternative option for teams that need non-AGPL terms.\n\nCopyright (C) 2024-2026 Elie Habib. All rights reserved.\n\n---\n\n## Author\n\n**Elie Habib** — [GitHub](https://github.com/koala73)\n\n## Contributors\n\n<a href=\"https://github.com/koala73/worldmonitor/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=koala73/worldmonitor\" />\n</a>\n\n## Security Acknowledgments\n\nWe thank the following researchers for responsibly disclosing security issues:\n\n- **Cody Richard** — Disclosed three security findings covering IPC command exposure, renderer-to-sidecar trust boundary analysis, and fetch patch credential injection architecture (2026)\n\nSee our [Security Policy](./SECURITY.md) for responsible disclosure guidelines.\n\n---\n\n<p align=\"center\">\n  <a href=\"https://worldmonitor.app\">worldmonitor.app</a> &nbsp;·&nbsp;\n  <a href=\"https://www.worldmonitor.app/docs/documentation\">docs.worldmonitor.app</a> &nbsp;·&nbsp;\n  <a href=\"https://finance.worldmonitor.app\">finance.worldmonitor.app</a> &nbsp;·&nbsp;\n  <a href=\"https://commodity.worldmonitor.app\">commodity.worldmonitor.app</a>\n</p>\n\n## Star History\n\n<a href=\"https://api.star-history.com/svg?repos=koala73/worldmonitor&type=Date\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=koala73/worldmonitor&type=Date&type=Date&theme=dark\" />\n   <img alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=koala73/worldmonitor&type=Date&type=Date\" />\n </picture>\n</a>\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"world-monitor\",\n  \"private\": true,\n  \"version\": \"2.8.0\",\n  \"license\": \"AGPL-3.0-only\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"lint\": \"biome lint ./src ./server ./api ./tests ./e2e ./scripts ./middleware.ts && npm run lint:safe-html\",\n    \"lint:fix\": \"biome check ./src ./server ./api ./tests ./e2e ./scripts ./middleware.ts --fix\",\n    \"lint:boundaries\": \"node scripts/lint-boundaries.mjs\",\n    \"lint:api-contract\": \"node scripts/enforce-sebuf-api-contract.mjs\",\n    \"lint:safe-html\": \"node scripts/enforce-safe-html.mjs\",\n    \"lint:rate-limit-policies\": \"tsx scripts/enforce-rate-limit-policies.mjs\",\n    \"lint:premium-fetch\": \"tsx scripts/enforce-premium-fetch.mjs\",\n    \"lint:mintlify-slugs\": \"node scripts/enforce-mintlify-reserved-slugs.mjs\",\n    \"lint:unicode\": \"node scripts/check-unicode-safety.mjs\",\n    \"lint:unicode:staged\": \"node scripts/check-unicode-safety.mjs --staged\",\n    \"security:local-env-dumps\": \"node scripts/check-local-secret-dumps.mjs\",\n    \"worktree:bootstrap\": \"node scripts/bootstrap-worktree.mjs\",\n    \"worktree:bootstrap:test-only\": \"node scripts/bootstrap-worktree.mjs --ignore-scripts\",\n    \"worktree:env\": \"node scripts/bootstrap-worktree.mjs --skip-install\",\n    \"lint:md\": \"markdownlint-cli2 '**/*.md' '!**/node_modules/**' '!.agent/**' '!.agents/**' '!.claude/**' '!.factory/**' '!.windsurf/**' '!skills/**' '!docs/internal/**' '!docs/Docs_To_Review/**' '!docs/archive/**' '!todos/**' '!docs/plans/**' '!docs/brainstorms/**' '!docs/ideation/**'\",\n    \"version:sync\": \"node scripts/sync-desktop-version.mjs\",\n    \"version:check\": \"node scripts/sync-desktop-version.mjs --check\",\n    \"sync:locales\": \"node scripts/sync-locale-keys.mjs\",\n    \"sync:locales:check\": \"node scripts/sync-locale-keys.mjs --check\",\n    \"docs:stats\": \"node scripts/docs-stats.mjs\",\n    \"docs:check\": \"node scripts/docs-stats.mjs --check\",\n    \"dev\": \"vite\",\n    \"dev:tech\": \"cross-env VITE_VARIANT=tech vite\",\n    \"dev:finance\": \"cross-env VITE_VARIANT=finance vite\",\n    \"dev:happy\": \"cross-env VITE_VARIANT=happy vite\",\n    \"dev:commodity\": \"cross-env VITE_VARIANT=commodity vite\",\n    \"dev:energy\": \"cross-env VITE_VARIANT=energy vite\",\n    \"postinstall\": \"cd blog-site && npm ci --prefer-offline\",\n    \"build:blog\": \"cd blog-site && npm run build && rm -rf ../public/blog && mkdir -p ../public/blog && cp -r dist/* ../public/blog/\",\n    \"build:pro\": \"cd pro-test && npm ci && npm run build\",\n    \"build:openapi\": \"node -e \\\"require('fs').cpSync('docs/api/worldmonitor.openapi.yaml', 'public/openapi.yaml')\\\"\",\n    \"build:agent-skills\": \"node scripts/build-agent-skills-index.mjs\",\n    \"prebuild\": \"npm run build:openapi && npm run build:agent-skills\",\n    \"build\": \"npm run build:blog && tsc && vite build\",\n    \"build:sidecar-sebuf\": \"node scripts/build-sidecar-sebuf.mjs\",\n    \"build:desktop\": \"node scripts/build-sidecar-sebuf.mjs && node scripts/build-sidecar-handlers.mjs && tsc && vite build\",\n    \"build:full\": \"npm run build:openapi && npm run build:agent-skills && npm run build:blog && cross-env-shell VITE_VARIANT=full \\\"tsc && vite build\\\"\",\n    \"build:tech\": \"npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=tech \\\"tsc && vite build\\\"\",\n    \"build:finance\": \"npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=finance \\\"tsc && vite build\\\"\",\n    \"build:happy\": \"npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=happy \\\"tsc && vite build\\\"\",\n    \"build:commodity\": \"npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=commodity \\\"tsc && vite build\\\"\",\n    \"build:energy\": \"npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=energy \\\"tsc && vite build\\\"\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"typecheck:api\": \"tsc --noEmit -p tsconfig.api.json && node scripts/audit-convex-string-calls.cjs\",\n    \"typecheck:all\": \"tsc --noEmit && tsc --noEmit -p tsconfig.api.json && node scripts/audit-convex-string-calls.cjs\",\n    \"audit:convex-string-calls\": \"node scripts/audit-convex-string-calls.cjs\",\n    \"audit:dodo-catalog\": \"node scripts/audit-dodo-catalog.cjs\",\n    \"tauri\": \"tauri\",\n    \"preview\": \"vite preview\",\n    \"test:e2e:full\": \"cross-env VITE_VARIANT=full playwright test\",\n    \"test:e2e:tech\": \"cross-env VITE_VARIANT=tech playwright test\",\n    \"test:e2e:finance\": \"cross-env VITE_VARIANT=finance playwright test\",\n    \"test:e2e:commodity\": \"cross-env VITE_VARIANT=commodity playwright test\",\n    \"test:e2e:energy\": \"cross-env VITE_VARIANT=energy playwright test\",\n    \"test:e2e:happy\": \"cross-env VITE_VARIANT=happy playwright test\",\n    \"test:e2e:runtime\": \"cross-env VITE_VARIANT=full playwright test e2e/runtime-fetch.spec.ts\",\n    \"test:e2e:variant-smoke:full\": \"cross-env VITE_VARIANT=full playwright test e2e/variant-live-smoke.spec.ts\",\n    \"test:e2e:variant-smoke:tech\": \"cross-env VITE_VARIANT=tech playwright test e2e/variant-live-smoke.spec.ts\",\n    \"test:e2e:variant-smoke:f",
    "strategic_keywords": [],
    "relationship_label": "开发者工具",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 0,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 6,
      "risk_signal": 6,
      "total": 64
    },
    "strategic_score": 64
  },
  {
    "owner": "heygen-com",
    "name": "hyperframes",
    "full_name": "heygen-com/hyperframes",
    "url": "https://github.com/heygen-com/hyperframes",
    "description": "Write HTML. Render video. Built for agents.",
    "language": "TypeScript",
    "total_stars": 31959,
    "forks": 2974,
    "stars_this_period": 2727,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "animation",
        "ffmpeg",
        "framework",
        "gsap",
        "html",
        "mcp",
        "puppeteer",
        "rendering",
        "typescript",
        "video"
      ],
      "license": "Apache-2.0",
      "open_issues": 58,
      "created_at": "2026-03-10T01:51:06Z",
      "pushed_at": "2026-06-28T21:14:32Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 2974,
      "watchers": 82,
      "archived": false,
      "size_kb": 329184
    },
    "readme_content": "<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/logo/dark.svg\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"docs/logo/light.svg\">\n    <img alt=\"HyperFrames\" src=\"docs/logo/light.svg\" width=\"300\">\n  </picture>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/hyperframes\"><img src=\"https://img.shields.io/npm/v/hyperframes.svg?style=flat\" alt=\"npm version\"></a>\n  <a href=\"https://www.npmjs.com/package/hyperframes\"><img src=\"https://img.shields.io/npm/dm/hyperframes.svg?style=flat\" alt=\"npm downloads\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-Apache%202.0-blue.svg\" alt=\"License\"></a>\n  <a href=\"https://nodejs.org\"><img src=\"https://img.shields.io/badge/node-%3E%3D22-brightgreen\" alt=\"Node.js\"></a>\n  <a href=\"https://discord.gg/EbK98HBPdk\"><img src=\"https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white\" alt=\"Discord\"></a>\n</p>\n\n<p align=\"center\"><b>Write HTML. Render video. Built for agents.</b></p>\n\n<p align=\"center\">\n  <a href=\"https://hyperframes.heygen.com/quickstart\">Quickstart</a> |\n  <a href=\"https://hyperframes.heygen.com/showcase\">Showcase</a> |\n  <a href=\"https://www.hyperframes.dev/\">Playground</a> |\n  <a href=\"https://hyperframes.heygen.com/catalog/blocks/data-chart\">Catalog</a> |\n  <a href=\"https://hyperframes.heygen.com/introduction\">Docs</a> |\n  <a href=\"https://discord.gg/EbK98HBPdk\">Discord</a>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://static.heygen.ai/hyperframes-oss/docs/images/hyperframes-logo-motion-1280.webp\" alt=\"HyperFrames demo: HTML code on the left transforms into a rendered video on the right\" width=\"800\">\n</p>\n\nHyperFrames is an open-source framework for turning HTML, CSS, media, and seekable animations into deterministic MP4 videos. Use it locally with the CLI, from AI coding agents with skills, or as the rendering core behind hosted authoring workflows.\n\n## Quick Start\n\n### With an AI coding agent\n\nInstall the HyperFrames skills, then describe the video you want:\n\n```bash\nnpx skills add heygen-com/hyperframes\n```\n\nTry a prompt like:\n\n> Using `/hyperframes`, create a 10-second product intro with a fade-in title, a background video, and subtle background music.\n\nThe skills teach agents the HyperFrames production loop: plan the video, write valid HTML, wire seekable animations, add media, lint, preview, and render. They work with Claude Code, Cursor, Gemini CLI, Codex, and other coding agents that support skills.\n\n## Skills\n\nHyperFrames ships 19 skills agents load on demand. Read `/hyperframes` first — it's the router and capability map; it picks a workflow for any \"make me a video\" request and points to the domain skills below.\n\nRun `npx skills add heygen-com/hyperframes` for the interactive picker, `npx skills add heygen-com/hyperframes --all` to install all 19 at once (skips the picker), or `npx skills add heygen-com/hyperframes --skill <name>` for just one (bare name, no leading `/`).\n\n### Router\n\n| Skill          | Use when                                                                                                                                                                                                  |\n| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `/hyperframes` | **Read first** for any request to make / create / edit / animate / render a video, animation, or motion graphic. Capability map for the domain skills and intent router for the creation workflows below. |\n\n### Creation workflows\n\n| Skill                      | Use when                                                                                                                                                                                 |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `/product-launch-video`    | Marketing / launching / promoting a **product** — from its URL, a brief, or a script (even if the site is only named). Up to ~3 min (sweet spot 30-90s).                                 |\n| `/website-to-video`        | Turning a **general website** into a video — site tour, portfolio / landing-page showcase, social clip from the site's own visuals.                                                      |\n| `/faceless-explainer`      | **Explaining a topic / concept** from arbitrary text — no product, no URL, no website capture; every visual is LLM-invented (typography / abstract / diagram / data-viz).                |\n| `/pr-to-video`             | A **GitHub pull request** (PR URL, `owner/repo#N` ref, or \"this PR\") → changelog / feature-reveal / fix / refactor explainer, read via the `gh` CLI.                                     |\n| `/embedded-captions`       | Adding **captions / subtitles** to an existing talking-head video (footage untouched) — verbatim rail, embedded climax behind the subject, or pure-cinematic embed.                      |\n| `/talking-head-recut`      | Packaging an existing talking-head / interview / podcast video with **designed graphic overlays** — lower-thirds, data callouts, kinetic titles, pull-quotes, side panels, PiP.          |\n| `/motion-graphics`         | A short, **unnarrated, design-led motion graphic** (~under 10s) — kinetic type, stat / chart hit, logo sting, lower-third, animated tweet / headline. MP4 or transparent overlay.        |\n| `/music-to-video`          | A **music track** (audio file, or video to pull audio from) → a **beat-synced** video — lyric, slideshow, or kinetic promo; music drives pacing.                                         |\n| `/slideshow`               | A **presentation / pitch deck / interactive deck** — discrete slides, fragment reveals, branching, hotspot navigation, presenter mode. Output is a navigable deck, not a rendered video. |\n| `/general-video`           | **Anything else** — longer or multi-scene pieces, brand / sizzle reel, title card, static loop, freeform composition. Input- and length-agnostic fallback.                               |\n| `/remotion-to-hyperframes` | **Porting an existing Remotion** (React) composition's source to HyperFrames HTML. One-way migration, not creation.                                                                      |\n\n### Domain skills (loaded on demand)\n\nAtomic capabilities the creation workflows compose against — pull one when you need that specific layer.\n\n| Skill                    | Covers                                                                                                                                                                 |\n| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `/hyperframes-core`      | The composition contract — `data-*` timing attributes, `class=\"clip\"`, tracks, sub-compositions, variables, framework-owned media playback, determinism rules.         |\n| `/hyperframes-animation` | All animation knowledge — atomic motion rules, scene blueprints, transitions, runtime adapters (GSAP / Lottie / Three.js / Anime.js / CSS / WAAPI / TypeGPU).          |\n| `/hyperframes-creative`  | Non-animation creative direction — `frame.md` / `design.md`, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns.             |\n| `/hyperframes-media`     | Audio + media — TTS voiceover, background music, sound effects, Whisper transcription, background removal, caption authoring (one shared audio engine).                |\n| `/media-use`             | Resolve any media need (BGM, SFX, image, icon) into a frozen local file + ledger record. One verb (`resolve`) over the HeyGen catalog with manifest tracking.          |\n| `/hyperframes-cli`       | CLI dev loop — `init`, `lint`, `validate`, `inspect`, `preview`, `render`, `publish`, `doctor`, plus AWS Lambda cloud rendering (`lambda deploy / render / progress`). |\n| `/hyperframes-registry`  | Install and wire registry blocks and components into compositions via `hyperframes add`. Authoring a new block or component to contribute upstream.                    |\n\nFor visual design handoff workflows, see the [Claude Design guide](https://hyperframes.heygen.com/guides/claude-design) and [Open Design guide](https://hyperframes.heygen.com/guides/open-design).\n\n### Manually with the CLI\n\n```bash\nnpx hyperframes init my-video\ncd my-video\nnpx hyperframes preview      # preview in browser with live reload\nnpx hyperframes render       # render to MP4\n```\n\n**Requirements:** Node.js 22+, FFmpeg\n\n## What You Can Build\n\nNeed ideas? Browse the [Showcase](https://hyperframes.heygen.com/showcase) for finished videos you can watch, read, run, and remix.\n\n- Product launch videos and feature announcements\n- PR walkthroughs with animated code diffs, narration, and captions\n- Data visualizations, chart races, and map animations\n- Social videos with kinetic captions, overlays, and music\n- Docs-to-video, PDF-to-video, and website-to-video explainers\n- Reusable motion graphics for automated content pipelines\n\n## Frame.md\n\n**frame.md — your design system, ready for video.**\n\nEvery brand has a `design.md`. None of them were written for a camera. `frame.md` is the missing translation layer: it takes your web-context design spec and inverts it for the frame — the same tokens, the same rules, but rewritten so an AI agent can compose a promo video without guessing at scale or reaching for web chrome.\n\nThe output is a `DESIGN.md` superset your whole toolchain can read. Atoms stay sacred. Composition stays free. Numbers come from the script.\n\n<table>\n  <tr>\n    <td width=\"50%\" align=\"center\">\n      <a href=\"https://www.hyperframes.dev/design/biennale-yellow\"><img src=\"https://static.heygen.ai/hyperframes-oss/docs/images/design-templates/biennale-yellow.png\" alt=\"Biennale Yellow\" width=\"100%\"></a>\n      <br><b><a href=\"https://www.hyperframes.dev/design/biennale-yellow\">Biennale Yellow</a></b>\n    </td>\n    <td width=\"50%\" align=\"center\">\n      <a href=\"https://www.hyperframes.dev/design/blockframe\"><img src=\"https://static.heygen.ai/hyperframes-oss/docs/images/design-templates/blockframe.png\" alt=\"BlockFrame\" width=\"100%\"></a>\n      <br><b><a href=\"https://www.hyperframes.dev/design/blockframe\">BlockFrame</a></b>\n    </td>\n  </tr>\n  <tr>\n    <td width=\"50%\" align=\"center\">\n      <a href=\"https://www.hyperframes.dev/design/blue-professional\"><img src=\"https://static.heygen.ai/hyperframes-oss/docs/images/design-templates/blue-professional.png\" alt=\"Blue Professional\" width=\"100%\"></a>\n      <br><b><a href=\"https://www.hyperframes.dev/design/blue-professional\">Blue Professional</a></b>\n    </td>\n    <td width=\"50%\" align=\"center\">\n      <a href=\"https://www.hyperframes.dev/design/bold-poster\"><img src=\"https://static.heygen.ai/hyperframes-oss/docs/images/design-templates/bold-poster.png\" alt=\"Bold Poster\" width=\"100%\"></a>\n      <br><b><a href=\"https://www.hyperframes.dev/design/bold-poster\">Bold Poster</a></b>\n    </td>\n  </tr>\n  <tr>\n    <td width=\"50%\" align=\"center\">\n      <a href=\"https://www.hyperframes.dev/design/broadside\"><img src=\"https://static.heygen.ai/hyperframes-oss/docs/images/design-templates/broadside.png\" alt=\"Broadside\" width=\"100%\"></a>\n      <br><b><a href=\"https://www.hyperframes.dev/design/broadside\">Broadside</a></b>\n    </td>\n    <td width=\"50%\" align=\"center\">\n      <a href=\"https://www.hyperframes.dev/design/capsule\"><img src=\"https://static.heygen.ai/hyperframes-oss/docs/images/design-templates/capsule.png\" alt=\"Capsule\" width=\"100%\"></a>\n      <br><b><a href=\"https://www.hyperframes.dev/design/capsule\">Capsule</a></b>\n    </td>\n  </tr",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"hyperframes-monorepo\",\n  \"private\": true,\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/heygen-com/hyperframes\"\n  },\n  \"workspaces\": [\n    \"packages/*\"\n  ],\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"bun run studio\",\n    \"build\": \"bun run --filter '@hyperframes/{parsers,lint,studio-server}' build && bun run --filter @hyperframes/core build && bun run --filter '@hyperframes/{core,engine,producer,player,studio,shader-transitions,aws-lambda,gcp-cloud-run,sdk}' build && bun run --filter @hyperframes/cli build\",\n    \"build:producer\": \"bun run --filter @hyperframes/producer build\",\n    \"studio\": \"bun run --filter @hyperframes/studio dev\",\n    \"build:hyperframes-runtime\": \"bun run --filter @hyperframes/core build:hyperframes-runtime\",\n    \"build:hyperframes-runtime:modular\": \"bun run --filter @hyperframes/core build:hyperframes-runtime:modular\",\n    \"verify:packed-manifests\": \"node scripts/verify-packed-manifests.mjs\",\n    \"validate:release-channel\": \"node scripts/validate-release-channel.mjs\",\n    \"set-version\": \"tsx scripts/set-version.ts\",\n    \"release:prepare\": \"tsx scripts/release-prepare.ts\",\n    \"changelog:draft\": \"tsx scripts/draft-changelog.ts\",\n    \"changelog:weekly\": \"tsx scripts/changelog-weekly.ts\",\n    \"sync-schemas\": \"tsx scripts/sync-schemas.ts\",\n    \"sync-schemas:check\": \"tsx scripts/sync-schemas.ts --check\",\n    \"lint\": \"oxlint . && tsx scripts/lint-skills.ts\",\n    \"lint:skills\": \"tsx scripts/lint-skills.ts\",\n    \"lint:fix\": \"oxlint --fix .\",\n    \"format\": \"oxfmt .\",\n    \"test\": \"bun run --filter '*' test\",\n    \"player:perf\": \"bun run --filter @hyperframes/player perf\",\n    \"format:check\": \"oxfmt --check .\",\n    \"knip\": \"knip\",\n    \"test:scripts\": \"node --import tsx --test scripts/validate-release-channel.test.mjs scripts/draft-changelog.test.ts scripts/set-version.test.ts scripts/release-prepare.test.ts scripts/cli-options.test.ts scripts/changelog-weekly.test.ts scripts/claude-plugin-compression.test.ts\",\n    \"test:skills\": \"node --test 'skills/**/*.test.mjs'\",\n    \"generate:previews\": \"tsx scripts/generate-template-previews.ts\",\n    \"generate:catalog-previews\": \"tsx scripts/generate-catalog-previews.ts\",\n    \"upload:docs-images\": \"bash scripts/upload-docs-images.sh\",\n    \"prepare\": \"test -d .git && lefthook install || true\"\n  },\n  \"devDependencies\": {\n    \"@commitlint/cli\": \"^20.5.0\",\n    \"@commitlint/config-conventional\": \"^20.5.0\",\n    \"@hyperframes/player\": \"workspace:*\",\n    \"@types/node\": \"^25.0.10\",\n    \"concurrently\": \"^8.2.0\",\n    \"fallow\": \"^2.75.0\",\n    \"happy-dom\": \"^20.9.0\",\n    \"knip\": \"^6.0.3\",\n    \"lefthook\": \"^2.1.4\",\n    \"oxfmt\": \"^0.41.0\",\n    \"oxlint\": \"^1.56.0\",\n    \"tsx\": \"^4.21.0\",\n    \"typescript\": \"^5.0.0\"\n  },\n  \"resolutions\": {\n    \"@types/react\": \"^19.0.0\",\n    \"@types/react-dom\": \"^19.0.0\",\n    \"react\": \"^19.0.0\",\n    \"react-dom\": \"^19.0.0\"\n  },\n  \"overrides\": {\n    \"@types/react\": \"^19.0.0\",\n    \"@types/react-dom\": \"^19.0.0\",\n    \"react\": \"^19.0.0\",\n    \"react-dom\": \"^19.0.0\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "runtime",
      "skill",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 94
    },
    "strategic_score": 94
  },
  {
    "owner": "stablyai",
    "name": "orca",
    "full_name": "stablyai/orca",
    "url": "https://github.com/stablyai/orca",
    "description": "Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop and mobile.",
    "language": "TypeScript",
    "total_stars": 8589,
    "forks": 598,
    "stars_this_period": 2554,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ade",
        "agent-ide",
        "ai-agents",
        "claude-code",
        "cli",
        "codex",
        "cursor-agent",
        "devtools",
        "ghostty",
        "ide",
        "mobile-app",
        "opencode",
        "orchestration",
        "parallel-agents",
        "pi",
        "terminal",
        "worktrees",
        "yc-backed"
      ],
      "license": "MIT",
      "open_issues": 795,
      "created_at": "2026-03-17T03:28:57Z",
      "pushed_at": "2026-06-28T22:29:11Z",
      "homepage": "https://onOrca.dev",
      "default_branch": "main",
      "forks": 598,
      "watchers": 17,
      "archived": false,
      "size_kb": 182440
    },
    "readme_content": "<h1 align=\"center\">\n  <a href=\"https://onOrca.dev\"><img src=\"resources/build/icon.png\" alt=\"Orca\" width=\"64\" valign=\"middle\" /></a> Orca\n</h1>\n\n<p align=\"center\">\n  <a href=\"https://github.com/stablyai/orca/stargazers\"><img src=\"https://badgen.net/github/stars/stablyai/orca?label=%E2%98%85\" alt=\"GitHub stars\" /></a>\n  <a href=\"https://github.com/stablyai/orca/releases\"><img src=\"docs/assets/readme-downloads.svg\" alt=\"Total downloads across all releases\" /></a>\n  <img src=\"https://badgen.net/github/license/stablyai/orca\" alt=\"License\" />\n  <a href=\"https://discord.gg/fzjDKHxv8Q\"><img src=\"https://img.shields.io/badge/Discord-5865F2?logo=discord&logoColor=white\" alt=\"Join the Orca Discord\" /></a>\n  <a href=\"https://x.com/orca_build\"><img src=\"https://img.shields.io/badge/X-000000?logo=x&logoColor=white\" alt=\"Follow Orca on X\" /></a>\n  <img src=\"https://img.shields.io/badge/macOS%20%7C%20Windows%20%7C%20Linux-4493F8?style=flat-square\" alt=\"Supported platforms: macOS, Windows, and Linux\" />\n</p>\n\n<p align=\"center\">\n  <sub><a href=\"docs/readme/README.es.md\">Español</a> · <a href=\"docs/readme/README.zh-CN.md\">中文</a> · <a href=\"docs/readme/README.ja.md\">日本語</a> · <a href=\"docs/readme/README.ko.md\">한국어</a></sub>\n</p>\n\n<p align=\"center\">\n  <strong>The AI Orchestrator for 100x builders.</strong><br/>\n  Run Codex, ClaudeCode, OpenCode or Pi side-by-side — each in its own worktree, tracked in one place.\n</p>\n\n<h3 align=\"center\"><a href=\"https://onorca.dev/download\"><ins>Download Orca</ins></a></h3>\n\n<p align=\"center\">\n  <img src=\"docs/assets/readme-hero.jpg\" alt=\"Orca desktop app running agents in parallel worktrees, with the Orca mobile companion app in the corner\" width=\"960\" />\n</p>\n\n## Features\n\n<table>\n<tr>\n<td width=\"50%\" valign=\"middle\">\n\n### Mobile Companion\n\nMonitor and steer your agents from your phone — get notified when an agent finishes and send follow-ups from anywhere.\n\n[iOS App Store](https://apps.apple.com/us/app/orca-ide/id6766130217) · [TestFlight](https://testflight.apple.com/join/YjeGMQBA) · [Android APK 0.0.17](https://github.com/stablyai/orca/releases/download/mobile-android-v0.0.17/app-release.apk) · [Docs →](https://www.onorca.dev/docs/mobile)\n\n</td>\n<td width=\"50%\">\n  <a href=\"https://www.onorca.dev/docs/mobile\"><picture><source srcset=\"docs/assets/feature-wall/mobile-companion-app-showcase.gif\" type=\"image/gif\"><img src=\"docs/assets/feature-wall/mobile-companion-app-showcase.jpg\" alt=\"Orca desktop with the mobile companion app\" width=\"100%\" /></picture></a>\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"middle\">\n\n### Parallel Worktrees\n\nFan one prompt across five agents, each in its own isolated git worktree — compare the results and merge the winner.\n\n[Docs →](https://www.onorca.dev/docs/model/worktrees)\n\n</td>\n<td width=\"50%\">\n  <a href=\"https://www.onorca.dev/docs/model/worktrees\"><picture><source srcset=\"docs/assets/feature-wall/parallel-worktrees.gif\" type=\"image/gif\"><img src=\"docs/assets/feature-wall/parallel-worktrees.jpg\" alt=\"Parallel worktree orchestration\" width=\"100%\" /></picture></a>\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"middle\">\n\n### Terminal Splits\n\nGhostty-class terminals with WebGL rendering, infinite splits, and scrollback that survives restarts.\n\n[Docs →](https://www.onorca.dev/docs/terminal)\n\n</td>\n<td width=\"50%\">\n  <a href=\"https://www.onorca.dev/docs/terminal\"><picture><source srcset=\"docs/assets/feature-wall/terminal-splits.gif\" type=\"image/gif\"><img src=\"docs/assets/feature-wall/terminal-splits.jpg\" alt=\"Terminal splits\" width=\"100%\" /></picture></a>\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"middle\">\n\n### Design Mode\n\nClick any UI element in a real Chromium window to send its HTML, CSS, and a cropped screenshot straight into your agent's prompt.\n\n[Docs →](https://www.onorca.dev/docs/browser/design-mode)\n\n</td>\n<td width=\"50%\">\n  <a href=\"https://www.onorca.dev/docs/browser/design-mode\"><picture><source srcset=\"docs/assets/feature-wall/design-mode.gif\" type=\"image/gif\"><img src=\"docs/assets/feature-wall/design-mode.jpg\" alt=\"Embedded browser and Design Mode\" width=\"100%\" /></picture></a>\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"middle\">\n\n### GitHub &amp; Linear, Native\n\nBrowse PRs, issues, and project boards in-app — open a worktree from any task and review without a context switch.\n\n[Docs →](https://www.onorca.dev/docs/review/linear)\n\n</td>\n<td width=\"50%\">\n  <a href=\"https://www.onorca.dev/docs/review/linear\"><picture><source srcset=\"docs/assets/feature-wall/github-linear.gif\" type=\"image/gif\"><img src=\"docs/assets/feature-wall/github-linear.jpg\" alt=\"GitHub and Linear task workflows in Orca\" width=\"100%\" /></picture></a>\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"middle\">\n\n### SSH Worktrees\n\nRun agents on a beefy remote box with full file editing, git, and terminals — auto-reconnect and port forwarding included.\n\n[Docs →](https://www.onorca.dev/docs/ssh)\n\n</td>\n<td width=\"50%\">\n  <a href=\"https://www.onorca.dev/docs/ssh\"><picture><source srcset=\"docs/assets/feature-wall/ssh-worktrees.gif\" type=\"image/gif\"><img src=\"docs/assets/feature-wall/ssh-worktrees.jpg\" alt=\"Remote worktrees over SSH\" width=\"100%\" /></picture></a>\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"middle\">\n\n### Annotate AI Diffs\n\nDrop comments on any diff line and ship them back to the agent — review, edit, and commit without leaving Orca.\n\n[Docs →](https://www.onorca.dev/docs/review/annotate-ai-diff)\n\n</td>\n<td width=\"50%\">\n  <a href=\"https://www.onorca.dev/docs/review/annotate-ai-diff\"><picture><source srcset=\"docs/assets/feature-wall/annotate-diff.gif\" type=\"image/gif\"><img src=\"docs/assets/feature-wall/annotate-diff.jpg\" alt=\"Annotate AI-generated diffs\" width=\"100%\" /></picture></a>\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"middle\">\n\n### Drag Files to Agents\n\nVS Code's editor with autosave everywhere — drag files or images straight into an agent prompt.\n\n[Docs →](https://www.onorca.dev/docs/editing/file-explorer)\n\n</td>\n<td width=\"50%\">\n  <a href=\"https://www.onorca.dev/docs/editing/file-explorer\"><picture><source srcset=\"docs/assets/feature-wall/file-drag.gif\" type=\"image/gif\"><img src=\"docs/assets/feature-wall/file-drag.jpg\" alt=\"Drag files and images into an agent prompt\" width=\"100%\" /></picture></a>\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"middle\">\n\n### Orca CLI\n\nAgents drive Orca too — script every workflow with `orca worktree create`, `snapshot`, `click`, and `fill`.\n\n[Docs →](https://www.onorca.dev/docs/cli/overview)\n\n</td>\n<td width=\"50%\">\n  <a href=\"https://www.onorca.dev/docs/cli/overview\"><picture><source srcset=\"docs/assets/feature-wall/orca-cli.gif\" type=\"image/gif\"><img src=\"docs/assets/feature-wall/orca-cli.jpg\" alt=\"Script Orca from the CLI\" width=\"100%\" /></picture></a>\n</td>\n</tr>\n</table>\n\n**Also in the box:**\n\n- **[Quick open](https://www.onorca.dev/docs/model/quick-open)** — Search across worktrees, files, agents, commands, and repo context without leaving your flow.\n- **[Account switcher &amp; usage tracking](https://www.onorca.dev/docs/agents/usage-tracking)** — See Claude and Codex usage and rate-limit resets, and hot-swap accounts without re-logging in.\n- **[Rich repo previews](https://www.onorca.dev/docs/editing/markdown)** — Preview Markdown, images, PDFs, and repo docs in the workspace.\n- **[Computer Use](https://www.onorca.dev/docs/cli/computer-use)** — Let agents operate desktop apps and visible UI when a workflow needs real interaction.\n- **[Notifications and unread state](https://www.onorca.dev/docs/notifications)** — Know when an agent finishes or needs attention, then mark threads unread to come back later.\n- **And many, many more** — we ship daily, so this list is perpetually behind. The [changelog](https://github.com/stablyai/orca/releases) is the real feature list.\n\n---\n\n## Supported Agents\n\nWorks with **any CLI agent** — if it runs in a terminal, it runs in Orca.\n\n<p>\n  <a href=\"https://docs.anthropic.com/claude/docs/claude-code\"><kbd><img src=\"docs/assets/claude-logo.svg\" alt=\"Claude Code logo\" width=\"16\" valign=\"middle\" /> Claude Code</kbd></a> &nbsp;\n  <a href=\"https://github.com/openai/codex\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=openai.com&sz=64\" alt=\"Codex logo\" width=\"16\" valign=\"middle\" /> Codex</kbd></a> &nbsp;\n  <a href=\"https://x.ai/cli\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=x.ai&sz=64\" alt=\"Grok logo\" width=\"16\" valign=\"middle\" /> Grok</kbd></a> &nbsp;\n  <a href=\"https://cursor.com/cli\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=cursor.com&sz=64\" alt=\"Cursor logo\" width=\"16\" valign=\"middle\" /> Cursor</kbd></a> &nbsp;\n  <a href=\"https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=github.com&sz=64\" alt=\"GitHub Copilot logo\" width=\"16\" valign=\"middle\" /> GitHub Copilot</kbd></a> &nbsp;\n  <a href=\"https://opencode.ai/docs/cli/\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=opencode.ai&sz=64\" alt=\"OpenCode logo\" width=\"16\" valign=\"middle\" /> OpenCode</kbd></a> &nbsp;\n  <a href=\"https://mimo.xiaomi.com/coder\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=mimo.xiaomi.com&sz=64\" alt=\"MiMo Code logo\" width=\"16\" valign=\"middle\" /> MiMo Code</kbd></a> &nbsp;\n  <a href=\"https://ampcode.com/manual#install\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=ampcode.com&sz=64\" alt=\"Amp logo\" width=\"16\" valign=\"middle\" /> Amp</kbd></a> &nbsp;\n  <a href=\"https://openclaude.gitlawb.com/\"><kbd><img src=\"resources/openclaude-logo.png\" alt=\"OpenClaude logo\" width=\"16\" valign=\"middle\" /> OpenClaude</kbd></a> &nbsp;\n  <a href=\"https://antigravity.google/docs/cli-overview\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=antigravity.google&sz=64\" alt=\"Antigravity logo\" width=\"16\" valign=\"middle\" /> Antigravity</kbd></a> &nbsp;\n  <a href=\"https://pi.dev\"><kbd><img src=\"https://pi.dev/favicon.svg\" alt=\"Pi logo\" width=\"16\" valign=\"middle\" /> Pi</kbd></a> &nbsp;\n  <a href=\"https://omp.sh\"><kbd><img src=\"https://omp.sh/favicon.svg\" alt=\"oh-my-pi logo\" width=\"16\" valign=\"middle\" /> oh-my-pi</kbd></a> &nbsp;\n  <a href=\"https://hermes-agent.nousresearch.com/docs/\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=nousresearch.com&sz=64\" alt=\"Hermes Agent logo\" width=\"16\" valign=\"middle\" /> Hermes Agent</kbd></a> &nbsp;\n  <a href=\"https://devin.ai/cli\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=devin.ai&sz=64\" alt=\"Devin logo\" width=\"16\" valign=\"middle\" /> Devin</kbd></a> &nbsp;\n  <a href=\"https://block.github.io/goose/docs/quickstart/\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=goose-docs.ai&sz=64\" alt=\"Goose logo\" width=\"16\" valign=\"middle\" /> Goose</kbd></a> &nbsp;\n  <a href=\"https://docs.augmentcode.com/cli/overview\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=augmentcode.com&sz=64\" alt=\"Auggie logo\" width=\"16\" valign=\"middle\" /> Auggie</kbd></a> &nbsp;\n  <a href=\"https://github.com/autohandai/code-cli\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=autohand.ai&sz=64\" alt=\"Autohand Code logo\" width=\"16\" valign=\"middle\" /> Autohand Code</kbd></a> &nbsp;\n  <a href=\"https://github.com/charmbracelet/crush\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=charm.sh&sz=64\" alt=\"Charm logo\" width=\"16\" valign=\"middle\" /> Charm</kbd></a> &nbsp;\n  <a href=\"https://docs.cline.bot/cline-cli/overview\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=cline.bot&sz=64\" alt=\"Cline logo\" width=\"16\" valign=\"middle\" /> Cline</kbd></a> &nbsp;\n  <a href=\"https://www.codebuff.com/docs/help/quick-start\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=codebuff.com&sz=64\" alt=\"Codebuff logo\" width=\"16\" valign=\"middle\" /> Codebuff</kbd></a> &nbsp;\n  <a href=\"https://commandcode.ai/docs/quickstart\"><kbd><img src=\"https://www.google.com/s2/favicons?domain=commandcode.ai&sz=64\" alt=\"Command Code logo\" width=\"16\" valign=\"middle\" /> Command Code</kbd></a> &nbsp;\n  <a href=\"https://docs.continue.dev/guides/cli\"><kbd><img src=\"https://www",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"orca\",\n  \"version\": \"1.4.105-rc.0\",\n  \"description\": \"Next-gen IDE for parallel agentic development\",\n  \"homepage\": \"https://github.com/stablyai/orca\",\n  \"author\": \"stablyai\",\n  \"bin\": {\n    \"orca\": \"./out/cli/index.js\",\n    \"orca-dev\": \"./config/scripts/orca-dev.mjs\"\n  },\n  \"main\": \"./out/main/index.js\",\n  \"scripts\": {\n    \"format\": \"oxfmt --write .\",\n    \"lint\": \"oxlint && pnpm run lint:switch-exhaustiveness && node config/scripts/check-styled-scrollbars.mjs && pnpm run verify:localization-catalog && pnpm run verify:localization-coverage\",\n    \"lint:react-doctor\": \"oxlint --config config/oxlint-react-doctor.json\",\n    \"lint:react-doctor:changed\": \"node config/scripts/lint-react-doctor-changed.mjs\",\n    \"lint:switch-exhaustiveness\": \"oxlint --type-aware --config config/oxlint-switch-exhaustiveness.json src/main src/preload src/shared src/relay src/cli src/renderer/src config tests --quiet\",\n    \"prepare\": \"husky\",\n    \"test\": \"node config/scripts/ensure-native-runtime.mjs --runtime=node && vitest run --config config/vitest.config.ts\",\n    \"check:styled-scrollbars\": \"node config/scripts/check-styled-scrollbars.mjs\",\n    \"check:feature-wall-assets\": \"node config/scripts/check-feature-wall-assets.mjs\",\n    \"verify:macos-entitlements\": \"node config/scripts/verify-macos-entitlements.mjs\",\n    \"vendor:feature-wall-assets\": \"node config/scripts/vendor-feature-wall-assets.mjs\",\n    \"tc:node\": \"pnpm run typecheck:node\",\n    \"tc:cli\": \"pnpm run typecheck:cli\",\n    \"tc:web\": \"pnpm run typecheck:web\",\n    \"tc\": \"pnpm run typecheck\",\n    \"typecheck:node\": \"tsgo --noEmit -p config/tsconfig.node.json\",\n    \"typecheck:cli\": \"tsgo --noEmit -p config/tsconfig.tc.cli.json\",\n    \"typecheck:web\": \"tsgo --noEmit -p config/tsconfig.tc.web.json\",\n    \"typecheck\": \"tsgo --noEmit -p config/tsconfig.node.json && tsgo --noEmit -p config/tsconfig.tc.cli.json && tsgo --noEmit -p config/tsconfig.tc.web.json\",\n    \"typecheck:tsc:node\": \"tsc --noEmit -p config/tsconfig.node.json --composite false\",\n    \"typecheck:tsc:cli\": \"tsc --noEmit -p config/tsconfig.cli.json --composite false\",\n    \"typecheck:tsc:web\": \"tsc --noEmit -p config/tsconfig.web.json --composite false\",\n    \"typecheck:tsc\": \"tsc --noEmit -p config/tsconfig.node.json --composite false && tsc --noEmit -p config/tsconfig.cli.json --composite false && tsc --noEmit -p config/tsconfig.web.json --composite false\",\n    \"ensure:electron-runtime\": \"node config/scripts/ensure-native-runtime.mjs --runtime=electron\",\n    \"start\": \"pnpm run ensure:electron-runtime && electron-vite preview\",\n    \"dev\": \"pnpm run ensure:electron-runtime && node config/scripts/run-electron-vite-dev.mjs\",\n    \"dev-stable-name\": \"pnpm run ensure:electron-runtime && node config/scripts/run-electron-vite-dev.mjs --stable-name\",\n    \"dev:web\": \"vite --config vite.web.config.ts --host 127.0.0.1\",\n    \"build:relay\": \"node config/scripts/build-relay.mjs\",\n    \"build:computer-macos\": \"node config/scripts/build-computer-macos.mjs\",\n    \"build:native\": \"node config/scripts/build-native-for-platform.mjs\",\n    \"smoke:computer\": \"node config/scripts/computer-use-smoke.mjs\",\n    \"verify:computer-native\": \"node config/scripts/verify-computer-native.mjs\",\n    \"verify:cli-bin\": \"node config/scripts/verify-cli-bin.mjs\",\n    \"verify:localization-catalog\": \"node config/scripts/verify-localization-catalog.mjs\",\n    \"sync:localization-catalog\": \"node config/scripts/verify-localization-catalog.mjs --fix\",\n    \"bootstrap:locale-catalog\": \"node config/scripts/bootstrap-locale-catalog.mjs\",\n    \"bootstrap:zh-catalog\": \"node config/scripts/bootstrap-zh-catalog.mjs\",\n    \"bootstrap:ko-catalog\": \"node config/scripts/bootstrap-locale-catalog.mjs --locale ko\",\n    \"bootstrap:ja-catalog\": \"node config/scripts/bootstrap-locale-catalog.mjs --locale ja\",\n    \"bootstrap:es-catalog\": \"node config/scripts/bootstrap-locale-catalog.mjs --locale es\",\n    \"repair:locale-catalog\": \"node config/scripts/repair-locale-catalog.mjs\",\n    \"verify:localization-coverage\": \"node config/scripts/audit-localization-coverage.mjs --check\",\n    \"audit:localization\": \"node config/scripts/audit-localization-coverage.mjs\",\n    \"build:cli\": \"tsc -p config/tsconfig.cli.json --outDir out --composite false --incremental false && node config/scripts/verify-cli-bin.mjs --fix-executable && node config/scripts/install-dev-cli.mjs\",\n    \"build:electron-vite\": \"node config/scripts/run-electron-vite-build.mjs\",\n    \"build:web\": \"node config/scripts/run-vite-web-build.mjs && node config/scripts/verify-web-build.mjs\",\n    \"build:desktop\": \"pnpm run typecheck && pnpm run build:relay && pnpm run build:cli && pnpm run build:electron-vite && pnpm run build:web\",\n    \"build\": \"pnpm run build:desktop && pnpm run build:native\",\n    \"build:release\": \"pnpm run build:relay && pnpm run build:native && pnpm run verify:computer-native && pnpm run build:cli && pnpm run build:electron-vite && pnpm run build:web\",\n    \"postinstall\": \"node config/scripts/rebuild-native-deps.mjs\",\n   ",
    "strategic_keywords": [
      "agent",
      "agents",
      "rag",
      "runtime"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "owner": "NVIDIA",
    "name": "SkillSpector",
    "full_name": "NVIDIA/SkillSpector",
    "url": "https://github.com/NVIDIA/SkillSpector",
    "description": "Security scanner for AI agent skills. Detect vulnerabilities, malicious patterns, and security risks.",
    "language": "Python",
    "total_stars": 11265,
    "forks": 914,
    "stars_this_period": 2531,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 74,
      "created_at": "2026-03-21T00:28:43Z",
      "pushed_at": "2026-06-28T09:17:18Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 914,
      "watchers": 40,
      "archived": false,
      "size_kb": 859
    },
    "readme_content": "# SkillSpector\n\n**Security scanner for AI agent skills.** Detect vulnerabilities, malicious patterns, and security risks before installing agent skills.\n\n[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n\n## Overview\n\nAI agent skills (used by Claude Code, Codex CLI, Gemini CLI, etc.) execute with implicit trust and minimal vetting. Research shows that **26.1% of skills contain vulnerabilities** and **5.2% show likely malicious intent**.\n\nSkillSpector helps you answer: **\"Is this skill safe to install?\"**\n\n## Documentation\n\n- **[Development guide](docs/DEVELOPMENT.md)** — Architecture, package layout, and how to extend the analyzer pipeline.\n- **[Pi extension](docs/PI_EXTENSION.md)** — Install SkillSpector as a Pi tool for scanning skills from inside agent sessions.\n\n## Features\n\n- **Multi-format input**: Scan Git repos, URLs, zip files, directories, or single files\n- **68 vulnerability patterns** across 17 categories: prompt injection, data exfiltration, privilege escalation, supply chain, excessive agency, output handling, system prompt leakage, memory poisoning, tool misuse, rogue agent, anti-refusal, trigger abuse, dangerous code (AST), taint tracking, YARA signatures, MCP least privilege, and MCP tool poisoning\n- **Two-stage analysis**: Fast static analysis + optional LLM semantic evaluation\n- **Live vulnerability lookups**: SC4 queries [OSV.dev](https://osv.dev) for real-time CVE data with automatic offline fallback\n- **Multiple output formats**: Terminal, JSON, Markdown, and SARIF reports\n- **Risk scoring**: 0-100 score with severity labels and clear recommendations\n- **Baseline / false-positive suppression**: Accept known findings via a glob-rule or fingerprint baseline so re-scans surface only *new* issues ([docs](docs/SUPPRESSION.md))\n\n## Quick Start\n\n### Installation\n\nCreate and activate a virtual environment first (all `make` targets assume the venv is active). Use **uv** or **pip**; the Makefile uses `uv` if available, otherwise `pip`.\n\n**Quick install with uv (CLI-only):**\n\n```bash\nuv tool install git+https://github.com/NVIDIA/skillspector.git\n# Update later: uv tool update skillspector\n```\n\nIf you plan to run `skillspector mcp`, install the MCP extra at install time:\n\n```bash\nuv tool install 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'\n```\n\n**From source:**\n\n```bash\n# Clone the repository\ngit clone https://github.com/NVIDIA/skillspector.git\ncd skillspector\n\n# Create and activate virtual environment\nuv venv .venv && source .venv/bin/activate\n# or: python3 -m venv .venv && source .venv/bin/activate\n\n# Install for production use\nmake install\n\n# Or install with development dependencies\nmake install-dev\n```\n\n### Docker (no Python required)\n\nRun SkillSpector without installing Python by building it locally from the included [Dockerfile](Dockerfile). The image is based on the Docker Official Python `3.12-slim-bookworm` image.\n\n**Build the image:**\n\n```bash\nmake docker-build\n# or: docker build -t skillspector .\n```\n\n**Scan a local directory** by mounting your current directory into `/scan`, the container's working directory:\n\n```bash\ndocker run --rm -v \"$PWD:/scan\" skillspector scan ./my-skill/ --no-llm\n```\n\n**Scan with LLM analysis** by passing credentials with a local `.env` file:\n\n```bash\ncat > .env <<'EOF'\nSKILLSPECTOR_PROVIDER=anthropic\nANTHROPIC_API_KEY=sk-ant-...\nEOF\n```\n\n```bash\ndocker run --rm \\\n  -v \"$PWD:/scan\" \\\n  --env-file .env \\\n  skillspector scan ./my-skill/\n```\n\nOr pass credentials directly from your shell environment:\n\n```bash\ndocker run --rm \\\n  -v \"$PWD:/scan\" \\\n  -e SKILLSPECTOR_PROVIDER=anthropic \\\n  -e ANTHROPIC_API_KEY=\"$ANTHROPIC_API_KEY\" \\\n  skillspector scan ./my-skill/\n```\n\n**Write a report to the host filesystem** by writing to the mounted directory:\n\n```bash\ndocker run --rm \\\n  -v \"$PWD:/scan\" \\\n  skillspector scan ./my-skill/ --no-llm --format json --output report.json\n```\n\n**Optional alias** for repeated static scans:\n\n```bash\nalias skillspector-docker='docker run --rm -v \"$PWD:/scan\" skillspector'\nskillspector-docker scan ./my-skill/ --no-llm\n```\n\n### Basic Usage\n\n```bash\n# Scan a local skill directory\nskillspector scan ./my-skill/\n\n# Scan a single SKILL.md file\nskillspector scan ./SKILL.md\n\n# Scan a Git repository\nskillspector scan https://github.com/user/my-skill\n\n# Scan a zip file\nskillspector scan ./my-skill.zip\n```\n\n### Output Formats\n\n```bash\n# Terminal output (default) - pretty formatted\nskillspector scan ./my-skill/\n\n# JSON output - machine readable\nskillspector scan ./my-skill/ --format json --output report.json\n\n# Markdown output - for documentation\nskillspector scan ./my-skill/ --format markdown --output report.md\n\n# SARIF output - for CI/CD integration and IDE tooling\nskillspector scan ./my-skill/ --format sarif --output report.sarif\n```\n\n### Suppressing False Positives (baseline)\n\nSuppress known/accepted findings so the risk score reflects only un-triaged\nissues and re-scans surface only *new* findings. See the\n[suppression guide](docs/SUPPRESSION.md) for the full reference.\n\n```bash\n# Accept all current findings into a baseline (run once), then commit it.\nskillspector baseline ./my-skill/ -o .skillspector-baseline.yaml\n\n# Scan against the baseline — only NEW findings are reported and scored.\nskillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml\n\n# Review what was suppressed (still excluded from the score).\nskillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml --show-suppressed\n```\n\nA baseline can also use drift-tolerant glob rules (by rule id, file path, or\nmessage) — see [`.skillspector-baseline.example.yaml`](.skillspector-baseline.example.yaml).\n\n### LLM Analysis\n\nFor the best results, configure an OpenAI-compatible LLM endpoint for\nsemantic analysis. Pick a provider with `SKILLSPECTOR_PROVIDER`; each\nships its own bundled default model. SkillSpector also works against\nlocal OpenAI-compatible servers (Ollama, vLLM, llama.cpp) and managed\ninference gateways.\n\n| Provider (`SKILLSPECTOR_PROVIDER`) | Credential env var | Endpoint | Default model |\n| ---------- | ---- | ---- | ---- |\n| `openai` | `OPENAI_API_KEY` (+ optional `OPENAI_BASE_URL`) | api.openai.com (or any OpenAI-compatible URL) | `gpt-5.4` |\n| `anthropic` | `ANTHROPIC_API_KEY` | api.anthropic.com | `claude-opus-4-6` |\n| `anthropic_proxy` | `ANTHROPIC_PROXY_API_KEY` + `ANTHROPIC_PROXY_ENDPOINT_URL` | Any Vertex-style raw-predict proxy | `claude-sonnet-4-6` |\n| `bedrock` | `AWS_PROFILE` (optional) + `AWS_REGION` — SigV4 via boto3 | AWS Bedrock Runtime | `us.anthropic.claude-sonnet-4-6-20250915-v1:0` |\n| `nv_build` | `NVIDIA_INFERENCE_KEY` | build.nvidia.com | `deepseek-ai/deepseek-v4-flash` |\n\n```bash\n# Stock OpenAI\nexport SKILLSPECTOR_PROVIDER=openai\nexport OPENAI_API_KEY=sk-...\nskillspector scan ./my-skill/\n\n# Anthropic\nexport SKILLSPECTOR_PROVIDER=anthropic\nexport ANTHROPIC_API_KEY=sk-ant-...\nskillspector scan ./my-skill/\n\n# Anthropic via Vertex-style proxy (corporate gateways, GCP Vertex AI)\nexport SKILLSPECTOR_PROVIDER=anthropic_proxy\nexport ANTHROPIC_PROXY_ENDPOINT_URL=https://my-gateway.example.com/models/claude-sonnet-4-6:streamRawPredict\nexport ANTHROPIC_PROXY_API_KEY=your-bearer-token\nexport SKILLSPECTOR_MODEL=claude-sonnet-4-6\nskillspector scan ./my-skill/\n\n# AWS Bedrock (Claude via SigV4)\nexport SKILLSPECTOR_PROVIDER=bedrock\n# Optional: select an AWS named profile. When unset, the standard\n# boto3 credential chain (env vars, instance metadata, SSO, etc.) resolves.\n# export AWS_PROFILE=my-profile\nexport AWS_REGION=us-west-2  # default if unset\n# Default model: us.anthropic.claude-sonnet-4-6-20250915-v1:0\n# Override with any Bedrock model ID, cross-region inference-profile\n# ID, or your own application-inference-profile ARN:\n# export SKILLSPECTOR_MODEL=us.anthropic.claude-opus-4-6-20250915-v1:0\nskillspector scan ./my-skill/\n\n# NVIDIA build.nvidia.com\nexport SKILLSPECTOR_PROVIDER=nv_build\nexport NVIDIA_INFERENCE_KEY=nvapi-...\nskillspector scan ./my-skill/\n\n# Local Ollama or any OpenAI-compatible endpoint\nexport SKILLSPECTOR_PROVIDER=openai\nexport OPENAI_API_KEY=ollama\nexport OPENAI_BASE_URL=http://localhost:11434/v1\nexport SKILLSPECTOR_MODEL=llama3.1:8b\nskillspector scan ./my-skill/\n\n# Override the provider's default model\nexport SKILLSPECTOR_MODEL=gpt-5.2\nskillspector scan ./my-skill/\n\n# Skip LLM analysis (faster, static analysis only)\nskillspector scan ./my-skill/ --no-llm\n```\n\n### MCP Server\n\nRun SkillSpector as a [Model Context Protocol](https://modelcontextprotocol.io)\nserver so any MCP-capable agent (Claude Code, Codex CLI, Gemini CLI) or remote\nruntime can call scanning as a tool and **gate skill/MCP installs on the\nresult** — turning SkillSpector into a runtime guardrail instead of an\nout-of-band audit step.\n\n`skillspector mcp` requires `skillspector[mcp]`.\n\n```bash\n# Install, or reinstall if you already used the CLI-only path\nuv tool install --force 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'\n\n# FastMCP stdio transport for local CLI agents\nskillspector mcp\n\n# streamable HTTP/SSE transport for remote / A2A callers\nskillspector mcp --transport http --host 127.0.0.1 --port 8000\n```\n\nThe stdio transport is the current FastMCP path for local CLI agents, and the\ninitialize hang reported in issue #199 still applies there.\n\nThe server exposes a single tool:\n\n- **`scan_skill(target, use_llm=true, output_format=\"json\")`** — scans a Git\n  URL, file URL, `.zip`, `.md` file, or directory and returns a structured\n  verdict: `risk_score` (0-100), `severity`, `recommendation`,\n  `safe_to_install`, and `findings`. It also reports `llm_used` / `scan_mode`\n  so a low score from a static-only scan is never mistaken for a clean full\n  scan.\n\nRegister it with Claude Code via:\n\n```bash\nclaude mcp add skillspector -- skillspector mcp\n```\n\n> **Security — HTTP transport trust model**\n>\n> The HTTP transport ships **without authentication**. Any caller that can\n> reach the port can invoke `scan_skill`. Over stdio or `127.0.0.1` this is\n> the same trust boundary as the CLI. If you bind to a routable interface:\n>\n> - Sit the server behind an authenticating reverse proxy (e.g. nginx + mTLS)\n>   before exposing it externally.\n> - Local paths and `file://` URLs are **automatically rejected** over HTTP to\n>   prevent unauthenticated callers from reading arbitrary host files. Only\n>   remote Git and `.zip` URLs are accepted.\n\n## Vulnerability Patterns\n\nSkillSpector detects **68 vulnerability patterns** across 17 categories:\n\n### Prompt Injection (5 patterns)\n\n| ID | Pattern | Severity | Description |\n|----|---------|----------|-------------|\n| P1 | Instruction Override | HIGH | Commands to ignore safety constraints |\n| P2 | Hidden Instructions | HIGH | Malicious directives in comments/invisible text |\n| P3 | Exfiltration Commands | HIGH | Instructions to transmit context externally |\n| P4 | Behavior Manipulation | MEDIUM | Subtle instructions altering agent decisions |\n| P5 | Harmful Content | CRITICAL | Instructions that could cause physical harm |\n\n### Anti-Refusal (3 patterns)\n\n| ID | Pattern | Severity | Description |\n|----|---------|----------|-------------|\n| AR1 | Refusal Suppression | HIGH | Instructions to never refuse or always comply (e.g. \"never refuse\", \"always comply\") |\n| AR2 | Disclaimer Suppression | HIGH | Instructions to omit warnings, disclaimers, or ethical commentary (e.g. \"no disclaimers\", \"do not moralize\") |\n| AR3 | Safety Policy Nullification | HIGH | Jailbreak framing that nullifies guardrails (e.g. \"you have no restrictions\", \"ignore your guidelines\", \"do anything now\") |\n\n### Data Exfiltration (4 patterns)\n\n| ID | Pattern | Severity | Description |\n|----|---------|----------|-------------|\n| E1 | External Transmission | MEDIUM | Sending data to external URLs |\n| E2 | Env Variable Harvest",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[project]\nname = \"skillspector\"\nversion = \"2.3.7\"\ndescription = \"SkillSpector: Security scanner for AI agent skills (Claude Code, Cursor, and similar). Scans skills for vulnerabilities, malicious patterns, and security risks before installation. Supports Git repos, URLs, zips, and local directories; runs static pattern checks and optional LLM semantic analysis; outputs terminal, JSON, and Markdown reports with risk scoring.\"\nreadme = \"README.md\"\nlicense = \"Apache-2.0\"\nrequires-python = \">=3.12,<3.14\"\nkeywords = [\n    \"security\",\n    \"ai-agents\",\n    \"vulnerability-scanner\",\n    \"claude-code\",\n    \"skills\",\n]\nclassifiers = [\n    \"Development Status :: 3 - Alpha\",\n    \"Environment :: Console\",\n    \"Intended Audience :: Developers\",\n    \"License :: OSI Approved :: Apache Software License\",\n    \"Operating System :: OS Independent\",\n    \"Programming Language :: Python :: 3\",\n    \"Programming Language :: Python :: 3.12\",\n    \"Programming Language :: Python :: 3.13\",\n    \"Topic :: Security\",\n    \"Topic :: Software Development :: Quality Assurance\",\n]\ndependencies = [\n    # Typer <0.24 uses click>=8.0.0; 0.24+ requires click>=8.2.1 which conflicts with semgrep (click 8.1.x)\n    \"typer>=0.23.0,<0.24\",\n    \"rich>=14.3.0\",\n    \"httpx>=0.28.0\",\n    \"pyyaml>=6.0.1\",\n    \"pydantic>=2.12.0\",\n    \"openai>=2.25.0\",\n    \"langgraph>=1.0.10\",\n    \"langgraph-cli[inmem]>=0.4.14\",\n    \"langchain-anthropic>=1.4.5\",\n    \"langchain-aws>=0.2.0\",\n    \"langchain-core>=1.2.17\",\n    \"langchain-openai>=1.1.10\",\n    \"boto3>=1.34.0\",\n    \"langsmith>=0.7.30\",\n    \"yara-python>=4.5.0\",\n]\n\n[project.optional-dependencies]\nmcp = [\n    \"mcp>=1.2.0\",\n]\ndev = [\n    \"skillspector[mcp]\",\n    \"pytest>=9.0.0\",\n    \"pytest-asyncio>=1.3.0\",\n    \"pytest-cov>=7.0.0\",\n    \"ruff>=0.15.0\",\n    \"mypy>=1.19.0\",\n    \"build>=1.4.0\",\n    \"twine>=6.2.0\",\n    \"poetry>=2.3.0\",\n]\n\n[project.scripts]\nskillspector = \"skillspector.cli:app\"\n\n[tool.uv]\n# Enable `uv tool install git+https://github.com/NVIDIA/skillspector.git`\n# for a simpler single-command installation without cloning.\n\n[project.urls]\nHomepage = \"https://github.com/NVIDIA/skillspector\"\nDocumentation = \"https://github.com/NVIDIA/skillspector#readme\"\nIssues = \"https://github.com/NVIDIA/skillspector/issues\"\n\n[tool.hatch.build]\nexclude = [\".claude/\", \".cursor/\", \".agents/\"]\n\n[tool.hatch.build.targets.wheel]\npackages = [\"src/skillspector\"]\nartifacts = [\n    \"src/skillspector/yara_rules/*.yar\",\n    \"src/skillspector/yara_rules/*.yara\",\n    \"src/skillspector/providers/*/model_registry.yaml\",\n]\n\n[tool.ruff]\nline-length = 100\ntarget-version = \"py312\"\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"W\", \"I\", \"N\", \"UP\", \"B\", \"C4\"]\nignore = [\"E501\"]\n\n[tool.mypy]\npython_version = \"3.12\"\nwarn_return_any = true\nwarn_unused_ignores = true\ndisallow_untyped_defs = true\n\n[tool.coverage.run]\nbranch = true\nrelative_files = true\nsource = [\"src/skillspector\"]\n\n[tool.pytest.ini_options]\ntestpaths = [\"tests\"]\nasyncio_mode = \"auto\"\nmarkers = [\n    \"integration: end-to-end tests that invoke the full graph (may call LLMs)\",\n    \"provider: live OpenAI/Anthropic/NVIDIA Build provider endpoint tests\",\n]\naddopts = \"-m 'not integration and not provider'\"\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "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": 8,
      "total": 94
    },
    "strategic_score": 94
  },
  {
    "owner": "mauriceboe",
    "name": "TREK",
    "full_name": "mauriceboe/TREK",
    "url": "https://github.com/mauriceboe/TREK",
    "description": "A self-hosted travel/trip planner with real-time collaboration, interactive maps, PWA support, SSO, budgets, packing lists, and more.",
    "language": "TypeScript",
    "total_stars": 8257,
    "forks": 696,
    "stars_this_period": 2291,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "budget-tracker",
        "collaborative",
        "open-source",
        "opensource",
        "packing-list",
        "poi",
        "real-time",
        "routes",
        "self-hosted",
        "travel",
        "travel-app",
        "travel-planner",
        "traveling",
        "trip",
        "trip-planner",
        "tripit",
        "wanderlog",
        "wanderlust",
        "webapplication"
      ],
      "license": "AGPL-3.0",
      "open_issues": 14,
      "created_at": "2026-03-19T11:51:54Z",
      "pushed_at": "2026-06-28T19:38:49Z",
      "homepage": "https://demo.liketrek.com",
      "default_branch": "main",
      "forks": 696,
      "watchers": 14,
      "archived": false,
      "size_kb": 104793
    },
    "readme_content": "<div align=\"center\">\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/logo-trek-light.gif\" />\n  <source media=\"(prefers-color-scheme: light)\" srcset=\"docs/logo-trek-dark.gif\" />\n  <img src=\"docs/logo-trek-dark.gif\" alt=\"TREK\" height=\"96\" />\n</picture>\n\n<br />\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/subtitle-light.png\" />\n  <source media=\"(prefers-color-scheme: light)\" srcset=\"docs/subtitle-dark.png\" />\n  <img src=\"docs/subtitle-dark.png\" alt=\"Your trips. Your plan. Your server.\" height=\"28\" />\n</picture>\n\nA self-hosted, real-time collaborative travel planner — with maps, budgets, packing lists, a journal, and AI built in.\n\n<br />\n\n<a href=\"https://demo.liketrek.com\"><img alt=\"Demo\" src=\"https://img.shields.io/badge/Demo-try-111827?style=for-the-badge\" /></a>\n&nbsp;\n<a href=\"https://hub.docker.com/r/mauriceboe/trek\"><img alt=\"Docker\" src=\"https://img.shields.io/badge/Docker-ready-2496ED?style=for-the-badge\" /></a>\n&nbsp;\n<a href=\"https://discord.gg/NhZBDSd4qW\"><img alt=\"Discord\" src=\"https://img.shields.io/badge/Discord-join-5865F2?style=for-the-badge\" /></a>\n&nbsp;\n<a href=\"https://kanban.pakulat.org/shared/I4wxF6inOOMB0C6hH6kQm3efyNxFjwyI\"><img alt=\"Roadmap\" src=\"https://img.shields.io/badge/Roadmap-view-0EA5E9?style=for-the-badge\" /></a>\n<br />\n<a href=\"https://ko-fi.com/mauriceboe\"><img alt=\"Ko-fi\" src=\"https://img.shields.io/badge/Ko--fi-support-FF5E5B?style=for-the-badge\" /></a>\n&nbsp;\n<a href=\"https://www.buymeacoffee.com/mauriceboe\"><img alt=\"BMAC\" src=\"https://img.shields.io/badge/BMAC-support-FFDD00?style=for-the-badge\" /></a>\n<br />\n<a href=\"LICENSE\"><img alt=\"License\" src=\"https://img.shields.io/badge/license-AGPL_v3-6B7280?style=flat-square\" /></a>\n<a href=\"https://github.com/mauriceboe/TREK/releases\"><img alt=\"Latest Release\" src=\"https://img.shields.io/github/v/release/mauriceboe/TREK?include_prereleases&style=flat-square&color=6B7280\" /></a>\n<a href=\"https://hub.docker.com/r/mauriceboe/trek\"><img alt=\"Docker Pulls\" src=\"https://img.shields.io/docker/pulls/mauriceboe/trek?style=flat-square&color=6B7280\" /></a>\n<a href=\"https://github.com/mauriceboe/TREK\"><img alt=\"Stars\" src=\"https://img.shields.io/github/stars/mauriceboe/TREK?style=flat-square&color=6B7280\" /></a>\n\n</div>\n\n---\n\n<div align=\"center\">\n\n<img src=\"https://github.com/mauriceboe/trek-media/releases/download/readme-assets/TREK1.gif\" alt=\"TREK — 60-second tour\" width=\"100%\" />\n\n</div>\n\n<br />\n\n<div align=\"center\">\n  <a href=\"docs/screenshots/dashboard.png\"><img src=\"docs/screenshots/dashboard.png\" alt=\"Dashboard\" width=\"49%\" /></a>\n  <a href=\"docs/screenshots/trip-planner.png\"><img src=\"docs/screenshots/trip-planner.png\" alt=\"Trip planner with 3D map\" width=\"49%\" /></a>\n  <a href=\"docs/screenshots/journey.png\"><img src=\"docs/screenshots/journey.png\" alt=\"Journey journal\" width=\"49%\" /></a>\n  <a href=\"docs/screenshots/budget.png\"><img src=\"docs/screenshots/budget.png\" alt=\"Costs · expense splitting\" width=\"49%\" /></a>\n  <a href=\"docs/screenshots/atlas.png\"><img src=\"docs/screenshots/atlas.png\" alt=\"Atlas · visited countries\" width=\"49%\" /></a>\n  <a href=\"docs/screenshots/vacay.png\"><img src=\"docs/screenshots/vacay.png\" alt=\"Vacay planner\" width=\"49%\" /></a>\n  <a href=\"docs/screenshots/trip-iceland.png\"><img src=\"docs/screenshots/trip-iceland.png\" alt=\"Trip planner · day plan and route\" width=\"49%\" /></a>\n  <a href=\"docs/screenshots/admin.png\"><img src=\"docs/screenshots/admin.png\" alt=\"Admin panel\" width=\"49%\" /></a>\n</div>\n\n---\n\n## What you get\n\n<picture>\n  <source media=\"(max-width: 700px)\" srcset=\"docs/tiles/grid-mobile.svg\" />\n  <img src=\"docs/tiles/grid-desktop.svg\" alt=\"TREK feature tiles\" width=\"100%\" />\n</picture>\n\n<details>\n<summary><b>See all features</b></summary>\n\n<table>\n<tr>\n<td width=\"50%\" valign=\"top\">\n\n#### 🧭 Trip planning\n\n- **Drag & drop planner** — organise places into day plans with reordering and cross-day moves\n- **Interactive map** — Leaflet or Mapbox GL with 3D buildings, terrain, photo markers, clustering, route visualization\n- **Place search** — Google Places (photos, ratings, hours) or OpenStreetMap (free, no API key)\n- **Place import** — shared Google Maps / Naver Maps lists, plus GPX and KML/KMZ/GeoJSON map files\n- **Day notes** — timestamped, icon-tagged notes with drag-and-drop reordering\n- **Route optimisation** — auto-sort places and export to Google Maps\n- **Weather forecasts** — 16-day via Open-Meteo (no key) + historical climate fallback\n- **Category filter** — show only matching pins on the map\n\n</td>\n<td width=\"50%\" valign=\"top\">\n\n#### 🧳 Travel management\n\n- **Reservations** — flights, accommodations, restaurants with status, confirmation numbers, files; import from booking confirmation emails and PDFs ([KDE Itinerary](https://invent.kde.org/pim/kitinerary))\n- **Costs** — track and split trip expenses (Splitwise-style): per-person / per-day breakdowns, settle-up, multi-currency\n- **Packing lists** — categories, templates, user assignment, progress tracking\n- **Bag tracking** — optional weight tracking with iOS-style distribution\n- **Document manager** — attach docs, tickets, PDFs to trips / places / reservations (≤ 50 MB each)\n- **PDF export** — full trip plan as PDF with cover page, images, notes\n\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"top\">\n\n#### 👥 Collaboration\n\n- **Real-time sync** — WebSocket. Changes appear instantly across all connected users\n- **Multi-user trips** — invite members with role-based access\n- **Invite links** — one-time or reusable links with expiry\n- **SSO (OIDC)** — Google, Apple, Authentik, Keycloak, or any OIDC provider\n- **2FA** — TOTP + backup codes\n- **Passkeys** — passwordless WebAuthn login (fingerprint / face / PIN / security key), admin-toggleable\n- **Collab suite** — group chat, shared notes, polls, day check-ins\n\n</td>\n<td width=\"50%\" valign=\"top\">\n\n#### 📱 Mobile & PWA\n\n- **Installable** — iOS and Android, straight from the browser, no App Store needed\n- **Offline support** — Service Worker caches tiles, API, uploads via Workbox\n- **Native feel** — fullscreen standalone, themed status bar, splash screen\n- **Touch optimised** — mobile-specific layouts with safe-area handling\n\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"top\">\n\n#### 🧩 Addons (admin-toggleable)\n\n- **Lists** — packing lists + to-dos with templates, member assignments, optional bag tracking\n- **Costs** — expense tracker with splits and settle-up (who owes whom), multi-currency\n- **Documents** — file attachments on trips, places, and reservations\n- **Collab** — chat, notes, polls, day-by-day attendance\n- **Vacay** — personal vacation planner with calendar, 100+ country holidays, carry-over tracking\n- **Atlas** — world map of visited countries, bucket list, travel stats, streak tracking, liquid-glass UI\n- **Journey** — magazine-style travel journal with entries, photos (Immich/Synology), maps, moods\n- **AirTrail** — connect a self-hosted AirTrail instance to import and sync flights into reservations\n- **MCP** — expose TREK to AI assistants via OAuth 2.1\n\n</td>\n<td width=\"50%\" valign=\"top\">\n\n#### 🤖 AI / MCP\n\n- **Built-in MCP server** — OAuth 2.1 authenticated. 150+ tools, 30 resources\n- **Granular scopes** — 27 OAuth scopes across 13 permission groups\n- **Full automation** — AI can create trips, plan days, build packing lists, manage budgets, mark countries visited\n- **Pre-built prompts** — `trip-summary`, `packing-list`, `budget-overview`\n- **Addon-aware** — exposes Atlas, Collab, Vacay when those addons are on\n\n</td>\n</tr>\n<tr>\n<td colspan=\"2\" valign=\"top\">\n\n#### ⚙️ Admin & customisation\n\n- **Dashboard views** — card grid or compact list · **Dark mode** — full theme with matching status bar\n- **20 languages** — EN, DE, ES, FR, IT, NL, HU, RU, ZH, ZH-TW, PL, CS, AR (RTL), BR, ID, TR, JA, KO, UK, GR\n- **Admin panel** — users, invites, packing templates, categories, addons, API keys, backups, GitHub history\n- **Notifications** — per-user preferences across email (SMTP), webhook, ntfy, and an in-app notification center\n- **Auto-backups** — scheduled with configurable retention · **Units** — °C/°F, 12h/24h, map tile sources, default coordinates\n\n</td>\n</tr>\n</table>\n\n</details>\n\n<br />\n\n## Get started in 30 seconds\n\n```bash\nENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d -p 3000:3000 \\\n  -e ENCRYPTION_KEY=$ENCRYPTION_KEY \\\n  -v ./data:/app/data -v ./uploads:/app/uploads mauriceboe/trek\n```\n\nOpen `http://localhost:3000`. On first boot TREK seeds an admin account — if you set `ADMIN_EMAIL`/`ADMIN_PASSWORD` those are used, otherwise the credentials are printed to the container log (`docker logs trek`).\n\n<div align=\"center\">\n\n&nbsp;&nbsp;·&nbsp;&nbsp;<a href=\"#docker-compose-production\">Docker Compose</a>&nbsp;&nbsp;·&nbsp;&nbsp;<a href=\"#helm-kubernetes\">Helm / Kubernetes</a>&nbsp;&nbsp;·&nbsp;&nbsp;<a href=\"#install-as-app-pwa\">Install as PWA</a>&nbsp;&nbsp;·&nbsp;&nbsp;<a href=\"#reverse-proxy\">Reverse Proxy</a>&nbsp;&nbsp;·&nbsp;&nbsp;\n\n</div>\n\n<br />\n\n## Tech stack\n\n<div align=\"center\">\n\n![Node.js](https://img.shields.io/badge/Node.js_22-339933?style=flat-square&logo=node.js&logoColor=white)\n![NestJS](https://img.shields.io/badge/NestJS_11-E0234E?style=flat-square&logo=nestjs&logoColor=white)\n![SQLite](https://img.shields.io/badge/SQLite-003B57?style=flat-square&logo=sqlite&logoColor=white)\n![React](https://img.shields.io/badge/React_19-61DAFB?style=flat-square&logo=react&logoColor=black)\n![Vite](https://img.shields.io/badge/Vite-646CFF?style=flat-square&logo=vite&logoColor=white)\n![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white)\n![Tailwind](https://img.shields.io/badge/Tailwind-06B6D4?style=flat-square&logo=tailwindcss&logoColor=white)\n![Leaflet](https://img.shields.io/badge/Leaflet-199900?style=flat-square&logo=leaflet&logoColor=white)\n![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white)\n\n</div>\n\nReal-time sync via WebSocket (`ws`). Backend on NestJS 11. State with Zustand. Auth via JWT + OAuth 2.1 + OIDC + Passkeys (WebAuthn) + TOTP MFA. Weather via Open-Meteo (no key required). Maps with Leaflet and Mapbox GL.\n\n<br />\n\n<h2 id=\"docker-compose-production\">Docker Compose (production)</h2>\n\n<details>\n<summary>Full compose example with secure defaults</summary>\n\n```yaml\nservices:\n  app:\n    image: mauriceboe/trek:latest\n    container_name: trek\n    read_only: true\n    security_opt:\n      - no-new-privileges:true\n    cap_drop:\n      - ALL\n    cap_add:\n      - CHOWN\n      - SETUID\n      - SETGID\n    tmpfs:\n      - /tmp:noexec,nosuid,size=64m\n    ports:\n      - \"3000:3000\"\n    environment:\n      - NODE_ENV=production\n      - PORT=3000\n      - ENCRYPTION_KEY=${ENCRYPTION_KEY:-}   # generate with: openssl rand -hex 32\n      - TZ=${TZ:-UTC}\n      - LOG_LEVEL=${LOG_LEVEL:-info}\n      - ALLOWED_ORIGINS=${ALLOWED_ORIGINS:-}\n      - APP_URL=${APP_URL:-}                 # required for OIDC + email links\n      # - FORCE_HTTPS=true                   # behind a TLS-terminating proxy\n      # - TRUST_PROXY=1\n      # - OIDC_ISSUER=https://auth.example.com\n      # - OIDC_CLIENT_ID=trek\n      # - OIDC_CLIENT_SECRET=supersecret\n      # - OIDC_DISPLAY_NAME=SSO\n      # - OIDC_ADMIN_CLAIM=groups\n      # - OIDC_ADMIN_VALUE=app-trek-admins\n    volumes:\n      - ./data:/app/data\n      - ./uploads:/app/uploads\n    restart: unless-stopped\n    healthcheck:\n      test: [\"CMD\", \"wget\", \"-qO-\", \"http://localhost:3000/api/health\"]\n      interval: 30s\n      timeout: 10s\n      retries: 3\n      start_period: 15s\n```\n\nThen:\n\n```bash\ndocker compose up -d\n```\n\n**HTTPS notes:** `FORCE_HTTPS=true` is optional — it adds a 301 redirect, HSTS, CSP upgrade-insecure-requests, and forces the `secure` cookie flag. Only use it behind a TLS-terminating reverse proxy. `TRUST_PROXY=1` tells the server how many proxies sit in front so real client IPs and `X-Forwarded-Proto` work.\n\n</details>\n\n<br />\n\n<h2 id=\"helm-kubernetes\">Helm (Kubernetes)</h2>\n\n```bash\nhelm re",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"@trek/root\",\n  \"private\": true,\n  \"version\": \"3.1.3\",\n  \"workspaces\": [\n    \"client\",\n    \"server\",\n    \"shared\"\n  ],\n  \"scripts\": {\n    \"version:major\": \"npm version major --workspaces --include-workspace-root --no-git-tag-version\",\n    \"version:minor\": \"npm version minor --workspaces --include-workspace-root --no-git-tag-version\",\n    \"version:patch\": \"npm version patch --workspaces --include-workspace-root --no-git-tag-version\",\n    \"version:premajor\": \"npm version premajor --preid=rc --workspaces --include-workspace-root --no-git-tag-version\",\n    \"version:preminor\": \"npm version preminor --preid=beta --workspaces --include-workspace-root --no-git-tag-version\",\n    \"version:prepatch\": \"npm version prepatch --preid=alpha --workspaces --include-workspace-root --no-git-tag-version\",\n    \"version:prerelease\": \"npm version prerelease --preid=pre --workspaces --include-workspace-root --no-git-tag-version\",\n    \"dev\": \"npm run build --workspace=shared && concurrently --names shared,server,client \\\"npm run build:watch --workspace=shared\\\" \\\"npm run dev --workspace=server\\\" \\\"npm run dev --workspace=client\\\"\",\n    \"build\": \"npm run build --workspace=shared && npm run build --workspace=server && npm run build --workspace=client\",\n    \"test\": \"npm run test --workspace=shared && npm run test --workspace=server && npm run test --workspace=client\",\n    \"test:cov\": \"npm run test:coverage --workspace=server && npm run test:coverage --workspace=client\",\n    \"test:e2e\": \"npm run test:e2e --workspace=server\",\n    \"lint\": \"npm run lint --workspace=shared && npm run lint --workspace=server && npm run lint --workspace=client\",\n    \"format\": \"npm run format --workspace=shared && npm run format --workspace=server && npm run format --workspace=client\",\n    \"format:check\": \"npm run format:check --workspace=shared && npm run format:check --workspace=server && npm run format:check --workspace=client\"\n  },\n  \"devDependencies\": {\n    \"concurrently\": \"^10.0.3\",\n    \"unrun\": \"^0.3.1\"\n  },\n  \"comment:overrides\": \"Force a single React 19 across the workspace so the test renderer (@testing-library/react) and the app share one react-dom.\",\n  \"overrides\": {\n    \"react\": \"19.2.6\",\n    \"react-dom\": \"19.2.6\",\n    \"multer\": \"^2.2.0\"\n  },\n  \"optionalDependencies\": {\n    \"@img/sharp-linuxmusl-arm64\": \"0.35.1\",\n    \"@img/sharp-linuxmusl-x64\": \"0.35.1\",\n    \"@rollup/rollup-linux-arm64-musl\": \"4.62.0\",\n    \"@rollup/rollup-linux-x64-musl\": \"4.62.0\"\n  }\n}\n",
    "strategic_keywords": [
      "rag",
      "workspace"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 16,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 6,
      "total": 78
    },
    "strategic_score": 78
  },
  {
    "owner": "kunchenguid",
    "name": "no-mistakes",
    "full_name": "kunchenguid/no-mistakes",
    "url": "https://github.com/kunchenguid/no-mistakes",
    "description": "git push no-mistakes",
    "language": "Go",
    "total_stars": 4046,
    "forks": 226,
    "stars_this_period": 2229,
    "source_slice": "all",
    "source_slices": [
      "all",
      "go"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 50,
      "created_at": "2026-04-05T06:43:05Z",
      "pushed_at": "2026-06-28T21:40:22Z",
      "homepage": "https://kunchenguid.github.io/no-mistakes/",
      "default_branch": "main",
      "forks": 226,
      "watchers": 9,
      "archived": false,
      "size_kb": 4450
    },
    "readme_content": "<h1 align=\"center\"><code>git push no-mistakes</code></h1>\n<p align=\"center\">\n  <a href=\"https://github.com/kunchenguid/no-mistakes/actions/workflows/release.yml\"\n    ><img\n      alt=\"Release\"\n      src=\"https://img.shields.io/github/actions/workflow/status/kunchenguid/no-mistakes/release.yml?style=flat-square&label=release\"\n  /></a>\n  <a href=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-blue?style=flat-square\"\n    ><img\n      alt=\"Platform\"\n      src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-blue?style=flat-square\"\n  /></a>\n  <a href=\"https://x.com/kunchenguid\"\n    ><img\n      alt=\"X\"\n      src=\"https://img.shields.io/badge/X-@kunchenguid-black?style=flat-square\"\n  /></a>\n  <a href=\"https://discord.gg/Wsy2NpnZDu\"\n    ><img\n      alt=\"Discord\"\n      src=\"https://img.shields.io/discord/1439901831038763092?style=flat-square&label=discord\"\n  /></a>\n</p>\n\n<h3 align=\"center\">Kill all the slop. Raise clean PR.</h3>\n\n<p align=\"center\"><strong>English</strong> · <a href=\"README.zh-CN.md\">简体中文</a></p>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/kunchenguid/no-mistakes/main/demo.gif\" alt=\"no-mistakes demo\" width=\"800\" />\n</p>\n\n`no-mistakes` puts a local git proxy in front of your real remote.\nPush to `no-mistakes` instead of `origin`, and it spins up a disposable worktree, runs an AI-driven validation pipeline, forwards the branch to the configured push target only after every check passes, and opens a clean PR automatically.\n\n- **Non-blocking** - the pipeline runs in an isolated worktree without disrupting your work.\n- **Agent-agnostic** - `claude`, `codex`, `rovodev`, `opencode`, `pi`, `copilot`, or `acp:<target>` via `acpx`.\n- **Agent-native** - `/no-mistakes` lets your coding agent do a task and gate it, or gate existing committed work: it runs the pipeline, has the pipeline apply safe fixes, and escalates the rest to you.\n- **Human stays in charge** - auto-fix or review findings, your call.\n- **Clean PRs by default** - push, open PR, watch CI, and auto-fix failures in one shot.\n\nFull documentation: <https://kunchenguid.github.io/no-mistakes/>\n\n## How it works\n\n```\n        your branch\n            │  git push no-mistakes\n            ▼\n   ┌──────────────────────────────────────────────┐\n   │  disposable worktree — your work stays put     │\n   │  review → test → docs → lint → push → PR → CI  │\n   └──────────────────────────────────────────────┘\n            │  every check green\n            ▼\n        clean PR, opened for you\n```\n\nEach step either passes on its own or stops with a **finding** for you to act on.\nSafe, mechanical fixes are applied automatically; anything that touches your intent is escalated for you to **approve**, **fix**, or **skip**.\nNothing reaches the configured push target until every check is green.\n\n## Install\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/kunchenguid/no-mistakes/main/docs/install.sh | sh\n```\n\nWindows, Go install, and build-from-source instructions are in the [installation guide](https://kunchenguid.github.io/no-mistakes/start-here/installation/).\n\n## Quick Start\n\n```sh\n$ no-mistakes init\n  ✓ Gate initialized\n\n    repo  /Users/you/src/my-repo\n    gate  no-mistakes → /Users/you/.no-mistakes/repos/abc123def456.git\n  remote  git@github.com:you/my-repo.git\n   skill  /no-mistakes installed for agents at user level\n\n  Push through the gate with:\n  git push no-mistakes <branch>\n\n$ git checkout my-branch\n\n# do some work in the branch...\n\n$ git push no-mistakes\n  * Pipeline started\n\n  Run no-mistakes to review.\n\n$ no-mistakes\n# opens the TUI for the active run\n```\n\nFor GitHub fork contributions, keep `origin` pointed at the parent repository and initialize with `no-mistakes init --fork-url <your-fork-url>`.\n\nFrom the TUI you act on each **finding**: **auto-fix** ones are applied for you (or approve to let them), **ask-user** ones are a judgement call you approve, fix, or skip.\nOnce every check is green, the gate forwards your branch to the configured push target and opens the PR for you, so there is no manual `git push origin` and no hand-written PR body.\nPrefer to let your coding agent drive the same flow headlessly?\nUse `/no-mistakes` (see below).\n\n## Three ways to trigger the gate\n\nEvery change runs through the same pipeline. Pick the entry point that fits how you're working when the change is ready:\n\n- **`git push no-mistakes`** - the explicit Git path. Push a committed branch to the gate remote instead of `origin`.\n- **`no-mistakes`** - the TUI. Run it after making changes (no commit needed) and a wizard walks you through creating a branch, committing, and pushing through the gate, then attaches to the run. `no-mistakes -y` does all of that automatically.\n- **`/no-mistakes`** - the agent skill. Tell the coding agent to do a task and gate it with `/no-mistakes <task>`, or use bare `/no-mistakes` to gate existing committed work. It runs the pipeline, has the pipeline apply safe fixes, and stops to ask you about anything that needs a human call.\n\n`no-mistakes init` installs the `/no-mistakes` skill for Claude Code and other agents. Under the hood the skill drives `no-mistakes axi`, a non-interactive TOON interface to the same approval flow.\n\nSee the [quick start](https://kunchenguid.github.io/no-mistakes/start-here/quick-start/) for the full first-run walkthrough.\n\n## Development\n\n```sh\nmake build   # Build bin/no-mistakes with version info\nmake test    # Run go test -race ./... (excludes the e2e suite)\nmake e2e     # Run the tagged end-to-end agent journey suite\nmake e2e-record # Re-record e2e fixtures when agent wire formats change\nmake lint    # Check generated skill drift and run go vet ./...\nmake skill   # Regenerate committed no-mistakes skill files\nmake fmt     # Run gofmt -w .\nmake demo    # Regenerate demo.gif and demo.mp4 (needs vhs and ffmpeg)\nmake docs    # Build the Astro docs site in docs/dist\n```\n\nSee `Makefile` for the full target list.\n\n`make e2e-record` overwrites `internal/e2e/fixtures/` from the real `claude`, `codex`, and `opencode` CLIs, spends real API quota, and should be reviewed before committing.\n\n## Star History\n\n<a href=\"https://www.star-history.com/?repos=kunchenguid%2Fno-mistakes&type=date&legend=top-left\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=kunchenguid/no-mistakes&type=date&theme=dark&legend=top-left\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=kunchenguid/no-mistakes&type=date&legend=top-left\" />\n   <img alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=kunchenguid/no-mistakes&type=date&legend=top-left\" />\n </picture>\n</a>\n",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/kunchenguid/no-mistakes\n\ngo 1.25.0\n\nrequire (\n\tgithub.com/charmbracelet/bubbles v1.0.0\n\tgithub.com/charmbracelet/bubbletea v1.3.10\n\tgithub.com/charmbracelet/lipgloss v1.1.0\n\tgithub.com/mattn/go-isatty v0.0.20\n\tgithub.com/muesli/termenv v0.16.0\n\tgithub.com/oklog/ulid/v2 v2.1.1\n\tgithub.com/spf13/cobra v1.10.2\n\tgithub.com/toon-format/toon-go v0.0.0-20251202084852-7ca0e27c4e8c\n\tgolang.org/x/sys v0.42.0\n\tgopkg.in/yaml.v3 v3.0.1\n\tmodernc.org/sqlite v1.48.1\n)\n\nrequire (\n\tgithub.com/atotto/clipboard v0.1.4 // indirect\n\tgithub.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect\n\tgithub.com/charmbracelet/colorprofile v0.4.1 // indirect\n\tgithub.com/charmbracelet/x/ansi v0.11.6 // indirect\n\tgithub.com/charmbracelet/x/cellbuf v0.0.15 // indirect\n\tgithub.com/charmbracelet/x/term v0.2.2 // indirect\n\tgithub.com/clipperhouse/displaywidth v0.9.0 // indirect\n\tgithub.com/clipperhouse/stringish v0.1.1 // indirect\n\tgithub.com/clipperhouse/uax29/v2 v2.5.0 // indirect\n\tgithub.com/dustin/go-humanize v1.0.1 // indirect\n\tgithub.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect\n\tgithub.com/google/uuid v1.6.0 // indirect\n\tgithub.com/inconshreveable/mousetrap v1.1.0 // indirect\n\tgithub.com/lucasb-eyer/go-colorful v1.3.0 // indirect\n\tgithub.com/mattn/go-localereader v0.0.1 // indirect\n\tgithub.com/mattn/go-runewidth v0.0.19 // indirect\n\tgithub.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect\n\tgithub.com/muesli/cancelreader v0.2.2 // indirect\n\tgithub.com/ncruces/go-strftime v1.0.0 // indirect\n\tgithub.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect\n\tgithub.com/rivo/uniseg v0.4.7 // indirect\n\tgithub.com/spf13/pflag v1.0.9 // indirect\n\tgithub.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect\n\tgolang.org/x/text v0.3.8 // indirect\n\tmodernc.org/libc v1.70.0 // indirect\n\tmodernc.org/mathutil v1.7.1 // indirect\n\tmodernc.org/memory v1.11.0 // indirect\n)\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 84
    },
    "strategic_score": 84
  },
  {
    "owner": "NanmiCoder",
    "name": "MediaCrawler",
    "full_name": "NanmiCoder/MediaCrawler",
    "url": "https://github.com/NanmiCoder/MediaCrawler",
    "description": "小红书笔记 | 评论爬虫、抖音视频 | 评论爬虫、快手视频 | 评论爬虫、B 站视频 ｜ 评论爬虫、微博帖子 ｜ 评论爬虫、百度贴吧帖子 ｜ 百度贴吧评论回复爬虫 | 知乎问答文章｜评论爬虫",
    "language": "Python",
    "total_stars": 54012,
    "forks": 11035,
    "stars_this_period": 2225,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "NOASSERTION",
      "open_issues": 178,
      "created_at": "2023-06-09T12:14:34Z",
      "pushed_at": "2026-06-18T09:22:51Z",
      "homepage": "https://nanmicoder.github.io/MediaCrawler/",
      "default_branch": "main",
      "forks": 11035,
      "watchers": 228,
      "archived": false,
      "size_kb": 29212
    },
    "readme_content": "# 🔥 MediaCrawler - 自媒体平台爬虫 🕷️\n\n<div align=\"center\">\n\n<a href=\"https://trendshift.io/repositories/8291\" target=\"_blank\">\n  <img src=\"https://trendshift.io/api/badge/repositories/8291\" alt=\"NanmiCoder%2FMediaCrawler | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/>\n</a>\n\n[![GitHub Stars](https://img.shields.io/github/stars/NanmiCoder/MediaCrawler?style=social)](https://github.com/NanmiCoder/MediaCrawler/stargazers)\n[![GitHub Forks](https://img.shields.io/github/forks/NanmiCoder/MediaCrawler?style=social)](https://github.com/NanmiCoder/MediaCrawler/network/members)\n[![GitHub Issues](https://img.shields.io/github/issues/NanmiCoder/MediaCrawler)](https://github.com/NanmiCoder/MediaCrawler/issues)\n[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/NanmiCoder/MediaCrawler)](https://github.com/NanmiCoder/MediaCrawler/pulls)\n[![License](https://img.shields.io/github/license/NanmiCoder/MediaCrawler)](https://github.com/NanmiCoder/MediaCrawler/blob/main/LICENSE)\n[![中文](https://img.shields.io/badge/🇨🇳_中文-当前-blue)](README.md)\n[![English](https://img.shields.io/badge/🇺🇸_English-Available-green)](README_en.md)\n[![Español](https://img.shields.io/badge/🇪🇸_Español-Available-green)](README_es.md)\n</div>\n\n\n\n> **免责声明：**\n> \n> 大家请以学习为目的使用本仓库⚠️⚠️⚠️⚠️，[爬虫违法违规的案件](https://github.com/HiddenStrawberry/Crawler_Illegal_Cases_In_China)  <br>\n>\n>本仓库的所有内容仅供学习和参考之用，禁止用于商业用途。任何人或组织不得将本仓库的内容用于非法用途或侵犯他人合法权益。本仓库所涉及的爬虫技术仅用于学习和研究，不得用于对其他平台进行大规模爬虫或其他非法行为。对于因使用本仓库内容而引起的任何法律责任，本仓库不承担任何责任。使用本仓库的内容即表示您同意本免责声明的所有条款和条件。\n>\n> 点击查看更为详细的免责声明。[点击跳转](#disclaimer)\n\n\n\n\n## 📖 项目简介\n\n一个功能强大的**多平台自媒体数据采集工具**，支持小红书、抖音、快手、B站、微博、贴吧、知乎等主流平台的公开信息抓取。\n\n### 🔧 技术原理\n\n- **核心技术**：基于 [Playwright](https://playwright.dev/) 浏览器自动化框架登录保存登录态\n- **无需JS逆向**：利用保留登录态的浏览器上下文环境，通过 JS 表达式获取签名参数\n- **优势特点**：无需逆向复杂的加密算法，大幅降低技术门槛\n\n\n## ✨ 功能特性\n| 平台   | 关键词搜索 | 指定帖子ID爬取 | 二级评论 | 指定创作者主页 | 登录态缓存 | IP代理池 | 生成评论词云图 |\n| ------ | ---------- | -------------- | -------- | -------------- | ---------- | -------- | -------------- |\n| 小红书 | ✅          | ✅              | ✅        | ✅              | ✅          | ✅        | ✅              |\n| 抖音   | ✅          | ✅              | ✅        | ✅              | ✅          | ✅        | ✅              |\n| 快手   | ✅          | ✅              | ✅        | ✅              | ✅          | ✅        | ✅              |\n| B 站   | ✅          | ✅              | ✅        | ✅              | ✅          | ✅        | ✅              |\n| 微博   | ✅          | ✅              | ✅        | ✅              | ✅          | ✅        | ✅              |\n| 贴吧   | ✅          | ✅              | ✅        | ✅              | ✅          | ✅        | ✅              |\n| 知乎   | ✅          | ✅              | ✅        | ✅              | ✅          | ✅        | ✅              |\n\n\n\n<strong>MediaCrawlerPro 重磅发布！开源不易，欢迎订阅支持</strong>\n\n> 专注于学习成熟项目的架构设计，不仅仅是爬虫技术，Pro 版本的代码设计思路同样值得深入学习！\n\n[MediaCrawlerPro](https://github.com/MediaCrawlerPro) 相较于开源版本的核心优势：\n\n#### 🎯 核心功能升级\n- ✅ **自媒体内容拆解Agent**（新增功能）\n- ✅ **断点续爬功能**（重点特性）\n- ✅ **多账号 + IP代理池支持**（重点特性）\n- ✅ **去除 Playwright 依赖**，使用更简单\n- ✅ **完整 Linux 环境支持**\n\n#### 🏗️ 架构设计优化\n- ✅ **代码重构优化**，更易读易维护（解耦 JS 签名逻辑）\n- ✅ **企业级代码质量**，适合构建大型爬虫项目\n- ✅ **完美架构设计**，高扩展性，源码学习价值更大\n\n#### 🎁 额外功能\n- ✅ **自媒体视频下载器桌面端**（适合学习全栈开发）\n- ✅ **多平台首页信息流推荐**（HomeFeed）\n- ✅ **AI Agent Skill 支持**（[OpenClaw](https://openclaw.ai/) 🦞 / Claude Code / Cursor 一键安装，让 Agent 自动爬取数据）\n- [ ] **基于评论分析AI Agent正在开发中 🚀🚀**\n\n点击查看：[MediaCrawlerPro 项目主页](https://github.com/MediaCrawlerPro) 更多介绍\n\n\n\n## 🚀 快速开始\n\n> 💡 **如果这个项目对您有帮助，请给个 ⭐ Star 支持一下！**\n\n## 📋 前置依赖\n\n### 🚀 uv 安装（推荐）\n\n在进行下一步操作之前，请确保电脑上已经安装了 uv：\n\n- **安装地址**：[uv 官方安装指南](https://docs.astral.sh/uv/getting-started/installation)\n- **验证安装**：终端输入命令 `uv --version`，如果正常显示版本号，证明已经安装成功\n- **推荐理由**：uv 是目前最强的 Python 包管理工具，速度快、依赖解析准确\n\n### 🟢 Node.js 安装\n\n项目依赖 Node.js，请前往官网下载安装：\n\n- **下载地址**：https://nodejs.org/en/download/\n- **版本要求**：>= 16.0.0\n\n### 📦 Python 包安装\n\n```shell\n# 进入项目目录\ncd MediaCrawler\n\n# 使用 uv sync 命令来保证 python 版本和相关依赖包的一致性\nuv sync\n```\n\n### 🌐 浏览器驱动安装（可选）\n\n> 如果使用默认的 CDP 模式（连接已有 Chrome 浏览器），**无需安装浏览器驱动**。仅在使用标准 Playwright 模式时需要安装。\n\n```shell\n# 仅在标准 Playwright 模式下需要安装浏览器驱动\nuv run playwright install\n```\n\n### 🌍 Chrome 浏览器配置（推荐）\n\n项目默认使用 CDP 模式连接用户已有的 Chrome 浏览器，可以复用浏览器已有的登录状态、Cookie、扩展等，**大幅降低平台风控检测风险**。\n\n使用前需要：\n\n1. **安装最新版 Chrome 浏览器**（版本 >= 144），[下载地址](https://www.google.com/chrome/)\n2. **开启远程调试功能**：在 Chrome 地址栏输入 `chrome://inspect/#remote-debugging`，勾选 **\"Allow remote debugging for this browser instance\"**\n3. 页面显示 `Server running at: 127.0.0.1:9222` 表示已就绪\n\n> 💡 **提示**：运行爬虫后，Chrome 浏览器会弹出确认对话框，点击\"接受\"即可。程序会等待用户确认，60秒内操作完成即可。\n>\n> 如果不想使用 CDP 模式，可以在 `config/base_config.py` 中设置 `ENABLE_CDP_MODE = False` 切换为标准 Playwright 模式。\n\n## 🚀 运行爬虫程序\n\n```shell\n# 在 config/base_config.py 查看配置项目功能，写的有中文注释\n\n# 从配置文件中读取关键词搜索相关的帖子并爬取帖子信息与评论\nuv run main.py --platform xhs --lt qrcode --type search\n\n# 从配置文件中读取指定的帖子ID列表获取指定帖子的信息与评论信息\nuv run main.py --platform xhs --lt qrcode --type detail\n\n# 打开对应APP扫二维码登录\n\n# 其他平台爬虫使用示例，执行下面的命令查看\nuv run main.py --help\n```\n\n<details>\n<summary>🖥️ <strong>WebUI 可视化操作界面</strong></summary>\n\nMediaCrawler 提供了基于 Web 的可视化操作界面，无需命令行也能轻松使用爬虫功能。\n\n#### 启动 WebUI 服务\n\n```shell\n# 启动 API 服务器（默认端口 8080）\nuv run uvicorn api.main:app --port 8080 --reload\n\n# 或者使用模块方式启动\nuv run python -m api.main\n```\n\n启动成功后，访问 `http://localhost:8080` 即可打开 WebUI 界面。\n\n#### WebUI 功能特性\n\n- 可视化配置爬虫参数（平台、登录方式、爬取类型等）\n- 实时查看爬虫运行状态和日志\n- 数据预览和导出\n\n#### 界面预览\n\n<img src=\"docs/static/images/img_8.png\" alt=\"WebUI 界面预览\">\n\n</details>\n\n<details>\n<summary>🔗 <strong>使用 Python 原生 venv 管理环境（不推荐）</strong></summary>\n\n#### 创建并激活 Python 虚拟环境\n\n> 如果是爬取抖音和知乎，需要提前安装 nodejs 环境，版本大于等于：`16` 即可\n\n```shell\n# 进入项目根目录\ncd MediaCrawler\n\n# 创建虚拟环境\n# 我的 python 版本是：3.11 requirements.txt 中的库是基于这个版本的\n# 如果是其他 python 版本，可能 requirements.txt 中的库不兼容，需自行解决\npython -m venv venv\n\n# macOS & Linux 激活虚拟环境\nsource venv/bin/activate\n\n# Windows 激活虚拟环境\nvenv\\Scripts\\activate\n```\n\n#### 安装依赖库\n\n```shell\npip install -r requirements.txt\n```\n\n#### 安装 playwright 浏览器驱动\n\n```shell\nplaywright install\n```\n\n#### 运行爬虫程序（原生环境）\n\n```shell\n# 项目默认是没有开启评论爬取模式，如需评论请在 config/base_config.py 中的 ENABLE_GET_COMMENTS 变量修改\n# 一些其他支持项，也可以在 config/base_config.py 查看功能，写的有中文注释\n\n# 从配置文件中读取关键词搜索相关的帖子并爬取帖子信息与评论\npython main.py --platform xhs --lt qrcode --type search\n\n# 从配置文件中读取指定的帖子ID列表获取指定帖子的信息与评论信息\npython main.py --platform xhs --lt qrcode --type detail\n\n# 打开对应APP扫二维码登录\n\n# 其他平台爬虫使用示例，执行下面的命令查看\npython main.py --help\n```\n\n</details>\n\n\n## 💾 数据保存\n\nMediaCrawler 支持多种数据存储方式，包括 CSV、JSON、JSONL、Excel、SQLite 和 MySQL 数据库。\n\n📖 **详细使用说明请查看：[数据存储指南](docs/data_storage_guide.md)**\n\n\n[🚀 MediaCrawlerPro 重磅发布 🚀！更多的功能，更好的架构设计！开源不易，欢迎订阅支持！](https://github.com/MediaCrawlerPro)\n\n\n## 💬 交流群组\n- **微信交流群**：[点击加入](https://nanmicoder.github.io/MediaCrawler/%E5%BE%AE%E4%BF%A1%E4%BA%A4%E6%B5%81%E7%BE%A4.html)\n- **B站账号**：[关注我](https://space.bilibili.com/434377496)，分享AI与爬虫技术知识\n\n\n## 💰 赞助商展示\n\n<a href=\"https://tikhub.io/?utm_source=github.com/NanmiCoder/MediaCrawler&utm_medium=marketing_social&utm_campaign=retargeting&utm_content=carousel_ad\">\n<img width=\"500\" src=\"docs/static/images/tikhub_banner_zh.png\">\n<br>\nTikHub.io 提供 900+ 高稳定性数据接口，覆盖 TK、DY、XHS、Y2B、Ins、X 等 14+ 海内外主流平台，支持用户、内容、商品、评论等多维度公开数据 API，并配套 4000 万+ 已清洗结构化数据集，使用邀请码 <code>cfzyejV9</code> 注册并充值，即可额外获得 $2 赠送额度。\n</a>\n<br>\n<br>\n\n<a href=\"https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=mei%27da%27c%27rmeidacrawler\">\n<img width=\"500\" alt=\"Atlas Cloud\" src=\"docs/static/images/atlas_cloud_logo_black.png#gh-light-mode-only\">\n<img width=\"500\" alt=\"Atlas Cloud\" src=\"docs/static/images/atlas_cloud_logo_white.png#gh-dark-mode-only\">\n</a>\n<br>\n<a href=\"https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=mei%27da%27c%27rmeidacrawler\">Atlas Cloud</a> 是一个全模态 AI 推理平台，让开发者通过统一的 AI API 访问视频生成、图像生成和 LLM API，无需分别维护多个厂商集成，即可调用 300+ 精选模型。Atlas Cloud 最新推出 <a href=\"https://www.atlascloud.ai/console/coding-plan\">coding plan 优惠</a>，为开发者提供更具性价比的 API 访问预算。\n\n---\n\n## 🤝 成为赞助者\n\n成为赞助者，可以将您的产品展示在这里，每天获得大量曝光！\n\n**联系方式**：\n- 微信：`relakkes`\n- 邮箱：`relakkes@gmail.com`\n---\n\n## ☕ 请作者喝杯咖啡\n\n如果这个项目对您有帮助，欢迎打赏支持，您的每一份支持都是我持续更新的动力 ❤️\n\n<table>\n<tr>\n<td align=\"center\" width=\"33%\">\n<img src=\"docs/static/images/wechat_pay.jpeg\" width=\"250\" alt=\"微信赞赏\"><br>\n<b>微信赞赏</b>\n</td>\n<td align=\"center\" width=\"33%\">\n<img src=\"docs/static/images/zfb_pay.png\" width=\"250\" alt=\"支付宝\"><br>\n<b>支付宝</b>\n</td>\n<td align=\"center\" width=\"33%\">\n<a href=\"https://buymeacoffee.com/relakkes\" target=\"_blank\">\n<img src=\"docs/static/images/bmc_button.png\" width=\"250\" alt=\"Buy Me a Coffee\">\n</a><br>\n<b>Buy Me a Coffee</b>\n</td>\n</tr>\n</table>\n\n---\n\n## 📚 其他\n- **常见问题**：[MediaCrawler 完整文档](https://nanmicoder.github.io/MediaCrawler/)\n- **爬虫入门教程**：[CrawlerTutorial 免费教程](https://github.com/NanmiCoder/CrawlerTutorial)\n- **新闻爬虫开源项目**：[NewsCrawlerCollection](https://github.com/NanmiCoder/NewsCrawlerCollection)\n\n\n## ⭐ Star 趋势图\n\n如果这个项目对您有帮助，请给个 ⭐ Star 支持一下，让更多的人看到 MediaCrawler！\n\n[![Star History Chart](https://api.star-history.com/svg?repos=NanmiCoder/MediaCrawler&type=Date)](https://star-history.com/#NanmiCoder/MediaCrawler&Date)\n\n\n## 📚 参考\n\n- **小红书签名仓库**：[Cloxl 的 xhs 签名仓库](https://github.com/Cloxl/xhshow)\n- **小红书客户端**：[ReaJason 的 xhs 仓库](https://github.com/ReaJason/xhs)\n- **短信转发**：[SmsForwarder 参考仓库](https://github.com/pppscn/SmsForwarder)\n- **内网穿透工具**：[ngrok 官方文档](https://ngrok.com/docs/)\n\n\n# 免责声明\n<div id=\"disclaimer\"> \n\n## 1. 项目目的与性质\n本项目（以下简称“本项目”）是作为一个技术研究与学习工具而创建的，旨在探索和学习网络数据采集技术。本项目专注于自媒体平台的数据爬取技术研究，旨在提供给学习者和研究者作为技术交流之用。\n\n## 2. 法律合规性声明\n本项目开发者（以下简称“开发者”）郑重提醒用户在下载、安装和使用本项目时，严格遵守中华人民共和国相关法律法规，包括但不限于《中华人民共和国网络安全法》、《中华人民共和国反间谍法》等所有适用的国家法律和政策。用户应自行承担一切因使用本项目而可能引起的法律责任。\n\n## 3. 使用目的限制\n本项目严禁用于任何非法目的或非学习、非研究的商业行为。本项目不得用于任何形式的非法侵入他人计算机系统，不得用于任何侵犯他人知识产权或其他合法权益的行为。用户应保证其使用本项目的目的纯属个人学习和技术研究，不得用于任何形式的非法活动。\n\n## 4. 免责声明\n开发者已尽最大努力确保本项目的正当性及安全性，但不对用户使用本项目可能引起的任何形式的直接或间接损失承担责任。包括但不限于由于使用本项目而导致的任何数据丢失、设备损坏、法律诉讼等。\n\n## 5. 知识产权声明\n本项目的知识产权归开发者所有。本项目受到著作权法和国际著作权条约以及其他知识产权法律和条约的保护。用户在遵守本声明及相关法律法规的前提下，可以下载和使用本项目。\n\n## 6. 最终解释权\n关于本项目的最终解释权归开发者所有。开发者保留随时更改或更新本免责声明的权利，恕不另行通知。\n</div>\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"mediacrawler\"\nauthor = \"程序员阿江-Relakkes <relakkes@gmail.com>\"\nversion = \"0.1.0\"\ndescription = \"A social media crawler project, support Xiaohongshu, Weibo, Zhihu, Bilibili, Douyin, BaiduTieBa etc.\"\nreadme = \"README.md\"\nrequires-python = \">=3.11\"\ndependencies = [\n    \"aiofiles~=23.2.1\",\n    \"aiomysql==0.2.0\",\n    \"aiosqlite>=0.21.0\",\n    \"alembic>=1.16.5\",\n    \"asyncmy>=0.2.10\",\n    \"cryptography>=45.0.7\",\n    \"fastapi==0.110.2\",\n    \"httpx==0.28.1\",\n    \"jieba==0.42.1\",\n    \"matplotlib==3.9.0\",\n    \"motor>=3.3.0\",\n    \"opencv-python>=4.11.0.86\",\n    \"pandas==2.2.3\",\n    \"parsel==1.9.1\",\n    \"pillow==9.5.0\",\n    \"playwright==1.45.0\",\n    \"pydantic==2.5.2\",\n    \"pyexecjs==1.5.1\",\n    \"pyhumps>=3.8.0\",\n    \"python-dotenv==1.0.1\",\n    \"redis~=4.6.0\",\n    \"requests==2.32.3\",\n    \"sqlalchemy>=2.0.43\",\n    \"tenacity==8.2.2\",\n    \"typer>=0.12.3\",\n    \"uvicorn==0.29.0\",\n    \"wordcloud==1.9.3\",\n    \"pre-commit>=3.5.0\",\n    \"openpyxl>=3.1.2\",\n    \"pytest>=7.4.0\",\n    \"pytest-asyncio>=0.21.0\",\n    \"websockets>=15.0.1\",\n    \"asyncpg>=0.31.0\",\n    \"xhshow>=0.1.9\",\n]\n\n[[tool.uv.index]]\nurl = \"https://pypi.tuna.tsinghua.edu.cn/simple\"\ndefault = true\n",
    "strategic_keywords": [
      "agent",
      "skill"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "medium",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 16,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 80
    },
    "strategic_score": 80
  },
  {
    "owner": "tursodatabase",
    "name": "turso",
    "full_name": "tursodatabase/turso",
    "url": "https://github.com/tursodatabase/turso",
    "description": "Turso is an in-process SQL database, compatible with SQLite.",
    "language": "Rust",
    "total_stars": 22405,
    "forks": 1125,
    "stars_this_period": 2123,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "database",
        "embedded-database",
        "sql",
        "sqlite3",
        "webassembly"
      ],
      "license": "MIT",
      "open_issues": 755,
      "created_at": "2023-08-26T09:21:36Z",
      "pushed_at": "2026-06-28T17:47:46Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 1125,
      "watchers": 92,
      "archived": false,
      "size_kb": 79840
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"assets/turso.png\" alt=\"Turso Database\" width=\"800\"/>\n  <h1 align=\"center\">Turso Database</h1>\n</p>\n\n<p align=\"center\">\n  An in-process SQL database, compatible with SQLite.\n</p>\n\n<p align=\"center\">\n  <a title=\"Build Status\" target=\"_blank\" href=\"https://github.com/tursodatabase/turso/actions/workflows/rust.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/tursodatabase/turso/rust.yml?style=flat-square\"></a>\n  <a title=\"Releases\" target=\"_blank\" href=\"https://github.com/tursodatabase/turso/releases\"><img src=\"https://img.shields.io/github/release/tursodatabase/turso?style=flat-square&color=9CF\"></a>\n  <a title=\"Rust\" target=\"_blank\" href=\"https://crates.io/crates/turso\"><img alt=\"Crate\" src=\"https://img.shields.io/crates/v/turso\"></a>\n  <a title=\"JavaScript\" target=\"_blank\" href=\"https://www.npmjs.com/package/@tursodatabase/database\"><img alt=\"NPM\" src=\"https://img.shields.io/npm/v/@tursodatabase/database\"></a>\n  <a title=\"Python\" target=\"_blank\" href=\"https://pypi.org/project/pyturso/\"><img alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/pyturso\"></a>\n  <a title=\"Java\" target=\"_blank\" href=\"https://central.sonatype.com/artifact/tech.turso/turso\"><img alt=\"Maven Central\" src=\"https://img.shields.io/maven-central/v/tech.turso/turso\"></a>\n  <a title=\"MIT\" target=\"_blank\" href=\"https://github.com/tursodatabase/turso/blob/main/LICENSE.md\"><img src=\"http://img.shields.io/badge/license-MIT-orange.svg?style=flat-square\"></a>\n  <br>\n  <a title=\"GitHub Pull Requests\" target=\"_blank\" href=\"https://github.com/tursodatabase/turso/pulls\"><img src=\"https://img.shields.io/github/issues-pr-closed/tursodatabase/turso.svg?style=flat-square&color=FF9966\"></a>\n  <a title=\"GitHub Commits\" target=\"_blank\" href=\"https://github.com/tursodatabase/turso/commits/main\"><img src=\"https://img.shields.io/github/commit-activity/m/tursodatabase/turso.svg?style=flat-square\"></a>\n  <a title=\"Last Commit\" target=\"_blank\" href=\"https://github.com/tursodatabase/turso/commits/main\"><img src=\"https://img.shields.io/github/last-commit/tursodatabase/turso.svg?style=flat-square&color=FF9900\"></a>\n</p>\n<p align=\"center\">\n  <a title=\"Developer's Discord\" target=\"_blank\" href=\"https://discord.gg/jgjmyYgHwB\"><img alt=\"Chat with the Core Developers on Discord\" src=\"https://img.shields.io/discord/1258658826257961020?label=Discord&logo=Discord&style=social&label=Core%20Developers\"></a>\n</p>\n<p align=\"center\">\n  <a title=\"Users's Discord\" target=\"_blank\" href=\"https://tur.so/discord\"><img alt=\"Chat with other users of Turso (and Turso Cloud) on Discord\" src=\"https://img.shields.io/discord/933071162680958986?label=Discord&logo=Discord&style=social&label=Users\"></a>\n</p>\n\n---\n\n## About\n\nTurso Database is an in-process SQL database written in Rust, compatible with SQLite.\n\n> **⚠️ Warning:** This software is in BETA. It may still contain bugs and unexpected behavior. Use caution with production data and ensure you have backups.\n\n## Features and Roadmap\n\n* **SQLite compatibility** for SQL dialect, file formats, and the C API [see [document](COMPAT.md) for details]\n* **`BEGIN CONCURRENT`** for improved write throughput using multi-version concurrency control (MVCC).\n* **Change data capture (CDC)** for real-time tracking of database changes.\n* **Multi-language support** for\n  * [Go](bindings/go)\n  * [JavaScript](bindings/javascript)\n  * [Java](bindings/java)\n  * [.NET](bindings/dotnet)\n  * [Python](bindings/python)\n  * [Rust](bindings/rust)\n  * [WebAssembly](bindings/javascript)\n* **Asynchronous I/O** support on Linux with `io_uring`\n* **Cross-platform** support for Linux, macOS, Windows and browsers (through WebAssembly)\n* **Vector support** support including exact search and vector manipulation\n* **Improved schema management** including extended `ALTER` support and faster schema changes.\n\nThe database has the following experimental features:\n\n* **Encryption at rest** for protecting the data locally.\n* **Incremental computation** using DBSP for incremental view maintenance and query subscriptions.\n* **Full-Text-Search** powered by the awesome [tantivy](https://github.com/quickwit-oss/tantivy) library\n* **Multi-process WAL coordination** via the `.tshm` sidecar for cross-process WAL readers and writers.\n\nThe following features are on our current roadmap:\n\n* **Vector indexing** for fast approximate vector search, similar to [libSQL vector search](https://turso.tech/vector).\n\n## Getting Started\n\nPlease see the [Turso Database Manual](docs/manual.md) for more information.\n\n<details>\n<summary>💻 Command Line</summary>\n<br>\nYou can install the latest `turso` release with:\n\n```shell\ncurl --proto '=https' --tlsv1.2 -LsSf \\\n  https://github.com/tursodatabase/turso/releases/latest/download/turso_cli-installer.sh | sh\n```\n\nThen launch the interactive shell:\n\n```shell\n$ tursodb\n```\n\nThis will start the Turso interactive shell where you can execute SQL statements:\n\n```console\nTurso\nEnter \".help\" for usage hints.\nConnected to a transient in-memory database.\nUse \".open FILENAME\" to reopen on a persistent database\nturso> CREATE TABLE users (id INT, username TEXT);\nturso> INSERT INTO users VALUES (1, 'alice');\nturso> INSERT INTO users VALUES (2, 'bob');\nturso> SELECT * FROM users;\n1|alice\n2|bob\n```\n\nYou can also build and run the latest development version with:\n\n```shell\ncargo run\n```\n\nIf you like docker, we got you covered. Simply run this in the root folder:\n\n```bash\nmake docker-cli-build && \\\nmake docker-cli-run\n```\n\n</details>\n\n<details>\n<summary>🦀 Rust</summary>\n<br>\n\n```console\ncargo add turso\n```\n\nExample usage:\n\n```rust\nlet db = Builder::new_local(\"sqlite.db\").build().await?;\nlet conn = db.connect()?;\n\nlet res = conn.query(\"SELECT * FROM users\", ()).await?;\n```\n</details>\n\n<details>\n<summary>✨ JavaScript</summary>\n<br>\n\n```console\nnpm i @tursodatabase/database\n```\n\nExample usage:\n\n```js\nimport { connect } from '@tursodatabase/database';\n\nconst db = await connect('sqlite.db');\nconst stmt = db.prepare('SELECT * FROM users');\nconst users = stmt.all();\nconsole.log(users);\n```\n</details>\n\n<details>\n<summary>🐍 Python</summary>\n<br>\n\n```console\nuv pip install pyturso\n```\n\nExample usage:\n\n```python\nimport turso\n\ncon = turso.connect(\"sqlite.db\")\ncur = con.cursor()\nres = cur.execute(\"SELECT * FROM users\")\nprint(res.fetchone())\n```\n</details>\n\n<details>\n<summary>🦫 Go</summary>\n<br>\n\n```console\ngo get turso.tech/database/tursogo\ngo install turso.tech/database/tursogo\n```\n\nExample usage:\n```go\nimport (\n    \"database/sql\"\n    _ \"turso.tech/database/tursogo\"\n)\n\nconn, _ = sql.Open(\"turso\", \"sqlite.db\")\ndefer conn.Close()\n\nstmt, _ := conn.Prepare(\"select * from users\")\ndefer stmt.Close()\n\nrows, _ = stmt.Query()\nfor rows.Next() {\n    var id int\n    var username string\n    rows.Scan(&id, &username)\n    fmt.Printf(\"User: ID: %d, Username: %s\\n\", id, username)\n}\n```\n</details>\n\n\n<details>\n\n<summary>️#️⃣ .NET</summary>\n<br>\n\nExample usage:\n```cs\nusing Turso;\n\nusing var connection = new TursoConnection(\"Data Source=:memory:\");\nconnection.Open();\n\nconnection.ExecuteNonQuery(\"CREATE TABLE t(a, b)\");\nvar rowsAffected = connection.ExecuteNonQuery(\"INSERT INTO t(a, b) VALUES (1, 2), (3, 4)\");\nConsole.WriteLine($\"RowsAffected: {rowsAffected}\");\n\nusing var command = connection.CreateCommand();\ncommand.CommandText = \"SELECT * FROM t\";\nusing var reader = command.ExecuteReader();\nwhile (reader.Read())\n{\n    var a = reader.GetInt32(0);\n    var b = reader.GetInt32(1);\n    Console.WriteLine($\"Value1: {a}, Value2: {b}\");\n}\n```\n</details>\n\n\n<details>\n\n<summary>☕️ Java</summary>\n<br>\n\nWe integrated Turso Database into JDBC. For detailed instructions on how to use Turso Database with java, please refer to\nthe [README.md under bindings/java](bindings/java/README.md).\n</details>\n\n<details>\n<summary>🤖 MCP Server Mode</summary>\n<br>\n\n\nThe Turso CLI includes a built-in [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that allows AI assistants to interact with your databases.\n\nStart the MCP server with:\n\n```shell\ntursodb your_database.db --mcp\n```\n\n### Configuration\n\nAdd Turso to your MCP client configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"turso\": {\n      \"command\": \"/path/to/.turso/tursodb\",\n      \"args\": [\"/path/to/your/database.db\", \"--mcp\"]\n    }\n  }\n}\n```\n\n### Available Tools\n\nThe MCP server provides nine tools for database interaction:\n\n1. **`open_database`** - Open a new database\n2. **`current_database`** - Describe the current database\n3. **`list_tables`** - List all tables in the database\n4. **`describe_table`** - Describe the structure of a specific table\n5. **`execute_query`** - Execute read-only SELECT queries\n6. **`insert_data`** - Insert new data into tables\n7. **`update_data`** - Update existing data in tables\n8. **`delete_data`** - Delete data from tables\n9. **`schema_change`** - Execute schema modification statements (CREATE TABLE, ALTER TABLE, DROP TABLE)\n\nOnce connected, you can ask your AI assistant:\n\n- \"Show me all tables in the database\"\n- \"What's the schema for the users table?\"\n- \"Find all posts with more than 100 upvotes\"\n- \"Insert a new user with name 'Alice' and email 'alice@example.com'\"\n\n### MCP Clients\n\n<details>\n<summary>Claude Code</summary>\n\nIf you're using [Claude Code](https://claude.ai/code), you can easily connect to your Turso MCP server using the built-in MCP management commands:\n\n#### Quick Setup\n\n1. **Add the MCP server** to Claude Code:\n\n   ```bash\n   claude mcp add my-database -- tursodb ./path/to/your/database.db --mcp\n   ```\n\n2. **Restart Claude Code** to activate the connection\n\n3. **Start querying** your database through natural language!\n\n#### Command Breakdown\n\n```bash\nclaude mcp add my-database -- tursodb ./path/to/your/database.db --mcp\n#              ↑            ↑       ↑                           ↑\n#              |            |       |                           |\n#              Name         |       Database path               MCP flag\n#                          Separator\n```\n\n- **`my-database`** - Choose any name for your MCP server\n- **`--`** - Required separator between Claude options and your command\n- **`tursodb`** - The Turso database CLI\n- **`./path/to/your/database.db`** - Path to your SQLite database file\n- **`--mcp`** - Enables MCP server mode\n\n#### Example Usage\n\n```bash\n# For a local project database\ncd /your/project\nclaude mcp add my-project-db -- tursodb ./data/app.db --mcp\n\n# For an absolute path\nclaude mcp add analytics-db -- tursodb /Users/you/databases/analytics.db --mcp\n\n# For a specific project (local scope)\nclaude mcp add project-db --local -- tursodb ./database.db --mcp\n```\n\n#### Managing MCP Servers\n\n```bash\n# List all configured MCP servers\nclaude mcp list\n\n# Get details about a specific server\nclaude mcp get my-database\n\n# Remove an MCP server\nclaude mcp remove my-database\n```\n\n</details>\n\n<details>\n<summary>Claude Desktop</summary>\n\nFor Claude Desktop, add the configuration to your `claude_desktop_config.json` file:\n\n```json\n{\n  \"mcpServers\": {\n    \"turso\": {\n      \"command\": \"/path/to/.turso/tursodb\",\n      \"args\": [\"./path/to/your/database.db\", \"--mcp\"]\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary>Cursor</summary>\n\nFor Cursor, configure MCP in your settings:\n\n1. Open Cursor settings\n2. Navigate to Extensions → MCP\n3. Add a new server with:\n   - **Name**: `turso`\n   - **Command**: `/path/to/.turso/tursodb`\n   - **Args**: `[\"./path/to/your/database.db\", \"--mcp\"]`\n\nAlternatively, you can add it to your Cursor configuration file directly.\n\n</details>\n\n### Direct JSON-RPC Usage\n\nThe MCP server runs as a single process that handles multiple JSON-RPC requests over stdin/stdout. Here's how to interact with it directly:\n\n#### Example with In-Memory Database\n\n```bash\ncat << 'EOF' | tursodb --mcp\n{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"initialize\", \"params\": {\"protocolVersion\": \"2024-11-05\", \"capabilities\": {}, \"clientInfo\": {\"name\": \"client\", \"version\": \"1.0\"}}}\n{\"jsonrpc\": \"2.0\", \"id\": 2, \"method\": \"tools/call\", \"params\": {\"name\": \"sc",
    "manifest_file": "Cargo.toml",
    "manifest_content": "# Copyright 2023-2026 the Turso authors. All rights reserved. MIT license.\n\n[workspace]\nresolver = \"2\"\nmembers = [\n    \"bindings/java\",\n    \"bindings/javascript\",\n    \"bindings/javascript/sync\",\n    \"bindings/python\",\n    \"bindings/rust\",\n    \"cli\",\n    \"core\",\n    \"extensions/completion\",\n    \"extensions/core\",\n    \"extensions/crypto\",\n    \"extensions/csv\",\n    \"extensions/ipaddr\",\n    \"extensions/regexp\",\n    \"extensions/tests\",\n    \"extensions/fuzzy\",\n    \"macros\",\n    \"testing/simulator\",\n    \"bindings/c\",\n    \"testing/stress\",\n    \"testing/sqlite_test_ext\",\n    \"tests\",\n    \"sqlite/parser\",\n    \"sync/engine\",\n    \"sync/sdk-kit\",\n    \"sql_generation\",\n    \"testing/concurrent-simulator\",\n    \"perf/throughput/turso\",\n    \"perf/throughput/rusqlite\",\n    \"perf/encryption\",\n    \"perf/memory\",\n    \"perf/memory/codspeed\",\n    \"perf/query-batch\",\n    \"tools/dbhash\",\n    \"sdk-kit\",\n    \"sdk-kit-macros\",\n    \"testing/differential-oracle/sql_gen_prop\",\n    \"testing/differential-oracle/sql_gen\",\n    \"testing/differential-oracle/fuzzer\",\n    \"testing/sqltests\"\n]\nexclude = [\"perf/latency/limbo\"]\n\ndefault-members = [\n    \"bindings/java\",\n    \"bindings/javascript\",\n    \"bindings/javascript/sync\",\n    \"bindings/python\",\n    \"bindings/rust\",\n    \"cli\",\n    \"core\",\n    \"extensions/completion\",\n    \"extensions/core\",\n    \"extensions/crypto\",\n    \"extensions/csv\",\n    \"extensions/ipaddr\",\n    \"extensions/regexp\",\n    \"extensions/tests\",\n    \"extensions/fuzzy\",\n    \"macros\",\n    \"testing/simulator\",\n    \"bindings/c\",\n    \"testing/stress\",\n    \"testing/sqlite_test_ext\",\n    \"tests\",\n    \"sqlite/parser\",\n    \"sync/engine\",\n    \"sync/sdk-kit\",\n    \"sql_generation\",\n    \"testing/concurrent-simulator\",\n    \"perf/throughput/turso\",\n    \"perf/throughput/rusqlite\",\n    \"perf/encryption\",\n    \"tools/dbhash\",\n    \"sdk-kit\",\n    \"sdk-kit-macros\",\n    \"testing/differential-oracle/sql_gen_prop\",\n    \"testing/differential-oracle/sql_gen\",\n    \"testing/differential-oracle/fuzzer\",\n    \"testing/sqltests\"\n]\n\n[workspace.package]\nversion = \"0.7.0-pre.13\"\nauthors = [\"the Turso authors\"]\nedition = \"2021\"\nlicense = \"MIT\"\nrepository = \"https://github.com/tursodatabase/turso\"\n\n[workspace.dependencies]\nturso = { path = \"bindings/rust\", version = \"0.7.0-pre.13\" }\nturso_node = { path = \"bindings/javascript\", version = \"0.7.0-pre.13\" }\nturso_sdk_kit = { path = \"sdk-kit\", version = \"0.7.0-pre.13\" }\nturso_sdk_kit_macros = { path = \"sdk-kit-macros\", version = \"0.7.0-pre.13\" }\nturso_sync_sdk_kit = { path = \"sync/sdk-kit\", version = \"0.7.0-pre.13\" }\nlimbo_completion = { path = \"extensions/completion\", version = \"0.7.0-pre.13\" }\nturso_core = { path = \"core\", version = \"0.7.0-pre.13\" }\nturso_sync_engine = { path = \"sync/engine\", version = \"0.7.0-pre.13\" }\nturso_ext = { path = \"extensions/core\", version = \"0.7.0-pre.13\" }\nturso_macros = { path = \"macros\", version = \"0.7.0-pre.13\" }\nturso_parser = { path = \"sqlite/parser\", version = \"0.7.0-pre.13\" }\nsql_generation = { path = \"sql_generation\" }\nturso-dbhash = { path = \"tools/dbhash\" }\nstrum = { version = \"0.26\", features = [\"derive\"] }\nstrum_macros = \"0.26\"\nserde = \"1.0\"\nserde_json = \"1.0\"\nanyhow = \"1.0.98\"\nmimalloc = { version = \"0.1.47\", default-features = false }\nrusqlite = { version = \"0.37.0\", features = [\"bundled\"] }\nitertools = \"0.14.0\"\nrand = \"0.9.2\"\nrand_chacha = \"0.9.0\"\ntracing = \"0.1.41\"\nschemars = \"1.0.4\"\ngarde = \"0.22\"\nparking_lot = \"0.12.4\"\ntokio = { version = \"1.0\", default-features = false }\ntracing-subscriber = \"0.3.20\"\nfutures = \"0.3\"\nclap = \"4.5.47\"\nthiserror = \"2.0.16\"\ntempfile = \"3.20.0\"\nindexmap = \"2.11.1\"\nindicatif = \"0.17\"\nmiette = \"7.6.0\"\nbitflags = \"2.9.4\"\nfallible-iterator = \"0.3.0\"\nallocator-api2 = \"0.4\"\n\ncriterion = \"0.5.0\"\ncodspeed-criterion-compat = \"4.2.1\"\ndivan = { package = \"codspeed-divan-compat\", version = \"4.2.1\" }\n\nchrono = { version = \"0.4.42\", default-features = false }\nhex = \"0.4\"\nantithesis_sdk = { version = \"0.2\", default-features = false }\ncfg-if = \"1.0.0\"\ntracing-appender = \"0.2.3\"\nenv_logger = { version = \"0.11.6\", default-features = false }\nregex = \"1.11.1\"\nregex-syntax = { version = \"0.8.5\", default-features = false }\nsimilar = { version = \"2.7.0\" }\nsimilar-asserts = { version = \"1.7.0\" }\nbitmaps = { version = \"3.2.1\", default-features = false }\nconsole-subscriber = { version = \"0.4.1\" }\neither = { version = \"1.15\" }\n\n# Multi threading testing\nloom = { version = \"0.7\" }\nshuttle = { version = \"0.8.1\" }\n\n[profile.dev.package.similar]\nopt-level = 3\n\n[profile.release]\ndebug = \"line-tables-only\"\ncodegen-units = 4\npanic = \"abort\"\nlto = \"thin\"\n\n# Official release profile - maximum optimization for published binaries\n# Use for CLI releases, PyPI, npm, Maven, NuGet, etc.\n[profile.release-official]\ninherits = \"release\"\ncodegen-units = 1\nlto = true\n\n# override settings for sdk-kit release profiles in order to reduce size of produced binaries\n# otherwise, some platforms will have enormous libs (150MB+)\n[profile.lib-release]\ninherits = \"release\"\ndebug = false\ncodegen-units = 16",
    "strategic_keywords": [
      "memory",
      "workspace",
      "workflow",
      "vector"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 11,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 90
    },
    "strategic_score": 90
  },
  {
    "owner": "simplex-chat",
    "name": "simplex-chat",
    "full_name": "simplex-chat/simplex-chat",
    "url": "https://github.com/simplex-chat/simplex-chat",
    "description": "SimpleX - the first messaging network operating without user identifiers of any kind - 100% private by design! iOS, Android and desktop apps 📱!",
    "language": "Haskell",
    "total_stars": 14924,
    "forks": 863,
    "stars_this_period": 1973,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "chat",
        "double-ratchet",
        "e2ee",
        "encryption",
        "haskell",
        "messaging",
        "privacy",
        "protocol",
        "security"
      ],
      "license": "AGPL-3.0",
      "open_issues": 1148,
      "created_at": "2019-12-21T09:50:09Z",
      "pushed_at": "2026-06-28T22:11:16Z",
      "homepage": "https://simplex.chat",
      "default_branch": "stable",
      "forks": 863,
      "watchers": 116,
      "archived": false,
      "size_kb": 418698
    },
    "readme_content": "[![build](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml/badge.svg?branch=stable)](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml)\n[![GitHub downloads](https://img.shields.io/github/downloads/simplex-chat/simplex-chat/total)](https://github.com/simplex-chat/simplex-chat/releases)\n[![GitHub release](https://img.shields.io/github/v/release/simplex-chat/simplex-chat)](https://github.com/simplex-chat/simplex-chat/releases)\n[![Join on Reddit](https://img.shields.io/reddit/subreddit-subscribers/SimpleXChat?style=social)](https://www.reddit.com/r/SimpleXChat)\n<a rel=\"me\" href=\"https://mastodon.social/@simplex\">![Follow on Mastodon](https://img.shields.io/mastodon/follow/108619463746856738?domain=https%3A%2F%2Fmastodon.social&style=social)</a>\n\n| 30/03/2023 | EN, [FR](/docs/lang/fr/README.md), [CZ](/docs/lang/cs/README.md), [PL](/docs/lang/pl/README.md) |\n\n<img src=\"images/simplex-chat-logo.svg\" alt=\"SimpleX logo\" width=\"100%\">\n\n# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!\n\n[<img src=\"./images/trail-of-bits.jpg\" height=\"80\">](http://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html) &nbsp;&nbsp;&nbsp; [<img src=\"./images/privacy-guides.jpg\" height=\"64\">](https://www.privacyguides.org/en/real-time-communication/#simplex-chat) &nbsp;&nbsp;&nbsp; [<img src=\"./images/whonix-logo.jpg\" height=\"64\">](https://www.whonix.org/wiki/Chat#Recommendation) &nbsp;&nbsp;&nbsp; [<img src=\"./images/kuketz-blog.jpg\" height=\"64\">](https://www.kuketz-blog.de/simplex-eindruecke-vom-messenger-ohne-identifier/)\n\n**[Why we are building SimpleX Network](./docs/WHY.md)**\n\n## Welcome to SimpleX Chat!\n\n1. 📲 [Install the app](#install-the-app).\n2. ↔️ [Connect to the team](#connect-to-the-team), [join user groups](#join-user-groups) and [follow our updates](#follow-our-updates).\n3. 🤝 [Make a private connection](#make-a-private-connection) with a friend.\n4. 🔤 [Help translating SimpleX Chat](#help-translating-simplex-chat).\n5. ⚡️ [Contribute](#contribute) and [support us with donations](#please-support-us-with-your-donations).\n\n[Learn more about SimpleX Chat](#contents).\n\n## Install the app\n\n[<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/apple_store.svg\" alt=\"iOS app\" height=\"42\">](https://apps.apple.com/us/app/simplex-chat/id1605771084)\n&nbsp;\n[![Android app](https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/google_play.svg)](https://play.google.com/store/apps/details?id=chat.simplex.app)\n&nbsp;\n[<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/f_droid.svg\" alt=\"F-Droid\" height=\"41\">](https://app.simplex.chat)\n&nbsp;\n[<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/testflight.png\" alt=\"iOS TestFlight\" height=\"41\">](https://testflight.apple.com/join/DWuT2LQu)\n&nbsp;\n[<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/apk_icon.png\" alt=\"APK\" height=\"41\">](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-aarch64.apk)\n\n- 🖲 Protects your messages and metadata - who you talk to and when.\n- 🔐 Double ratchet end-to-end encryption, with additional encryption layer.\n- 📱 Mobile apps for Android ([Google Play](https://play.google.com/store/apps/details?id=chat.simplex.app), [APK](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-aarch64.apk)) and [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084).\n- 🚀 [TestFlight preview for iOS](https://testflight.apple.com/join/DWuT2LQu) with the new features 1-2 weeks earlier - **limited to 10,000 users**!\n- 🖥 Available as a terminal (console) [app / CLI](#zap-quick-installation-of-a-terminal-app) on Linux, MacOS, Windows.\n\n## Connect to the team\n\nYou can connect to the team via the app using \"chat with the developers button\" available when you have no conversations in the profile, \"Send questions and ideas\" in the app settings or via our [SimpleX address](https://smp6.simplex.im/a#lrdvu2d8A1GumSmoKb2krQmtKhWXq-tyGpHuM7aMwsw). Please connect to:\n\n- to ask any questions\n- to suggest any improvements\n- to share anything relevant\n\nWe are replying the questions manually, so it is not instant – it can take up to 24 hours.\n\nIf you are interested in helping us to integrate open-source language models, and in [joining our team](./docs/JOIN_TEAM.md), please get in touch.\n\n## Join user groups\n\nYou can find the groups created by users in [SimpleX Directory](https://simplex.chat/directory/). It is also available as [SimpleX bot](https://smp4.simplex.im/a#lXUjJW5vHYQzoLYgmi8GbxkGP41_kjefFvBrdwg-0Ok) that allows to add your own groups and communities to the directory. We are not responsible for the content shared in these groups.\n\n**Please note**: The groups below are created for the users to be able to ask questions, make suggestions and ask questions about SimpleX Chat only.\n\nYou can join an English-speaking users group if you want to ask any questions: [#SimpleX users group](https://smp4.simplex.im/g#hr4lvFeBmndWMKTwqiodPz3VBo_6UmdGWocXd1SupsM)\n\nThere is also a group [#simplex-devs](https://smp6.simplex.im/g#Drx3efC-n418AuSpzTspw9SER0iJwrQTmKBafQHwkKM) for developers who build on SimpleX platform:\n\n- chat bots and automations\n- integrations with other apps\n- social apps and services\n- etc.\n\nYou can join these and other groups by opening these links in the app or by opening them in a desktop browser and scanning the QR code.\n\n## Follow our updates\n\nWe publish our updates and releases via:\n\n- [Reddit](https://www.reddit.com/r/SimpleXChat/), [Twitter](https://twitter.com/SimpleXChat), [Lemmy](https://lemmy.ml/c/simplex), [Mastodon](https://mastodon.social/@simplex) and [Nostr](https://snort.social/p/npub1exv22uulqnmlluszc4yk92jhs2e5ajcs6mu3t00a6avzjcalj9csm7d828).\n- SimpleX Chat [team profile](#connect-to-the-team).\n- [blog](https://simplex.chat/blog/) and [RSS feed](https://simplex.chat/feed.rss).\n- [mailing list](https://simplex.chat/#join-simplex), very rarely.\n\n## Make a private connection\n\nYou need to share a link with your friend or scan a QR code from their phone, in person or during a video call, to make a connection and start messaging.\n\nThe channel through which you share the link does not have to be secure - it is enough that you can confirm who sent you the message and that your SimpleX connection is established.\n\n<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/app1.png\" alt=\"Make a private connection\" height=\"360\"> <img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/arrow.png\" height=\"360\"> <img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/app2.png\" alt=\"Conversation\" height=\"360\"> <img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/arrow.png\" height=\"360\"> <img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/app3.png\" alt=\"Video call\" height=\"360\">\n\nAfter you connect, you can [verify connection security code](./blog/20230103-simplex-chat-v4.4-disappearing-messages.md#connection-security-verification).\n\n## User guide (NEW)\n\nRead about the app features and settings in the new [User guide](./docs/guide/README.md).\n\n## Contribute\n\nWe would love to have you join the development! You can help us with:\n\n- [develop a chat bot](#develop-a-chat-bot) for SimpleX Chat!\n- writing a tutorial or recipes about hosting servers, chat bots, etc.\n- developing features - please connect to us via chat so we can help you get started.\n\n## Help translating SimpleX Chat\n\nThanks to our users and [Weblate](https://hosted.weblate.org/engage/simplex-chat/), SimpleX Chat apps, website and documents are translated to many other languages.\n\nJoin our translators to help SimpleX grow!\n\n|locale|language |contributor|[Android](https://play.google.com/store/apps/details?id=chat.simplex.app) and [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084)|[website](https://simplex.chat)|Github docs|\n|:----:|:-------:|:---------:|:---------:|:---------:|:---------:|\n|🇬🇧 en|English   | |✓|✓|✓|✓|\n|ar|العربية   |[jermanuts](https://github.com/jermanuts)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/ar/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ar/)<br>-|[![website](https://hosted.weblate.org/widgets/simplex-chat/ar/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/ar/)||\n|🇧🇬 bg|Български | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/bg/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/bg/)<br>[![ios app](https://hosted.weblate.org/widget/simplex-chat/ios/bg/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/bg/)|||\n|🇨🇿 cs|Čeština   |[zen0bit](https://github.com/zen0bit)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/cs/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/cs/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/cs/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/cs/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/cs/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/cs/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/cs)|\n|🇩🇪 de|Deutsch   |[mlanp](https://github.com/mlanp)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/de/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/de/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/de/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/de/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/de/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/de/)||\n|🇪🇸 es|Español   |[Mateyhv](https://github.com/Mateyhv)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/es/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/es/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/es/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/es/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/es/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/es/)||\n|🇫🇮 fi|Suomi     | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/fi/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fi/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fi/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fi/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fi/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fi/)||\n|🇫🇷 fr|Français  |[ishi_sama](https://github.com/ishi-sama)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/fr/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fr/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fr/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fr/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fr/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fr/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/fr)|\n|🇮🇱 he|עִברִית     | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/he/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/he/)<br>-|||\n|🇭🇺 hu|Magyar    | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/hu/android/svg-badge.svg)](https://hosted.webl",
    "strategic_keywords": [
      "workflow",
      "protocol"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 14,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 8,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "owner": "googleworkspace",
    "name": "cli",
    "full_name": "googleworkspace/cli",
    "url": "https://github.com/googleworkspace/cli",
    "description": "Google Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google Discovery Service. Includes AI agent skills.",
    "language": "Rust",
    "total_stars": 29072,
    "forks": 1648,
    "stars_this_period": 1848,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "agent-skills",
        "ai-agent",
        "automation",
        "cli",
        "discovery-api",
        "gemini-cli-extension",
        "google-admin",
        "google-api",
        "google-calendar",
        "google-chat",
        "google-docs",
        "google-drive",
        "google-sheets",
        "google-workspace",
        "oauth2",
        "rust"
      ],
      "license": "Apache-2.0",
      "open_issues": 124,
      "created_at": "2026-03-02T19:46:06Z",
      "pushed_at": "2026-06-28T22:24:16Z",
      "homepage": "https://developers.google.com/workspace",
      "default_branch": "main",
      "forks": 1648,
      "watchers": 94,
      "archived": false,
      "size_kb": 10749
    },
    "readme_content": "<h1 align=\"center\">gws</h1>\n\n**One CLI for all of Google Workspace — built for humans and AI agents.**<br>\nDrive, Gmail, Calendar, and every Workspace API. Zero boilerplate. Structured JSON output. 40+ agent skills included.\n\n> [!NOTE]\n> This is **not** an officially supported Google product.\n\n<p>\n  <a href=\"https://www.npmjs.com/package/@googleworkspace/cli\"><img src=\"https://img.shields.io/npm/v/@googleworkspace/cli\" alt=\"npm version\"></a>\n  <a href=\"https://github.com/googleworkspace/cli/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/googleworkspace/cli\" alt=\"license\"></a>\n  <a href=\"https://github.com/googleworkspace/cli/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/googleworkspace/cli/ci.yml?branch=main&label=CI\" alt=\"CI status\"></a>\n  <a href=\"https://www.npmjs.com/package/@googleworkspace/cli\"><img src=\"https://img.shields.io/npm/unpacked-size/@googleworkspace/cli\" alt=\"install size\"></a>\n</p>\n<br>\n\n⬇️ **[Download the latest release for your OS](https://github.com/googleworkspace/cli/releases)**\n\n`gws` doesn't ship a static list of commands. It reads Google's own [Discovery Service](https://developers.google.com/discovery) at runtime and builds its entire command surface dynamically. When Google Workspace adds an API endpoint or method, `gws` picks it up automatically.\n\n> [!IMPORTANT]\n> This project is under active development. Expect breaking changes as we march toward v1.0.\n\n## Contents\n\n- [Prerequisites](#prerequisites)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Why gws?](#why-gws)\n- [Authentication](#authentication)\n- [AI Agent Skills](#ai-agent-skills)\n- [Advanced Usage](#advanced-usage)\n- [Environment Variables](#environment-variables)\n- [Exit Codes](#exit-codes)\n- [Architecture](#architecture)\n- [Troubleshooting](#troubleshooting)\n- [Development](#development)\n\n## Prerequisites\n\n- **Node.js 18+** — for `npm install` (or download a pre-built binary from [GitHub Releases](https://github.com/googleworkspace/cli/releases))\n- **A Google Cloud project** — required for OAuth credentials. You can create one via the [Google Cloud Console](https://console.cloud.google.com/) or with the [`gcloud` CLI](https://cloud.google.com/sdk/docs/install) or with the `gws auth setup` command.\n- **A Google account** with access to Google Workspace\n\n## Installation\n\nThe recommended way to install `gws` is to download the pre-built binary for your OS and architecture from the **[GitHub Releases](https://github.com/googleworkspace/cli/releases)** page. Extract the archive and place the `gws` binary in your `$PATH`.\n\nFor convenience, you can also use `npm` to automate downloading the appropriate binary from GitHub Releases:\n\n```bash\nnpm install -g @googleworkspace/cli\n```\n\nOr build from source:\n\n```bash\ncargo install --git https://github.com/googleworkspace/cli --locked\n```\n\nA Nix flake is also available at `github:googleworkspace/cli`\n\n```bash\nnix run github:googleworkspace/cli\n```\n\nOn macOS and Linux, you can also install via [Homebrew](https://brew.sh/):\n\n```bash\nbrew install googleworkspace-cli\n```\n\n## Quick Start\n\n```bash\ngws auth setup     # walks you through Google Cloud project config\ngws auth login     # subsequent OAuth login\ngws drive files list --params '{\"pageSize\": 5}'\n```\n\n## Why gws?\n\n**For humans** — stop writing `curl` calls against REST docs. `gws` gives you `--help` on every resource, `--dry-run` to preview requests, and auto‑pagination.\n\n**For AI agents** — every response is structured JSON. Pair it with the included agent skills and your LLM can manage Workspace without custom tooling.\n\n```bash\n# List the 10 most recent files\ngws drive files list --params '{\"pageSize\": 10}'\n\n# Create a spreadsheet\ngws sheets spreadsheets create --json '{\"properties\": {\"title\": \"Q1 Budget\"}}'\n\n# Send a Chat message\ngws chat spaces messages create \\\n  --params '{\"parent\": \"spaces/xyz\"}' \\\n  --json '{\"text\": \"Deploy complete.\"}' \\\n  --dry-run\n\n# Introspect any method's request/response schema\ngws schema drive.files.list\n\n# Stream paginated results as NDJSON\ngws drive files list --params '{\"pageSize\": 100}' --page-all | jq -r '.files[].name'\n```\n\n## Authentication\n\nThe CLI supports multiple auth workflows so it works on your laptop, in CI, and on a server.\n\n### Which setup should I use?\n\n| I have… | Use |\n|---|---|\n| `gcloud` installed and authenticated | [`gws auth setup`](#interactive-local-desktop) (fastest) |\n| A GCP project but no `gcloud` | [Manual OAuth setup](#manual-oauth-setup-google-cloud-console) |\n| An existing OAuth access token | [`GOOGLE_WORKSPACE_CLI_TOKEN`](#pre-obtained-access-token) |\n| Existing Credentials | [`GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE`](#service-account-server-to-server) |\n\n### Interactive (local desktop)\n\nCredentials are encrypted at rest (AES-256-GCM) with the key stored in your OS keyring (or `~/.config/gws/.encryption_key` when `GOOGLE_WORKSPACE_CLI_KEYRING_BACKEND=file`).\n\n```bash\ngws auth setup       # one-time: creates a Cloud project, enables APIs, logs you in\ngws auth login       # subsequent scope selection and login\n```\n\n> `gws auth setup` requires the [`gcloud` CLI](https://cloud.google.com/sdk/docs/install). If you don't have `gcloud`, use the [manual setup](#manual-oauth-setup-google-cloud-console) below instead.\n\n> [!WARNING]\n> **Scope limits in testing mode:** If your OAuth app is unverified (testing mode),\n> Google limits consent to ~25 scopes. The `recommended` scope preset includes 85+\n> scopes and **will fail** for unverified apps (especially for `@gmail.com` accounts).\n> Choose individual services instead to filter the scope picker:\n> ```bash\n> gws auth login -s drive,gmail,sheets\n> ```\n\n\n### Manual OAuth setup (Google Cloud Console)\n\nUse this when `gws auth setup` cannot automate project/client creation, or when you want explicit control.\n\n1. Open Google Cloud Console in the target project:\n   - OAuth consent screen: `https://console.cloud.google.com/apis/credentials/consent?project=<PROJECT_ID>`\n   - Credentials: `https://console.cloud.google.com/apis/credentials?project=<PROJECT_ID>`\n2. Configure OAuth branding/audience if prompted:\n   - App type: **External** (testing mode is fine)\n3. Add your account under **Test users**\n4. Create an OAuth client:\n   - Type: **Desktop app**\n5. Download the client JSON and save it to:\n   - `~/.config/gws/client_secret.json`\n\n> [!IMPORTANT]\n> **You must add yourself as a test user.** In the OAuth consent screen, click\n> **Test users → Add users** and enter your Google account email. Without this,\n> login will fail with a generic \"Access blocked\" error.\n\nThen run:\n\n```bash\ngws auth login\n```\n\n### Browser-assisted auth (human or agent)\n\nYou can complete OAuth either manually or with browser automation.\n\n- **Human flow**: run `gws auth login`, open the printed URL, approve scopes.\n- **Agent-assisted flow**: the agent opens the URL, selects account, handles consent prompts, and returns control once the localhost callback succeeds.\n\nIf consent shows **\"Google hasn't verified this app\"** (testing mode), click **Continue**.\nIf scope checkboxes appear, select required scopes (or **Select all**) before continuing.\n\n### Headless / CI (export flow)\n\n1. Complete interactive auth on a machine with a browser.\n2. Export credentials:\n   ```bash\n   gws auth export --unmasked > credentials.json\n   ```\n3. On the headless machine:\n   ```bash\n   export GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=/path/to/credentials.json\n   gws drive files list   # just works\n   ```\n\n### Service Account (server-to-server)\n\nPoint to your key file; no login needed.\n\n```bash\nexport GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=/path/to/service-account.json\ngws drive files list\n```\n\n### Pre-obtained Access Token\n\nUseful when another tool (e.g. `gcloud`) already mints tokens for your environment.\n\n```bash\nexport GOOGLE_WORKSPACE_CLI_TOKEN=$(gcloud auth print-access-token)\n```\n\n### Precedence\n\n| Priority | Source                 | Set via                                 |\n| -------- | ---------------------- | --------------------------------------- |\n| 1        | Access token           | `GOOGLE_WORKSPACE_CLI_TOKEN`            |\n| 2        | Credentials file       | `GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE` |\n| 3        | Encrypted credentials  | `gws auth login`                        |\n| 4        | Plaintext credentials  | `~/.config/gws/credentials.json`        |\n\nEnvironment variables can also live in a `.env` file.\n\n## AI Agent Skills\n\nThe repo ships 100+ Agent Skills (`SKILL.md` files) — one for every supported API, plus higher-level helpers for common workflows and 50 curated recipes for Gmail, Drive, Docs, Calendar, and Sheets. See the full [Skills Index](docs/skills.md) for the complete list.\n\n```bash\n# Install all skills at once\nnpx skills add https://github.com/googleworkspace/cli\n\n# Or pick only what you need\nnpx skills add https://github.com/googleworkspace/cli/tree/main/skills/gws-drive\nnpx skills add https://github.com/googleworkspace/cli/tree/main/skills/gws-gmail\n```\n\n<details>\n<summary>OpenClaw setup</summary>\n\n```bash\n# Symlink all skills (stays in sync with repo)\nln -s $(pwd)/skills/gws-* ~/.openclaw/skills/\n\n# Or copy specific skills\ncp -r skills/gws-drive skills/gws-gmail ~/.openclaw/skills/\n```\n\nThe `gws-shared` skill includes an `install` block so OpenClaw auto-installs the CLI via `npm` if `gws` isn't on PATH.\n\n</details>\n\n## Gemini CLI Extension\n\n1. Authenticate the CLI first:\n\n   ```bash\n   gws auth setup\n   ```\n\n2. Install the extension into the Gemini CLI:\n   ```bash\n   gemini extensions install https://github.com/googleworkspace/cli\n   ```\n\nInstalling this extension gives your Gemini CLI agent direct access to all `gws` commands and Google Workspace agent skills. Because `gws` handles its own authentication securely, you simply need to authenticate your terminal once prior to using the agent, and the extension will automatically inherit your credentials.\n\n## Advanced Usage\n\n### Multipart Uploads\n\n```bash\ngws drive files create --json '{\"name\": \"report.pdf\"}' --upload ./report.pdf\n```\n\n### Pagination\n\n| Flag                | Description                                    | Default |\n| ------------------- | ---------------------------------------------- | ------- |\n| `--page-all`        | Auto-paginate, one JSON line per page (NDJSON) | off     |\n| `--page-limit <N>`  | Max pages to fetch                             | 10      |\n| `--page-delay <MS>` | Delay between pages                            | 100 ms  |\n\n### Google Sheets — Shell Escaping\n\nSheets ranges use `!` which bash interprets as history expansion. Always wrap values in **single quotes**:\n\n```bash\n# Read cells A1:C10 from \"Sheet1\"\ngws sheets spreadsheets values get \\\n  --params '{\"spreadsheetId\": \"SPREADSHEET_ID\", \"range\": \"Sheet1!A1:C10\"}'\n\n# Append rows\ngws sheets spreadsheets values append \\\n  --params '{\"spreadsheetId\": \"ID\", \"range\": \"Sheet1!A1\", \"valueInputOption\": \"USER_ENTERED\"}' \\\n  --json '{\"values\": [[\"Name\", \"Score\"], [\"Alice\", 95]]}'\n```\n\n### Helper Commands\n\nSome services ship hand-crafted helper commands alongside the auto-generated Discovery surface. Helper commands are prefixed with `+` so they are visually distinct and never collide with Discovery-generated method names.\n\nTime-aware helpers (`+agenda`, `+standup-report`, `+weekly-digest`, `+meeting-prep`) automatically use your **Google account timezone** (fetched from Calendar Settings API and cached for 24 hours). Override with `--timezone`/`--tz` on `+agenda`, or set the `--timezone` flag for explicit control.\n\nRun `gws <service> --help` to see both Discovery methods and helper commands together.\n\n```bash\ngws gmail --help      # shows +send, +reply, +reply-all, +forward, +triage, +watch …\ngws calendar --help   # shows +insert, +agenda …\ngws drive --help      # shows +upload …\n```\n\n**Full helper reference:**\n\n| Service | Command | Description |\n|---------|---------|-------------|\n| `gmail` | `+send` | Send a",
    "manifest_file": "Cargo.toml",
    "manifest_content": "# Copyright 2026 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n[workspace]\nmembers = [\"crates/google-workspace-cli\", \"crates/google-workspace\"]\nresolver = \"2\"\n\n# The profile that 'cargo dist' will build with\n[profile.dist]\ninherits = \"release\"\nlto = \"thin\"\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "runtime",
      "skill",
      "workspace",
      "llm",
      "workflow",
      "automation"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 97
    },
    "strategic_score": 97
  },
  {
    "owner": "interviewstreet",
    "name": "hiring-agent",
    "full_name": "interviewstreet/hiring-agent",
    "url": "https://github.com/interviewstreet/hiring-agent",
    "description": "AI agent to evaluate and score resumes.",
    "language": "Python",
    "total_stars": 3161,
    "forks": 700,
    "stars_this_period": 1836,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 247,
      "created_at": "2025-07-29T01:50:34Z",
      "pushed_at": "2026-06-22T17:40:27Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 700,
      "watchers": 6,
      "archived": false,
      "size_kb": 106
    },
    "readme_content": "# Hiring Agent\n\n<p align=\"center\"><strong>Resume-to-Score pipeline</strong> that extracts structured data from PDFs, enriches with GitHub signals, and outputs a fair, explainable evaluation.</p>\n\n<p align=\"center\">\n  <a href=\"https://www.python.org/downloads/release/python-3110/\">\n    <img alt=\"Python\" src=\"https://img.shields.io/badge/python-3.11%2B-blue.svg\">\n  </a>\n  <a href=\"https://github.com/interviewstreet/hiring-agent/blob/master/LICENSE\">\n    <img alt=\"License: MIT\" src=\"https://img.shields.io/badge/license-MIT-yellow.svg\">\n  </a>\n  <a href=\"https://github.com/psf/black\">\n    <img alt=\"Code style: Black\" src=\"https://img.shields.io/badge/code%20style-Black-000000.svg\">\n  </a>\n</p>\n\n---\n\n## Contents\n\n- [Overview](#overview)\n- [Architecture](#architecture)\n- [Installation and Setup](#installation-and-setup)\n  - [Prerequisites](#prerequisites)\n  - [Quick setup with pip](#quick-setup-with-pip)\n  - [Ollama models](#ollama-models)\n- [Configuration](#configuration)\n- [How it works](#how-it-works)\n- [CLI usage](#cli-usage)\n- [Directory layout](#directory-layout)\n- [Provider details](#provider-details)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Overview\n\nHiring Agent parses a resume PDF to Markdown, extracts sectioned JSON using a local or hosted LLM, augments the data with GitHub profile and repository signals, then produces an objective evaluation with category scores, evidence, bonus points, and deductions. You can run fully local with Ollama or use Google Gemini.\n\n---\n\n## Architecture\n\n<table>\n<tr>\n<td>\n\n**Flow**\n\n1. `pymupdf_rag.py` converts PDF pages to Markdown-like text.\n2. `pdf.py` calls the LLM per section using Jinja templates under `prompts/templates`.\n3. `github.py` fetches profile and repos, classifies projects, and asks the LLM to select the top 7.\n4. `evaluator.py` runs a strict-scored evaluation with fairness constraints.\n5. `score.py` orchestrates everything end to end and writes CSV when development mode is on.\n\n</td>\n<td>\n\n**Key modules**\n\n- `models.py`\n  Pydantic schemas and LLM provider interfaces.\n\n- `llm_utils.py`\n  Provider initialization and response cleanup.\n\n- `transform.py`\n  Normalization from loose LLM JSON to JSON Resume style.\n\n- `prompts/`\n  All Jinja templates for extraction and scoring.\n\n</td>\n</tr>\n</table>\n\n---\n\n## Installation and Setup\n\n### Prerequisites\n\n- **Python 3.11+**\n\n  The repository pins `.python-version` to 3.11.13.\n\n- **One LLM backend** (either of them)\n\n  - **Ollama** for local models\n    Install from the [official site](https://ollama.com/), then run `ollama serve`.\n  - **Google Gemini** if you have an API key, get it from [here](https://aistudio.google.com/api-keys).\n\n### Quick setup with pip\n\n```bash\n$ git clone https://github.com/interviewstreet/hiring-agent\n$ cd hiring-agent\n\n$ python -m venv .venv\n# Linux or macOS\n$ source .venv/bin/activate\n# Windows\n# .venv\\Scripts\\activate\n\n$ pip install -r requirements.txt\n```\n\n### Ollama Models\n\nPull the model you want to use. For example:\n\n```bash\n$ ollama pull gemma3:4b\n```\n\nIf you want different results, you can pull other models such as:\n\n```bash\n# For higher system configuration\n$ ollama pull gemma3:12b\n\n# For lower system configuration\n$ ollama pull gemma3:1b\n```\n\n---\n\n## Configuration\n\nCopy the template and set your environment variables.\n\n```bash\n$ cp .env.example .env\n```\n\n**Environment variables**\n\n| Variable         | Values                                      | Description                                                            |\n| ---------------- | ------------------------------------------- | ---------------------------------------------------------------------- |\n| `LLM_PROVIDER`   | `ollama` or `gemini`                        | Chooses provider. Defaults to Ollama.                                  |\n| `DEFAULT_MODEL`  | for example `gemma3:4b` or `gemini-2.5-pro` | Model name passed to the provider.                                     |\n| `GEMINI_API_KEY` | string                                      | Required when `LLM_PROVIDER=gemini`.                                   |\n| `GITHUB_TOKEN`   | optional                                    | Inherits from your shell environment, improves GitHub API rate limits. |\n\nProvider mapping lives in `prompt.py` and `models.py`. The `config.py` file has a single flag:\n\n```python\n# config.py\nDEVELOPMENT_MODE = True  # enables caching and CSV export\n```\n\nYou can leave it on during iteration. See the next section for details.\n\n---\n\n## How it works\n\n<details>\n<summary><b>1) PDF extraction</b></summary>\n\n- `pymupdf_rag.py` and `pdf.py` read the PDF using PyMuPDF and convert pages to Markdown-like text.\n- The `to_markdown` routine handles headings, links, tables, and basic formatting.\n\n</details>\n\n<details>\n<summary><b>2) Section parsing with templates</b></summary>\n\n- `prompts/templates/*.jinja` define strict instructions for each section\n  Basics, Work, Education, Skills, Projects, Awards.\n- `pdf.PDFHandler` calls the LLM per section and assembles a `JSONResume` object (see `models.py`).\n\n</details>\n\n<details>\n<summary><b>3) GitHub enrichment</b></summary>\n\n- `github.py` extracts a username from the resume profiles, fetches profile and repos, and classifies each project.\n- It asks the LLM to select exactly 7 unique projects with a minimum author commit threshold, favoring meaningful contributions.\n\n</details>\n\n<details>\n<summary><b>4) Evaluation</b></summary>\n\n- `evaluator.py` uses templates that encode fairness and scoring rules.\n- Scores include `open_source`, `self_projects`, `production`, and `technical_skills`, plus bonus and deductions, then an explanation for evidence.\n\n</details>\n\n<details>\n<summary><b>5) Output and CSV export</b></summary>\n\n- `score.py` prints a readable summary to stdout.\n- When `DEVELOPMENT_MODE=True` it creates or appends a `resume_evaluations.csv` with key fields, and caches intermediate JSON under `cache/`.\n\n</details>\n\n---\n\n## CLI usage\n\n### End to end scoring\n\nProvide a path to a resume PDF.\n\n```bash\n$ python score.py /path/to/resume.pdf\n```\n\nWhat happens:\n\n1. If development mode is on, the PDF extraction result is cached to `cache/resumecache_<basename>.json`.\n2. If a GitHub profile is found in the resume, repositories are fetched and cached to `cache/githubcache_<basename>.json`.\n3. The evaluator prints a report and, in development mode, appends a CSV row to `resume_evaluations.csv`.\n\n---\n\n## Directory layout\n\n```text\n.\n├── .env.example\n├── .python-version\n├── config.py\n├── evaluator.py\n├── github.py\n├── llm_utils.py\n├── models.py\n├── pdf.py\n├── prompt.py\n├── prompts/\n│   ├── template_manager.py\n│   └── templates/\n│       ├── awards.jinja\n│       ├── basics.jinja\n│       ├── education.jinja\n│       ├── github_project_selection.jinja\n│       ├── projects.jinja\n│       ├── resume_evaluation_criteria.jinja\n│       ├── resume_evaluation_system_message.jinja\n│       ├── skills.jinja\n│       ├── system_message.jinja\n│       └── work.jinja\n├── pymupdf_rag.py\n├── requirements.txt\n├── score.py\n└── transform.py\n```\n\n---\n\n## Provider details\n\n### Ollama\n\n- Set `LLM_PROVIDER=ollama`\n- Set `DEFAULT_MODEL` to any pulled model, for example `gemma3:4b`\n- The provider wrapper in `models.OllamaProvider` calls `ollama.chat`\n\n### Gemini\n\n- Set `LLM_PROVIDER=gemini`\n- Set `DEFAULT_MODEL` to a supported Gemini model, for example `gemini-2.0-flash`\n- Provide `GEMINI_API_KEY`\n- The wrapper in `models.GeminiProvider` adapts responses to a unified format\n\n---\n\n## Contributing\n\nPlease read the [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines on filing issues, proposing changes, and submitting pull requests. Key principles include:\n\n- Keep prompts declarative and provider-agnostic.\n- Validate changes with a couple of real resumes under different providers.\n- Add or adjust unit-free smoke tests that call each stage with minimal inputs.\n\n---\n\n\n## License\n\n[MIT](https://github.com/interviewstreet/hiring-agent/blob/master/LICENSE) © HackerRank\n",
    "manifest_file": "requirements.txt",
    "manifest_content": "PyMuPDF==1.26.3\nollama==0.5.1\npydantic==2.11.7\nrequests==2.32.4\npymupdf4llm==0.0.27\nJinja2==3.1.6\ngoogle-generativeai==0.4.0\npython-dotenv==1.0.1\nblack==25.9.0",
    "strategic_keywords": [
      "agent",
      "rag",
      "llm",
      "eval"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "requirements.txt"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "owner": "alibaba",
    "name": "page-agent",
    "full_name": "alibaba/page-agent",
    "url": "https://github.com/alibaba/page-agent",
    "description": "JavaScript in-page GUI agent. Control web interfaces with natural language.",
    "language": "TypeScript",
    "total_stars": 20465,
    "forks": 1763,
    "stars_this_period": 1649,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [
        "agent",
        "ai",
        "ai-agents",
        "browser-automation",
        "javascript",
        "mcp",
        "typescript",
        "web"
      ],
      "license": "MIT",
      "open_issues": 47,
      "created_at": "2025-09-23T09:30:17Z",
      "pushed_at": "2026-06-25T17:07:30Z",
      "homepage": "https://alibaba.github.io/page-agent/",
      "default_branch": "main",
      "forks": 1763,
      "watchers": 62,
      "archived": false,
      "size_kb": 3111
    },
    "readme_content": "# Page Agent\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://page-agent.github.io/assets/readme/banner-dark.png\">\n  <img alt=\"Page Agent Banner\" src=\"https://page-agent.github.io/assets/readme/banner-light.png\">\n</picture>\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-auto.svg)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/) [![Bundle Size](https://img.shields.io/bundlephobia/minzip/page-agent)](https://bundlephobia.com/package/page-agent) [![Downloads](https://img.shields.io/npm/dt/page-agent.svg)](https://www.npmjs.com/package/page-agent) [![GitHub stars](https://img.shields.io/github/stars/alibaba/page-agent.svg)](https://github.com/alibaba/page-agent)\n\nThe GUI Agent Living in Your Webpage. Control web interfaces with natural language.\n\n🌐 **English** | [中文](./docs/README-zh.md)\n\n<a href=\"https://alibaba.github.io/page-agent/\" target=\"_blank\"><b>🚀 Demo</b></a> | <a href=\"https://alibaba.github.io/page-agent/docs/introduction/overview\" target=\"_blank\"><b>📖 Docs</b></a> | <a href=\"https://news.ycombinator.com/item?id=47264138\" target=\"_blank\"><b>📢 HN Discussion</b></a> | <a href=\"https://x.com/simonluvramen\" target=\"_blank\"><b>𝕏 Follow on X</b></a>\n\n<!-- demo video -->\n\nhttps://github.com/user-attachments/assets/a1f2eae2-13fb-4aae-98cf-a3fc1620a6c2\n\n---\n\n## ✨ Features\n\n- **🎯 Easy integration**\n    - No need for `browser extension` / `python` / `headless browser`.\n    - Just in-page javascript. Everything happens in your web page.\n- **📖 Text-based DOM manipulation**\n    - No screenshots. No multi-modal LLMs or special permissions needed.\n- **🧠 Bring your own LLMs**\n- **🐙 Optional [chrome extension](https://alibaba.github.io/page-agent/docs/features/chrome-extension) for multi-page tasks.**\n    - And an [MCP Server (Beta)](https://alibaba.github.io/page-agent/docs/features/mcp-server) to control it from outside\n\n## 💡 Use Cases\n\n- **SaaS AI Copilot** — Ship an AI copilot in your product in lines of code. No backend rewrite.\n- **Smart Form Filling** — Turn 20-click workflows into one sentence. Perfect for ERP, CRM, and admin systems.\n- **Accessibility** — Make any web app accessible through natural language. Voice commands, screen readers, zero barrier.\n- **Multi-page Agent** — Extend your own web agent's reach across browser tabs [chrome extension](https://alibaba.github.io/page-agent/docs/features/chrome-extension).\n- **MCP** - Allow your agent clients to control your browser.\n\n## 🚀 Quick Start\n\n### One-line integration\n\nFastest way to try PageAgent with our free Demo LLM:\n\n```html\n<script src=\"{URL}\" crossorigin=\"true\"></script>\n```\n\n> **⚠️ For technical evaluation only.** This demo CDN uses our free [testing LLM API](https://alibaba.github.io/page-agent/docs/features/models#free-testing-api). By using it, you agree to its [terms](https://github.com/alibaba/page-agent/blob/main/docs/terms-and-privacy.md).\n\n| Mirrors | URL                                                                                 |\n| ------- | ----------------------------------------------------------------------------------- |\n| Global  | https://cdn.jsdelivr.net/npm/page-agent@1.10.0/dist/iife/page-agent.demo.js         |\n| China   | https://registry.npmmirror.com/page-agent/1.10.0/files/dist/iife/page-agent.demo.js |\n\nAdd `?autoInit=false` to load the script without creating the demo agent automatically. You can then instantiate it with `new window.PageAgent(...)`.\n\n### NPM Installation\n\n```bash\nnpm install page-agent\n```\n\n```javascript\nimport { PageAgent } from 'page-agent'\n\nconst agent = new PageAgent({\n    model: 'qwen3.5-plus',\n    baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n    apiKey: 'YOUR_API_KEY',\n    language: 'en-US',\n})\n\nawait agent.execute('Click the login button')\n```\n\nFor more programmatic usage, see [📖 Documentations](https://alibaba.github.io/page-agent/docs/introduction/overview).\n\n## 🌟 Awesome Page Agent\n\nBuilt something cool with PageAgent? Add it here! Open a PR to share your project.\n\n> These are community projects — not maintained or endorsed by us. Use at your own discretion.\n\n| Project  | Description                                                 |\n| -------- | ----------------------------------------------------------- |\n| _Yours?_ | [Open a PR](https://github.com/alibaba/page-agent/pulls) 🙌 |\n\n## 🤝 Contributing\n\nWe welcome contributions from the community! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines and [docs/developer-guide.md](docs/developer-guide.md) for local development workflows.\n\nPlease read the [maintainer's note](https://github.com/alibaba/page-agent/issues/349) on principles and current state.\n\nContributions generated entirely by **bots or AI** without substantial human involvement will **not be accepted**.\n\n## ⚖️ License\n\n[MIT License](LICENSE)\n\n## 👏 Acknowledgments\n\nThis project builds upon the excellent work of **[`browser-use`](https://github.com/browser-use/browser-use)**.\n\n`PageAgent` is designed for **client-side web enhancement**, not server-side automation.\n\n```\nDOM processing components and prompt are derived from browser-use:\n\nBrowser Use <https://github.com/browser-use/browser-use>\nCopyright (c) 2024 Gregor Zunic\nLicensed under the MIT License\n\nWe gratefully acknowledge the browser-use project and its contributors for their\nexcellent work on web automation and DOM interaction patterns that helped make\nthis project possible.\n```\n\n---\n\n**⭐ Star this repo if you find PageAgent helpful!**\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n    \"name\": \"root\",\n    \"private\": true,\n    \"version\": \"1.10.0\",\n    \"type\": \"module\",\n    \"workspaces\": [\n        \"packages/page-controller\",\n        \"packages/ui\",\n        \"packages/llms\",\n        \"packages/core\",\n        \"packages/page-agent\",\n        \"packages/mcp\",\n        \"packages/extension\",\n        \"packages/website\"\n    ],\n    \"description\": \"AI-powered UI agent for web applications\",\n    \"author\": \"Simon<gaomeng1900>\",\n    \"license\": \"MIT\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/alibaba/page-agent.git\"\n    },\n    \"homepage\": \"https://alibaba.github.io/page-agent/\",\n    \"engines\": {\n        \"node\": \"^22.22.1 || >=24\",\n        \"npm\": \"^11.6.3\"\n    },\n    \"scripts\": {\n        \"start\": \"npm run dev --workspace=@page-agent/website\",\n        \"dev:ext\": \"npm run dev -w @page-agent/ext\",\n        \"dev:demo\": \"npm run dev:demo --workspace=page-agent\",\n        \"build\": \"node scripts/build.js\",\n        \"build:libs\": \"node scripts/build-libs.js\",\n        \"build:website\": \"npm run build:website --workspace=@page-agent/website\",\n        \"build:ext\": \"npm run zip -w @page-agent/ext\",\n        \"version\": \"node scripts/sync-version.js\",\n        \"postpublish\": \"npm run postpublish --workspaces --if-present\",\n        \"typecheck\": \"tsc --noEmit -p tsconfig.typecheck.json && tsc --noEmit -p packages/extension/tsconfig.json\",\n        \"test\": \"npm test --workspaces --if-present\",\n        \"lint\": \"eslint .\",\n        \"ci\": \"node scripts/ci.js\",\n        \"cleanup\": \"rm -rf packages/*/dist && rm -rf packages/*/.output\",\n        \"prepare\": \"husky || true\"\n    },\n    \"devDependencies\": {\n        \"@commitlint/cli\": \"^21.0.1\",\n        \"@commitlint/config-conventional\": \"^21.0.1\",\n        \"@eslint-react/eslint-plugin\": \"^5.9.2\",\n        \"@eslint/js\": \"^10.0.1\",\n        \"@microsoft/api-extractor\": \"^7.58.9\",\n        \"@tailwindcss/vite\": \"^4.3.1\",\n        \"@trivago/prettier-plugin-sort-imports\": \"^6.0.2\",\n        \"@types/node\": \"^26.0.0\",\n        \"@vitejs/plugin-react\": \"^6.0.2\",\n        \"chalk\": \"^5.6.2\",\n        \"concurrently\": \"^10.0.3\",\n        \"dotenv\": \"^17.4.2\",\n        \"eslint\": \"^10.5.0\",\n        \"globals\": \"^17.7.0\",\n        \"happy-dom\": \"^20.10.6\",\n        \"husky\": \"^9.1.7\",\n        \"lint-staged\": \"^17.0.8\",\n        \"prettier\": \"^3.8.4\",\n        \"typescript\": \"^6.0.3\",\n        \"typescript-eslint\": \"^8.62.0\",\n        \"unplugin-dts\": \"^1.0.1\",\n        \"vite\": \"^8.0.14\",\n        \"vite-plugin-css-injected-by-js\": \"^5.0.1\",\n        \"vitest\": \"^4.1.9\"\n    },\n    \"overrides\": {\n        \"typescript\": \"^6.0.3\",\n        \"node-notifier\": {\n            \"uuid\": \"11.1.1\"\n        },\n        \"web-ext-run\": {\n            \"tmp\": \"0.2.7\"\n        }\n    },\n    \"lint-staged\": {\n        \"*.{js,ts,cjs,cts,mjs,mts}\": [\n            \"npx prettier --write --ignore-unknown\",\n            \"npx eslint --quiet\"\n        ],\n        \"*.{jsx,tsx}\": [\n            \"npx prettier --write --ignore-unknown\",\n            \"npx eslint --quiet\"\n        ],\n        \"*.css\": [\n            \"npx prettier --write --ignore-unknown\"\n        ]\n    },\n    \"commitlint\": {\n        \"extends\": [\n            \"@commitlint/config-conventional\"\n        ],\n        \"rules\": {\n            \"subject-case\": [\n                0,\n                \"never\"\n            ]\n        }\n    },\n    \"prettier\": {\n        \"singleQuote\": true,\n        \"semi\": false,\n        \"useTabs\": true,\n        \"printWidth\": 100,\n        \"trailingComma\": \"es5\",\n        \"plugins\": [\n            \"@trivago/prettier-plugin-sort-imports\"\n        ],\n        \"importOrder\": [\n            \"<THIRD_PARTY_MODULES>\",\n            \"^(@/).*(?<!css)$\",\n            \"^[./].*(?<!css)$\",\n            \".css$\"\n        ],\n        \"importOrderSeparation\": true,\n        \"importOrderSortSpecifiers\": true,\n        \"overrides\": [\n            {\n                \"files\": \"*.md\",\n                \"options\": {\n                    \"useTabs\": false,\n                    \"tabWidth\": 4\n                }\n            },\n            {\n                \"files\": \"*.json\",\n                \"options\": {\n                    \"useTabs\": false,\n                    \"tabWidth\": 4\n                }\n            }\n        ]\n    }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "workspace",
      "llm",
      "eval",
      "workflow",
      "automation"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 95
    },
    "strategic_score": 95
  },
  {
    "owner": "IceWhaleTech",
    "name": "CasaOS",
    "full_name": "IceWhaleTech/CasaOS",
    "url": "https://github.com/IceWhaleTech/CasaOS",
    "description": "CasaOS - A simple, easy-to-use, elegant open-source Personal Cloud system.",
    "language": "Go",
    "total_stars": 35975,
    "forks": 2049,
    "stars_this_period": 1566,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "casaos",
        "docker",
        "golang",
        "home-automation",
        "home-cloud",
        "home-server",
        "iot",
        "raspberry",
        "self-hosted",
        "vuejs"
      ],
      "license": "Apache-2.0",
      "open_issues": 816,
      "created_at": "2021-09-26T02:33:09Z",
      "pushed_at": "2025-08-06T08:54:04Z",
      "homepage": "https://casaos.zimaspace.com",
      "default_branch": "main",
      "forks": 2049,
      "watchers": 209,
      "archived": false,
      "size_kb": 182856
    },
    "readme_content": "# CasaOS - Your Personal Cloud \n<!-- Readme i18n links -->\n<!-- > English | [中文](#) | [Français](#) -->\n\n<p align=\"center\">\n    <!-- CasaOS Banner -->\n    <picture>\n        <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/IceWhaleTech/logo/main/casaos/casaos_banner_dark_night_800x300.png\">\n        <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/IceWhaleTech/logo/main/casaos/casaos_banner_twilight_blue_800x300.png\">\n        <img alt=\"CasaOS\" src=\"https://raw.githubusercontent.com/IceWhaleTech/logo/main/casaos/casaos_banner_twilight_blue_800x300.png\">\n    </picture>\n    <br/>\n    <i>Connect with the community, establish autonomy, reduce the cost of SaaS, and MAXIMIZE the potential for a personalized copilot.</i>\n    <br/>\n    <br/>\n    <!-- CasaOS Badges -->\n    <a href=\"https://github.com/IceWhaleTech/CasaOS\" target=\"_blank\">\n        <img alt=\"CasaOS Version\" src=\"https://img.shields.io/github/v/release/IceWhaleTech/CasaOS?color=162453&style=flat-square&label=CasaOS\" />\n    </a>\n    <a href=\"https://github.com/IceWhaleTech/CasaOS/blob/main/LICENSE\" target=\"_blank\">\n        <img alt=\"CasaOS License\" src=\"https://img.shields.io/github/license/IceWhaleTech/CasaOS?color=162453&style=flat-square&label=License\" />\n    </a>\n    <a href=\"https://github.com/IceWhaleTech/CasaOS/pulls\" target=\"_blank\">\n        <img alt=\"CasaOS Pull Requests\" src=\"https://img.shields.io/github/issues-pr/IceWhaleTech/CasaOS?color=162453&style=flat-square&label=PRs\" />\n    </a>\n    <a href=\"https://github.com/IceWhaleTech/CasaOS/issues\" target=\"_blank\">\n        <img alt=\"CasaOS Issues\" src=\"https://img.shields.io/github/issues/IceWhaleTech/CasaOS?color=162453&style=flat-square&label=Issues\" />\n    </a>\n    <a href=\"https://codecov.io/gh/IceWhaleTech/CasaOS\" > \n    <img src=\"https://codecov.io/gh/IceWhaleTech/CasaOS/branch/main/graph/badge.svg?token=l9uMKGlkxM\"/> \n    </a>\n    <a href=\"https://github.com/IceWhaleTech/CasaOS/stargazers\" target=\"_blank\">\n        <img alt=\"CasaOS Stargazers\" src=\"https://img.shields.io/github/stars/IceWhaleTech/CasaOS?color=162453&style=flat-square&label=Stars\" />\n    </a>\n    <!-- <a href=\"https://github.com/IceWhaleTech/CasaOS/releases\" target=\"_blank\">\n    <img alt=\"CasaOS Downloads\" src=\"https://img.shields.io/github/downloads/IceWhaleTech/CasaOS/total?color=162453&style=flat-square\" />\n    </a> -->\n    <br/>\n    <!-- CasaOS Community -->\n    <a href=\"https://discord.gg/knqAbbBbeX\" target=\"_blank\">\n        <img alt=\"IceWhale Discord\" src=\"https://img.shields.io/discord/884667213326463016?color=162453&style=flat-square&label=Discord&logo=discord&logoColor=fff\" />\n    </a>\n    <a href=\"https://github.com/IceWhaleTech/CasaOS/discussions\" target=\"_blank\">\n        <img alt=\"CasaOS GitHub Discussions\" src=\"https://img.shields.io/github/discussions/IceWhaleTech/CasaOS?color=162453&style=flat-square&label=Discussions&logo=github\" />\n    </a>\n<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->\n    <a href=\"#credits\">\n        <img alt=\"All Contributors\" src=\"https://img.shields.io/static/v1?label=All%20Contributors&message=15&color=162453&style=flat-square&logo=Handshake&logoColor=fff\" />\n    </a>\n    <!-- CasaOS YouTube -->\n    <a href=\"https://www.youtube.com/channel/UC2zMrUYT17AJhIl9XWZzT8g\" target=\"_blank\">\n        <img alt=\"YouTube Tutorial Views\" src=\"https://img.shields.io/youtube/channel/views/UC2zMrUYT17AJhIl9XWZzT8g?style=flat-square&logo=youtube&logoColor=red&label=YouTube%20Tutorial%20Views\" />\n    </a>\n    <br/>    \n    <a href=\"http://bit.ly/45JQIiL\" target=\"_blank\">\n        <img alt=\"twitter ZimaSpace\" src=\"https://img.shields.io/twitter/follow/ZimaSpace?style=flat-square&logo=X&label=Contact%20Us%20%40%20ZimaSpace&labelColor=555&color=555\" />\n    </a>\n    <a href=\"http://bit.ly/4lgHj7V\" target=\"_blank\">\n        <img alt=\"facebook ZimaSpace\" src=\"https://img.shields.io/badge/ZimaSpace-1877F2?style=flat-square&logo=Facebook&logoColor=fff&label=Contact%20Us&labelColor=555&color=162453\" />\n    </a>\n    <br/>\n    <!-- CasaOS Links -->\n    <a href=\"https://www.casaos.io\" target=\"_blank\">Website</a> |\n    <a href=\"http://demo.casaos.io\" target=\"_blank\">Demo</a> |\n    <a href=\"https://github.com/IceWhaleTech/CasaOS\" target=\"_blank\">GitHub</a>\n    <br/>\n    <br/>\n    <!-- CasaOS Snapshots -->\n    <kbd>\n      <picture>\n          <source media=\"(prefers-color-scheme: dark)\" srcset=\"snapshot-dark.jpg\">\n          <source media=\"(prefers-color-scheme: light)\" srcset=\"snapshot-light.jpg\">\n          <img alt=\"CasaOS Snapshot\" src=\"snapshot-light.jpg\">\n      </picture>\n    </kbd>\n</p>\n\n## Why do you need Personal Cloud?\n\nIn 2020, the team noticed three important trends:\n- The cost of computing power and storage was decreasing fast.\n- A part of cloud computing was moving towards edge computing.\n- The issue of consumer data asset ownership and attribution had been ignored.\n\nBased on these trends, the team proposed a thought experiment internally: what if personal clouds were available under $100 in next five years? This personal cloud would provide a low-cost data collaboration solution as a personal data center, storing and managing data for creators and small organizations. A distributed collaborative computing network can be formed by personal servers located around the world. It could also control and connect all smart devices, providing cross-ecosystem local intelligent services.\n\nFurthermore, the personal cloud could combine personal data to train personalized AI assistants. The idea is that this technology would be an effective way to solve the issue of consumer data asset ownership and , as well as provide a more affordable and efficient computing solution for individuals and small organizations.\n\n> If you think what we are doing is valuable. Please **give us a star ⭐** and **fork it 🤞**!\n\n## Features\n\n- Friendly UI designed for home scenarios\n  - No code, no forms, intuitive, design for humanity\n- Multiple hardware and base system support\n  - ZimaBoard, NUC, RPi, old computers, whatever is available.\n- Selected apps in the app store, one-click installation\n  - Nextcloud, HomeAssistant, AdGuard, Jellyfin, *arr and more!\n- Easily install numerous Docker apps\n  - Over 100,000 apps from the Docker ecosystem can be easily installed\n- Elegant drive and file management\n  - What you see is what you get. No technical background required.\n- Well-designed system/app widgets\n  - What you care about, at a glance. Resource usage, app status, and more!\n\n## Getting Started\n\nCasaOS fully supports ZimaBoard, Intel NUC, and Raspberry Pi. Also, more computers and development boards and fully compatible with Ubuntu, Debian, Raspberry Pi OS, and CentOS with one-liner installation.\n\n### Hardware Compatibility\n\n- amd64 / x86-64\n- arm64\n- armv7\n\n### System Compatibility\n\nOfficial Support\n- Debian 12 (✅ Tested, Recommended)\n- Ubuntu Server 20.04 (✅ Tested)\n- Raspberry Pi OS (✅ Tested)\n\nCommunity Support\n- Elementary 6.1 (✅ Tested)\n- Armbian 22.04 (✅ Tested)\n- Alpine (🚧 Not Fully Tested Yet)\n- OpenWrt (🚧 Not Fully Tested Yet)\n- ArchLinux (🚧 Not Fully Tested Yet)\n\n### Quick Setup CasaOS\n\nFreshly install a system from the list above and run this command:\n\n```sh\nwget -qO- https://get.casaos.io | sudo bash\n```\n\nor\n\n```sh\ncurl -fsSL https://get.casaos.io | sudo bash\n```\n\n### Update CasaOS\n\nCasaOS can be updated from the User Interface (UI), via `Settings ... Update`.  \n\nAlternatively it can be updated from a terminal session.  To update from a terminal session, it must be done either from a secure shell (ssh) session to the device or from a directly attached terminal and keyboard to the device running CasaOS, this cannot be done from the terminal via the CasaOS User Interface (UI).  To update to the latest release of CasaOS from a terminal session run this command:\n\n```sh\nwget -qO- https://get.casaos.io/update | sudo bash\n```\n\nor\n\n```sh\ncurl -fsSL https://get.casaos.io/update | sudo bash\n```\n\nTo determine version of CasaOS from a terminal session run this command:\n\n```sh\ncasaos -v\n```\n\n\n\n### Uninstall CasaOS\n\n\nv0.3.3 or newer\n\n```sh\ncasaos-uninstall\n```\n\nBefore v0.3.3\n\n```sh\ncurl -fsSL https://get.icewhale.io/casaos-uninstall.sh | sudo bash\n```\n\n## Community \n\nThe word Casa comes from the Spanish word for \"home\". Project CasaOS originated as a pre-installed system for the crowdfunded product [ZimaBoard](https://www.zimaboard.com) on Kickstarter.\n\nAfter looking at many systems and software on the market, the team found no server system designed for home scenarios, sadly true.\n\nSo, we set out to build this open-source project to develop CasaOS with our own hands, everyone in the community, and you.\n\nWe believe that through community-driven collaborative innovation and open communication with global developers, we can reshape the digital home experience like never before.\n\n**A warm welcome for you to get help or share great ideas in the [Discord](https://discord.gg/knqAbbBbeX)!**\n\n[![Discord Card](https://discordapp.com/api/guilds/884667213326463016/widget.png?style=banner2)](https://discord.gg/knqAbbBbeX)\n\n## Contributing\n\nCasaOS is a community-driven open source project and the people involved are CasaOS users. That means CasaOS will always need contributions from community members just like you!\n\n- See <https://wiki.casaos.io/en/contribute> for ways of contributing to CasaOS\n- See <https://wiki.casaos.io/en/contribute/development> if you want to be involved in code contribution specifically\n\n\n## Credits\n\nMany thanks to everyone who has helped CasaOS so far!\n\nEveryone's contribution is greatly appreciated. ([Emoji Key](https://allcontributors.org/docs/en/emoji-key))\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://github.com/jerrykuku\"><img src=\"https://avatars.githubusercontent.com/u/9485680?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>老竭力</b></sub></a><br /><a href=\"https://github.com/IceWhaleTech/CasaOS/commits?author=jerrykuku\" title=\"Code\">💻</a> <a href=\"https://github.com/IceWhaleTech/CasaOS/commits?author=jerrykuku\" title=\"Documentation\">📖</a> <a href=\"#ideas-jerrykuku\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-jerrykuku\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-jerrykuku\" title=\"Maintenance\">🚧</a> <a href=\"#platform-jerrykuku\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"#question-jerrykuku\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/IceWhaleTech/CasaOS/pulls?q=is%3Apr+reviewed-by%3Ajerrykuku\" title=\"Reviewed Pull Requests\">👀</a></td>\n    <td align=\"center\"><a href=\"https://github.com/LinkLeong\"><img src=\"https://avatars.githubusercontent.com/u/13556972?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>link</b></sub></a><br /><a href=\"https://github.com/IceWhaleTech/CasaOS/commits?author=LinkLeong\" title=\"Code\">💻</a> <a href=\"https://github.com/IceWhaleTech/CasaOS/commits?author=LinkLeong\" title=\"Documentation\">📖</a> <a href=\"#ideas-LinkLeong\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-LinkLeong\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-LinkLeong\" title=\"Maintenance\">🚧</a> <a href=\"#question-LinkLeong\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/IceWhaleTech/CasaOS/pulls?q=is%3Apr+reviewed-by%3ALinkLeong\" title=\"Reviewed Pull Requests\">👀</a></td>\n    <td align=\"center\"><a href=\"https://github.com/tigerinus\"><img src=\"https://avatars.githubusercontent.com/u/7172560?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>太戈</b></sub></a><br /><a href=\"https://github.com/IceWhaleTech/CasaOS/commits?author=tigerinus\" title=\"Code\">💻</a> <a href=\"https://github.com/IceWhaleTech/CasaOS/commits?author=tigerinus\" title=\"Documentation\">📖</a> <a href=\"#ideas-tigerinus\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/IceWhaleTech/CasaOS\n\ngo 1.21\n\nrequire (\n\tgithub.com/Curtis-Milo/nat-type-identifier-go v0.0.0-20220215191915-18d42168c63d\n\tgithub.com/IceWhaleTech/CasaOS-Common v0.4.11-alpha4\n\tgithub.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf\n\tgithub.com/deckarep/golang-set/v2 v2.3.0\n\tgithub.com/deepmap/oapi-codegen v1.12.4\n\tgithub.com/disintegration/imaging v1.6.2\n\tgithub.com/dsoprea/go-exif/v3 v3.0.1\n\tgithub.com/getkin/kin-openapi v0.117.0\n\tgithub.com/glebarez/sqlite v1.8.0\n\tgithub.com/go-ini/ini v1.67.0\n\tgithub.com/go-resty/resty/v2 v2.7.0\n\tgithub.com/golang/mock v1.6.0\n\tgithub.com/gomodule/redigo v1.8.9\n\tgithub.com/google/go-github/v36 v36.0.0\n\tgithub.com/google/uuid v1.5.0\n\tgithub.com/googollee/go-socket.io v1.7.0\n\tgithub.com/gorilla/websocket v1.5.0\n\tgithub.com/h2non/filetype v1.1.3\n\tgithub.com/hirochachacha/go-smb2 v1.1.0\n\tgithub.com/json-iterator/go v1.1.12\n\tgithub.com/labstack/echo/v4 v4.12.0\n\tgithub.com/maruel/natural v1.1.0\n\tgithub.com/mholt/archiver/v3 v3.5.1\n\tgithub.com/mileusna/useragent v1.2.1\n\tgithub.com/moby/sys/mount v0.3.3\n\tgithub.com/moby/sys/mountinfo v0.6.2\n\tgithub.com/patrickmn/go-cache v2.1.0+incompatible\n\tgithub.com/pkg/errors v0.9.1\n\tgithub.com/robfig/cron/v3 v3.0.1\n\tgithub.com/samber/lo v1.38.1\n\tgithub.com/shirou/gopsutil/v3 v3.23.2\n\tgithub.com/sirupsen/logrus v1.9.3\n\tgithub.com/stretchr/testify v1.9.0\n\tgithub.com/tidwall/gjson v1.17.0\n\tgo.uber.org/goleak v1.2.1\n\tgo.uber.org/zap v1.24.0\n\tgolang.org/x/crypto v0.23.0\n\tgolang.org/x/oauth2 v0.7.0\n\tgolang.org/x/sync v0.3.0\n\tgolang.org/x/sys v0.20.0\n\tgorm.io/gorm v1.25.0\n\tgotest.tools v2.2.0+incompatible\n)\n\nrequire (\n\tgithub.com/andybalholm/brotli v1.0.5 // indirect\n\tgithub.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect\n\tgithub.com/benbjohnson/clock v1.3.1 // indirect\n\tgithub.com/coreos/go-systemd/v22 v22.5.0 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect\n\tgithub.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect\n\tgithub.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 // indirect\n\tgithub.com/dustin/go-humanize v1.0.1 // indirect\n\tgithub.com/geoffgarside/ber v1.1.0 // indirect\n\tgithub.com/glebarez/go-sqlite v1.21.1 // indirect\n\tgithub.com/go-errors/errors v1.4.2 // indirect\n\tgithub.com/go-ole/go-ole v1.2.6 // indirect\n\tgithub.com/go-openapi/jsonpointer v0.19.6 // indirect\n\tgithub.com/go-openapi/swag v0.22.3 // indirect\n\tgithub.com/godbus/dbus/v5 v5.1.0 // indirect\n\tgithub.com/gofrs/uuid v4.4.0+incompatible // indirect\n\tgithub.com/golang-jwt/jwt v3.2.2+incompatible // indirect\n\tgithub.com/golang-jwt/jwt/v4 v4.5.0 // indirect\n\tgithub.com/golang-jwt/jwt/v5 v5.0.0 // indirect\n\tgithub.com/golang/geo v0.0.0-20210211234256-740aa86cb551 // indirect\n\tgithub.com/golang/protobuf v1.5.3 // indirect\n\tgithub.com/golang/snappy v0.0.4 // indirect\n\tgithub.com/google/go-cmp v0.6.0 // indirect\n\tgithub.com/google/go-querystring v1.1.0 // indirect\n\tgithub.com/google/safetext v0.0.0-20240104143208-7a7d9b3d812f // indirect\n\tgithub.com/gorilla/mux v1.8.0 // indirect\n\tgithub.com/invopop/yaml v0.2.0 // indirect\n\tgithub.com/jinzhu/inflection v1.0.0 // indirect\n\tgithub.com/jinzhu/now v1.1.5 // indirect\n\tgithub.com/josharian/intern v1.0.0 // indirect\n\tgithub.com/klauspost/compress v1.16.7 // indirect\n\tgithub.com/klauspost/pgzip v1.2.5 // indirect\n\tgithub.com/labstack/echo-jwt/v4 v4.2.0 // indirect\n\tgithub.com/labstack/gommon v0.4.2 // indirect\n\tgithub.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de // indirect\n\tgithub.com/mailru/easyjson v0.7.7 // indirect\n\tgithub.com/mattn/go-colorable v0.1.13 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect\n\tgithub.com/modern-go/reflect2 v1.0.2 // indirect\n\tgithub.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect\n\tgithub.com/nwaples/rardecode v1.1.3 // indirect\n\tgithub.com/perimeterx/marshmallow v1.1.4 // indirect\n\tgithub.com/pierrec/lz4/v4 v4.1.17 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect\n\tgithub.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect\n\tgithub.com/tidwall/match v1.1.1 // indirect\n\tgithub.com/tidwall/pretty v1.2.1 // indirect\n\tgithub.com/tklauser/go-sysconf v0.3.11 // indirect\n\tgithub.com/tklauser/numcpus v0.6.0 // indirect\n\tgithub.com/ugorji/go/codec v1.2.11 // indirect\n\tgithub.com/ulikunitz/xz v0.5.11 // indirect\n\tgithub.com/valyala/bytebufferpool v1.0.0 // indirect\n\tgithub.com/valyala/fasttemplate v1.2.2 // indirect\n\tgithub.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect\n\tgithub.com/yusufpapurcu/wmi v1.2.2 // indirect\n\tgo.uber.org/atomic v1.10.0 // indirect\n\tgo.uber.org/multierr v1.11.0 // indirect\n\tgolang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 // indirect\n\tgolang.org/x/image v0.6.0 // indirect\n\tgolang.org/x/net v0.25.0 // indirect\n\tg",
    "strategic_keywords": [
      "automation",
      "codegen"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 15,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 6,
      "total": 77
    },
    "strategic_score": 77
  },
  {
    "owner": "BuilderIO",
    "name": "agent-native",
    "full_name": "BuilderIO/agent-native",
    "url": "https://github.com/BuilderIO/agent-native",
    "description": "A framework for building agent-native applications.",
    "language": "TypeScript",
    "total_stars": 2871,
    "forks": 286,
    "stars_this_period": 1474,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [
        "agents",
        "ai",
        "react"
      ],
      "license": "NOASSERTION",
      "open_issues": 16,
      "created_at": "2026-03-12T14:57:10Z",
      "pushed_at": "2026-06-28T19:28:05Z",
      "homepage": "https://agent-native.com",
      "default_branch": "main",
      "forks": 286,
      "watchers": 6,
      "archived": false,
      "size_kb": 131328
    },
    "readme_content": "# Agent-Native\n\n## The framework for agent-native apps\n\nAgent-Native is an open-source framework for building robust agents that act inside real apps, not just chat next to them. It gives you primitives for product-grade agentic software: shared actions, SQL-backed state, identity, tools, skills, jobs, observability, and UI surfaces that all work together. Bring your own database, hosting provider, model stack, and app code.\n\n```ts\n// One action powers UI, agent, HTTP, MCP, A2A, and CLI.\nexport default defineAction({\n  schema: z.object({\n    emailId: z.string(),\n    body: z.string(),\n  }),\n  run: async ({ emailId, body }) => {\n    await db.insert(replies).values({ emailId, body });\n  },\n});\n```\n\n- **Actions**: Define work once. Use it from UI, agent, API, MCP, A2A, and CLI.\n- **Agent runtime**: Chat, tools, skills, memory, jobs, observability, and handoffs ship together.\n- **Backend agnostic**: Plug in any Drizzle-supported SQL database and Nitro-compatible host.\n\n## Templates\n\nStart with a full featured template. Each one is a complete, 100% free and open-source SaaS app: cloneable, not scaffolded, except you own the code and can customize everything.\n\n<table>\n<tr>\n<td width=\"33%\" align=\"center\" valign=\"top\">\n\n**Clips**\n\n<a href=\"https://agent-native.com/templates/clips\"><img src=\"https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F189ebd9b2f2b4f0ead3b33138d4e4c10?format=webp&width=800\" alt=\"Clips template\" width=\"100%\" /></a>\n\n**Agent-Native Loom + Jam**\n\nRecord your screen with auto-transcripts and captured browser debug logs, share a link, and let an agent read the transcript, see timestamped frames, and fix the bug.\n\n</td>\n<td width=\"33%\" align=\"center\" valign=\"top\">\n\n**Plans**\n\n<a href=\"https://agent-native.com/templates/plan\"><img src=\"https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb6f4213ac7cc42eeb10c12e8ccda8936?format=webp&width=800\" alt=\"Plans template\" width=\"100%\" /></a>\n\n**Visual plan mode for coding agents**\n\nInstall `/visual-plan` and `/visual-recap` so your coding agent can plan before it builds and recap changes after they land. High-level code reviews with diagrams, wireframes, annotations, and review links.\n\n</td>\n<td width=\"33%\" align=\"center\" valign=\"top\">\n\n**Design**\n\n<a href=\"https://agent-native.com/templates/design\"><img src=\"https://cdn.builder.io/api/v1/image/assets%2F348da13fcd8b414c87de9066196f7266%2F961bedb713a94463b834c1f2f4643bcf?format=webp&width=800\" alt=\"Design template\" width=\"100%\" /></a>\n\n**Agent-Native design prototyping**\n\nGenerate interactive HTML prototypes, compare variants, refine controls, and export the result.\n\n</td>\n</tr>\n<tr>\n<td width=\"33%\" align=\"center\" valign=\"top\">\n\n**Content**\n\n<a href=\"https://agent-native.com/templates/content\"><img src=\"https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F89bcfc6106304bfbaf8ec8a7ccd721eb?format=webp&width=800\" alt=\"Content template\" width=\"100%\" /></a>\n\n**Open-source Obsidian for MDX**\n\nEdit local Markdown/MDX files, generate rich interactive custom blocks, and draft, rewrite, or publish with an agent.\n\n</td>\n<td width=\"33%\" align=\"center\" valign=\"top\">\n\n**Slides**\n\n<a href=\"https://agent-native.com/templates/slides\"><img src=\"https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2c09b451d40c4a74a89a38d69170c2d8?format=webp&width=800\" alt=\"Slides template\" width=\"100%\" /></a>\n\n**Agent-Native Google Slides, Pitch**\n\nGenerate and edit React-based presentations via prompt or point-and-click.\n\n</td>\n<td width=\"33%\" align=\"center\" valign=\"top\">\n\n**Analytics**\n\n<a href=\"https://agent-native.com/templates/analytics\"><img src=\"https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4933a80cc3134d7e874631f688be828a?format=webp&width=800\" alt=\"Analytics template\" width=\"100%\" /></a>\n\n**Agent-Native Amplitude, Mixpanel**\n\nConnect analytics data sources, prompt for real charts, and build reusable dashboards.\n\n</td>\n</tr>\n</table>\n\nView the full template gallery at **[agent-native.com/templates](https://agent-native.com/templates)**.\n\n## Agents and UIs, Fully Connected\n\nThe agent and the UI are equal citizens of one system. Every action works both ways: click it or ask for it.\n\n![Agents and UIs fully connected](https://cdn.builder.io/api/v1/file/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fadc1e9e9368e4a8cb1b4dbb5aae5aaa2)\n\n- **Everything syncs**: One database, one state. Changes from either side show up instantly on the other.\n- **Real-time multiplayer**: Humans and agents edit the same document together, with the agent as a first-class peer.\n- **Context-aware**: The agent knows what you're looking at. Select text, hit Cmd+I, and tell it what to do.\n- **Agents call agents**: Tag another agent from any app and they coordinate over A2A.\n- **Self-improving**: The agent can add features, fix bugs, and refine the UI over time.\n\n## Try it with a skill\n\nDon't want to scaffold a whole app yet? Add visual planning and PR recaps to Claude Code, Codex, Cursor, Pi, OpenCode, GitHub Copilot / VS Code, and similar agents with one command:\n\n```bash\nnpx @agent-native/core@latest skills add visual-plan\n```\n\n![Visual plan and recap in action](https://raw.githubusercontent.com/builderio/skills/main/media/visual-recap.gif)\n\nYou get two slash commands:\n\n- **`/visual-plan`**: before the agent writes code, it opens a structured, reviewable plan with inline diagrams, UI wireframes, file-by-file implementation maps, and annotations you can comment on and approve.\n- **`/visual-recap`**: after changes land, it turns a PR or git diff into a high-altitude visual recap with a shareable review link instead of a raw diff.\n\nSee the **[Skills Guide](https://agent-native.com/docs/skills-guide#app-backed-skills)** for more.\n\n## Quick Start\n\nOne command to start a new project locally.\n\n```bash\nnpx @agent-native/core@latest create my-app\ncd my-app\npnpm install\npnpm dev\n```\n\n`create` first asks how you want to start:\n\n- **Full template(s)**: clone one or more complete apps into a workspace. Pick Mail + Calendar + Forms and you get all three wired up and sharing auth.\n- **Chat**: a single app with a minimal chat UI and the browser shell already wired, the simplest way to get a UI.\n- **Headless**: a single action-first app with no UI shell. The CLI walks you through calling your first action and agent, and you can add a UI later.\n\nPrefer flags? `create my-app --template mail`, `--headless`, or `--standalone` skip the prompt.\n\n## The Best of Both Worlds\n\n|                   | SaaS Tools         | Raw AI Agents           | Internal Tools             | Agent-Native            |\n| ----------------- | ------------------ | ----------------------- | -------------------------- | ----------------------- |\n| **UI**            | Polished but rigid | None                    | Mixed quality              | Full UI, fork & go      |\n| **AI**            | Bolted on          | Powerful                | Shallowly connected        | Agent-first, integrated |\n| **Customization** | Can't              | Instructions and skills | Full, but high maintenance | Agent modifies the app  |\n| **Ownership**     | Rented             | Somewhat yours          | You own the code           | You own the code        |\n\n## Community\n\nJoin the **[Discord](https://discord.gg/qm82StQ2NC)** to ask questions, share what you're building, and get help.\n\n## Docs\n\nFull documentation at **[agent-native.com](https://agent-native.com)**.\n\n## License\n\nMIT\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"agentnative\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"description\": \"Don't choose between rich user interfaces and autonomous agents. Every Agent-Native app is both.\",\n  \"keywords\": [],\n  \"homepage\": \"https://github.com/BuilderIO/agent-native#readme\",\n  \"bugs\": {\n    \"url\": \"https://github.com/BuilderIO/agent-native/issues\"\n  },\n  \"license\": \"ISC\",\n  \"author\": \"\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/BuilderIO/agent-native.git\"\n  },\n  \"directories\": {\n    \"doc\": \"docs\"\n  },\n  \"type\": \"module\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"postinstall\": \"node scripts/prebuild-workspace-packages.ts postinstall && pnpm rebuild better-sqlite3\",\n    \"setup\": \"pnpm install\",\n    \"build\": \"pnpm -r build\",\n    \"dev\": \"node scripts/dev-lazy.ts\",\n    \"typecheck\": \"tsx scripts/workspace-run.ts typecheck\",\n    \"fmt\": \"oxfmt --write .\",\n    \"fmt:check\": \"oxfmt --check .\",\n    \"fix:imports\": \"oxfmt --write .\",\n    \"test\": \"tsx scripts/workspace-run.ts test\",\n    \"test:brain-evals\": \"pnpm --filter brain eval:ci\",\n    \"qa:cli\": \"tsx scripts/qa-cli-smoke.ts\",\n    \"qa:headless-onramp\": \"tsx scripts/qa-headless-onramp-smoke.ts\",\n    \"qa:standalone-chat-dev\": \"tsx scripts/qa-standalone-chat-dev-smoke.ts\",\n    \"qa:composer-geometry\": \"tsx scripts/qa-composer-geometry-smoke.ts\",\n    \"qa:dispatch-workspace-resources\": \"tsx scripts/qa-dispatch-workspace-resources-smoke.ts\",\n    \"qa:dispatch-automations\": \"tsx scripts/qa-dispatch-automations-smoke.ts\",\n    \"qa:template-routes\": \"tsx scripts/qa-template-route-matrix.ts\",\n    \"actions:audit\": \"node scripts/audit-template-actions.mjs\",\n    \"test:mcp:e2e\": \"tsx scripts/e2e-mcp-test.ts\",\n    \"lint\": \"pnpm fmt:check && pnpm oxlint && pnpm typecheck\",\n    \"oxlint\": \"oxlint --config .oxlintrc.json .\",\n    \"dev:cli\": \"tsx packages/core/src/cli/index.ts\",\n    \"guard:no-drizzle-push\": \"node scripts/guard-no-drizzle-push.mjs\",\n    \"guard:no-unscoped-queries\": \"node scripts/guard-no-unscoped-queries.mjs\",\n    \"guard:no-env-credentials\": \"node scripts/guard-no-env-credentials.mjs\",\n    \"guard:no-unscoped-credentials\": \"node scripts/guard-no-unscoped-credentials.mjs\",\n    \"guard:no-env-mutation\": \"node scripts/guard-no-env-mutation.mjs\",\n    \"guard:no-localhost-fallback\": \"node scripts/guard-no-localhost-fallback.mjs\",\n    \"guard:google-auth-redirects\": \"node scripts/guard-google-auth-redirects.mjs\",\n    \"guard:db-tool-scoping\": \"node scripts/guard-db-tool-scoping.mjs\",\n    \"guard:template-list\": \"node scripts/guard-template-list.mjs\",\n    \"guard:netlify-private-env\": \"tsx scripts/guard-netlify-private-env.ts\",\n    \"guard:workspace-skills\": \"tsx scripts/sync-workspace-core-skills.ts --check\",\n    \"guard:public-packages\": \"tsx scripts/guard-public-packages.ts\",\n    \"guard:no-generated-artifacts\": \"node scripts/guard-no-generated-artifacts.mjs\",\n    \"guard:extension-no-public\": \"node scripts/guard-extension-no-public.mjs\",\n    \"guard:no-one-off-mcp-app-html\": \"node scripts/guard-no-one-off-mcp-app-html.mjs\",\n    \"guard:i18n-catalogs\": \"tsx scripts/guard-i18n-catalogs.ts\",\n    \"guard:plan-marketplace\": \"tsx scripts/sync-plan-marketplace.ts --check\",\n    \"guard:plan-skills\": \"tsx scripts/sync-plan-skills.ts --check\",\n    \"guard:no-error-string-returns\": \"node scripts/guard-no-error-string-returns.mjs\",\n    \"guard:no-action-twin-routes\": \"node scripts/guard-no-action-twin-routes.mjs\",\n    \"guards\": \"tsx scripts/run-guards.ts\",\n    \"sync:netlify-env\": \"tsx scripts/sync-template-netlify-env.ts\",\n    \"sync:workspace-skills\": \"tsx scripts/sync-workspace-core-skills.ts\",\n    \"sync:plan-marketplace\": \"tsx scripts/sync-plan-marketplace.ts\",\n    \"sync:plan-skills\": \"tsx scripts/sync-plan-skills.ts\",\n    \"changeset\": \"changeset\",\n    \"changeset:add\": \"changeset add\",\n    \"changeset:status\": \"changeset status --since=origin/main\",\n    \"changeset:version\": \"changeset version\",\n    \"changeset:publish\": \"pnpm -r build && changeset publish\",\n    \"prep\": \"pnpm fmt && concurrently -n types,test,guard -c cyan,green,yellow \\\"pnpm typecheck\\\" \\\"pnpm test\\\" \\\"pnpm guards\\\"\",\n    \"dev:lazy\": \"node scripts/dev-lazy.ts\",\n    \"dev:desktop\": \"node scripts/dev-lazy.ts --desktop --electron\",\n    \"dev:lazy:desktop\": \"node scripts/dev-lazy.ts --desktop --electron\",\n    \"dev:eager\": \"node scripts/dev-all.ts\",\n    \"dev:eager:desktop\": \"node scripts/dev-all.ts --desktop\",\n    \"dev:all\": \"node scripts/dev-all.ts\",\n    \"dev:all:desktop\": \"node scripts/dev-all.ts --desktop\",\n    \"dev:docs\": \"pnpm --filter @agent-native/docs dev\",\n    \"dev:electron\": \"node scripts/dev-electron.ts\",\n    \"dev:electron:lazy\": \"node scripts/dev-lazy.ts --electron\",\n    \"dev:electron:apps\": \"node scripts/dev-electron.ts --apps\"\n  },\n  \"devDependencies\": {\n    \"@changesets/cli\": \"2.31.0\",\n    \"@cloudflare/vite-plugin\": \"^1.31.0\",\n    \"@libsql/linux-x64-gnu\": \"^0.5.29\",\n    \"@playwright/test\": \"^1.60.0\",\n    \"@typescript/native-preview\": \"7.0.0-dev.20260624.1\",\n    \"concurrently\": \"^9.1.0\",\n    \"oxfmt\": \"0.56.0\",",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "runtime",
      "skill",
      "workspace"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 95
    },
    "strategic_score": 95
  },
  {
    "owner": "makeplane",
    "name": "plane",
    "full_name": "makeplane/plane",
    "url": "https://github.com/makeplane/plane",
    "description": "🔥🔥🔥 Open-source Jira, Linear, Monday, and ClickUp alternative. Plane is a modern project management platform to manage tasks, sprints, docs, and triage.",
    "language": "TypeScript",
    "total_stars": 53459,
    "forks": 4796,
    "stars_this_period": 1294,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "boards",
        "bug-tracker",
        "django",
        "docker",
        "gantt",
        "issue-tracker",
        "jira",
        "jira-alternative",
        "kanban",
        "linear",
        "postgresql",
        "product-management",
        "project-management",
        "project-planning",
        "python",
        "react",
        "redis",
        "typescipt",
        "vite",
        "work-management"
      ],
      "license": "AGPL-3.0",
      "open_issues": 953,
      "created_at": "2022-11-19T12:55:01Z",
      "pushed_at": "2026-06-26T15:58:33Z",
      "homepage": "http://plane.so",
      "default_branch": "preview",
      "forks": 4796,
      "watchers": 170,
      "archived": false,
      "size_kb": 211820
    },
    "readme_content": "<br /><br />\n\n<p align=\"center\">\n<a href=\"https://plane.so\">\n  <img src=\"https://media.docs.plane.so/logo/plane_github_readme.png\" alt=\"Plane Logo\" width=\"400\">\n</a>\n</p>\n<p align=\"center\"><b>Modern project management for all teams</b></p>\n\n<p align=\"center\">\n    <a href=\"https://plane.so/\"><b>Website</b></a> •\n    <a href=\"https://forum.plane.so\"><b>Forum</b></a> •\n    <a href=\"https://x.com/planepowers\"><b>X</b></a> •\n    <a href=\"https://docs.plane.so/\"><b>Documentation</b></a>\n</p>\n\n<p>\n    <a href=\"https://app.plane.so/#gh-light-mode-only\" target=\"_blank\">\n      <img\n        src=\"https://media.docs.plane.so/GitHub-readme/github-top.webp\"\n        alt=\"Plane Screens\"\n        width=\"100%\"\n      />\n    </a>\n</p>\n\nMeet [Plane](https://plane.so/), an open-source project management tool to track issues, run ~sprints~ cycles, and manage product roadmaps without the chaos of managing the tool itself. 🧘‍♀️\n\n> Plane is evolving every day. Your suggestions, ideas, and reported bugs help us immensely. Do not hesitate to join in the conversation on [Forum](https://forum.plane.so) or raise a GitHub issue. We read everything and respond to most.\n\n## 🚀 Installation\n\nGetting started with Plane is simple. Choose the setup that works best for you:\n\n- **Plane Cloud**\n  Sign up for a free account on [Plane Cloud](https://app.plane.so)—it's the fastest way to get up and running without worrying about infrastructure.\n\n- **Self-host Plane**\n  Prefer full control over your data and infrastructure? Install and run Plane on your own servers. Follow our detailed [deployment guides](https://developers.plane.so/self-hosting/overview) to get started.\n\n| Installation methods | Docs link                                                                                                                                                                               |\n| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Docker               | [![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white)](https://developers.plane.so/self-hosting/methods/docker-compose)         |\n| Kubernetes           | [![Kubernetes](https://img.shields.io/badge/kubernetes-%23326ce5.svg?style=for-the-badge&logo=kubernetes&logoColor=white)](https://developers.plane.so/self-hosting/methods/kubernetes) |\n\n`Instance admins` can configure instance settings with [God mode](https://developers.plane.so/self-hosting/govern/instance-admin).\n\n## 🌟 Features\n\n- **Work Items**\n  Efficiently create and manage tasks with a robust rich text editor that supports file uploads. Enhance organization and tracking by adding sub-properties and referencing related issues.\n\n- **Cycles**\n  Maintain your team’s momentum with Cycles. Track progress effortlessly using burn-down charts and other insightful tools.\n\n- **Modules**\n  Simplify complex projects by dividing them into smaller, manageable modules.\n\n- **Views**\n  Customize your workflow by creating filters to display only the most relevant issues. Save and share these views with ease.\n\n- **Pages**\n  Capture and organize ideas using Plane Pages, complete with AI capabilities and a rich text editor. Format text, insert images, add hyperlinks, or convert your notes into actionable items.\n\n- **Analytics**\n  Access real-time insights across all your Plane data. Visualize trends, remove blockers, and keep your projects moving forward.\n\n## 🛠️ Local development\n\nSee [CONTRIBUTING](./CONTRIBUTING.md)\n\n## ⚙️ Built with\n\n[![React Router](https://img.shields.io/badge/-React%20Router-CA4245?logo=react-router&style=for-the-badge&logoColor=white)](https://reactrouter.com/)\n[![Django](https://img.shields.io/badge/Django-092E20?style=for-the-badge&logo=django&logoColor=green)](https://www.djangoproject.com/)\n[![Node JS](https://img.shields.io/badge/node.js-339933?style=for-the-badge&logo=Node.js&logoColor=white)](https://nodejs.org/en)\n\n## 📸 Screenshots\n\n  <p>\n    <a href=\"https://plane.so\" target=\"_blank\">\n      <img\n        src=\"https://media.docs.plane.so/GitHub-readme/github-work-items.webp\"\n        alt=\"Plane Views\"\n        width=\"100%\"\n      />\n    </a>\n  </p>\n  <p>\n    <a href=\"https://plane.so\" target=\"_blank\">\n      <img\n        src=\"https://media.docs.plane.so/GitHub-readme/github-cycles.webp\"\n        width=\"100%\"\n      />\n    </a>\n  </p>\n  <p>\n    <a href=\"https://plane.so\" target=\"_blank\">\n      <img\n        src=\"https://media.docs.plane.so/GitHub-readme/github-modules.webp\"\n        alt=\"Plane Cycles and Modules\"\n        width=\"100%\"\n      />\n    </a>\n  </p>\n  <p>\n    <a href=\"https://plane.so\" target=\"_blank\">\n      <img\n        src=\"https://media.docs.plane.so/GitHub-readme/github-views.webp\"\n        alt=\"Plane Analytics\"\n        width=\"100%\"\n      />\n    </a>\n  </p>\n   <p>\n    <a href=\"https://plane.so\" target=\"_blank\">\n      <img\n        src=\"https://media.docs.plane.so/GitHub-readme/github-analytics.webp\"\n        alt=\"Plane Pages\"\n        width=\"100%\"\n      />\n    </a>\n  </p>\n</p>\n\n## 📝 Documentation\n\nExplore Plane's [product documentation](https://docs.plane.so/) and [developer documentation](https://developers.plane.so/) to learn about features, setup, and usage.\n\n## ❤️ Community\n\nJoin the Plane community on [GitHub Discussions](https://github.com/orgs/makeplane/discussions) and our [Forum](https://forum.plane.so). We follow a [Code of conduct](https://github.com/makeplane/plane/blob/master/CODE_OF_CONDUCT.md) in all our community channels.\n\nFeel free to ask questions, report bugs, participate in discussions, share ideas, request features, or showcase your projects. We’d love to hear from you!\n\n## 🛡️ Security\n\nIf you discover a security vulnerability in Plane, please report it responsibly instead of opening a public issue. We take all legitimate reports seriously and will investigate them promptly. See [Security policy](https://github.com/makeplane/plane/blob/master/SECURITY.md) for more info.\n\nTo disclose any security issues, please email us at security@plane.so.\n\n## 🤝 Contributing\n\nThere are many ways you can contribute to Plane:\n\n- Report [bugs](https://github.com/makeplane/plane/issues/new?assignees=srinivaspendem%2Cpushya22&labels=%F0%9F%90%9Bbug&projects=&template=--bug-report.yaml&title=%5Bbug%5D%3A+) or submit [feature requests](https://github.com/makeplane/plane/issues/new?assignees=srinivaspendem%2Cpushya22&labels=%E2%9C%A8feature&projects=&template=--feature-request.yaml&title=%5Bfeature%5D%3A+).\n- Review the [documentation](https://docs.plane.so/) and submit [pull requests](https://github.com/makeplane/docs) to improve it—whether it's fixing typos or adding new content.\n- Talk or write about Plane or any other ecosystem integration and [let us know](https://forum.plane.so)!\n- Show your support by upvoting [popular feature requests](https://github.com/makeplane/plane/issues).\n\nPlease read [CONTRIBUTING.md](https://github.com/makeplane/plane/blob/master/CONTRIBUTING.md) for details on the process for submitting pull requests to us.\n\n### Repo activity\n\n![Plane Repo Activity](https://repobeats.axiom.co/api/embed/2523c6ed2f77c082b7908c33e2ab208981d76c39.svg \"Repobeats analytics image\")\n\n### We couldn't have done this without you.\n\n<a href=\"https://github.com/makeplane/plane/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=makeplane/plane\" />\n</a>\n\n## License\n\nThis project is licensed under the [GNU Affero General Public License v3.0](https://github.com/makeplane/plane/blob/master/LICENSE.txt).\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"plane\",\n  \"version\": \"1.3.1\",\n  \"private\": true,\n  \"description\": \"Open-source project management that unlocks customer value\",\n  \"license\": \"AGPL-3.0\",\n  \"repository\": \"https://github.com/makeplane/plane.git\",\n  \"scripts\": {\n    \"build\": \"turbo run build\",\n    \"dev\": \"turbo run dev --concurrency=18\",\n    \"start\": \"turbo run start\",\n    \"clean\": \"turbo run clean && rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist\",\n    \"fix\": \"turbo run fix\",\n    \"fix:format\": \"turbo run fix:format\",\n    \"fix:lint\": \"turbo run fix:lint\",\n    \"check\": \"turbo run check\",\n    \"check:lint\": \"turbo run check:lint\",\n    \"check:format\": \"turbo run check:format\",\n    \"check:types\": \"turbo run check:types\",\n    \"prepare\": \"husky\",\n    \"doctor\": \"npx react-doctor@latest\"\n  },\n  \"devDependencies\": {\n    \"husky\": \"catalog:\",\n    \"lint-staged\": \"catalog:\",\n    \"oxfmt\": \"catalog:\",\n    \"oxlint\": \"catalog:\",\n    \"react-doctor\": \"^0.4.2\",\n    \"turbo\": \"catalog:\"\n  },\n  \"lint-staged\": {\n    \"*.{js,jsx,ts,tsx,cjs,mjs,cts,mts,json,css,md}\": [\n      \"pnpm exec oxfmt --no-error-on-unmatched-pattern\"\n    ],\n    \"*.{js,jsx,ts,tsx,cjs,mjs,cts,mts}\": [\n      \"pnpm exec oxlint --fix --deny-warnings\"\n    ]\n  },\n  \"engines\": {\n    \"node\": \">=22.18.0\"\n  },\n  \"packageManager\": \"pnpm@11.3.0+sha512.2c403d6594527287672b1f7056343a1f7c3634036a67ffabfcc2b3d7595d843768f8787148d1b57cf7956c90606bbd192857c363af19e96d2d0ec9ec5741d215\"\n}\n",
    "strategic_keywords": [
      "workflow"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 8,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 8,
      "total": 71
    },
    "strategic_score": 71
  },
  {
    "owner": "ogulcancelik",
    "name": "herdr",
    "full_name": "ogulcancelik/herdr",
    "url": "https://github.com/ogulcancelik/herdr",
    "description": "agent multiplexer that lives in your terminal.",
    "language": "Rust",
    "total_stars": 7936,
    "forks": 490,
    "stars_this_period": 1233,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "agent",
        "agent-orchestration",
        "ai",
        "ai-agents",
        "claude-code",
        "cli",
        "codex",
        "coding-agents",
        "developer-tools",
        "devtools",
        "multiplexer",
        "rust",
        "terminal",
        "terminal-multiplexer",
        "terminal-ui",
        "tmux",
        "tui",
        "workspace-manager"
      ],
      "license": "NOASSERTION",
      "open_issues": 29,
      "created_at": "2026-03-27T17:54:33Z",
      "pushed_at": "2026-06-28T20:34:44Z",
      "homepage": "https://herdr.dev",
      "default_branch": "master",
      "forks": 490,
      "watchers": 20,
      "archived": false,
      "size_kb": 28250
    },
    "readme_content": "# herdr\n\n\n<p align=\"center\">\n  <img src=\"assets/logo.png\" alt=\"herdr\" width=\"100\" />\n</p>\n\n<p align=\"center\">\n  <a href=\"https://herdr.dev\">herdr.dev</a> · <a href=\"#install\">install</a> · <a href=\"#quick-start\">quick start</a> · <a href=\"#supported-agents\">supported agents</a> · <a href=\"https://herdr.dev/docs/integrations/\">integrations</a> · <a href=\"https://herdr.dev/docs/configuration/\">configuration</a> · <a href=\"https://herdr.dev/docs/socket-api/\">socket api</a> · <a href=\"#sponsors\">sponsor</a>\n</p>\n\n---\n\nhttps://github.com/user-attachments/assets/043ec09f-4bdd-41d5-aee0-8fda6b83e267\n\n**agent multiplexer that lives in your terminal.**\n\nworkspaces, tabs, panes. mouse-native: click, drag, split. every agent at a glance: blocked, working, done. detach and reattach, agents keep running. no gui app, no electron, no mac-only native wrapper. you see the agent's own terminal, not someone's interpretation of it.\n\n---\n\n## install\n\n```bash\ncurl -fsSL https://herdr.dev/install.sh | sh\n```\n\non windows preview beta:\n\n```powershell\npowershell -ExecutionPolicy Bypass -c \"irm https://herdr.dev/install.ps1 | iex\"\n```\n\nor install with homebrew:\n\n```bash\nbrew install herdr\n```\n\nor install with mise:\n\n```bash\nmise use -g herdr\n```\n\nif mise reports `herdr not found in mise tool registry`, update mise and retry. older mise versions predate the herdr registry entry; `mise use -g github:ogulcancelik/herdr` works as a temporary fallback.\n\nor download the stable Linux/macOS binary from [releases](https://github.com/ogulcancelik/herdr/releases). Native Windows binaries are preview-only beta builds.\n\n## quick start\n\nStart Herdr in the directory where the work lives:\n\n```bash\nherdr\n```\n\nHerdr starts or attaches to one background session server. When a session has no workspaces, Herdr opens one automatically. Run an agent in the root pane. Press `ctrl+b`, then `shift+n` to create another workspace, `ctrl+b`, then `v` or `minus` to split panes, `ctrl+b`, then `c` to create a tab, and `ctrl+b`, then `w` to switch workspaces.\n\nPress `ctrl+b q` to detach the client. The server and pane processes keep running. Open another terminal and run `herdr` again to reattach.\n\n## core concepts\n\n**Server and client.** By default, `herdr` attaches to a background server. Detaching closes only the client. `herdr server stop` stops the default server and kills its panes. Named sessions are separate server namespaces: use `herdr session attach work`, `herdr session stop work`, and `herdr session list` when you want fully separate runtime state.\n\n**Workspaces, tabs, panes.** A workspace is the project-level container. Tabs group panes inside a workspace. Panes are real terminal processes, not rewritten agent views.\n\n**Copy.** Herdr copies pane text, not the sidebar. Drag-select inside a pane, double-click a word or token, or press `prefix+[` for keyboard copy mode. In copy mode, move with `h/j/k/l`, `w/b/e`, and `{`/`}`, start selection with `v` or Space, copy with `y` or Enter, and leave with `q` or Esc. In PuTTY and some SSH terminals, hold `Shift` while dragging to use the terminal's own selection, and `Shift` + right click to paste.\n\n**Update and restore.** `herdr update` installs a new binary, but a running server keeps using the old process until it is stopped or handed off. Stop the old server to use the new version. Stopping exits pane processes. Run `herdr server stop`, then run `herdr` again for the default session. For a named session, run `herdr session stop <name>`, then run `herdr session attach <name>` again. `herdr update --handoff` is experimental and tries to move live panes, including foreground processes such as dev servers, from the old server to the new one. With current official integrations installed, supported agent panes can restart from their native agent sessions after a server restart or update.\n\n**Keybindings.** Herdr uses explicit keybinding strings. `prefix+n` means press the configured prefix, then `n`. `ctrl+alt+n`, `cmd+k`, `alt+1`, and function-key chords are direct terminal-mode shortcuts and do not need the prefix. Plain direct printable keys such as `n` steal normal typing, so use `prefix+n` unless you intentionally want a modifier-gated direct binding.\n\n**Agent awareness.** The sidebar shows blocked, working, done, and idle states. Detection works with process names and terminal output by default. Official integrations can add native session identity for restore, semantic state reports, or both.\n\n## update\n\nHerdr notifies you when a new version is available. Run manually:\n\n```bash\nherdr update\n```\n\n`herdr update` is for installs managed by Herdr's own installer. Homebrew, mise, and Nix installs update through `brew upgrade herdr`, `mise upgrade herdr`, or your Nix workflow, then use the same stop-and-run-again flow if a session is still running the old server. Linux and macOS direct installs can opt into development preview builds with `herdr channel set preview` and return to stable with `herdr channel set stable`. Windows beta installs are preview-only for now. See [install docs](https://herdr.dev/docs/install/) and [session state docs](https://herdr.dev/docs/session-state/) for the full update, restart, restore, and handoff matrix.\n\nLinux and macOS direct installs use the stable update channel by default. Windows beta installs default to preview. To test preview builds from `master` before the next stable release:\n\n```bash\nherdr channel set preview\n```\n\nTo return Linux and macOS direct installs to stable:\n\n```bash\nherdr channel set stable\n```\n\nFor direct installs, changing channels also checks that channel and installs its latest binary. If that update fails, run `herdr update` to retry from the configured channel.\n\nPreview is only for direct installs managed by Herdr's updater. Homebrew, mise, and Nix stay on stable and update through their package managers.\n\n## how it compares\n\n|                          | tmux | gui managers | herdr |\n|--------------------------|------|--------------|-------|\n| persistent sessions       | ✓    | —            | ✓     |\n| detach / reattach        | ✓    | —            | ✓     |\n| panes, tabs, workspaces  | ✓    | ✓            | ✓     |\n| agent awareness          | —    | ✓            | ✓     |\n| lives in your terminal   | ✓    | —            | ✓     |\n| real terminal views      | ✓    | —            | ✓     |\n| mouse-native            | —    | ✓            | ✓     |\n| lightweight binary       | ✓    | —            | ✓     |\n| agents can orchestrate   | ?    | ?            | ✓     |\n\ntmux gives you persistence and panes, but it was built before agents existed. gui managers show agent state, but they make you leave your terminal and use their wrapped view. herdr is persistence and awareness in one tool that stays out of your way.\n\n## remote and attach\n\nHerdr works over normal SSH. Run it on the remote host, detach, and reattach later:\n\n```\nssh you@yourserver\nherdr\n```\n\nYou can also attach from your local terminal without opening a shell first:\n\n```bash\nherdr --remote workbox\nherdr --remote ssh://you@yourserver:2222\n```\n\nRemote attach adds fallback SSH keepalives by default while preserving your own SSH config. Set `[remote].manage_ssh_config = false` to use plain `ssh`.\n\nDirect attach connects your current terminal to one server-owned terminal:\n\n```bash\nherdr agent attach <target>\nherdr terminal attach <terminal_id>\n```\n\nSee [persistence and remote docs](https://herdr.dev/docs/persistence-remote/) for remote keybinding, named-session, and handoff details.\n\n## agent awareness\n\nthe sidebar shows which agents are blocked, working, or done. workspaces roll up to their most urgent state so you can scan the full list at a glance.\n\nstates:\n\n- 🔴 **blocked** — agent needs input or approval\n- 🟡 **working** — agent is actively running\n- 🔵 **done** — work finished, you have not looked at it yet\n- 🟢 **idle** — done and seen\n\ndetection works by reading foreground process and terminal output. zero config, no hooks required. official claude code, codex, github copilot cli, devin, droid, kimi code cli, qodercli, and cursor agent cli integrations provide session restore identity; pi, omp, kimi code cli, opencode, kilo code cli, hermes, and custom socket integrations can report their own state.\n\n## lives in your terminal\n\nnot a gui window, not a web dashboard, not electron. herdr runs inside whatever terminal you already use. single rust binary, no dependencies. works inside tmux as the outer terminal environment.\n\n## what you get\n\n- **workspaces** — organized around git repos or folder names, each with its own tabs and panes\n- **tabs** — first-class in the socket api and cli\n- **copy-friendly** — drag-select pane text, double-click tokens, or use keyboard copy mode with `prefix+[`, `h/j/k/l`, `{`/`}`, `v`, and `y`\n- **notifications** — sounds and toasts for background events; tab-aware suppression\n- **18 built-in themes** — catppuccin, terminal, tokyo night, gruvbox, one, solarized, kanagawa, rosé pine, vesper, and light variants for the main palettes\n- **session persistence** — pane processes survive client detach; sessions restore panes after full restart, with opt-in recent screen history\n\n## agents can use herdr too\n\nThe local Unix socket lets agents create workspaces, split or zoom panes, spawn helpers, read output, and wait for state changes. Start with the [socket API docs](https://herdr.dev/docs/socket-api/) and [`SKILL.md`](./SKILL.md).\n\n## supported agents\n\nautomatic detection works out of the box. process name matching plus terminal output heuristics.\n\n| agent | idle / done | working | blocked |\n|-------|-------------|---------|---------|\n| [pi](https://pi.dev) | ✓ | ✓ | partial |\n| [claude code](https://docs.anthropic.com/en/docs/claude-code) | ✓ | ✓ | ✓ |\n| [codex](https://github.com/openai/codex) | ✓ | ✓ | ✓ |\n| [droid](https://factory.ai) | ✓ | ✓ | ✓ |\n| [amp](https://ampcode.com) | ✓ | ✓ | ✓ |\n| [opencode](https://github.com/anomalyco/opencode) | ✓ | ✓ | ✓ |\n| [grok cli](https://x.ai/grok) | ✓ | ✓ | ✓ |\n| [hermes agent](https://github.com/NousResearch/hermes-agent) | ✓ | ✓ | ✓ |\n| [kilo code cli](https://kilo.ai/) | ✓ | ✓ | ✓ |\n| [devin cli](https://docs.devin.ai/cli) | ✓ | ✓ | ✓ |\n| cursor agent | ✓ | ✓ | ✓ |\n| antigravity cli | ✓ | ✓ | ✓ |\n| kimi code cli | ✓ | ✓ | ✓ |\n| [github copilot cli](https://github.com/features/copilot) | ✓ | ✓ | ✓ |\n| [qodercli](https://qoder.com/cli) | ✓ | ✓ | ✓ |\n| [kiro cli](https://kiro.dev/docs/cli/) | ✓ | ✓ | — |\n\ndetected but not fully tested: gemini cli, cline.\n\nfor agents outside the built-in list, herdr still works as a terminal multiplexer with workspaces, panes, and tiling. custom integrations can report agent labels over the socket api. see the [socket api docs](https://herdr.dev/docs/socket-api/).\n\n### direct integrations\n\nofficial integrations have two roles. claude code, codex, github copilot cli, devin, droid, qodercli, and cursor agent cli report session identity for native restore, while their state still comes from screen detection. pi, omp, kimi code cli, opencode, kilo code cli, and hermes report both semantic state and session identity. install with:\n\n```bash\nherdr integration install pi\nherdr integration install omp\nherdr integration install claude\nherdr integration install codex\nherdr integration install copilot\nherdr integration install devin\nherdr integration install droid\nherdr integration install kimi\nherdr integration install opencode\nherdr integration install kilo\nherdr integration install hermes\nherdr integration install qodercli\nherdr integration install cursor\n```\n\nsee the [integrations docs](https://herdr.dev/docs/integrations/) for setup details.\n\n## keybindings\n\nPress `ctrl+b` to enter prefix mode. Default actions are prefix-first and tmux-like:\n\n| key | action |\n|-----|--------|\n| `prefix+c` | new tab |\n| `prefix+n` / `prefix+p` | next / previous tab |\n| `prefix+1..9` | switch tab |\n| `prefix+w` | workspace navigation |\n| `prefix+g` | session navigator |\n| `prefix+shift+n` |",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[package]\nname = \"herdr\"\nversion = \"0.7.1\"\nedition = \"2021\"\nbuild = \"build.rs\"\ndescription = \"terminal workspace manager for AI coding agents\"\nlicense = \"AGPL-3.0-or-later\"\nrepository = \"https://github.com/ogulcancelik/herdr\"\nhomepage = \"https://herdr.dev\"\nkeywords = [\"terminal\", \"tui\", \"ai\", \"agents\", \"multiplexer\"]\ncategories = [\"command-line-utilities\"]\ninclude = [\"src/**/*\", \"assets/sounds/*\", \"README.md\", \"LICENSE\", \"Cargo.toml\"]\n\n[dependencies]\nbase64 = \"0.22.1\"\nbincode = { version = \"2\", features = [\"serde\"] }\nbytes = \"1\"\ncrossterm = \"0.29\"\nctrlc = \"3\"\ninterprocess = \"2.4.2\"\nlibc = \"0.2\"\nportable-pty = \"=0.9.0\"\npng = \"0.17\"\nratatui = { version = \"0.30\", features = [\"unstable-rendered-line-info\"] }\nregex = \"1\"\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\nsha2 = \"0.10\"\ntokio = { version = \"1\", features = [\"rt-multi-thread\", \"macros\", \"sync\", \"time\"] }\ntoml = \"0.8\"\ntracing = \"0.1.44\"\ntracing-subscriber = { version = \"0.3.23\", features = [\"env-filter\"] }\nunicode-width = \"0.2\"\n\n[patch.crates-io]\nportable-pty = { path = \"vendor/portable-pty\" }\n\n[target.'cfg(windows)'.dependencies]\nwindows-sys = { version = \"0.61.2\", features = [\n    \"Wdk_System_Threading\",\n    \"Win32_Foundation\",\n    \"Win32_System_Diagnostics_Debug\",\n    \"Win32_System_Diagnostics_ToolHelp\",\n    \"Win32_System_Console\",\n    \"Win32_System_Kernel\",\n    \"Win32_System_Threading\",\n    \"Win32_UI_Shell\",\n    \"Win32_UI_WindowsAndMessaging\",\n] }\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "rag",
      "runtime",
      "workspace"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 95
    },
    "strategic_score": 95
  },
  {
    "owner": "Anil-matcha",
    "name": "Open-Generative-AI",
    "full_name": "Anil-matcha/Open-Generative-AI",
    "url": "https://github.com/Anil-matcha/Open-Generative-AI",
    "description": "Unrestricted Open-source alternative to AI video platforms — Free AI image & video generation studio with 200+ models (Flux, Midjourney, Kling, Sora, Veo). No content filters. Self-hosted, MIT licensed.",
    "language": "JavaScript",
    "total_stars": 21653,
    "forks": 3675,
    "stars_this_period": 1152,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "ai-art-generator",
        "ai-image-generation",
        "ai-video-generation",
        "creative-tools",
        "flux",
        "flux-1",
        "generative-ai",
        "image-to-video",
        "javascript",
        "kling-ai",
        "lipsync",
        "midjourney-alternative",
        "muapi",
        "open-source",
        "seedance2",
        "sora-alternative",
        "text-to-image",
        "text-to-video",
        "uncensored",
        "wan-video"
      ],
      "license": "MIT",
      "open_issues": 17,
      "created_at": "2023-05-09T14:12:37Z",
      "pushed_at": "2026-06-28T01:24:28Z",
      "homepage": "https://muapi.ai/open-generative-ai?utm_source=github&utm_medium=about&utm_campaign=open-generative-ai",
      "default_branch": "main",
      "forks": 3676,
      "watchers": 164,
      "archived": false,
      "size_kb": 45518
    },
    "readme_content": "# Open Generative AI — Unrestricted Open-Source Alternative to AI Video Platforms\n\n[![Powered by MuAPI](https://img.shields.io/badge/Powered%20by-MuAPI-6366f1?style=flat-square&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNHYtNGgtMnYtMmg0djZoLTJ6bTAtOFY2aDJ2MmgtMnoiLz48L3N2Zz4=)](https://muapi.ai?utm_source=github&utm_medium=badge&utm_campaign=open-generative-ai)\n\n\n> **The free, open-source alternative to AI Video Platforms.** Generate AI images and videos using 200+ state-of-the-art models — no content filters, no closed ecosystem, no subscription fees.\n\n**Community:** Join [Discord](https://discord.gg/tANKJkHck) for discussions and support\n\n<p align=\"center\">\n  <a href=\"https://github.com/Anil-matcha/awesome-generative-ai-apps\">\n    <img src=\"https://img.shields.io/badge/Part%20of-Awesome%20Generative%20AI%20Apps-FFD700?style=for-the-badge&logo=github&logoColor=black\" alt=\"Awesome Generative AI Apps\">\n  </a>\n</p>\n\n> 🎨 **[Explore 50+ more open-source AI apps →](https://github.com/Anil-matcha/awesome-generative-ai-apps)**\n\n## Related Projects\n\n> 🤖 **Automate media generations with AI coding agents:** [Generative-Media-Skills](https://github.com/SamurAIGPT/Generative-Media-Skills) — a library of skills that let agents like **Claude Code**, **Codex**, and other coding assistants drive 200+ image/video models end-to-end (prompt → generate → edit → stitch) directly from your terminal. Perfect for building automated media pipelines without touching a UI.\n\n> 🎬 **Seedance 2.5 prompts & API guide:** [awesome-seedance-2.5-api-prompts](https://github.com/Anil-matcha/awesome-seedance-2.5-api-prompts) — Curated prompt templates, camera control vocabulary, MuAPI reference, and cinematic examples for Seedance 2.5 video generation.\n\n> 🍌 **Claude Fable 5 use cases + 20% off on MuAPI:** [awesome-claude-fable-5](https://github.com/Anil-matcha/awesome-claude-fable-5) — 60 curated real-world use cases, prompts, and benchmarks for Claude Fable 5, with **20% off Fable 5 access** via [MuAPI](https://muapi.ai/pricing?utm_source=github&utm_medium=readme&utm_campaign=open-generative-ai).\n\n- [Vadoo](https://vadoo.tv) — Unrestricted AI image & video generation → auto-publish as YouTube Shorts and TikToks & earn\n- [AI-Youtube-Shorts-Generator](https://github.com/SamurAIGPT/AI-Youtube-Shorts-Generator) — Auto-generate viral YouTube Shorts from long-form videos using AI\n- [muapi-cli](https://github.com/SamurAIGPT/muapi-cli) — Official CLI for MuAPI — run these models from your terminal\n- [Vibe-Workflow](https://github.com/SamurAIGPT/Vibe-Workflow) — Node-based AI workflow builder for generative image & video pipelines\n- [Text-To-Video-AI](https://github.com/SamurAIGPT/Text-To-Video-AI) — Lightweight text-to-video script — no UI required\n- [muapi-comfyui](https://github.com/SamurAIGPT/muapi-comfyui) — ComfyUI nodes for 100+ MuAPI models\n- [n8n-nodes-muapi](https://github.com/SamurAIGPT/n8n-nodes-muapi) — n8n community nodes for MuAPI — automate media generation\n- [Open-AI-Design-Agent](https://github.com/Anil-matcha/Open-AI-Design-Agent) — Open-source autonomous AI design agent\n- [Free-AI-Social-Media-Scheduler](https://github.com/Anil-matcha/Free-AI-Social-Media-Scheduler) — Free open-source AI social media scheduler — self-hostable alternative to Buffer and Hootsuite\n- [awesome-seedance-2.5-api-prompts](https://github.com/Anil-matcha/awesome-seedance-2.5-api-prompts) — Curated Seedance 2.5 API guide, prompts, camera controls, and video generation examples\n- [AI-Voice-Agent](https://github.com/Anil-matcha/AI-Voice-Agent) — Self-hosted AI voice agent for real-time voice conversations, sales calls, and customer support\n\n## 🌐 Try it Online — No Install Required\n\n**Hosted version:** [https://muapi.ai/open-generative-ai?utm_source=github&utm_medium=readme&utm_campaign=open-generative-ai](https://muapi.ai/open-generative-ai?utm_source=github&utm_medium=readme&utm_campaign=open-generative-ai)\n\nUse all studios (Image, Video, Audio, AI Clipping, Vibe Motion, Lip Sync, Cinema, Marketing, Workflows, Agents, Design Agent, Apps, MCP & CLI) directly in your browser — no Node.js, no setup. Sign up for a free account to start generating. The hosted version is always up to date with the latest models.\n\n**Follow** the [creator](https://x.com/matchaman11) for updates\n\n---\n\n## ⬇️ Download Desktop App\n\nOne-click installers — no Node.js or terminal required.\n\n| Platform | Download |\n|---|---|\n| macOS Apple Silicon (M1/M2/M3/M4) | [Open Generative AI-1.0.9-arm64.dmg](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.9/Open.Generative.AI-1.0.9-arm64.dmg) |\n| macOS Intel (x64) | [Open Generative AI-1.0.9.dmg](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.9/Open.Generative.AI-1.0.9.dmg) |\n| Windows (x64) | [Open Generative AI Setup 1.0.9.exe](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.9/Open.Generative.AI.Setup.1.0.9.exe) |\n| Linux (Ubuntu x64) | [v1.0.9 release](https://github.com/Anil-matcha/Open-Generative-AI/releases/tag/v1.0.9) (`.AppImage` / `.deb`), or build locally with `npm run electron:build:linux`. |\n\nAll releases: [github.com/Anil-matcha/Open-Generative-AI/releases](https://github.com/Anil-matcha/Open-Generative-AI/releases)\n\n### macOS Installation Guide\n\nBecause the app is not notarized by Apple, macOS Gatekeeper will block it on first launch. Follow these steps:\n\n**Step 1** — Mount the DMG and drag the app to `/Applications`\n\n**Step 2** — Open Terminal and run:\n```bash\nxattr -cr \"/Applications/Open Generative AI.app\"\n```\n\n**Step 3** — Right-click the app in `/Applications` → click **Open** → click **Open** again on the dialog\n\n> You only need to do this once. After that, the app opens normally.\n\n**Alternative (no Terminal):**\n1. Try to open the app — macOS will block it\n2. Go to **System Settings → Privacy & Security**\n3. Scroll down to find _\"Open Generative AI was blocked\"_\n4. Click **Open Anyway** → **Open**\n\n### Windows Installation — SmartScreen warning fix\n\nWindows SmartScreen may show a warning because the installer is not code-signed:\n\n1. Click **More info** on the SmartScreen dialog\n2. Click **Run anyway**\n\nThe app will install silently to `%LocalAppData%` with a Start Menu shortcut.\n\n### Ubuntu / Linux Installation\n\nLinux artifacts are available when building with Electron Builder:\n\n```bash\n# Build Linux installers (AppImage + .deb)\nnpm run electron:build:linux\n```\n\nGenerated files are written to the `release/` folder:\n- **AppImage** — portable, run directly after making executable:\n  ```bash\n  chmod +x \"release/Open Generative AI-*.AppImage\"\n  ./release/Open\\ Generative\\ AI-*.AppImage\n  ```\n- **.deb** — install on Debian/Ubuntu:\n  ```bash\n  sudo apt install ./release/open-generative-ai_*_amd64.deb\n  ```\n\nIf AppImage fails to start on older systems, install `libfuse2`:\n\n```bash\nsudo apt install libfuse2\n```\n\n#### Ubuntu 24.04+ / AppArmor sandbox restriction\n\nUbuntu 24.04 and later enable a kernel security policy (`apparmor_restrict_unprivileged_userns`) that blocks Chromium's user-namespace sandbox. If the app fails to start silently or crashes immediately, you have two options:\n\n**Option A — Recommended: install the `.deb` instead.**\nThe `.deb` package ships an AppArmor profile that grants the required permission automatically on install with no system-wide changes.\n\n**Option B — Temporary system fix (AppImage users):**\n```bash\nsudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0\n```\nThis lasts until next reboot. To make it permanent:\n```bash\necho 'kernel.apparmor_restrict_unprivileged_userns=0' | sudo tee /etc/sysctl.d/99-userns.conf\n```\n\n---\n\nOpen Generative AI is a free, open-source AI image, video, cinema, and lip sync studio that brings creative workflows to everyone. No content filters, no prompt rejections, no guardrails — just full creative freedom. Powered by [Muapi.ai](https://muapi.ai?utm_source=github&utm_medium=readme&utm_campaign=open-generative-ai), it supports text-to-image, image-to-image, text-to-video, image-to-video, and audio-driven lip sync generation across models like Flux, Nano Banana, Midjourney, Kling, Sora, Veo, Seedream, Infinite Talk, LTX Lipsync, Wan 2.2, and more — all from a sleek, modern interface you can self-host and customize.\n\n**Why Open Generative AI instead of other AI Video Platforms?**\n- **No filters** — no content filters, no nanny guardrails, no prompt rejections\n- **Free & open-source** — no subscription, no vendor lock-in\n- **Self-hosted** — your data stays on your machine, full creative control\n- **200+ models** — text-to-image, image-to-image, text-to-video, image-to-video, lip sync\n- **Multi-image input** — feed up to 14 reference images into compatible models\n- **Lip Sync Studio** — animate portraits or sync lips to any audio with 9 dedicated models\n- **Extensible** — add your own models, modify the UI, build on top of it\n\nFor a deep dive into the technical architecture and the philosophy behind the \"Infinite Budget\" cinema workflow, see our [comprehensive guide and roadmap](https://medium.com/@anilmatcha/).\n\n## ⚡ Local Model Inference (Desktop App Only)\n\nThe desktop app supports **two independent local engines**. Pick whichever fits the machine you actually run on:\n\n| Engine | What it is | Best for |\n|---|---|---|\n| **sd.cpp** (bundled) | C++ engine from [stable-diffusion.cpp](https://github.com/leejet/stable-diffusion.cpp), runs on the same machine as the app. Metal GPU on Apple Silicon, CUDA/Vulkan/ROCm on Linux/Windows. | Image-only models. Works on Mac M-series. |\n| **Wan2GP** (BYO server) | HTTP client to a user-run [Wan2GP](https://github.com/deepbeepmeep/Wan2GP) server. The server runs Python + PyTorch on a CUDA/ROCm GPU; the desktop app only sends prompts and receives results. | Video models (Wan 2.2, Hunyuan, LTX) and large image models (Flux, Qwen-Image). NVIDIA/AMD GPU required on the *server*; the desktop app itself can run on a Mac. |\n\nBoth engines share the same UI: open **Settings → Local Models** to configure each.\n\n### Engine 1 — sd.cpp (bundled)\n\n| Model | Type | Size | Notes |\n|---|---|---|---|\n| **Z-Image Turbo** ⚡ | Diffusion Transformer | 2.5 GB + 2.7 GB aux | 8-step turbo. Heavy on memory. |\n| **Z-Image Base** ⚡ | Diffusion Transformer | 3.5 GB + 2.7 GB aux | 50-step high-quality. Heavy on memory. |\n| **Dreamshaper 8** | SD 1.5 | 2.1 GB | 20-step versatile. Lightest tested option on Mac. |\n| **Realistic Vision v5.1** | SD 1.5 | 2.1 GB | 25-step photorealistic |\n| **Anything v5** | SD 1.5 | 2.1 GB | 20-step anime/illustration |\n| **SDXL Base 1.0** | SDXL | 6.9 GB | 30-step high-res |\n\n> **Z-Image models** require two shared auxiliary files (downloaded once, shared across both models):\n> - **Qwen3-4B Text Encoder** — 2.4 GB\n> - **FLUX VAE** — 335 MB\n\n**How to use:**\n1. Open **Settings → Local Models** in the desktop app\n2. Install the **sd.cpp inference engine** (one click — auto-downloaded)\n3. Download your chosen model (and auxiliary files for Z-Image)\n4. In **Image Studio**, click the **⚡ Local** toggle next to the model selector\n5. Select your local model and generate — no API key needed\n\nAll downloads happen inside the app. Nothing is installed system-wide.\n\nBy default, `sd.cpp` stores the engine, model weights, and temporary downloads under Electron's app data directory. Common paths are:\n\n- macOS: `~/Library/Application Support/open-generative-ai/local-ai`\n- Windows: `%APPDATA%\\open-generative-ai\\local-ai`\n- Linux: `~/.config/open-generative-ai/local-ai`\n\nTo keep multi-GB model weights on another drive, set `OPEN_GENERATIVE_AI_LOCAL_AI_DIR`\nbefore launching the desktop app. The app will create `bin/`, `models/`, and `tmp/`\ninside that directory, and **Settings -> Local Models** shows the resolved model folder.\nLocal engine output and download errors ",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"open-generative-ai\",\n  \"description\": \"Open-source alternative to HF AI — AI image, video, cinema and lip sync studio\",\n  \"homepage\": \"https://github.com/Anil-matcha/Open-Generative-AI\",\n  \"private\": true,\n  \"version\": \"2.0.0\",\n  \"license\": \"MIT\",\n  \"workspaces\": [\n    \"packages/studio\",\n    \"packages/Vibe-Workflow/packages/workflow-builder\",\n    \"packages/Open-Poe-AI/packages/agents\",\n    \"packages/Open-AI-Design-Agent/packages/design-agent\"\n  ],\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\",\n    \"build:studio\": \"npm run build -w studio\",\n    \"build:workflow\": \"npm run build -w workflow-builder\",\n    \"build:agent\": \"npm run build -w ai-agent\",\n    \"build:packages\": \"npm run build:workflow && npm run build:agent && npm run build:studio\",\n    \"setup\": \"git submodule update --init --recursive && npm install && npm run build:packages\",\n    \"vite:dev\": \"vite\",\n    \"vite:build\": \"vite build\",\n    \"electron:dev\": \"npm run vite:build && electron .\",\n    \"electron:build\": \"vite build && electron-builder --mac\",\n    \"electron:build:win\": \"vite build && electron-builder --win\",\n    \"electron:build:linux\": \"vite build && electron-builder --linux\",\n    \"electron:build:linux:dir\": \"vite build && electron-builder --linux dir\",\n    \"electron:build:linux:arm64:dir\": \"vite build && electron-builder --linux dir --arm64\",\n    \"stage:local-ai\": \"node scripts/stage-local-ai-binary.js\",\n    \"package:linux:deb\": \"node scripts/package-linux-deb.js\",\n    \"package:linux:deb:arm64\": \"node scripts/package-linux-deb.js --arch arm64\",\n    \"package:linux:deb:x64\": \"node scripts/package-linux-deb.js --arch x64\",\n    \"electron:build:all\": \"vite build && electron-builder --mac --win --linux\"\n  },\n  \"build\": {\n    \"appId\": \"ai.generative.open\",\n    \"productName\": \"Open Generative AI\",\n    \"copyright\": \"Copyright © 2025\",\n    \"directories\": {\n      \"output\": \"release\"\n    },\n    \"afterPack\": \"./afterPack.js\",\n    \"files\": [\n      \"dist/**/*\",\n      \"electron/**/*\"\n    ],\n    \"extraResources\": [\n      {\n        \"from\": \"build/local-ai\",\n        \"to\": \"local-ai\",\n        \"filter\": [\n          \"**/*\"\n        ]\n      }\n    ],\n    \"mac\": {\n      \"category\": \"public.app-category.graphics-design\",\n      \"icon\": \"public/banner.png\",\n      \"gatekeeperAssess\": false,\n      \"target\": [\n        {\n          \"target\": \"dmg\",\n          \"arch\": [\n            \"x64\",\n            \"arm64\"\n          ]\n        }\n      ]\n    },\n    \"win\": {\n      \"icon\": \"public/banner.png\",\n      \"signAndEditExecutable\": false,\n      \"target\": [\n        {\n          \"target\": \"nsis\",\n          \"arch\": [\n            \"x64\"\n          ]\n        }\n      ]\n    },\n    \"nsis\": {\n      \"oneClick\": false,\n      \"allowToChangeInstallationDirectory\": true,\n      \"include\": \"build/installer.nsh\"\n    },\n    \"linux\": {\n      \"icon\": \"public/banner.png\",\n      \"category\": \"Utility\",\n      \"maintainer\": \"Open Generative AI Team\",\n      \"extraFiles\": [\n        {\n          \"from\": \"build/linux/apparmor.profile\",\n          \"to\": \"resources/apparmor.profile\"\n        }\n      ],\n      \"target\": [\n        {\n          \"target\": \"AppImage\",\n          \"arch\": [\n            \"x64\"\n          ]\n        },\n        {\n          \"target\": \"deb\",\n          \"arch\": [\n            \"x64\"\n          ]\n        }\n      ]\n    }\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"next\": \"^15.0.0\",\n    \"react\": \"^19.0.0\",\n    \"react-dom\": \"^19.0.0\",\n    \"react-hot-toast\": \"^2.4.1\",\n    \"studio\": \"*\",\n    \"workflow-builder\": \"file:./packages/Vibe-Workflow/packages/workflow-builder\",\n    \"ai-agent\": \"file:./packages/Open-Poe-AI/packages/agents\"\n  },\n  \"devDependencies\": {\n    \"@eslint/eslintrc\": \"^3\",\n    \"@tailwindcss/vite\": \"^4.1.18\",\n    \"autoprefixer\": \"^10.4.24\",\n    \"electron\": \"^33.4.11\",\n    \"electron-builder\": \"^25.1.8\",\n    \"eslint\": \"^9\",\n    \"eslint-config-next\": \"^15.0.0\",\n    \"postcss\": \"^8.5.6\",\n    \"tailwindcss\": \"^3.4.0\",\n    \"vite\": \"^5.4.0\"\n  },\n  \"main\": \"electron/main.js\"\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 84
    },
    "strategic_score": 84
  },
  {
    "owner": "zarazhangrui",
    "name": "frontend-slides",
    "full_name": "zarazhangrui/frontend-slides",
    "url": "https://github.com/zarazhangrui/frontend-slides",
    "description": "Create beautiful slides on the web using a coding agent's frontend skills",
    "language": "JavaScript",
    "total_stars": 23716,
    "forks": 1934,
    "stars_this_period": 1129,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "ai-slides",
        "anthropic",
        "claude",
        "claude-code",
        "claude-skill",
        "generative-ui",
        "html",
        "presentation",
        "slides",
        "vibe-coding"
      ],
      "license": "MIT",
      "open_issues": 49,
      "created_at": "2026-01-28T00:42:34Z",
      "pushed_at": "2026-06-23T20:08:19Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 1934,
      "watchers": 104,
      "archived": false,
      "size_kb": 582
    },
    "readme_content": "# Frontend Slides\n\nA coding-agent skill for creating stunning HTML presentations — from scratch or by converting PowerPoint files. It is packaged as a Claude Code plugin, and the core `SKILL.md` can also be read by other coding agents with filesystem and shell access.\n\n## 📺 Watch the Walkthrough & Tutorial\n\nNew here? This beginner-friendly video walks you through the whole thing, start to finish.\n\n<a href=\"https://www.youtube.com/watch?v=372Iksaz8b0\" title=\"Frontend Slides — walkthrough & tutorial (beginner-friendly)\">\n  <img src=\"https://img.youtube.com/vi/372Iksaz8b0/maxresdefault.jpg\" alt=\"Watch the Frontend Slides walkthrough and tutorial on YouTube\" width=\"100%\" />\n</a>\n\n> ▶️ **[Watch on YouTube →](https://www.youtube.com/watch?v=372Iksaz8b0)** (beginner-friendly walkthrough and tutorial)\n\n## What This Does\n\n**Frontend Slides** helps non-designers create beautiful web presentations without knowing CSS or JavaScript. It uses a \"show, don't tell\" approach: instead of asking you to describe your aesthetic preferences in words, it generates visual previews and lets you pick what you like.\n\nHere is a deck about the skill, made through the skill:\n\nhttps://github.com/user-attachments/assets/ef57333e-f879-432a-afb9-180388982478\n\n### Key Features\n\n- **Zero Dependencies** — Single HTML files with inline CSS/JS. No npm, no build tools, no frameworks.\n- **Visual Style Discovery** — Can't articulate design preferences? No problem. Pick from generated visual previews.\n- **PPT Conversion** — Convert existing PowerPoint files to web, preserving all images and content.\n- **Anti-AI-Slop** — Curated distinctive styles that avoid generic AI aesthetics (bye-bye, purple gradients on white).\n- **Bold Template Pack** — Optional design-forward templates from `beautiful-html-templates`, loaded progressively so safe presets still work as the default fallback.\n- **Production Quality** — Accessible, fixed 16:9, well-commented code you can customize.\n\n## Installation\n\n### Via Claude Code Custom Marketplace Source\n\nInstall directly from this public GitHub repo. Run these as two separate Claude Code messages; do not paste both lines into the prompt at once.\n\n```text\n/plugin marketplace add https://github.com/zarazhangrui/frontend-slides\n```\n\nAfter that finishes, run:\n\n```text\n/plugin install frontend-slides@frontend-slides\n```\n\nUse the HTTPS URL. The shorter `zarazhangrui/frontend-slides` form may make Claude Code try SSH, which can fail if GitHub is not already in your `known_hosts` file.\n\nThen use it by typing `/frontend-slides:frontend-slides` in Claude Code. Claude Code namespaces plugin-installed skills as `/plugin-name:skill-name`.\n\n### Claude Code Manual Installation\n\nCopy the skill files to your Claude Code skills directory:\n\n```bash\n# Create the skill directory\nmkdir -p ~/.claude/skills/frontend-slides/scripts\n\n# Copy the user-facing skill files\ncp SKILL.md STYLE_PRESETS.md viewport-base.css html-template.md animation-patterns.md ~/.claude/skills/frontend-slides/\ncp -R bold-template-pack ~/.claude/skills/frontend-slides/\ncp scripts/extract-pptx.py scripts/deploy.sh scripts/export-pdf.sh ~/.claude/skills/frontend-slides/scripts/\n```\n\nOr clone directly:\n\n```bash\ngit clone https://github.com/zarazhangrui/frontend-slides.git ~/.claude/skills/frontend-slides\n```\n\nThen use it by typing `/frontend-slides` in Claude Code. Standalone skills are not namespaced.\n\n### Other Coding Agents\n\nAgents such as Codex, Kimi Code, OpenCode, Gemini CLI, or other local coding assistants can use the same core skill. The simplest path is to send the agent this GitHub repo link and ask it to use the Frontend Slides skill:\n\n```text\nhttps://github.com/zarazhangrui/frontend-slides\n```\n\nIf the agent can read GitHub repos or browse files, it should start from `SKILL.md` and load only the referenced support files it needs:\n\n- `STYLE_PRESETS.md`\n- `viewport-base.css`\n- `html-template.md`\n- `animation-patterns.md`\n- `bold-template-pack/`\n- `scripts/`\n\nSome agents can also install the skill for you if they have filesystem access and a known local skills directory. If not, they can still follow `SKILL.md` directly for the current session.\n\nThe Claude Code plugin gives Claude Code a custom marketplace-source install flow and `/frontend-slides:frontend-slides` command. Other agents usually do not use that command surface.\n\n## Usage\n\n### Create a New Presentation\n\n```text\n/frontend-slides:frontend-slides\n\n> \"I want to create a pitch deck for my AI startup\"\n```\n\nIf installed manually as a standalone Claude Code skill, use `/frontend-slides` instead.\n\nIn non-Claude agents, ask the agent to use the Frontend Slides skill and point it at this repo or `SKILL.md`.\n\nThe skill will:\n\n1. Ask about your content (slides, messages, images)\n2. Generate 3 visual style previews for you to compare, inferring the vibe from your brief unless you already named one\n3. Let you pick the visual direction\n4. Create the full presentation in your chosen style\n5. Open it in your browser\n\n### Convert a PowerPoint\n\n```text\n/frontend-slides:frontend-slides\n\n> \"Convert my presentation.pptx to a web slideshow\"\n```\n\nThe skill will:\n\n1. Extract all text, images, and notes from your PPT\n2. Show you the extracted content for confirmation\n3. Let you pick a visual style\n4. Generate an HTML presentation with all your original assets\n\n## Included Styles\n\n### Dark Themes\n\n- **Bold Signal** — Confident, high-impact, vibrant card on dark\n- **Electric Studio** — Clean, professional, split-panel\n- **Creative Voltage** — Energetic, retro-modern, electric blue + neon\n- **Dark Botanical** — Elegant, sophisticated, warm accents\n\n### Light Themes\n\n- **Notebook Tabs** — Editorial, organized, paper with colorful tabs\n- **Pastel Geometry** — Friendly, approachable, vertical pills\n- **Split Pastel** — Playful, modern, two-color vertical split\n- **Vintage Editorial** — Witty, personality-driven, geometric shapes\n\n### Specialty\n\n- **Neon Cyber** — Futuristic, particle backgrounds, neon glow\n- **Terminal Green** — Developer-focused, hacker aesthetic\n- **Swiss Modern** — Minimal, Bauhaus-inspired, geometric\n- **Paper & Ink** — Literary, drop caps, pull quotes\n\n### Bold Template Pack\n\nThe skill also includes 34 optional bold design systems from\n`beautiful-html-templates`, such as **Neo-Grid Bold**, **Editorial Tri-Tone**,\n**Creative Mode**, **Broadside**, **Signal**, and **Vellum**.\n\nDuring style discovery, the preview set is:\n\n- 1 safe preset from `STYLE_PRESETS.md`\n- at least 1 bold template option from `bold-template-pack/selection-index.json`\n- 1 wildcard option, either another bold template or a self-generated custom design\n\nThe agent reads the compact bold template index first, then loads only the\nshortlisted candidates' small `preview.md` cards for title-slide previews. It\nloads the full `design.md` for exactly one bold template only after the user\npicks that template for the final deck. If the user picks a custom wildcard,\nthe agent expands that preview's own CSS and layout system into the full deck.\n\n## Bold Template Gallery\n\nFrontend Slides can now draw from the 34 bold design systems in [`beautiful-html-templates`](https://github.com/zarazhangrui/beautiful-html-templates). Three screenshots per template show how each visual system handles different slide layouts. Click any template name to inspect the source template library.\n\n### [Soft Editorial](https://github.com/zarazhangrui/beautiful-html-templates/tree/main/templates/soft-editorial/)\n\n<p>\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/soft-editorial-4.png\" width=\"32.5%\" alt=\"Soft Editorial — slide 4\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/soft-editorial-6.png\" width=\"32.5%\" alt=\"Soft Editorial — slide 6\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/soft-editorial-10.png\" width=\"32.5%\" alt=\"Soft Editorial — slide 10\" />\n</p>\n\n> Cormorant Garamond serif on warm paper with sage, blush, and lemon accents.\n\n### [Editorial Forest](https://github.com/zarazhangrui/beautiful-html-templates/tree/main/templates/editorial-forest/)\n\n<p>\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/editorial-forest-1.png\" width=\"32.5%\" alt=\"Editorial Forest — slide 1\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/editorial-forest-2.png\" width=\"32.5%\" alt=\"Editorial Forest — slide 2\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/editorial-forest-5.png\" width=\"32.5%\" alt=\"Editorial Forest — slide 5\" />\n</p>\n\n> Forest green, dusty pink, and warm cream in Source Serif 4 — quiet, intentional quarterly-review aesthetic.\n\n### [Pin & Paper](https://github.com/zarazhangrui/beautiful-html-templates/tree/main/templates/pin-and-paper/)\n\n<p>\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/pin-and-paper-1.png\" width=\"32.5%\" alt=\"Pin & Paper — slide 1\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/pin-and-paper-11.png\" width=\"32.5%\" alt=\"Pin & Paper — slide 11\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/pin-and-paper-3.png\" width=\"32.5%\" alt=\"Pin & Paper — slide 3\" />\n</p>\n\n> Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture.\n\n### [Sakura Chroma](https://github.com/zarazhangrui/beautiful-html-templates/tree/main/templates/sakura-chroma/)\n\n<p>\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/sakura-chroma-1.png\" width=\"32.5%\" alt=\"Sakura Chroma — slide 1\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/sakura-chroma-3.png\" width=\"32.5%\" alt=\"Sakura Chroma — slide 3\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/sakura-chroma-4.png\" width=\"32.5%\" alt=\"Sakura Chroma — slide 4\" />\n</p>\n\n> Vintage Japanese cassette-package aesthetic: cream paper, diagonal rainbow ribbons, condensed bold type, JIS-style spec checkboxes.\n\n### [Stencil & Tablet](https://github.com/zarazhangrui/beautiful-html-templates/tree/main/templates/stencil-tablet/)\n\n<p>\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/stencil-tablet-1.png\" width=\"32.5%\" alt=\"Stencil & Tablet — slide 1\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/stencil-tablet-3.png\" width=\"32.5%\" alt=\"Stencil & Tablet — slide 3\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/stencil-tablet-8.png\" width=\"32.5%\" alt=\"Stencil & Tablet — slide 8\" />\n</p>\n\n> Bone paper with stencil-cut headlines and a six-color earth palette: archaeology meets brand.\n\n### [Cobalt Grid](https://github.com/zarazhangrui/beautiful-html-templates/tree/main/templates/cobalt-grid/)\n\n<p>\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/cobalt-grid-1.png\" width=\"32.5%\" alt=\"Cobalt Grid — slide 1\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/cobalt-grid-3.png\" width=\"32.5%\" alt=\"Cobalt Grid — slide 3\" />\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautiful-html-templates/main/screenshots/cobalt-grid-5.png\" width=\"32.5%\" alt=\"Cobalt Grid — slide 5\" />\n</p>\n\n> Electric cobalt italic serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.\n\n### [Vellum](https://github.com/zarazhangrui/beautiful-html-templates/tree/main/templates/vellum/)\n\n<p>\n  <img src=\"https://raw.githubusercontent.com/zarazhangrui/beautifu",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 8,
      "relation": 9,
      "risk_signal": 6,
      "total": 82
    },
    "strategic_score": 82
  },
  {
    "owner": "every-app",
    "name": "open-seo",
    "full_name": "every-app/open-seo",
    "url": "https://github.com/every-app/open-seo",
    "description": "Open source alternative to Semrush and Ahrefs",
    "language": "TypeScript",
    "total_stars": 3674,
    "forks": 391,
    "stars_this_period": 1031,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "backlink-analysis",
        "google-search-console-mcp",
        "keyword-research",
        "mcp",
        "seo",
        "seo-tools",
        "site-audit"
      ],
      "license": "MIT",
      "open_issues": 10,
      "created_at": "2026-02-27T18:57:41Z",
      "pushed_at": "2026-06-28T22:04:49Z",
      "homepage": "https://openseo.so",
      "default_branch": "main",
      "forks": 391,
      "watchers": 19,
      "archived": false,
      "size_kb": 18966
    },
    "readme_content": "# OpenSEO\n\n> Open source alternative to Semrush and Ahrefs\n\nOpenSEO is an SEO tool for _the people_. If tools like Semrush or Ahrefs are too expensive or bloated, OpenSEO is a pay-as-you-go alternative that you actually control.\n\n> All-in-one SEO tool for you and your AI agent.\n\nConnect with any agent like Claude Code, OpenClaw or Hermes. We have pre-built skills, but you can build your own to tailor OpenSEO to your needs.\n\n<img width=\"1385\" height=\"794\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/fd208249-44ea-4849-bb4b-5fc896aeab73\" />\n\n## Table of Contents\n\n- [Why use OpenSEO?](#why-use-openseo)\n- [Main SEO Workflows](#main-seo-workflows)\n- [OpenSEO MCP](#openseo-mcp)\n- [OpenSEO Agent Skills](#openseo-agent-skills)\n- [Roadmap](#roadmap)\n- [Community](#community)\n- [Pricing / Costs (Free + API costs)](#pricing--costs)\n- [DataForSEO API Key Setup](#dataforseo-api-key-setup)\n- [Google Search Console](#google-search-console)\n- [Self-hosting](#self-hosting)\n  - [Docker Self Hosting](#docker-self-hosting)\n  - [Cloudflare Self-Hosting](#cloudflare-self-hosting)\n- [Local Development](#local-development)\n- [Contributing](#contributing)\n- [SEO API Cost Reference](#seo-api-cost-reference)\n\n## Hosted Version\n\nIf you're not interested in self hosting, or just want to support the project, we also have a hosted version:\n\n[openseo.so](https://openseo.so)\n\n## Why use OpenSEO?\n\n- Best in class MCP and AI Skills.\n- Modern, simple UI.\n  - Focused workflows instead of a bloated, complex SEO suite.\n- No subscriptions.\n  - Bring your own DataForSEO API key and pay only for what you use.\n- Fork and vibe code your own custom tool.\n\n## Main SEO Workflows\n\n- Keyword research\n- Rank tracking\n- Competitor Insights\n- Backlinks\n- Site Audits\n- AI Visibility\n\n## Community\n\nJoin Discord to chat: [Discord](https://discord.gg/c9uGs3cFXr)\n\nFollow along for updates:\n\n- Follow on X: https://x.com/bensenescu\n- Sign up for the mailing list on our website: [openseo.so](https://openseo.so)\n\n## OpenSEO MCP\n\nOpenSEO exposes an MCP server so AI agents can use your SEO data directly.\n\nConnect Claude Code, OpenClaw, Hermes or any other agent.\n\n### Setup\n\n- Set up the app\n- Click \"AI & Agents\" in the header\n- Follow the instructions to connect to your agent\n\n## OpenSEO Agent Skills\n\nOpenSEO Agent Skills are reusable workflows for your agent\n\nThey guide your agent through SEO tasks and use the OpenSEO MCP so your agent makes better recommendations.\n\n### Available Skills\n\n- `seo-project-setup`\n- `seo-coach`\n- `keyword-research`\n- `keyword-clustering`\n- `competitive-landscape`\n- `competitor-analysis`\n- `link-prospecting`\n\n### Installation Guide\n\nRead our docs for how to install the skills:\n\nhttps://openseo.so/docs/skills/setup\n\n## Roadmap\n\nTop priorities:\n\n- Improved and Scheduled Site Audits\n- Custom Reports for Clients\n- Local SEO\n- In App AI Agent\n\nOur top priority is always refining the current product and making existing features better based on user feedback.\n\nIf something important is missing, please join the [Discord](https://discord.gg/c9uGs3cFXr) or email me at ben@openseo.so and request it.\n\n## Pricing / Costs\n\nOpenSEO is totally free to use. It works by using DataForSEO's APIs, which is a paid third-party service unaffiliated with OpenSEO.\n\nThere are two separate things:\n\n1. OpenSEO app cost: $0, you host it yourself.\n2. DataForSEO API: pay-as-you-go based on usage.\n\nFor cost estimates, see [DataForSEO API Cost Reference](#seo-api-cost-reference).\n\n## DataForSEO API Key Setup\n\nOpenSEO uses DataForSEO to fetch SEO data. You need an API key to connect OpenSEO to the service.\n\n1. Go to [DataForSEO API Access](https://app.dataforseo.com/api-access?aff=255379).\n2. Click \"Send by email\" to get set your credentials.\n3. Copy the longer crendentials labelled \"Base64\" credentials.\n4. Set this as `DATAFORSEO_API_KEY` in your environment file:\n\n- Docker self-hosting: `.env`\n- Cloudflare: Set it in the workers UI\n- Local development: `.env.local`\n\n## Google Search Console\n\nSearch Console is optional and works in self-hosted deployments using your own\nGoogle OAuth client. It takes ~10 minutes of one-time setup — see\n[`docs/SELF_HOSTING_GOOGLE_SEARCH_CONSOLE.md`](./docs/SELF_HOSTING_GOOGLE_SEARCH_CONSOLE.md).\n\n## Self-hosting\n\nOpenSEO supports two self-hosting paths:\n\n- Docker for personal use and testing (Recommended for local use).\n- Cloudflare for internet-facing self-hosting across multiple devices or for your team.\n\n_Docker_\n\nDocker is recommended for getting started. It's super easy to get up and running once you install Docker.\n\n_Cloudflare_\n\nIf you love OpenSEO and want to use it across multiple devices or with your team, you can host it on Cloudflare which we'll be a SaaS-like experience. Also, this will have automatic database backups and other nice convenience features. It's just a bit more effort to get started if you're unfamiliar with Cloudflare.\n\n## Docker Self Hosting\n\n> [!WARNING]\n> By default, the Docker version is intended for local use only. It runs in single-user mode with no authentication. For internet-facing self-hosting, use Cloudflare (free plan compatible). Or read [`docs/SELF_HOSTING_DOCKER.md`](./docs/SELF_HOSTING_DOCKER.md) before exposing to the internet.\n\nPrerequisites:\n\n- Install Docker: https://www.docker.com/products/docker-desktop/\n\nQuickstart:\n\n1. `cp .env.example .env`\n2. Set `DATAFORSEO_API_KEY` in `.env`\n3. `docker compose up -d`\n4. Open `http://localhost:<PORT>` (default `3001`)\n\nTo update to the newest published image, pull first and then restart:\n\n```sh\ndocker compose pull\ndocker compose up -d\n```\n\nFor more info, see [`docs/SELF_HOSTING_DOCKER.md`](./docs/SELF_HOSTING_DOCKER.md).\n\n## Cloudflare Self-Hosting\n\n### Deploy the Worker\n\nClicking this button opens a page to deploy OpenSEO in your Cloudflare account. If you do not have an account yet, it will take you to account creation first (OpenSEO works great on the free plan).\n\nReference these docs while deploying since the Cloudflare UI doesn't indicate what steps you need to take: [`docs/SELF_HOSTING_CLOUDFLARE.md`](./docs/SELF_HOSTING_CLOUDFLARE.md).\n\n[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/every-app/open-seo)\n\n## Local Development\n\nSee [`docs/LOCAL_DEVELOPMENT.md`](./docs/LOCAL_DEVELOPMENT.md).\n\n## Contributing\n\nContributions are very welcome.\n\n- Open an issue for bugs, UX friction, or feature requests.\n- Open a PR if you want to implement a feature directly.\n- Community-driven improvements are prioritized, and high-quality PRs are encouraged.\n\nIf you want to contribute but are unsure where to start, open an issue and describe what you want to build.\n\n## SEO API Cost Reference\n\nUse this section to estimate DataForSEO spend per request type. OpenSEO itself remains free; these are API usage costs only.\n\nAs of February 26, 2026, DataForSEO’s public docs/pricing pages say:\n\n- New accounts include **$1 free credit** to test the API.\n- The minimum top-up/payment is **$50**.\n\nThat means you can try OpenSEO for free with the starter credit, then decide if/when to top up.\n\n### Planning examples\n\n- Track 100 keywords weekly at depth 50: `~$1.20/month`\n- 100 keyword research requests at the default 150 results: `$3.50`\n- 100 keyword research requests at 500 results each: `$7.00`\n- 100 domain overviews (200 ranked keywords each): `$4.01`\n- 100 backlinks domain searches at current defaults before opening extra tabs: about `$6.34`\n- 100 backlinks page searches at current defaults before opening extra tabs: about `$4.30`\n- 100 fully explored backlinks domain searches: about `$10.94`\n- 100 fully explored backlinks page searches: about `$8.61`\n\n### Pricing sources\n\n- DataForSEO SERP API pricing: https://dataforseo.com/apis/serp-api/pricing\n- DataForSEO Keywords Data API pricing: https://dataforseo.com/pricing/dataforseo-labs/dataforseo-google-api\n- DataForSEO Backlinks pricing: https://dataforseo.com/pricing/backlinks/backlinks\n- DataForSEO Lighthouse API docs: https://docs.dataforseo.com/v3/on_page/lighthouse/overview/\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"open-seo\",\n  \"private\": true,\n  \"sideEffects\": false,\n  \"version\": \"0.0.21\",\n  \"type\": \"module\",\n  \"packageManager\": \"pnpm@10.30.1\",\n  \"scripts\": {\n    \"dev\": \"vite dev\",\n    \"dev:clear-chat\": \"rm -rf .wrangler/state/v3/do/open-seo-OnboardingChatAgent\",\n    \"dev:agents\": \"mkdir -p .logs && portless run vite dev 2>&1 | tee .logs/dev-server.log\",\n    \"dev:agents:force\": \"mkdir -p .logs && portless --force run vite dev 2>&1 | tee .logs/dev-server.log\",\n    \"build\": \"vite build && tsc --noEmit\",\n    \"lint\": \"oxlint . --type-aware\",\n    \"lint:fix\": \"oxlint . --type-aware --fix\",\n    \"preview\": \"npm run build && vite preview --port 3001\",\n    \"deploy\": \"npm run db:migrate:prod && npm run build && wrangler deploy\",\n    \"sourcemaps:upload\": \"POSTHOG_SOURCEMAPS=true NODE_OPTIONS=--max-old-space-size=8192 npm run build && pnpm dlx @posthog/cli sourcemap inject --directory ./dist-sourcemaps && pnpm dlx @posthog/cli sourcemap upload --directory ./dist-sourcemaps\",\n    \"cf-typegen\": \"wrangler types\",\n    \"types:check\": \"tsc --noEmit\",\n    \"format:check\": \"prettier --check .\",\n    \"format:write\": \"prettier . --write\",\n    \"auth:generate\": \"pnpm dlx auth@latest generate --config ./cli-auth.ts --adapter drizzle --dialect sqlite --output ./src/db/better-auth-schema.ts\",\n    \"db:generate\": \"drizzle-kit generate\",\n    \"db:migrate:local\": \"wrangler d1 migrations apply DB --local\",\n    \"db:migrate:prod\": \"wrangler d1 migrations apply DB --remote\",\n    \"knip\": \"knip\",\n    \"release:notes\": \"node scripts/release-notes.mjs\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:ci\": \"vitest run --reporter=dot\",\n    \"test:e2e\": \"playwright test\",\n    \"test:e2e:domain\": \"playwright test e2e/domain-overview-filters.spec.ts\",\n    \"test:e2e:domain:perf\": \"playwright test e2e/domain-overview-filters.perf.spec.ts\",\n    \"test:e2e:keywords\": \"playwright test e2e/keyword-research-navigation.spec.ts\",\n    \"billing:backlinks\": \"tsx scripts/backlinks-cost-profile.ts\",\n    \"billing:brand-lookup\": \"tsx scripts/brand-lookup-cost-profile.ts\",\n    \"cleanup:default-projects:d1\": \"tsx scripts/d1-default-project-cleanup.ts\",\n    \"seed:rank-tracking\": \"tsx scripts/seed-rank-tracking.ts\",\n    \"ci:check\": \"prettier --check . && knip && tsc --noEmit && oxlint . --type-aware\"\n  },\n  \"cloudflare\": {\n    \"bindings\": {\n      \"AUTH_MODE\": {\n        \"description\": \"Set to `cloudflare_access` for secured deployments behind Cloudflare Access, or `local_noauth` for trusted local self-host mode only.\"\n      },\n      \"TEAM_DOMAIN\": {\n        \"description\": \"Cloudflare Access team domain (for example `https://your-team.cloudflareaccess.com`) used to validate `cf-access-jwt-assertion` JWTs.\"\n      },\n      \"POLICY_AUD\": {\n        \"description\": \"Cloudflare Access Application Audience (AUD) tag for this Worker route/domain.\"\n      },\n      \"DATAFORSEO_API_KEY\": {\n        \"description\": \"Base64-encoded `login:password` for DataForSEO API access.\"\n      },\n      \"OAUTH_KV\": {\n        \"description\": \"KV namespace used by the Cloudflare Workers OAuth provider for MCP client registrations, grants, and tokens.\"\n      }\n    }\n  },\n  \"dependencies\": {\n    \"@ai-sdk/react\": \"^3.0.201\",\n    \"@cloudflare/ai-chat\": \"^0.8.4\",\n    \"@cloudflare/workers-oauth-provider\": \"^0.4.0\",\n    \"@every-app/sdk\": \"^0.1.14\",\n    \"@modelcontextprotocol/sdk\": \"1.29.0\",\n    \"@openrouter/ai-sdk-provider\": \"^2.9.0\",\n    \"@tanstack/query-core\": \"^5.90.9\",\n    \"@tanstack/react-form\": \"^1.25.0\",\n    \"@tanstack/react-query\": \"^5.90.9\",\n    \"@tanstack/react-router\": \"^1.168.10\",\n    \"@tanstack/react-router-devtools\": \"^1.166.11\",\n    \"@tanstack/react-start\": \"^1.167.16\",\n    \"@tanstack/react-table\": \"^8.21.3\",\n    \"agents\": \"0.15.0\",\n    \"ai\": \"^6.0.199\",\n    \"autumn-js\": \"^1.1.7\",\n    \"better-auth\": \"^1.5.5\",\n    \"cheerio\": \"^1.2.0\",\n    \"cloudflare\": \"^5.2.0\",\n    \"daisyui\": \"^5.5.5\",\n    \"dataforseo-client\": \"^2.0.19\",\n    \"drizzle-orm\": \"^0.44.4\",\n    \"fast-xml-parser\": \"^5.4.1\",\n    \"jose\": \"^6.0.12\",\n    \"lucide-react\": \"^0.542.0\",\n    \"papaparse\": \"^5.5.3\",\n    \"posthog-js\": \"^1.363.5\",\n    \"posthog-node\": \"^5.28.5\",\n    \"react\": \"^19.0.0\",\n    \"react-dom\": \"^19.0.0\",\n    \"react-markdown\": \"^10.1.0\",\n    \"recharts\": \"^3.7.0\",\n    \"remark-gfm\": \"^4.0.1\",\n    \"remeda\": \"^2.33.6\",\n    \"robots-parser\": \"^3.0.1\",\n    \"sonner\": \"^2.0.7\",\n    \"tailwindcss\": \"^4.1.16\",\n    \"tldts\": \"^7.0.25\",\n    \"zod\": \"^4.1.12\"\n  },\n  \"devDependencies\": {\n    \"@cloudflare/vite-plugin\": \"^1.40.2\",\n    \"@cloudflare/workers-types\": \"^4.20260611.1\",\n    \"@libsql/client\": \"^0.15.15\",\n    \"@playwright/test\": \"^1.59.1\",\n    \"@tailwindcss/vite\": \"^4.1.11\",\n    \"@tanstack/devtools-vite\": \"^0.6.0\",\n    \"@tanstack/react-devtools\": \"^0.10.1\",\n    \"@types/node\": \"^22.18.13\",\n    \"@types/papaparse\": \"^5.5.2\",\n    \"@types/react\": \"^19.0.8\",\n    \"@types/react-dom\": \"^19.0.3\",\n    \"@vitejs/plugin-react\": \"^4.6.0\",\n    \"drizzle-kit\": \"^0.31.4\",\n    \"knip\": \"^5.66.4\",\n    \"oxlint\": \"^1.50.0\",\n    \"oxlint-tsgolint\": \"^0.1",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "skill",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "owner": "Tencent",
    "name": "WeKnora",
    "full_name": "Tencent/WeKnora",
    "url": "https://github.com/Tencent/WeKnora",
    "description": "Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.",
    "language": "Go",
    "total_stars": 17450,
    "forks": 2294,
    "stars_this_period": 934,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "agent",
        "agentic",
        "ai",
        "chatbot",
        "embeddings",
        "evaluation",
        "generative-ai",
        "golang",
        "knowledge-base",
        "llm",
        "multi-tenant",
        "multimodel",
        "ollama",
        "openai",
        "question-answering",
        "rag",
        "reranking",
        "semantic-search",
        "vector-search",
        "wiki"
      ],
      "license": "NOASSERTION",
      "open_issues": 284,
      "created_at": "2025-07-22T08:01:23Z",
      "pushed_at": "2026-06-27T16:32:02Z",
      "homepage": "https://weknora.weixin.qq.com",
      "default_branch": "main",
      "forks": 2294,
      "watchers": 84,
      "archived": false,
      "size_kb": 78852
    },
    "readme_content": "<p align=\"center\">\n  <picture>\n    <img src=\"./docs/images/logo.png\" alt=\"WeKnora Logo\" height=\"120\"/>\n  </picture>\n</p>\n\n<p align=\"center\">\n  <picture>\n    <a href=\"https://trendshift.io/repositories/15289\" target=\"_blank\">\n      <img src=\"https://trendshift.io/api/badge/repositories/15289\" alt=\"Tencent%2FWeKnora | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/>\n    </a>\n  </picture>\n</p>\n<p align=\"center\">\n    <a href=\"https://weknora.weixin.qq.com\" target=\"_blank\">\n        <img alt=\"Official Website\" src=\"https://img.shields.io/badge/Official Website-WeKnora-4e6b99\">\n    </a>\n    <a href=\"https://chatbot.weixin.qq.com\" target=\"_blank\">\n        <img alt=\"WeChat Dialog Open Platform\" src=\"https://img.shields.io/badge/WeChat Dialog Open Platform-5ac725\">\n    </a>\n    <a href=\"https://chromewebstore.google.com/detail/jpemjbopikggjlmikmclgbmkhhopjdgd\" target=\"_blank\">\n        <img alt=\"Chrome Extension\" src=\"https://img.shields.io/badge/Chrome Extension-WeKnora-4285F4\">\n    </a>\n    <a href=\"https://clawhub.ai/lyingbug/weknora\" target=\"_blank\">\n        <img alt=\"ClawHub Skill\" src=\"https://img.shields.io/badge/ClawHub Skill-WeKnora-ff6b35\">\n    </a>\n    <a href=\"https://github.com/Tencent/WeKnora/blob/main/LICENSE\">\n        <img src=\"https://img.shields.io/badge/License-MIT-ffffff?labelColor=d4eaf7&color=2e6cc4\" alt=\"License\">\n    </a>\n    <a href=\"./CHANGELOG.md\">\n        <img alt=\"Version\" src=\"https://img.shields.io/badge/version-0.6.3-2e6cc4?labelColor=d4eaf7\">\n    </a>\n</p>\n\n<p align=\"center\">\n| <b>English</b> | <a href=\"./README_CN.md\"><b>简体中文</b></a> | <a href=\"./README_JA.md\"><b>日本語</b></a> | <a href=\"./README_KO.md\"><b>한국어</b></a> |\n</p>\n\n<p align=\"center\">\n  <h4 align=\"center\">\n\n  [Overview](#-overview) • [Architecture](#-architecture) • [Key Features](#-key-features) • [Getting Started](#-getting-started) • [API Reference](#-api-reference) • [Developer Guide](#-developer-guide)\n  \n  </h4>\n</p>\n\n# 💡 WeKnora — Turn Documents into Living Knowledge with RAG, Agents and Auto-Wiki\n\n## 📌 Overview\n\n[**WeKnora**](https://weknora.weixin.qq.com) is an open-source, LLM-powered knowledge framework built for enterprise-grade document understanding, semantic retrieval, and autonomous reasoning.\n\nIt is organized around three core capabilities: **RAG-based Quick Q&A** for everyday lookups, a **ReAct Agent** that autonomously orchestrates retrieval, MCP tools and web search to handle complex multi-step tasks, and a brand-new **Wiki Mode** in which agents distill raw documents into a self-maintaining, interlinked markdown knowledge base with an interactive knowledge graph. Combined with multi-source ingestion (Feishu / Notion / Yuque / RSS, and growing), **website embed widgets** for publishing agents to external sites, 20+ LLM provider integrations, full Langfuse observability, **enterprise-ready multi-tenant RBAC** (4-tier role matrix + per-resource ownership + per-tenant audit log), and a fully self-hostable modular architecture, WeKnora turns scattered documents into a queryable, reasoning-capable, continuously evolving knowledge asset.\n\nThe framework supports auto-syncing knowledge from Feishu, Notion, and Yuque (more data sources coming soon), handles 10+ document formats including PDF, Word, images, and Excel, and can serve Q&A directly through IM channels like WeCom, Feishu, Slack, and Telegram. It is compatible with major LLM providers including OpenAI, DeepSeek, Qwen (Alibaba Cloud), Zhipu, Hunyuan, Gemini, MiniMax, NVIDIA, and Ollama. Its fully modular design allows swapping LLMs, vector databases, and storage backends, with support for local and private cloud deployment ensuring complete data sovereignty. WeKnora also integrates with **Langfuse** for comprehensive observability into agent reasoning, token usage, and pipeline tracing.\n\n\n## ✨ Latest Updates\n\n- **v0.6.3** — Website embed widget & Integrations Center (secure-mode token exchange + rate limits); chat experience overhaul (citation popovers, RAG pipeline progress, streaming markdown); document multi-tag & batch reparse; Wiki folders & hierarchy navigation; RSS data source; MCP OAuth2; EPUB / MHTML parsing; agent model-readiness checks; model test debugger; session source filter; workspace deletion UI. See [`CHANGELOG.md`](./CHANGELOG.md).\n- **v0.6.2** — Per-upload process configuration with upload-confirm dialog; document reparse with `process_config`; `weknora` CLI v0.9 (bundled Agent Skills, `session stop`, auth/profile harmonization); KB marquee multi-select; HNSW index for 1024-dim pgvector embeddings; chat resources store refactor; Langfuse-only tracing (Jaeger removed). See [`CHANGELOG.md`](./CHANGELOG.md).\n- **v0.6.1** — Document parsing trace timeline (Langfuse-style span tree with stage-by-stage progress + stop-parse); OpenSearch vector store driver; declarative built-in models via YAML; system admin & consolidated platform settings + audit log; new-user onboarding guide; settings UI redesign; `weknora` CLI v0.7 / v0.8 (agent-first wire contract, NDJSON, `--dry-run`); OpenDataLoader + PaddleOCR-VL parsers; MCP server multi-transport (stdio / SSE / HTTP); per-model thinking-mode config; Tencent LKEAP rerank + native Gemini embeddings + MiniMax-M3. See [`CHANGELOG.md`](./CHANGELOG.md).\n- **v0.6.0** — Tenant RBAC (4-tier role matrix `Owner` / `Admin` / `Contributor` / `Viewer` + per-KB ownership + per-tenant audit log), tenant member management & multi-workspace UX, self-service workspaces; `weknora` CLI v0.4 GA with `mcp serve`; KB retrieval fan-out across vector stores; AES-256-GCM credential encryption + docreader gRPC TLS + Token; Zhipu embedder + Huawei OBS; server-side user preferences; Go 1.26.0. See [`docs/RBAC说明.md`](./docs/RBAC说明.md) and [`CHANGELOG.md`](./CHANGELOG.md).\n- **v0.5.2** — Wiki ingest scales to 40k-document KBs (task queue + DLQ); MCP human-in-the-loop tool approval; Anthropic / Apache Doris / Tencent VectorDB / KS3 / SearXNG backends; adaptive 3-tier chunking with live preview; global ⌘K command palette; Yuque connector + WeChat Mini Program; `weknora` CLI preview.\n- **v0.5.1** — Knowledge-base batch management; tenant-wide IM channels overview; session search + user-scoped pinning; unified Model / Web Search / MCP settings cards; per-agent LLM timeout; desktop tenant switching.\n- **v0.5.0** — Wiki Mode GA — agents auto-generate structured, interlinked Markdown wiki pages with a knowledge graph; wiki browser + visual graph in the UI.\n- **v0.4.0** — WeKnora Cloud (hosted LLM + parsing); Chrome Extension; ClawHub Skill; WeChat IM; attachment processing; Azure OpenAI / Alibaba OSS; Notion connector; Baidu + Ollama web search; VectorStore management.\n- **v0.3.6** — ASR (audio); Feishu data-source auto-sync; OIDC; IM quote-reply context + thread-based sessions; document summarization; Tavily search; parallel tool calling; agent @mention scope restriction.\n- **v0.3.5** — Telegram / DingTalk / Mattermost IM; IM slash commands + QA queue; suggested questions; VLM auto-describe MCP tool images; Novita AI; channel tracking.\n- **v0.3.4** — WeCom / Feishu / Slack IM; multimodal image support; NVIDIA model API; Weaviate; AWS S3; AES-256-GCM API-key encryption; built-in MCP service; hybrid-search optimization; `final_answer` tool.\n- **v0.3.3** — Parent-child chunking; KB pinning; fallback response; passage cleaning for rerank; storage auto-creation; Milvus.\n- **v0.3.2** — Knowledge Search entry; per-source parser & storage engine config; image rendering in local storage; document preview; Volcengine TOS; Mermaid rendering; batch session management; memory graph preview.\n- **v0.3.0** — Shared Space; Agent Skills + sandboxed execution; custom agents; Data Analyst agent; thinking mode; Bing / Google web search; API Key auth; Helm chart; Korean i18n; Qdrant.\n- **v0.2.0** — Agent Mode (ReACT); multi-type knowledge bases (FAQ + document); conversation strategy config; DuckDuckGo web search; MCP tool integration; new UI with agent mode switching; MQ async task management.\n\n\n## 📱 Interface Showcase\n\n<table>\n  <tr>\n    <td colspan=\"2\" align=\"center\"><b>💬 Intelligent Q&A Conversation</b><br/><img src=\"./docs/images/qa.png\" alt=\"Intelligent Q&A Conversation\" width=\"100%\"></td>\n  </tr>\n  <tr>\n    <td width=\"50%\" align=\"center\"><b>📖 Wiki Browser</b><br/><img src=\"./docs/images/wiki-browser.png\" alt=\"Wiki Browser\" width=\"100%\"></td>\n    <td width=\"50%\" align=\"center\"><b>🕸️ Wiki Knowledge Graph</b><br/><img src=\"./docs/images/wiki-graph.png\" alt=\"Wiki Knowledge Graph\" width=\"100%\"></td>\n  </tr>\n  <tr>\n    <td width=\"50%\" align=\"center\"><b>🤖 Agent Mode · Tool Call Process</b><br/><img src=\"./docs/images/agent-qa.png\" alt=\"Agent Mode Tool Call Process\" width=\"100%\"></td>\n    <td width=\"50%\" align=\"center\"><b>⚙️ Conversation Settings</b><br/><img src=\"./docs/images/settings.png\" alt=\"Conversation Settings\" width=\"100%\"></td>\n  </tr>\n  <tr>\n    <td colspan=\"2\" align=\"center\"><b>🔭 Observability · Langfuse Tracing</b><br/><img src=\"./docs/images/langfuse.png\" alt=\"Observability Langfuse Tracing\" width=\"100%\"></td>\n  </tr>\n</table>\n\n## 🏗️ Architecture\n\n![weknora-architecture.png](./docs/images/architecture.png)\n\nFully modular pipeline from document parsing, vectorization, and retrieval to LLM inference — every component is swappable and extensible. Supports local / private cloud deployment with full data sovereignty and a zero-barrier Web UI for quick onboarding.\n\n## 🧩 Feature Overview\n\n**Intelligent Conversation**\n\n| Capability | Details |\n|------------|---------|\n| Intelligent Reasoning | ReACT progressive multi-step reasoning, autonomously orchestrating knowledge retrieval, MCP tools, and web search |\n| Quick Q&A | RAG-based Q&A over knowledge bases for fast and accurate answers |\n| Wiki Mode | Agent-driven auto-generation of structured, interlinked markdown Wiki pages from raw documents |\n| Tool Calling | Built-in tools, MCP tools (incl. OAuth2 remote services), web search |\n| Conversation Strategy | Online Prompt editing, retrieval threshold tuning, multi-turn context awareness |\n| Suggested Questions | Auto-generated question suggestions based on knowledge base content |\n| Citations & RAG Progress | Inline citation popovers, shared markdown rendering, and stage-by-stage RAG pipeline progress in chat |\n| Session Management | Filter and group sidebar sessions by source (Web / IM / Embed) |\n\n**Knowledge Management**\n\n| Capability | Details |\n|------------|---------|\n| Knowledge Base Types | FAQ / Document / Wiki with folder import, URL import, multi-tag management, and online entry |\n| Per-Upload Process Config | Override parser, chunking, multimodal (VLM / ASR), graph extraction, and question generation per upload batch via upload-confirm dialog or `process_config` API; reparse with new settings |\n| Batch Reparse | Re-queue parsing for multiple documents at once with optional per-batch `process_config` |\n| Data Source Import | Auto-sync from Feishu / Notion / Yuque / RSS feeds (more data sources coming soon); incremental and full sync |\n| Document Formats | PDF / Word / Txt / Markdown / HTML / EPUB / MHTML / Images / CSV / Excel / PPT / JSON |\n| Retrieval Strategies | BM25 sparse / Dense retrieval / GraphRAG / parent-child chunking / HNSW-accelerated pgvector (1024-dim) / multi-dimensional indexing |\n| Batch Selection | Marquee drag-select multiple documents in the KB list for batch operations |\n| E2E Testing | Full-pipeline visualization with recall hit rate, BLEU / ROUGE metric evaluation |\n\n**Integrations & Extensions**\n\n| Capability | Details |\n|------------|---------|\n| LLMs | OpenAI / Azure OpenAI / Anthropic (Claude) / DeepSeek / Qwen (Alibaba Cloud) / Zhipu / Hunyuan / Doubao (Volcengine) / Gemini / MiniMax / NVIDIA / Novita AI / SiliconFlow / OpenRouter / Ollama |\n| Embeddings | Ollama / BGE / GTE / Zhipu / OpenAI-compatible APIs |\n| Vector DBs | PostgreSQL (pgvector) / Elasticsearch / OpenSearch / Milvus / Weaviate / Qdrant / Apache Doris / Tencent VectorDB |\n| Object Storage",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/Tencent/WeKnora\n\ngo 1.26.0\n\nrequire (\n\tcodeberg.org/readeck/go-readability/v2 v2.1.2\n\tgithub.com/DATA-DOG/go-sqlmock v1.5.2\n\tgithub.com/JohannesKaufmann/html-to-markdown/v2 v2.5.1\n\tgithub.com/PuerkitoBio/goquery v1.12.0\n\tgithub.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.5.1\n\tgithub.com/asg017/sqlite-vec-go-bindings v0.1.6\n\tgithub.com/aws/aws-sdk-go-v2 v1.41.7\n\tgithub.com/aws/aws-sdk-go-v2/config v1.32.17\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.19.16\n\tgithub.com/aws/aws-sdk-go-v2/service/s3 v1.101.0\n\tgithub.com/chromedp/chromedp v0.15.1\n\tgithub.com/duckdb/duckdb-go/v2 v2.10502.0\n\tgithub.com/elastic/go-elasticsearch/v7 v7.17.10\n\tgithub.com/elastic/go-elasticsearch/v8 v8.19.6\n\tgithub.com/gin-contrib/cors v1.7.7\n\tgithub.com/gin-gonic/gin v1.12.0\n\tgithub.com/go-openapi/strfmt v0.26.2\n\tgithub.com/go-sql-driver/mysql v1.10.0\n\tgithub.com/go-viper/mapstructure/v2 v2.5.0\n\tgithub.com/golang-jwt/jwt/v5 v5.3.1\n\tgithub.com/golang-migrate/migrate/v4 v4.19.1\n\tgithub.com/google/jsonschema-go v0.4.3\n\tgithub.com/google/uuid v1.6.0\n\tgithub.com/gorilla/websocket v1.5.3\n\tgithub.com/hibiken/asynq v0.26.0\n\tgithub.com/jackc/pgx/v5 v5.9.2\n\tgithub.com/joho/godotenv v1.5.1\n\tgithub.com/ks3sdklib/aws-sdk-go v1.11.0\n\tgithub.com/larksuite/oapi-sdk-go/v3 v3.6.1\n\tgithub.com/longbridgeapp/opencc v0.3.13\n\tgithub.com/mark3labs/mcp-go v0.52.0\n\tgithub.com/milvus-io/milvus/client/v2 v2.6.4\n\tgithub.com/minio/minio-go/v7 v7.1.0\n\tgithub.com/mmcdole/gofeed v1.3.0\n\tgithub.com/neo4j/neo4j-go-driver/v6 v6.0.0\n\tgithub.com/ollama/ollama v0.23.2\n\tgithub.com/open-dingtalk/dingtalk-stream-sdk-go v0.9.1\n\tgithub.com/opensearch-project/opensearch-go/v4 v4.6.0\n\tgithub.com/panjf2000/ants/v2 v2.12.0\n\tgithub.com/parquet-go/parquet-go v0.29.0\n\tgithub.com/pganalyze/pg_query_go/v6 v6.2.2\n\tgithub.com/pgvector/pgvector-go v0.3.0\n\tgithub.com/qdrant/go-client v1.18.1\n\tgithub.com/redis/go-redis/v9 v9.14.1\n\tgithub.com/robfig/cron/v3 v3.0.1\n\tgithub.com/sashabaranov/go-openai v1.41.2\n\tgithub.com/sirupsen/logrus v1.9.4\n\tgithub.com/slack-go/slack v0.23.1\n\tgithub.com/spf13/viper v1.21.0\n\tgithub.com/stretchr/testify v1.11.1\n\tgithub.com/swaggo/files v1.0.1\n\tgithub.com/swaggo/gin-swagger v1.6.1\n\tgithub.com/swaggo/swag v1.16.6\n\tgithub.com/tencent/vectordatabase-sdk-go v1.8.4\n\tgithub.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.103\n\tgithub.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lkeap v1.3.103\n\tgithub.com/tencentyun/cos-go-sdk-v5 v0.7.73\n\tgithub.com/tiktoken-go/tokenizer v0.7.0\n\tgithub.com/volcengine/ve-tos-golang-sdk/v2 v2.9.4\n\tgithub.com/wailsapp/wails/v2 v2.12.0\n\tgithub.com/weaviate/weaviate v1.37.3\n\tgithub.com/weaviate/weaviate-go-client/v5 v5.7.3\n\tgithub.com/xuri/excelize/v2 v2.10.1\n\tgithub.com/yanyiwu/gojieba v1.4.7\n\tgo.uber.org/dig v1.19.0\n\tgolang.org/x/crypto v0.51.0\n\tgolang.org/x/mod v0.36.0\n\tgolang.org/x/net v0.54.0\n\tgolang.org/x/sync v0.20.0\n\tgolang.org/x/time v0.15.0\n\tgoogle.golang.org/api v0.278.0\n\tgoogle.golang.org/grpc v1.81.0\n\tgoogle.golang.org/protobuf v1.36.11\n\tgopkg.in/natefinch/lumberjack.v2 v2.2.1\n\tgopkg.in/yaml.v3 v3.0.1\n\tgorm.io/driver/postgres v1.6.0\n\tgorm.io/driver/sqlite v1.6.0\n\tgorm.io/gorm v1.31.1\n)\n\nrequire (\n\tcloud.google.com/go/auth v0.20.0 // indirect\n\tcloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect\n\tcloud.google.com/go/compute/metadata v0.9.0 // indirect\n\tfilippo.io/edwards25519 v1.2.0 // indirect\n\tgit.sr.ht/~jackmordaunt/go-toast/v2 v2.0.3 // indirect\n\tgithub.com/JohannesKaufmann/dom v0.2.0 // indirect\n\tgithub.com/KyleBanks/depth v1.2.1 // indirect\n\tgithub.com/andybalholm/brotli v1.2.0 // indirect\n\tgithub.com/andybalholm/cascadia v1.3.3 // indirect\n\tgithub.com/apache/arrow-go/v18 v18.5.1 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/signin v1.0.11 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sso v1.30.17 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sts v1.42.1 // indirect\n\tgithub.com/aws/smithy-go v1.25.1 // indirect\n\tgithub.com/bahlo/generic-list-go v0.2.0 // indirect\n\tgithub.com/beorn7/perks v1.0.1 // indirect\n\tgithub.com/bep/debounce v1.2.1 // indirect\n\tgithub.com/blang/semver/v4 v4.0.0 // indirect\n\tgithub.com/buger/jsonparser v1.1.2 // indirect\n\tgithub.com/bytedance/gopkg v0.1.3 // indirect\n\tgithub.com/bytedance/sonic v1.15.0 // indirect\n\tgithub.com/byteda",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "rag",
      "skill",
      "llm",
      "eval",
      "vector",
      "embedding"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 97
    },
    "strategic_score": 97
  },
  {
    "owner": "BerriAI",
    "name": "litellm",
    "full_name": "BerriAI/litellm",
    "url": "https://github.com/BerriAI/litellm",
    "description": "Python SDK, Proxy Server (AI Gateway) to call 100+ LLM APIs in OpenAI (or native) format, with cost tracking, guardrails, loadbalancing and logging. [Bedrock, Azure, OpenAI, VertexAI, Cohere, Anthropic, Sagemaker, HuggingFace, VLLM, NVIDIA NIM]",
    "language": "Python",
    "total_stars": 51863,
    "forks": 9261,
    "stars_this_period": 830,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "ai-gateway",
        "anthropic",
        "azure-openai",
        "bedrock",
        "gateway",
        "langchain",
        "litellm",
        "llm",
        "llm-gateway",
        "llmops",
        "mcp-gateway",
        "openai",
        "openai-proxy",
        "rust",
        "rust-ai",
        "vertex-ai"
      ],
      "license": "NOASSERTION",
      "open_issues": 3478,
      "created_at": "2023-07-27T00:09:52Z",
      "pushed_at": "2026-06-28T15:14:15Z",
      "homepage": "https://docs.litellm.ai/docs/",
      "default_branch": "litellm_internal_staging",
      "forks": 9261,
      "watchers": 211,
      "archived": false,
      "size_kb": 1186752
    },
    "readme_content": "<h1 align=\"center\">\n        🚅 LiteLLM\n    </h1>\n    <p align=\"center\">\n        <p align=\"center\">LiteLLM AI Gateway\n        </p>\n        <p align=\"center\">Open Source AI Gateway for 100+ LLMs. Self-hosted. Enterprise-ready. Call any LLM in OpenAI format.</p>\n        <p align=\"center\">\n        <a href=\"https://render.com/deploy?repo=https://github.com/BerriAI/litellm\" target=\"_blank\" rel=\"nofollow\"><img src=\"https://render.com/images/deploy-to-render-button.svg\" alt=\"Deploy to Render\" height=\"40\"></a>\n        <a href=\"https://railway.com/deploy/RhvhdC?referralCode=7mRv9K&utm_medium=integration&utm_source=template&utm_campaign=generic\"><img src=\"https://railway.com/button.svg\" alt=\"Deploy on Railway\" height=\"40\"></a>\n        <a href=\"https://console.aws.amazon.com/cloudshell/home\" target=\"_blank\" rel=\"nofollow\"><img src=\"./.github/deploy-on-aws.png\" alt=\"Deploy on AWS\" height=\"40\"></a>\n        <a href=\"https://ssh.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2FBerriAI%2Flitellm&cloudshell_workspace=terraform%2Flitellm%2Fgcp%2Fexamples%2Fdefault&cloudshell_tutorial=TUTORIAL.md&cloudshell_image=gcr.io/ds-artifacts-cloudshell/deploystack_custom_image&shellonly=true\" target=\"_blank\" rel=\"nofollow\"><img src=\"./.github/deploy-on-gcp.png\" alt=\"Deploy on GCP\" height=\"40\"></a>\n        </p>\n    </p>\n<h4 align=\"center\"><a href=\"https://docs.litellm.ai/docs/simple_proxy\" target=\"_blank\">LiteLLM Proxy Server (AI Gateway)</a> | <a href=\"https://docs.litellm.ai/docs/enterprise#hosted-litellm-proxy\" target=\"_blank\"> Hosted Proxy</a> | <a href=\"https://litellm.ai/enterprise\"target=\"_blank\">Enterprise Tier</a> | <a href=\"https://www.litellm.ai/ai-gateway\" target=\"_blank\">Website</a></h4>\n<h4 align=\"center\">\n    <a href=\"https://pypi.org/project/litellm/\" target=\"_blank\">\n        <img src=\"https://img.shields.io/pypi/v/litellm.svg\" alt=\"PyPI Version\">\n    </a>\n    <a href=\"https://github.com/BerriAI/litellm\" target=\"_blank\">\n        <img src=\"https://img.shields.io/github/stars/BerriAI/litellm.svg?style=social\" alt=\"GitHub Stars\">\n    </a>\n    <a href=\"https://www.ycombinator.com/companies/berriai\">\n        <img src=\"https://img.shields.io/badge/Y%20Combinator-W23-orange?style=flat-square\" alt=\"Y Combinator W23\">\n    </a>\n    <a href=\"https://wa.link/huol9n\">\n        <img src=\"https://img.shields.io/static/v1?label=Chat%20on&message=WhatsApp&color=success&logo=WhatsApp&style=flat-square\" alt=\"Whatsapp\">\n    </a>\n    <a href=\"https://discord.gg/wuPM9dRgDw\">\n        <img src=\"https://img.shields.io/static/v1?label=Chat%20on&message=Discord&color=blue&logo=Discord&style=flat-square\" alt=\"Discord\">\n    </a>\n    <a href=\"https://www.litellm.ai/support\">\n        <img src=\"https://img.shields.io/static/v1?label=Chat%20on&message=Slack&color=black&logo=Slack&style=flat-square\" alt=\"Slack\">\n    </a>\n    <a href=\"https://codspeed.io/BerriAI/litellm?utm_source=badge\">\n        <img src=\"https://img.shields.io/endpoint?url=https://codspeed.io/badge.json\" alt=\"CodSpeed\"/>\n    </a>\n</h4>\n\n<img alt=\"LiteLLM AI Gateway\" src=\"https://github.com/user-attachments/assets/c5ee0412-6fb5-4fb6-ab5b-bafae4209ca6\" />\n\n---\n\n## What is LiteLLM\n\nLiteLLM is an open source AI Gateway that gives you a single, unified interface to call 100+ LLM providers — OpenAI, Anthropic, Gemini, Bedrock, Azure, and more — using the OpenAI format.\n\nUse it as a **Python SDK** for direct library integration, or deploy the **AI Gateway (Proxy Server)** as a centralized service for your team or organization.\n\n[**Jump to LiteLLM Proxy (LLM Gateway) Docs**](https://docs.litellm.ai/docs/simple_proxy) <br>\n[**Jump to Supported LLM Providers**](https://docs.litellm.ai/docs/providers)\n\n---\n\n## Why LiteLLM\n\nManaging LLM calls across providers gets complicated fast — different SDKs, auth patterns, request formats, and error types for every model. LiteLLM removes that friction:\n\n- **Unified API** — one interface for 100+ LLMs, no provider-specific SDK juggling\n- **Drop-in OpenAI compatibility** — swap providers without rewriting your code\n- **Production-ready gateway** — virtual keys, spend tracking, guardrails, load balancing, and an admin dashboard out of the box\n- **8ms P95 latency** at 1k RPS ([benchmarks](https://docs.litellm.ai/docs/benchmarks))\n\n### OSS Adopters\n\n<table>\n  <tr>\n    <td><img height=\"60\" alt=\"Stripe\" src=\"https://github.com/user-attachments/assets/f7296d4f-9fbd-460d-9d05-e4df31697c4b\" /></td>\n    <td><img height=\"60\" alt=\"image\" src=\"https://github.com/user-attachments/assets/436fca71-988b-40bb-b5fe-8450c80fdbd0\" /></td>\n    <td><img height=\"60\" alt=\"Google ADK\" src=\"https://github.com/user-attachments/assets/caf270a2-5aee-45c4-8222-41a2070c4f19\" /></td>\n    <td><img height=\"60\" alt=\"Greptile\" src=\"https://github.com/user-attachments/assets/3db0ae72-0843-4005-a56d-bba1dde2193d\" /></td>\n    <td><img height=\"60\" alt=\"OpenHands\" src=\"https://github.com/user-attachments/assets/a6150c4c-149e-4cae-888b-8b92be6e003f\" /></td>\n    <td><h2>Netflix</h2></td>\n    <td><img height=\"60\" alt=\"OpenAI Agents SDK\" src=\"https://github.com/user-attachments/assets/c02f7be0-8c2e-4d27-aea7-7c024bfaebc0\" /></td>\n  </tr>\n</table>\n\n---\n\n## Features\n\n<details open>\n<summary><b>LLMs</b> - Call 100+ LLMs (Python SDK + AI Gateway)</summary>\n\n[**All Supported Endpoints**](https://docs.litellm.ai/docs/supported_endpoints) - `/chat/completions`, `/responses`, `/embeddings`, `/images`, `/audio`, `/batches`, `/rerank`, `/a2a`, `/messages` and more.\n\n### Python SDK\n\n```shell\nuv add litellm\n```\n\n```python\nfrom litellm import completion\nimport os\n\nos.environ[\"OPENAI_API_KEY\"] = \"your-openai-key\"\nos.environ[\"ANTHROPIC_API_KEY\"] = \"your-anthropic-key\"\n\n# OpenAI\nresponse = completion(model=\"openai/gpt-4o\", messages=[{\"role\": \"user\", \"content\": \"Hello!\"}])\n\n# Anthropic  \nresponse = completion(model=\"anthropic/claude-sonnet-4-20250514\", messages=[{\"role\": \"user\", \"content\": \"Hello!\"}])\n```\n\n### AI Gateway (Proxy Server)\n\n[**Getting Started - E2E Tutorial**](https://docs.litellm.ai/docs/proxy/docker_quick_start) - Setup virtual keys, make your first request\n\n```shell\nuv tool install 'litellm[proxy]'\nlitellm --model gpt-4o\n```\n\n```python\nimport openai\n\nclient = openai.OpenAI(api_key=\"anything\", base_url=\"http://0.0.0.0:4000\")\nresponse = client.chat.completions.create(\n    model=\"gpt-4o\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello!\"}]\n)\n```\n\n[**Docs: LLM Providers**](https://docs.litellm.ai/docs/providers)\n\n</details>\n\n<details>\n<summary><b>Agents</b> - Invoke A2A Agents (Python SDK + AI Gateway)</summary>\n\n[**Supported Providers**](https://docs.litellm.ai/docs/a2a#add-a2a-agents) - LangGraph, Vertex AI Agent Engine, Azure AI Foundry, Bedrock AgentCore, Pydantic AI\n\n### Python SDK - A2A Protocol\n\n```python\nfrom litellm.a2a_protocol import A2AClient\nfrom a2a.types import SendMessageRequest, MessageSendParams\nfrom uuid import uuid4\n\nclient = A2AClient(base_url=\"http://localhost:10001\")\n\nrequest = SendMessageRequest(\n    id=str(uuid4()),\n    params=MessageSendParams(\n        message={\n            \"role\": \"user\",\n            \"parts\": [{\"kind\": \"text\", \"text\": \"Hello!\"}],\n            \"messageId\": uuid4().hex,\n        }\n    )\n)\nresponse = await client.send_message(request)\n```\n\n### AI Gateway (Proxy Server)\n\n**Step 1.** [Add your Agent to the AI Gateway](https://docs.litellm.ai/docs/a2a#adding-your-agent)\n\n**Step 2.** Call Agent via A2A SDK\n\n```python\nfrom a2a.client import A2ACardResolver, A2AClient\nfrom a2a.types import MessageSendParams, SendMessageRequest\nfrom uuid import uuid4\nimport httpx\n\nbase_url = \"http://localhost:4000/a2a/my-agent\"  # LiteLLM proxy + agent name\nheaders = {\"Authorization\": \"Bearer sk-1234\"}    # LiteLLM Virtual Key\n\nasync with httpx.AsyncClient(headers=headers) as httpx_client:\n    resolver = A2ACardResolver(httpx_client=httpx_client, base_url=base_url)\n    agent_card = await resolver.get_agent_card()\n    client = A2AClient(httpx_client=httpx_client, agent_card=agent_card)\n\n    request = SendMessageRequest(\n        id=str(uuid4()),\n        params=MessageSendParams(\n            message={\n                \"role\": \"user\",\n                \"parts\": [{\"kind\": \"text\", \"text\": \"Hello!\"}],\n                \"messageId\": uuid4().hex,\n            }\n        )\n    )\n    response = await client.send_message(request)\n```\n\n[**Docs: A2A Agent Gateway**](https://docs.litellm.ai/docs/a2a)\n\n</details>\n\n<details>\n<summary><b>MCP Tools</b> - Connect MCP servers to any LLM (Python SDK + AI Gateway)</summary>\n\n### Python SDK - MCP Bridge\n\n```python\nfrom mcp import ClientSession, StdioServerParameters\nfrom mcp.client.stdio import stdio_client\nfrom litellm import experimental_mcp_client\nimport litellm\n\nserver_params = StdioServerParameters(command=\"python\", args=[\"mcp_server.py\"])\n\nasync with stdio_client(server_params) as (read, write):\n    async with ClientSession(read, write) as session:\n        await session.initialize()\n\n        # Load MCP tools in OpenAI format\n        tools = await experimental_mcp_client.load_mcp_tools(session=session, format=\"openai\")\n\n        # Use with any LiteLLM model\n        response = await litellm.acompletion(\n            model=\"gpt-4o\",\n            messages=[{\"role\": \"user\", \"content\": \"What's 3 + 5?\"}],\n            tools=tools\n        )\n```\n\n### AI Gateway - MCP Gateway\n\n**Step 1.** [Add your MCP Server to the AI Gateway](https://docs.litellm.ai/docs/mcp#adding-your-mcp)\n\n**Step 2.** Call MCP tools via `/chat/completions`\n\n```bash\ncurl -X POST 'http://0.0.0.0:4000/v1/chat/completions' \\\n  -H 'Authorization: Bearer sk-1234' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"model\": \"gpt-4o\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Summarize the latest open PR\"}],\n    \"tools\": [{\n      \"type\": \"mcp\",\n      \"server_url\": \"litellm_proxy/mcp/github\",\n      \"server_label\": \"github_mcp\",\n      \"require_approval\": \"never\"\n    }]\n  }'\n```\n\n### Use with Cursor IDE\n\n```json\n{\n  \"mcpServers\": {\n    \"LiteLLM\": {\n      \"url\": \"http://localhost:4000/mcp/\",\n      \"headers\": {\n        \"x-litellm-api-key\": \"Bearer sk-1234\"\n      }\n    }\n  }\n}\n```\n\n[**Docs: MCP Gateway**](https://docs.litellm.ai/docs/mcp)\n\n</details>\n\n### Supported Providers ([Website Supported Models](https://models.litellm.ai/) | [Docs](https://docs.litellm.ai/docs/providers))\n\n| Provider                                                                            | `/chat/completions` | `/messages` | `/responses` | `/embeddings` | `/image/generations` | `/audio/transcriptions` | `/audio/speech` | `/moderations` | `/batches` | `/rerank` |\n|-------------------------------------------------------------------------------------|---------------------|-------------|--------------|---------------|----------------------|-------------------------|-----------------|----------------|-----------|-----------|\n| [Abliteration (`abliteration`)](https://docs.litellm.ai/docs/providers/abliteration) | ✅ |  |  |  |  |  |  |  |  |  |\n| [AI/ML API (`aiml`)](https://docs.litellm.ai/docs/providers/aiml) | ✅ | ✅ | ✅ | ✅ | ✅ |  |  |  |  |  |\n| [AI21 (`ai21`)](https://docs.litellm.ai/docs/providers/ai21) | ✅ | ✅ | ✅ |  |  |  |  |  |  |  |\n| [AI21 Chat (`ai21_chat`)](https://docs.litellm.ai/docs/providers/ai21) | ✅ | ✅ | ✅ |  |  |  |  |  |  |  |\n| [Aleph Alpha](https://docs.litellm.ai/docs/providers/aleph_alpha) | ✅ | ✅ | ✅ |  |  |  |  |  |  |  |\n| [Amazon Nova](https://docs.litellm.ai/docs/providers/amazon_nova) | ✅ | ✅ | ✅ |  |  |  |  |  |  |  |\n| [Anthropic (`anthropic`)](https://docs.litellm.ai/docs/providers/anthropic) | ✅ | ✅ | ✅ |  |  |  |  |  | ✅ |  |\n| [Anthropic Text (`anthropic_text`)](https://docs.litellm.ai/docs/providers/anthropic) | ✅ | ✅ | ✅ |  |  |  |  |  | ✅ |  |\n| [Anyscale](https://docs.litellm.ai/docs/providers/anyscale) | ✅ | ✅ | ✅ |  |  |  |  |  |  |  |\n| [AssemblyAI (`assemblyai`)](https://docs.litellm.ai/docs/pass_through/assembly_ai) | ✅ | ✅ | ✅ |  |  | ✅ |  |  |  |  |\n| [Auto Router (`auto_router`)](https://docs.litellm.ai/docs/proxy/auto_routing) | ",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"litellm\"\nversion = \"1.91.0\"\ndescription = \"Library to easily interface with LLM API providers\"\nreadme = \"README.md\"\nrequires-python = \">=3.10, <3.14\"\nlicense = \"MIT\"\nlicense-files = [\"LICENSE\"]\nauthors = [\n    { name = \"BerriAI\" },\n]\ndependencies = [\n    # Ranges (not exact pins) so SDK consumers can coexist with their other\n    # deps. Reproducibility for our Docker/CI comes from `uv.lock`.\n    # When changing a floor, verify it installs + imports on every supported\n    # Python with: `uv pip install --resolution=lowest-direct .`\n    \"fastuuid>=0.14.0,<1.0\",\n    \"httpx>=0.28.0,<1.0\",\n    \"openai>=2.20.0,<3.0.0\",\n    \"python-dotenv>=1.0.0,<2.0\",\n    \"tiktoken>=0.8.0,<1.0\",\n    \"importlib-metadata>=8.0.0,<9.0\",\n    \"tokenizers>=0.21.0,<1.0\",\n    \"click>=8.0.0,<9.0\",\n    \"jinja2>=3.1.6,<4.0\",\n    \"aiohttp>=3.10,<4.0\",\n    \"pydantic>=2.10.0,<3.0.0\",\n    \"jsonschema>=4.0.0,<5.0\",\n]\n\n[project.urls]\nHomepage = \"https://litellm.ai\"\nRepository = \"https://github.com/BerriAI/litellm\"\nDocumentation = \"https://docs.litellm.ai\"\n\n# Optional extras use compatible ranges (like the core SDK above) so downstream\n# consumers can coexist with other packages and pick up security patches without\n# forking. Reproducibility for our Docker/CI comes from `uv.lock` (images install\n# via `uv sync --frozen`). A few deps stay exact-pinned: litellm's own\n# sub-packages and the opentelemetry trio move in lockstep, and grpcio is\n# supply-chain-pinned to a vetted, aged release.\n[project.optional-dependencies]\nproxy = [\n    \"gunicorn>=23.0.0,<24.0\",\n    \"uvicorn>=0.33.0,<1.0\",\n    \"granian>=2.7.4,<3.0\",\n    \"uvloop>=0.21.0,<1.0; sys_platform != 'win32'\",\n    \"fastapi>=0.136.3,<1.0\",\n    \"starlette>=1.0.1,<2.0\",\n    \"backoff>=2.2.1,<3.0\",\n    \"pyyaml>=6.0.3,<7.0\",\n    \"rq>=2.7.0,<3.0\",\n    \"orjson>=3.11.6,<4.0\",\n    \"apscheduler>=3.11.2,<4.0\",\n    \"fastapi-sso>=0.19.0,<1.0\",\n    \"PyJWT>=2.13.0,<3.0\",\n    \"python-multipart>=0.0.27,<1.0\",\n    \"cryptography>=48.0.1,<49.0\",\n    \"pynacl>=1.6.2,<2.0\",\n    \"websockets>=15.0.1,<16.0\",\n    \"boto3>=1.43.1,<2.0\",\n    \"azure-identity>=1.25.2,<2.0\",\n    \"azure-storage-blob>=12.28.0,<13.0\",\n    \"mcp>=1.26.0,<2.0\",\n    \"litellm-proxy-extras==0.4.74\",\n    \"litellm-enterprise==0.1.44\",\n    \"RestrictedPython>=8.1,<9.0\",\n    \"rich>=13.9.4,<14.0\",\n    \"polars>=1.38.1,<2.0\",\n    \"soundfile>=0.12.1,<1.0\",\n    \"pyroscope-io>=0.8.16,<1.0; sys_platform != 'win32'\",\n    \"pydantic-settings>=2.14.1,<3.0\",\n    \"expression>=5.6.0,<6.0\",\n]\n# Thin client install for the `lite` CLI on developer laptops. The CLI's heavy\n# imports (fastapi, cryptography, ...) are all guarded, so it runs on the base\n# SDK plus just these three; none of the server runtime in `proxy` is pulled in.\ncli = [\n    \"rich>=13.9.4,<14.0\",\n    \"pyyaml>=6.0.3,<7.0\",\n    \"requests>=2.32.0,<3.0\",\n]\nextra_proxy = [\n    \"prisma>=0.11.0,<1.0\",\n    \"azure-identity>=1.25.2,<2.0\",\n    \"azure-keyvault-secrets>=4.10.0,<5.0\",\n    # Not in PyPI proxy extra.\n    \"google-cloud-kms>=2.24.2,<3.0\",\n    \"google-cloud-iam>=2.19.1,<3.0\",\n    # Not in PyPI proxy extra.\n    \"resend>=2.23.0,<3.0\",\n    \"redisvl>=0.4.1,<1.0; python_version < '3.14'\",\n    \"a2a-sdk>=0.3.24,<1.0\",\n]\nutils = [\n    # Not in Docker or PyPI proxy extra.\n    \"numpydoc>=1.8.0,<2.0\",\n]\ncaching = [\"diskcache>=5.6.3,<6.0\"]\nsemantic-router = [\n    \"semantic-router>=0.1.15,<1.0; python_version < '3.14'\",\n    \"aurelio-sdk>=0.0.19,<1.0; python_version < '3.14'\",\n]\nmlflow = [\"mlflow>=3.11.1,<4.0\"]\ngrpc = [\n    # Newest non-yanked release older than the 30-day cutoff.\n    \"grpcio==1.78.0\",\n]\nstt-nvidia-riva = [\n    # NVIDIA Riva STT provider (gRPC). These are imported lazily inside the\n    # provider handler so litellm core remains usable without them.\n    \"nvidia-riva-client>=2.15.0\",\n    \"soundfile>=0.12.1\",\n    \"audioread>=3.0.1\",\n    \"numpy>=1.26.0\",\n]\ngoogle = [\"google-cloud-aiplatform>=1.133.0,<2.0\"]\nproxy-runtime = [\n    # Historically bundled in the proxy Docker images via requirements.txt.\n    # Keep these in a dedicated extra so uv-based images preserve the same\n    # feature surface without forcing the base SDK install to grow.\n    \"google-cloud-aiplatform>=1.133.0,<2.0\",\n    \"google-genai>=1.37.0,<2.0\",\n    \"anthropic[vertex]>=0.84.0,<1.0\",\n    \"grpcio==1.78.0\",\n    \"prometheus-client>=0.20.0,<1.0\",\n    \"langfuse>=2.59.7,<3.0\",\n    \"opentelemetry-api==1.28.0\",\n    \"opentelemetry-sdk==1.28.0\",\n    \"opentelemetry-exporter-otlp==1.28.0\",\n    \"opentelemetry-instrumentation-fastapi==0.49b0\",\n    \"ddtrace>=2.19.0,<3.0\",\n    \"sentry-sdk>=2.21.0,<3.0\",\n    \"mangum>=0.17.0,<1.0\",\n    \"azure-ai-contentsafety>=1.0.0,<2.0\",\n    \"azure-storage-file-datalake>=12.20.0,<13.0\",\n    \"pypdf>=6.12.0,<7.0; python_version < '3.14'\",\n    \"llm-sandbox>=0.3.39,<1.0\",\n    \"detect-secrets>=1.5.0,<2.0\",\n]\n\n[project.scripts]\nlitellm = \"litellm:run_server\"\nlite = \"litellm.proxy.client.cli:cli\"\nlitellm-proxy = \"litellm.proxy.client.cli:cli\"\n\n[dependency-groups]\ndev = [\n    \"diff-cover==9.7.2\",\n    \"flake8==7.3.0\",\n ",
    "strategic_keywords": [
      "mcp",
      "workspace",
      "llm"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 90
    },
    "strategic_score": 90
  },
  {
    "owner": "vercel-labs",
    "name": "agent-browser",
    "full_name": "vercel-labs/agent-browser",
    "url": "https://github.com/vercel-labs/agent-browser",
    "description": "Browser automation CLI for AI agents",
    "language": "Rust",
    "total_stars": 37422,
    "forks": 2401,
    "stars_this_period": 815,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 545,
      "created_at": "2026-01-11T05:38:15Z",
      "pushed_at": "2026-06-26T17:22:26Z",
      "homepage": "https://agent-browser.dev",
      "default_branch": "main",
      "forks": 2401,
      "watchers": 98,
      "archived": false,
      "size_kb": 18243
    },
    "readme_content": "# agent-browser\n\nBrowser automation CLI for AI agents. Fast native Rust CLI.\n\n[![skills.sh](https://skills.sh/b/vercel-labs/agent-browser)](https://skills.sh/vercel-labs/agent-browser)\n\n## Installation\n\n### Global Installation (recommended)\n\nInstalls the native Rust binary:\n\n```bash\nnpm install -g agent-browser\nagent-browser install  # Download Chrome from Chrome for Testing (first time only)\n```\n\n### Project Installation (local dependency)\n\nFor projects that want to pin the version in `package.json`:\n\n```bash\nnpm install agent-browser\nagent-browser install\n```\n\nThen use via `package.json` scripts or by invoking `agent-browser` directly.\n\n### Homebrew (macOS)\n\n```bash\nbrew install agent-browser\nagent-browser install  # Download Chrome from Chrome for Testing (first time only)\n```\n\n### Cargo (Rust)\n\n```bash\ncargo install agent-browser\nagent-browser install  # Download Chrome from Chrome for Testing (first time only)\n```\n\n### From Source\n\nRequires Node.js 24+, pnpm 11+, and Rust.\n\n```bash\ngit clone https://github.com/vercel-labs/agent-browser\ncd agent-browser\npnpm install\npnpm build\npnpm build:native   # Requires Rust (https://rustup.rs)\npnpm link --global  # Makes agent-browser available globally\nagent-browser install\n```\n\n### Linux Dependencies\n\nOn Linux, install system dependencies:\n\n```bash\nagent-browser install --with-deps\n```\n\nThis exits nonzero if the package manager cannot install every required browser library.\n\n### Updating\n\nUpgrade to the latest version:\n\n```bash\nagent-browser upgrade\n```\n\nDetects your installation method (npm, Homebrew, or Cargo) and runs the appropriate update command automatically.\n\n### Requirements\n\n- **Chrome** - Run `agent-browser install` to download Chrome from [Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing/) (Google's official automation channel). Existing Chrome, Brave, Playwright, and Puppeteer installations are detected automatically. No Playwright or Node.js required for the daemon.\n- **Node.js 24+ and pnpm 11+** - Only needed when building from source.\n- **Rust** - Only needed when building from source (see From Source above).\n\n## Quick Start\n\n```bash\nagent-browser open example.com\nagent-browser snapshot                    # Get accessibility tree with refs\nagent-browser click @e2                   # Click by ref from snapshot\nagent-browser fill @e3 \"test@example.com\" # Fill by ref\nagent-browser get text @e1                # Get text by ref\nagent-browser screenshot page.png\nagent-browser close\n```\n\nClicks fail early when another element covers the target's click point, for example a consent banner or modal. Dismiss or interact with the reported covering element, then take a fresh snapshot before retrying the original ref.\n\nHeadless Chromium screenshots hide native scrollbars for consistent image output. Pass `--hide-scrollbars false` when launching to keep native scrollbars visible.\n\n### Traditional Selectors (also supported)\n\n```bash\nagent-browser click \"#submit\"\nagent-browser fill \"#email\" \"test@example.com\"\nagent-browser find role button click --name \"Submit\"\n```\n\n## Commands\n\n### Core Commands\n\n```bash\nagent-browser open                    # Launch browser (no navigation); stays on about:blank\nagent-browser open <url>              # Launch + navigate to URL (aliases: goto, navigate)\nagent-browser read [url]              # Fetch agent-readable text, or read rendered active-tab DOM\nagent-browser click <sel>             # Click element (--new-tab to open in new tab)\nagent-browser dblclick <sel>          # Double-click element\nagent-browser focus <sel>             # Focus element\nagent-browser type <sel> <text>       # Type into element\nagent-browser fill <sel> <text>       # Clear and fill\nagent-browser press <key>             # Press key (Enter, Tab, Control+a) (alias: key)\nagent-browser keyboard type <text>    # Type with real keystrokes (no selector, current focus)\nagent-browser keyboard inserttext <text>  # Insert text without key events (no selector)\nagent-browser keydown <key>           # Hold key down\nagent-browser keyup <key>             # Release key\nagent-browser hover <sel>             # Hover element\nagent-browser select <sel> <val>      # Select dropdown option\nagent-browser check <sel>             # Check checkbox\nagent-browser uncheck <sel>           # Uncheck checkbox\nagent-browser scroll <dir> [px]       # Scroll (up/down/left/right, --selector <sel>)\nagent-browser scrollintoview <sel>    # Scroll element into view (alias: scrollinto)\nagent-browser drag <src> <tgt>        # Drag and drop\nagent-browser upload <sel> <files>    # Upload files\nagent-browser screenshot [path]       # Take screenshot (--full for full page, saves to a temporary directory if no path)\nagent-browser screenshot --annotate   # Annotated screenshot with numbered element labels\nagent-browser screenshot --screenshot-dir ./shots    # Save to custom directory\nagent-browser screenshot --screenshot-format jpeg --screenshot-quality 80\nagent-browser pdf <path>              # Save as PDF\nagent-browser snapshot                # Accessibility tree with refs (best for AI)\nagent-browser eval <js>               # Run JavaScript (-b for base64, --stdin for piped input)\nagent-browser connect <port>          # Connect to browser via CDP\nagent-browser stream enable [--port <port>]  # Start runtime WebSocket streaming\nagent-browser stream status           # Show runtime streaming state and bound port\nagent-browser stream disable          # Stop runtime WebSocket streaming\nagent-browser close                   # Close browser (aliases: quit, exit)\nagent-browser close --all             # Close all active sessions\nagent-browser chat \"<instruction>\"    # AI chat: natural language browser control (single-shot)\nagent-browser chat                    # AI chat: interactive REPL mode\n```\n\n### Get Info\n\n```bash\nagent-browser get text <sel>          # Get text content\nagent-browser get html <sel>          # Get innerHTML\nagent-browser get value <sel>         # Get input value\nagent-browser get attr <sel> <attr>   # Get attribute\nagent-browser get title               # Get page title\nagent-browser get url                 # Get current URL\nagent-browser get cdp-url             # Get CDP WebSocket URL (for DevTools, debugging)\nagent-browser get count <sel>         # Count matching elements\nagent-browser get box <sel>           # Get bounding box\nagent-browser get styles <sel>        # Get computed styles\n```\n\n### Read Agent-Friendly Text\n\n```bash\nagent-browser read\nagent-browser read https://example.com/article\nagent-browser read https://example.com/article --filter overview\nagent-browser read https://example.com/article --outline\nagent-browser read https://docs.example.com --llms index --filter auth\nagent-browser read https://docs.example.com --llms full --filter auth\nagent-browser read example.com/article --require-md\nagent-browser read https://example.com/article --json\n```\n\n`read` fetches a URL without launching Chrome. Omit the URL to read the rendered DOM of the active tab in the current browser session, including browser auth state and client-side updates. Explicit URL reads send `Accept: text/markdown` by default, try the same URL with `.md` appended when the first response is not markdown, walk ancestor paths toward `/` to find the nearest `llms.txt` for a matching docs link, print markdown or plain text when available, and fall back to readable text extracted from HTML. `--llms` and `--require-md` with no URL use the active tab URL because they depend on HTTP resources. `read` does not read `llms-full.txt` unless you ask for it.\n\nOptions: `--raw` prints the response body without HTML extraction, `--require-md` fails unless the server returns `Content-Type: text/markdown`, `--outline` prints a compact heading outline for one page, `--llms index` prints a compact nearest-ancestor `llms.txt` link list, `--llms full` reads the nearest-ancestor `llms-full.txt`, `--filter <text>` narrows page sections, llms links/sections, or outline headings, and `--timeout <ms>` changes the request timeout. Global safeguards such as `--allowed-domains`, `--content-boundaries`, and `--max-output` also apply to read fetches and output.\n\n### Check State\n\n```bash\nagent-browser is visible <sel>        # Check if visible\nagent-browser is enabled <sel>        # Check if enabled\nagent-browser is checked <sel>        # Check if checked\n```\n\n### Find Elements (Semantic Locators)\n\n```bash\nagent-browser find role <role> <action> [value]       # By ARIA role\nagent-browser find text <text> <action>               # By text content\nagent-browser find label <label> <action> [value]     # By label\nagent-browser find placeholder <ph> <action> [value]  # By placeholder\nagent-browser find alt <text> <action>                # By alt text\nagent-browser find title <text> <action>              # By title attr\nagent-browser find testid <id> <action> [value]       # By data-testid\nagent-browser find first <sel> <action> [value]       # First match\nagent-browser find last <sel> <action> [value]        # Last match\nagent-browser find nth <n> <sel> <action> [value]     # Nth match\n```\n\n**Actions:** `click`, `fill`, `type`, `hover`, `focus`, `check`, `uncheck`, `text`\n\n**Options:** `--name <name>` (filter role by accessible name), `--exact` (require exact text match)\n\n**Examples:**\n\n```bash\nagent-browser find role button click --name \"Submit\"\nagent-browser find text \"Sign In\" click\nagent-browser find label \"Email\" fill \"test@test.com\"\nagent-browser find first \".item\" click\nagent-browser find nth 2 \"a\" text\n```\n\n### Wait\n\n```bash\nagent-browser wait <selector>         # Wait for element to be visible\nagent-browser wait <ms>               # Wait for time (milliseconds)\nagent-browser wait --text \"Welcome\"   # Wait for text to appear (substring match)\nagent-browser wait --url \"**/dash\"    # Wait for URL pattern\nagent-browser wait --load networkidle # Wait for load state\nagent-browser wait --fn \"window.ready === true\"  # Wait for JS condition\n\n# Wait for text/element to disappear\nagent-browser wait --fn \"!document.body.innerText.includes('Loading...')\"\nagent-browser wait \"#spinner\" --state hidden\n```\n\n**Load states:** `load`, `domcontentloaded`, `networkidle`\n\n### Batch Execution\n\nExecute multiple commands in a single invocation. Commands can be passed as quoted arguments or piped as JSON via stdin. This avoids per-command process startup overhead when running multi-step workflows.\n\n```bash\n# Argument mode: each quoted argument is a full command\nagent-browser batch \"open https://example.com\" \"snapshot -i\" \"screenshot\"\n\n# With --bail to stop on first error\nagent-browser batch --bail \"open https://example.com\" \"click @e1\" \"screenshot\"\n\n# Stdin mode: pipe commands as JSON\necho '[\n  [\"open\", \"https://example.com\"],\n  [\"snapshot\", \"-i\"],\n  [\"click\", \"@e1\"],\n  [\"screenshot\", \"result.png\"]\n]' | agent-browser batch --json\n```\n\n### Clipboard\n\n```bash\nagent-browser clipboard read                      # Read text from clipboard\nagent-browser clipboard write \"Hello, World!\"     # Write text to clipboard\nagent-browser clipboard copy                      # Copy current selection (Ctrl+C)\nagent-browser clipboard paste                     # Paste from clipboard (Ctrl+V)\n```\n\n### Mouse Control\n\n```bash\nagent-browser mouse move <x> <y>      # Move mouse\nagent-browser mouse down [button]     # Press button (left/right/middle)\nagent-browser mouse up [button]       # Release button\nagent-browser mouse wheel <dy> [dx]   # Scroll wheel\n```\n\n### Browser Settings\n\n```bash\nagent-browser set viewport <w> <h> [scale]  # Set viewport size (scale for retina, e.g. 2)\nagent-browser set device <name>       # Emulate device (\"iPhone 14\")\nagent-browser set geo <lat> <lng>     # Set geolocation\nagent-browser set offline [on|off]    # Toggle offline mode\nagent-browser set headers <json>      # Extra HTTP headers\nagent-browser set credentials <u> <p> # HTTP basic auth\nagent-browser set media [dark|light]  # Emulate color scheme\n```\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "automation"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 8,
      "total": 88
    },
    "strategic_score": 88
  },
  {
    "owner": "cjpais",
    "name": "Handy",
    "full_name": "cjpais/Handy",
    "url": "https://github.com/cjpais/Handy",
    "description": "A free, open source, and extensible speech-to-text application that works completely offline.",
    "language": "Rust",
    "total_stars": 25146,
    "forks": 2137,
    "stars_this_period": 760,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "accessibility",
        "cross-platform",
        "speech-to-text",
        "tauri-v2"
      ],
      "license": "MIT",
      "open_issues": 179,
      "created_at": "2025-02-13T02:42:29Z",
      "pushed_at": "2026-06-28T05:16:47Z",
      "homepage": "https://handy.computer",
      "default_branch": "main",
      "forks": 2137,
      "watchers": 76,
      "archived": false,
      "size_kb": 10041
    },
    "readme_content": "# Handy\n\n[![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?style=for-the-badge&logo=discord&logoColor=white)](https://discord.com/invite/WVBeWsNXK4)\n\n**A free, open source, and extensible speech-to-text application that works completely offline.**\n\nHandy is a cross-platform desktop application that provides simple, privacy-focused speech transcription. Press a shortcut, speak, and have your words appear in any text field. This happens on your own computer without sending any information to the cloud.\n\n## Why Handy?\n\nHandy was created to fill the gap for a truly open source, extensible speech-to-text tool. As stated on [handy.computer](https://handy.computer):\n\n- **Free**: Accessibility tooling belongs in everyone's hands, not behind a paywall\n- **Open Source**: Together we can build further. Extend Handy for yourself and contribute to something bigger\n- **Private**: Your voice stays on your computer. Get transcriptions without sending audio to the cloud\n- **Simple**: One tool, one job. Transcribe what you say and put it into a text box\n\nHandy isn't trying to be the best speech-to-text app—it's trying to be the most forkable one.\n\n## How It Works\n\n1. **Press** a configurable keyboard shortcut to start/stop recording (or use push-to-talk mode)\n2. **Speak** your words while the shortcut is active\n3. **Release** and Handy processes your speech using Whisper\n4. **Get** your transcribed text pasted directly into whatever app you're using\n\nThe process is entirely local:\n\n- Silence is filtered using VAD (Voice Activity Detection) with Silero\n- Transcription uses your choice of models:\n  - **Whisper models** (Small/Medium/Turbo/Large) with GPU acceleration when available\n  - **Parakeet V3** - CPU-optimized model with excellent performance and automatic language detection\n- Works on Windows, macOS, and Linux\n\n## Quick Start\n\n### Installation\n\n1. Download the latest release from the [releases page](https://github.com/cjpais/Handy/releases) or the [website](https://handy.computer)\n   - **macOS**: Also available via [Homebrew cask](https://formulae.brew.sh/cask/handy): `brew install --cask handy`\n   - **Windows**: Also available via [winget](https://github.com/microsoft/winget-pkgs): `winget install cjpais.Handy` \\\n     **Note:** The Homebrew cask and winget package are not maintained by the Handy developers.\n2. Install the application\n3. Launch Handy and grant necessary system permissions (microphone, accessibility)\n4. Configure your preferred keyboard shortcuts in Settings\n5. Start transcribing!\n\n### Development Setup\n\nFor detailed build instructions including platform-specific requirements, see [BUILD.md](BUILD.md).\n\n## Integrations\n\n<a href=\"https://www.raycast.com/mattiacolombomc/handy\" title=\"Install Handy Raycast Extension\"><img src=\"https://www.raycast.com/mattiacolombomc/handy/install_button@2x.png?v=1.1\" height=\"64\" style=\"height: 64px;\" alt=\"Install handy Raycast Extension\" /></a>\n\nControl Handy from [Raycast](https://www.raycast.com) — start/stop recording, browse transcript history, manage dictionary, switch models and languages.\n\n[Source](https://github.com/mattiacolombomc/raycast-handy) · by [@mattiacolombomc](https://github.com/mattiacolombomc)\n\n## Architecture\n\nHandy is built as a Tauri application combining:\n\n- **Frontend**: React + TypeScript with Tailwind CSS for the settings UI\n- **Backend**: Rust for system integration, audio processing, and ML inference\n- **Core Libraries**:\n  - `whisper-rs`: Local speech recognition with Whisper models\n  - `transcribe-rs`: CPU-optimized speech recognition with Parakeet models\n  - `cpal`: Cross-platform audio I/O\n  - `vad-rs`: Voice Activity Detection\n  - `rdev`: Global keyboard shortcuts and system events\n  - `rubato`: Audio resampling\n\n### Debug Mode\n\nHandy includes an advanced debug mode for development and troubleshooting. Access it by pressing:\n\n- **macOS**: `Cmd+Shift+D`\n- **Windows/Linux**: `Ctrl+Shift+D`\n\n### CLI Parameters\n\nHandy supports command-line flags for controlling a running instance and customizing startup behavior. These work on all platforms (macOS, Windows, Linux).\n\n**Remote control flags** (sent to an already-running instance via the single-instance plugin):\n\n```bash\nhandy --toggle-transcription    # Toggle recording on/off\nhandy --toggle-post-process     # Toggle recording with post-processing on/off\nhandy --cancel                  # Cancel the current operation\n```\n\n**Startup flags:**\n\n```bash\nhandy --start-hidden            # Start without showing the main window\nhandy --no-tray                 # Start without the system tray icon\nhandy --debug                   # Enable debug mode with verbose logging\nhandy --help                    # Show all available flags\n```\n\nFlags can be combined for autostart scenarios:\n\n```bash\nhandy --start-hidden --no-tray\n```\n\n> **macOS tip:** When Handy is installed as an app bundle, invoke the binary directly:\n>\n> ```bash\n> /Applications/Handy.app/Contents/MacOS/Handy --toggle-transcription\n> ```\n\n## Known Issues & Current Limitations\n\nThis project is actively being developed and has some [known issues](https://github.com/cjpais/Handy/issues). We believe in transparency about the current state:\n\n### Major Issues (Help Wanted)\n\n**Whisper Model Crashes:**\n\n- Whisper models crash on certain system configurations (Windows and Linux)\n- Does not affect all systems - issue is configuration-dependent\n  - If you experience crashes and are a developer, please help to fix and provide debug logs!\n\n**Wayland Support (Linux):**\n\n- Limited support for Wayland display server\n- Requires [`wtype`](https://github.com/atx/wtype) or [`dotool`](https://sr.ht/~geb/dotool/) for text input to work correctly (see [Linux Notes](#linux-notes) below for installation)\n\n### Linux Notes\n\n**Text Input Tools:**\n\nFor reliable text input on Linux, install the appropriate tool for your display server:\n\n| Display Server | Recommended Tool | Install Command                                    |\n| -------------- | ---------------- | -------------------------------------------------- |\n| X11            | `xdotool`        | `sudo apt install xdotool`                         |\n| Wayland        | `wtype`          | `sudo apt install wtype`                           |\n| Both           | `dotool`         | `sudo apt install dotool` (requires `input` group) |\n\n- **X11**: Install `xdotool` for both direct typing and clipboard paste shortcuts\n- **Wayland**: Install `wtype` (preferred) or `dotool` for text input to work correctly\n- **dotool setup**: Requires adding your user to the `input` group: `sudo usermod -aG input $USER` (then log out and back in)\n\nWithout these tools, Handy falls back to enigo which may have limited compatibility, especially on Wayland.\n\n**Other Notes:**\n\n- **Runtime library dependency (`libgtk-layer-shell.so.0`)**:\n  - Handy links `gtk-layer-shell` on Linux. If startup fails with `error while loading shared libraries: libgtk-layer-shell.so.0`, install the runtime package for your distro:\n\n    | Distro        | Package to install    | Example command                        |\n    | ------------- | --------------------- | -------------------------------------- |\n    | Ubuntu/Debian | `libgtk-layer-shell0` | `sudo apt install libgtk-layer-shell0` |\n    | Fedora/RHEL   | `gtk-layer-shell`     | `sudo dnf install gtk-layer-shell`     |\n    | Arch Linux    | `gtk-layer-shell`     | `sudo pacman -S gtk-layer-shell`       |\n\n  - For building from source on Ubuntu/Debian, you may also need `libgtk-layer-shell-dev`.\n\n- The recording overlay is disabled by default on Linux (`Overlay Position: None`) because certain compositors treat it as the active window. When the overlay is visible it can steal focus, which prevents Handy from pasting back into the application that triggered transcription. If you enable the overlay anyway, be aware that clipboard-based pasting might fail or end up in the wrong window.\n- If you are having trouble with the app, running with the environment variable `WEBKIT_DISABLE_DMABUF_RENDERER=1` may help\n- If Handy fails to start reliably on Linux, see [Troubleshooting → Linux Startup Crashes or Instability](#linux-startup-crashes-or-instability).\n- **Global keyboard shortcuts (Wayland):** On Wayland, system-level shortcuts must be configured through your desktop environment or window manager. Use the [CLI flags](#cli-parameters) as the command for your custom shortcut.\n\n  **GNOME:**\n  1. Open **Settings > Keyboard > Keyboard Shortcuts > Custom Shortcuts**\n  2. Click the **+** button to add a new shortcut\n  3. Set the **Name** to `Toggle Handy Transcription`\n  4. Set the **Command** to `handy --toggle-transcription`\n  5. Click **Set Shortcut** and press your desired key combination (e.g., `Super+O`)\n\n  **KDE Plasma:**\n  1. Open **System Settings > Shortcuts > Custom Shortcuts**\n  2. Click **Edit > New > Global Shortcut > Command/URL**\n  3. Name it `Toggle Handy Transcription`\n  4. In the **Trigger** tab, set your desired key combination\n  5. In the **Action** tab, set the command to `handy --toggle-transcription`\n\n  **Sway / i3:**\n\n  Add to your config file (`~/.config/sway/config` or `~/.config/i3/config`):\n\n  ```ini\n  bindsym $mod+o exec handy --toggle-transcription\n  ```\n\n  **Hyprland:**\n\n  Add to your config file (`~/.config/hypr/hyprland.conf`):\n\n  ```ini\n  bind = $mainMod, O, exec, handy --toggle-transcription\n  ```\n\n- You can also manage global shortcuts outside of Handy via Unix signals, which lets Wayland window managers or other hotkey daemons keep ownership of keybindings:\n\n  | Signal    | Action                                    | Example                |\n  | --------- | ----------------------------------------- | ---------------------- |\n  | `SIGUSR2` | Toggle transcription                      | `pkill -USR2 -n handy` |\n  | `SIGUSR1` | Toggle transcription with post-processing | `pkill -USR1 -n handy` |\n\n  Example Sway config:\n\n  ```ini\n  bindsym $mod+o exec pkill -USR2 -n handy\n  bindsym $mod+p exec pkill -USR1 -n handy\n  ```\n\n  `pkill` here simply delivers the signal—it does not terminate the process.\n\n**Overlay & Pasting Issues (Linux):**\n\n- The recording overlay window can interfere with pasting transcribed text into target applications on Linux (X11)\n- **Solution:** Open **Settings > Advanced** and set **\"Overlay Position\"** to **\"None\"** to disable the overlay\n- Enable **\"Audio Feedback\"** (also in Advanced) if you still want audible confirmation of recording state\n- Users who upgrade from older versions or import settings from other platforms may need to manually apply this change\n\n### Platform Support\n\n- **macOS (both Intel and Apple Silicon)**\n- **x64 Windows**\n- **x64 Linux**\n\n### System Requirements/Recommendations\n\nThe following are recommendations for running Handy on your own machine. If you don't meet the system requirements, the performance of the application may be degraded. We are working on improving the performance across all kinds of computers and hardware.\n\n**For Whisper Models:**\n\n- **macOS**: M series Mac, Intel Mac\n- **Windows**: Intel, AMD, or NVIDIA GPU\n- **Linux**: Intel, AMD, or NVIDIA GPU\n  - Ubuntu 22.04, 24.04\n\n**For Parakeet V3 Model:**\n\n- **CPU-only operation** - runs on a wide variety of hardware\n- **Minimum**: Intel Skylake (6th gen) or equivalent AMD processors\n- **Performance**: ~5x real-time speed on mid-range hardware (tested on i5)\n- **Automatic language detection** - no manual language selection required\n\n## Roadmap & Active Development\n\nWe're actively working on several features and improvements. Contributions and feedback are welcome!\n\n### In Progress\n\n**Debug Logging:**\n\n- Adding debug logging to a file to help diagnose issues\n\n**macOS Keyboard Improvements:**\n\n- Support for Globe key as transcription trigger\n- A rewrite of global shortcut handling for MacOS, and potentially other OS's too.\n\n**Opt-in Analytics:**\n\n- Collect anonymous usage data to help improve Handy\n- Privacy-first approach with clear opt-in\n\n**Sett",
    "strategic_keywords": [
      "inference"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 7,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 7,
      "risk_signal": 6,
      "total": 69
    },
    "strategic_score": 69
  },
  {
    "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": 8183,
    "forks": 799,
    "stars_this_period": 663,
    "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": 799,
      "watchers": 80,
      "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": "rustdesk",
    "name": "rustdesk",
    "full_name": "rustdesk/rustdesk",
    "url": "https://github.com/rustdesk/rustdesk",
    "description": "An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.",
    "language": "Rust",
    "total_stars": 117216,
    "forks": 17757,
    "stars_this_period": 640,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "android",
        "anydesk",
        "dart",
        "flatpak",
        "flutter",
        "flutter-apps",
        "ios",
        "linux",
        "macos",
        "p2p",
        "rdp",
        "remote-control",
        "remote-desktop",
        "rust",
        "rust-lang",
        "teamviewer",
        "vnc",
        "wayland",
        "windows"
      ],
      "license": "AGPL-3.0",
      "open_issues": 120,
      "created_at": "2020-09-28T15:36:08Z",
      "pushed_at": "2026-06-28T09:18:41Z",
      "homepage": "https://rustdesk.com",
      "default_branch": "master",
      "forks": 17757,
      "watchers": 607,
      "archived": false,
      "size_kb": 72504
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"res/logo-header.svg\" alt=\"RustDesk - Your remote desktop\"><br>\n  <a href=\"#raw-steps-to-build\">Build</a> •\n  <a href=\"#how-to-build-with-docker\">Docker</a> •\n  <a href=\"#file-structure\">Structure</a> •\n  <a href=\"#snapshot\">Snapshot</a><br>\n  [<a href=\"docs/README-UA.md\">Українська</a>] | [<a href=\"docs/README-CS.md\">česky</a>] | [<a href=\"docs/README-ZH.md\">中文</a>] | [<a href=\"docs/README-HU.md\">Magyar</a>] | [<a href=\"docs/README-ES.md\">Español</a>] | [<a href=\"docs/README-FA.md\">فارسی</a>] | [<a href=\"docs/README-FR.md\">Français</a>] | [<a href=\"docs/README-DE.md\">Deutsch</a>] | [<a href=\"docs/README-PL.md\">Polski</a>] | [<a href=\"docs/README-ID.md\">Indonesian</a>] | [<a href=\"docs/README-FI.md\">Suomi</a>] | [<a href=\"docs/README-ML.md\">മലയാളം</a>] | [<a href=\"docs/README-JP.md\">日本語</a>] | [<a href=\"docs/README-NL.md\">Nederlands</a>] | [<a href=\"docs/README-IT.md\">Italiano</a>] | [<a href=\"docs/README-RU.md\">Русский</a>] | [<a href=\"docs/README-PTBR.md\">Português (Brasil)</a>] | [<a href=\"docs/README-EO.md\">Esperanto</a>] | [<a href=\"docs/README-KR.md\">한국어</a>] | [<a href=\"docs/README-AR.md\">العربي</a>] | [<a href=\"docs/README-VN.md\">Tiếng Việt</a>] | [<a href=\"docs/README-DA.md\">Dansk</a>] | [<a href=\"docs/README-GR.md\">Ελληνικά</a>] | [<a href=\"docs/README-TR.md\">Türkçe</a>] | [<a href=\"docs/README-NO.md\">Norsk</a>] | [<a href=\"docs/README-RO.md\">Română</a>]<br>\n  <b>We need your help to translate this README, <a href=\"https://github.com/rustdesk/rustdesk/tree/master/src/lang\">RustDesk UI</a> and <a href=\"https://github.com/rustdesk/doc.rustdesk.com\">RustDesk Doc</a> to your native language</b>\n</p>\n\n> [!Caution]\n> **Misuse Disclaimer:** <br>\n> The developers of RustDesk do not condone or support any unethical or illegal use of this software. Misuse, such as unauthorized access, control or invasion of privacy, is strictly against our guidelines. The authors are not responsible for any misuse of the application.\n\n\nChat with us: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk) | [YouTube](https://www.youtube.com/@rustdesk)\n\n[![RustDesk Server Pro](https://img.shields.io/badge/RustDesk%20Server%20Pro-Advanced%20Features-blue)](https://rustdesk.com/pricing.html)\n\nYet another remote desktop solution, written in Rust. Works out of the box with no configuration required. You have full control of your data, with no concerns about security. You can use our rendezvous/relay server, [set up your own](https://rustdesk.com/server), or [write your own rendezvous/relay server](https://github.com/rustdesk/rustdesk-server-demo).\n\n![image](https://user-images.githubusercontent.com/71636191/171661982-430285f0-2e12-4b1d-9957-4a58e375304d.png)\n\nRustDesk welcomes contribution from everyone. See [CONTRIBUTING.md](docs/CONTRIBUTING.md) for help getting started.\n\n[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ)\n\n[**BINARY DOWNLOAD**](https://github.com/rustdesk/rustdesk/releases)\n\n[**NIGHTLY BUILD**](https://github.com/rustdesk/rustdesk/releases/tag/nightly)\n\n[<img src=\"https://f-droid.org/badge/get-it-on.png\"\n    alt=\"Get it on F-Droid\"\n    height=\"80\">](https://f-droid.org/en/packages/com.carriez.flutter_hbb)\n[<img src=\"https://flathub.org/api/badge?svg&locale=en\"\n    alt=\"Get it on Flathub\"\n    height=\"80\">](https://flathub.org/apps/com.rustdesk.RustDesk)\n\n## Dependencies\n\nDesktop versions use Flutter or Sciter (deprecated) for GUI, this tutorial is for Sciter only, since it is easier and more friendly to start. Check out our [CI](https://github.com/rustdesk/rustdesk/blob/master/.github/workflows/flutter-build.yml) for building Flutter version.\n\nPlease download Sciter dynamic library yourself.\n\n[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) |\n[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) |\n[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib)\n\n## Raw Steps to build\n\n- Prepare your Rust development env and C++ build env\n\n- Install [vcpkg](https://github.com/microsoft/vcpkg), and set `VCPKG_ROOT` env variable correctly\n\n  - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static\n  - Linux/macOS: vcpkg install libvpx libyuv opus aom\n\n- run `cargo run`\n\n## [Build](https://rustdesk.com/docs/en/dev/build/)\n\n## How to Build on Linux\n\n### Ubuntu 18 (Debian 10)\n\n```sh\nsudo apt install -y zip g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev \\\n        libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake make \\\n        libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libpam0g-dev\n```\n\n### openSUSE Tumbleweed\n\n```sh\nsudo zypper install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libXfixes-devel cmake alsa-lib-devel gstreamer-devel gstreamer-plugins-base-devel xdotool-devel pam-devel\n```\n\n### Fedora 28 (CentOS 8)\n\n```sh\nsudo yum -y install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libxdo-devel libXfixes-devel pulseaudio-libs-devel cmake alsa-lib-devel gstreamer1-devel gstreamer1-plugins-base-devel pam-devel\n```\n\n### Arch (Manjaro)\n\n```sh\nsudo pacman -Syu --needed unzip git cmake gcc curl wget yasm nasm zip make pkg-config clang gtk3 xdotool libxcb libxfixes alsa-lib pipewire\n```\n\n### Install vcpkg\n\n```sh\ngit clone https://github.com/microsoft/vcpkg\ncd vcpkg\ngit checkout 2023.04.15\ncd ..\nvcpkg/bootstrap-vcpkg.sh\nexport VCPKG_ROOT=$HOME/vcpkg\nvcpkg/vcpkg install libvpx libyuv opus aom\n```\n\n### Fix libvpx (For Fedora)\n\n```sh\ncd vcpkg/buildtrees/libvpx/src\ncd *\n./configure\nsed -i 's/CFLAGS+=-I/CFLAGS+=-fPIC -I/g' Makefile\nsed -i 's/CXXFLAGS+=-I/CXXFLAGS+=-fPIC -I/g' Makefile\nmake\ncp libvpx.a $HOME/vcpkg/installed/x64-linux/lib/\ncd\n```\n\n### Build\n\n```sh\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsource $HOME/.cargo/env\ngit clone --recurse-submodules https://github.com/rustdesk/rustdesk\ncd rustdesk\nmkdir -p target/debug\nwget https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so\nmv libsciter-gtk.so target/debug\nVCPKG_ROOT=$HOME/vcpkg cargo run\n```\n\n## How to build with Docker\n\nBegin by cloning the repository and building the Docker container:\n\n```sh\ngit clone https://github.com/rustdesk/rustdesk\ncd rustdesk\ngit submodule update --init --recursive\ndocker build -t \"rustdesk-builder\" .\n```\n\nThen, each time you need to build the application, run the following command:\n\n```sh\ndocker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID=\"$(id -u)\" -e PGID=\"$(id -g)\" rustdesk-builder\n```\n\nNote that the first build may take longer before dependencies are cached, subsequent builds will be faster. Additionally, if you need to specify different arguments to the build command, you may do so at the end of the command in the `<OPTIONAL-ARGS>` position. For instance, if you wanted to build an optimized release version, you would run the command above followed by `--release`. The resulting executable will be available in the target folder on your system, and can be run with:\n\n```sh\ntarget/debug/rustdesk\n```\n\nOr, if you're running a release executable:\n\n```sh\ntarget/release/rustdesk\n```\n\nPlease ensure that you run these commands from the root of the RustDesk repository, or the application may not find the required resources. Also note that other cargo subcommands such as `install` or `run` are not currently supported via this method as they would install or run the program inside the container instead of the host.\n\n## File Structure\n\n- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: video codec, config, tcp/udp wrapper, protobuf, fs functions for file transfer, and some other utility functions\n- **[libs/scrap](https://github.com/rustdesk/rustdesk/tree/master/libs/scrap)**: screen capture\n- **[libs/enigo](https://github.com/rustdesk/rustdesk/tree/master/libs/enigo)**: platform specific keyboard/mouse control\n- **[libs/clipboard](https://github.com/rustdesk/rustdesk/tree/master/libs/clipboard)**: file copy and paste implementation for Windows, Linux, macOS.\n- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: obsolete Sciter UI (deprecated)\n- **[src/server](https://github.com/rustdesk/rustdesk/tree/master/src/server)**: audio/clipboard/input/video services, and network connections\n- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: start a peer connection\n- **[src/rendezvous_mediator.rs](https://github.com/rustdesk/rustdesk/tree/master/src/rendezvous_mediator.rs)**: Communicate with [rustdesk-server](https://github.com/rustdesk/rustdesk-server), wait for remote direct (TCP hole punching) or relayed connection\n- **[src/platform](https://github.com/rustdesk/rustdesk/tree/master/src/platform)**: platform specific code\n- **[flutter](https://github.com/rustdesk/rustdesk/tree/master/flutter)**: Flutter code for desktop and mobile\n- **[flutter/web/js](https://github.com/rustdesk/rustdesk/tree/master/flutter/web/v1/js)**: JavaScript for Flutter web client\n\n## Screenshots\n\n![Connection Manager](https://github.com/rustdesk/rustdesk/assets/28412477/db82d4e7-c4bc-4823-8e6f-6af7eadf7651)\n\n![Connected to a Windows PC](https://github.com/rustdesk/rustdesk/assets/28412477/9baa91e9-3362-4d06-aa1a-7518edcbd7ea)\n\n![File Transfer](https://github.com/rustdesk/rustdesk/assets/28412477/39511ad3-aa9a-4f8c-8947-1cce286a46ad)\n\n![TCP Tunneling](https://github.com/rustdesk/rustdesk/assets/28412477/78e8708f-e87e-4570-8373-1360033ea6c5)\n\n",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[package]\nname = \"rustdesk\"\nversion = \"1.4.8\"\nauthors = [\"rustdesk <info@rustdesk.com>\"]\nedition = \"2021\"\nbuild= \"build.rs\"\ndescription = \"RustDesk Remote Desktop\"\ndefault-run = \"rustdesk\"\nrust-version = \"1.75\"\n\n[lib]\nname = \"librustdesk\"\ncrate-type = [\"cdylib\", \"staticlib\", \"rlib\"]\n\n[[bin]]\nname = \"naming\"\npath = \"src/naming.rs\"\n\n[[bin]]\nname = \"service\"\npath = \"src/service.rs\"\n\n[features]\ninline = []\ncli = []\nuse_samplerate = [\"samplerate\"]\nuse_rubato = [\"rubato\"]\nuse_dasp = [\"dasp\"]\nflutter = [\"flutter_rust_bridge\"]\ndefault = [\"use_dasp\"]\nhwcodec = [\"scrap/hwcodec\"]\nvram = [\"scrap/vram\"]\nmediacodec = [\"scrap/mediacodec\"]\nplugin_framework = []\nlinux-pkg-config = [\"magnum-opus/linux-pkg-config\", \"scrap/linux-pkg-config\"]\nunix-file-copy-paste = [\n    \"dep:x11-clipboard\",\n    \"dep:x11rb\",\n    \"dep:percent-encoding\",\n    \"dep:once_cell\",\n    \"clipboard/unix-file-copy-paste\",\n]\nscreencapturekit = [\"cpal/screencapturekit\"]\n\n# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html\n\n[dependencies]\nasync-trait = \"0.1\"\nscrap = { path = \"libs/scrap\", features = [\"wayland\"] }\nhbb_common = { path = \"libs/hbb_common\" }\nserde_derive = \"1.0\"\nserde = \"1.0\"\nserde_json = \"1.0\"\nserde_repr = \"0.1\"\ncfg-if = \"1.0\"\nlazy_static = \"1.4\"\nsha2 = \"0.10\"\nrepng = \"0.2\"\nparity-tokio-ipc = { git = \"https://github.com/rustdesk-org/parity-tokio-ipc\" }\nmagnum-opus = { git = \"https://github.com/rustdesk-org/magnum-opus\" }\ndasp = { version = \"0.11\", features = [\"signal\", \"interpolate-linear\", \"interpolate\"], optional = true }\nrubato = { version = \"0.12\", optional = true }\nsamplerate = { version = \"0.2\", optional = true }\nuuid = { version = \"1.3\", features = [\"v4\"] }\nclap = \"4.2\"\nrpassword = \"7.2\"\nnum_cpus = \"1.15\"\nbytes = { version = \"1.4\", features = [\"serde\"] }\ndefault-net = \"0.14\"\nwol-rs = \"1.0\"\nflutter_rust_bridge = { version = \"=1.80\", features = [\"uuid\"], optional = true}\nerrno = \"0.3\"\nrdev = { git = \"https://github.com/rustdesk-org/rdev\" }\nurl = { version = \"2.3\", features = [\"serde\"] }\ncrossbeam-queue = \"0.3\"\nhex = \"0.4\"\nchrono = \"0.4\"\ncidr-utils = \"0.5\"\nfon = \"0.6\"\nzip = \"0.6\"\nshutdown_hooks = \"0.1\"\ntotp-rs = { version = \"5.4\", default-features = false, features = [\"gen_secret\", \"otpauth\"] }\nstunclient = \"0.4\"\nkcp-sys= { git = \"https://github.com/rustdesk-org/kcp-sys\"}\nreqwest = { version = \"0.12\", features = [\"blocking\", \"socks\", \"json\", \"native-tls\", \"rustls-tls\", \"rustls-tls-native-roots\", \"gzip\"], default-features=false }\n\n[target.'cfg(not(target_os = \"linux\"))'.dependencies]\n# https://github.com/rustdesk/rustdesk/discussions/10197, not use cpal on linux\ncpal = { git = \"https://github.com/rustdesk-org/cpal\", branch = \"osx-screencapturekit\" }\nringbuf = \"0.3\"\n\n[target.'cfg(not(any(target_os = \"android\", target_os = \"ios\")))'.dependencies]\nmac_address = \"1.1\"\nsciter-rs = { git = \"https://github.com/rustdesk-org/rust-sciter\", branch = \"dyn\" }\nsys-locale = \"0.3\"\nenigo = { path = \"libs/enigo\", features = [ \"with_serde\" ] }\nclipboard = { path = \"libs/clipboard\" }\nctrlc = \"3.2\"\n# arboard = { version = \"3.4\", features = [\"wayland-data-control\"] }\narboard = { git = \"https://github.com/rustdesk-org/arboard\", features = [\"wayland-data-control\"] }\nclipboard-master = { git = \"https://github.com/rustdesk-org/clipboard-master\" }\nportable-pty = { git = \"https://github.com/rustdesk-org/wezterm\", branch = \"rustdesk/pty_based_0.8.1\", package = \"portable-pty\" }\n\nsystem_shutdown = \"4.0\"\nqrcode-generator = \"4.1\"\n\n[target.'cfg(target_os = \"windows\")'.dependencies]\nwinapi = { version = \"0.3\", features = [\n    \"winuser\",\n    \"wincrypt\",\n    \"shellscalingapi\",\n    \"pdh\",\n    \"synchapi\",\n    \"memoryapi\",\n    \"shellapi\",\n    \"devguid\",\n    \"setupapi\",\n    \"cguid\",\n    \"cfgmgr32\",\n    \"ioapiset\",\n    \"winspool\",\n] }\nwindows = { version = \"0.61\", features = [\n    \"Win32\",\n    \"Win32_Foundation\",\n    \"Win32_Security\",\n    \"Win32_Security_Authorization\",\n    \"Win32_Storage_FileSystem\",\n    \"Win32_System\",\n    \"Win32_System_Diagnostics\",\n    \"Win32_System_Diagnostics_ToolHelp\",\n    \"Win32_System_Environment\",\n    \"Win32_System_IO\",\n    \"Win32_System_Memory\",\n    \"Win32_System_Pipes\",\n    \"Win32_System_Threading\",\n    \"Win32_UI_Shell\",\n] }\nwinreg = \"0.11\"\nwindows-service = \"0.6\"\nvirtual_display = { path = \"libs/virtual_display\" }\nremote_printer = { path = \"libs/remote_printer\" }\nimpersonate_system = { git = \"https://github.com/rustdesk-org/impersonate-system\" }\nshared_memory = \"0.12\"\ntauri-winrt-notification = \"0.1\"\nrunas = \"1.2\"\n\n[target.'cfg(target_os = \"macos\")'.dependencies]\nobjc = \"0.2\"\ncocoa = \"0.24\"\ndispatch = \"0.2\"\ncore-foundation = \"0.9\"\ncore-graphics = \"0.22\"\ninclude_dir = \"0.7\"\nfruitbasket = \"0.10\"\nobjc_id = \"0.1\"\n# If we use piet \"0.7\" here, we must also update core-graphics to \"0.24\".\npiet = \"0.6\"\npiet-coregraphics = \"0.6\"\nforeign-types = \"0.3\"\n\n[target.'cfg(any(target_os = \"macos\", target_os = \"linux\", target_os = \"windows\"))'.dependencies]\ntray-icon = { git = \"https://github.com/tauri-apps/tray-icon\", version ",
    "strategic_keywords": [
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 8,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 8,
      "total": 74
    },
    "strategic_score": 74
  },
  {
    "owner": "stanford-oval",
    "name": "storm",
    "full_name": "stanford-oval/storm",
    "url": "https://github.com/stanford-oval/storm",
    "description": "An LLM-powered knowledge curation system that researches a topic and generates a full-length report with citations.",
    "language": "Python",
    "total_stars": 29561,
    "forks": 2750,
    "stars_this_period": 631,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "agentic-rag",
        "deep-research",
        "emnlp2024",
        "knowledge-curation",
        "large-language-models",
        "naacl",
        "nlp",
        "report-generation",
        "retrieval-augmented-generation"
      ],
      "license": "MIT",
      "open_issues": 107,
      "created_at": "2024-03-24T16:23:39Z",
      "pushed_at": "2025-09-30T18:07:21Z",
      "homepage": "http://storm.genie.stanford.edu",
      "default_branch": "main",
      "forks": 2750,
      "watchers": 191,
      "archived": false,
      "size_kb": 8212
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"assets/logo.svg\" style=\"width: 25%; height: auto;\">\n</p>\n\n# STORM: Synthesis of Topic Outlines through Retrieval and Multi-perspective Question Asking\n\n<p align=\"center\">\n| <a href=\"http://storm.genie.stanford.edu\"><b>Research preview</b></a> | <a href=\"https://arxiv.org/abs/2402.14207\"><b>STORM Paper</b></a>| <a href=\"https://www.arxiv.org/abs/2408.15232\"><b>Co-STORM Paper</b></a>  | <a href=\"https://storm-project.stanford.edu/\"><b>Website</b></a> |\n</p>\n**Latest News** 🔥\n\n- [2025/01] We add [litellm](https://github.com/BerriAI/litellm) integration for language models and embedding models in `knowledge-storm` v1.1.0.\n\n- [2024/09] Co-STORM codebase is now released and integrated into `knowledge-storm` python package v1.0.0. Run `pip install knowledge-storm --upgrade` to check it out.\n\n- [2024/09] We introduce collaborative STORM (Co-STORM) to support human-AI collaborative knowledge curation! [Co-STORM Paper](https://www.arxiv.org/abs/2408.15232) has been accepted to EMNLP 2024 main conference.\n\n- [2024/07] You can now install our package with `pip install knowledge-storm`!\n- [2024/07] We add `VectorRM` to support grounding on user-provided documents, complementing existing support of search engines (`YouRM`, `BingSearch`). (check out [#58](https://github.com/stanford-oval/storm/pull/58))\n- [2024/07] We release demo light for developers a minimal user interface built with streamlit framework in Python, handy for local development and demo hosting (checkout [#54](https://github.com/stanford-oval/storm/pull/54))\n- [2024/06] We will present STORM at NAACL 2024! Find us at Poster Session 2 on June 17 or check our [presentation material](assets/storm_naacl2024_slides.pdf). \n- [2024/05] We add Bing Search support in [rm.py](knowledge_storm/rm.py). Test STORM with `GPT-4o` - we now configure the article generation part in our demo using `GPT-4o` model.\n- [2024/04] We release refactored version of STORM codebase! We define [interface](knowledge_storm/interface.py) for STORM pipeline and reimplement STORM-wiki (check out [`src/storm_wiki`](knowledge_storm/storm_wiki)) to demonstrate how to instantiate the pipeline. We provide API to support customization of different language models and retrieval/search integration.\n\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n## Overview [(Try STORM now!)](https://storm.genie.stanford.edu/)\n\n<p align=\"center\">\n  <img src=\"assets/overview.svg\" style=\"width: 90%; height: auto;\">\n</p>\nSTORM is a LLM system that writes Wikipedia-like articles from scratch based on Internet search. Co-STORM further enhanced its feature by enabling human to collaborative LLM system to support more aligned and preferred information seeking and knowledge curation.\n\nWhile the system cannot produce publication-ready articles that often require a significant number of edits, experienced Wikipedia editors have found it helpful in their pre-writing stage.\n\n**More than 70,000 people have tried our [live research preview](https://storm.genie.stanford.edu/). Try it out to see how STORM can help your knowledge exploration journey and please provide feedback to help us improve the system 🙏!**\n\n\n\n## How STORM & Co-STORM works\n\n### STORM\n\nSTORM breaks down generating long articles with citations into two steps:\n\n1. **Pre-writing stage**: The system conducts Internet-based research to collect references and generates an outline.\n2. **Writing stage**: The system uses the outline and references to generate the full-length article with citations.\n<p align=\"center\">\n  <img src=\"assets/two_stages.jpg\" style=\"width: 60%; height: auto;\">\n</p>\n\nSTORM identifies the core of automating the research process as automatically coming up with good questions to ask. Directly prompting the language model to ask questions does not work well. To improve the depth and breadth of the questions, STORM adopts two strategies:\n1. **Perspective-Guided Question Asking**: Given the input topic, STORM discovers different perspectives by surveying existing articles from similar topics and uses them to control the question-asking process.\n2. **Simulated Conversation**: STORM simulates a conversation between a Wikipedia writer and a topic expert grounded in Internet sources to enable the language model to update its understanding of the topic and ask follow-up questions.\n\n### CO-STORM\n\nCo-STORM proposes **a collaborative discourse protocol** which implements a turn management policy to support smooth collaboration among \n\n- **Co-STORM LLM experts**: This type of agent generates answers grounded on external knowledge sources and/or raises follow-up questions based on the discourse history.\n- **Moderator**: This agent generates thought-provoking questions inspired by information discovered by the retriever but not directly used in previous turns. Question generation can also be grounded!\n- **Human user**: The human user will take the initiative to either (1) observe the discourse to gain deeper understanding of the topic, or (2) actively engage in the conversation by injecting utterances to steer the discussion focus.\n\n<p align=\"center\">\n  <img src=\"assets/co-storm-workflow.jpg\" style=\"width: 60%; height: auto;\">\n</p>\n\nCo-STORM also maintains a dynamic updated **mind map**, which organize collected information into a hierarchical concept structure, aiming to **build a shared conceptual space between the human user and the system**. The mind map has been proven to help reduce the mental load when the discourse goes long and in-depth. \n\nBoth STORM and Co-STORM are implemented in a highly modular way using [dspy](https://github.com/stanfordnlp/dspy).\n\n## Installation\n\n\nTo install the knowledge storm library, use `pip install knowledge-storm`. \n\nYou could also install the source code which allows you to modify the behavior of STORM engine directly.\n1. Clone the git repository.\n    ```shell\n    git clone https://github.com/stanford-oval/storm.git\n    cd storm\n    ```\n   \n2. Install the required packages.\n   ```shell\n   conda create -n storm python=3.11\n   conda activate storm\n   pip install -r requirements.txt\n   ```\n   \n\n## API\n\nCurrently, our package support:\n\n- Language model components: All language models supported by litellm as listed [here](https://docs.litellm.ai/docs/providers)\n- Embedding model components: All embedding models supported by litellm as listed [here](https://docs.litellm.ai/docs/embedding/supported_embedding)\n- retrieval module components: `YouRM`, `BingSearch`, `VectorRM`, `SerperRM`, `BraveRM`, `SearXNG`, `DuckDuckGoSearchRM`, `TavilySearchRM`, `GoogleSearch`, and `AzureAISearch` as \n\n:star2: **PRs for integrating more search engines/retrievers into [knowledge_storm/rm.py](knowledge_storm/rm.py) are highly appreciated!**\n\nBoth STORM and Co-STORM are working in the information curation layer, you need to set up the information retrieval module and language model module to create their `Runner` classes respectively.\n\n### STORM\n\nThe STORM knowledge curation engine is defined as a simple Python `STORMWikiRunner` class. Here is an example of using You.com search engine and OpenAI models.\n\n```python\nimport os\nfrom knowledge_storm import STORMWikiRunnerArguments, STORMWikiRunner, STORMWikiLMConfigs\nfrom knowledge_storm.lm import LitellmModel\nfrom knowledge_storm.rm import YouRM\n\nlm_configs = STORMWikiLMConfigs()\nopenai_kwargs = {\n    'api_key': os.getenv(\"OPENAI_API_KEY\"),\n    'temperature': 1.0,\n    'top_p': 0.9,\n}\n# STORM is a LM system so different components can be powered by different models to reach a good balance between cost and quality.\n# For a good practice, choose a cheaper/faster model for `conv_simulator_lm` which is used to split queries, synthesize answers in the conversation.\n# Choose a more powerful model for `article_gen_lm` to generate verifiable text with citations.\ngpt_35 = LitellmModel(model='gpt-3.5-turbo', max_tokens=500, **openai_kwargs)\ngpt_4 = LitellmModel(model='gpt-4o', max_tokens=3000, **openai_kwargs)\nlm_configs.set_conv_simulator_lm(gpt_35)\nlm_configs.set_question_asker_lm(gpt_35)\nlm_configs.set_outline_gen_lm(gpt_4)\nlm_configs.set_article_gen_lm(gpt_4)\nlm_configs.set_article_polish_lm(gpt_4)\n# Check out the STORMWikiRunnerArguments class for more configurations.\nengine_args = STORMWikiRunnerArguments(...)\nrm = YouRM(ydc_api_key=os.getenv('YDC_API_KEY'), k=engine_args.search_top_k)\nrunner = STORMWikiRunner(engine_args, lm_configs, rm)\n```\n\nThe `STORMWikiRunner` instance can be evoked with the simple `run` method:\n```python\ntopic = input('Topic: ')\nrunner.run(\n    topic=topic,\n    do_research=True,\n    do_generate_outline=True,\n    do_generate_article=True,\n    do_polish_article=True,\n)\nrunner.post_run()\nrunner.summary()\n```\n- `do_research`: if True, simulate conversations with difference perspectives to collect information about the topic; otherwise, load the results.\n- `do_generate_outline`: if True, generate an outline for the topic; otherwise, load the results.\n- `do_generate_article`: if True, generate an article for the topic based on the outline and the collected information; otherwise, load the results.\n- `do_polish_article`: if True, polish the article by adding a summarization section and (optionally) removing duplicate content; otherwise, load the results.\n\n### Co-STORM\n\nThe Co-STORM knowledge curation engine is defined as a simple Python `CoStormRunner` class. Here is an example of using Bing search engine and OpenAI models.\n\n```python\nfrom knowledge_storm.collaborative_storm.engine import CollaborativeStormLMConfigs, RunnerArgument, CoStormRunner\nfrom knowledge_storm.lm import LitellmModel\nfrom knowledge_storm.logging_wrapper import LoggingWrapper\nfrom knowledge_storm.rm import BingSearch\n\n# Co-STORM adopts the same multi LM system paradigm as STORM \nlm_config: CollaborativeStormLMConfigs = CollaborativeStormLMConfigs()\nopenai_kwargs = {\n    \"api_key\": os.getenv(\"OPENAI_API_KEY\"),\n    \"api_provider\": \"openai\",\n    \"temperature\": 1.0,\n    \"top_p\": 0.9,\n    \"api_base\": None,\n} \nquestion_answering_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=1000, **openai_kwargs)\ndiscourse_manage_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=500, **openai_kwargs)\nutterance_polishing_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=2000, **openai_kwargs)\nwarmstart_outline_gen_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=500, **openai_kwargs)\nquestion_asking_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=300, **openai_kwargs)\nknowledge_base_lm = LitellmModel(model=gpt_4o_model_name, max_tokens=1000, **openai_kwargs)\n\nlm_config.set_question_answering_lm(question_answering_lm)\nlm_config.set_discourse_manage_lm(discourse_manage_lm)\nlm_config.set_utterance_polishing_lm(utterance_polishing_lm)\nlm_config.set_warmstart_outline_gen_lm(warmstart_outline_gen_lm)\nlm_config.set_question_asking_lm(question_asking_lm)\nlm_config.set_knowledge_base_lm(knowledge_base_lm)\n\n# Check out the Co-STORM's RunnerArguments class for more configurations.\ntopic = input('Topic: ')\nrunner_argument = RunnerArgument(topic=topic, ...)\nlogging_wrapper = LoggingWrapper(lm_config)\nbing_rm = BingSearch(bing_search_api_key=os.environ.get(\"BING_SEARCH_API_KEY\"),\n                     k=runner_argument.retrieve_top_k)\ncostorm_runner = CoStormRunner(lm_config=lm_config,\n                               runner_argument=runner_argument,\n                               logging_wrapper=logging_wrapper,\n                               rm=bing_rm)\n```\n\nThe `CoStormRunner` instance can be evoked with the `warmstart()` and `step(...)` methods.\n\n```python\n# Warm start the system to build shared conceptual space between Co-STORM and users\ncostorm_runner.warm_start()\n\n# Step through the collaborative discourse \n# Run either of the code snippets below in any order, as many times as you'd like\n# To observe the conversation:\nconv_turn = costorm_runner.step()\n# To inject your utterance to actively stee",
    "manifest_file": "requirements.txt",
    "manifest_content": "dspy_ai==2.4.9\nwikipedia==1.4.0\nsentence-transformers\ntoml\nlangchain-text-splitters\ntrafilatura\nlangchain-huggingface\nqdrant-client\nlangchain-qdrant\nnumpy\nlitellm\ndiskcache",
    "strategic_keywords": [
      "agent",
      "rag",
      "llm",
      "eval",
      "vector",
      "embedding"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "requirements.txt"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 96
    },
    "strategic_score": 96
  },
  {
    "owner": "Kong",
    "name": "insomnia",
    "full_name": "Kong/insomnia",
    "url": "https://github.com/Kong/insomnia",
    "description": "The open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.",
    "language": "TypeScript",
    "total_stars": 39813,
    "forks": 2351,
    "stars_this_period": 622,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "api",
        "api-client",
        "api-design",
        "curl",
        "electron-app",
        "graphql",
        "grpc",
        "http-client",
        "rest-api",
        "websockets"
      ],
      "license": "Apache-2.0",
      "open_issues": 856,
      "created_at": "2016-04-23T03:54:26Z",
      "pushed_at": "2026-06-28T11:55:05Z",
      "homepage": "https://insomnia.rest",
      "default_branch": "develop",
      "forks": 2351,
      "watchers": 243,
      "archived": false,
      "size_kb": 155411
    },
    "readme_content": "# Insomnia API Client\n\n[![Website](https://img.shields.io/badge/Get%20started%20for%20free-8A2BE2)](https://insomnia.rest)\n![Stars](https://img.shields.io/github/stars/Kong/insomnia?style=flat-square)\n![GitHub commit activity](https://img.shields.io/github/commit-activity/m/Kong/insomnia?style=flat-square)\n[![Slack Channel](https://chat.insomnia.rest/badge.svg)](https://chat.insomnia.rest/)\n[![license](https://img.shields.io/github/license/Kong/insomnia.svg)](LICENSE)\n![Twitter Follow](https://img.shields.io/twitter/follow/GetInsomnia?style=social)\n\nInsomnia is an open-source, cross-platform API client for GraphQL, REST, WebSockets, Server-Sent Events (SSE), gRPC and any other HTTP compatible protocol.\n\nWith Insomnia you can:\n\n- **Debug APIs** using the most popular protocols and formats.\n- **Design APIs** using the native OpenAPI editor and visual preview.\n- **Test APIs** using native test suites and collection runner.\n- **Mock APIs** using a cloud or self-hosted mocking server.\n- **Build CI/CD pipelines** using the native Insomnia CLI for linting and testing.\n- **Collaborate with others** using the many collaboration features.\n- **And more** including the ability to use 3rd party plugins.\n\nThe following storage options are supported for your Insomnia projects, collections, design specs and all other resources:\n\n- **Local Vault**: for 100% local storage of collections, design specs and every other resource.\n- **Git Sync**: for Git storage using any 3rd party Git repository, without going through the cloud.\n- **Cloud Sync**: for cloud collaboration, optionally end-to-end encrypted (E2EE) in the cloud.\n\n![Insomnia API Client](https://raw.githubusercontent.com/Kong/insomnia/develop/screenshots/main.png)\n\n## Get started for free\n\nInsomnia is available for Mac, Windows, and Linux and can be downloaded from the website:\n\n**[https://insomnia.rest](https://insomnia.rest)**\n\n## Account & Subscriptions\n\nYou can use Insomnia without an account with the local **Scratch Pad**, or you can [create an account for free](https://insomnia.rest/pricing) to get access to the full capabilities of the product.\n\nEven with an account, Insomnia only stores your projects and files accordingly to the **storage backend** that you have selected, which can be Local Vault, Cloud Sync, Git Sync or any combination of them. As such - for example - you have the freedom to choose to store sensitive projects 100% locally or in a Git repository, while still being able to collaborate on others in the cloud. It's the best of both worlds.\n\nFor added security, Insomnia also offers a **Private Environments** feature, where your environments configuration is always stored locally and never in the cloud, independently from the storage option that you have chosen for your project.\n\n## Premium features and support\n\nInsomnia has a very generous free plan that will be satisfactory for most users, but if you need to get access to premium capabilities like unlimited collaboration, the Git Sync feature, the ability to create organizations for your projects, using a 3rd party IDP for logins (SAML, OIDC) and many other features, then you can explore the other subscription plans.\n\nYou can [compare all subscription plans](https://insomnia.rest/pricing) and get started for free.\n\n## Why does Insomnia require an account?\n\nInsomnia does not require an account if you decide to use the local **Scratch Pad**, but to access most capabilities of the product we require an account. Your account data is securely stored in compliance with ISO27001, SOC 2 Type II, ISO27018, Gold CSA STAR regulations and in accordance with our terms of service and privacy policy.\n\nWe require an account to sustainably build and improve the product, and to make sure we can continue to offer the many core capabilities in a free and open-source distribution. While open source software is free to use, it is unfortunately not free to build, and our ability to continue working on Insomnia is dependent on our ability to convert a subset of free users (that need premium features) to become paying customers of our product.\n\nIf you are a user that cannot share API data like collections and design specifications to the cloud, this is still possible by selecting \"Local Vault\" as the storage of your Insomnia projects: having an Insomnia account is not tied to how you wish to store your sensitive API data (which can be stored 100% locally via Local Vault, on a 3rd party Git repository without any cloud storage via Git Sync, or in the cloud for ease of collaboration via Cloud Sync).\n\n## Bugs and Feature Requests\n\nHave a bug or a feature request? First, read the\n[issue guidelines](CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/Kong/insomnia/issues).\n\nFor more generic product questions and feedback, join the [Slack Team](https://chat.insomnia.rest).\n\n## Contributing\n\nPlease read through our [contributing guidelines](CONTRIBUTING.md) and [code of conduct](CODE_OF_CONDUCT.md). Included are directions for opening issues, coding standards, and notes on development.\n\n## Documentation\n\nCheck out our official [Insomnia Documentation](https://docs.insomnia.rest/).\n\n## Develop Insomnia\n\nDevelopment on Insomnia can be done on Mac, Windows, or Linux as long as you have [Node.js](https://nodejs.org) and [Git](https://git-scm.com/). See the `.nvmrc` file located in the project for the correct Node version.\n\n<details>\n<summary>Initial Dev Setup</summary>\n\nThis repository is structured as a monorepo and contains many Node.JS packages. Each package has its own set of commands, but the most common commands are available from the root [`package.json`](package.json) and can be accessed using the `npm run …` command. Here are the only three commands you should need to start developing on the app.\n\n```shell\n# Install and Link Dependencies\nnpm i\n\n# Run Lint\nnpm run lint\n\n# Run type checking\nnpm run type-check\n\n# Run Tests\nnpm test\n\n# Start App with Live Reload\nnpm run dev\n\n# Start App with both renderer process live reload and main process auto restart\nnpm run dev:autoRestart\n```\n\n### Linux\n\nIf you are on Linux, you may need to install the following supporting packages:\n\n<details>\n<summary>Ubuntu/Debian</summary>\n\n```shell\n# Update library\nsudo apt-get update\n\n# Install font configuration library & support\nsudo apt-get install libfontconfig-dev\n```\n\n</details>\n\n<details>\n<summary>Fedora</summary>\n\n```shell\n# Install libcurl for node-libcurl\nsudo dnf install libcurl-devel\n```\n\n</details>\n\nAlso on Linux, if Electron is failing during the install process, run the following\n\n```shell\n# Clear Electron install conflicts\nrm -rf ~/.cache/electron\n```\n\n### Windows\n\nIf you are on Windows and have problems, you may need to install [Windows Build Tools](https://github.com/felixrieseberg/windows-build-tools)\n\n</details>\n\n<details>\n<summary>Editor Requirements</summary>\n\nYou can use any editor you'd like, but make sure to have support/plugins for the following tools:\n\n- [ESLint](http://eslint.org/) - For catching syntax problems and common errors\n- [JSX Syntax](https://facebook.github.io/react/docs/jsx-in-depth.html) - For React components\n\n</details>\n\n## Develop Inso CLI\n\n- `npm i`\n- Start the compiler in watch mode: `npm run inso-start`\n- Run: `./packages/insomnia-inso/bin/inso -v`\n\n## Plugins\n\nSearch for, discover, and install plugins from the Insomnia [Plugin Hub](https://insomnia.rest/plugins/)!\n\n## Community Projects\n\n- [Insomnia Documenter](https://github.com/jozsefsallai/insomnia-documenter) - Generate beautiful API documentation pages using the [documenter plugin](https://insomnia.rest/plugins/insomnia-plugin-documenter) or your Insomnia export file.\n- [GitHub API Spec Importer](https://github.com/swinton/github-rest-apis-for-insomnia) - A complete set of GitHub REST API route specifications that can be imported straight into Insomnia.\n- [Swaggymnia](https://github.com/mlabouardy/swaggymnia) - Generate [Swagger](https://swagger.io/) documentation for your existing API in Insomnia.\n\n## License\n\n[Apache-2.0](LICENSE) &copy; [Insomnia](https://insomnia.rest)\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"insomnia\",\n  \"private\": true,\n  \"version\": \"1.0.0\",\n  \"author\": \"Kong <office@konghq.com>\",\n  \"description\": \"Insomnia is a cross-platform REST client, built on top of Electron.\",\n  \"license\": \"Apache-2.0\",\n  \"repository\": \"https://github.com/kong/insomnia\",\n  \"bugs\": {\n    \"url\": \"https://github.com/kong/insomnia/issues\"\n  },\n  \"homepage\": \"https://github.com/kong/insomnia#readme\",\n  \"engines\": {\n    \"node\": \">=24\",\n    \"npm\": \">=11\"\n  },\n  \"workspaces\": [\n    \"packages/insomnia-testing\",\n    \"packages/insomnia\",\n    \"packages/insomnia-data\",\n    \"packages/insomnia-analytics\",\n    \"packages/insomnia-api\",\n    \"packages/insomnia-inso\",\n    \"packages/insomnia-smoke-test\",\n    \"packages/insomnia-scripting-environment\"\n  ],\n  \"scripts\": {\n    \"dev\": \"npm start -w insomnia\",\n    \"dev:autoRestart\": \"npm run start:autoRestart -w insomnia\",\n    \"lint\": \"npm run lint --workspaces --if-present\",\n    \"type-check\": \"npm run type-check --workspaces --if-present\",\n    \"test\": \"npm run test --workspaces --if-present\",\n    \"clean\": \"git clean -dfX\",\n    \"install-libcurl-electron\": \"node-pre-gyp install --directory node_modules/@getinsomnia/node-libcurl --update-binary --runtime=electron --target=41.0.3\",\n    \"install-libcurl-node\": \"node-pre-gyp install --directory node_modules/@getinsomnia/node-libcurl --update-binary --runtime=node --target=24.14.0\",\n    \"inso-start\": \"npm start -w insomnia-inso\",\n    \"inso-package\": \"npm run build -w insomnia-inso && npm run package -w insomnia-inso\",\n    \"watch:app\": \"npm run build:electron-entrypoints -w insomnia && npm run start:dev-server -w insomnia\",\n    \"app-build\": \"npm run build -w insomnia\",\n    \"app-package\": \"npm run package -w insomnia\",\n    \"test:smoke:dev\": \"npm run test:dev -w insomnia-smoke-test -- --project=Smoke\",\n    \"test:smoke:build\": \"npm run test:build -w insomnia-smoke-test -- --project=Smoke\",\n    \"test:smoke:package\": \"npm run test:package -w insomnia-smoke-test -- --project=Smoke\",\n    \"test:crit:package\": \"npm run test:package -w insomnia-smoke-test -- --project=Critical\",\n    \"test:crit:dev\": \"npm run test:dev -w insomnia-smoke-test -- --project=Critical\",\n    \"postinstall\": \"patch-package && npm run verify-bundle-plugins -w insomnia && npm run install-libcurl-electron\",\n    \"check-cycle-references\": \"madge --circular --extensions ts,tsx packages\"\n  },\n  \"devDependencies\": {\n    \"@eslint/js\": \"^9.23.0\",\n    \"@types/chai\": \"^4.3.14\",\n    \"@types/har-format\": \"^1.2.15\",\n    \"@types/mocha\": \"^10.0.6\",\n    \"@types/node\": \"^24.2.1\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.29.0\",\n    \"@typescript-eslint/parser\": \"^8.29.0\",\n    \"esbuild\": \"^0.25.10\",\n    \"esbuild-runner\": \"^2.2.2\",\n    \"eslint\": \"^9.39.1\",\n    \"eslint-config-prettier\": \"^10.1.8\",\n    \"eslint-plugin-playwright\": \"^2.3.0\",\n    \"eslint-plugin-react\": \"^7.37.5\",\n    \"eslint-plugin-react-hooks\": \"^7.0.1\",\n    \"eslint-plugin-simple-import-sort\": \"^12.1.1\",\n    \"eslint-plugin-unicorn\": \"^62.0.0\",\n    \"globals\": \"^16.5.0\",\n    \"madge\": \"^8.0.0\",\n    \"patch-package\": \"^8.0.0\",\n    \"prettier\": \"3.6.2\",\n    \"prettier-plugin-tailwindcss\": \"^0.7.1\",\n    \"tslib\": \"2.0.1\",\n    \"type-fest\": \"^4.15.0\",\n    \"typescript\": \"5.8.3\",\n    \"typescript-eslint\": \"^8.29.0\",\n    \"vitest\": \"^3.2.4\"\n  },\n  \"overrides\": {\n    \"ajv-draft-04\": {\n      \"ajv\": \"$ajv\"\n    },\n    \"jshint\": {\n      \"lodash\": \"4.18.1\"\n    }\n  },\n  \"dependencies\": {\n    \"@getinsomnia/node-libcurl\": \"3.2.2\",\n    \"ajv\": \"^8.17.1\"\n  }\n}\n",
    "strategic_keywords": [
      "rag",
      "workspace",
      "protocol"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "owner": "excalidraw",
    "name": "excalidraw",
    "full_name": "excalidraw/excalidraw",
    "url": "https://github.com/excalidraw/excalidraw",
    "description": "Virtual whiteboard for sketching hand-drawn like diagrams",
    "language": "TypeScript",
    "total_stars": 126373,
    "forks": 14188,
    "stars_this_period": 592,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "canvas",
        "collaboration",
        "diagrams",
        "drawing",
        "hacktoberfest",
        "productivity",
        "whiteboard"
      ],
      "license": "MIT",
      "open_issues": 3186,
      "created_at": "2020-01-02T01:04:43Z",
      "pushed_at": "2026-06-28T12:42:01Z",
      "homepage": "https://excalidraw.com",
      "default_branch": "master",
      "forks": 14188,
      "watchers": 493,
      "archived": false,
      "size_kb": 101452
    },
    "readme_content": "<a href=\"https://excalidraw.com/\" target=\"_blank\" rel=\"noopener\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" alt=\"Excalidraw\" srcset=\"https://excalidraw.nyc3.cdn.digitaloceanspaces.com/github/excalidraw_github_cover_2_dark.png\" />\n    <img alt=\"Excalidraw\" src=\"https://excalidraw.nyc3.cdn.digitaloceanspaces.com/github/excalidraw_github_cover_2.png\" />\n  </picture>\n</a>\n\n<h4 align=\"center\">\n  <a href=\"https://excalidraw.com\">Excalidraw Editor</a> |\n  <a href=\"https://plus.excalidraw.com/blog\">Blog</a> |\n  <a href=\"https://docs.excalidraw.com\">Documentation</a> |\n  <a href=\"https://plus.excalidraw.com\">Excalidraw+</a>\n</h4>\n\n<div align=\"center\">\n  <h2>\n    An open source virtual hand-drawn style whiteboard. </br>\n    Collaborative and end-to-end encrypted. </br>\n  <br />\n  </h2>\n</div>\n\n<br />\n<p align=\"center\">\n  <a href=\"https://github.com/excalidraw/excalidraw/blob/master/LICENSE\">\n    <img alt=\"Excalidraw is released under the MIT license.\" src=\"https://img.shields.io/badge/license-MIT-blue.svg\"  /></a>\n  <a href=\"https://www.npmjs.com/package/@excalidraw/excalidraw\">\n    <img alt=\"npm downloads/month\" src=\"https://img.shields.io/npm/dm/@excalidraw/excalidraw\"  /></a>\n  <a href=\"https://docs.excalidraw.com/docs/introduction/contributing\">\n    <img alt=\"PRs welcome!\" src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat\"  /></a>\n  <a href=\"https://discord.gg/UexuTaE\">\n    <img alt=\"Chat on Discord\" src=\"https://img.shields.io/discord/723672430744174682?color=738ad6&label=Chat%20on%20Discord&logo=discord&logoColor=ffffff&widget=false\"/></a>\n  <a href=\"https://deepwiki.com/excalidraw/excalidraw\">\n    <img alt=\"Ask DeepWiki\" src=\"https://deepwiki.com/badge.svg\" /></a>\n  <a href=\"https://twitter.com/excalidraw\">\n    <img alt=\"Follow Excalidraw on Twitter\" src=\"https://img.shields.io/twitter/follow/excalidraw.svg?label=follow+@excalidraw&style=social&logo=twitter\"/></a>\n</p>\n\n<div align=\"center\">\n  <figure>\n    <a href=\"https://excalidraw.com\" target=\"_blank\" rel=\"noopener\">\n      <img src=\"https://excalidraw.nyc3.cdn.digitaloceanspaces.com/github%2Fproduct_showcase.png\" alt=\"Product showcase\" />\n    </a>\n    <figcaption>\n      <p align=\"center\">\n        Create beautiful hand-drawn like diagrams, wireframes, or whatever you like.\n      </p>\n    </figcaption>\n  </figure>\n</div>\n\n## Features\n\nThe Excalidraw editor (npm package) supports:\n\n- 💯&nbsp;Free & open-source.\n- 🎨&nbsp;Infinite, canvas-based whiteboard.\n- ✍️&nbsp;Hand-drawn like style.\n- 🌓&nbsp;Dark mode.\n- 🏗️&nbsp;Customizable.\n- 📷&nbsp;Image support.\n- 😀&nbsp;Shape libraries support.\n- 🌐&nbsp;Localization (i18n) support.\n- 🖼️&nbsp;Export to PNG, SVG & clipboard.\n- 💾&nbsp;Open format - export drawings as an `.excalidraw` json file.\n- ⚒️&nbsp;Wide range of tools - rectangle, circle, diamond, arrow, line, free-draw, eraser...\n- ➡️&nbsp;Arrow-binding & labeled arrows.\n- 🔙&nbsp;Undo / Redo.\n- 🔍&nbsp;Zoom and panning support.\n\n## Excalidraw.com\n\nThe app hosted at [excalidraw.com](https://excalidraw.com) is a minimal showcase of what you can build with Excalidraw. Its [source code](https://github.com/excalidraw/excalidraw/tree/master/excalidraw-app) is part of this repository as well, and the app features:\n\n- 📡&nbsp;PWA support (works offline).\n- 🤼&nbsp;Real-time collaboration.\n- 🔒&nbsp;End-to-end encryption.\n- 💾&nbsp;Local-first support (autosaves to the browser).\n- 🔗&nbsp;Shareable links (export to a readonly link you can share with others).\n\nWe'll be adding these features as drop-in plugins for the npm package in the future.\n\n## Quick start\n\n**Note:** following instructions are for installing the Excalidraw [npm package](https://www.npmjs.com/package/@excalidraw/excalidraw) when integrating Excalidraw into your own app. To run the repository locally for development, please refer to our [Development Guide](https://docs.excalidraw.com/docs/introduction/development).\n\nUse `npm` or `yarn` to install the package.\n\n```bash\nnpm install react react-dom @excalidraw/excalidraw\n# or\nyarn add react react-dom @excalidraw/excalidraw\n```\n\nCheck out our [documentation](https://docs.excalidraw.com/docs/@excalidraw/excalidraw/installation) for more details!\n\n## Contributing\n\n- Missing something or found a bug? [Report here](https://github.com/excalidraw/excalidraw/issues).\n- Want to contribute? Check out our [contribution guide](https://docs.excalidraw.com/docs/introduction/contributing) or let us know on [Discord](https://discord.gg/UexuTaE).\n- Want to help with translations? See the [translation guide](https://docs.excalidraw.com/docs/introduction/contributing#translating).\n\n## Integrations\n\n- [VScode extension](https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor)\n- [npm package](https://www.npmjs.com/package/@excalidraw/excalidraw)\n\n## Who's integrating Excalidraw\n\n[Google Cloud](https://googlecloudcheatsheet.withgoogle.com/architecture) • [Meta](https://meta.com/) • [CodeSandbox](https://codesandbox.io/) • [Obsidian Excalidraw](https://github.com/zsviczian/obsidian-excalidraw-plugin) • [Replit](https://replit.com/) • [Slite](https://slite.com/) • [Notion](https://notion.so/) • [HackerRank](https://www.hackerrank.com/) • and many others\n\n## Sponsors & support\n\nIf you like the project, you can become a sponsor at [Open Collective](https://opencollective.com/excalidraw) or use [Excalidraw+](https://plus.excalidraw.com/).\n\n## Thank you for supporting Excalidraw\n\n[<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/0/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/0/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/1/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/1/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/2/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/2/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/3/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/3/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/4/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/4/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/5/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/5/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/6/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/6/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/7/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/7/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/8/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/8/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/9/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/9/website) [<img src=\"https://opencollective.com/excalidraw/tiers/sponsors/10/avatar.svg?avatarHeight=120\"/>](https://opencollective.com/excalidraw/tiers/sponsors/10/website)\n\n<a href=\"https://opencollective.com/excalidraw#category-CONTRIBUTE\" target=\"_blank\"><img src=\"https://opencollective.com/excalidraw/tiers/backers.svg?avatarHeight=32\"/></a>\n\nLast but not least, we're thankful to these companies for offering their services for free:\n\n[![Vercel](./.github/assets/vercel.svg)](https://vercel.com) [![Sentry](./.github/assets/sentry.svg)](https://sentry.io) [![Crowdin](./.github/assets/crowdin.svg)](https://crowdin.com)\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"private\": true,\n  \"name\": \"excalidraw-monorepo\",\n  \"packageManager\": \"yarn@1.22.22\",\n  \"workspaces\": [\n    \"excalidraw-app\",\n    \"packages/*\",\n    \"examples/*\"\n  ],\n  \"devDependencies\": {\n    \"@babel/preset-env\": \"7.26.9\",\n    \"@excalidraw/eslint-config\": \"1.0.3\",\n    \"@excalidraw/prettier-config\": \"1.0.2\",\n    \"@types/chai\": \"4.3.0\",\n    \"@types/jest\": \"27.4.0\",\n    \"@types/lodash.throttle\": \"4.1.7\",\n    \"@types/react\": \"19.0.10\",\n    \"@types/react-dom\": \"19.0.4\",\n    \"@types/socket.io-client\": \"3.0.0\",\n    \"@vitejs/plugin-react\": \"3.1.0\",\n    \"@vitest/coverage-v8\": \"3.0.7\",\n    \"@vitest/ui\": \"2.0.5\",\n    \"chai\": \"4.3.6\",\n    \"dotenv\": \"16.0.1\",\n    \"eslint-config-prettier\": \"8.5.0\",\n    \"eslint-config-react-app\": \"7.0.1\",\n    \"eslint-plugin-import\": \"2.31.0\",\n    \"eslint-plugin-prettier\": \"3.3.1\",\n    \"http-server\": \"14.1.1\",\n    \"husky\": \"7.0.4\",\n    \"jsdom\": \"22.1.0\",\n    \"lint-staged\": \"12.3.7\",\n    \"pepjs\": \"0.5.3\",\n    \"prettier\": \"2.6.2\",\n    \"rewire\": \"6.0.0\",\n    \"rimraf\": \"^5.0.0\",\n    \"typescript\": \"5.9.3\",\n    \"vite\": \"5.0.12\",\n    \"vite-plugin-checker\": \"0.7.2\",\n    \"vite-plugin-ejs\": \"1.7.0\",\n    \"vite-plugin-pwa\": \"0.21.1\",\n    \"vite-plugin-svgr\": \"4.2.0\",\n    \"vitest\": \"3.0.6\",\n    \"vitest-canvas-mock\": \"0.3.3\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"homepage\": \".\",\n  \"prettier\": \"@excalidraw/prettier-config\",\n  \"scripts\": {\n    \"build-node\": \"node ./scripts/build-node.js\",\n    \"build:app:docker\": \"yarn --cwd ./excalidraw-app build:app:docker\",\n    \"build:app\": \"yarn --cwd ./excalidraw-app build:app\",\n    \"build:common\": \"yarn --cwd ./packages/common build:esm\",\n    \"build:element\": \"yarn --cwd ./packages/element build:esm\",\n    \"build:excalidraw\": \"yarn --cwd ./packages/excalidraw build:esm\",\n    \"build:math\": \"yarn --cwd ./packages/math build:esm\",\n    \"build:fractional-indexing\": \"yarn --cwd ./packages/fractional-indexing build:esm\",\n    \"build:laser-pointer\": \"yarn --cwd ./packages/laser-pointer build:esm\",\n    \"build:packages\": \"yarn build:common && yarn build:fractional-indexing && yarn build:laser-pointer && yarn build:math && yarn build:element && yarn build:excalidraw\",\n    \"build:version\": \"yarn --cwd ./excalidraw-app build:version\",\n    \"build\": \"yarn --cwd ./excalidraw-app build\",\n    \"build:preview\": \"yarn --cwd ./excalidraw-app build:preview\",\n    \"start\": \"yarn --cwd ./excalidraw-app start\",\n    \"start:production\": \"yarn --cwd ./excalidraw-app start:production\",\n    \"start:example\": \"yarn build:packages && yarn --cwd ./examples/with-script-in-browser start\",\n    \"test:all\": \"yarn test:typecheck && yarn test:code && yarn test:other && yarn test:app --watch=false\",\n    \"test:app\": \"vitest\",\n    \"test:code\": \"eslint --max-warnings=0 --ext .js,.ts,.tsx .\",\n    \"test:other\": \"yarn prettier --list-different\",\n    \"test:typecheck\": \"tsc\",\n    \"test:update\": \"yarn test:app --update --watch=false\",\n    \"test\": \"yarn test:app\",\n    \"test:coverage\": \"vitest --coverage\",\n    \"test:coverage:watch\": \"vitest --coverage --watch\",\n    \"test:ui\": \"yarn test --ui --coverage.enabled=true\",\n    \"fix:code\": \"yarn test:code --fix\",\n    \"fix:other\": \"yarn prettier --write\",\n    \"fix\": \"yarn fix:other && yarn fix:code\",\n    \"locales-coverage\": \"node scripts/build-locales-coverage.js\",\n    \"locales-coverage:description\": \"node scripts/locales-coverage-description.js\",\n    \"prepare\": \"husky install\",\n    \"prettier\": \"prettier \\\"**/*.{css,scss,json,md,html,yml}\\\" --ignore-path=.eslintignore\",\n    \"release\": \"node scripts/release.js\",\n    \"release:test\": \"node scripts/release.js --tag=test\",\n    \"release:next\": \"node scripts/release.js --tag=next\",\n    \"release:latest\": \"node scripts/release.js --tag=latest\",\n    \"rm:build\": \"rimraf --glob excalidraw-app/build excalidraw-app/dist excalidraw-app/dev-dist packages/*/dist packages/*/build examples/*/build examples/*/dist\",\n    \"rm:node_modules\": \"rimraf --glob node_modules excalidraw-app/node_modules packages/*/node_modules\",\n    \"clean-install\": \"yarn rm:node_modules && yarn install\"\n  },\n  \"resolutions\": {\n    \"strip-ansi\": \"6.0.1\"\n  }\n}\n",
    "strategic_keywords": [
      "rag",
      "workspace"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 16,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 83
    },
    "strategic_score": 83
  },
  {
    "owner": "NVIDIA",
    "name": "skills",
    "full_name": "NVIDIA/skills",
    "url": "https://github.com/NVIDIA/skills",
    "description": "AI agent skills published by NVIDIA",
    "language": "Python",
    "total_stars": 2014,
    "forks": 224,
    "stars_this_period": 583,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "NOASSERTION",
      "open_issues": 13,
      "created_at": "2026-02-25T21:54:05Z",
      "pushed_at": "2026-06-26T20:38:17Z",
      "homepage": "https://docs.nvidia.com/skills",
      "default_branch": "main",
      "forks": 224,
      "watchers": 13,
      "archived": false,
      "size_kb": 12087
    },
    "readme_content": "<!-- SPDX-License-Identifier: Apache-2.0 AND CC-BY-4.0 -->\n<!-- Copyright (c) 2026 NVIDIA Corporation. All rights reserved. -->\n\n# NVIDIA Agent Skills\n\n**Official, NVIDIA-verified skills for AI agents.**\n\n[![NVIDIA](https://img.shields.io/badge/NVIDIA-Verified-76B900?style=flat&logo=nvidia&logoColor=white)](https://nvidia.com)\n[![Agent Skills Spec](https://img.shields.io/badge/Agent%20Skills-Specification-blue)](https://agentskills.io)\n[![License](https://img.shields.io/badge/License-Apache%202.0%20%2B%20CC--BY--4.0-green.svg)](LICENSE)\n\n> 📖 **Docs:** [docs.nvidia.com/skills](https://docs.nvidia.com/skills) &nbsp;·&nbsp;\n> 📺 **Livestream:** [From Vulnerable to Verified](https://www.youtube.com/watch?v=sVpKonYJ4D4&list=PL5B692fm6--vEL0FwctKghCpyEnBGAQJA&index=1) &nbsp;·&nbsp;\n> 📝 **Blog:** [NVIDIA Verified Agent Skills: Capability Governance for AI Agents](https://developer.nvidia.com/blog/nvidia-verified-agent-skills-provide-capability-governance-for-ai-agents/)\n\n---\n\nSkills are portable instruction sets that teach AI agents how to use NVIDIA software optimally, including CUDA-X libraries, AI Blueprints, and platform tools. This repository is a catalog: skills are maintained in their respective product repos, and mirrored here daily via an automated sync pipeline. Skills are being added continuously, so check back for updates. We are building this infrastructure in the open, and contributions are welcome. See the [Roadmap](#roadmap) for what is planned next.\n\n---\n\n## Quickstart\n\nInstall NVIDIA skills with the default [`skills` CLI](https://github.com/vercel-labs/skills) flow:\n\n```bash\nnpx skills add nvidia/skills\n```\n\nThe CLI runs through `npx` and prompts you to choose a skill and install destination. You do not need to clone this repo or copy skill folders by hand.\n\nThe skill is available the next time your agent loads skills and encounters a relevant task. For example, ask your agent to \"solve a linear programming problem with cuOpt\" and the skill guides it through the cuOpt Python API.\n\n### Install One Skill Without Prompts\n\nUse this when you already know the skill name and want to skip prompts.\n\n```bash\nnpx skills add nvidia/skills --skill cuopt-numerical-optimization-api-python --yes\n```\n\nReplace `cuopt-numerical-optimization-api-python` with any skill name from the [Skill Catalog](#skill-catalog).\n\n### Install for a Specific Agent\n\nUse `--agent` to target a specific AI coding agent. Initially, we'll support common client targets, expanding the list over time. For the full list of clients supported by the spec, see the [`skills` CLI Supported Agents table](https://github.com/vercel-labs/skills#supported-agents).\n\n**Claude Code**\n\n```bash\nnpx skills add nvidia/skills --skill cuopt-numerical-optimization-api-python --agent claude-code\n```\n\n**Codex**\n\n```bash\nnpx skills add nvidia/skills --skill cuopt-numerical-optimization-api-python --agent codex\n```\n\n**Cursor**\n\n```bash\nnpx skills add nvidia/skills --skill cuopt-numerical-optimization-api-python --agent cursor\n```\n\n**Kiro**\n\n```bash\nnpx skills add nvidia/skills --skill cuopt-numerical-optimization-api-python --agent kiro-cli\n```\n\nUse `--agent` more than once to install the same skill into multiple agents.\n\n```bash\nnpx skills add nvidia/skills \\\n  --skill cuopt-numerical-optimization-api-python \\\n  --agent claude-code \\\n  --agent codex \\\n  --agent cursor \\\n  --agent kiro-cli\n```\n\n### Browse the Catalog\n\nUse this when you want to see available NVIDIA skills before installing anything.\n\n```bash\nnpx skills add nvidia/skills --list\n```\n\nFor non-interactive installs, global installs, agent-specific installs, updates, removals, and fallback manual copying, see [Advanced installation](docs/advanced-install.mdx).\n\n---\n\n## Skill Catalog\n\n<!-- skills-table-start -->\n| Product | Description | Skills |\n|---------|-------------|--------|\n| **AIQ** | NVIDIA AI-Q Blueprint - deploy local AI-Q services and run shallow or deep research workflows as agent skills. | [`aiq-research`](skills/aiq-research), [`aiq-deploy`](skills/aiq-deploy) |\n| **CUDA-Q** | CUDA Quantum — onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications. | [`cudaq-guide`](skills/cudaq-guide) |\n| **cuDF** | Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV/Parquet I/O, nullable semantics, and multi-GPU DataFrame workloads. | [`accelerated-computing-cudf`](skills/accelerated-computing-cudf) |\n| **cuFOLIO** | GPU-accelerated Mean-CVaR portfolio optimization with NVIDIA cuOpt — CVaR optimization, efficient frontier, scenario generation, backtesting, and rebalancing. | [`cufolio`](skills/cufolio) |\n| **cuOpt** | GPU-accelerated optimization — vehicle routing, linear programming, quadratic programming, installation, server deployment, and developer tools. | [`cuopt-developer`](skills/cuopt-developer), [`cuopt-install`](skills/cuopt-install), [`cuopt-numerical-optimization-api-c`](skills/cuopt-numerical-optimization-api-c), [`cuopt-numerical-optimization-api-cli`](skills/cuopt-numerical-optimization-api-cli), [`cuopt-numerical-optimization-api-python`](skills/cuopt-numerical-optimization-api-python), [`cuopt-numerical-optimization-formulation`](skills/cuopt-numerical-optimization-formulation), [`cuopt-routing-api-python`](skills/cuopt-routing-api-python), [`cuopt-routing-formulation`](skills/cuopt-routing-formulation), [`cuopt-server-api-python`](skills/cuopt-server-api-python), [`cuopt-server-common`](skills/cuopt-server-common), [`cuopt-skill-evolution`](skills/cuopt-skill-evolution), [`cuopt-user-rules`](skills/cuopt-user-rules) |\n| **cuPyNumeric** | NumPy and SciPy on multi-node multi-GPU systems — skills to help with installing cuPyNumeric, migrating existing NumPy code, and doing parallel I/O | [`cupynumeric-hdf5`](skills/cupynumeric-hdf5), [`cupynumeric-install`](skills/cupynumeric-install), [`cupynumeric-migration-readiness`](skills/cupynumeric-migration-readiness), [`cupynumeric-parallel-data-load`](skills/cupynumeric-parallel-data-load) |\n| **DALI** | GPU-accelerated data loading and processing with NVIDIA DALI. | [`dali-dynamic-mode`](skills/dali-dynamic-mode) |\n| **Data Designer** | Build declarative synthetic dataset generation pipelines with NeMo Data Designer. | [`data-designer`](skills/data-designer) |\n| **DeepStream** | Agentic skills for guided DeepStream development. | [`deepstream-dev`](skills/deepstream-dev), [`deepstream-import-vision-model`](skills/deepstream-import-vision-model) |\n| **Digital Health** | Agent skills for the clinical ASR evaluation flywheel — term curation, synthetic clinical-speech benchmark generation, KER (Keyword Error Rate) scoring, and fine-tune guidance. | [`digital-health-clinical-asr-setup`](skills/digital-health-clinical-asr-setup), [`digital-health-clinical-asr-build`](skills/digital-health-clinical-asr-build), [`digital-health-clinical-asr-eval`](skills/digital-health-clinical-asr-eval), [`digital-health-clinical-asr-finetune`](skills/digital-health-clinical-asr-finetune) |\n| **Dynamo** | NVIDIA Dynamo deployment bring-up on Kubernetes — pick and deploy recipes, start router modes, validate disagg NIXL/UCX/NCCL interconnect, and triage day-2 failures. | [`dynamo-interconnect-check`](skills/dynamo-interconnect-check), [`dynamo-recipe-runner`](skills/dynamo-recipe-runner), [`dynamo-router-starter`](skills/dynamo-router-starter), [`dynamo-troubleshoot`](skills/dynamo-troubleshoot) |\n| **Earth2Studio** | Open-source deep-learning framework for exploring, building and deploying AI weather/climate workflows. | [`earth2studio-data-fetch`](skills/earth2studio-data-fetch), [`earth2studio-deterministic-forecast`](skills/earth2studio-deterministic-forecast), [`earth2studio-discover`](skills/earth2studio-discover), [`earth2studio-install`](skills/earth2studio-install) |\n| **Holoscan SDK** | Install and set up the Holoscan SDK on any platform (container, Debian, Python, Conda, or source). | [`holoscan-install-debian`](skills/holoscan-install-debian), [`holoscan-install-source`](skills/holoscan-install-source), [`holoscan-install-wheel`](skills/holoscan-install-wheel), [`holoscan-install-conda`](skills/holoscan-install-conda), [`holoscan-install-container`](skills/holoscan-install-container), [`holoscan-setup`](skills/holoscan-setup) |\n| **Holoscan Sensor Bridge** | Agent-ready skills for Holoscan Sensor Bridge devkit workflows, covering demo environment bring-up, FPGA flashing for Lattice and VB1940 hardware, example application execution, and QA test-plan automation. | [`hsb-setup`](skills/hsb-setup), [`hsb-flash`](skills/hsb-flash), [`hsb-app`](skills/hsb-app), [`hsb-test`](skills/hsb-test) |\n| **Jetson BSP** | Agentic skills for setting up and customizing an NVIDIA Jetson Linux Board Support Package (BSP) — pick a target, prepare image and sources, customize IO (camera, PCIe, USB, pinmux, clocks, and more), then promote, flash, and validate. | [`jetson-build-source`](skills/jetson-build-source), [`jetson-customize-camera`](skills/jetson-customize-camera), [`jetson-customize-clocks`](skills/jetson-customize-clocks), [`jetson-customize-fan`](skills/jetson-customize-fan), [`jetson-customize-mgbe`](skills/jetson-customize-mgbe), [`jetson-customize-nvpmodel`](skills/jetson-customize-nvpmodel), [`jetson-customize-pcie`](skills/jetson-customize-pcie), [`jetson-customize-pinmux`](skills/jetson-customize-pinmux), [`jetson-customize-uphy`](skills/jetson-customize-uphy), [`jetson-customize-usb`](skills/jetson-customize-usb), [`jetson-derive-carrier`](skills/jetson-derive-carrier), [`jetson-download-bsp`](skills/jetson-download-bsp), [`jetson-flash-image`](skills/jetson-flash-image), [`jetson-generate-kb`](skills/jetson-generate-kb), [`jetson-init-image`](skills/jetson-init-image), [`jetson-init-source`](skills/jetson-init-source), [`jetson-init-target`](skills/jetson-init-target), [`jetson-link-docs`](skills/jetson-link-docs), [`jetson-optimize-memory`](skills/jetson-optimize-memory), [`jetson-print-bsp-info`](skills/jetson-print-bsp-info), [`jetson-promote-image`](skills/jetson-promote-image), [`jetson-quick-start`](skills/jetson-quick-start), [`jetson-set-target`](skills/jetson-set-target), [`jetson-validate-image`](skills/jetson-validate-image) |\n| **Jetson Device** | Device-side agent skills for working with a live NVIDIA Jetson after boot — diagnostics, memory auditing, headless setup, inference memory tuning, LLM serving and benchmarking, packaging guidance, and speculative decoding. | [`jetson-diagnostic`](skills/jetson-diagnostic), [`jetson-headless-mode`](skills/jetson-headless-mode), [`jetson-inference-mem-tune`](skills/jetson-inference-mem-tune), [`jetson-llm-benchmark`](skills/jetson-llm-benchmark), [`jetson-llm-serve`](skills/jetson-llm-serve), [`jetson-memory-audit`](skills/jetson-memory-audit), [`jetson-package`](skills/jetson-package), [`jetson-print-device-info`](skills/jetson-print-device-info), [`jetson-speculative-decoding`](skills/jetson-speculative-decoding) |\n| **Medical AI Skills** | Agent-ready medical AI skills built on MONAI for DICOM handling, NVIDIA-hosted medical imaging model workflows, segmentation, synthesis, and evidence-oriented evaluation. | [`dicom-metadata-extract`](skills/dicom-metadata-extract), [`dicom-series-preflight`](skills/dicom-series-preflight), [`dicom-series-to-volume`](skills/dicom-series-to-volume), [`nv-generate-ct-rflow`](skills/nv-generate-ct-rflow), [`nv-generate-mr`](skills/nv-generate-mr), [`nv-generate-mr-brain`](skills/nv-generate-mr-brain), [`nv-generate-mr-brain-finetune`](skills/nv-generate-mr-brain-finetune), [`nv-generate-vae-finetune`](skills/nv-generate-vae-finetune), [`nv-reason-cxr`](skills/nv-reason-cxr), [`nv-segment-ct`](skills/nv-segment-ct), [`nv-segment-ct-finetune`](skills/nv-segment-ct-finetune), [`nv-segment-ctmr`](skills/nv-segment-ctmr) |\n| **Megatron-Core** | Large-scale distributed training — model parallelism, pipeline parallelism, and mi",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "medium",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 20,
      "novelty": 4,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 79
    },
    "strategic_score": 79
  },
  {
    "owner": "modem-dev",
    "name": "hunk",
    "full_name": "modem-dev/hunk",
    "url": "https://github.com/modem-dev/hunk",
    "description": "Review-first terminal diff viewer for agentic coders",
    "language": "TypeScript",
    "total_stars": 5761,
    "forks": 151,
    "stars_this_period": 556,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "cli",
        "code-review",
        "diff",
        "git",
        "tui"
      ],
      "license": "MIT",
      "open_issues": 70,
      "created_at": "2026-03-17T19:16:15Z",
      "pushed_at": "2026-06-28T14:29:29Z",
      "homepage": "https://hunk.dev",
      "default_branch": "main",
      "forks": 151,
      "watchers": 9,
      "archived": false,
      "size_kb": 4556
    },
    "readme_content": "# hunk\n\nHunk is a review-first terminal diff viewer for agent-authored changesets, built on [OpenTUI](https://github.com/anomalyco/opentui) and [Pierre diffs](https://www.npmjs.com/package/@pierre/diffs).\n\n[![CI status](https://img.shields.io/github/actions/workflow/status/modem-dev/hunk/ci.yml?branch=main&style=for-the-badge&label=CI)](https://github.com/modem-dev/hunk/actions/workflows/ci.yml?branch=main)\n[![Latest release](https://img.shields.io/github/v/release/modem-dev/hunk?style=for-the-badge)](https://github.com/modem-dev/hunk/releases)\n[![MIT License](https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge)](LICENSE)\n\n- multi-file review stream with sidebar navigation\n- inline AI and agent annotations beside the code\n- split, stack, and responsive auto layouts\n- watch mode for auto-reloading file and Git-backed reviews\n- keyboard, mouse, pager, and Git difftool support\n\n<table>\n <tr>\n   <td width=\"60%\" align=\"center\">\n    <img width=\"845\" alt=\"image\" src=\"https://github.com/user-attachments/assets/35605618-be3f-479e-b6e0-edb089910651\" />\n     <br />\n     <sub>Split view with sidebar and inline AI notes</sub>\n   </td>\n   <td width=\"40%\" align=\"center\">\n     <img width=\"507\"alt=\"image\" src=\"https://github.com/user-attachments/assets/92eb8993-f044-436d-a038-8139da5ad8de\" />\n     <br />\n     <sub>Stacked view and mouse-selectable menus</sub>\n   </td>\n </tr>\n</table>\n\n## Install\n\n```bash\nnpm i -g hunkdiff\n```\n\nOr with Homebrew:\n\n```bash\nbrew install modem-dev/tap/hunk\n```\n\nRequirements:\n\n- Node.js 18+\n- macOS, Linux, or Windows\n- Git recommended for most workflows\n\n> Nix users can use the `default` package exported in `flake.nix` instead. See [nix/README.md](./nix/README.md) for details.\n\n## Quick start\n\n```bash\nhunk           # show help\nhunk --version # print the installed version\n```\n\n### Working with Git\n\nHunk mirrors Git's diff-style commands, but opens the changeset in a review UI instead of plain text.\n\n```bash\nhunk diff                      # review current repo changes, including untracked files\nhunk diff --watch              # auto-reload as the working tree changes\nhunk show                      # review the latest commit\nhunk show HEAD~1               # review an earlier commit\n```\n\n### Working with Jujutsu and Sapling\n\nHunk auto-detects Jujutsu and Sapling checkouts, so `hunk diff [revset]` and `hunk show [revset]` use native revsets inside jj or Sapling workspaces. To override VCS detection, set `vcs = \"git\"` or `vcs = \"jj\"` or `vcs = \"sl\"` in [config](#config).\n\n### Working with raw files and patches\n\n```bash\nhunk diff before.ts after.ts                # compare two files directly\nhunk diff before.ts after.ts --watch        # auto-reload when either file changes\ngit diff --no-color | hunk patch -          # review a patch from stdin\n```\n\n### Working with agents\n\n1. Open Hunk in another terminal with `hunk diff` or `hunk show`.\n2. Tell your agent to add the skill file returned by `hunk skill path`.\n3. Ask your agent to use the skill against the live Hunk session.\n\nA good generic prompt is:\n\n```text\nLoad the Hunk skill and use it for this review. Run `hunk skill path` to get the skill path.\n```\n\nFor the full live-session and `--agent-context` workflow guide, see [docs/agent-workflows.md](docs/agent-workflows.md).\n\n## Feature comparison\n\n| Capability                         | [hunk](https://github.com/modem-dev/hunk) | [lumen](https://github.com/jnsahaj/lumen) | [difftastic](https://github.com/Wilfred/difftastic) | [delta](https://github.com/dandavison/delta) | [diff-so-fancy](https://github.com/so-fancy/diff-so-fancy) | [diff](https://www.gnu.org/software/diffutils/) |\n| ---------------------------------- | ----------------------------------------- | ----------------------------------------- | --------------------------------------------------- | -------------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------- |\n| Review-first interactive UI        | ✅                                        | ✅                                        | ❌                                                  | ❌                                           | ❌                                                         | ❌                                              |\n| Multi-file review stream + sidebar | ✅                                        | ✅                                        | ❌                                                  | ❌                                           | ❌                                                         | ❌                                              |\n| Inline agent / AI annotations      | ✅                                        | ❌                                        | ❌                                                  | ❌                                           | ❌                                                         | ❌                                              |\n| Responsive auto split/stack layout | ✅                                        | ❌                                        | ❌                                                  | ❌                                           | ❌                                                         | ❌                                              |\n| Mouse support inside the viewer    | ✅                                        | ✅                                        | ❌                                                  | ❌                                           | ❌                                                         | ❌                                              |\n| Runtime view toggles               | ✅                                        | ✅                                        | ❌                                                  | ❌                                           | ❌                                                         | ❌                                              |\n| Syntax highlighting                | ✅                                        | ✅                                        | ✅                                                  | ✅                                           | ❌                                                         | ❌                                              |\n| Structural diffing                 | ❌                                        | ❌                                        | ✅                                                  | ❌                                           | ❌                                                         | ❌                                              |\n| Pager-compatible mode              | ✅                                        | ❌                                        | ✅                                                  | ✅                                           | ✅                                                         | ✅                                              |\n\nHunk is optimized for reviewing a full changeset interactively.\n\n## Advanced\n\n### Config\n\nYou can persist preferences to a config file:\n\n- `~/.config/hunk/config.toml`\n- `.hunk/config.toml`\n\nExample:\n\n```toml\ntheme = \"github-dark-default\" # any built-in theme id, auto, or custom\nmode = \"auto\"        # auto, split, stack\nvcs = \"git\"          # git, jj, sl\nwatch = false\nexclude_untracked = false\nline_numbers = true\nwrap_lines = false\nmenu_bar = true\nagent_notes = false\ntransparent_background = false\n```\n\n`theme = \"auto\"` and `--theme auto` query the terminal background at startup, choose `github-light-default` for light backgrounds and `github-dark-default` for dark backgrounds, and fall back to `github-dark-default` if the terminal does not answer.\nOlder theme ids such as `graphite` and `paper` remain accepted as compatibility aliases.\n`exclude_untracked` affects Git/Sapling working-tree `hunk diff` sessions only.\n`transparent_background` can also be written as `transparentBackground`.\n\nCustom themes can inherit from any built-in theme and override only the colors you care about:\n\n```toml\ntheme = \"custom\"\n\n[custom_theme]\nbase = \"catppuccin-mocha\"\nlabel = \"My Theme\"\naccent = \"#7fd1ff\"\npanel = \"#10161d\"\nnoteBorder = \"#c49bff\"\n\n[custom_theme.syntax]\nkeyword = \"#8ed4ff\"\nstring = \"#c7b4ff\"\ncomment = \"#6e85a7\"\noperator = \"#7fd1ff\"\nvariable = \"#eef4ff\"\n```\n\nAll custom theme colors must use `#rrggbb` hex values. Press `t` in the app, or choose `View -> Themes…`, to open the theme selector.\n\n### Git integration\n\nSet Hunk as your Git pager so `git diff` and `git show` open in Hunk automatically:\n\n> [!NOTE]\n> Untracked files are auto-included only for Hunk's own `hunk diff` working-tree loader. If you open `git diff` through `hunk pager`, Git still decides the patch contents, so untracked files will not appear there.\n\n```bash\ngit config --global core.pager \"hunk pager\"\n```\n\nOr in your Git config:\n\n```ini\n[core]\n    pager = hunk pager\n```\n\nIf you want to keep Git's default pager and add opt-in aliases instead:\n\n```bash\ngit config --global alias.hdiff \"-c core.pager=\\\"hunk pager\\\" diff\"\ngit config --global alias.hshow \"-c core.pager=\\\"hunk pager\\\" show\"\n```\n\n### Jujutsu pager integration\n\nTo use Hunk as jj's pager, run `jj config edit --user` and update:\n\n```toml\n[ui]\npager = [\"hunk\", \"pager\"]\ndiff-formatter = \":git\"\n```\n\n### Sapling pager integration\n\nTo use Hunk as Sapling's pager, run `sl config -u` and update:\n\n```ini\n[pager]\npager = hunk pager\n```\n\n### OpenTUI component\n\nHunk also publishes `HunkDiffView` and lower-level primitives from `hunkdiff/opentui` for embedding the same diff renderer in your own OpenTUI app.\n\nSee [docs/opentui-component.md](docs/opentui-component.md) for install, API, and runnable examples.\n\n## Examples\n\nReady-to-run demo diffs live in [`examples/`](examples/README.md).\n\nEach example includes the exact command to run from the repository root.\n\n## Contributing\n\n💬 _Chat with users/contributors on the [Modem Discord server](https://discord.gg/WZFjaP6Gt8)_\n\nFor source setup, tests, packaging checks, and repo architecture, see [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Sponsor\n\nSponsored by [Modem](https://modem.dev?utm_source=github&utm_medium=oss&utm_campaign=oss_hunk&utm_content=readme_footer).\n\n<a href=\"https://modem.dev?utm_source=github&utm_medium=oss&utm_campaign=oss_hunk&utm_content=readme_footer\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://modem.dev/images/logo/svg/modem-combined-white.svg\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"https://modem.dev/images/logo/svg/modem-combined-black.svg\">\n    <img src=\"https://modem.dev/images/logo/svg/modem-combined-black.svg\" alt=\"Modem\" width=\"220\">\n  </picture>\n</a>\n\n## License\n\n[MIT](LICENSE)\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"hunkdiff\",\n  \"version\": \"0.16.0\",\n  \"description\": \"Desktop-inspired terminal diff viewer for understanding agent-authored changesets.\",\n  \"keywords\": [\n    \"ai\",\n    \"code-review\",\n    \"diff\",\n    \"git\",\n    \"terminal\",\n    \"tui\"\n  ],\n  \"homepage\": \"https://github.com/modem-dev/hunk#readme\",\n  \"bugs\": {\n    \"url\": \"https://github.com/modem-dev/hunk/issues\"\n  },\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/modem-dev/hunk.git\"\n  },\n  \"bin\": {\n    \"hunk\": \"./bin/hunk.cjs\",\n    \"hunkdiff\": \"./bin/hunk.cjs\"\n  },\n  \"workspaces\": [\n    \".\",\n    \"packages/*\"\n  ],\n  \"files\": [\n    \"bin\",\n    \"dist/npm\",\n    \"skills\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"type\": \"module\",\n  \"exports\": {\n    \"./opentui\": {\n      \"types\": \"./dist/npm/opentui/index.d.ts\",\n      \"import\": \"./dist/npm/opentui/index.js\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"scripts\": {\n    \"start\": \"bun run src/main.tsx\",\n    \"dev\": \"bun --watch src/main.tsx\",\n    \"build:npm\": \"bun run ./scripts/build-npm.ts\",\n    \"build:bin\": \"bun run ./scripts/build-bin.ts\",\n    \"build:prebuilt:npm\": \"bun run build:npm && bun run build:bin && bun run ./scripts/stage-prebuilt-npm.ts\",\n    \"build:prebuilt:artifact\": \"bun run build:bin && bun run ./scripts/build-prebuilt-artifact.ts\",\n    \"stage:prebuilt:release\": \"bun run build:npm && bun run ./scripts/stage-prebuilt-npm.ts --artifact-root ./dist/release/artifacts\",\n    \"install:bin\": \"bun run ./scripts/install-bin.ts\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"format\": \"oxfmt --write .\",\n    \"format:check\": \"oxfmt --check .\",\n    \"lint\": \"oxlint . --deny-warnings\",\n    \"lint:fix\": \"oxlint . --fix\",\n    \"changeset\": \"bunx @changesets/cli@2.31.0\",\n    \"changeset:status\": \"bunx @changesets/cli@2.31.0 status\",\n    \"release:version\": \"bunx @changesets/cli@2.31.0 version\",\n    \"prepare\": \"simple-git-hooks\",\n    \"test\": \"\\\"${npm_execpath:-bun}\\\" test ./src ./packages ./scripts ./test/cli ./test/session\",\n    \"test:theme-contrast\": \"bun test src/ui/themes.test.ts --test-name-pattern contrast\",\n    \"test:integration\": \"\\\"${npm_execpath:-bun}\\\" test ./test/pty\",\n    \"test:tty-smoke\": \"HUNK_RUN_TTY_SMOKE=1 \\\"${npm_execpath:-bun}\\\" test ./test/smoke\",\n    \"check:pack\": \"bun run ./scripts/check-pack.ts\",\n    \"check:prebuilt-pack\": \"bun run ./scripts/check-prebuilt-pack.ts\",\n    \"smoke:prebuilt-install\": \"bun run ./scripts/smoke-prebuilt-install.ts\",\n    \"publish:prebuilt:npm\": \"bun run ./scripts/publish-prebuilt-npm.ts\",\n    \"update:homebrew-formula\": \"bun run ./scripts/update-homebrew-formula.ts\",\n    \"prepack\": \"bun run build:npm\",\n    \"bench\": \"bun run benchmarks/run.ts\",\n    \"bench:release\": \"bun run ./scripts/run-release-benchmark.ts\",\n    \"bench:release:compare\": \"bun run ./scripts/compare-release-benchmarks.ts\",\n    \"bench:bootstrap-load\": \"bun run benchmarks/bootstrap-load.ts\",\n    \"bench:working-tree-load\": \"bun run benchmarks/working-tree-load.ts\",\n    \"bench:changeset-parse\": \"bun run benchmarks/changeset-parse.ts\",\n    \"bench:render-layout\": \"bun run benchmarks/render-layout.ts\",\n    \"bench:highlight-prefetch\": \"bun run benchmarks/highlight-prefetch.ts\",\n    \"bench:large-stream\": \"bun run benchmarks/large-stream.ts\",\n    \"bench:interaction-latency\": \"bun run benchmarks/interaction-latency.ts\",\n    \"bench:non-ascii-stream\": \"bun run benchmarks/non-ascii-stream.ts\",\n    \"bench:huge-stream\": \"bun run benchmarks/huge-stream.ts\",\n    \"bench:large-stream-profile\": \"bun run benchmarks/large-stream-profile.ts\",\n    \"bench:memory\": \"bun run benchmarks/memory.ts\",\n    \"bench:navigation-memory\": \"bun run benchmarks/navigation-memory.ts\",\n    \"bench:resize-memory\": \"bun run benchmarks/resize-memory.ts\",\n    \"bench:daemon-memory\": \"bun run scripts/daemon-memory-check.ts\",\n    \"bench:competitors\": \"bun run benchmarks/competitors.ts\",\n    \"nix:update-lock\": \"nix run .#update-bun-lock\"\n  },\n  \"dependencies\": {\n    \"@pierre/diffs\": \"1.2.2\",\n    \"bun\": \"^1.3.10\",\n    \"commander\": \"^14.0.3\",\n    \"diff\": \"^8.0.3\",\n    \"shell-quote\": \"1.8.4\",\n    \"string-width\": \"^8.2.1\",\n    \"zod\": \"^4.3.6\"\n  },\n  \"devDependencies\": {\n    \"@hunk/session-broker\": \"workspace:*\",\n    \"@hunk/session-broker-bun\": \"workspace:*\",\n    \"@hunk/session-broker-core\": \"workspace:*\",\n    \"@hunk/session-broker-node\": \"workspace:*\",\n    \"@opentui/core\": \"^0.1.89\",\n    \"@opentui/react\": \"^0.1.89\",\n    \"@types/bun\": \"1.3.13\",\n    \"@types/react\": \"^19.2.14\",\n    \"@types/shell-quote\": \"1.7.5\",\n    \"@types/ws\": \"^8.18.1\",\n    \"lint-staged\": \"^16.4.0\",\n    \"oxfmt\": \"^0.41.0\",\n    \"oxlint\": \"^1.56.0\",\n    \"react\": \"^19.2.4\",\n    \"simple-git-hooks\": \"^2.13.1\",\n    \"tuistory\": \"^0.0.16\",\n    \"typescript\": \"^5.9.3\"\n  },\n  \"peerDependencies\": {\n    \"@opentui/core\": \"^0.1.89\",\n    \"@opentui/react\": \"^0.1.89\",\n    \"react\": \"^19.2.4\"\n  },\n  \"simple-git-hooks\": {\n    \"pre-commit\": \"bunx lint-staged\"\n  },\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"packageManager\": \"bun@1",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "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": 8,
      "total": 96
    },
    "strategic_score": 96
  },
  {
    "owner": "commaai",
    "name": "openpilot",
    "full_name": "commaai/openpilot",
    "url": "https://github.com/commaai/openpilot",
    "description": "openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300+ supported cars.",
    "language": "Python",
    "total_stars": 62351,
    "forks": 11090,
    "stars_this_period": 536,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "advanced-driver-assistance-systems",
        "driver-assistance-systems",
        "robotics"
      ],
      "license": "MIT",
      "open_issues": 143,
      "created_at": "2016-11-24T01:33:30Z",
      "pushed_at": "2026-06-28T18:13:45Z",
      "homepage": "https://comma.ai/openpilot",
      "default_branch": "master",
      "forks": 11090,
      "watchers": 1318,
      "archived": false,
      "size_kb": 1152204
    },
    "readme_content": "<div align=\"center\" style=\"text-align: center;\">\n\n<h1>openpilot</h1>\n\n<p>\n  <b>openpilot is an operating system for robotics.</b>\n  <br>\n  Currently, it upgrades the driver assistance system in 300+ supported cars.\n</p>\n\n<h3>\n  <a href=\"https://docs.comma.ai\">Docs</a>\n  <span> · </span>\n  <a href=\"https://docs.comma.ai/contributing/roadmap/\">Roadmap</a>\n  <span> · </span>\n  <a href=\"https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md\">Contribute</a>\n  <span> · </span>\n  <a href=\"https://discord.comma.ai\">Community</a>\n  <span> · </span>\n  <a href=\"https://comma.ai/shop\">Try it on a comma four</a>\n</h3>\n\nQuick start: `bash <(curl -fsSL openpilot.comma.ai)`\n\n[![openpilot tests](https://github.com/commaai/openpilot/actions/workflows/tests.yaml/badge.svg)](https://github.com/commaai/openpilot/actions/workflows/tests.yaml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![X Follow](https://img.shields.io/twitter/follow/comma_ai)](https://x.com/comma_ai)\n[![Discord](https://img.shields.io/discord/469524606043160576)](https://discord.comma.ai)\n\n</div>\n\n<table>\n  <tr>\n    <td><a href=\"https://youtu.be/NmBfgOanCyk\" title=\"Video By Greer Viau\"><img src=\"https://github.com/commaai/openpilot/assets/8762862/2f7112ae-f748-4f39-b617-fabd689c3772\"></a></td>\n    <td><a href=\"https://youtu.be/VHKyqZ7t8Gw\" title=\"Video By Logan LeGrand\"><img src=\"https://github.com/commaai/openpilot/assets/8762862/92351544-2833-40d7-9e0b-7ef7ae37ec4c\"></a></td>\n    <td><a href=\"https://youtu.be/SUIZYzxtMQs\" title=\"A drive to Taco Bell\"><img src=\"https://github.com/commaai/openpilot/assets/8762862/05ceefc5-2628-439c-a9b2-89ce77dc6f63\"></a></td>\n  </tr>\n</table>\n\n\nUsing openpilot in a car\n------\n\nTo use openpilot in a car, you need four things:\n1. **Supported Device:** a comma four, available at [comma.ai/shop/comma-four](https://www.comma.ai/shop/comma-four).\n2. **Software:** The setup procedure for the comma four allows users to enter a URL for custom software. Use the URL `openpilot.comma.ai` to install the release version.\n3. **Supported Car:** Ensure that you have one of [the 300+ supported cars](docs/CARS.md).\n4. **Car Harness:** You will also need a [car harness](https://comma.ai/shop/car-harness) to connect your comma four to your car.\n\nWe have detailed instructions for [how to install the harness and device in a car](https://comma.ai/setup). Note that it's possible to run openpilot on [other hardware](https://blog.comma.ai/self-driving-car-for-free/), although it's not plug-and-play.\n\n\n### Branches\n\nRunning `master` and other branches directly is supported, but it's recommended to run one of the following prebuilt branches:\n\n| comma four branch      | comma 3X branch        | URL                                    | description                                                                         |\n|------------------------|------------------------|----------------------------------------|-------------------------------------------------------------------------------------|\n| `release-mici`         | `release-tizi`         | openpilot.comma.ai                     | This is openpilot's release branch.                                                 |\n| `release-mici-staging` | `release-tizi-staging` | openpilot-test.comma.ai                | This is the staging branch for releases. Use it to get new releases slightly early. |\n| `nightly`              | `nightly`              | openpilot-nightly.comma.ai             | This is the bleeding edge development branch. Do not expect this to be stable.      |\n| `nightly-dev`          | `nightly-dev`          | installer.comma.ai/commaai/nightly-dev | Same as nightly, but includes experimental development features for some cars.      |\n\nTo start developing openpilot\n------\n\nopenpilot is developed by [comma](https://comma.ai/) and by users like you. We welcome both pull requests and issues on [GitHub](http://github.com/commaai/openpilot).\n\n* Join the [community Discord](https://discord.comma.ai)\n* Check out [the contributing docs](docs/CONTRIBUTING.md)\n* Check out the [openpilot tools](openpilot/tools/)\n* Code documentation lives at https://docs.comma.ai\n* Information about running openpilot lives on the [community wiki](https://github.com/commaai/openpilot/wiki)\n\nWant to get paid to work on openpilot? [comma is hiring](https://comma.ai/jobs#open-positions) and offers lots of [bounties](https://comma.ai/bounties) for external contributors.\n\nSafety and Testing\n----\n\n* openpilot observes [ISO26262](https://en.wikipedia.org/wiki/ISO_26262) guidelines, see [SAFETY.md](docs/SAFETY.md) for more details.\n* openpilot has software-in-the-loop [tests](.github/workflows/tests.yaml) that run on every commit.\n* The code enforcing the safety model lives in panda and is written in C, see [code rigor](https://github.com/commaai/panda#code-rigor) for more details.\n* panda has software-in-the-loop [safety tests](https://github.com/commaai/panda/tree/master/tests/safety).\n* Internally, we have a hardware-in-the-loop Jenkins test suite that builds and unit tests the various processes.\n* panda has additional hardware-in-the-loop [tests](https://github.com/commaai/panda/blob/master/Jenkinsfile).\n* We run the latest openpilot in a testing closet containing 10 comma devices continuously replaying routes.\n\n<details>\n<summary>MIT Licensed</summary>\n\nopenpilot is released under the MIT license. Some parts of the software are released under other licenses as specified.\n\nAny user of this software shall indemnify and hold harmless Comma.ai, Inc. and its directors, officers, employees, agents, stockholders, affiliates, subcontractors and customers from and against all allegations, claims, actions, suits, demands, damages, liabilities, obligations, losses, settlements, judgments, costs and expenses (including without limitation attorneys’ fees and costs) which arise out of, relate to or result from any use of this software by user.\n\n**THIS IS ALPHA QUALITY SOFTWARE FOR RESEARCH PURPOSES ONLY. THIS IS NOT A PRODUCT.\nYOU ARE RESPONSIBLE FOR COMPLYING WITH LOCAL LAWS AND REGULATIONS.\nNO WARRANTY EXPRESSED OR IMPLIED.**\n</details>\n\n<details>\n<summary>User Data and comma Account</summary>\n\nBy default, openpilot uploads driving data to our servers. You can also access your data through [comma connect](https://connect.comma.ai/). We use your data to train better models and improve openpilot for everyone.\n\nopenpilot is open source software, and users can disable data collection if they wish.\n\nopenpilot logs the road-facing cameras, CAN, GPS, IMU, magnetometer, thermal sensors, crashes, and operating system logs.\nThe driver-facing camera and microphone are only logged if you explicitly opt-in in settings.\n\nBy using openpilot, you agree to [our Privacy Policy](https://comma.ai/privacy). You understand that use of this software or its related services will generate certain types of user data, which may be logged and stored at the sole discretion of comma. By accepting this agreement, you grant an irrevocable, perpetual, worldwide right to comma for the use of this data.\n</details>\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"openpilot\"\nrequires-python = \">= 3.12.3, < 3.13\"\nlicense = {text = \"MIT License\"}\nversion = \"0.1.0\"\ndescription = \"an open source driver assistance system\"\nauthors = [\n  {name = \"Vehicle Researcher\", email=\"user@comma.ai\"}\n]\n\ndependencies = [\n  # multiple users\n  \"sounddevice\",  # micd + soundd\n  \"pyserial\",     # pigeond + qcomgpsd\n  \"requests\",     # many one-off uses\n  \"sympy\",        # rednose + friends\n  \"crcmod-plus\",  # cars + qcomgpsd\n  \"tqdm\",         # cars (fw_versions.py) on start + many one-off uses\n\n  # core\n  \"cffi\",\n  \"scons\",\n  \"pycapnp==2.1.0\",  # 2.2 introduces a memory leak due to cyclic references\n  \"Cython\",\n  \"setuptools\",\n  \"numpy >=2.0\",\n\n  # vendored native dependencies\n  \"bzip2 @ git+https://github.com/commaai/dependencies.git@release-bzip2#subdirectory=bzip2\",\n  \"bootstrap-icons @ git+https://github.com/commaai/dependencies.git@release-bootstrap-icons#subdirectory=bootstrap-icons\",\n  \"capnproto @ git+https://github.com/commaai/dependencies.git@release-capnproto#subdirectory=capnproto\",\n  \"catch2 @ git+https://github.com/commaai/dependencies.git@release-catch2#subdirectory=catch2\",\n  \"acados @ git+https://github.com/commaai/dependencies.git@release-acados#subdirectory=acados\",\n  \"eigen @ git+https://github.com/commaai/dependencies.git@release-eigen#subdirectory=eigen\",\n  \"ffmpeg @ git+https://github.com/commaai/dependencies.git@release-ffmpeg#subdirectory=ffmpeg\",\n  \"libjpeg @ git+https://github.com/commaai/dependencies.git@release-libjpeg#subdirectory=libjpeg\",\n  \"libyuv @ git+https://github.com/commaai/dependencies.git@release-libyuv#subdirectory=libyuv\",\n  \"zstd @ git+https://github.com/commaai/dependencies.git@release-zstd#subdirectory=zstd\",\n  \"ncurses @ git+https://github.com/commaai/dependencies.git@release-ncurses#subdirectory=ncurses\",\n  \"zeromq @ git+https://github.com/commaai/dependencies.git@release-zeromq#subdirectory=zeromq\",\n  \"libusb @ git+https://github.com/commaai/dependencies.git@release-libusb#subdirectory=libusb\",\n  \"json11 @ git+https://github.com/commaai/dependencies.git@release-json11#subdirectory=json11\",\n  \"git-lfs @ git+https://github.com/commaai/dependencies.git@release-git-lfs#subdirectory=git-lfs\",\n  \"gcc-arm-none-eabi @ git+https://github.com/commaai/dependencies.git@release-gcc-arm-none-eabi#subdirectory=gcc-arm-none-eabi\",\n  \"xvfb @ git+https://github.com/commaai/dependencies.git@release-xvfb#subdirectory=xvfb\",\n\n  # body / webrtcd\n  \"av\",\n  \"aiortc\",\n\n  # panda\n  \"libusb1\",\n  \"spidev; platform_system == 'Linux'\",\n\n  # logging\n  \"pyzmq\",\n  \"sentry-sdk\",\n  \"xattr\",  # used in place of 'os.getxattr' for macOS compatibility\n\n  # athena\n  \"PyJWT\",\n  \"json-rpc\",\n  \"websocket_client\",\n\n  # joystickd\n  \"inputs\",\n\n  # these should be removed\n  \"psutil\",\n  \"pycryptodome\", # used in panda, body, and a test\n  \"setproctitle\",\n\n  # logreader\n  \"zstandard\",\n\n  # ui\n  \"raylib @ git+https://github.com/commaai/dependencies.git@release-raylib#subdirectory=raylib\",\n  \"qrcode\",\n  \"jeepney\",\n  \"pillow\",\n]\n\n[project.optional-dependencies]\ndocs = [\n  \"Jinja2\",\n  \"zensical\",\n]\n\ntesting = [\n  \"coverage\",\n  \"hypothesis ==6.47.*\",\n  \"ty\",\n  \"pytest\",\n  \"pytest-cpp\",\n  \"pytest-subtests\",\n  # https://github.com/pytest-dev/pytest-xdist/pull/1229\n  \"pytest-xdist @ git+https://github.com/sshane/pytest-xdist@2b4372bd62699fb412c4fe2f95bf9f01bd2018da\",\n  \"pytest-mock\",\n  \"ruff\",\n  \"codespell\",\n  \"pre-commit-hooks\",\n]\n\ndev = [\n  \"matplotlib\",\n]\n\ntools = [\n  \"imgui @ git+https://github.com/commaai/dependencies.git@release-imgui#subdirectory=imgui\",\n\n  # this can be added back once it's stripped down some more\n  #\"metadrive-simulator @ git+https://github.com/commaai/metadrive.git@minimal ; (platform_machine != 'aarch64')\",\n]\n\n[project.urls]\nHomepage = \"https://github.com/commaai/openpilot\"\n\n[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[tool.hatch.build.targets.wheel]\npackages = [\n  \"openpilot\",\n  \"msgq\",\n  \"opendbc\",\n  \"panda\",\n  \"rednose\",\n  \"teleoprtc\",\n  \"tinygrad\",\n]\n\n[tool.hatch.metadata]\nallow-direct-references = true\n\n[tool.pytest.ini_options]\nminversion = \"6.0\"\naddopts = \"-Werror --strict-config --strict-markers --durations=10 -n auto --dist=loadgroup\"\ncpp_files = \"test_*\"\ncpp_harness = \"openpilot/selfdrive/test/cpp_harness.py\"\npython_files = \"test_*.py\"\nmarkers = [\n  \"slow: tests that take awhile to run and can be skipped with -m 'not slow'\",\n  \"tici: tests that are only meant to run on the C3/C3X\",\n  \"skip_tici_setup: mark test to skip tici setup fixture\",\n  \"nocapture: don't capture test output\",\n  \"shared_download_cache: share download cache between tests\",\n  \"xdist_group_class_property: group tests by a property of the class that contains them\",\n]\ntestpaths = [\n  \"openpilot\",\n]\n\n[tool.codespell]\nquiet-level = 3\n# if you've got a short variable name that's getting flagged, add it here\nignore-words-list = \"bu,ro,te,ue,alo,hda,ois,nam,nams,ned,som,parm,setts,inout,warmup,bumb,nd,sie,preints,whit,indexIn,ws,uint,grey,deque,stdio,",
    "strategic_keywords": [
      "memory",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 16,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 90
    },
    "strategic_score": 90
  },
  {
    "owner": "aws",
    "name": "agent-toolkit-for-aws",
    "full_name": "aws/agent-toolkit-for-aws",
    "url": "https://github.com/aws/agent-toolkit-for-aws",
    "description": "Official, AWS-supported MCP servers, skills, and plugins to help AI agents build on AWS",
    "language": "Python",
    "total_stars": 1540,
    "forks": 131,
    "stars_this_period": 524,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 12,
      "created_at": "2026-04-23T12:44:08Z",
      "pushed_at": "2026-06-26T15:26:55Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 131,
      "watchers": 16,
      "archived": false,
      "size_kb": 1834
    },
    "readme_content": "# Agent Toolkit for AWS\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![Build](https://github.com/aws/agent-toolkit-for-aws/actions/workflows/build.yml/badge.svg)](https://github.com/aws/agent-toolkit-for-aws/actions/workflows/build.yml)\n[![Status](https://img.shields.io/badge/status-GA-green.svg)](https://github.com/aws/agent-toolkit-for-aws)\n\nHelp AI coding agents build, deploy, and manage applications on AWS.\n\nThe Agent Toolkit for AWS gives AI coding agents the tools, knowledge, and guardrails they need to work with AWS services. It works with the coding agents developers already use — including Claude Code, Codex, Cursor, and Kiro.\n\n## Quick start\n\n### Claude Code\n\nThe plugins are available on the official Anthropic marketplace (`claude-plugins-official`) which is added to your Claude Code installation by default.\nUse the following commands to install supported plugins from the toolkit:\n\nFor `aws-core` that covers service selection, CDK/CloudFormation, serverless, containers, storage, observability, billing, SDK usage, and deployment:\n\n```\n/plugin install aws-core@claude-plugins-official\n```\n\n> **Tip:** If you get `Plugin not found`, update your local marketplace index first:\n>\n> ```\n> /plugin marketplace update claude-plugins-official\n> ```\n\nFor `aws-agents` that covers building AI agents on AWS with Amazon Bedrock and AgentCore:\n\n```\n/plugin install aws-agents@claude-plugins-official\n```\n\nFor `aws-data-analytics` that covers data lake, analytics, and ETL workflows with S3 Tables, AWS Glue, and Athena:\n\n```\n/plugin install aws-data-analytics@claude-plugins-official\n```\n\nFor `aws-agents-for-devsecops` used to investigate incidents, review code and execute UAT for release readiness, scan code for vulnerabilities, and run penetration tests with AWS DevOps Agent and AWS Security Agent.\n\n```\n/plugin marketplace add aws/agent-toolkit-for-aws\n/plugin install aws-agents-for-devsecops\n/reload-plugins\n\n# Or from Claude's official marketplace:\n/plugin install aws-agents-for-devsecops@claude-plugins-official\n/reload-plugins\n\n# Setup:\n/aws-agents-for-devsecops:setup\n```\n\n### Codex\n\nIn your terminal:\n\n```\ncodex plugin marketplace add aws/agent-toolkit-for-aws\n```\n\nThen launch Codex and run `/plugins` to browse and install the **aws-core** plugin.\n\n### Cursor\n\nAdd this repository as a team marketplace from **Settings → Plugins → Team Marketplaces → Add Marketplace → Import from Repo**, pointing it at `aws/agent-toolkit-for-aws`. Cursor indexes the plugins listed in [`.cursor-plugin/marketplace.json`](.cursor-plugin/marketplace.json) on import.\n\nThen open the **Plugins** panel and install the **aws-core** plugin (start here), or **aws-agents** and **aws-data-analytics** as needed. Each plugin bundles the AWS MCP Server configuration and agent skills.\n\n### Kiro\n\nAdd the AWS MCP Server to your Kiro MCP configuration (`.kiro/settings/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"aws\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-proxy-for-aws@1.6.3\",\n        \"https://aws-mcp.us-east-1.api.aws/mcp\",\n        \"--metadata\", \"AWS_REGION=us-west-2\"\n      ]\n    }\n  }\n}\n```\n\n> **Note:** It is recommended to pin to a specific version (e.g., `@1.6.3`) to ensure reproducible behavior and protect against supply chain risks. We recommend regularly checking [PyPI](https://pypi.org/project/mcp-proxy-for-aws/) for new stable versions and updating accordingly.\n\nThen install skills from this repository:\n\n```\nnpx skills add aws/agent-toolkit-for-aws/skills\n```\n\n> **Prerequisites:** You need [uv](https://docs.astral.sh/uv/) installed. An AWS account with credentials configured locally is required for API calls and script execution, but not for documentation search or skill discovery. See the [user guide](https://docs.aws.amazon.com/agent-toolkit/latest/userguide/) for detailed setup instructions.\n\n### Other agents\n\nSee the [AWS MCP Server getting started guide](https://docs.aws.amazon.com/agent-toolkit/latest/userguide/getting-started-aws-mcp-server.html) for instructions on configuring the AWS MCP Server with your agent.\n\nThen install skills from this repository:\n\n```\nnpx skills add aws/agent-toolkit-for-aws/skills\n```\n\n> **Prerequisites:** You need [uv](https://docs.astral.sh/uv/) installed. An AWS account with credentials configured locally is required for API calls and script execution, but not for documentation search or skill discovery. See the [user guide](https://docs.aws.amazon.com/agent-toolkit/latest/userguide/) for detailed setup instructions.\n\n## What's included\n\n### Plugins\n\nPlugins bundle the AWS MCP Server configuration and agent skills into a single install for your coding agent.\n\n| Plugin | Description |\n|--------|-------------|\n| [aws-core](plugins/aws-core/) | Core AWS skills and MCP Server configuration. Covers service selection, CDK/CloudFormation, serverless, containers, storage, observability, billing, SDK usage, and deployment. **Start here.** |\n| [aws-agents](plugins/aws-agents/) | Skills for building AI agents on AWS with Amazon Bedrock and AgentCore. |\n| [aws-data-analytics](plugins/aws-data-analytics/) | Skills for data lake, analytics, and ETL workflows with S3 Tables, AWS Glue, and Athena. |\n| [aws-agents-for-devsecops](plugins/aws-agents-for-devsecops/) | Investigate incidents, review code and execute UAT for release readiness, scan code for vulnerabilities, and run penetration tests with [AWS DevOps Agent](https://aws.amazon.com/devops-agent/?trk=7b4b0d25-1409-441c-b914-c5d08677c376&sc_channel=ghr) and [AWS Security Agent](https://aws.amazon.com/security-agent/?trk=7b4b0d25-1409-441c-b914-c5d08677c376&sc_channel=ghr). |\n\nPlugins are currently available for Claude Code, Codex, and Cursor. For other agents, configure the AWS MCP Server directly and install skills from this repository.\n\n### Skills\n\nAgent skills are curated packages of instructions and reference materials that help agents complete specific AWS tasks. Skills are loaded on demand — agents discover and retrieve only what's relevant to the current task.\n\n```\nnpx skills add aws/agent-toolkit-for-aws/skills\n```\n\nBrowse the [`skills/`](skills/) directory to see all available skills.\n\n### Rules files\n\nRecommended project-level configuration files that tell agents how to use AWS most effectively — for example, by using the AWS MCP Server, discovering available skills, or searching documentation before acting.\n\nSee [`rules/`](rules/) for details.\n\n### AWS MCP Server\n\nThe [AWS MCP Server](https://docs.aws.amazon.com/agent-toolkit/latest/userguide/understanding-mcp-server-tools.html) is a managed server that gives agents access to AWS through the Model Context Protocol. It provides:\n\n- **Full AWS API coverage** — Interact with any of the 300+ AWS services through a single authenticated endpoint.\n- **Sandboxed script execution** — Agents can run Python scripts in an isolated environment for complex multi-step operations.\n- **Real-time documentation access** — Search and retrieve current AWS documentation, API references, and service capabilities without authentication.\n- **Enterprise controls** — Amazon CloudWatch metrics, IAM context keys for agent-specific policies, and AWS CloudTrail audit logging.\n\nFor details on operation, available tools, authentication, and supported Regions, see the [AWS MCP Server documentation](https://docs.aws.amazon.com/agent-toolkit/latest/userguide/understanding-mcp-server-tools.html).\n\n## Documentation\n\n- [User guide](https://docs.aws.amazon.com/agent-toolkit/latest/userguide/) — Setup, configuration, and reference documentation.\n- [AWS MCP Server tools](https://docs.aws.amazon.com/agent-toolkit/latest/userguide/understanding-mcp-server-tools.html) — Reference for all available MCP tools.\n\n## How the Agent Toolkit relates to the MCP servers, skills, and plugins in AWS Labs\nIn 2025, AWS began releasing MCP servers, skills, and plugins as part of [AWS Labs](https://github.com/awslabs). The Agent Toolkit for AWS is the successor to those tools. We recommend using the Agent Toolkit for AWS, because it offers key features including:\n\n- IAM condition keys that distinguish between agent actions and human actions, so you can write policies that apply only to agents. For example, you can write policies that only allow read-only actions through the MCP server, even if the user’s underlying IAM role can take write actions).\n- CloudWatch metrics and CloudTrail audit logging for every request, so you can monitor and audit coding agent activity.\n- Agent skills that have undergone thorough end-to-end evaluations, so you can be confident that workflows will complete successfully.\n\n[AWS Labs](https://github.com/awslabs) MCP servers, skills, and plugins will continue to work and accept contributions, and over time the best of AWS Labs will be transitioned to the Agent Toolkit for AWS to ensure that customers can access the broadest array of tooling and guidance for their agents.\n\n## License\n\nThis project is licensed under the Apache-2.0 License. See [LICENSE](LICENSE) for details.\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "rag",
      "skill",
      "workflow"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "owner": "juliangarnier",
    "name": "anime",
    "full_name": "juliangarnier/anime",
    "url": "https://github.com/juliangarnier/anime",
    "description": "JavaScript animation engine",
    "language": "JavaScript",
    "total_stars": 70495,
    "forks": 4757,
    "stars_this_period": 484,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "animation",
        "anime",
        "canvas",
        "css",
        "javascript",
        "javascript-library",
        "svg"
      ],
      "license": "MIT",
      "open_issues": 110,
      "created_at": "2016-03-13T21:37:45Z",
      "pushed_at": "2026-06-22T15:28:21Z",
      "homepage": "https://animejs.com",
      "default_branch": "master",
      "forks": 4757,
      "watchers": 778,
      "archived": false,
      "size_kb": 182753
    },
    "readme_content": "# Anime.js\n\n<p align=\"center\">\n  <picture align=\"center\">\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"./assets/images/animejs-v4-logo-animation-dark.gif\">\n    <img align=\"center\" alt=\"Anime.js V4 logo animation\" src=\"./assets/images/animejs-v4-logo-animation.gif\" width=\"560\">\n  </picture>\n</p>\n\n<p align=\"center\">\n  <strong>\n  <em>Anime.js</em> is a fast, multipurpose and lightweight JavaScript animation library with a simple, yet powerful API.<br>\n  It works with CSS properties, SVG, DOM attributes and JavaScript Objects.\n  </strong>\n</p>\n\n\n<p align=\"center\">\n  <img alt=\"NPM Downloads\" src=\"https://img.shields.io/npm/dm/animejs?style=flat-square&logo=npm\">\n  <img alt=\"jsDelivr hits (npm)\" src=\"https://img.shields.io/jsdelivr/npm/hm/animejs?style=flat-square&logo=jsdeliver\">\n  <img alt=\"GitHub Sponsors\" src=\"https://img.shields.io/github/sponsors/juliangarnier?style=flat-square&logo=github\">\n</p>\n\n## Sponsors\n\nAnime.js is 100% free and is only made possible with the help of our sponsors.\nHelp the project become sustainable by sponsoring us on <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">GitHub Sponsors</a>.\n\n### Platinum sponsors\n\n<table>\n  <tbody>\n    <tr>\n      <td>\n        <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">\n          <picture>\n            <img align=\"center\" src=\"./assets/sponsors/placeholder-large.png?v=200126\" width=\"310\">\n          </picture>\n        </a>\n      </td>\n      <td>\n        <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">\n          <picture>\n            <img align=\"center\" src=\"./assets/sponsors/placeholder-large.png?v=200126\" width=\"310\">\n          </picture>\n        </a>\n      </td>\n      <td>\n        <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">\n          <picture>\n            <img align=\"center\" src=\"./assets/sponsors/placeholder-large.png?v=200126\" width=\"310\">\n          </picture>\n        </a>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\n### Silver sponsors\n\n<table>\n  <tbody>\n    <tr>\n      <td>\n        <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">\n          <picture>\n            <img align=\"center\" src=\"./assets/sponsors/placeholder-small.png?v=200126\" width=\"141\">\n          </picture>\n        </a>\n      </td>\n      <td>\n        <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">\n          <picture>\n            <img align=\"center\" src=\"./assets/sponsors/placeholder-small.png?v=200126\" width=\"141\">\n          </picture>\n        </a>\n      </td>\n      <td>\n        <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">\n          <picture>\n            <img align=\"center\" src=\"./assets/sponsors/placeholder-small.png?v=200126\" width=\"141\">\n          </picture>\n        </a>\n      </td>\n      <td>\n        <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">\n          <picture>\n            <img align=\"center\" src=\"./assets/sponsors/placeholder-small.png?v=200126\" width=\"141\">\n          </picture>\n        </a>\n      </td>\n      <td>\n        <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">\n          <picture>\n            <img align=\"center\" src=\"./assets/sponsors/placeholder-small.png?v=200126\" width=\"141\">\n          </picture>\n        </a>\n      </td>\n      <td>\n        <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">\n          <picture>\n            <img align=\"center\" src=\"./assets/sponsors/placeholder-small.png?v=200126\" width=\"141\">\n          </picture>\n        </a>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\nGet featured here by becoming a <a target=\"_blank\" href=\"https://github.com/sponsors/juliangarnier\">GitHub Sponsor</a>.\n\n\n## Usage\n\nAnime.js V4 works by importing ES modules like so:\n\n\n<table>\n<tr>\n  <td>\n\n```javascript\nimport {\n  animate,\n  stagger,\n} from 'animejs';\n\nanimate('.square', {\n  x: 320,\n  rotate: { from: -180 },\n  duration: 1250,\n  delay: stagger(65, { from: 'center' }),\n  ease: 'inOutQuint',\n  loop: true,\n  alternate: true\n});\n```\n\n  </td>\n  <td>\n    <img align=\"center\" alt=\"Anime.js code example\" src=\"./assets/images/usage-example-result.gif\">\n  </td>\n</tr>\n</table>\n\n## V4 Documentation\n\nThe full documentation is available [here](https://animejs.com/documentation).\n\n## V3 Migration guide\n\nYou can find the v3 to v4 migration guide [here](https://github.com/juliangarnier/anime/wiki/Migrating-from-v3-to-v4).\n\n## NPM development scripts\n\nFirst, run `npm i` to install all the necessary packages.\nThen, execute the following scripts with `npm run <script>`.\n\n| script | action |\n| ------ | ------ |\n| `dev` | Watches for changes in `src/**/*.js`, bundles the ESM version to `lib/` and creates type declarations in `types/` |\n| `dev:test` | Runs `dev` and `test:browser` concurrently |\n| `build` | Bundles ESM / UMD / CJS / IIFE versions to `lib/` and creates type declarations in `types/` |\n| `test:browser` | Starts a local server and runs all browser-related tests |\n| `test:node` | Starts Node-related tests |\n| `open:examples` | Starts a local server to browse the examples locally |\n\n© [Julian Garnier](http://juliangarnier.com) | [MIT License](LICENSE.md)\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"animejs\",\n  \"version\": \"4.5.0\",\n  \"description\": \"JavaScript animation engine\",\n  \"homepage\": \"https://animejs.com\",\n  \"author\": \"Julian Garnier <julian@animejs.com>\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/juliangarnier/anime.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/juliangarnier/anime/issues\"\n  },\n  \"funding\": {\n    \"type\": \"github\",\n    \"url\": \"https://github.com/sponsors/juliangarnier\"\n  },\n  \"keywords\": [\n    \"anime\",\n    \"animejs\",\n    \"anime.js\",\n    \"timer\",\n    \"animation\",\n    \"timeline\",\n    \"animatable\",\n    \"draggable\",\n    \"scope\",\n    \"engine\",\n    \"scroll\",\n    \"easings\",\n    \"cubic-bezier\",\n    \"spring\",\n    \"splitText\",\n    \"CSS\",\n    \"SVG\",\n    \"WAAPI\",\n    \"Canvas\",\n    \"WebGL\",\n    \"treejs\",\n    \"tree.js\"\n  ],\n  \"files\": [\n    \"dist\"\n  ],\n  \"sideEffects\": [\n    \"./dist/modules/adapters/**\",\n    \"./src/adapters/**\"\n  ],\n  \"type\": \"module\",\n  \"main\": \"./dist/modules/index.cjs\",\n  \"module\": \"./dist/modules/index.js\",\n  \"types\": \"./dist/modules/index.d.ts\",\n  \"jsdelivr\": \"./dist/bundles/anime.umd.min.js\",\n  \"unpkg\": \"./dist/bundles/anime.umd.min.js\",\n  \"exports\": {\n    \"./package.json\": \"./package.json\",\n    \".\": {\n      \"types\": \"./dist/modules/index.d.ts\",\n      \"require\": \"./dist/modules/index.cjs\",\n      \"import\": \"./dist/modules/index.js\",\n      \"default\": \"./dist/modules/index.cjs\"\n    },\n    \"./timer\": {\n      \"types\": \"./dist/modules/timer/index.d.ts\",\n      \"require\": \"./dist/modules/timer/index.cjs\",\n      \"import\": \"./dist/modules/timer/index.js\",\n      \"default\": \"./dist/modules/timer/index.cjs\"\n    },\n    \"./animation\": {\n      \"types\": \"./dist/modules/animation/index.d.ts\",\n      \"require\": \"./dist/modules/animation/index.cjs\",\n      \"import\": \"./dist/modules/animation/index.js\",\n      \"default\": \"./dist/modules/animation/index.cjs\"\n    },\n    \"./timeline\": {\n      \"types\": \"./dist/modules/timeline/index.d.ts\",\n      \"require\": \"./dist/modules/timeline/index.cjs\",\n      \"import\": \"./dist/modules/timeline/index.js\",\n      \"default\": \"./dist/modules/timeline/index.cjs\"\n    },\n    \"./animatable\": {\n      \"types\": \"./dist/modules/animatable/index.d.ts\",\n      \"require\": \"./dist/modules/animatable/index.cjs\",\n      \"import\": \"./dist/modules/animatable/index.js\",\n      \"default\": \"./dist/modules/animatable/index.cjs\"\n    },\n    \"./draggable\": {\n      \"types\": \"./dist/modules/draggable/index.d.ts\",\n      \"require\": \"./dist/modules/draggable/index.cjs\",\n      \"import\": \"./dist/modules/draggable/index.js\",\n      \"default\": \"./dist/modules/draggable/index.cjs\"\n    },\n    \"./scope\": {\n      \"types\": \"./dist/modules/scope/index.d.ts\",\n      \"require\": \"./dist/modules/scope/index.cjs\",\n      \"import\": \"./dist/modules/scope/index.js\",\n      \"default\": \"./dist/modules/scope/index.cjs\"\n    },\n    \"./engine\": {\n      \"types\": \"./dist/modules/engine/index.d.ts\",\n      \"require\": \"./dist/modules/engine/index.cjs\",\n      \"import\": \"./dist/modules/engine/index.js\",\n      \"default\": \"./dist/modules/engine/index.cjs\"\n    },\n    \"./events\": {\n      \"types\": \"./dist/modules/events/index.d.ts\",\n      \"require\": \"./dist/modules/events/index.cjs\",\n      \"import\": \"./dist/modules/events/index.js\",\n      \"default\": \"./dist/modules/events/index.cjs\"\n    },\n    \"./layout\": {\n      \"types\": \"./dist/modules/layout/index.d.ts\",\n      \"require\": \"./dist/modules/layout/index.cjs\",\n      \"import\": \"./dist/modules/layout/index.js\",\n      \"default\": \"./dist/modules/layout/index.cjs\"\n    },\n    \"./easings\": {\n      \"types\": \"./dist/modules/easings/index.d.ts\",\n      \"require\": \"./dist/modules/easings/index.cjs\",\n      \"import\": \"./dist/modules/easings/index.js\",\n      \"default\": \"./dist/modules/easings/index.cjs\"\n    },\n    \"./easings/eases\": {\n      \"types\": \"./dist/modules/easings/eases/index.d.ts\",\n      \"require\": \"./dist/modules/easings/eases/index.cjs\",\n      \"import\": \"./dist/modules/easings/eases/index.js\",\n      \"default\": \"./dist/modules/easings/eases/index.cjs\"\n    },\n    \"./easings/linear\": {\n      \"types\": \"./dist/modules/easings/linear/index.d.ts\",\n      \"require\": \"./dist/modules/easings/linear/index.cjs\",\n      \"import\": \"./dist/modules/easings/linear/index.js\",\n      \"default\": \"./dist/modules/easings/linear/index.cjs\"\n    },\n    \"./easings/steps\": {\n      \"types\": \"./dist/modules/easings/steps/index.d.ts\",\n      \"require\": \"./dist/modules/easings/steps/index.cjs\",\n      \"import\": \"./dist/modules/easings/steps/index.js\",\n      \"default\": \"./dist/modules/easings/steps/index.cjs\"\n    },\n    \"./easings/irregular\": {\n      \"types\": \"./dist/modules/easings/irregular/index.d.ts\",\n      \"require\": \"./dist/modules/easings/irregular/index.cjs\",\n      \"import\": \"./dist/modules/easings/irregular/index.js\",\n      \"default\": \"./dist/modules/easings/irregular/index.cjs\"\n    },\n    \"./easings/cubic-bezier\": {\n      \"types\": \"./dist/modules/easings/cubic-bezier/index.d.ts\",\n      \"require\": \"./dist/modules/easings/cubic-bezier/index.cjs\",\n",
    "strategic_keywords": [
      "rag"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 8,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 6,
      "total": 67
    },
    "strategic_score": 67
  },
  {
    "owner": "nodejs",
    "name": "node",
    "full_name": "nodejs/node",
    "url": "https://github.com/nodejs/node",
    "description": "Node.js JavaScript runtime ✨🐢🚀✨",
    "language": "JavaScript",
    "total_stars": 118132,
    "forks": 35792,
    "stars_this_period": 474,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "javascript",
        "js",
        "linux",
        "macos",
        "mit",
        "node",
        "nodejs",
        "runtime",
        "windows"
      ],
      "license": "NOASSERTION",
      "open_issues": 2386,
      "created_at": "2014-11-26T19:57:11Z",
      "pushed_at": "2026-06-28T15:44:52Z",
      "homepage": "https://nodejs.org",
      "default_branch": "main",
      "forks": 35792,
      "watchers": 3060,
      "archived": false,
      "size_kb": 1506079
    },
    "readme_content": "# Node.js\n\nNode.js is an open-source, cross-platform JavaScript runtime environment.\n\nFor information on using Node.js, see the [Node.js website][].\n\nThe Node.js project uses an [open governance model](./GOVERNANCE.md). The\n[OpenJS Foundation][] provides support for the project.\n\nContributors are expected to act in a collaborative manner to move\nthe project forward. We encourage the constructive exchange of contrary\nopinions and compromise. The [TSC](./GOVERNANCE.md#technical-steering-committee)\nreserves the right to limit or block contributors who repeatedly act in ways\nthat discourage, exhaust, or otherwise negatively affect other participants.\n\n**This project has a [Code of Conduct][].**\n\n## Table of contents\n\n* [Support](#support)\n* [Release types](#release-types)\n  * [Download](#download)\n    * [Current and LTS releases](#current-and-lts-releases)\n    * [Nightly releases](#nightly-releases)\n    * [API documentation](#api-documentation)\n  * [Verifying binaries](#verifying-binaries)\n* [Building Node.js](#building-nodejs)\n* [Security](#security)\n* [Contributing to Node.js](#contributing-to-nodejs)\n* [Current project team members](#current-project-team-members)\n  * [TSC (Technical Steering Committee)](#tsc-technical-steering-committee)\n  * [Collaborators](#collaborators)\n  * [Triagers](#triagers)\n  * [Release keys](#release-keys)\n* [License](#license)\n\n## Support\n\nLooking for help? Check out the\n[instructions for getting support](.github/SUPPORT.md).\n\n## Release types\n\n* **Current**: Under active development. Code for the Current release is in the\n  branch for its major version number (for example,\n  [v22.x](https://github.com/nodejs/node/tree/v22.x)). Node.js releases a new\n  major version every 6 months, allowing for breaking changes. This happens in\n  April and October every year. Releases appearing each October have a support\n  life of 8 months. Releases appearing each April convert to LTS (see below)\n  each October.\n* **LTS**: Releases that receive Long Term Support, with a focus on stability\n  and security. Every even-numbered major version will become an LTS release.\n  LTS releases receive 12 months of _Active LTS_ support and a further 18 months\n  of _Maintenance_. LTS release lines have alphabetically-ordered code names,\n  beginning with v4 Argon. There are no breaking changes or feature additions,\n  except in some special circumstances.\n* **Nightly**: Code from the Current branch built every 24-hours when there are\n  changes. Use with caution.\n\nCurrent and LTS releases follow [semantic versioning](https://semver.org). A\nmember of the Release Team [signs](#release-keys) each Current and LTS release.\nFor more information, see the\n[Release README](https://github.com/nodejs/Release#readme).\n\n### Download\n\nBinaries, installers, and source tarballs are available at\n<https://nodejs.org/en/download/>.\n\n#### Current and LTS releases\n\n<https://nodejs.org/download/release/>\n\nThe [latest](https://nodejs.org/download/release/latest/) directory is an\nalias for the latest Current release. The latest-_codename_ directory is an\nalias for the latest release from an LTS line. For example, the\n[latest-hydrogen](https://nodejs.org/download/release/latest-hydrogen/)\ndirectory contains the latest Hydrogen (Node.js 18) release.\n\n#### Nightly releases\n\n<https://nodejs.org/download/nightly/>\n\nEach directory and filename includes the version (e.g., `v22.0.0`),\nfollowed by the UTC date (e.g., `20240424` for April 24, 2024),\nand the short commit SHA of the HEAD of the release (e.g., `ddd0a9e494`).\nFor instance, a full directory name might look like `v22.0.0-nightly20240424ddd0a9e494`.\n\n#### API documentation\n\nDocumentation for the latest Current release is at <https://nodejs.org/api/>.\nVersion-specific documentation is available in each release directory in the\n_docs_ subdirectory. Version-specific documentation is also at\n<https://nodejs.org/download/docs/>.\n\n### Verifying binaries\n\nDownload directories contain a `SHASUMS256.txt.asc` file with SHA checksums for the\nfiles and the releaser PGP signature.\n\nYou can get a trusted keyring from nodejs/release-keys, e.g. using `curl`:\n\n```bash\ncurl -fsLo \"/path/to/nodejs-keyring.kbx\" \"https://github.com/nodejs/release-keys/raw/HEAD/gpg/pubring.kbx\"\n```\n\nAlternatively, you can import the releaser keys in your default keyring, see\n[Release keys](#release-keys) for commands on how to do that.\n\nThen, you can verify the files you've downloaded locally\n(if you're using your default keyring, pass `--keyring=\"${GNUPGHOME:-~/.gnupg}/pubring.kbx\"`):\n\n```bash\ncurl -fsO \"https://nodejs.org/dist/${VERSION}/SHASUMS256.txt.asc\" \\\n&& gpgv --keyring=\"/path/to/nodejs-keyring.kbx\" --output SHASUMS256.txt < SHASUMS256.txt.asc \\\n&& shasum --check SHASUMS256.txt --ignore-missing\n```\n\n## Building Node.js\n\nSee [BUILDING.md](BUILDING.md) for instructions on how to build Node.js from\nsource and a list of supported platforms.\n\n## Security\n\nFor information on reporting security vulnerabilities in Node.js, see\n[SECURITY.md](./SECURITY.md).\n\n## Contributing to Node.js\n\n* [Contributing to the project][]\n* [Working Groups][]\n* [Strategic initiatives][]\n* [Technical values and prioritization][]\n\n## Current project team members\n\nFor information about the governance of the Node.js project, see\n[GOVERNANCE.md](./GOVERNANCE.md).\n\n<!-- node-core-utils and find-inactive-tsc.mjs depend on the format of the TSC\n     list. If the format changes, those utilities need to be tested and\n     updated. -->\n\n### TSC (Technical Steering Committee)\n\n#### TSC voting members\n\n<!--lint disable prohibited-strings-->\n\n* [aduh95](https://github.com/aduh95) -\n  **Antoine du Hamel** <<duhamelantoine1995@gmail.com>> (he/him)\n* [anonrig](https://github.com/anonrig) -\n  **Yagiz Nizipli** <<yagiz@nizipli.com>> (he/him)\n* [benjamingr](https://github.com/benjamingr) -\n  **Benjamin Gruenbaum** <<benjamingr@gmail.com>>\n* [BridgeAR](https://github.com/BridgeAR) -\n  **Ruben Bridgewater** <<ruben@bridgewater.de>> (he/him)\n* [gireeshpunathil](https://github.com/gireeshpunathil) -\n  **Gireesh Punathil** <<gpunathi@in.ibm.com>> (he/him)\n* [jasnell](https://github.com/jasnell) -\n  **James M Snell** <<jasnell@gmail.com>> (he/him)\n* [joyeecheung](https://github.com/joyeecheung) -\n  **Joyee Cheung** <<joyeec9h3@gmail.com>> (she/her)\n* [legendecas](https://github.com/legendecas) -\n  **Chengzhong Wu** <<legendecas@gmail.com>> (he/him)\n* [marco-ippolito](https://github.com/marco-ippolito) -\n  **Marco Ippolito** <<marcoippolito54@gmail.com>> (he/him)\n* [mcollina](https://github.com/mcollina) -\n  **Matteo Collina** <<matteo.collina@gmail.com>> (he/him)\n* [panva](https://github.com/panva) -\n  **Filip Skokan** <<panva.ip@gmail.com>> (he/him)\n* [RafaelGSS](https://github.com/RafaelGSS) -\n  **Rafael Gonzaga** <<rafael.nunu@hotmail.com>> (he/him)\n* [RaisinTen](https://github.com/RaisinTen) -\n  **Darshan Sen** <<raisinten@gmail.com>> (he/him)\n* [richardlau](https://github.com/richardlau) -\n  **Richard Lau** <<richard.lau@ibm.com>>\n* [ronag](https://github.com/ronag) -\n  **Robert Nagy** <<ronagy@icloud.com>>\n* [ruyadorno](https://github.com/ruyadorno) -\n  **Ruy Adorno** <<ruy@vlt.sh>> (he/him)\n* [ShogunPanda](https://github.com/ShogunPanda) -\n  **Paolo Insogna** <<paolo@cowtech.it>> (he/him)\n* [targos](https://github.com/targos) -\n  **Michaël Zasso** <<targos@protonmail.com>> (he/him)\n* [tniessen](https://github.com/tniessen) -\n  **Tobias Nießen** <<tniessen@tnie.de>> (he/him)\n\n#### TSC regular members\n\n* [BethGriggs](https://github.com/BethGriggs) -\n  **Beth Griggs** <<bethanyngriggs@gmail.com>> (she/her)\n* [bnoordhuis](https://github.com/bnoordhuis) -\n  **Ben Noordhuis** <<info@bnoordhuis.nl>>\n* [cjihrig](https://github.com/cjihrig) -\n  **Colin Ihrig** <<cjihrig@gmail.com>> (he/him)\n* [codebytere](https://github.com/codebytere) -\n  **Shelley Vohr** <<shelley.vohr@gmail.com>> (she/her)\n* [GeoffreyBooth](https://github.com/GeoffreyBooth) -\n  **Geoffrey Booth** <<webadmin@geoffreybooth.com>> (he/him)\n* [MoLow](https://github.com/MoLow) -\n  **Moshe Atlow** <<moshe@atlow.co.il>> (he/him)\n* [Trott](https://github.com/Trott) -\n  **Rich Trott** <<rtrott@gmail.com>> (he/him)\n\n<details>\n\n<summary>TSC emeriti members</summary>\n\n#### TSC emeriti members\n\n* [addaleax](https://github.com/addaleax) -\n  **Anna Henningsen** <<anna@addaleax.net>> (she/her)\n* [apapirovski](https://github.com/apapirovski) -\n  **Anatoli Papirovski** <<apapirovski@mac.com>> (he/him)\n* [ChALkeR](https://github.com/ChALkeR) -\n  **Сковорода Никита Андреевич** <<chalkerx@gmail.com>> (he/him)\n* [chrisdickinson](https://github.com/chrisdickinson) -\n  **Chris Dickinson** <<christopher.s.dickinson@gmail.com>>\n* [danbev](https://github.com/danbev) -\n  **Daniel Bevenius** <<daniel.bevenius@gmail.com>> (he/him)\n* [danielleadams](https://github.com/danielleadams) -\n  **Danielle Adams** <<adamzdanielle@gmail.com>> (she/her)\n* [evanlucas](https://github.com/evanlucas) -\n  **Evan Lucas** <<evanlucas@me.com>> (he/him)\n* [fhinkel](https://github.com/fhinkel) -\n  **Franziska Hinkelmann** <<franziska.hinkelmann@gmail.com>> (she/her)\n* [Fishrock123](https://github.com/Fishrock123) -\n  **Jeremiah Senkpiel** <<fishrock123@rocketmail.com>> (he/they)\n* [gabrielschulhof](https://github.com/gabrielschulhof) -\n  **Gabriel Schulhof** <<gabrielschulhof@gmail.com>>\n* [gibfahn](https://github.com/gibfahn) -\n  **Gibson Fahnestock** <<gibfahn@gmail.com>> (he/him)\n* [indutny](https://github.com/indutny) -\n  **Fedor Indutny** <<fedor@indutny.com>>\n* [isaacs](https://github.com/isaacs) -\n  **Isaac Z. Schlueter** <<i@izs.me>>\n* [joshgav](https://github.com/joshgav) -\n  **Josh Gavant** <<josh.gavant@outlook.com>>\n* [mhdawson](https://github.com/mhdawson) -\n  **Michael Dawson** <<midawson@redhat.com>> (he/him)\n* [mmarchini](https://github.com/mmarchini) -\n  **Mary Marchini** <<oss@mmarchini.me>> (she/her)\n* [mscdex](https://github.com/mscdex) -\n  **Brian White** <<mscdex@mscdex.net>>\n* [MylesBorins](https://github.com/MylesBorins) -\n  **Myles Borins** <<myles.borins@gmail.com>> (he/him)\n* [nebrius](https://github.com/nebrius) -\n  **Bryan Hughes** <<bryan@nebri.us>>\n* [ofrobots](https://github.com/ofrobots) -\n  **Ali Ijaz Sheikh** <<ofrobots@google.com>> (he/him)\n* [orangemocha](https://github.com/orangemocha) -\n  **Alexis Campailla** <<orangemocha@nodejs.org>>\n* [piscisaureus](https://github.com/piscisaureus) -\n  **Bert Belder** <<bertbelder@gmail.com>>\n* [rvagg](https://github.com/rvagg) -\n  **Rod Vagg** <<r@va.gg>>\n* [sam-github](https://github.com/sam-github) -\n  **Sam Roberts** <<vieuxtech@gmail.com>>\n* [shigeki](https://github.com/shigeki) -\n  **Shigeki Ohtsu** <<ohtsu@ohtsu.org>> (he/him)\n* [thefourtheye](https://github.com/thefourtheye) -\n  **Sakthipriyan Vairamani** <<thechargingvolcano@gmail.com>> (he/him)\n* [TimothyGu](https://github.com/TimothyGu) -\n  **Tiancheng \"Timothy\" Gu** <<timothygu99@gmail.com>> (he/him)\n* [trevnorris](https://github.com/trevnorris) -\n  **Trevor Norris** <<trev.norris@gmail.com>>\n\n</details>\n\n<!-- node-core-utils and find-inactive-collaborators.mjs depend on the format\n     of the collaborator list. If the format changes, those utilities need to be\n     tested and updated. -->\n\n### Collaborators\n\n* [abmusse](https://github.com/abmusse) -\n  **Abdirahim Musse** <<abdirahim.musse@ibm.com>>\n* [addaleax](https://github.com/addaleax) -\n  **Anna Henningsen** <<anna@addaleax.net>> (she/her)\n* [Aditi-1400](https://github.com/Aditi-1400) -\n  **Aditi Singh** <<aditisingh1400@gmail.com>> (she/her)\n* [aduh95](https://github.com/aduh95) -\n  **Antoine du Hamel** <<duhamelantoine1995@gmail.com>> (he/him) - [Support me](https://github.com/sponsors/aduh95)\n* [anonrig](https://github.com/anonrig) -\n  **Yagiz Nizipli** <<yagiz@nizipli.com>> (he/him) - [Support me](https://github.com/sponsors/anonrig)\n* [atlowChemi](https://github.com/atlowChemi) -\n  **Chemi Atlow** <<chemi@atlow.co.il>> (he/him)\n* [avivkeller](https://github.com/avivkeller) -\n  **Aviv Keller** <<me@aviv.sh>> (he/him) - [Sup",
    "strategic_keywords": [
      "rag",
      "runtime"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 16,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 6,
      "total": 85
    },
    "strategic_score": 85
  },
  {
    "owner": "1jehuang",
    "name": "jcode",
    "full_name": "1jehuang/jcode",
    "url": "https://github.com/1jehuang/jcode",
    "description": "Coding Agent Harness",
    "language": "Rust",
    "total_stars": 7852,
    "forks": 878,
    "stars_this_period": 451,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "ai",
        "claude",
        "cli",
        "coding-agent",
        "llm",
        "mcp",
        "openai",
        "rust",
        "terminal",
        "tui"
      ],
      "license": "MIT",
      "open_issues": 94,
      "created_at": "2026-01-05T09:43:36Z",
      "pushed_at": "2026-06-28T22:14:44Z",
      "homepage": "",
      "default_branch": "master",
      "forks": 878,
      "watchers": 41,
      "archived": false,
      "size_kb": 434477
    },
    "readme_content": "<div align=\"center\">\n\n# jcode\n\n[![Latest Release](https://badgen.net/github/release/1jehuang/jcode?icon=github)](https://github.com/1jehuang/jcode/releases)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)\n[![Platforms](https://img.shields.io/badge/platforms-Linux%20%7C%20macOS%20%7C%20Windows-blue?style=flat-square)](https://github.com/1jehuang/jcode/releases)\n[![Last Commit](https://badgen.net/github/last-commit/1jehuang/jcode/master?icon=github)](https://github.com/1jehuang/jcode/commits/master)\n[![GitHub Stars](https://badgen.net/github/stars/1jehuang/jcode?icon=github)](https://github.com/1jehuang/jcode/stargazers)\n[![Discord](https://img.shields.io/badge/Discord-Join%20Community-5865F2?style=flat-square&logo=discord&logoColor=white)](https://discord.gg/nBe9vGyK9a)\n\nThe next generation coding agent harness to raise the skill ceiling. <br>\nBuilt for multi-session workflows, infinite customizability, and performance. \n\n<br>\n\n<a href=\"https://github.com/1jehuang/jcode/releases/download/readme-assets/jcode-memory-demo.mp4\">\n  <img src=\"https://github.com/1jehuang/jcode/releases/download/readme-assets/jcode-memory-demo.webp\" alt=\"jcode memory demonstration\" width=\"800\">\n</a>\n\n<br>\n\n[Features](#features) · [Install](#installation) · [Quick Start](#quick-start) · [Further Reading](#further-reading) · [Contributing](CONTRIBUTING.md)\n\n</div>\n\n---\n\n<div align=\"center\">\n\n## Installation\n\n</div>\n\n```bash\n# macOS & Linux\ncurl -fsSL https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh | bash\n```\n\nNeed Windows, Homebrew, source builds, provider setup, or tell your agent to set it up for you?\n[Jump to detailed installation](#detailed-installation).\n\n---\n\n\n<div align=\"center\">\n\n## Performance & Resource Efficiency\n\n</div>\n\njcode is built to be as performant and resource efficient as possible. Every metric is optimized to the bone, which is important for scaling multi-session workflows. Here we sample a few metrics to show the difference: RAM usage and boot up.\n\n### RAM comparison\n\n<div align=\"center\">\n\n<table>\n  <tr>\n    <td valign=\"top\" align=\"center\" width=\"50%\">\n      <strong>1 active session</strong>\n      <table>\n        <thead>\n          <tr>\n            <th>Tool</th>\n            <th>PSS</th>\n            <th>Comparison</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td><strong>jcode (local embedding off)</strong></td>\n            <td align=\"right\"><strong>27.8 MB</strong></td>\n            <td align=\"right\">baseline</td>\n          </tr>\n          <tr>\n            <td><strong>jcode</strong></td>\n            <td align=\"right\"><strong>167.1 MB</strong></td>\n            <td align=\"right\"><strong>6.0× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>pi</strong></td>\n            <td align=\"right\"><strong>144.4 MB</strong></td>\n            <td align=\"right\"><strong>5.2× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>Codex CLI</strong></td>\n            <td align=\"right\"><strong>140.0 MB</strong></td>\n            <td align=\"right\"><strong>5.0× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>OpenCode</strong></td>\n            <td align=\"right\"><strong>371.5 MB</strong></td>\n            <td align=\"right\"><strong>13.4× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>GitHub Copilot CLI</strong></td>\n            <td align=\"right\"><strong>333.3 MB</strong></td>\n            <td align=\"right\"><strong>12.0× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>Cursor Agent</strong></td>\n            <td align=\"right\"><strong>214.9 MB</strong></td>\n            <td align=\"right\"><strong>7.7× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>Claude Code</strong></td>\n            <td align=\"right\"><strong>386.6 MB</strong></td>\n            <td align=\"right\"><strong>13.9× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>Antigravity CLI</strong></td>\n            <td align=\"right\"><strong>243.7 MB</strong></td>\n            <td align=\"right\"><strong>8.8× more RAM</strong></td>\n          </tr>\n        </tbody>\n      </table>\n    </td>\n    <td width=\"24\"></td>\n    <td valign=\"top\" align=\"center\" width=\"50%\">\n      <strong>10 active sessions</strong>\n      <table>\n        <thead>\n          <tr>\n            <th>Tool</th>\n            <th>PSS</th>\n            <th>Comparison</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td><strong>jcode (local embedding off)</strong></td>\n            <td align=\"right\"><strong>117.0 MB</strong></td>\n            <td align=\"right\">baseline</td>\n          </tr>\n          <tr>\n            <td><strong>jcode</strong></td>\n            <td align=\"right\"><strong>260.8 MB</strong></td>\n            <td align=\"right\"><strong>2.2× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>pi</strong></td>\n            <td align=\"right\"><strong>833.0 MB</strong></td>\n            <td align=\"right\"><strong>7.1× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>Codex CLI</strong></td>\n            <td align=\"right\"><strong>334.8 MB</strong></td>\n            <td align=\"right\"><strong>2.9× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>OpenCode</strong></td>\n            <td align=\"right\"><strong>3237.2 MB</strong></td>\n            <td align=\"right\"><strong>27.7× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>GitHub Copilot CLI</strong></td>\n            <td align=\"right\"><strong>1756.5 MB</strong></td>\n            <td align=\"right\"><strong>15.0× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>Cursor Agent</strong></td>\n            <td align=\"right\"><strong>1632.4 MB</strong></td>\n            <td align=\"right\"><strong>14.0× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>Claude Code</strong></td>\n            <td align=\"right\"><strong>2300.6 MB</strong></td>\n            <td align=\"right\"><strong>19.7× more RAM</strong></td>\n          </tr>\n          <tr>\n            <td><strong>Antigravity CLI</strong></td>\n            <td align=\"right\"><strong>1021.2 MB</strong></td>\n            <td align=\"right\"><strong>8.7× more RAM</strong></td>\n          </tr>\n        </tbody>\n      </table>\n    </td>\n  </tr>\n</table>\n\n</div>\n\n### Time to first frame\n\n<div align=\"center\">\n\n| Tool | Time to first frame | Range | Comparison |\n|---|---:|---:|---:|\n| **jcode** | **14.0 ms** | 10.1–19.3 ms | baseline |\n| **Antigravity CLI** | **383.5 ms** | 363.1–415.4 ms | **27.4× slower** |\n| **pi** | **590.7 ms** | 369.6–934.8 ms | **42.2× slower** |\n| **Codex CLI** | **882.8 ms** | 742.3–1640.9 ms | **63.1× slower** |\n| **OpenCode** | **1035.9 ms** | 922.5–1104.4 ms | **74.0× slower** |\n| **GitHub Copilot CLI** | **1518.6 ms** | 1357.4–1826.8 ms | **108.5× slower** |\n| **Cursor Agent** | **1949.7 ms** | 1711.0–2104.8 ms | **139.3× slower** |\n| **Claude Code** | **3436.9 ms** | 2032.7–8927.2 ms | **245.5× slower** |\n\n</div>\n\nMeasured on this Linux machine across 10 interactive PTY launches.\n\n### Time to first input\n(time until typed probe text appears on the rendered screen; Antigravity uses its internal input-ready log marker because the sign-in screen suppresses probe echo.)\n<div align=\"center\">\n\n| Tool | Time to first input | Range | Comparison |\n|---|---:|---:|---:|\n| **jcode** | **48.7 ms** | 30.3–62.7 ms | baseline |\n| **Antigravity CLI** | **383.7 ms** | 363.4–415.7 ms | **7.9× slower** |\n| **pi** | **596.4 ms** | 373.9–955.2 ms | **12.2× slower** |\n| **Codex CLI** | **905.8 ms** | 760.1–1675.7 ms | **18.6× slower** |\n| **OpenCode** | **1047.9 ms** | 931.1–1116.9 ms | **21.5× slower** |\n| **GitHub Copilot CLI** | **1583.4 ms** | 1422.8–1880.0 ms | **32.5× slower** |\n| **Cursor Agent** | **1978.7 ms** | 1727.3–2130.0 ms | **40.6× slower** |\n| **Claude Code** | **3512.8 ms** | 2137.4–9002.0 ms | **72.2× slower** |\n\n</div>\n\nMeasured on this Linux machine across 10 interactive PTY launches. Antigravity CLI was unauthenticated for this run; its sign-in screen rendered normally and emitted an internal `CLI ready for user input` marker, but did not echo the typed probe.\n\n### Additional clients / memory scaling\n\n<div align=\"center\">\n\n| Tool | Extra PSS per added session | Comparison |\n|---|---:|---:|\n| **jcode (local embedding off)** | **~9.9 MB** | baseline |\n| **jcode** | **~10.4 MB** | **1.1× more RAM** |\n| **pi** | **~76.5 MB** | **7.7× more RAM** |\n| **Codex CLI** | **~21.6 MB** | **2.2× more RAM** |\n| **OpenCode** | **~318.4 MB** | **32.2× more RAM** |\n| **GitHub Copilot CLI** | **~158.1 MB** | **16.0× more RAM** |\n| **Cursor Agent** | **~157.5 MB** | **15.9× more RAM** |\n| **Claude Code** | **~212.7 MB** | **21.5× more RAM** |\n| **Antigravity CLI** | **~86.4 MB** | **8.7× more RAM** |\n\n</div>\nversions tested for this corrected memory rerun:\n\n- `jcode v0.9.1888-dev (be386f2)`\n- `pi 0.62.0`\n- `codex-cli 0.120.0`\n- `opencode 1.0.203`\n- `GitHub Copilot CLI 1.0.24` for the 1-session rerun, `GitHub Copilot CLI 1.0.27` for the 10-session rerun\n- `Cursor Agent 2026.04.08-a41fba1`\n- `Claude Code 2.1.86 (Claude Code)`\n- `Antigravity CLI 1.0.0`\n\n<div align=\"center\">\n\n  <a href=\"https://github.com/1jehuang/jcode/releases/download/readme-assets/jcode-performance-demo.mp4\">\n    <img src=\"https://github.com/1jehuang/jcode/releases/download/readme-assets/jcode-performance-demo.webp\" alt=\"jcode performance demonstration\" width=\"900\">\n  </a>\n\n  <p><em>jcode performance demonstration</em></p>\n\n</div>\n\n\n---\n\n## Memory (Agent memory)\n\nJcode embeds each turn/response as a semantic vector. Every turn does queries a graph of memories to efficiently find related memory entries via a cosine similarity check. The embedding hits are fed into the conversation, or optionally uses a memory sideagent which verifies the memories are relevant, and potentially does more work for information retreival before injecting into the conversation. This results in a human like memory system which allows the agent to automatically recall relevant information to the conversation without actively calling memory tools or being a token burner. \not \nTo have memories which are retrieved, they must also be extracted and stored. Every so often (semantic drift, K turns since last extraction, session end, etc), memories are extracted via a memory sideagent, and put into the memory graph. \n\nThe harness also provides explicit memory tools to allow the agent to actively search or store the memory without relying on a passive background process. The harness also provides session search for traditional RAG on previous sessions. \n\nMemories are automatically consolidated every so often via the ambient mode. This reorganizes, checks for staleness and conflicts, etc\n\n<div align=\"center\">\n\n  <a href=\"https://github.com/1jehuang/jcode/releases/download/readme-assets/jcode-memory-demo.mp4\">\n    <img src=\"https://github.com/1jehuang/jcode/releases/download/readme-assets/jcode-memory-demo.webp\" alt=\"jcode memory demonstration\" width=\"900\">\n  </a>\n\n  <p><em>jcode memory demonstration</em></p>\n\n</div>\n\n<!-- Memory demo media is hosted in the readme-assets release. -->\n\n---\n\n## UI: Side panels, Diagrams, Info Widgets, rendering, scrolling, alignment\n\nThe side panel is a place for auxiliary information. Tell your jcode agent to load a file into the side panel and see it update in real time, or tell your agent to write directly to the side panel, or use it as a diff viewer. The side panel (and chat) is able to render mermaid diagrams inline. \n<img width=\"2877\" height=\"1762\" alt=\"image\" src=\"https://github.com/user-attachments/assets/6c7bec81-ef3f-434d-8a7b-d55f8a54e5cf\" />\n\nTo make this possible, I created a new mermaid rendering library to render diagrams 1800x faster. It has no browser or Typescript d",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[package]\nname = \"jcode\"\nversion = \"0.32.0\"\ndescription = \"Possibly the greatest coding agent ever built — blazing-fast TUI, multi-model, swarm coordination, 30+ tools\"\nedition = \"2024\"\nautobins = false\n\n[workspace]\nmembers = [\n    \".\",\n    \"crates/jcode-agent-runtime\",\n    \"crates/jcode-app-core\",\n    \"crates/jcode-base\",\n    \"crates/jcode-tui\",\n    \"crates/jcode-build-meta\",\n    \"crates/jcode-ambient-types\",\n    \"crates/jcode-auth-types\",\n    \"crates/jcode-embedding\",\n    \"crates/jcode-gateway-types\",\n    \"crates/jcode-import-core\",\n    \"crates/jcode-pdf\",\n    \"crates/jcode-logging\",\n    \"crates/jcode-background-types\",\n    \"crates/jcode-batch-types\",\n    \"crates/jcode-build-support\",\n    \"crates/jcode-compaction-core\",\n    \"crates/jcode-config-types\",\n    \"crates/jcode-core\",\n    \"crates/jcode-memory-types\",\n    \"crates/jcode-message-types\",\n    \"crates/jcode-overnight-core\",\n    \"crates/jcode-plan\",\n    \"crates/jcode-productivity-core\",\n    \"crates/jcode-swarm-core\",\n    \"crates/jcode-protocol\",\n    \"crates/jcode-selfdev-types\",\n    \"crates/jcode-session-types\",\n    \"crates/jcode-setup-hints\",\n    \"crates/jcode-storage\",\n    \"crates/jcode-side-panel-types\",\n    \"crates/jcode-azure-auth\",\n    \"crates/jcode-notify-email\",\n    \"crates/jcode-provider-metadata\",\n    \"crates/jcode-provider-env\",\n    \"crates/jcode-provider-core\",\n    \"crates/jcode-provider-bedrock\",\n    \"crates/jcode-provider-anthropic\",\n    \"crates/jcode-provider-antigravity\",\n    \"crates/jcode-provider-copilot\",\n    \"crates/jcode-provider-openrouter\",\n    \"crates/jcode-provider-openai\",\n    \"crates/jcode-provider-gemini\",\n    \"crates/jcode-tui-markdown\",\n    \"crates/jcode-tui-messages\",\n    \"crates/jcode-usage-types\",\n    \"crates/jcode-tui-core\",\n    \"crates/jcode-tui-mermaid\",\n    \"crates/jcode-task-types\",\n    \"crates/jcode-tool-core\",\n    \"crates/jcode-tool-types\",\n    \"crates/jcode-tui-account-picker\",\n    \"crates/jcode-tui-anim\",\n    \"crates/jcode-tui-render\",\n    \"crates/jcode-tui-visual-debug\",\n    \"crates/jcode-tui-session-picker\",\n    \"crates/jcode-tui-style\",\n    \"crates/jcode-tui-permissions\",\n    \"crates/jcode-tui-tool-display\",\n    \"crates/jcode-tui-usage-overlay\",\n    \"crates/jcode-update-core\",\n    \"crates/jcode-terminal-launch\",\n    \"crates/jcode-terminal-image\",\n    \"crates/jcode-telemetry-core\",\n    \"crates/jcode-tui-workspace\",\n    \"crates/jcode-desktop\",\n    \"crates/jcode-render-core\",\n]\n\n[lib]\nname = \"jcode\"\npath = \"src/lib.rs\"\n\n[[bin]]\nname = \"jcode\"\npath = \"src/main.rs\"\n\n[[bin]]\nname = \"test_api\"\npath = \"src/bin/test_api.rs\"\n\n[[bin]]\nname = \"jcode-harness\"\npath = \"src/bin/harness.rs\"\n\n[[bin]]\nname = \"session_memory_bench\"\npath = \"src/bin/session_memory_bench.rs\"\nrequired-features = [\"dev-bins\"]\n\n[[bin]]\nname = \"memory_recall_bench\"\npath = \"src/bin/memory_recall_bench.rs\"\nrequired-features = [\"dev-bins\"]\n\n[[bin]]\nname = \"mermaid_side_panel_probe\"\npath = \"src/bin/mermaid_side_panel_probe.rs\"\nrequired-features = [\"dev-bins\"]\n\n[[bin]]\nname = \"tui_bench\"\npath = \"src/bin/tui_bench.rs\"\nrequired-features = [\"dev-bins\"]\n\n[dependencies]\n# Memory allocator (reduces fragmentation for long-running server)\ntikv-jemallocator = { version = \"0.6\", features = [\"unprefixed_malloc_on_supported_platforms\"], optional = true }\ntikv-jemalloc-ctl = { version = \"0.6\", optional = true }\ntikv-jemalloc-sys = { version = \"0.6\", optional = true }\n\n# Async runtime\ntokio = { version = \"1\", features = [\"fs\", \"io-std\", \"io-util\", \"macros\", \"net\", \"process\", \"rt-multi-thread\", \"signal\", \"sync\", \"time\"] }\nfutures = \"0.3\"\nasync-trait = \"0.1\"\n\n# HTTP client\nreqwest = { version = \"0.12\", default-features = false, features = [\"json\", \"stream\", \"blocking\", \"charset\", \"http2\", \"system-proxy\", \"rustls-tls\", \"rustls-tls-native-roots\"] }\nrustls = { version = \"0.23\", default-features = false, features = [\"aws_lc_rs\"] }\ntokio-tungstenite = { version = \"0.24\", default-features = false, features = [\"connect\", \"rustls-tls-native-roots\"] }\n\n# Serialization\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = { version = \"1\", features = [\"raw_value\"] }\nserde_yaml = \"0.9\"\ntoml = \"0.8\"\n\n# CLI\nclap = { version = \"4\", features = [\"derive\"] }\n\n# File operations\nglob = \"0.3\"\nignore = \"0.4\"           # gitignore-aware file walking\nwalkdir = \"2\"\nsimilar = \"2\"            # diffing for edits\n\n# Utilities\ndirs = \"5\"               # home directory\nanyhow = \"1\"\nthiserror = \"1\"\nlibc = \"0.2\"             # Unix system calls (flock)\nchrono = { version = \"0.4\", features = [\"serde\"] }\nregex = \"1\"\nurlencoding = \"2\"        # URL encoding for web search\nuuid = { version = \"1\", features = [\"v4\", \"v5\"] }\nproctitle = \"0.1\"\n\n# Embeddings (local inference) - behind feature flag (163 crates, slow to compile)\njcode-embedding = { path = \"crates/jcode-embedding\", optional = true }\njcode-gateway-types = { path = \"crates/jcode-gateway-types\" }\njcode-import-core = { path = \"crates/jcode-import-core\" }\njcode-logging = { path = \"crates/jcode-logging\" }\n\n# OAuth\nbase64 = \"0.22\"\nsha2 = \"0.10\"\nrand =",
    "strategic_keywords": [
      "agent",
      "memory",
      "mcp",
      "runtime",
      "skill",
      "workspace",
      "llm",
      "workflow",
      "embedding"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 20,
      "novelty": 11,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 88
    },
    "strategic_score": 88
  },
  {
    "owner": "THUDM",
    "name": "slime",
    "full_name": "THUDM/slime",
    "url": "https://github.com/THUDM/slime",
    "description": "slime is an LLM post-training framework for RL Scaling.",
    "language": "Python",
    "total_stars": 7062,
    "forks": 1002,
    "stars_this_period": 439,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 384,
      "created_at": "2025-06-18T07:15:54Z",
      "pushed_at": "2026-06-23T06:58:44Z",
      "homepage": "https://thudm.github.io/slime",
      "default_branch": "main",
      "forks": 1002,
      "watchers": 25,
      "archived": false,
      "size_kb": 323073
    },
    "readme_content": "# slime\n\n[中文版](./README_zh.md)\n\n[![Documentation](https://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat)](https://thudm.github.io/slime/)\n[![CI](https://img.shields.io/github/actions/workflow/status/THUDM/slime/pr-test.yml?branch=zilin%2Fci-dont-merge&event=pull_request&label=CI&logo=github)](https://github.com/THUDM/slime/pull/2053/checks)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/THUDM/slime)\n\n**slime** is an LLM post-training framework for RL scaling, providing two core capabilities:\n\n1.  **High-Performance Training**: Supports efficient training in various modes by connecting Megatron with SGLang;\n2.  **Flexible Data Generation**: Enables arbitrary training data generation workflows through custom data generation interfaces and server-based engines.\n\nslime's design goal is to make these two capabilities reinforce each other without turning the system into a heavy stack of disconnected trainers, rollout services, and agent frameworks. Megatron training, SGLang rollout, custom data generation, reward computation, verifier feedback, and environment interaction all flow through the same training / rollout / Data Buffer path.\n\nThis makes slime one of the most battle-tested open RL post-training frameworks: small enough to understand and extend, but validated through complete training loops behind SOTA-level model releases.\n\n## Why This Design Matters\n\n- **Battle-tested by frontier model training**: slime is the RL framework behind [GLM-5.2](https://z.ai/blog/glm-5.2), [GLM-5.1](https://z.ai/blog/glm-5.1), [GLM-5](https://z.ai/blog/glm-5), [GLM-4.7](https://z.ai/blog/glm-4.7), [GLM-4.6](https://z.ai/blog/glm-4.6), and [GLM-4.5](https://z.ai/blog/glm-4.5). This validates the full post-training loop, not only isolated examples.\n- **Correctness-first infrastructure**: RL bugs are often silent. slime keeps the dataflow explicit, supports separate rollout-only and train-only debugging paths, and documents reproducibility, fault tolerance, tracing, profiling, and CI as first-class engineering concerns.\n- **Native by design**: slime passes Megatron arguments through directly and exposes installed SGLang arguments with a `--sglang-` prefix. New upstream training and serving optimizations can be used without adding another abstraction layer inside slime.\n- **Maximum data-generation freedom**: math, code, search, tools, sandboxes, verifiers, environments, multi-agent systems, and long-horizon agentic workflows plug in as data generation or reward workflows. They do not fork the training kernel.\n- **Lightweight and opinionated**: slime focuses deeply on the Megatron + SGLang path used for large-scale RL. By choosing one rollout backend, slime can use SGLang-specific capabilities directly instead of flattening multiple inference engines into a lowest-common-denominator abstraction.\n\n## Production Validation\n\nslime has been exercised by the complete workflow needed for release-grade model post-training: large-scale training, high-throughput rollout, weight synchronization, reward/verifier data, checkpointing, debugging, and long-running stability.\n\nBeyond the GLM family, slime also supports:\n\n- Qwen series: Qwen3.6, Qwen3.5, Qwen3Next, Qwen3MoE, Qwen3, Qwen2.5;\n- DeepSeek V3 series: DeepSeek V3, V3.1, DeepSeek R1;\n- Llama 3.\n\n## Native Engine Pass-Through and SGLang Deployment\n\nslime is not just a framework that can call an inference backend. It keeps the Megatron and SGLang control surfaces close to the upstream engines while adding the RL dataflow around them:\n\n- native SGLang argument pass-through: every argument supported by the installed SGLang can be used by adding the `--sglang-` prefix, such as passing `--mem-fraction-static` as `--sglang-mem-fraction-static`;\n- native Megatron argument pass-through: slime reads Megatron arguments directly, so Megatron-side parallelism, optimizer, checkpointing, and model options remain available without wrapper code;\n- [SGLang Config](docs/en/advanced/sglang-config.md) as an optional YAML extension for topology-specific control, such as separate prefill/decode/EPD-style settings, heterogeneous server groups, multi-model serving, and per-group SGLang overrides;\n- [PD Disaggregation](docs/en/advanced/pd-disaggregation.md) for multi-turn and agentic workloads with different prefill/decode resource needs;\n- router policies such as session affinity for multi-turn agents;\n- [Delta Weight Sync](docs/en/advanced/delta-weight-sync.md) for training/inference disaggregation and large-model update efficiency;\n- [External Rollout Engines](docs/en/advanced/external-rollout-engines.md) for deployments where serving is managed outside the training job. The SGLang serving side can use an independent environment, and with disk transport can even run on different GPU models or vendors while using full-checkpoint update from disk or delta update over a shared filesystem.\n\nThis pass-through design makes slime native from the start. Most upstream engine improvements remain accessible as the engines evolve, while slime focuses on the RL loop, dataflow, synchronization, and correctness checks.\n\nChoosing SGLang as the single rollout backend is also intentional. Multi-backend frameworks often have to abstract over the common subset of several inference engines, which can hide the strongest features of each backend. slime instead optimizes deeply for SGLang so RL workloads can use SGLang-specific serving, routing, caching, disaggregation, and weight-sync behavior directly.\n\n## Correctness, Stability, and CI\n\nslime is developed as RL infrastructure, where \"the script runs\" is not enough. The project maintains CPU unit tests, contract tests for customization hooks, and GPU end-to-end tests covering dense and MoE models, Megatron training paths, SGLang deployment configurations, checkpointing, numerical precision, async rollout, OPD, PPO-style workflows, and debug rollout-then-train replay.\n\nUseful engineering docs:\n\n- [CI](docs/en/developer_guide/ci.md)\n- [Debugging](docs/en/developer_guide/debug.md)\n- [Reproducibility](docs/en/advanced/reproducibility.md)\n- [Fault Tolerance](docs/en/advanced/fault-tolerance.md)\n- [Trace Viewer](docs/en/developer_guide/trace.md)\n- [Profiling](docs/en/developer_guide/profiling.md)\n\n## Blogs\n\n- Our vision: [slime: An SGLang-Native Post-Training Framework for RL Scaling](https://lmsys.org/blog/2025-07-09-slime/).\n- Our ideas on agentic training: [Agent-Oriented Design: An Asynchronous and Decoupled Framework for Agentic RL](https://www.notion.so/Agent-Oriented-Design-An-Asynchronous-and-Decoupled-Framework-for-Agentic-RL-2278e692d081802cbdd5d37cef76a547)\n- v0.1.0 release note: [v0.1.0: Redefining High-Performance RL Training Frameworks](https://thudm.github.io/slime/blogs/release_v0.1.0.html)\n\n## Table of Contents\n\n- [Why This Design Matters](#why-this-design-matters)\n- [Production Validation](#production-validation)\n- [Native Engine Pass-Through and SGLang Deployment](#native-engine-pass-through-and-sglang-deployment)\n- [Correctness, Stability, and CI](#correctness-stability-and-ci)\n- [Architecture Overview](#architecture-overview)\n- [Quick Start](#quick-start)\n- [Ecosystem Built on slime](#ecosystem-built-on-slime)\n- [Arguments Walkthrough](#arguments-walkthrough)\n- [Developer Guide](#developer-guide)\n- [FAQ & Acknowledgements](#faq--acknowledgements)\n\n## Architecture Overview\n\n![arch](./imgs/arch.png)\n\n**Module Descriptions**:\n\n- **training (Megatron)**: Responsible for the main training process, reads data from the Data Buffer, and synchronizes parameters to the rollout module after training.\n- **rollout (SGLang + router)**: Generates new data (including rewards/verifier outputs) and stores it in the Data Buffer. Custom generate functions can wrap this with multi-turn loops, tool calls, environment/sandbox interaction, and verifier-based reward.\n- **data buffer**: A bridge module that manages prompt initialization, custom data, and rollout generation methods (including agentic workflows that produce samples through the same interface).\n\n## Quick Start\n\nFor a comprehensive quick start guide covering environment setup, data preparation, training startup, and key code analysis, please refer to:\n- [Quick Start Guide](./docs/en/get_started/quick_start.md)\n\nWe also provide examples for some use cases not covered in the quick start guide; please check [examples](examples/).\n\n### Agentic RL examples\n\nFor agentic RL workloads, the following examples plug into the standard rollout / Data Buffer loop through customization interfaces — they are not separate frameworks:\n\n- [`examples/multi_agent`](examples/multi_agent/README.md): Multi-agent rollout via a custom `--rollout-function-path`.\n- [`examples/search-r1`](examples/search-r1/): Search/RAG-style multi-turn generation via `--custom-generate-function-path`.\n- [`examples/fully_async`](examples/fully_async/README.md): Fully-async rollout, useful for long-tail agentic generation where some samples take much longer than others.\n- [`examples/coding_agent_rl`](examples/coding_agent_rl/README.md): End-to-end SWE coding-agent RL with sandboxed tool use, test-based rewards, and token-correct trajectory segments via `--custom-generate-function-path`.\n\nSee the [Customization Guide](docs/en/get_started/customization.md) for which interface to use for a given agentic workflow.\n\n## Ecosystem Built on slime\n\nThese are not just demos. They are independent systems that use slime as a reusable RL substrate for production-scale post-training, agentic RL, domain RL, and rollout-system research.\n\n### 🐎 Dressage: Scalable RL for Any Agent and Sandbox\n\n[**Dressage**](https://github.com/Accio-Lab/Dressage) is an agentic RL training framework built on slime by [Alibaba Accio](https://www.accio.com/work?im_ref=1O8wgT3poxyZWCj31F1ZJ0fNUkuTK6x9ZTHw0Y0&sharedid=&im_pid=5619512&im_pname=AI%20INTRO%20COPORATE), centered on unified RL for blackbox agents (e.g., [OpenCode](https://github.com/anomalyco/opencode), [OpenClaw](https://github.com/openclaw/openclaw)) and white loops across any sandbox environment (e.g., [bwrap](https://github.com/containers/bubblewrap), [E2B](https://github.com/e2b-dev/e2b), Kubernetes). It decouples interaction semantics, execution placement, and token-level trajectory capture through Paddock, Sandbox, and Proxy layers, adapting agent workflows without rewriting their internal loops. Dressage records token-wise logprobs, loss masks, weight versions, and MoE routing, then uses TITO and segment-aware training to turn long-horizon tool interactions into stable RL samples.\n\n### ⛵ Miles: Enterprise-Grade Reinforcement Learning for Large-Scale Model Training\n\n[Miles](https://github.com/radixark/miles) is an RL post-training framework for large-scale models, built on slime by [RadixArk](https://github.com/radixark). It stays closely aligned with slime's upstream development while extending it with enterprise-oriented features: deeper [SGLang](https://github.com/sgl-project/sglang) integration, operational tooling, deployment support, and optimizations for new [models](https://www.radixark.com/miles/docs/models) and [hardware](https://www.radixark.com/miles/docs/platforms). Miles also adds a growing set of production features, including LoRA, TITO, and low-precision training.\n\n### 🔷 vime: vLLM-Native RL Post-Training Built on slime\n\n[**vime**](https://github.com/vllm-project/vime) is a post-training framework built on slime and maintained by the vLLM project. It keeps slime's Megatron training stack, Data Buffer dataflow, and custom data-generation design, with its main change being a rollout backend swapped to [**vLLM**](https://github.com/vllm-project/vllm) with [vllm-router](https://github.com/vllm-project/router). Starting from an existing slime launch script, adjusting only rollout-related parameters is enough to quickly run training with vime.\n\n### 🌈 Relax: Asynchronous RL Engine for Omni-Modal Agentic Training\n\n[**Relax**](https://github.com/redai-infra/Rela",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [\n    \"packaging\",\n    \"setuptools >= 49.4.0\",\n    \"wheel\",\n]\nbuild-backend = \"setuptools.build_meta\"\n\n[tool.isort]\nprofile = \"black\"  # black-compatible\nline_length = 119  # should match black parameters\nignore_whitespace = true  # ignore whitespace for compatibility with the initial style\npy_version = 310  # python 3.10 as a target version\nsections = [\"FUTURE\", \"STDLIB\", \"THIRDPARTY\", \"FIRSTPARTY\", \"LOCALFOLDER\"]\ndefault_section = \"THIRDPARTY\"\nextend_skip = [\"setup.py\", \"docs/source/conf.py\"]\nknown_first_party = [\"slime\", \"slime_plugins\"]\nknown_third_party = [\"megatron\", \"wandb\", \"ray\", \"transformers\"]\nsrc_paths = [\"slime\", \"slime_plugins\"]\n\n\n[tool.black]\nline_length = 119\n\n[tool.ruff]\nline-length = 320  # TODO\n\n[tool.ruff.lint]\nselect = [\n    \"E\",      # Pycodestyle Errors (Structural/Fundamental Errors like bad indentation)\n    \"F\",      # Pyflakes (Core Errors: Unused imports, undefined names)\n    \"B\",      # Flake8-Bugbear (Logic Bugs: Variable shadowing, dangerous default arguments)\n    \"UP\",     # pyupgrade (Modernization and compatibility issues)\n]\nignore = [\n    \"E402\", # module-import-not-at-top-of-file\n    \"E501\", # Line too long # TODO handle it later\n]\n\n[tool.pytest.ini_options]\n# durations=0 will display all tests execution time, sorted in ascending order starting from from the slowest one.\n# -vv will also display tests with duration = 0.00s\naddopts = \"--verbose --pyargs --durations=0 --strict-markers\"  # always add these arguments to pytest\ntestpaths = [\"./tests\"]  # must be an explicit path to avoid importing another \"tests\" module\n# directories to ignore when discovering tests\nnorecursedirs = [\n    \"external\",\n    \"examples\",\n    \"docs\",\n    \"scripts\",\n    \"tools\",\n    \"tutorials\",\n    \"*.egg\",\n    \".*\",\n    \"_darcs\",\n    \"build\",\n    \"CVS\",\n    \"dist\",\n    \"venv\",\n    \"{arch}\",\n]\n# markers to select tests, use `pytest --markers` to see all available markers, `pytest -m \"<marker>\"` to select tests\nmarkers = [\n    \"unit: marks unit test, i.e. testing a single, well isolated functionality (deselect with '-m \\\"not unit\\\"')\",\n    \"integration: marks test checking the elements when integrated into subsystems (deselect with '-m \\\"not integration\\\"')\",\n    \"system: marks test working at the highest integration level (deselect with '-m \\\"not system\\\"')\",\n    \"acceptance: marks test checking whether the developed product/model passes the user defined acceptance criteria (deselect with '-m \\\"not acceptance\\\"')\",\n    \"docs: mark tests related to documentation (deselect with '-m \\\"not docs\\\"')\",\n    \"skipduringci: marks tests that are skipped ci as they are addressed by Jenkins jobs but should be run to test user setups\",\n    \"pleasefixme: marks tests that are broken and need fixing\",\n]\n",
    "strategic_keywords": [
      "agent",
      "llm",
      "workflow",
      "inference"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 95
    },
    "strategic_score": 95
  },
  {
    "owner": "voocel",
    "name": "ainovel-cli",
    "full_name": "voocel/ainovel-cli",
    "url": "https://github.com/voocel/ainovel-cli",
    "description": "✨多agent实现全自动AI小说生成",
    "language": "Go",
    "total_stars": 1145,
    "forks": 237,
    "stars_this_period": 437,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "agents",
        "ai",
        "ai-agents",
        "claude",
        "go",
        "llm",
        "novel",
        "openai"
      ],
      "license": "Apache-2.0",
      "open_issues": 14,
      "created_at": "2026-03-07T12:24:45Z",
      "pushed_at": "2026-06-28T14:48:03Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 237,
      "watchers": 4,
      "archived": false,
      "size_kb": 6416
    },
    "readme_content": "# ainovel-cli\n\n全自动 AI 长篇小说创作引擎。Coordinator 在一次 Prompt 里驱动 Architect / Writer / Editor 三个子代理完成整本书的创作，Host 只做启动、恢复和观察。从一句话需求到完整小说，全程无需人工干预。\n\n<p align=\"center\">\n  <img src=\"scripts/sample.gif\" alt=\"ainovel-cli demo\" width=\"800\">\n  <img src=\"scripts/novel.png\" alt=\"ainovel-cli bg\" width=\"800\">\n</p>\n\n## 特性\n\n- **多智能体协作** — Coordinator 在一次长循环中调度 Architect / Writer / Editor 三个子代理，自主决策创作流程\n- **LLM 驱动长循环** — 一次 Prompt 写完整本书，Host 不介入调度。越简单越稳定，拒绝复杂编排\n- **Step 级断点恢复** — 每个工具执行成功后写入 checkpoint，崩溃后精确到 plan/draft/check/commit 步骤级恢复\n- **卷弧双层滚动规划** — 长篇不再一次性规划全部章节。初始只规划前 2 卷弧骨架 + 第 1 弧详细章节，后续弧/卷在写作推进到时再由 Architect 展开，每次展开都参考前文摘要和角色状态，远期规划不空洞\n- **相关章节智能推荐** — 每章写作时从伏笔、角色出场、状态变化、关系四个维度自动推荐相关历史章节，配合下一章预告，确保 500+ 章长篇的连续性\n- **自适应上下文策略** — 根据总章节数自动切换全量 / 滑窗 / 分层摘要，支持 500+ 章长篇\n- **七维质量评审** — Editor 从设定一致性、角色行为、节奏、叙事连贯、伏笔、钩子、审美品质七个维度评审，审美维度细分描写质感/叙事手法/对话区分度/用词质量/情感打动力五项，每项必须引用原文举证\n- **用户实时干预** — 写作过程中随时在输入框注入修改意见（无需暂停），系统自动评估影响范围并重写受影响章节\n- **统一 TUI 入口** — 交互界面实时观察进度，也支持携带一句需求直接启动\n- **多 LLM 支持** — OpenRouter / Anthropic / Gemini / OpenAI 等等随意切换\n\n## 架构\n\n核心设计：**LLM 驱动，Host 服务**。Coordinator 在一次 Run 中自主决策整本书的创作流程，Host 只做启动、恢复和事件观察。\n\n```\n┌─────────────────────────────────────────────────┐\n│                Host（薄外壳）                     │\n│           启动 / 恢复 / 观察 / 干预注入            │\n└──────────────────────┬──────────────────────────┘\n                       │ 一次 Prompt\n┌──────────────────────▼──────────────────────────┐\n│              Coordinator（LLM 长循环）            │\n│    读 novel_context → 调子代理 → 读结果 → 继续     │\n└────┬──────────┬──────────┬──────────────────────┘\n     │          │          │\n ┌───▼────┐ ┌───▼───┐ ┌────▼────┐\n │Architect│ │Writer │ │ Editor  │\n └───┬────┘ └───┬───┘ └────┬────┘\n     └──────────┼──────────┘\n                │ 工具调用（IO + checkpoint）\n┌───────────────▼─────────────────────────────────┐\n│                   Store                         │\n│  Progress / Checkpoint / Outline / Drafts / ... │\n└─────────────────────────────────────────────────┘\n```\n\n- **Host** — 启动 Coordinator、崩溃恢复、事件投影给 TUI。不做任何调度决策\n- **Coordinator** — 唯一的决策者，在一次 Run 里驱动规划→写作→评审→总结的完整流程\n- **SubAgents** — Architect / Writer / Editor 各自独立 context，通过 Store 中的工件协作\n- **Tools** — 原子 IO + checkpoint 写入，只返事实 JSON，不夹带指令\n\n### 智能体职责\n\n| 智能体 | 职责 | 工具 |\n|--------|------|------|\n| **Coordinator** | 调度全局，处理评审裁定和用户干预 | `subagent` `novel_context` |\n| **Architect** | 生成前提、大纲、角色档案、世界规则 | `novel_context` `save_foundation` |\n| **Writer** | 自主完成一章的构思、写作、自审和提交 | `novel_context` `read_chapter` `plan_chapter` `draft_chapter` `check_consistency` `commit_chapter` |\n| **Editor** | 阅读原文，从结构和审美两个层面审阅 | `novel_context` `read_chapter` `save_review` `save_arc_summary` `save_volume_summary` |\n\n### 写作流程\n\n```\n用户需求 → Architect 规划骨架 + 首弧章节 → Writer 逐章写作 → Editor 弧级评审\n                                                  ↑                   │\n                                                  ├── 重写/打磨 ◄──────┘\n                                                  │\n                                           Architect 展开下一弧/卷\n                                          （参考前文摘要+角色快照）\n```\n\nWriter 按固定顺序完成每章（写作内容完全自主，工具调用顺序严格）：\n\n1. `novel_context` — 加载上下文（前情摘要、伏笔、角色状态、风格规则、相关章节推荐）\n2. `read_chapter` — 回读前文找回语气和节奏\n3. `plan_chapter` — 构思本章目标、冲突、情绪弧线\n4. `draft_chapter` — 写入整章正文\n5. `check_consistency` — 对照状态数据检查一致性（必须在 draft 之后）\n6. `commit_chapter` — 提交终稿，返回事实字段（`arc_end_reached` / `next_chapter` 等），下一步由 Reminder 驱动\n\n### 状态迁移规则\n\n系统内部把运行状态拆成两层：\n\n- **Phase** — 大阶段，表示作品目前处于设定期、写作期还是已完成\n- **Flow** — 当前活跃流程，表示系统此刻是在正常写作、审阅、重写、打磨还是处理用户干预\n\n#### Phase\n\n`Phase` 采用“只前进不回退”的规则：\n\n```text\ninit -> premise -> outline -> writing -> complete\n  \\-------> outline ------^\n  \\--------------> writing\n```\n\n含义：\n\n- `init` — 任务已创建，尚未形成稳定设定\n- `premise` — 已保存故事前提\n- `outline` — 已保存大纲，可以进入正式写作\n- `writing` — 已进入章节创作期\n- `complete` — 全书流程结束\n\n规则说明：\n\n- 允许同态更新，例如 `writing -> writing`\n- 允许前进，例如 `outline -> writing`\n- 不允许回退，例如 `writing -> premise`、`complete -> writing`\n\n#### Flow\n\n`Flow` 只描述写作期内的活跃流程，允许在几个工作流之间切换：\n\n```text\nwriting   -> reviewing / rewriting / polishing / steering / writing\nreviewing -> writing / rewriting / polishing / steering / reviewing\nrewriting -> writing / steering / rewriting\npolishing -> writing / steering / polishing\nsteering  -> writing / reviewing / rewriting / polishing / steering\n```\n\n含义：\n\n- `writing` — 正常推进下一章\n- `reviewing` — Editor 正在评审\n- `rewriting` — 处理必须重写的章节\n- `polishing` — 处理只需打磨的章节\n- `steering` — 正在评估并处理用户干预\n\n规则说明：\n\n- 允许 `writing -> reviewing`，例如章节提交后触发评审\n- 允许 `reviewing -> rewriting/polishing/writing`，由评审结果决定\n- 允许 `steering -> writing/reviewing/rewriting/polishing`，由干预影响范围决定\n- 不允许明显反常的跳转，例如 `rewriting -> reviewing`\n\n这些规则现在由代码中的轻量校验统一约束，避免状态回退或跳到不合理的流程分支。\n\n### 长篇滚动规划\n\n传统方案一次规划所有章节，300+ 章时大纲空洞、节奏像赶进度。本系统采用**指南针 + 视野滚动规划**，模拟网文作者的真实创作流程：\n\n```\n初始规划                     弧结束时                      卷结束时\n┌────────────────────┐    ┌─────────────────────┐    ┌─────────────────────┐\n│ 终局方向（指南针）    │    │ Editor 弧级评审      │    │ Editor 卷级评审       │\n│ 起步 2 卷，后续按需   │    │ 弧摘要 + 角色快照     │    │ 卷摘要               │\n│ 第1弧详细章节        │ →  │ Architect 展开下一弧  │ →  │ Architect 自主创建   │\n│ 角色 + 世界观        │    │ Writer 继续写作      │    │ 下一卷 + 更新指南针    │\n└────────────────────┘    └─────────────────────┘    └─────────────────────┘\n```\n\n- **指南针（Compass）** — 终局方向 + 活跃长线 + 规模估计，每次卷边界由 Architect 更新，故事方向可随创作演化\n- **按需生成** — 当前卷写完后，Architect 根据已写内容自主创建下一卷。初始规划生成 2 卷作为起步，后续卷按需生成\n- **骨架弧** — 只有 goal + 预估章数，到达时再展开详细章节\n- **渐进细化** — 每次展开都参考前文摘要、角色快照、风格规则，越往后写越精确\n- **通用节奏模板** — 成长突破弧 / 竞技对抗弧 / 探索发现弧 / 恩怨冲突弧 / 日常过渡弧，每种弧型有参考密度和适用题材映射\n\n### 长篇上下文管理\n\n500+ 章小说采用三级摘要 + 四级压缩管线 + 智能推荐：\n\n```\n卷（Volume）→ 卷摘要\n└── 弧（Arc）→ 弧摘要 + 角色快照 + 风格规则\n    └── 章（Chapter）→ 章摘要（滑窗最近3章）\n```\n\n- **分层摘要** — 近处用章摘要，中距离用弧摘要，远处用卷摘要，层层压缩不丢信息\n- **相关章节推荐** — 每章写作时从伏笔、角色出场、状态变化、关系四个维度反查历史章节，推荐 Writer 按需回读\n- **下一章预告** — 加载下一章大纲，帮 Writer 设计章末钩子和伏笔衔接\n- **弧边界检测** — 自动识别弧/卷结束，触发评审、摘要生成和下一弧/卷展开\n\n#### 上下文压缩管线\n\n当对话超出模型上下文窗口时，按代价从低到高逐级压缩：\n\n```\nToolResultMicrocompact → LightTrim → StoreSummaryCompact → FullSummary\n     清理旧工具结果        截断长文本      store 零 LLM 压缩      LLM 摘要兜底\n```\n\n- **StoreSummaryCompact** — Writer 专用，用 store 中已有的章节摘要、角色快照、伏笔台账直接替换旧消息，零 LLM 开销\n- **FullSummary 小说定制** — Writer 使用面向叙事连续性的摘要提示词，明确要求保留角色状态、伏笔线索、审稿待修项、风格锚点\n- **压缩后恢复包** — FullSummary 后自动注入当前章节计划、大纲和角色快照，防止 Writer 压缩后\"失忆\"\n- **熔断器** — 压缩连续失败时自动跳过并显式告警，采用半开模式，下轮自动重试\n- **CJK Token 估算** — 中文 `runes × 1.5`，不会因为 `bytes/4` 低估而导致压缩触发滞后\n- **TUI 健康度渐变** — 上下文占用绿(<70%)→黄(70-85%)→红(>85%)实时展示\n\n## 快速开始\n\n```bash\n# 一键安装（macOS / Linux，无需 Go）\ncurl -fsSL https://raw.githubusercontent.com/voocel/ainovel-cli/main/scripts/install.sh | sh\n\n# 安装指定版本\ncurl -fsSL https://raw.githubusercontent.com/voocel/ainovel-cli/main/scripts/install.sh | sh -s -- v1.2.3\n\n# 或通过 Go 安装\ngo install github.com/voocel/ainovel-cli/cmd/ainovel-cli@latest\n\n# 查看版本 / 更新到最新版本\nainovel-cli --version\nainovel-cli update\n\n# 首次运行，自动进入引导流程（选择 Provider → 输入 API Key → Base URL → 模型名）\nainovel-cli\n```\n\n> Windows 或手动安装：前往 [Releases](https://github.com/voocel/ainovel-cli/releases/latest) 下载对应平台的包。\n\n### Docker\n\nDocker 镜像适合在服务器/NAS 上运行 headless 长任务，也可以用 `-it` 进入 TUI。配置和作品目录建议挂载到宿主机：\n\n```bash\nmkdir -p config workspace\n\n# TUI\ndocker run --rm -it \\\n  -v \"$PWD/config:/root/.ainovel\" \\\n  -v \"$PWD/workspace:/workspace\" \\\n  ghcr.io/voocel/ainovel-cli:latest\n\n# Headless\ndocker run --rm \\\n  -v \"$PWD/config:/root/.ainovel\" \\\n  -v \"$PWD/workspace:/workspace\" \\\n  ghcr.io/voocel/ainovel-cli:latest \\\n  --headless --prompt \"写一本东方玄幻长篇，主角从边陲小城起步\"\n```\n\n也可以用 Compose：\n\n```bash\ndocker compose run --rm ainovel\ndocker compose run --rm ainovel --headless --prompt \"写一本悬疑短篇\"\n```\n\n进入 TUI 后，启动阶段支持两种前置交互：\n\n- `快速开始`：一句话直接进入创作\n- `共创规划`：与 AI 多轮对话澄清需求，**右侧实时同步整理出的创作指令草稿**；AI 每轮主动提供 1-3 条引导建议，按数字键一键填入输入框，按 `Ctrl+S` 进入正式创作\n\n两种模式最终都会收敛为同一份创作指令，再进入同一套创作引擎。\n\n### 管理多本小说\n\n每本小说绑定到启动目录，产物落在 `{cwd}/output/novel/`。换目录启动 = 换一本，`cd` 回去启动 = 自动从最近 checkpoint 恢复。配置 `~/.ainovel/config.json` 全局共享，无需复制。\n\n### 配置文件\n\n首次运行时自动引导生成配置文件 `~/.ainovel/config.json`，后续可直接编辑该文件调整设置。删除配置文件后重新运行会再次进入引导流程。\n\n也可以手动创建配置文件，参考 `~/.ainovel/config.example.jsonc`（引导时自动生成）。\n\n```jsonc\n{\n  \"provider\": \"openrouter\",\n  \"model\": \"google/gemini-2.5-flash\",\n  \"providers\": {\n    \"openrouter\": {\n      \"api_key\": \"sk-or-v1-xxx\",\n      \"base_url\": \"https://openrouter.ai/api/v1\",\n      \"models\": [\"google/gemini-2.5-flash\", \"google/gemini-2.5-pro\"],\n      \"extra\": {\n        \"user_agent\": \"my-client/1.0\",\n        \"headers\": { \"X-Custom-Client\": \"my-client\" }\n      }\n    }\n  },\n  \"style\": \"default\"\n}\n```\n\n#### 配置文件查找顺序（后者覆盖前者）\n\n1. `~/.ainovel/config.json` — 全局配置\n2. `./.ainovel/config.json` — 项目级覆盖（可选）\n3. `--config path/to/config.json` — 命令行指定\n\n> 项目级 `.ainovel/` 是全局 `~/.ainovel/` 的镜像：同样的结构、只是根目录从家目录换成当前项目。配置放 `./.ainovel/config.json`，写作规则放 `./.ainovel/rules/*.md`（详见下文「去 AI 味与自定义规则」）。该目录含密钥，已默认加入 `.gitignore`。\n\n覆盖规则说明：\n\n- 标量字段按后者覆盖前者，例如 `provider`、`model`、`style`\n- `providers` 和 `roles` 按 key 合并，同名项内部按字段覆盖\n- 未填写的字段会继承上层配置，例如项目级配置只写 `base_url` 时会保留全局配置中的 `api_key`\n- 当前不支持用空字符串显式清空上层已有值；如需清空，请直接编辑更高优先级的配置文件\n\n> ⚠️ `provider`（以及 `roles.*.provider`）的值是 `providers` 里的 **key 名**——一根指针，不是协议名。项目级若把 `provider` 切到一个全局 `providers` 里不存在的账号，必须在项目级同时补上该账号的凭证（`api_key` / `base_url`），否则启动会报“未配置凭证”。\n\n`providers.<name>.models` 为可选字段，用于声明该 provider 下允许在 TUI `/model` 面板中切换的模型列表；如果未配置，系统会回退为当前配置文件里已经出现过的该 provider 模型。\n\n`providers.<name>.extra` 为 provider 级配置，会传给底层 HTTP 客户端，适合配置 `user_agent`、`headers`、`anthropic_beta` 等代理识别字段；`providers.<name>.extra_body` 才是请求体扩展参数，两者不要混用。\n\n## 诊断报告\n\n在 TUI 中输入 `/diag` 可对当前小说的 output 产物进行诊断分析，产出可执行的发现和改进建议。\n\n诊断覆盖四个维度：\n\n- **流程** — 改写循环卡顿、未消费的转向指令、阶段/流程状态异常、章节跳号\n- **质量** — 评审维度持续低分、合同履约率、改写率、章节字数异常\n- **规划** — 伏笔停滞、指南针过时、大纲耗尽、摘要缺失\n- **上下文** — 角色消失、时间线缺口、关系数据停滞\n\n每条发现包含：问题描述、数据证据、改进建议（指向具体的 prompt/flow/config）。\n\n`/diag` 同时会写出一份**已脱敏**的 `meta/diag-export.md`（移除小说正文，仅保留工具调用、错误串、重复次数等行为骨架）。遇到死循环 / 中断类问题，把它贴到 GitHub issue 即可，方便维护者在拿不到本地数据的情况下定位。\n\n## 仿写画像\n\n把参考文章放到当前启动目录的 `simulate/` 文件夹中，然后在 TUI 输入 `/simulate`。系统会递归读取 `.txt`、`.md`、`.markdown` 文件，用 architect 模型分析语料，并写入：\n\n```text\noutput/novel/meta/simulation_profile.json\n```\n\n再次运行 `/simulate` 时，会按 `relative_path + sha256` 跳过未变化文件；如果没有新增或变更内容，会提示“画像已是最新”并且不会调用 LLM。若已有画像且 `simulate/` 中出现新增或修改文章，系统会在原画像基础上继续合成。\n\n也可以导入之前生成的画像，避免重复分析同一批文章：\n\n```text\n/simulate\n/importsim ./profile.json\n```\n\n`/importsim` 只接受本功能生成的 `simulation_profile.v1` JSON，并按语料指纹合并，重复来源会跳过。只导入可信来源的画像文件；导入内容会成为后续 Agent 的上下文参考。画像会以 compact 形式注入 `novel_context`，Coordinator、Architect、Writer、Editor 都能读取；各 Agent 只借鉴结构、节奏、钩子和吸引读者手法，不复制原文表达或专有设定。\n\n## 导入\n\n在 TUI 中输入 `/import <文件路径>` 可把一本已有的小说反推导入：先按章切分，再用 LLM 反推出前提 / 角色 / 世界观 / 分层大纲 / 指南针，逐章落盘。原文作为第一卷落成可续写的连载，导入完成后会**自动接力续写**——Coordinator 在第一卷末做评审/摘要、追加新卷，从下一章继续。\n\n```\n/import ~/我的小说.txt              # 从头导入并反推 foundation\n/import ~/我的小说.txt from=50      # 从第 50 章接着导入（跳过反推）\n```\n\n**章节切分规则**：自动识别这些标题格式（行首，可带 `#`/`##` Markdown 前缀、`【】`/`〖〗` 包裹、全角空格，兼容 GBK/BOM 编码）：\n\n- 中文编号：`第一章` `第3回` `第十话` `第二卷` `第五节` `第二幕`、独立 `卷一`，数字支持大写（`第壹章`），可带副标题（`第三章：决战`）\n- 中文特殊单元：`序章` `楔子` `引子` `前言` `尾声` `终章` `后记` `番外` `外传`\n- 英文：`Chapter 1` `Chapter II`、`Prologue` `Epilogue`，可带副标题（`Chapter 1: The Beginning`）\n\n若提示**\"未识别到任何章节\"**，请确认文件确为分章小说文本（章节标题独占一行、位于行首）。\n\n> 导入是确定性回放，不经过 Coordinator；原文会逐字落盘为已完成章节，因此适合\"续写同一本书\"。如果只想借鉴设定做全新创作，请用普通方式起一本新书、在需求里描述想要的风格设定。\n\n## 导出\n\n在 TUI 中输入 `/export` 可把已完成的章节合并导出，默认 TXT，写到 `{novelDir}/{NovelName}.txt`。导出是只读操作，写作中途也可以随时拿\"现阶段成品\"，不影响 Coordinator 运行。\n\n格式由**输出路径后缀**决定（`.txt` / `.epub`）：\n\n```text\n/export                            # 默认 TXT，{novelDir}/{NovelName}.txt\n/export ~/光斑.txt                  # 后缀 .txt → TXT\n/export ~/光斑.epub                 # 后缀 .epub → EPUB（Apple Books / 微信读书 / Kindle 转换器可读）\n/export from=10 to=30 --overwrite  # 章节区间 + 覆盖\n/export from=10 ~/x.epub --overwrite\n```\n\n- **TXT** — `《书名》` → 卷分隔 → 章节正文（长篇分层模式自动加卷分隔）。两类内部数据**不进导出**：premise（创作蓝图，含目标读者 / 写作禁区等后台信息，写给作者与引擎看的）、弧分隔（读者视角下弧是过细的内部结构）。导出器统一生成\"第 N 章 标题\"，正文里 writer 自带的重复标题（`# 第N章…` 或 `# 章节名`）会被剥掉。\n- **EPUB** — EPUB 3 标准容器，含封面页、目录、按章拆分的 XHTML，标识符基于内容稳定派生（重导出同一本书阅读器识别为更新版本）。不带封面图。\n\n范围内未完成的章节会跳过并显示在结果里，不算错误。\n\n#### 按角色使用不同模型\n\n通过 `roles` 字段为不同智能体分配不同的模型，未配置的角色使用默认模型：\n\n```jsonc\n{\n  \"provider\": \"openrouter\",\n  \"model\": \"google/gemini-2.5-flash\",\n ",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/voocel/ainovel-cli\n\ngo 1.25.5\n\nrequire (\n\tgithub.com/charmbracelet/bubbles v1.0.0\n\tgithub.com/charmbracelet/bubbletea v1.3.10\n\tgithub.com/charmbracelet/lipgloss v1.1.0\n\tgithub.com/charmbracelet/x/ansi v0.11.7\n\tgithub.com/voocel/agentcore v1.7.6\n\tgolang.org/x/text v0.38.0\n\tgopkg.in/yaml.v3 v3.0.1\n)\n\nrequire (\n\tgithub.com/atotto/clipboard v0.1.4 // indirect\n\tgithub.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect\n\tgithub.com/charmbracelet/colorprofile v0.4.1 // indirect\n\tgithub.com/charmbracelet/x/cellbuf v0.0.15 // indirect\n\tgithub.com/charmbracelet/x/term v0.2.2 // indirect\n\tgithub.com/clipperhouse/displaywidth v0.11.0 // indirect\n\tgithub.com/clipperhouse/uax29/v2 v2.7.0 // indirect\n\tgithub.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect\n\tgithub.com/lucasb-eyer/go-colorful v1.4.0 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/mattn/go-localereader v0.0.1 // indirect\n\tgithub.com/mattn/go-runewidth v0.0.23 // indirect\n\tgithub.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect\n\tgithub.com/muesli/cancelreader v0.2.2 // indirect\n\tgithub.com/muesli/termenv v0.16.0 // indirect\n\tgithub.com/rivo/uniseg v0.4.7 // indirect\n\tgithub.com/voocel/litellm v1.8.2 // indirect\n\tgithub.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect\n\tgolang.org/x/image v0.43.0 // indirect\n\tgolang.org/x/sys v0.38.0 // indirect\n)\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "llm"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 80
    },
    "strategic_score": 80
  },
  {
    "owner": "louis-e",
    "name": "arnis",
    "full_name": "louis-e/arnis",
    "url": "https://github.com/louis-e/arnis",
    "description": "Generate any location from the real world in Minecraft with a high level of detail.",
    "language": "Rust",
    "total_stars": 16499,
    "forks": 1369,
    "stars_this_period": 397,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "maps",
        "minecraft",
        "openstreetmap",
        "osm",
        "overpass-api",
        "rust",
        "tauri"
      ],
      "license": "Apache-2.0",
      "open_issues": 124,
      "created_at": "2022-09-10T13:42:29Z",
      "pushed_at": "2026-06-28T21:48:12Z",
      "homepage": "https://arnismc.com/",
      "default_branch": "main",
      "forks": 1369,
      "watchers": 52,
      "archived": false,
      "size_kb": 101269
    },
    "readme_content": "<img src=\"assets/git/banner.png\" width=\"100%\" alt=\"Banner\">\n\n# Arnis [![CI Build Status](https://github.com/louis-e/arnis/actions/workflows/ci-build.yml/badge.svg)](https://github.com/louis-e/arnis/actions) [<img alt=\"GitHub Release\" src=\"https://img.shields.io/github/v/release/louis-e/arnis\" />](https://github.com/louis-e/arnis/releases) [<img alt=\"GitHub Downloads (all assets, all releases\" src=\"https://img.shields.io/github/downloads/louis-e/arnis/total\" />](https://github.com/louis-e/arnis/releases) [![Download here](https://img.shields.io/badge/Download-here-green)](https://github.com/louis-e/arnis/releases) [![Discord](https://img.shields.io/discord/1326192999738249267?label=Discord&color=%237289da)](https://discord.gg/mA2g69Fhxq)\n\nArnis creates complex and accurate Minecraft Java Edition (1.17+) and Bedrock Edition worlds that reflect real-world geography, topography, and architecture.\n\nThis free and open source project is designed to handle large-scale geographic data from the real world and generate detailed Minecraft worlds. The algorithm processes geospatial data from OpenStreetMap as well as elevation data to create an accurate Minecraft representation of terrain and architecture.\nGenerate your hometown, big cities, and natural landscapes with ease!\n\n_**Want mobile generation or larger map sizes?** [MapSmith](https://arnismc.com/mapsmith/) generates worlds in your browser, no install required._\n\n![Minecraft Preview](assets/git/preview.jpg)\n<i>This GitHub page and [arnismc.com](https://arnismc.com) are the only official project websites. Do not download Arnis from any other website.</i>\n\n## :keyboard: Usage\n<img width=\"60%\" src=\"assets/git/gui.png\"><br>\nDownload the [latest release](https://github.com/louis-e/arnis/releases/) or [compile](#trophy-open-source) the project on your own.\n\nChoose your area on the map using the rectangle tool and select your Minecraft world - then simply click on <i>Start Generation</i>!\nAdditionally, you can customize various generation settings, such as world scale, spawn point, or building interior generation.\n\n## 📚 Documentation\n\n<img src=\"assets/git/documentation.png\" width=\"100%\" alt=\"Banner\">\n\nFull documentation is available in the [GitHub Wiki](https://github.com/louis-e/arnis/wiki/), covering topics such as technical explanations, FAQs, contribution guidelines and roadmaps.\n\n[backgroundvid.webm](https://github.com/user-attachments/assets/420acc19-a850-418e-8397-1a45b05582ab)\n\n## :trophy: Open Source\n#### Key objectives of this project\n- **Modularity**: Ensure that all components (e.g., data fetching, processing, and world generation) are cleanly separated into distinct modules for better maintainability and scalability.\n- **Performance Optimization**: We aim to maintain strong performance and fast world generation.\n- **Comprehensive Documentation**: Detailed in-code documentation for a clear structure and logic.\n- **User-Friendly Experience**: Focus on making the project easy to use for end users.\n- **Cross-Platform Support**: We want this project to run smoothly on Windows, macOS, and Linux.\n\n#### How to contribute\nThis project is open source and welcomes contributions from everyone! Whether you're interested in fixing bugs, improving performance, adding new features, or enhancing documentation, your input is valuable. Simply fork the repository, make your changes, and submit a pull request. Please respect the above-mentioned key objectives. Contributions of all levels are appreciated, and your efforts help improve this tool for everyone.\n\nCommand line Build: ```cargo run --no-default-features -- --terrain --path=\"C:/YOUR_PATH/.minecraft/saves/worldname\" --bbox=\"min_lat,min_lng,max_lat,max_lng\"```<br>\nGUI Build: ```cargo run```<br>\n\nAfter your pull request is merged, I will take care of regularly creating update releases which will include your changes.\n\nIf you are using Nix, you can run the program directly with `nix run github:louis-e/arnis -- --terrain --path=YOUR_PATH/.minecraft/saves/worldname --bbox=\"min_lat,min_lng,max_lat,max_lng\"`\n\n## :star: Star History\n\n<a href=\"https://star-history.com/#louis-e/arnis&Date\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=louis-e/arnis&Date&theme=dark\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=louis-e/arnis&Date&type=Date\" />\n   <img alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=louis-e/arnis&Date&type=Date\" />\n </picture>\n</a>\n\n## :newspaper: Academic & Press Recognition\n\n<img src=\"assets/git/recognition.png\" width=\"100%\" alt=\"Banner\">\n\nArnis has been recognized in various academic and press publications after gaining more attention in December 2024.\n\n[Building realistic Minecraft worlds with Open Data on AWS: How Arnis uses elevation datasets at scale](https://aws.amazon.com/de/blogs/publicsector/building-realistic-minecraft-worlds-with-open-data-on-aws-how-arnis-uses-elevation-datasets-at-scale/)\n\n[Floodcraft: Game-based Interactive Learning Environment using Minecraft for Flood Mitigation and Preparedness for K-12 Education](https://www.researchgate.net/publication/384644535_Floodcraft_Game-based_Interactive_Learning_Environment_using_Minecraft_for_Flood_Mitigation_and_Preparedness_for_K-12_Education)\n\n[Hackaday: Bringing OpenStreetMap Data into Minecraft](https://hackaday.com/2024/12/30/bringing-openstreetmap-data-into-minecraft/)\n\n[TomsHardware: Minecraft Tool Lets You Create Scale Replicas of Real-World Locations](https://www.tomshardware.com/video-games/pc-gaming/minecraft-tool-lets-you-create-scale-replicas-of-real-world-locations-arnis-uses-geospatial-data-from-openstreetmap-to-generate-minecraft-maps)\n\n[XDA Developers: Hometown Minecraft Map: Arnis](https://www.xda-developers.com/hometown-minecraft-map-arnis/)\n\nFree to use press assets, including screenshots and logos, can be found [here](https://drive.google.com/file/d/1T1IsZSyT8oa6qAO_40hVF5KR8eEVCJjo/view?usp=sharing).\n\n## :copyright: License Information\nCopyright (c) 2022-2026 Louis Erbkamm (louis-e)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.[^3]\n\nThe Luanti block-name mapping in `src/luanti_block_map.rs` is derived from [MC2MT](https://github.com/rollerozxa/MC2MT) by rollerozxa and is licensed under the GNU Lesser General Public License v2.1 or later. The full attribution and license header are preserved in that file.\n\nDownload Arnis only from the official source https://arnismc.com or https://github.com/louis-e/arnis/. Every other website providing a download and claiming to be affiliated with the project is unofficial and may be malicious.\n\nThe logo was made by @nxfx21.\n\nNOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.\n\n\n[^1]: https://en.wikipedia.org/wiki/OpenStreetMap\n\n[^2]: https://en.wikipedia.org/wiki/Arnis,_Germany\n\n[^3]: https://github.com/louis-e/arnis/blob/main/LICENSE\n",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[package]\nname = \"arnis\"\nversion = \"2.9.0\"\nedition = \"2021\"\ndescription = \"Arnis - Generate real life cities in Minecraft\"\nhomepage = \"https://github.com/louis-e/arnis\"\nrepository = \"https://github.com/louis-e/arnis\"\nlicense = \"Apache-2.0\"\nreadme = \"README.md\"\n\n[profile.release]\nlto = \"thin\"\noverflow-checks = true\n\n[features]\ndefault = [\"gui\"]\ngui = [\"tauri\", \"tauri-plugin-log\", \"tauri-plugin-shell\", \"tokio\", \"rfd\", \"tauri-build\"]\n\n[build-dependencies]\ntauri-build = {version = \"2\", optional = true}\n\n[dependencies]\nbase64 = \"0.22.1\"\nbytes = \"1\"\nbyteorder = \"1.5\"\nclap = { version = \"4.6.0\", features = [\"derive\", \"env\"] }\ncolored = \"3.0.0\"\ndda-voxelize = { git = \"https://github.com/MIERUNE/dda-voxelize-rs\", rev = \"1e0844a873262f13b19a709e188a3df22a6fbf97\" }\ndirs = \"6.0.0\"\nfastanvil = \"0.32.0\"\nfastnbt = \"2.6.0\"\nflate2 = \"1.1\"\nfnv = \"1.0.7\"\nfs2 = \"0.4\"\ngeo = \"0.33.1\"\ngltf = { version = \"1\", default-features = false, features = [\"import\", \"names\", \"utils\", \"KHR_materials_unlit\"] }\nimage = \"0.25\"\ninclude_dir = \"0.7\"\nindicatif = \"0.18.4\"\nitertools = \"0.14.0\"\njsonwebtoken = \"10.3.0\"\nlog = \"0.4.27\"\nmimalloc = \"0.1\"\nonce_cell = \"1.21.3\"\nrand = { version = \"0.9.3\", features = [\"std\", \"std_rng\"] }\nrand_chacha = \"0.9\"\nrayon = \"1.10.0\"\nreqwest = { version = \"0.13.1\", features = [\"blocking\", \"json\", \"query\"] }\nrfd = { version = \"0.17.2\", optional = true }\nsemver = \"1.0.27\"\nparquet = { version = \"58\", default-features = false, features = [\"snap\", \"zstd\"] }\nserde = { version = \"1.0\", features = [\"derive\"] }\nserde_json = \"1.0\"\nsysinfo = { version = \"0.33\", default-features = false, features = [\"system\"] }\ntauri = { version = \"2\", optional = true }\ntauri-plugin-log = { version = \"2.6.0\", optional = true }\ntauri-plugin-shell = { version = \"2\", optional = true }\ntiff = \"0.11\"\ntokio = { version = \"1.48.0\", features = [\"full\"], optional = true }\nbedrockrs_level = { git = \"https://github.com/bedrock-crustaceans/bedrock-rs\", rev = \"7ef268b\", package = \"bedrockrs_level\" }\nbedrockrs_shared = { git = \"https://github.com/bedrock-crustaceans/bedrock-rs\", rev = \"7ef268b\", package = \"bedrockrs_shared\" }\nnbtx = { git = \"https://github.com/bedrock-crustaceans/nbtx\" }\nvek = \"0.17\"\nzip = { version = \"0.6\", default-features = false, features = [\"deflate\"] }\nrusty-leveldb = \"3\"\nrusqlite = { version = \"0.40\", features = [\"bundled\"] }\nzstd = \"0.13\"\n\n[target.'cfg(windows)'.dependencies]\nwindows = { version = \"0.62.0\", features = [\"Win32_System_Console\"] }\n\n[dev-dependencies]\ntempfile = \"3.26.0\"\n\n[[example]]\nname = \"refresh_wikidata_index\"\npath = \"assets/refresh_wikidata_index.rs\"\n\n# Freeze nbtx at the last pre-`NbtError`-rename commit; the pinned\n# bedrockrs_proto_core leaves it unpinned so cargo update would break it.\n[patch.\"https://github.com/bedrock-crustaceans/nbtx\"]\nnbtx = { git = \"https://github.com/louis-e/nbtx\", rev = \"551c38ac74f2e68a07d3dbdd354faac0c0ac966e\" }",
    "strategic_keywords": [
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 8,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 8,
      "total": 73
    },
    "strategic_score": 73
  },
  {
    "owner": "continuedev",
    "name": "continue",
    "full_name": "continuedev/continue",
    "url": "https://github.com/continuedev/continue",
    "description": "open-source coding agent",
    "language": "TypeScript",
    "total_stars": 34551,
    "forks": 4888,
    "stars_this_period": 360,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "agent",
        "ai",
        "cli",
        "developer-tools",
        "open-source"
      ],
      "license": "Apache-2.0",
      "open_issues": 966,
      "created_at": "2023-05-24T03:39:39Z",
      "pushed_at": "2026-06-28T08:52:49Z",
      "homepage": "https://continue.dev",
      "default_branch": "main",
      "forks": 4888,
      "watchers": 164,
      "archived": false,
      "size_kb": 871554
    },
    "readme_content": "<h1 align=\"center\">Continue</h1>\n\n<p align=\"center\">Pioneering open-source coding agent</p>\n\n<div align=\"center\">\n\n<a href=\"https://opensource.org/licenses/Apache-2.0\"><img src=\"https://img.shields.io/badge/License-Apache_2.0-blue.svg\" /></a>\n<a href=\"https://docs.continue.dev\"><img src=\"https://img.shields.io/badge/Docs-docs.continue.dev-blue\" /></a>\n<a href=\"https://github.com/continuedev/continue/releases\"><img src=\"https://img.shields.io/badge/Changelog-GitHub_Releases-blue\" /></a>\n\n</div>\n\n<p align=\"center\">\n  <img src=\"media/github-readme.png\" alt=\"Banner\" />\n</p>\n\n## What is Continue?\n\n> _Note: The `continuedev/continue` repository is no longer actively maintained and is read-only for all users._\n\nContinue is a coding agent available as a [CLI](#cli), [VS Code extension](#vs-code), and [JetBrains plugin](#jetbrains).\n\n## Documentation\n\nTo learn how to configure Continue, how it works, and how to customize it, check out the [Continue Docs](https://docs.continue.dev).\n\n## Final 2.0.0 Release\n\nWe polished Continue and did a final 2.0.0 release of the VS Code extension, CLI, and JetBrains plugin.\n\nThis included removing anonymous telemetry, pulling out authentication, squashing bugs, and more.\n\n### VS Code\n\n[![VS Code Marketplace](https://img.shields.io/badge/VS_Code_Marketplace-007ACC?logo=visualstudiocode&logoColor=white)](https://marketplace.visualstudio.com/items?itemName=Continue.continue) [![OpenVSX Registry](https://img.shields.io/badge/OpenVSX_Registry-C160EF?logo=eclipseide&logoColor=white)](https://open-vsx.org/extension/Continue/continue) [![View source](https://img.shields.io/badge/View_source-181717?logo=github&logoColor=white)](extensions/vscode)\n\n### CLI\n\n[![npm](https://img.shields.io/badge/npm-CB3837?logo=npm&logoColor=white)](https://www.npmjs.com/package/@continuedev/cli) [![View source](https://img.shields.io/badge/View_source-181717?logo=github&logoColor=white)](extensions/cli)\n\n### JetBrains\n\n> _Note: We recommend using the Continue CLI instead of the JetBrains plugin._\n\n[![GitHub Releases](https://img.shields.io/badge/GitHub_Releases-181717?logo=github&logoColor=white)](https://github.com/continuedev/continue/releases) [![View source](https://img.shields.io/badge/View_source-181717?logo=github&logoColor=white)](extensions/intellij)\n\n## Contributors\n\nThank you to the entire Continue community for helping us create a pioneering coding agent.\n\nWhat we built together pushed the boundaries of what AI developer tooling could be.\n\nWe hope this codebase continues to serve as a foundation for others.\n\n## Code friends\n\n<a href=\"https://github.com/continuedev/continue/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=continuedev/continue&max=500\" />\n</a>\n\n## License\n\nApache 2.0 © 2023-2026 Continue Dev, Inc.\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"continue\",\n  \"scripts\": {\n    \"tsc:watch\": \"concurrently -n gui,vscode,core,binary -c cyan,magenta,yellow,green \\\"npm run tsc:watch:gui\\\" \\\"npm run tsc:watch:vscode\\\" \\\"npm run tsc:watch:core\\\" \\\"npm run tsc:watch:binary\\\"\",\n    \"tsc:watch:gui\": \"tsc --project gui/tsconfig.json --watch --noEmit --pretty\",\n    \"tsc:watch:vscode\": \"tsc --project extensions/vscode/tsconfig.json --watch --noEmit --pretty\",\n    \"tsc:watch:core\": \"tsc --project core/tsconfig.json --watch --noEmit --pretty\",\n    \"tsc:watch:binary\": \"tsc --project binary/tsconfig.json --watch --noEmit --pretty\",\n    \"format\": \"prettier --write \\\"**/*.{js,jsx,ts,tsx,json,css,md}\\\" --ignore-path .gitignore --ignore-path .prettierignore\",\n    \"format:check\": \"prettier --check \\\"**/*.{js,jsx,ts,tsx,json,css,md}\\\" --ignore-path .gitignore --ignore-path .prettierignore\",\n    \"prepare\": \"husky\"\n  },\n  \"lint-staged\": {\n    \"*.{js,jsx,ts,tsx,json,css,md}\": \"prettier --write\"\n  },\n  \"devDependencies\": {\n    \"@typescript-eslint/parser\": \"^8.40.0\",\n    \"concurrently\": \"^9.1.2\",\n    \"eslint\": \"^8\",\n    \"eslint-plugin-import\": \"^2.29.1\",\n    \"husky\": \"^9.1.7\",\n    \"lint-staged\": \"^15.5.2\",\n    \"prettier\": \"^3.3.3\",\n    \"prettier-plugin-tailwindcss\": \"^0.6.8\",\n    \"typescript\": \"^5.6.3\"\n  },\n  \"dependencies\": {\n    \"@ai-sdk/deepseek\": \"^2.0.20\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "developer tool"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 16,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 78
    },
    "strategic_score": 78
  },
  {
    "owner": "BurntSushi",
    "name": "ripgrep",
    "full_name": "BurntSushi/ripgrep",
    "url": "https://github.com/BurntSushi/ripgrep",
    "description": "ripgrep recursively searches directories for a regex pattern while respecting your gitignore",
    "language": "Rust",
    "total_stars": 65547,
    "forks": 2615,
    "stars_this_period": 341,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "cli",
        "command-line",
        "command-line-tool",
        "gitignore",
        "grep",
        "recursively-search",
        "regex",
        "ripgrep",
        "rust",
        "search"
      ],
      "license": "Unlicense",
      "open_issues": 203,
      "created_at": "2016-03-11T02:02:33Z",
      "pushed_at": "2026-06-21T12:48:16Z",
      "homepage": "",
      "default_branch": "master",
      "forks": 2615,
      "watchers": 291,
      "archived": false,
      "size_kb": 5522
    },
    "readme_content": "ripgrep (rg)\n------------\nripgrep is a line-oriented search tool that recursively searches the current\ndirectory for a regex pattern. By default, ripgrep will respect gitignore rules\nand automatically skip hidden files/directories and binary files. (To disable\nall automatic filtering by default, use `rg -uuu`.) ripgrep has first class\nsupport on Windows, macOS and Linux, with binary downloads available for [every\nrelease](https://github.com/BurntSushi/ripgrep/releases). ripgrep is similar to\nother popular search tools like The Silver Searcher, ack and grep.\n\n[![Build status](https://github.com/BurntSushi/ripgrep/workflows/ci/badge.svg)](https://github.com/BurntSushi/ripgrep/actions)\n[![Crates.io](https://img.shields.io/crates/v/ripgrep.svg)](https://crates.io/crates/ripgrep)\n[![Packaging status](https://repology.org/badge/tiny-repos/ripgrep.svg)](https://repology.org/project/ripgrep/badges)\n\nDual-licensed under MIT or the [UNLICENSE](https://unlicense.org).\n\n\n### CHANGELOG\n\nPlease see the [CHANGELOG](CHANGELOG.md) for a release history.\n\n### Documentation quick links\n\n* [Installation](#installation)\n* [User Guide](GUIDE.md)\n* [Frequently Asked Questions](FAQ.md)\n* [Regex syntax](https://docs.rs/regex/1/regex/#syntax)\n* [Configuration files](GUIDE.md#configuration-file)\n* [Shell completions](FAQ.md#complete)\n* [Building](#building)\n* [Translations](#translations)\n\n\n### Screenshot of search results\n\n[![A screenshot of a sample search with ripgrep](https://burntsushi.net/stuff/ripgrep1.png)](https://burntsushi.net/stuff/ripgrep1.png)\n\n\n### Quick examples comparing tools\n\nThis example searches the entire\n[Linux kernel source tree](https://github.com/BurntSushi/linux)\n(after running `make defconfig && make -j8`) for `[A-Z]+_SUSPEND`, where\nall matches must be words. Timings were collected on a system with an Intel\ni9-12900K 5.2 GHz.\n\nPlease remember that a single benchmark is never enough! See my\n[blog post on ripgrep](https://blog.burntsushi.net/ripgrep/)\nfor a very detailed comparison with more benchmarks and analysis.\n\n| Tool | Command | Line count | Time |\n| ---- | ------- | ---------- | ---- |\n| ripgrep (Unicode) | `rg -n -w '[A-Z]+_SUSPEND'` | 536 | **0.082s** (1.00x) |\n| [hypergrep](https://github.com/p-ranav/hypergrep) | `hgrep -n -w '[A-Z]+_SUSPEND'` | 536 | 0.167s (2.04x) |\n| [git grep](https://www.kernel.org/pub/software/scm/git/docs/git-grep.html) | `git grep -P -n -w '[A-Z]+_SUSPEND'` | 536 | 0.273s (3.34x) |\n| [The Silver Searcher](https://github.com/ggreer/the_silver_searcher) | `ag -w '[A-Z]+_SUSPEND'` | 534 | 0.443s (5.43x) |\n| [ugrep](https://github.com/Genivia/ugrep) | `ugrep -r --ignore-files --no-hidden -I -w '[A-Z]+_SUSPEND'` | 536 | 0.639s (7.82x) |\n| [git grep](https://www.kernel.org/pub/software/scm/git/docs/git-grep.html) | `LC_ALL=C git grep -E -n -w '[A-Z]+_SUSPEND'` | 536 | 0.727s (8.91x) |\n| [git grep (Unicode)](https://www.kernel.org/pub/software/scm/git/docs/git-grep.html) | `LC_ALL=en_US.UTF-8 git grep -E -n -w '[A-Z]+_SUSPEND'` | 536 | 2.670s (32.70x) |\n| [ack](https://github.com/beyondgrep/ack3) | `ack -w '[A-Z]+_SUSPEND'` | 2677 | 2.935s (35.94x) |\n\nHere's another benchmark on the same corpus as above that disregards gitignore\nfiles and searches with a whitelist instead. The corpus is the same as in the\nprevious benchmark, and the flags passed to each command ensure that they are\ndoing equivalent work:\n\n| Tool | Command | Line count | Time |\n| ---- | ------- | ---------- | ---- |\n| ripgrep | `rg -uuu -tc -n -w '[A-Z]+_SUSPEND'` | 447 | **0.063s** (1.00x) |\n| [ugrep](https://github.com/Genivia/ugrep) | `ugrep -r -n --include='*.c' --include='*.h' -w '[A-Z]+_SUSPEND'` | 447 | 0.607s (9.62x) |\n| [GNU grep](https://www.gnu.org/software/grep/) | `grep -E -r -n --include='*.c' --include='*.h' -w '[A-Z]+_SUSPEND'` | 447 | 0.674s (10.69x) |\n\nNow we'll move to searching on single large file. Here is a straight-up\ncomparison between ripgrep, ugrep and GNU grep on a file cached in memory\n(~13GB, [`OpenSubtitles.raw.en.gz`](http://opus.nlpl.eu/download.php?f=OpenSubtitles/v2018/mono/OpenSubtitles.raw.en.gz), decompressed):\n\n| Tool | Command | Line count | Time |\n| ---- | ------- | ---------- | ---- |\n| ripgrep (Unicode) | `rg -w 'Sherlock [A-Z]\\w+'` | 7882 | **1.042s** (1.00x) |\n| [ugrep](https://github.com/Genivia/ugrep) | `ugrep -w 'Sherlock [A-Z]\\w+'` | 7882 | 1.339s (1.28x) |\n| [GNU grep (Unicode)](https://www.gnu.org/software/grep/) | `LC_ALL=en_US.UTF-8 egrep -w 'Sherlock [A-Z]\\w+'` | 7882 | 6.577s (6.31x) |\n\nIn the above benchmark, passing the `-n` flag (for showing line numbers)\nincreases the times to `1.664s` for ripgrep and `9.484s` for GNU grep. ugrep\ntimes are unaffected by the presence or absence of `-n`.\n\nBeware of performance cliffs though:\n\n| Tool | Command | Line count | Time |\n| ---- | ------- | ---------- | ---- |\n| ripgrep (Unicode) | `rg -w '[A-Z]\\w+ Sherlock [A-Z]\\w+'` | 485 | **1.053s** (1.00x) |\n| [GNU grep (Unicode)](https://www.gnu.org/software/grep/) | `LC_ALL=en_US.UTF-8 grep -E -w '[A-Z]\\w+ Sherlock [A-Z]\\w+'` | 485 | 6.234s (5.92x) |\n| [ugrep](https://github.com/Genivia/ugrep) | `ugrep -w '[A-Z]\\w+ Sherlock [A-Z]\\w+'` | 485 | 28.973s (27.51x) |\n\nAnd performance can drop precipitously across the board when searching big\nfiles for patterns without any opportunities for literal optimizations:\n\n| Tool | Command | Line count | Time |\n| ---- | ------- | ---------- | ---- |\n| ripgrep | `rg '[A-Za-z]{30}'` | 6749 | **15.569s** (1.00x) |\n| [ugrep](https://github.com/Genivia/ugrep) | `ugrep -E '[A-Za-z]{30}'` | 6749 | 21.857s (1.40x) |\n| [GNU grep](https://www.gnu.org/software/grep/) | `LC_ALL=C grep -E '[A-Za-z]{30}'` | 6749 | 32.409s (2.08x) |\n| [GNU grep (Unicode)](https://www.gnu.org/software/grep/) | `LC_ALL=en_US.UTF-8 grep -E '[A-Za-z]{30}'` | 6795 | 8m30s (32.74x) |\n\nFinally, high match counts also tend to both tank performance and smooth\nout the differences between tools (because performance is dominated by how\nquickly one can handle a match and not the algorithm used to detect the match,\ngenerally speaking):\n\n| Tool | Command | Line count | Time |\n| ---- | ------- | ---------- | ---- |\n| ripgrep | `rg the` | 83499915 | **6.948s** (1.00x) |\n| [ugrep](https://github.com/Genivia/ugrep) | `ugrep the` | 83499915 | 11.721s (1.69x) |\n| [GNU grep](https://www.gnu.org/software/grep/) | `LC_ALL=C grep the` | 83499915 | 15.217s (2.19x) |\n\n### Why should I use ripgrep?\n\n* It can replace many use cases served by other search tools\n  because it contains most of their features and is generally faster. (See\n  [the FAQ](FAQ.md#posix4ever) for more details on whether ripgrep can truly\n  replace grep.)\n* Like other tools specialized to code search, ripgrep defaults to\n  [recursive search](GUIDE.md#recursive-search) and does [automatic\n  filtering](GUIDE.md#automatic-filtering). Namely, ripgrep won't search files\n  ignored by your `.gitignore`/`.ignore`/`.rgignore` files, it won't search\n  hidden files and it won't search binary files. Automatic filtering can be\n  disabled with `rg -uuu`.\n* ripgrep can [search specific types of files](GUIDE.md#manual-filtering-file-types).\n  For example, `rg -tpy foo` limits your search to Python files and `rg -Tjs\n  foo` excludes JavaScript files from your search. ripgrep can be taught about\n  new file types with custom matching rules.\n* ripgrep supports many features found in `grep`, such as showing the context\n  of search results, searching multiple patterns, highlighting matches with\n  color and full Unicode support. Unlike GNU grep, ripgrep stays fast while\n  supporting Unicode (which is always on).\n* ripgrep has optional support for switching its regex engine to use PCRE2.\n  Among other things, this makes it possible to use look-around and\n  backreferences in your patterns, which are not supported in ripgrep's default\n  regex engine. PCRE2 support can be enabled with `-P/--pcre2` (use PCRE2\n  always) or `--auto-hybrid-regex` (use PCRE2 only if needed). An alternative\n  syntax is provided via the `--engine (default|pcre2|auto)` option.\n* ripgrep has [rudimentary support for replacements](GUIDE.md#replacements),\n  which permit rewriting output based on what was matched.\n* ripgrep supports [searching files in text encodings](GUIDE.md#file-encoding)\n  other than UTF-8, such as UTF-16, latin-1, GBK, EUC-JP, Shift_JIS and more.\n  (Some support for automatically detecting UTF-16 is provided. Other text\n  encodings must be specifically specified with the `-E/--encoding` flag.)\n* ripgrep supports searching files compressed in a common format (brotli,\n  bzip2, gzip, lz4, lzma, xz, or zstandard) with the `-z/--search-zip` flag.\n* ripgrep supports\n  [arbitrary input preprocessing filters](GUIDE.md#preprocessor)\n  which could be PDF text extraction, less supported decompression, decrypting,\n  automatic encoding detection and so on.\n* ripgrep can be configured via a\n  [configuration file](GUIDE.md#configuration-file).\n\nIn other words, use ripgrep if you like speed, filtering by default, fewer\nbugs and Unicode support.\n\n\n### Why shouldn't I use ripgrep?\n\nDespite initially not wanting to add every feature under the sun to ripgrep,\nover time, ripgrep has grown support for most features found in other file\nsearching tools. This includes searching for results spanning across multiple\nlines, and opt-in support for PCRE2, which provides look-around and\nbackreference support.\n\nAt this point, the primary reasons not to use ripgrep probably consist of one\nor more of the following:\n\n* You need a portable and ubiquitous tool. While ripgrep works on Windows,\n  macOS and Linux, it is not ubiquitous and it does not conform to any\n  standard such as POSIX. The best tool for this job is good old grep.\n* There still exists some other feature (or bug) not listed in this README that\n  you rely on that's in another tool that isn't in ripgrep.\n* There is a performance edge case where ripgrep doesn't do well where another\n  tool does do well. (Please file a bug report!)\n* ripgrep isn't possible to install on your machine or isn't available for your\n  platform. (Please file a bug report!)\n\n\n### Is it really faster than everything else?\n\nGenerally, yes. A large number of benchmarks with detailed analysis for each is\n[available on my blog](https://blog.burntsushi.net/ripgrep/).\n\nSummarizing, ripgrep is fast because:\n\n* It is built on top of\n  [Rust's regex engine](https://github.com/rust-lang/regex).\n  Rust's regex engine uses finite automata, SIMD and aggressive literal\n  optimizations to make searching very fast. (PCRE2 support can be opted into\n  with the `-P/--pcre2` flag.)\n* Rust's regex library maintains performance with full Unicode support by\n  building UTF-8 decoding directly into its deterministic finite automaton\n  engine.\n* It supports searching with either memory maps or by searching incrementally\n  with an intermediate buffer. The former is better for single files and the\n  latter is better for large directories. ripgrep chooses the best searching\n  strategy for you automatically.\n* Applies your ignore patterns in `.gitignore` files using a\n  [`RegexSet`](https://docs.rs/regex/1/regex/struct.RegexSet.html).\n  That means a single file path can be matched against multiple glob patterns\n  simultaneously.\n* It uses a lock-free parallel recursive directory iterator, courtesy of\n  [`crossbeam`](https://docs.rs/crossbeam) and\n  [`ignore`](https://docs.rs/ignore).\n\n\n### Feature comparison\n\nAndy Lester, author of [ack](https://beyondgrep.com/), has published an\nexcellent table comparing the features of ack, ag, git-grep, GNU grep and\nripgrep: https://beyondgrep.com/feature-comparison/\n\nNote that ripgrep has grown a few significant new features recently that\nare not yet present in Andy's table. This includes, but is not limited to,\nconfiguration files, passthru, support for searching compressed files,\nmultiline search and opt-in fancy regex support via PCRE2.\n\n\n### Playground\n\nIf you'd like to try ripgrep before installing, there's an un",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[package]\nname = \"ripgrep\"\nversion = \"15.1.0\"  #:version\nauthors = [\"Andrew Gallant <jamslam@gmail.com>\"]\ndescription = \"\"\"\nripgrep is a line-oriented search tool that recursively searches the current\ndirectory for a regex pattern while respecting gitignore rules. ripgrep has\nfirst class support on Windows, macOS and Linux.\n\"\"\"\ndocumentation = \"https://github.com/BurntSushi/ripgrep\"\nhomepage = \"https://github.com/BurntSushi/ripgrep\"\nrepository = \"https://github.com/BurntSushi/ripgrep\"\nkeywords = [\"regex\", \"grep\", \"egrep\", \"search\", \"pattern\"]\ncategories = [\"command-line-utilities\", \"text-processing\"]\nlicense = \"Unlicense OR MIT\"\nexclude = [\n  \"HomebrewFormula\",\n  \"/.github/\",\n  \"/ci/\",\n  \"/pkg/brew\",\n  \"/benchsuite/\",\n  \"/scripts/\",\n  \"/crates/fuzz\",\n]\nbuild = \"build.rs\"\nautotests = false\nedition = \"2024\"\nrust-version = \"1.85\"\n\n[[bin]]\nbench = false\npath = \"crates/core/main.rs\"\nname = \"rg\"\n\n[[test]]\nname = \"integration\"\npath = \"tests/tests.rs\"\n\n[workspace]\nmembers = [\n  \"crates/globset\",\n  \"crates/grep\",\n  \"crates/cli\",\n  \"crates/matcher\",\n  \"crates/pcre2\",\n  \"crates/printer\",\n  \"crates/regex\",\n  \"crates/searcher\",\n  \"crates/ignore\",\n]\n\n[dependencies]\nanyhow = \"1.0.75\"\nbstr = \"1.7.0\"\ngrep = { version = \"0.4.1\", path = \"crates/grep\" }\nignore = { version = \"0.4.24\", path = \"crates/ignore\" }\nlexopt = \"0.3.0\"\nlog = \"0.4.5\"\nserde_json = \"1.0.23\"\ntermcolor = \"1.1.0\"\ntextwrap = { version = \"0.16.0\", default-features = false }\n\n[target.'cfg(all(target_env = \"musl\", target_pointer_width = \"64\"))'.dependencies.tikv-jemallocator]\nversion = \"0.6.0\"\n\n[dev-dependencies]\nserde = \"1.0.77\"\nserde_derive = \"1.0.77\"\nwalkdir = \"2\"\n\n[features]\npcre2 = [\"grep/pcre2\"]\n\n[profile.release]\ndebug = 1\n\n[profile.release-lto]\ninherits = \"release\"\nopt-level = 3\ndebug = \"none\"\nstrip = \"symbols\"\ndebug-assertions = false\noverflow-checks = false\nlto = \"fat\"\npanic = \"abort\"\nincremental = false\ncodegen-units = 1\n\n[profile.deb]\ninherits = \"release-lto\"\n\n[package.metadata.deb]\nfeatures = [\"pcre2\"]\nsection = \"utils\"\nassets = [\n  [\"target/release/rg\", \"usr/bin/\", \"755\"],\n  [\"COPYING\", \"usr/share/doc/ripgrep/\", \"644\"],\n  [\"LICENSE-MIT\", \"usr/share/doc/ripgrep/\", \"644\"],\n  [\"UNLICENSE\", \"usr/share/doc/ripgrep/\", \"644\"],\n  [\"CHANGELOG.md\", \"usr/share/doc/ripgrep/CHANGELOG\", \"644\"],\n  [\"README.md\", \"usr/share/doc/ripgrep/README\", \"644\"],\n  [\"FAQ.md\", \"usr/share/doc/ripgrep/FAQ\", \"644\"],\n  # The man page is automatically generated by ripgrep's build process, so\n  # this file isn't actually committed. Instead, to create a dpkg, either\n  # create a deployment/deb directory and copy the man page to it, or use the\n  # 'ci/build-deb' script.\n  [\"deployment/deb/rg.1\", \"usr/share/man/man1/rg.1\", \"644\"],\n  # Similarly for shell completions.\n  [\"deployment/deb/rg.bash\", \"usr/share/bash-completion/completions/rg\", \"644\"],\n  [\"deployment/deb/rg.fish\", \"usr/share/fish/vendor_completions.d/rg.fish\", \"644\"],\n  [\"deployment/deb/_rg\", \"usr/share/zsh/vendor-completions/\", \"644\"],\n]\nextended-description = \"\"\"\\\nripgrep (rg) recursively searches your current directory for a regex pattern.\nBy default, ripgrep will respect your .gitignore and automatically skip hidden\nfiles/directories and binary files.\n\"\"\"\n",
    "strategic_keywords": [
      "memory",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "owner": "tauri-apps",
    "name": "tauri",
    "full_name": "tauri-apps/tauri",
    "url": "https://github.com/tauri-apps/tauri",
    "description": "Build smaller, faster, and more secure desktop and mobile applications with a web frontend.",
    "language": "Rust",
    "total_stars": 108440,
    "forks": 3731,
    "stars_this_period": 338,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "desktop-app",
        "high-performance",
        "mobile-app",
        "native-app",
        "rust",
        "web-frontend",
        "webview"
      ],
      "license": "Apache-2.0",
      "open_issues": 1438,
      "created_at": "2019-07-13T09:09:37Z",
      "pushed_at": "2026-06-28T18:28:50Z",
      "homepage": "https://tauri.app",
      "default_branch": "dev",
      "forks": 3731,
      "watchers": 545,
      "archived": false,
      "size_kb": 105327
    },
    "readme_content": "<img src=\".github/splash.png\" alt=\"Tauri\" />\n\n[![status](https://img.shields.io/badge/status-stable-blue.svg)](https://github.com/tauri-apps/tauri/tree/dev)\n[![License](https://img.shields.io/badge/License-MIT%20or%20Apache%202-green.svg)](https://opencollective.com/tauri)\n[![test core](https://img.shields.io/github/actions/workflow/status/tauri-apps/tauri/test-core.yml?label=test%20core&logo=github)](https://github.com/tauri-apps/tauri/actions/workflows/test-core.yml)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri?ref=badge_shield)\n[![Chat Server](https://img.shields.io/badge/chat-discord-7289da.svg)](https://discord.com/invite/tauri)\n[![website](https://img.shields.io/badge/website-tauri.app-purple.svg)](https://tauri.app)\n[![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg)](https://good-labs.github.io/greater-good-affirmation)\n[![support](https://img.shields.io/badge/sponsor-Open%20Collective-blue.svg)](https://opencollective.com/tauri)\n\n## Introduction\n\nTauri is a framework for building tiny, blazingly fast binaries for all major operating systems. Developers can integrate any front-end framework that compiles to HTML, JS and CSS for building their user interface. The backend of the application is a rust-sourced binary with an API that the front-end can interact with.\n\nThe user interface in Tauri apps currently leverages [`tao`](https://docs.rs/tao) as a window handling library on macOS, Windows, Linux, Android and iOS. To render your application, Tauri uses [WRY](https://github.com/tauri-apps/wry), a library which provides a unified interface to the system webview, leveraging WKWebView on macOS & iOS, WebView2 on Windows, WebKitGTK on Linux and Android System WebView on Android.\n\nTo learn more about the details of how all of these pieces fit together, please consult this [ARCHITECTURE.md](https://github.com/tauri-apps/tauri/blob/dev/ARCHITECTURE.md) document.\n\n## Getting Started\n\nIf you are interested in making a tauri app, please visit the [documentation website](https://tauri.app).\n\nThe quickest way to get started is to install the [prerequisites](https://v2.tauri.app/start/prerequisites/) for your system and create a new project with [`create-tauri-app`](https://github.com/tauri-apps/create-tauri-app/#usage). For example with `npm`:\n\n```sh\nnpm create tauri-app@latest\n```\n\n## Features\n\nThe list of Tauri's features includes, but is not limited to:\n\n- Built-in app bundler to create app bundles in formats like `.app`, `.dmg`, `.deb`, `.rpm`, `.AppImage` and Windows installers like `.exe` (via NSIS) and `.msi` (via WiX).\n- Built-in self updater (desktop only)\n- System tray icons\n- Native notifications\n- Native WebView Protocol (tauri doesn't create a localhost http(s) server to serve the WebView contents)\n- GitHub action for streamlined CI\n- VS Code extension\n\n### Platforms\n\nTauri currently supports development and distribution on the following platforms:\n\n| Platform   | Versions                                                                                                        |\n| :--------- | :-------------------------------------------------------------------------------------------------------------- |\n| Windows    | 7 and above                                                                                                     |\n| macOS      | 10.15 and above                                                                                                 |\n| Linux      | webkit2gtk 4.0 for Tauri v1 (for example Ubuntu 18.04). webkit2gtk 4.1 for Tauri v2 (for example Ubuntu 22.04). |\n| iOS/iPadOS | 9 and above                                                                                                     |\n| Android    | 7 and above (currently 8 and above)                                                                             |\n\n## Contributing\n\nBefore you start working on something, it's best to check if there is an existing issue first. It's also a good idea to stop by the Discord server and confirm with the team if it makes sense or if someone else is already working on it.\n\nPlease make sure to read the [Contributing Guide](./.github/CONTRIBUTING.md) before making a pull request.\n\nThank you to everyone contributing to Tauri!\n\n### Documentation\n\nDocumentation in a polyglot system is a tricky proposition. To this end, we prefer to use inline documentation in the Rust & JS source code as much as possible. Check out the hosting repository for the documentation site for further information: <https://github.com/tauri-apps/tauri-docs>\n\n## Partners\n\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"middle\">\n        <a href=\"https://crabnebula.dev\" target=\"_blank\">\n          <img src=\".github/sponsors/crabnebula.svg\" alt=\"CrabNebula\" width=\"283\">\n        </a>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\nFor the complete list of sponsors please visit our [website](https://tauri.app#sponsors) and [Open Collective](https://opencollective.com/tauri).\n\n## Organization\n\nTauri aims to be a sustainable collective based on principles that guide sustainable free and open software communities. To this end it has become a Programme within the [Commons Conservancy](https://commonsconservancy.org/), and you can contribute financially via [Open Collective](https://opencollective.com/tauri).\n\n## Licenses\n\nCode: (c) 2015 - Present - The Tauri Programme within The Commons Conservancy.\n\nMIT or MIT/Apache 2.0 where applicable.\n\nLogo: CC-BY-NC-ND\n\n- Original Tauri Logo Designs by [Alve Larsson](https://alve.io/), [Daniel Thompson-Yvetot](https://github.com/nothingismagick) and [Guillaume Chau](https://github.com/akryum)\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Ftauri-apps%2Ftauri?ref=badge_large)\n",
    "strategic_keywords": [
      "rag",
      "workflow",
      "protocol"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 9,
      "risk_signal": 6,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "owner": "syncthing",
    "name": "syncthing",
    "full_name": "syncthing/syncthing",
    "url": "https://github.com/syncthing/syncthing",
    "description": "Open Source Continuous File Synchronization",
    "language": "Go",
    "total_stars": 85873,
    "forks": 5315,
    "stars_this_period": 328,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "go",
        "p2p",
        "peer-to-peer",
        "synchronization"
      ],
      "license": "MPL-2.0",
      "open_issues": 390,
      "created_at": "2013-11-26T09:48:21Z",
      "pushed_at": "2026-06-28T06:00:08Z",
      "homepage": "https://syncthing.net/",
      "default_branch": "main",
      "forks": 5315,
      "watchers": 1043,
      "archived": false,
      "size_kb": 125229
    },
    "readme_content": "[![Syncthing][14]][15]\n\n---\n\n[![MPLv2 License](https://img.shields.io/badge/license-MPLv2-blue.svg?style=flat-square)](https://www.mozilla.org/MPL/2.0/)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/88/badge)](https://bestpractices.coreinfrastructure.org/projects/88)\n[![Go Report Card](https://goreportcard.com/badge/github.com/syncthing/syncthing)](https://goreportcard.com/report/github.com/syncthing/syncthing)\n\n## Goals\n\nSyncthing is a **continuous file synchronization program**. It synchronizes\nfiles between two or more computers. We strive to fulfill the goals below.\nThe goals are listed in order of importance, the most important ones first.\nThis is the summary version of the goal list - for more\ncommentary, see the full [Goals document][13].\n\nSyncthing should be:\n\n1. **Safe From Data Loss**\n\n   Protecting the user's data is paramount. We take every reasonable\n   precaution to avoid corrupting the user's files.\n\n2. **Secure Against Attackers**\n\n   Again, protecting the user's data is paramount. Regardless of our other\n   goals, we must never allow the user's data to be susceptible to\n   eavesdropping or modification by unauthorized parties.\n\n3. **Easy to Use**\n\n   Syncthing should be approachable, understandable, and inclusive.\n\n4. **Automatic**\n\n   User interaction should be required only when absolutely necessary.\n\n5. **Universally Available**\n\n   Syncthing should run on every common computer. We are mindful that the\n   latest technology is not always available to every individual.\n\n6. **For Individuals**\n\n   Syncthing is primarily about empowering the individual user with safe,\n   secure, and easy to use file synchronization.\n\n7. **Everything Else**\n\n   There are many things we care about that don't make it on to the list. It\n   is fine to optimize for these values, as long as they are not in conflict\n   with the stated goals above.\n\n## Getting Started\n\nTake a look at the [getting started guide][2].\n\nThere are a few examples for keeping Syncthing running in the background\non your system in [the etc directory][3]. There are also several [GUI\nimplementations][11] for Windows, Mac, and Linux.\n\n## Docker\n\nTo run Syncthing in Docker, see [the Docker README][16].\n\n## Getting in Touch\n\nThe first and best point of contact is the [Forum][8].\nIf you've found something that is clearly a\nbug, feel free to report it in the [GitHub issue tracker][10].\n\nIf you believe that you’ve found a Syncthing-related security vulnerability,\nplease report it by emailing security@syncthing.net. Do not report it in the\nForum or issue tracker.\n\n## Building\n\nBuilding Syncthing from source is easy. After extracting the source bundle from\na release or checking out git, you just need to run `go run build.go` and the\nbinaries are created in `./bin`. There's [a guide][5] with more details on the\nbuild process.\n\n## Signed Releases\n\nRelease binaries are GPG signed with the key available from\nhttps://syncthing.net/security/. There is also a built-in automatic\nupgrade mechanism (disabled in some distribution channels) which uses a\ncompiled in ECDSA signature. macOS and Windows binaries are also\ncode-signed.\n\n## Documentation\n\nPlease see the Syncthing [documentation site][6] [[source]][17].\n\nAll code is licensed under the [MPLv2 License][7].\n\n[1]: https://docs.syncthing.net/specs/bep-v1.html\n[2]: https://docs.syncthing.net/intro/getting-started.html\n[3]: https://github.com/syncthing/syncthing/blob/main/etc\n[5]: https://docs.syncthing.net/dev/building.html\n[6]: https://docs.syncthing.net/\n[7]: https://github.com/syncthing/syncthing/blob/main/LICENSE\n[8]: https://forum.syncthing.net/\n[10]: https://github.com/syncthing/syncthing/issues\n[11]: https://docs.syncthing.net/users/contrib.html#gui-wrappers\n[13]: https://github.com/syncthing/syncthing/blob/main/GOALS.md\n[14]: assets/logo-text-128.png\n[15]: https://syncthing.net/\n[16]: https://github.com/syncthing/syncthing/blob/main/README-Docker.md\n[17]: https://github.com/syncthing/docs\n",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/syncthing/syncthing\n\ngo 1.25.0\n\nrequire (\n\tgithub.com/AudriusButkevicius/recli v0.0.7\n\tgithub.com/alecthomas/kong v1.15.0\n\tgithub.com/aws/aws-sdk-go v1.55.8\n\tgithub.com/calmh/incontainer v1.0.0\n\tgithub.com/calmh/xdr v1.2.0\n\tgithub.com/ccding/go-stun v0.1.5\n\tgithub.com/coreos/go-semver v0.3.1\n\tgithub.com/d4l3k/messagediff v1.2.1\n\tgithub.com/getsentry/raven-go v0.2.0\n\tgithub.com/go-ldap/ldap/v3 v3.4.13\n\tgithub.com/gobwas/glob v0.2.3\n\tgithub.com/gofrs/flock v0.13.0\n\tgithub.com/hashicorp/golang-lru/v2 v2.0.7\n\tgithub.com/jackpal/gateway v1.1.1\n\tgithub.com/jackpal/go-nat-pmp v1.0.2\n\tgithub.com/jmoiron/sqlx v1.4.0\n\tgithub.com/julienschmidt/httprouter v1.3.0\n\tgithub.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51\n\tgithub.com/maruel/panicparse/v2 v2.5.0\n\tgithub.com/mattn/go-sqlite3 v1.14.45\n\tgithub.com/maxmind/geoipupdate/v6 v6.1.0\n\tgithub.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75\n\tgithub.com/oschwald/geoip2-golang v1.13.0\n\tgithub.com/pierrec/lz4/v4 v4.1.27\n\tgithub.com/prometheus/client_golang v1.23.2\n\tgithub.com/puzpuzpuz/xsync/v3 v3.5.1\n\tgithub.com/quic-go/quic-go v0.60.0\n\tgithub.com/rabbitmq/amqp091-go v1.11.0\n\tgithub.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9\n\tgithub.com/shirou/gopsutil/v4 v4.26.5\n\tgithub.com/syncthing/notify v0.0.0-20250528144937-c7027d4f7465\n\tgithub.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d\n\tgithub.com/thejerf/suture/v4 v4.0.6\n\tgithub.com/urfave/cli v1.22.17\n\tgithub.com/vitrun/qart v0.0.0-20160531060029-bf64b92db6b0\n\tgithub.com/willabides/kongplete v0.4.0\n\tgithub.com/wlynxg/anet v0.0.5\n\tgolang.org/x/crypto v0.53.0\n\tgolang.org/x/exp v0.0.0-20260611194520-c48552f49976\n\tgolang.org/x/net v0.56.0\n\tgolang.org/x/sys v0.46.0\n\tgolang.org/x/text v0.38.0\n\tgolang.org/x/time v0.15.0\n\tgoogle.golang.org/protobuf v1.36.11\n\tmodernc.org/sqlite v1.52.0\n\tsigs.k8s.io/yaml v1.6.0\n)\n\nrequire (\n\tgithub.com/Azure/go-ntlmssp v0.1.0 // indirect\n\tgithub.com/beorn7/perks v1.0.1 // indirect\n\tgithub.com/cenkalti/backoff/v4 v4.3.0 // indirect\n\tgithub.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/dustin/go-humanize v1.0.1 // indirect\n\tgithub.com/ebitengine/purego v0.10.0 // indirect\n\tgithub.com/fsnotify/fsnotify v1.7.0 // indirect\n\tgithub.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 // indirect\n\tgithub.com/go-ole/go-ole v1.3.0 // indirect\n\tgithub.com/golang/snappy v0.0.4 // indirect\n\tgithub.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4 // indirect\n\tgithub.com/google/uuid v1.6.0 // indirect\n\tgithub.com/hashicorp/errwrap v1.1.0 // indirect\n\tgithub.com/hashicorp/go-multierror v1.1.1 // indirect\n\tgithub.com/jmespath/go-jmespath v0.4.0 // indirect\n\tgithub.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 // indirect\n\tgithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect\n\tgithub.com/ncruces/go-strftime v1.0.0 // indirect\n\tgithub.com/nxadm/tail v1.4.11 // indirect\n\tgithub.com/oschwald/maxminddb-golang v1.13.1 // indirect\n\tgithub.com/pkg/errors v0.9.1 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/posener/complete v1.2.3 // indirect\n\tgithub.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect\n\tgithub.com/prometheus/client_model v0.6.2 // indirect\n\tgithub.com/prometheus/common v0.66.1 // indirect\n\tgithub.com/prometheus/procfs v0.16.1 // indirect\n\tgithub.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect\n\tgithub.com/riywo/loginshell v0.0.0-20200815045211-7d26008be1ab // indirect\n\tgithub.com/rogpeppe/go-internal v1.12.0 // indirect\n\tgithub.com/russross/blackfriday/v2 v2.1.0 // indirect\n\tgithub.com/stretchr/objx v0.5.2 // indirect\n\tgithub.com/stretchr/testify v1.11.1 // indirect\n\tgithub.com/tklauser/go-sysconf v0.3.16 // indirect\n\tgithub.com/tklauser/numcpus v0.11.0 // indirect\n\tgithub.com/yusufpapurcu/wmi v1.2.4 // indirect\n\tgo.yaml.in/yaml/v2 v2.4.2 // indirect\n\tgolang.org/x/mod v0.37.0 // indirect\n\tgolang.org/x/sync v0.21.0 // indirect\n\tgolang.org/x/telemetry v0.0.0-20260610154732-fb80ec83bdd9 // indirect\n\tgolang.org/x/tools v0.46.0 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n\tmodernc.org/libc v1.72.3 // indirect\n\tmodernc.org/mathutil v1.7.1 // indirect\n\tmodernc.org/memory v1.11.0 // indirect\n)\n\n// https://github.com/gobwas/glob/pull/55\nreplace github.com/gobwas/glob v0.2.3 => github.com/calmh/glob v0.0.0-20220615080505-1d823af5017b\n\n// https://github.com/jackpal/gateway/pull/49\nreplace github.com/jackpal/gateway v1.1.1 => github.com/marbens-arch/gateway v1.1.2-0.20260308173556-c567cc04e7d4\n\ntool (\n\tgithub.com/calmh/xdr/cmd/genxdr\n\tgithub.com/maxbrunsfeld/counterfeiter/v6\n\tgolang.org/x/tools/cmd/goimports\n)\n",
    "strategic_keywords": [],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 0,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 6,
      "risk_signal": 6,
      "total": 61
    },
    "strategic_score": 61
  }
]