[
  {
    "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": 21942,
    "forks": 2461,
    "stars_this_period": 3553,
    "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": 118,
      "created_at": "2026-03-29T15:23:22Z",
      "pushed_at": "2026-06-25T20:19:13Z",
      "homepage": "https://github.com/calesthio/OpenMontage",
      "default_branch": "main",
      "forks": 2461,
      "watchers": 131,
      "archived": false,
      "size_kb": 23883
    },
    "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\"><img src=\"https://img.shields.io/badge/%F0%9F%8F%86%20%231%20on%20GitHub%20Trending-Repository%20of%20the%20Day-8957E5?style=for-the-badge&labelColor=1a1a2e\" alt=\"#1 on GitHub Trending — Repository of the Day\"></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/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<div align=\"center\">\n  <video src=\"https://github.com/user-attachments/assets/9cf633d9-c264-4961-bfd0-b1db188654aa\" width=\"100%\" controls></video>\n</div>\n\n> **\"Into the Abyss\"** — a deep ocean exploration rendered in anime style. Bioluminescent gardens, coral cathedrals, and creatures of light — 12 FLUX-generated images with sparkle and mist particle overlays, light-ray effects, smooth camera motion, and ambient oceanic soundtrack. Total cost: **$0.15**. Zero video generation APIs needed.\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 `render_runtime`). Remotion is the default for data-driven explainers and anything using the existing React scene stack; HyperFrames is the default for motion-graphics-heavy briefs that express naturally as HTML + GSAP, including the `cha",
    "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\nrequests>=2.31\ngoogle-auth>=2.0       # service-account auth for Google TTS + Imagen (Vertex AI)\n",
    "strategic_keywords": [
      "agent",
      "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": 9,
      "risk_signal": 10,
      "total": 98
    },
    "strategic_score": 98
  },
  {
    "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": 41124,
    "forks": 3250,
    "stars_this_period": 1430,
    "source_slice": "python",
    "source_slices": [
      "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": 104,
      "created_at": "2026-02-24T02:10:24Z",
      "pushed_at": "2026-06-23T13:04:55Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 3250,
      "watchers": 117,
      "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": "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": 19006,
    "forks": 1636,
    "stars_this_period": 1407,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 32,
      "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": 1636,
      "watchers": 111,
      "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": 6,
      "total": 83
    },
    "strategic_score": 83
  },
  {
    "owner": "apple",
    "name": "container",
    "full_name": "apple/container",
    "url": "https://github.com/apple/container",
    "description": "A tool for creating and running Linux containers using lightweight virtual machines on a Mac. It is written in Swift, and optimized for Apple silicon.",
    "language": "Swift",
    "total_stars": 43151,
    "forks": 1266,
    "stars_this_period": 1366,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 387,
      "created_at": "2025-05-30T21:26:05Z",
      "pushed_at": "2026-06-25T21:06:45Z",
      "homepage": "https://apple.github.io/container/documentation/",
      "default_branch": "main",
      "forks": 1266,
      "watchers": 168,
      "archived": false,
      "size_kb": 3091
    },
    "readme_content": "<h1>\n  <img alt=\"Containerization logo\" src=\"./assets/Containerization-Logo.png\" width=\"70\" valign=\"middle\">\n  &nbsp;container\n</h1>\n\n`container` is a tool that you can use to create and run Linux containers as lightweight virtual machines on your Mac. It's written in Swift, and optimized for Apple silicon.\n\nThe tool consumes and produces [OCI-compatible container images](https://github.com/opencontainers/image-spec), so you can pull and run images from any standard container registry. You can push images that you build to those registries as well, and run the images in any other OCI-compatible application.\n\n`container` uses the [Containerization](https://github.com/apple/containerization) Swift package for low-level container, image, and process management.\n\n![introductory movie showing some basic commands](./docs/assets/landing-movie.gif)\n\n## Get started\n\n### Requirements\n\nYou need a Mac with Apple silicon to run `container`. To build it, see the [BUILDING](./BUILDING.md) document.\n\n`container` is supported on macOS 26, since it takes advantage of new features and enhancements to virtualization and networking in this release. We do not support older versions of macOS and the `container` maintainers typically will not address issues that cannot be reproduced on macOS 26.\n\n### Initial install\n\nDownload the latest signed installer package for `container` from the [GitHub release page](https://github.com/apple/container/releases).\n\nTo install the tool, double-click the package file and follow the instructions. Enter your administrator password when prompted, to give the installer permission to place the installed files under `/usr/local`.\n\nStart the system service with:\n\n```bash\ncontainer system start\n```\n\n### Upgrade or downgrade\n\nFor both upgrading and downgrading, you can manually download and install the signed installer package by following the steps from [initial install](#initial-install) or use the `update-container.sh` script (installed to `/usr/local/bin`).\n\nIf you're upgrading or downgrading, you must stop your existing `container`:\n\n```bash\ncontainer system stop\n```\n\nTo upgrade to the latest release, simply run the command below:\n\n```bash\n/usr/local/bin/update-container.sh\n```\n\nTo downgrade, you must uninstall your existing `container` (the `-k` flag keeps your user data, while `-d` removes it):\n\n```bash\n/usr/local/bin/uninstall-container.sh -k\n/usr/local/bin/update-container.sh -v 0.3.0\n```\n\nStart the system service with:\n\n```bash\ncontainer system start\n```\n\n### Uninstall\n\nUse the `uninstall-container.sh` script (installed to `/usr/local/bin`) to remove `container` from your system. To remove your user data along with the tool, run:\n\n```bash\n/usr/local/bin/uninstall-container.sh -d\n```\n\nTo retain your user data so that it is available should you reinstall later, run:\n\n```bash\n/usr/local/bin/uninstall-container.sh -k\n```\n\n## Next steps\n\n- Take [a guided tour of `container`](./docs/tutorials/start-here.md) by building, running, and publishing a simple web server image.\n- Learn how to [use various `container` features](./docs/how-to.md).\n- Read a brief description and [technical overview](./docs/technical-overview.md) of `container`.\n- Browse the [full command reference](./docs/command-reference.md).\n- [Build and run](./BUILDING.md) `container` on your own development system.\n- View the project [API documentation](https://apple.github.io/container/documentation/).\n\n## Contributing\n\nContributions to `container` are welcome and encouraged. Please see our [main contributing guide](https://github.com/apple/containerization/blob/main/CONTRIBUTING.md) for more information.\n\n## Project Status\n\nThe container project is currently under active development. Its stability, both for consuming the project as a Swift package and the `container` tool, is only guaranteed within patch versions, such as between 0.1.1 and 0.1.2. Minor version releases may include breaking changes until we reach a 1.0.0 release.\n",
    "strategic_keywords": [
      "rag"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 8,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 7,
      "risk_signal": 6,
      "total": 71
    },
    "strategic_score": 71
  },
  {
    "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": 49467,
    "forks": 43434,
    "stars_this_period": 1344,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "a-stock",
        "ai-agent",
        "aigc",
        "llm",
        "quant",
        "quantitative-finance",
        "quantitative-trading"
      ],
      "license": "MIT",
      "open_issues": 51,
      "created_at": "2026-01-10T06:43:20Z",
      "pushed_at": "2026-06-25T14:55:08Z",
      "homepage": "https://dsa.zhulinsen.tech",
      "default_branch": "main",
      "forks": 43434,
      "watchers": 202,
      "archived": false,
      "size_kb": 88398
    },
    "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": 8,
      "total": 90
    },
    "strategic_score": 90
  },
  {
    "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": 20339,
    "forks": 2999,
    "stars_this_period": 1021,
    "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": 16,
      "created_at": "2026-03-13T11:14:39Z",
      "pushed_at": "2026-06-01T04:09:21Z",
      "homepage": "https://dsc.gg/jcodesmore",
      "default_branch": "master",
      "forks": 2999,
      "watchers": 97,
      "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": "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": 3000,
    "forks": 178,
    "stars_this_period": 1000,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 41,
      "created_at": "2026-04-05T06:43:05Z",
      "pushed_at": "2026-06-23T21:30:12Z",
      "homepage": "https://kunchenguid.github.io/no-mistakes/",
      "default_branch": "main",
      "forks": 178,
      "watchers": 6,
      "archived": false,
      "size_kb": 4288
    },
    "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`, 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": 18,
      "relevance": 20,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 82
    },
    "strategic_score": 82
  },
  {
    "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": 115741,
    "forks": 17159,
    "stars_this_period": 836,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 735,
      "created_at": "2026-03-11T21:22:45Z",
      "pushed_at": "2026-06-25T16:42:45Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 17159,
      "watchers": 701,
      "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": "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": 2720,
    "forks": 652,
    "stars_this_period": 762,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 234,
      "created_at": "2025-07-29T01:50:34Z",
      "pushed_at": "2026-06-22T17:40:27Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 652,
      "watchers": 4,
      "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": 17,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 84
    },
    "strategic_score": 84
  },
  {
    "owner": "farion1231",
    "name": "cc-switch",
    "full_name": "farion1231/cc-switch",
    "url": "https://github.com/farion1231/cc-switch",
    "description": "A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Gemini CLI & Hermes Agent. Only official website: ccswitch.io",
    "language": "Rust",
    "total_stars": 108450,
    "forks": 7164,
    "stars_this_period": 736,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "ai-tools",
        "claude-code",
        "codex",
        "desktop-app",
        "hermes",
        "hermes-agent",
        "mcp",
        "minimax",
        "omo",
        "open-source",
        "openclaw",
        "openclaw-ui",
        "opencode",
        "provider-management",
        "rust",
        "skills",
        "skills-management",
        "tauri",
        "typescript",
        "wsl-support"
      ],
      "license": "MIT",
      "open_issues": 1613,
      "created_at": "2025-08-04T14:16:16Z",
      "pushed_at": "2026-06-25T19:08:51Z",
      "homepage": "https://ccswitch.io",
      "default_branch": "main",
      "forks": 7164,
      "watchers": 183,
      "archived": false,
      "size_kb": 55249
    },
    "readme_content": "<div align=\"center\">\n\n# CC Switch\n\n### The All-in-One Manager for Claude Code, Claude Desktop, Codex, Gemini CLI, OpenCode, OpenClaw & Hermes Agent\n\n[![Version](https://img.shields.io/github/v/release/farion1231/cc-switch?color=blue&label=version)](https://github.com/farion1231/cc-switch/releases)\n[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey.svg)](https://github.com/farion1231/cc-switch/releases)\n[![Built with Tauri](https://img.shields.io/badge/built%20with-Tauri%202-orange.svg)](https://tauri.app/)\n[![Downloads](https://img.shields.io/github/downloads/farion1231/cc-switch/total)](https://github.com/farion1231/cc-switch/releases/latest)\n\n<a href=\"https://trendshift.io/repositories/15372\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/15372\" alt=\"farion1231%2Fcc-switch | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n\n### 🌐 The Only Official Website: **[ccswitch.io](https://ccswitch.io)**\n\nEnglish | [中文](README_ZH.md) | [日本語](README_JA.md) | [Deutsch](README_DE.md) | [Changelog](CHANGELOG.md)\n\n</div>\n\n## ❤️Sponsor\n\n> [Want to appear here?](mailto:farion1231@gmail.com)\n\n<details open>\n<summary>Click to collapse</summary>\n\n[![Kimi K2.6](https://kimi-file.moonshot.cn/prod-chat-kimi/kfs/4/2/2026-06-08/1d8j61pt3v89kkekm5mbg)](https://platform.moonshot.cn/console?aff=cc-switch)\n\nKimi K2.6 is an open-source, native multimodal agentic model from Moonshot AI, built for long-horizon coding, coding-driven design, and swarm-based task orchestration. It is designed to handle complex end-to-end engineering work across front-end, DevOps, performance optimization, and full-stack workflows, while coordinating large groups of specialized agents to plan, implement, test, and iterate on real coding tasks. **[Click here to start using Kimi](https://platform.moonshot.cn/console?aff=cc-switch)**\n\n---\n\n<table>\n<tr>\n<td width=\"180\"><a href=\"https://www.packyapi.com/register?aff=cc-switch\"><img src=\"assets/partners/logos/packycode.png\" alt=\"PackyCode\" width=\"150\"></a></td>\n<td>Thanks to PackyCode for sponsoring this project! PackyCode is a reliable and efficient API relay service provider, offering relay services for Claude Code, Codex, Gemini, and more. PackyCode provides special discounts for our software users: register using <a href=\"https://www.packyapi.com/register?aff=cc-switch\">this link</a> and enter the \"cc-switch\" promo code during first recharge to get 10% off.</td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://aigocode.com/invite/CC-SWITCH\"><img src=\"assets/partners/logos/aigocode.png\" alt=\"AIGoCode\" width=\"150\"></a></td>\n<td>Thanks to AIGoCode for sponsoring this project! AIGoCode is an all-in-one platform that integrates Claude Code, Codex, and the latest Gemini models, providing you with stable, efficient, and highly cost-effective AI coding services. The platform offers flexible subscription plans, zero risk of account suspension, direct access with no VPN required, and lightning-fast responses. AIGoCode has prepared a special benefit for CC Switch users: if you register via <a href=\"https://aigocode.com/invite/CC-SWITCH\">this link</a>, you'll receive an extra 10% bonus credit on your first top-up!</td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://www.aicodemirror.com/register?invitecode=9915W3\"><img src=\"assets/partners/logos/aicodemirror.jpg\" alt=\"AICodeMirror\" width=\"150\"></a></td>\n<td>Thanks to AICodeMirror for sponsoring this project! AICodeMirror provides official high-stability relay services for Claude Code / Codex / Gemini CLI, with enterprise-grade concurrency, fast invoicing, and 24/7 dedicated technical support.\nClaude Code / Codex / Gemini official channels at 38% / 2% / 9% of original price, with extra discounts on top-ups! AICodeMirror offers special benefits for CC Switch users: register via <a href=\"https://www.aicodemirror.com/register?invitecode=9915W3\">this link</a> to enjoy 20% off your first top-up, and enterprise customers can get up to 25% off!</td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://www.shengsuanyun.com/?from=CH_4HHXMRYF\"><img src=\"assets/partners/logos/shengsuanyun.png\" alt=\"Shengsuanyun\" width=\"150\"></a></td>\n<td>Thanks to Shengsuanyun for sponsoring this project! Shengsuanyun is a super factory serving AI Native Teams — an industrial-grade AI task parallel execution platform. Its model marketplace aggregates Claude, ChatGPT, Gemini, and other domestic and international LLM and multimedia model capabilities with direct supply. Absolutely no reverse engineering or dilution — platform-wide model SLA availability reaches 99.7%, with <a href=\"https://watch.shengsuanyun.com/status/shengsuanyun\">monitoring dashboards</a> showing green across the board. It also offers enterprise-grade custom gateways for fine-grained team cost and permission management, smart routing, security protection, and BYOK (Bring Your Own Key) hosting. The platform charges on a pay-per-use and tokens plan (coming soon) basis, with invoicing available. Register via <a href=\"https://www.shengsuanyun.com/?from=CH_4HHXMRYF\">this link</a> as a new user to receive ¥10 in credits plus a 10% bonus on your first top-up.</td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://pateway.ai/?ch=etzpm8&aff=WB6M6F67#/\"><img src=\"assets/partners/logos/pateway.png\" alt=\"PatewayAI\" width=\"150\"></a></td>\n<td>Thanks to PatewayAI for sponsoring this project! PatewayAI is an API relay service provider built for heavy AI developers, focused on directly relaying official high-quality model APIs. It offers the full Claude lineup and the Codex series, 100% sourced from official channels — no dilution, no fakes, verification welcome. Billing is transparent and every token-level invoice can be audited line by line.\nIt also supports enterprise-grade concurrency and provides a dedicated management platform for enterprise customers — formal contracts and invoicing are available; visit the official website for contact details.\nRegister now via <a href=\"https://pateway.ai/?ch=etzpm8&aff=WB6M6F67#/\">this link</a> to receive $3 in trial credit. Top-ups go as low as 60% of the original price, with a two-way referral bonus of up to $150!</td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://www.byteplus.com/en/product/modelark?utm_campaign=hw&utm_content=ccswitch&utm_medium=devrel_tool_web&utm_source=OWO&utm_term=ccswitch\"><img src=\"assets/partners/logos/byteplus.png\" alt=\"BytePlus\" width=\"150\"></a></td>\n<td>Thanks to Dola seed for sponsoring this project! Dola Seed 2.0 is a full‑modal general large model independently developed by ByteDance for the global market. Built on a unified multimodal architecture, it supports joint understanding and generation of text, images, audio, and video. It natively enables agent collaboration, with strong reasoning, long‑task execution, tool integration, and coding capabilities. It is widely applicable to smart cockpits, personal assistants, education, customer support, marketing, retail, and other scenarios. It excels in multimodal perception, end‑to‑end complex task delivery, stable interaction, and data security, and is readily accessible and deployable via the ModelArk platform.Register via <a href=\"https://www.byteplus.com/en/product/modelark?utm_campaign=hw&utm_content=ccswitch&utm_medium=devrel_tool_web&utm_source=OWO&utm_term=ccswitch\">this link</a> to get 500,000 tokens of free inference quota per model.<a href=\"https://www.volcengine.com/activity/ai618?utm_campaign=hw&utm_content=hw&utm_medium=devrel_tool_web&utm_source=OWO&utm_term=ccswitch\"> >>中国大陆地区的开发者请点击这里</a></td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://cloud.siliconflow.cn/i/drGuwc9k\"><img src=\"assets/partners/logos/silicon_en.jpg\" alt=\"SiliconFlow\" width=\"150\"></a></td>\n<td>Thanks to SiliconFlow for sponsoring this project! SiliconFlow is a high-performance AI infrastructure and model API platform, providing fast and reliable access to language, speech, image, and video models in one place. With pay-as-you-go billing, broad multimodal model support, high-speed inference, and enterprise-grade stability, SiliconFlow helps developers and teams build and scale AI applications more efficiently. Register via <a href=\"https://cloud.siliconflow.cn/i/drGuwc9k\">this link</a> and complete real-name verification to receive ¥16 in bonus credit, usable across models on the platform. SiliconFlow is also now compatible with OpenClaw, allowing users to connect a SiliconFlow API key and call major AI models for free.</td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://cubence.com/signup?code=CCSWITCH&source=ccs\"><img src=\"assets/partners/logos/cubence.png\" alt=\"Cubence\" width=\"150\"></a></td>\n<td>Thanks to Cubence for sponsoring this project! Cubence is a reliable and efficient API relay service provider, offering relay services for Claude Code, Codex, Gemini, and more with flexible billing options including pay-as-you-go and monthly plans. Cubence provides special discounts for CC Switch users: register using <a href=\"https://cubence.com/signup?code=CCSWITCH&source=ccs\">this link</a> and enter the \"CCSWITCH\" promo code during recharge to get 10% off every top-up!</td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://www.dmxapi.cn/register?aff=bUHu\"><img src=\"assets/partners/logos/dmx-en.jpg\" alt=\"DMXAPI\" width=\"150\"></a></td>\n<td>Thanks to DMXAPI for sponsoring this project! DMXAPI provides global large model API services to 200+ enterprise users. One API key for all global models. Features include: instant invoicing, unlimited concurrency, starting from $0.15, 24/7 technical support. GPT/Claude/Gemini all at 32% off, domestic models 20-50% off, Claude Code exclusive models at 66% off! <a href=\"https://www.dmxapi.cn/register?aff=bUHu\">Register here</a></td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://www.compshare.cn/coding-plan?ytag=GPU_YY_YX_git_cc-switch\"><img src=\"assets/partners/logos/ucloud.png\" alt=\"Compshare\" width=\"150\"></a></td>\n<td>Thanks to Compshare for sponsoring this project! Compshare is UCloud's AI cloud platform, providing stable and comprehensive domestic and international model APIs with just one key. Featuring cost-effective monthly and per-use domestic-model Coding Plan packages, alongside stable officially-relayed overseas models. Supports Claude Code, Codex, and API access. Enterprise-grade high concurrency, 24/7 technical support, and self-service invoicing. Users who register via <a href=\"https://www.compshare.cn/coding-plan?ytag=GPU_YY_YX_git_cc-switch\">this link</a> will receive a free 5 CNY platform trial credit!</td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://crazyrouter.com/register?aff=OZcm&ref=cc-switch\"><img src=\"assets/partners/logos/crazyrouter.png\" alt=\"Crazyrouter\" width=\"150\"></a></td>\n<td>Thanks to Crazyrouter for sponsoring this project! Crazyrouter is a high-performance AI API aggregation platform — one API key for 300+ models including Claude Code, Codex, Gemini CLI, and more. All models at 55% of official pricing with auto-failover, smart routing, and unlimited concurrency. Crazyrouter offers an exclusive deal for CC Switch users: register via <a href=\"https://crazyrouter.com/register?aff=OZcm&ref=cc-switch\">this link</a> and contact customer support to claim <strong>$2 free credit</strong>, plus enter promo code `CCSWITCH` on your first top-up for an extra <strong>30% bonus credit</strong>! </td>\n</tr>\n\n<tr>\n<td width=\"180\"><a href=\"https://www.right.codes/register?aff=CCSWITCH\"><img src=\"assets/partners/logos/rightcode.jpg\" alt=\"RightCode\" width=\"150\"></a></td>\n<td>Thank you to Right Code for sponsoring this project! Right Code reliably provides routing services for models such as Claude Code, Codex, and Gemini, with both pay-as-you-go and monthly subscription billing options available. Invoices are available upon top-up, and enterprise and team users can receive dedicated one-on-one support. Right Code also offers an exclusive discount for CC Switch users: register via <a href=\"https:/",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "skill",
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "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": 7380,
    "forks": 529,
    "stars_this_period": 700,
    "source_slice": "typescript",
    "source_slices": [
      "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": 683,
      "created_at": "2026-03-17T03:28:57Z",
      "pushed_at": "2026-06-25T21:54:30Z",
      "homepage": "https://onOrca.dev",
      "default_branch": "main",
      "forks": 529,
      "watchers": 17,
      "archived": false,
      "size_kb": 178361
    },
    "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](https://github.com/stablyai/orca/releases/download/mobile-android-v0.0.16/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.google",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"orca\",\n  \"version\": \"1.4.98-rc.2\",\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": 19,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 92
    },
    "strategic_score": 92
  },
  {
    "owner": "affaan-m",
    "name": "ECC",
    "full_name": "affaan-m/ECC",
    "url": "https://github.com/affaan-m/ECC",
    "description": "The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.",
    "language": "JavaScript",
    "total_stars": 221724,
    "forks": 33946,
    "stars_this_period": 604,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "ai-agents",
        "anthropic",
        "claude",
        "claude-code",
        "developer-tools",
        "llm",
        "mcp",
        "productivity"
      ],
      "license": "MIT",
      "open_issues": 92,
      "created_at": "2026-01-18T00:51:51Z",
      "pushed_at": "2026-06-22T04:55:54Z",
      "homepage": "https://ecc.tools",
      "default_branch": "main",
      "forks": 33946,
      "watchers": 1123,
      "archived": false,
      "size_kb": 38431
    },
    "readme_content": "**Language:** English | [Português (Brasil)](docs/pt-BR/README.md) | [简体中文](README.zh-CN.md) | [繁體中文](docs/zh-TW/README.md) | [日本語](docs/ja-JP/README.md) | [한국어](docs/ko-KR/README.md) | [Türkçe](docs/tr/README.md) | [Русский](docs/ru/README.md) | [Tiếng Việt](docs/vi-VN/README.md) | [ไทย](docs/th/README.md) | [Deutsch](docs/de-DE/README.md) | [Español](docs/es/README.md)\n\n![ECC — the agent harness operating system](assets/hero.png)\n\n[![Discord](https://img.shields.io/discord/1496644400590094540?logo=discord&logoColor=white&label=Join%20the%20Discord&color=5865F2)](https://discord.gg/36yGMHGFbR)\n[![Website](https://img.shields.io/badge/Website-ecc.tools-E07856?logo=googlechrome&logoColor=white)](https://ecc.tools)\n[![GitHub App](https://img.shields.io/badge/GitHub%20App-ECC%20Tools-181717?logo=github&logoColor=white)](https://github.com/apps/ecc-tools)\n[![Guides](https://img.shields.io/badge/Guides-Start%20here-1f6feb?logo=readme&logoColor=white)](#the-guides)\n\n[![Stars](https://img.shields.io/endpoint?url=https%3A%2F%2Fapi.ecc.tools%2Fbadge%2Fstars&style=flat)](https://github.com/affaan-m/ECC/stargazers)\n[![Forks](https://img.shields.io/endpoint?url=https%3A%2F%2Fapi.ecc.tools%2Fbadge%2Fforks&style=flat)](https://github.com/affaan-m/ECC/network/members)\n[![Contributors](https://img.shields.io/github/contributors/affaan-m/ECC?style=flat)](https://github.com/affaan-m/ECC/graphs/contributors)\n[![npm ecc-universal](https://img.shields.io/npm/dw/ecc-universal?label=ecc-universal%20weekly%20downloads&logo=npm)](https://www.npmjs.com/package/ecc-universal)\n[![npm ecc-agentshield](https://img.shields.io/npm/dw/ecc-agentshield?label=ecc-agentshield%20weekly%20downloads&logo=npm)](https://www.npmjs.com/package/ecc-agentshield)\n[![GitHub App Install](https://img.shields.io/endpoint?url=https%3A%2F%2Fapi.ecc.tools%2Fbadge%2Finstalls&logo=github)](https://github.com/marketplace/ecc-tools)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n![Shell](https://img.shields.io/badge/-Shell-4EAA25?logo=gnu-bash&logoColor=white)\n![TypeScript](https://img.shields.io/badge/-TypeScript-3178C6?logo=typescript&logoColor=white)\n![Python](https://img.shields.io/badge/-Python-3776AB?logo=python&logoColor=white)\n![Go](https://img.shields.io/badge/-Go-00ADD8?logo=go&logoColor=white)\n![Java](https://img.shields.io/badge/-Java-ED8B00?logo=openjdk&logoColor=white)\n![Perl](https://img.shields.io/badge/-Perl-39457E?logo=perl&logoColor=white)\n![Markdown](https://img.shields.io/badge/-Markdown-000000?logo=markdown&logoColor=white)\n\n> [!WARNING]\n> **Official sources only.** Install ECC only from verified channels: the GitHub repository [github.com/affaan-m/ECC](https://github.com/affaan-m/ECC), the npm packages [`ecc-universal`](https://www.npmjs.com/package/ecc-universal) and [`ecc-agentshield`](https://www.npmjs.com/package/ecc-agentshield), the [GitHub App](https://github.com/apps/ecc-tools), the plugin slug `ecc@ecc`, and the project website [ecc.tools](https://ecc.tools). Third-party re-uploads and unofficial mirrors are not maintained or reviewed by the project and may contain malware.\n\n**211.9K+ stars** | **32.5K+ forks** | **230+ contributors** | **12+ language ecosystems** | **Cross-harness agent workflows**\n\n---\n\n<div align=\"center\">\n\n**Language / 语言 / 語言 / Dil / Язык / Ngôn ngữ / Idioma**\n\n[**English**](README.md) | [Português (Brasil)](docs/pt-BR/README.md) | [简体中文](README.zh-CN.md) | [繁體中文](docs/zh-TW/README.md) | [日本語](docs/ja-JP/README.md) | [한국어](docs/ko-KR/README.md)\n | [Türkçe](docs/tr/README.md) | [Русский](docs/ru/README.md) | [Tiếng Việt](docs/vi-VN/README.md) | [ไทย](docs/th/README.md) | [Deutsch](docs/de-DE/README.md) | [Español](docs/es/README.md)\n\n</div>\n\n---\n\n**The harness-native operator system for agentic work. Built from real-world multi-harness engineering workflows.**\n\nNot just configs. A complete system: skills, instincts, memory optimization, continuous learning, security scanning, and research-first development. Production-ready agents, skills, hooks, rules, MCP configurations, and legacy command shims evolved over 10+ months of intensive daily use building real products.\n\nWorks across **Codex**, **Claude Code**, **Cursor**, **OpenCode**, **Gemini**, **Zed**, **GitHub Copilot**, and other AI agent harnesses.\n\nECC v2.0.0 adds the public Hermes operator story on top of that reusable layer: start with the [Hermes setup guide](docs/HERMES-SETUP.md), then review the [2.0.0 release notes](docs/releases/2.0.0/release-notes.md) and [cross-harness architecture](docs/architecture/cross-harness.md).\n\n---\n\n<table>\n<tr>\n<td width=\"25%\" align=\"center\">\n  <a href=\"https://ecc.tools/pricing\">\n    <strong> ECC Pro</strong><br />\n    <sub>Private repos · GitHub App · $19/seat/mo</sub>\n  </a>\n</td>\n<td width=\"25%\" align=\"center\">\n  <a href=\"https://github.com/sponsors/affaan-m\">\n    <strong> Sponsor</strong><br />\n    <sub>Fund the OSS · From $5/mo</sub>\n  </a>\n</td>\n<td width=\"25%\" align=\"center\">\n  <a href=\"https://github.com/affaan-m/ECC/discussions\">\n    <strong>Community</strong>\n    <br />\n    <sub>Discussions · Q&amp;A · Show & Tell</sub>\n  </a>\n</td>\n<td width=\"25%\" align=\"center\">\n  <a href=\"https://github.com/apps/ecc-tools\">\n    <strong> GitHub App</strong><br />\n    <sub>Install · PR audits · Free tier</sub>\n  </a>\n</td>\n</tr>\n</table>\n\n<sub>**OSS stays free.** This repo is MIT-licensed forever. ECC Pro is the hosted GitHub App for private repos. <a href=\"https://github.com/sponsors/affaan-m\">Sponsors</a> and <a href=\"https://ecc.tools/pricing\">Pro subscribers</a> fund the work — that's why a single maintainer ships weekly across 7 harnesses.</sub>\n\n<div align=\"center\">\n\n<sub><strong>Business sponsors</strong></sub>\n\n<table>\n<tr>\n<td align=\"center\" width=\"220\">\n  <a href=\"https://www.coderabbit.ai\">\n    <img src=\"assets/images/sponsors/coderabbit.png\" width=\"96\" alt=\"CodeRabbit logo\" /><br />\n    <strong>CodeRabbit</strong>\n  </a>\n</td>\n<td align=\"center\" width=\"220\">\n  <a href=\"https://www.greptile.com/go/ecc\">\n    <img src=\"assets/images/sponsors/greptile.png\" width=\"96\" alt=\"Greptile logo\" /><br />\n    <strong>Greptile</strong>\n  </a>\n</td>\n<td align=\"center\" width=\"220\">\n  <a href=\"https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=ECC\">\n    <img src=\"assets/images/sponsors/atlascloud.png\" width=\"96\" alt=\"Atlas Cloud logo\" /><br />\n    <strong>Atlas Cloud</strong>\n  </a>\n</td>\n</tr>\n</table>\n\n<sub><strong>Community sponsors:</strong> <a href=\"https://github.com/mikejmorgan-ai\">Mike Morgan</a> · <a href=\"https://github.com/jasonwu513\">@jasonwu513</a> · <a href=\"https://github.com/1anter\">@1anter</a> · <a href=\"https://github.com/massimotodaro\">@massimotodaro</a> · <a href=\"https://github.com/meadmccabe\">@meadmccabe</a></sub>\n\n<sub><a href=\"https://github.com/sponsors/affaan-m\"><strong>Become a Sponsor</strong></a> · <a href=\"SPONSORS.md\">Sponsor Tiers</a> · <a href=\"SPONSORING.md\">Sponsorship Program</a></sub>\n\n</div>\n\n---\n\n## The Guides\n\nThis repo is the raw code only. The guides explain everything.\n\n<table>\n<tr>\n<td width=\"50%\" align=\"center\">\n<a href=\"./the-shortform-guide.md\">\n<img src=\"./assets/images/shortform/00-header.png\" width=\"420\" alt=\"The Shorthand Guide to ECC\" /><br />\n<b>The Shorthand Guide</b>\n</a>\n<br /><sub>Setup, foundations, philosophy. <b>Read this first.</b> (<a href=\"https://x.com/affaan/status/2012378465664745795\">thread</a>)</sub>\n</td>\n<td width=\"50%\" align=\"center\">\n<a href=\"./the-longform-guide.md\">\n<img src=\"./assets/images/longform/01-header.png\" width=\"420\" alt=\"The Longform Guide to ECC\" /><br />\n<b>The Longform Guide</b>\n</a>\n<br /><sub>Token optimization, memory persistence, evals, parallelization. (<a href=\"https://x.com/affaan/status/2014040193557471352\">thread</a>)</sub>\n</td>\n</tr>\n</table>\n\n<div align=\"center\">\n<a href=\"./the-security-guide.md\">\n<img src=\"./assets/images/security/security-guide-header.png\" width=\"420\" alt=\"The Shorthand Guide to Everything Agentic Security\" /><br />\n<b>The Security Guide</b>\n</a>\n<br /><sub>Attack vectors, sandboxing, sanitization, CVEs, AgentShield. (<a href=\"https://x.com/affaan/status/2033263813387223421\">thread</a>)</sub>\n</div>\n\n| Topic | What You'll Learn |\n|-------|-------------------|\n| Token Optimization | Model selection, system prompt slimming, background processes |\n| Memory Persistence | Hooks that save/load context across sessions automatically |\n| Continuous Learning | Auto-extract patterns from sessions into reusable skills |\n| Verification Loops | Checkpoint vs continuous evals, grader types, pass@k metrics |\n| Parallelization | Git worktrees, cascade method, when to scale instances |\n| Subagent Orchestration | The context problem, iterative retrieval pattern |\n\n---\n\n## What's New\n\n### v2.0.0 — The Agent Harness Operating System (Jun 2026)\n\nStable graduation of the 2.0 line: 261 skills, the control-pane substrate (session adapters + MCP inventory), the worktree-lifecycle service, the `orch-*` orchestrator family, and the launch of the [ECC Discord community](https://discord.gg/36yGMHGFbR). Full notes: [docs/releases/2.0.0/release-notes.md](docs/releases/2.0.0/release-notes.md).\n\n### v2.0.0-rc.1 — Surface Refresh, Operator Workflows, and ECC 2.0 Alpha (Apr 2026)\n\n- **Dashboard GUI** — New Tkinter-based desktop application (`ecc_dashboard.py` or `npm run dashboard`) with dark/light theme toggle, font customization, and project logo in header and taskbar.\n- **Public surface synced to the live repo** — metadata, catalog counts, plugin manifests, and install-facing docs now match the actual OSS surface: 66 agents, 268 skills, and 84 legacy command shims.\n- **Operator and outbound workflow expansion** — `brand-voice`, `social-graph-ranker`, `connections-optimizer`, `customer-billing-ops`, `ecc-tools-cost-audit`, `google-workspace-ops`, `project-flow-ops`, and `workspace-surface-audit` round out the operator lane.\n- **Media and launch tooling** — `manim-video`, `remotion-video-creation`, and upgraded social publishing surfaces make technical explainers and launch content part of the same system.\n- **Framework and product surface growth** — `nestjs-patterns`, richer Codex/OpenCode install surfaces, and expanded cross-harness packaging keep the repo usable beyond Claude Code alone.\n- **Itô prediction-market skill pack** — `ito-market-intelligence`, `ito-basket-compare`, `ito-trade-planner`, `ito-data-atlas-agent`, `prediction-market-oracle-research`, and `prediction-market-risk-review` add public, non-advisory market/basket workflows while keeping live Itô API access gated and separate from ECC Tools billing.\n- **Optimization skill pack** — `parallel-execution-optimizer`, `benchmark-optimization-loop`, `data-throughput-accelerator`, `latency-critical-systems`, and `recursive-decision-ledger` turn repeated speed/recursion prompts into bounded benchmark, throughput, and decision-ledger workflows.\n- **ECC 2.0 alpha is in-tree** — the Rust control-plane prototype in `ecc2/` now builds locally and exposes `dashboard`, `start`, `sessions`, `status`, `stop`, `resume`, and `daemon` commands. It is usable as an alpha, not yet a general release.\n- **Operator status snapshots** — `ecc status --markdown --write status.md` turns the local state store into a portable handoff covering readiness, active sessions, skill-run health, install health, pending governance events, and linked work items from Linear/GitHub/handoffs. Use `ecc work-items upsert ...` for manual entries, `ecc work-items sync-github --repo owner/repo` for PR/issue queue state, and `ecc status --exit-code` to fail automation when readiness needs attention.\n- **Ecosystem hardening** — AgentShield, ECC Tools cost controls, billing portal work, and website refreshes continue to ship around the core plugin instead of drifting into separate silos.\n\n### v1.9.0 — Selective Install & Language Expansion (Mar 2026)\n\n- **Selective install architecture** — Manifest-driven install pipeline with `install-plan.js` and",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"ecc-universal\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Harness-native agent operating system for Codex, OpenCode, Cursor, Gemini, Claude Code, and terminal workflows - skills, hooks, rules, MCP conventions, and operator control-plane patterns\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"keywords\": [\n    \"ai\",\n    \"agents\",\n    \"skills\",\n    \"hooks\",\n    \"mcp\",\n    \"rules\",\n    \"harness\",\n    \"agent-harness\",\n    \"tdd\",\n    \"code-review\",\n    \"security\",\n    \"automation\",\n    \"best-practices\",\n    \"cursor\",\n    \"cursor-ide\",\n    \"opencode\",\n    \"codex\",\n    \"presentations\",\n    \"slides\"\n  ],\n  \"author\": {\n    \"name\": \"Affaan Mustafa\",\n    \"url\": \"https://x.com/affaan\"\n  },\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/affaan-m/ECC.git\"\n  },\n  \"homepage\": \"https://github.com/affaan-m/ECC#readme\",\n  \"bugs\": {\n    \"url\": \"https://github.com/affaan-m/ECC/issues\"\n  },\n  \"files\": [\n    \".agents/\",\n    \".claude-plugin/\",\n    \".codex/\",\n    \".codex-plugin/\",\n    \".cursor/\",\n    \".gemini/\",\n    \".opencode/\",\n    \".qwen/\",\n    \".zed/\",\n    \".mcp.json\",\n    \"AGENTS.md\",\n    \"VERSION\",\n    \"agent.yaml\",\n    \"assets/ecc-icon.svg\",\n    \"assets/hero.png\",\n    \"agents/\",\n    \"commands/\",\n    \"docs/de-DE/\",\n    \"docs/ja-JP/\",\n    \"docs/ko-KR/\",\n    \"docs/pt-BR/\",\n    \"docs/ru/\",\n    \"docs/tr/\",\n    \"docs/vi-VN/\",\n    \"docs/zh-CN/\",\n    \"docs/zh-TW/\",\n    \"hooks/\",\n    \"install.ps1\",\n    \"install.sh\",\n    \"manifests/\",\n    \"mcp-configs/\",\n    \"plugins/ecc/\",\n    \"rules/\",\n    \"schemas/\",\n    \"scripts/catalog.js\",\n    \"scripts/ci/scan-supply-chain-iocs.js\",\n    \"scripts/ci/supply-chain-advisory-sources.js\",\n    \"scripts/consult.js\",\n    \"scripts/auto-update.js\",\n    \"scripts/claw.js\",\n    \"scripts/control-pane.js\",\n    \"scripts/codex/check-plugin-cache.js\",\n    \"scripts/codex/merge-codex-config.js\",\n    \"scripts/codex/merge-mcp-config.js\",\n    \"scripts/discussion-audit.js\",\n    \"scripts/doctor.js\",\n    \"scripts/ecc.js\",\n    \"scripts/gemini-adapt-agents.js\",\n    \"scripts/harness-adapter-compliance.js\",\n    \"scripts/harness-audit.js\",\n    \"scripts/observability-readiness.js\",\n    \"scripts/operator-readiness-dashboard.js\",\n    \"scripts/platform-audit.js\",\n    \"scripts/preview-pack-smoke.js\",\n    \"scripts/release-approval-gate.js\",\n    \"scripts/release-video-suite.js\",\n    \"scripts/dashboard-web.js\",\n    \"scripts/skills-health.js\",\n    \"scripts/hooks/\",\n    \"scripts/install-apply.js\",\n    \"scripts/install-plan.js\",\n    \"scripts/lib/\",\n    \"scripts/list-installed.js\",\n    \"scripts/loop-status.js\",\n    \"scripts/orchestration-status.js\",\n    \"scripts/orchestrate-codex-worker.sh\",\n    \"scripts/orchestrate-worktrees.js\",\n    \"scripts/repair.js\",\n    \"scripts/session-inspect.js\",\n    \"scripts/sessions-cli.js\",\n    \"scripts/setup-package-manager.js\",\n    \"scripts/skill-create-output.js\",\n    \"scripts/status.js\",\n    \"scripts/work-items.js\",\n    \"scripts/uninstall.js\",\n    \"skills/agent-architecture-audit/\",\n    \"skills/agent-harness-construction/\",\n    \"skills/agent-introspection-debugging/\",\n    \"skills/agent-sort/\",\n    \"skills/agentic-engineering/\",\n    \"skills/agentic-os/\",\n    \"skills/ai-first-engineering/\",\n    \"skills/ai-regression-testing/\",\n    \"skills/android-clean-architecture/\",\n    \"skills/angular-developer/\",\n    \"skills/api-connector-builder/\",\n    \"skills/api-design/\",\n    \"skills/article-writing/\",\n    \"skills/automation-audit-ops/\",\n    \"skills/autonomous-loops/\",\n    \"skills/backend-patterns/\",\n    \"skills/blender-motion-state-inspection/\",\n    \"skills/blueprint/\",\n    \"skills/brand-voice/\",\n    \"skills/carrier-relationship-management/\",\n    \"skills/claude-devfleet/\",\n    \"skills/cisco-ios-patterns/\",\n    \"skills/clickhouse-io/\",\n    \"skills/code-tour/\",\n    \"skills/coding-standards/\",\n    \"skills/compose-multiplatform-patterns/\",\n    \"skills/configure-ecc/\",\n    \"skills/connections-optimizer/\",\n    \"skills/content-engine/\",\n    \"skills/content-hash-cache-pattern/\",\n    \"skills/continuous-agent-loop/\",\n    \"skills/continuous-learning/\",\n    \"skills/continuous-learning-v2/\",\n    \"skills/cost-aware-llm-pipeline/\",\n    \"skills/cost-tracking/\",\n    \"skills/council/\",\n    \"skills/cpp-coding-standards/\",\n    \"skills/cpp-testing/\",\n    \"skills/crosspost/\",\n    \"skills/csharp-testing/\",\n    \"skills/customer-billing-ops/\",\n    \"skills/customs-trade-compliance/\",\n    \"skills/dart-flutter-patterns/\",\n    \"skills/dashboard-builder/\",\n    \"skills/data-throughput-accelerator/\",\n    \"skills/data-scraper-agent/\",\n    \"skills/database-migrations/\",\n    \"skills/deep-research/\",\n    \"skills/defi-amm-security/\",\n    \"skills/deployment-patterns/\",\n    \"skills/django-patterns/\",\n    \"skills/django-security/\",\n    \"skills/django-tdd/\",\n    \"skills/django-verification/\",\n    \"skills/dmux-workflows/\",\n    \"skills/docker-patterns/\",\n    \"skills/dotnet-patterns/\",\n    \"skills/dynamic-workflow-mode/\",\n    \"skills/e2e-testing/\",\n    \"skills/ecc-tools-cost-audit/\",\n    \"skills/ema",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "skill",
      "llm",
      "workflow",
      "automation"
    ],
    "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": "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": 21152,
    "forks": 2438,
    "stars_this_period": 600,
    "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": 31,
      "created_at": "2026-02-25T09:47:50Z",
      "pushed_at": "2026-06-22T17:11:47Z",
      "homepage": "https://mahipal.engineer/Anthropic-Cybersecurity-Skills/",
      "default_branch": "main",
      "forks": 2438,
      "watchers": 145,
      "archived": false,
      "size_kb": 9977
    },
    "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## 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 playbooks |\n| Vulnerability Management | 25 | Nessus · scanning workflows · patch prioritization · CVSS |\n| Penetration Testing | 21 | Network · web · cloud · mobile · NetExec lateral movement |\n| DevSecOps | 18 | CI/CD security · Trivy IaC/image scanning · code signing |\n| Zero Trust Architecture | 17 | BeyondCorp · CISA maturity model · microsegmentation |\n| Endpoint Security | 17 | EDR · LOTL detection · fileless malware · persistence hunting |\n| Cryptography | 16 | TLS · Ed25519 · post-quantum migration · key manage",
    "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": "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": 69477,
    "forks": 5873,
    "stars_this_period": 524,
    "source_slice": "all",
    "source_slices": [
      "all",
      "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": 28,
      "created_at": "2024-02-29T08:52:34Z",
      "pushed_at": "2026-06-25T14:22:06Z",
      "homepage": "https://opendatalab.github.io/MinerU/",
      "default_branch": "master",
      "forks": 5873,
      "watchers": 255,
      "archived": false,
      "size_kb": 155729
    },
    "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": "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": 28667,
    "forks": 1595,
    "stars_this_period": 459,
    "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": 122,
      "created_at": "2026-03-02T19:46:06Z",
      "pushed_at": "2026-06-24T20:36:16Z",
      "homepage": "https://developers.google.com/workspace",
      "default_branch": "main",
      "forks": 1595,
      "watchers": 95,
      "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": 18,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 95
    },
    "strategic_score": 95
  },
  {
    "owner": "shanraisshan",
    "name": "claude-code-best-practice",
    "full_name": "shanraisshan/claude-code-best-practice",
    "url": "https://github.com/shanraisshan/claude-code-best-practice",
    "description": "from vibe coding to agentic engineering - practice makes claude perfect",
    "language": "HTML",
    "total_stars": 60453,
    "forks": 6058,
    "stars_this_period": 450,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "agentic-ai",
        "agentic-coding",
        "agentic-engineering",
        "agentic-workflow",
        "ai",
        "ai-agents",
        "anthropic",
        "best-practices",
        "boris",
        "claude",
        "claude-ai",
        "claude-code",
        "claude-code-agents",
        "claude-code-best-practices",
        "claude-code-commands",
        "claude-code-skills",
        "context-engineering",
        "pakistan",
        "pakistani-developer",
        "vibe-coding"
      ],
      "license": "MIT",
      "open_issues": 13,
      "created_at": "2025-10-31T14:15:28Z",
      "pushed_at": "2026-06-25T06:35:30Z",
      "homepage": "https://linkedin.com/in/shanraisshan",
      "default_branch": "main",
      "forks": 6058,
      "watchers": 459,
      "archived": false,
      "size_kb": 73036
    },
    "readme_content": "# claude-code-best-practice\nfrom vibe coding to agentic engineering - practice makes claude perfect\n\n![updated with Claude Code](https://img.shields.io/badge/updated_with_Claude_Code-Jun%2025%2C%202026%209%3A40%20AM%20PKT-white?style=flat&labelColor=555) <a href=\"https://github.com/shanraisshan/claude-code-best-practice/stargazers\"><img src=\"https://img.shields.io/github/stars/shanraisshan/claude-code-best-practice?style=flat&label=%E2%98%85&labelColor=555&color=white\" alt=\"GitHub Stars\"></a><br>\n\n[![Best Practice](!/tags/best-practice.svg)](best-practice/) [![Implemented](!/tags/implemented.svg)](implementation/) [![Orchestration Workflow](!/tags/orchestration-workflow.svg)](orchestration-workflow/orchestration-workflow.md) [![Claude](!/tags/claude.svg)](https://code.claude.com/docs) [![Boris](!/tags/boris-cherny.svg)](#-tips-and-tricks) [![Community](!/tags/community.svg)](#-subscribe) ![Click on these badges below to see the actual sources](!/tags/click-badges.svg)<br>\n<img src=\"!/tags/a.svg\" height=\"14\"> = Agents · <img src=\"!/tags/c.svg\" height=\"14\"> = Commands · <img src=\"!/tags/s.svg\" height=\"14\"> = Skills\n\n<p align=\"center\">\n  <img src=\"!/claude-jumping.svg\" alt=\"Claude Code mascot jumping\" width=\"120\" height=\"100\"><br>\n  <a href=\"https://github.com/trending\"><img src=\"!/root/github-trending-day.svg\" alt=\"GitHub Trending #1 Repository Of The Day\"></a>\n</p>\n\n<p align=\"center\">\n  <img src=\"!/root/supported-label.svg\" alt=\"Supported by:\" height=\"34\">&nbsp;&nbsp;<a href=\"https://disrupt.com\"><img src=\"!/root/supported-disrupt.svg\" alt=\"Disrupt.com — Ventures Reimagined\" height=\"34\"></a>&nbsp;&nbsp;<a href=\"https://claudekit.cc/?utm_source=github&utm_medium=sponsorship&utm_campaign=shayan_claude_code_best_practice\"><img src=\"!/root/supported-claudekit.svg\" alt=\"ClaudeKit — Production-ready skills and workflows\" height=\"34\"></a>\n</p>\n\n<p align=\"center\">\n  <img src=\"!/root/boris-slider.gif\" alt=\"Boris Cherny on Claude Code\" width=\"600\"><br>\n  Boris Cherny on X (<a href=\"https://x.com/bcherny/status/2007179832300581177\">tweet 1</a> · <a href=\"https://x.com/bcherny/status/2017742741636321619\">tweet 2</a> · <a href=\"https://x.com/bcherny/status/2021699851499798911\">tweet 3</a>)\n</p>\n\n> [!TIP]\n> Visit the [**How to Use**](#how-to-use) section to take full advantage of this repo.\n\n## 🧠 CONCEPTS\n\n| Feature | Location | Description |\n|---------|----------|-------------|\n| <img src=\"!/tags/a.svg\" height=\"14\"> [**Subagents**](https://code.claude.com/docs/en/sub-agents) | `.claude/agents/<name>.md` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-subagents.md) [![Implemented](!/tags/implemented.svg)](implementation/claude-subagents-implementation.md) |\n| <img src=\"!/tags/c.svg\" height=\"14\"> [**Commands**](https://code.claude.com/docs/en/slash-commands) | `.claude/commands/<name>.md` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-commands.md) [![Implemented](!/tags/implemented.svg)](implementation/claude-commands-implementation.md) |\n| <img src=\"!/tags/s.svg\" height=\"14\"> [**Skills**](https://code.claude.com/docs/en/skills) | `.claude/skills/<name>/SKILL.md` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-skills.md) [![Implemented](!/tags/implemented.svg)](implementation/claude-skills-implementation.md) [Official Skills](https://github.com/anthropics/skills/tree/main/skills) · [Skills for Mono-repos](reports/claude-skills-for-larger-mono-repos.md) |\n| [**Workflows**](https://code.claude.com/docs/en/common-workflows) | [`.claude/commands/weather-orchestrator.md`](.claude/commands/weather-orchestrator.md) | [![Orchestration Workflow](!/tags/orchestration-workflow.svg)](orchestration-workflow/orchestration-workflow.md) |\n| [**Hooks**](https://code.claude.com/docs/en/hooks) | `.claude/hooks/` | [![Best Practice](!/tags/best-practice.svg)](https://github.com/shanraisshan/claude-code-hooks) [![Implemented](!/tags/implemented.svg)](https://github.com/shanraisshan/claude-code-hooks) [Guide](https://code.claude.com/docs/en/hooks-guide) |\n| [**MCP Servers**](https://code.claude.com/docs/en/mcp) | `.claude/settings.json`, `.mcp.json` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-mcp.md) [![Implemented](!/tags/implemented.svg)](.mcp.json) |\n| [**Plugins**](https://code.claude.com/docs/en/plugins) | distributable packages | [Marketplaces](https://code.claude.com/docs/en/discover-plugins) · [Create Marketplaces](https://code.claude.com/docs/en/plugin-marketplaces) |\n| [**Settings**](https://code.claude.com/docs/en/settings) | `.claude/settings.json` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-settings.md) [![Implemented](!/tags/implemented.svg)](.claude/settings.json) [Permissions](https://code.claude.com/docs/en/permissions) · [Model Config](https://code.claude.com/docs/en/model-config) · [Output Styles](https://code.claude.com/docs/en/output-styles) · [Sandboxing](https://code.claude.com/docs/en/sandboxing) · [Keybindings](https://code.claude.com/docs/en/keybindings) · [Auto Mode Config](https://code.claude.com/docs/en/auto-mode-config) |\n| [**Status Line**](https://code.claude.com/docs/en/statusline) | `.claude/settings.json` | [![Best Practice](!/tags/best-practice.svg)](https://github.com/shanraisshan/claude-code-status-line) [![Implemented](!/tags/implemented.svg)](.claude/settings.json) |\n| [**Memory**](https://code.claude.com/docs/en/memory) | `CLAUDE.md`, `.claude/rules/`, `~/.claude/rules/`, `~/.claude/projects/<project>/memory/` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-memory.md) [![Implemented](!/tags/implemented.svg)](CLAUDE.md) [Auto Memory](https://code.claude.com/docs/en/memory) · [Auto Memory Deep-dive](reports/claude-agent-memory.md) · [Rules](https://code.claude.com/docs/en/memory#organize-rules-with-clauderules) |\n| [**Checkpointing**](https://code.claude.com/docs/en/checkpointing) | automatic (file-edit tracking) |  |\n| [**CLI Startup Flags**](https://code.claude.com/docs/en/cli-reference) | `claude [flags]` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-cli-startup-flags.md) [Interactive Mode](https://code.claude.com/docs/en/interactive-mode) · [Env Vars](https://code.claude.com/docs/en/env-vars) |\n| **AI Terms** | | [![Best Practice](!/tags/best-practice.svg)](https://github.com/shanraisshan/claude-code-codex-cursor-gemini/blob/main/reports/ai-terms.md) |\n| [**Best Practices**](https://code.claude.com/docs/en/best-practices) | | [Prompt Engineering](https://github.com/anthropics/prompt-eng-interactive-tutorial) · [Extend Claude Code](https://code.claude.com/docs/en/features-overview) |\n\n### 🔥 Hot\n\n| Feature | Location | Description |\n|---------|----------|-------------|\n| [**Ultrareview**](https://code.claude.com/docs/en/ultrareview) ![beta](!/tags/beta.svg) | `/code-review ultra`, `claude ultrareview [target]` | [Tasks tracking](https://code.claude.com/docs/en/ultrareview#track-a-running-review) |\n| [**Devcontainers**](https://code.claude.com/docs/en/devcontainer) | `.devcontainer/` |  |\n| [**Channels**](https://code.claude.com/docs/en/channels) ![beta](!/tags/beta.svg) | `--channels`, plugin-based | [Reference](https://code.claude.com/docs/en/channels-reference) |\n| [**Ultraplan**](https://code.claude.com/docs/en/ultraplan) ![beta](!/tags/beta.svg) | `/ultraplan` |  |\n| [**No Flicker Mode**](https://code.claude.com/docs/en/fullscreen) ![beta](!/tags/beta.svg) | `/tui fullscreen`, `CLAUDE_CODE_NO_FLICKER=1` | [![Best Practice](!/tags/best-practice.svg)](https://x.com/bcherny/status/2039421575422980329) |\n| [**Auto Mode**](https://code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode) ![beta](!/tags/beta.svg) | `--permission-mode auto`, `Shift+Tab` | [![Best Practice](!/tags/best-practice.svg)](https://x.com/claudeai/status/2036503582166393240) [Blog](https://claude.com/blog/auto-mode) |\n| [**Power-ups**](best-practice/claude-power-ups.md) | `/powerup` | [![Best Practice](!/tags/best-practice.svg)](best-practice/claude-power-ups.md) |\n| [**Fast Mode**](https://code.claude.com/docs/en/fast-mode) ![beta](!/tags/beta.svg) | `/fast`, `\"fastMode\": true` |  |\n| [**Advisor**](https://code.claude.com/docs/en/advisor) ![beta](!/tags/beta.svg) | `/advisor`, `advisorModel`, `--advisor` | [Blog](https://claude.com/blog/the-advisor-strategy) |\n| [**Computer Use**](https://code.claude.com/docs/en/computer-use) ![beta](!/tags/beta.svg) | `computer-use` MCP server | [Desktop](https://code.claude.com/docs/en/desktop#let-claude-use-your-computer) |\n| [**Agent SDK**](https://code.claude.com/docs/en/agent-sdk/overview) | `npm` / `pip` package | [Quickstart](https://code.claude.com/docs/en/agent-sdk/quickstart) · [Examples](https://github.com/anthropics/claude-agent-sdk-demos) |\n| [**Ralph Wiggum Loop**](https://github.com/anthropics/claude-code/tree/main/plugins/ralph-wiggum) | plugin | [![Best Practice](!/tags/best-practice.svg)](https://github.com/ghuntley/how-to-ralph-wiggum) [![Implemented](!/tags/implemented.svg)](https://github.com/shanraisshan/ralph-wiggum-self-evolving-loop) |\n| [**Chrome**](https://code.claude.com/docs/en/chrome) ![beta](!/tags/beta.svg) | `--chrome`, extension | [![Best Practice](!/tags/best-practice.svg)](reports/claude-in-chrome-v-chrome-devtools-mcp.md) |\n| [**Claude Code Web**](https://code.claude.com/docs/en/claude-code-on-the-web) ![beta](!/tags/beta.svg) | `claude.ai/code` | [Routines](https://code.claude.com/docs/en/routines) |\n| [**Artifacts**](https://code.claude.com/docs/en/artifacts) ![beta](!/tags/beta.svg) | `/share`, `Artifact` tool |  |\n| [**Slack**](https://code.claude.com/docs/en/slack) | `@Claude` in Slack |  |\n| [**Code Review**](https://code.claude.com/docs/en/code-review) ![beta](!/tags/beta.svg) | GitHub App (managed) | [![Best Practice](!/tags/best-practice.svg)](https://x.com/claudeai/status/2031088171262554195) [Blog](https://claude.com/blog/code-review) [Local /code-review](https://code.claude.com/docs/en/commands) |\n| [**GitHub Actions**](https://code.claude.com/docs/en/github-actions) | `.github/workflows/` | [GitLab CI/CD](https://code.claude.com/docs/en/gitlab-ci-cd) |\n| [**Remote Control**](https://code.claude.com/docs/en/remote-control) | `/remote-control`, `/rc` | [![Best Practice](!/tags/best-practice.svg)](https://x.com/noahzweben/status/2032533699116355819) [Headless Mode](https://code.claude.com/docs/en/headless) |\n| [**Deep Links**](https://code.claude.com/docs/en/deep-links) | `claude-cli://open?repo=…&q=…` |  |\n| [**Dynamic Workflows**](https://code.claude.com/docs/en/workflows) | `/workflows`, `ultracode` keyword, `/effort ultracode`, `.claude/workflows/` | [Deep Research](https://code.claude.com/docs/en/workflows#run-a-bundled-workflow) |\n| [**Agent Teams**](https://code.claude.com/docs/en/agent-teams) ![beta](!/tags/beta.svg) | built-in (env var) | [![Best Practice](!/tags/best-practice.svg)](https://x.com/bcherny/status/2019472394696683904) [![Implemented](!/tags/implemented.svg)](implementation/claude-agent-teams-implementation.md) |\n| [**Agent View**](https://code.claude.com/docs/en/agent-view) ![beta](!/tags/beta.svg) | `claude agents`, `--bg`, `/bg` |  |\n| [**Scheduled Tasks**](https://code.claude.com/docs/en/scheduled-tasks) | `/loop`, `/schedule`, cron tools | [![Best Practice](!/tags/best-practice.svg)](https://x.com/bcherny/status/2030193932404150413) [![Implemented](!/tags/implemented.svg)](implementation/claude-scheduled-tasks-implementation.md) [Desktop scheduled tasks](https://code.claude.com/docs/en/desktop-scheduled-tasks) · [Announcement](https://x.com/noahzweben/status/2036129220959805859) |\n| [**Routines**](https://code.claude.com/docs/en/routines) ![beta](!/tags/beta.svg) | `claude.ai/code/routines`, `/schedule` | [Desktop Tasks](https://code.claude.com/docs/en/desktop-scheduled-tasks) |\n| [**Tasks**](reports/claude-global-vs-project-settings.md#tasks-system) | `/tasks`, `~/.claude/tasks/` | [![Best Practice](!/tags/best-practice.s",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "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": 10661,
    "forks": 856,
    "stars_this_period": 410,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 84,
      "created_at": "2026-03-21T00:28:43Z",
      "pushed_at": "2026-06-25T00:23:50Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 856,
      "watchers": 38,
      "archived": false,
      "size_kb": 630
    },
    "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 (no clone required):**\n\n```bash\nuv tool install git+https://github.com/NVIDIA/skillspector.git\n# Update later: uv tool update skillspector\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| `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# 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```bash\n# Install the optional MCP dependency\npip install \"skillspector[mcp]\"\n\n# 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 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## 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 Harvesting | HIGH | Collecting API keys and secrets |\n| E3 | File System Enumeration | MEDIUM | Scanning directories for sensitive files |\n| E4 | Context Leakage | HIGH | Transmitting conversation context externally |\n\n### Privilege Escalation (3 patterns)\n\n| ID | Pattern | Severity | Description |\n|----|---------|----------|-------------|\n| PE1 | Excessive Permissions | LOW | Requesting access beyond stated functionality |\n| PE2 | Sudo/Root Execution | MEDIUM | Invoking elevated system privileges |\n| PE3 | Credential Access | HIGH | Reading SSH keys, tokens, passwords |\n\n### Supply Chain (6 patterns)\n\n| ID | Pattern | Severity | Description |\n|----|---------|----------|-------------|\n| SC1 | Unpinned Dependencies | LOW | No version constraints on packages |\n| SC2 | External Script Fetching | HIGH | curl \\| bash and remote code execution |\n| SC3 | Obfuscated Code | HIGH | Base64/hex encoded execution |\n| SC4 | Known Vulnerable Dependencies | HIGH | Dependencies with known CVEs (live OSV.dev lookup) |\n| SC5 | Abandoned Dependencies | MEDIUM | Unmaintained packages without security updates |\n| SC6 | Typosquatting | HIGH | Package names similar to popular packages |\n\n### Excessive Agency (4 patterns)\n\n| ID | Pattern | Severity | Description |\n|----|---------|----------|-------------|\n| EA1 | Unrestricted Tool Access | HIGH | Unfettered tool access without constraints |\n| EA2 | Autonomous Decision Making | HIGH | High-impact decisions without human-in-the-loop |\n| EA3 | Scope Creep | MEDIUM | Capabilities extending beyond stated purpose |\n| EA4 | Unbounded Resource Access | MEDIUM | No rate limits or quotas on resource consumption |\n\n### Output Handling (3 patterns)\n\n| ID | Pattern | Severity | Description |\n|----|---------|----------|---",
    "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-core>=1.2.17\",\n    \"langchain-openai>=1.1.10\",\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": 18,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 92
    },
    "strategic_score": 92
  },
  {
    "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": 34176,
    "forks": 4114,
    "stars_this_period": 405,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "cuda",
        "mlx",
        "qwen3-tts",
        "qwen3-tts-ui",
        "voice-ai",
        "voice-clone",
        "whisper"
      ],
      "license": "MIT",
      "open_issues": 485,
      "created_at": "2026-01-25T12:27:03Z",
      "pushed_at": "2026-04-26T20:29:17Z",
      "homepage": "https://voicebox.sh",
      "default_branch": "main",
      "forks": 4114,
      "watchers": 179,
      "archived": false,
      "size_kb": 107737
    },
    "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": 18,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 95
    },
    "strategic_score": 95
  },
  {
    "owner": "NanmiCoder",
    "name": "MediaCrawler",
    "full_name": "NanmiCoder/MediaCrawler",
    "url": "https://github.com/NanmiCoder/MediaCrawler",
    "description": "小红书笔记 | 评论爬虫、抖音视频 | 评论爬虫、快手视频 | 评论爬虫、B 站视频 ｜ 评论爬虫、微博帖子 ｜ 评论爬虫、百度贴吧帖子 ｜ 百度贴吧评论回复爬虫 | 知乎问答文章｜评论爬虫",
    "language": "Python",
    "total_stars": 52722,
    "forks": 10918,
    "stars_this_period": 347,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "NOASSERTION",
      "open_issues": 174,
      "created_at": "2023-06-09T12:14:34Z",
      "pushed_at": "2026-06-18T09:22:51Z",
      "homepage": "https://nanmicoder.github.io/MediaCrawler/",
      "default_branch": "main",
      "forks": 10918,
      "watchers": 225,
      "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": "pbakaus",
    "name": "impeccable",
    "full_name": "pbakaus/impeccable",
    "url": "https://github.com/pbakaus/impeccable",
    "description": "The design language that makes your AI harness better at design.",
    "language": "JavaScript",
    "total_stars": 41406,
    "forks": 2283,
    "stars_this_period": 326,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 53,
      "created_at": "2025-11-16T01:52:04Z",
      "pushed_at": "2026-06-22T23:01:22Z",
      "homepage": "https://impeccable.style",
      "default_branch": "main",
      "forks": 2283,
      "watchers": 73,
      "archived": false,
      "size_kb": 56290
    },
    "readme_content": "# Impeccable\n\nDesign guidance for AI coding agents. 1 skill, 23 commands, live browser iteration, and 44 deterministic detector rules for AI-generated frontend design.\n\n> **Quick start:** From your project root, run `npx impeccable install`, then run `/impeccable init` inside your AI coding tool. Full docs: [impeccable.style](https://impeccable.style).\n\n## Why Impeccable?\n\nAnthropic's [frontend-design](https://github.com/anthropics/skills/tree/main/skills/frontend-design) was the first widely-used design skill for Claude. Impeccable started from there.\n\nEvery model trained on the same SaaS templates. Skip the guidance and you get the same handful of tells on every project: Inter for everything, purple-to-blue gradients, cards nested in cards, gray text on colored backgrounds, the rounded-square icon tile above every heading.\n\nImpeccable adds:\n- **One setup flow.** `/impeccable init` writes `PRODUCT.md` and offers `DESIGN.md`, so later commands know the audience, brand/product lane, voice, anti-references, colors, type, and components.\n- **23 commands.** A shared design vocabulary with your AI: `polish`, `audit`, `critique`, `distill`, `animate`, `bolder`, `quieter`, and more.\n- **44 deterministic detector rules** plus LLM-only critique checks. The CLI and browser extension run the deterministic rules with no LLM and no API key.\n\n## What's Included\n\n### The Skill: impeccable\n\nThe skill installs as one command:\n\n```bash\n/impeccable <command> <target>\n```\n\nStart every new project with:\n\n```bash\n/impeccable init\n```\n\n`init` asks whether the surface is brand (marketing, landing, portfolio) or product (app UI, dashboard, tool), then writes design context that every later command reads.\n\n### 23 Commands\n\nAll commands are accessed through `/impeccable`:\n\n| Command | What it does |\n|---------|--------------|\n| `/impeccable craft` | Full shape-then-build flow with visual iteration |\n| `/impeccable init` | One-time setup: gather design context, write PRODUCT.md and DESIGN.md, configure live mode, recommend next steps |\n| `/impeccable document` | Generate root DESIGN.md from existing project code |\n| `/impeccable extract` | Pull reusable components and tokens into the design system |\n| `/impeccable shape` | Plan UX/UI before writing code |\n| `/impeccable critique` | UX design review: hierarchy, clarity, emotional resonance |\n| `/impeccable audit` | Run technical quality checks (a11y, performance, responsive) |\n| `/impeccable polish` | Final pass, design system alignment, and shipping readiness |\n| `/impeccable bolder` | Amplify boring designs |\n| `/impeccable quieter` | Tone down overly bold designs |\n| `/impeccable distill` | Strip to essence |\n| `/impeccable harden` | Error handling, i18n, text overflow, edge cases |\n| `/impeccable onboard` | First-run flows, empty states, activation paths |\n| `/impeccable animate` | Add purposeful motion |\n| `/impeccable colorize` | Introduce strategic color |\n| `/impeccable typeset` | Fix font choices, hierarchy, sizing |\n| `/impeccable layout` | Fix layout, spacing, visual rhythm |\n| `/impeccable delight` | Add moments of joy |\n| `/impeccable overdrive` | Add technically extraordinary effects |\n| `/impeccable clarify` | Improve unclear UX copy |\n| `/impeccable adapt` | Adapt for different devices |\n| `/impeccable optimize` | Performance improvements |\n| `/impeccable live` | Visual variant mode: iterate on elements in the browser |\n\nUse `/impeccable pin <command>` to create standalone shortcuts (e.g., `pin audit` creates `/audit`).\n\n#### Usage Examples\n\n```\n/impeccable audit blog           # Audit blog hub + post pages\n/impeccable critique landing     # UX design review\n/impeccable polish settings      # Final pass before shipping\n/impeccable harden checkout      # Add error handling + edge cases\n```\n\nOr use `/impeccable` directly with a description:\n```\n/impeccable redo this hero section\n```\n\n### Anti-Patterns\n\nThe skill includes explicit guidance on what to avoid:\n\n- Don't use overused fonts (Arial, Inter, system defaults)\n- Don't use gray text on colored backgrounds\n- Don't use pure black/gray (always tint)\n- Don't wrap everything in cards or nest cards inside cards\n- Don't use bounce/elastic easing (feels dated)\n\n## See It In Action\n\nVisit [impeccable.style](https://impeccable.style#casestudies) to see before/after case studies of real projects transformed with Impeccable commands.\n\n## Installation\n\n### Option 1: CLI installer (Recommended)\n\nFrom the root of your project, run:\n\n```bash\nnpx impeccable install\n```\n\nThis shows the harness folders it detected (for example `~/.claude`, `~/.codex`, or project-local `.cursor`), lets you keep the detected set or customize providers, then asks whether to install into the current project or globally. Use `--providers=claude,codex,cursor` and `--scope=project|global` to skip those choices in scripts. On Claude Code, Cursor, and Codex, it also installs the provider-native hook manifest for the current project. Works with Cursor, Claude Code, Gemini CLI, Codex CLI, and every other supported tool. Reload your harness afterward.\n\nTo refresh an existing install, run:\n\n```bash\nnpx impeccable update\n```\n\nCodex users should open `/hooks` after install or update and approve the project hook when prompted. Codex tracks trust by hook definition, so updates that change `.codex/hooks.json` can require approval again.\n\n### Option 2: Git Submodule\n\nFor teams that want to keep Impeccable vendored and updated through Git, add this repo as a submodule and link the compiled provider build into your harness folders:\n\n```bash\ngit submodule add https://github.com/pbakaus/impeccable .impeccable\nnpx impeccable link --source=.impeccable --providers=claude,cursor\ngit add .gitmodules .impeccable .claude .cursor\ngit commit -m \"Add Impeccable skills\"\n```\n\nUse the providers your project needs, for example `claude`, `cursor`, `gemini`, `codex`, `github`, `opencode`, `pi`, `qoder`, `trae`, `trae-cn`, or `rovo-dev`. The command links individual skill folders from `.impeccable/dist/universal/` and leaves existing real skill directories untouched unless you pass `--force`.\n\nTo update later:\n\n```bash\ngit submodule update --remote .impeccable\nnpx impeccable link --source=.impeccable --providers=claude,cursor\n```\n\n### Option 3: Download from Website\n\nVisit [impeccable.style](https://impeccable.style), download the ZIP for your tool, and extract to your project.\n\n### Option 4: Copy from Repository\n\n**Cursor:**\n```bash\ncp -r dist/cursor/.cursor your-project/\n```\n\n> **Note:** Cursor skills require setup:\n> 1. Switch to Nightly channel in Cursor Settings → Beta\n> 2. Enable Agent Skills in Cursor Settings → Rules\n>\n> [Learn more about Cursor skills](https://cursor.com/docs/context/skills)\n\n**Claude Code:**\n```bash\n# Project-specific\ncp -r dist/claude-code/.claude your-project/\n\n# Or global (applies to all projects)\ncp -r dist/claude-code/.claude/* ~/.claude/\n```\n\n**OpenCode:**\n```bash\ncp -r dist/opencode/.opencode your-project/\n```\n\n**Pi:**\n```bash\ncp -r dist/pi/.pi your-project/\n```\n\n**Gemini CLI:**\n```bash\ncp -r dist/gemini/.gemini your-project/\n```\n\n> **Note:** Gemini CLI skills require setup:\n> 1. Install preview version: `npm i -g @google/gemini-cli@preview`\n> 2. Run `/settings` and enable \"Skills\"\n> 3. Run `/skills list` to verify installation\n>\n> [Learn more about Gemini CLI skills](https://geminicli.com/docs/cli/skills/)\n\n**Codex CLI:**\n```bash\n# Project-local\ncp -r dist/agents/.agents your-project/\nmkdir -p your-project/.codex\ncp dist/codex/.codex/hooks.json your-project/.codex/hooks.json\n\n# Or install the skill user-wide. Copy .codex/hooks.json into each project\n# where you want the design hook to run.\nmkdir -p ~/.agents/skills\ncp -r dist/agents/.agents/skills/* ~/.agents/skills/\n```\n\n> The asset-producer subagent ships nested inside the skill's own `agents/` folder, which Codex auto-discovers. No separate `.codex/agents/` copy is needed. The hook is project-local because Codex discovers hooks from `.codex/hooks.json` next to trusted project config.\n\n**GitHub Copilot:**\n```bash\ncp -r dist/github/.github your-project/\n```\n\n**Trae:**\n```bash\n# Trae China (domestic version)\ncp -r dist/trae/.trae-cn/skills/* ~/.trae-cn/skills/\n\n# Trae International\ncp -r dist/trae/.trae/skills/* ~/.trae/skills/\n```\n\n> **Note:** Trae has two versions with different config directories:\n> - **Trae China**: `~/.trae-cn/skills/`\n> - **Trae International**: `~/.trae/skills/`\n>\n> After copying, restart Trae IDE to activate the skills.\n\n**Rovo Dev:**\n```bash\n# Project-specific\ncp -r dist/rovo-dev/.rovodev your-project/\n\n# Or global (applies to all projects)\ncp -r dist/rovo-dev/.rovodev/skills/* ~/.rovodev/skills/\n```\n\n**Qoder:**\n```bash\n# Project-specific\ncp -r dist/qoder/.qoder your-project/\n\n# Or global (applies to all projects)\ncp -r dist/qoder/.qoder/skills/* ~/.qoder/skills/\n```\n\n## Usage\n\nOnce installed, every command runs through the single `/impeccable` skill:\n\n```\n/impeccable audit        # Find issues\n/impeccable polish       # Final cleanup\n/impeccable distill      # Remove complexity\n/impeccable critique     # Full design review\n```\n\nType `/impeccable` alone to see the full command list.\n\nMost commands accept an optional argument to focus on a specific area:\n\n```\n/impeccable audit the header\n/impeccable polish the checkout form\n```\n\nIf you reach for one command often, pin it with `/impeccable pin audit` to get `/audit` as a standalone shortcut.\n\n**Note:** Codex uses skills here, not `/prompts:` commands. Open `/skills` or type `$impeccable`. Repo-local installs live in `.agents/skills/`; user-wide installs live in `~/.agents/skills/`. GitHub Copilot uses `.github/skills/`. Restart the tool if a newly installed skill does not appear.\n\n## Design hook\n\nOn Claude Code, GitHub Copilot, Codex, and Cursor, `npx impeccable install` and `npx impeccable update` install a provider-native hook manifest along with the skill payload. The hook runs the Impeccable design detector on direct UI file edits and surfaces findings back into the agent flow. Claude Code, GitHub Copilot, and Codex surface findings after the edit. Cursor blocks bad proposed writes before they land.\n\nInstalled hook surfaces:\n\n- Claude Code: `.claude/settings.local.json` (gitignored, machine-local) runs `${CLAUDE_PROJECT_DIR}/.claude/skills/impeccable/scripts/hook.mjs`. A hook moved into the shared `settings.json` is honored in place.\n- GitHub Copilot: `.github/hooks/impeccable.json` (committed, shared by the Copilot CLI and the cloud agent) runs `.github/skills/impeccable/scripts/hook.mjs`. The Copilot CLI activates it once the file is on the repository's default branch and the folder is trusted.\n- Cursor: `.cursor/hooks.json` runs `.cursor/skills/impeccable/scripts/hook-before-edit.mjs`.\n- Codex: `.codex/hooks.json` runs `.agents/skills/impeccable/scripts/hook.mjs`.\n\nThe installer preserves unrelated hook entries and settings. If a hook manifest is malformed, install/update aborts by default; rerun with `--force` to back up the malformed file as `.bak` and replace it.\n\nOn an interactive `install`/`update`, Impeccable explains the hook and offers to install it (default yes). Your choice is remembered per-developer in the gitignored `.impeccable/config.local.json`, so you are not asked again; `--no-hooks` skips it for that run without recording anything. Hook lifecycle settings live under the `hook` key of `.impeccable/config.json`; detector ignores live under `detector`, shared by `/impeccable hooks` and `npx impeccable detect`.\n\nFor debugging, set `hook.auditLog` in `.impeccable/config.json` to a path (or the legacy `IMPECCABLE_HOOK_LOG` env var) to write one NDJSON line per hook invocation. Leave it unset for normal use.\n\nCodex requires one platform step that Impeccable cannot safely skip: open `/hooks` after install or update and approve the project hook. There is no Codex marketplace/plugin install flow for this hook.\n\nFull hook docs: [impeccable.style/docs/hooks](https://impeccable.style/",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"impeccable\",\n  \"version\": \"3.1.0\",\n  \"author\": \"Paul Bakaus\",\n  \"description\": \"Design skills, commands, and anti-pattern detection for AI coding agents\",\n  \"keywords\": [\n    \"design\",\n    \"frontend\",\n    \"ux\",\n    \"skills\",\n    \"ai\",\n    \"anti-patterns\",\n    \"lint\",\n    \"accessibility\",\n    \"css\",\n    \"html\",\n    \"detection\",\n    \"ci-cd\"\n  ],\n  \"license\": \"Apache-2.0\",\n  \"homepage\": \"https://impeccable.style\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/pbakaus/impeccable.git\"\n  },\n  \"engines\": {\n    \"node\": \">=24\"\n  },\n  \"type\": \"module\",\n  \"bin\": {\n    \"impeccable\": \"cli/bin/cli.js\"\n  },\n  \"main\": \"./cli/engine/detect-antipatterns.mjs\",\n  \"exports\": {\n    \".\": \"./cli/engine/detect-antipatterns.mjs\",\n    \"./browser\": \"./cli/engine/detect-antipatterns-browser.js\"\n  },\n  \"files\": [\n    \"cli/\",\n    \"LICENSE\"\n  ],\n  \"scripts\": {\n    \"build:skills\": \"bun run scripts/build.js --skip-root-sync\",\n    \"build:skills:release\": \"bun run scripts/build.js\",\n    \"build:site\": \"npx astro build\",\n    \"build\": \"bun run build:skills && bun run build:site && cp -R dist build/_data/dist\",\n    \"build:release\": \"bun run build:skills:release && bun run build:site && cp -R dist build/_data/dist\",\n    \"build:browser\": \"node scripts/build-browser-detector.js\",\n    \"build:extension\": \"node scripts/build-extension.js\",\n    \"clean\": \"rm -rf dist build\",\n    \"rebuild\": \"bun run clean && bun run build\",\n    \"rebuild:release\": \"bun run clean && bun run build:release\",\n    \"dev\": \"bun run scripts/gen-dev-api.mjs && npx astro dev\",\n    \"preview\": \"bun run build && npx astro preview\",\n    \"deploy\": \"bun run build && wrangler pages deploy build/\",\n    \"test\": \"node scripts/run-tests.mjs default\",\n    \"test:core\": \"node scripts/run-tests.mjs core\",\n    \"test:detector\": \"node scripts/run-tests.mjs detector\",\n    \"test:framework\": \"node scripts/run-tests.mjs framework\",\n    \"test:live\": \"node scripts/run-tests.mjs live\",\n    \"test:cli-e2e\": \"node scripts/run-tests.mjs cli-e2e\",\n    \"test:cli-remote-e2e\": \"node scripts/run-tests.mjs cli-remote-e2e\",\n    \"test:live-e2e\": \"node scripts/run-tests.mjs live-e2e\",\n    \"test:live-e2e-accept-cleanup\": \"node scripts/run-tests.mjs live-e2e-accept-cleanup\",\n    \"test:live-e2e-agent\": \"node scripts/run-tests.mjs live-e2e-agent\",\n    \"test:skill-behavior\": \"node scripts/run-tests.mjs skill-behavior\",\n    \"test:live-svelte-adapter-deepseek\": \"node scripts/run-tests.mjs live-svelte-adapter-deepseek\",\n    \"smoke:hooks\": \"node scripts/smoke-provider-hooks.mjs\",\n    \"bench:detector\": \"node scripts/benchmark-detector.mjs\",\n    \"bench:detector:browser\": \"node scripts/benchmark-detector.mjs --browser\",\n    \"audit\": \"bun audit --audit-level=moderate\",\n    \"prepack\": \"cp README.md README.repo.md && cp README.npm.md README.md\",\n    \"postpack\": \"cp README.repo.md README.md && rm README.repo.md\",\n    \"release:skill\": \"node scripts/release.mjs skill\",\n    \"release:cli\": \"node scripts/release.mjs cli\",\n    \"release:ext\": \"node scripts/release.mjs extension\",\n    \"screenshot\": \"bun run scripts/screenshot-antipatterns.js\",\n    \"og-image\": \"bun run scripts/generate-og-image.js\"\n  },\n  \"dependencies\": {\n    \"css-select\": \"^7.0.0\",\n    \"css-tree\": \"^3.2.1\",\n    \"domutils\": \"^4.0.2\",\n    \"fflate\": \"^0.8.3\",\n    \"htmlparser2\": \"^12.0.0\",\n    \"marked\": \"^18.0.5\"\n  },\n  \"optionalDependencies\": {\n    \"puppeteer\": \"^25.1.0\"\n  },\n  \"devDependencies\": {\n    \"@ai-sdk/anthropic\": \"^3.0.71\",\n    \"@ai-sdk/google\": \"^3.0.75\",\n    \"@ai-sdk/openai\": \"^3.0.53\",\n    \"@anthropic-ai/claude-agent-sdk\": \"^0.3.165\",\n    \"@anthropic-ai/sdk\": \"^0.104.2\",\n    \"@google/genai\": \"^2.8.0\",\n    \"@paper-design/shaders\": \"^0.0.76\",\n    \"ai\": \"^6.0.168\",\n    \"archiver\": \"^8.0.0\",\n    \"astro\": \"^6.2.1\",\n    \"fontkit\": \"^2.0.4\",\n    \"modern-screenshot\": \"^4.7.0\",\n    \"motion\": \"^12.38.0\",\n    \"opentype.js\": \"^2.0.0\",\n    \"playwright\": \"^1.59.1\",\n    \"wrangler\": \"^4.85.0\",\n    \"zod\": \"^4.3.6\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "llm"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "owner": "openai",
    "name": "codex",
    "full_name": "openai/codex",
    "url": "https://github.com/openai/codex",
    "description": "Lightweight coding agent that runs in your terminal",
    "language": "Rust",
    "total_stars": 93678,
    "forks": 13855,
    "stars_this_period": 300,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 7853,
      "created_at": "2025-04-13T05:37:54Z",
      "pushed_at": "2026-06-25T21:57:04Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 13855,
      "watchers": 508,
      "archived": false,
      "size_kb": 501735
    },
    "readme_content": "<p align=\"center\"><strong>Codex CLI</strong> is a coding agent from OpenAI that runs locally on your computer.\n<p align=\"center\">\n  <img src=\"https://github.com/openai/codex/blob/main/.github/codex-cli-splash.png\" alt=\"Codex CLI splash\" width=\"80%\" />\n</p>\n</br>\nIf you want Codex in your code editor (VS Code, Cursor, Windsurf), <a href=\"https://developers.openai.com/codex/ide\">install in your IDE.</a>\n</br>If you want the desktop app experience, run <code>codex app</code> or visit <a href=\"https://chatgpt.com/codex?app-landing-page=true\">the Codex App page</a>.\n</br>If you are looking for the <em>cloud-based agent</em> from OpenAI, <strong>Codex Web</strong>, go to <a href=\"https://chatgpt.com/codex\">chatgpt.com/codex</a>.</p>\n\n---\n\n## Quickstart\n\n### Installing and running Codex CLI\n\nRun the following on Mac or Linux to install Codex CLI:\n\n```shell\ncurl -fsSL https://chatgpt.com/codex/install.sh | sh\n```\n\nRun the following on Windows to install Codex CLI:\n\n```\npowershell -ExecutionPolicy ByPass -c \"irm https://chatgpt.com/codex/install.ps1 | iex\"\n```\n\nCodex CLI can also be installed via the following package managers:\n\n```shell\n# Install using npm\nnpm install -g @openai/codex\n```\n\n```shell\n# Install using Homebrew\nbrew install --cask codex\n```\n\nThen simply run `codex` to get started.\n\n<details>\n<summary>You can also go to the <a href=\"https://github.com/openai/codex/releases/latest\">latest GitHub Release</a> and download the appropriate binary for your platform.</summary>\n\nEach GitHub Release contains many executables, but in practice, you likely want one of these:\n\n- macOS\n  - Apple Silicon/arm64: `codex-aarch64-apple-darwin.tar.gz`\n  - x86_64 (older Mac hardware): `codex-x86_64-apple-darwin.tar.gz`\n- Linux\n  - x86_64: `codex-x86_64-unknown-linux-musl.tar.gz`\n  - arm64: `codex-aarch64-unknown-linux-musl.tar.gz`\n\nEach archive contains a single entry with the platform baked into the name (e.g., `codex-x86_64-unknown-linux-musl`), so you likely want to rename it to `codex` after extracting it.\n\n</details>\n\n### Using Codex with your ChatGPT plan\n\nRun `codex` and select **Sign in with ChatGPT**. We recommend signing into your ChatGPT account to use Codex as part of your Plus, Pro, Business, Edu, or Enterprise plan. [Learn more about what's included in your ChatGPT plan](https://help.openai.com/en/articles/11369540-codex-in-chatgpt).\n\nYou can also use Codex with an API key, but this requires [additional setup](https://developers.openai.com/codex/auth#sign-in-with-an-api-key).\n\n## Docs\n\n- [**Codex Documentation**](https://developers.openai.com/codex)\n- [**Contributing**](./docs/contributing.md)\n- [**Installing & building**](./docs/install.md)\n- [**Open source fund**](./docs/open-source-fund.md)\n\nThis repository is licensed under the [Apache-2.0 License](LICENSE).\n",
    "strategic_keywords": [
      "agent"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 8,
      "novelty": 4,
      "productize": 11,
      "adoption": 8,
      "relation": 7,
      "risk_signal": 8,
      "total": 63
    },
    "strategic_score": 63
  },
  {
    "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": 74693,
    "forks": 10072,
    "stars_this_period": 284,
    "source_slice": "python",
    "source_slices": [
      "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": 954,
      "created_at": "2025-05-07T02:50:19Z",
      "pushed_at": "2026-06-25T15:57:44Z",
      "homepage": "https://deerflow.tech",
      "default_branch": "main",
      "forks": 10072,
      "watchers": 319,
      "archived": false,
      "size_kb": 40098
    },
    "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": 17,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 8,
      "total": 92
    },
    "strategic_score": 92
  },
  {
    "owner": "rust-lang",
    "name": "rust",
    "full_name": "rust-lang/rust",
    "url": "https://github.com/rust-lang/rust",
    "description": "Empowering everyone to build reliable and efficient software.",
    "language": "Rust",
    "total_stars": 114170,
    "forks": 15010,
    "stars_this_period": 210,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "compiler",
        "language",
        "rust"
      ],
      "license": "Apache-2.0",
      "open_issues": 12548,
      "created_at": "2010-06-16T20:39:03Z",
      "pushed_at": "2026-06-25T19:36:47Z",
      "homepage": "https://www.rust-lang.org",
      "default_branch": "main",
      "forks": 15010,
      "watchers": 1583,
      "archived": false,
      "size_kb": 926395
    },
    "readme_content": "<div align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/rust-lang/www.rust-lang.org/master/static/images/rust-social-wide-dark.svg\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/rust-lang/www.rust-lang.org/master/static/images/rust-social-wide-light.svg\">\n    <img alt=\"The Rust Programming Language: A language empowering everyone to build reliable and efficient software\"\n         src=\"https://raw.githubusercontent.com/rust-lang/www.rust-lang.org/master/static/images/rust-social-wide-light.svg\"\n         width=\"50%\">\n  </picture>\n\n[Website][Rust] | [Getting started] | [Learn] | [Documentation] | [Contributing]\n</div>\n\nThis is the main source code repository for [Rust]. It contains the compiler,\nstandard library, and documentation.\n\n[Rust]: https://www.rust-lang.org/\n[Getting Started]: https://www.rust-lang.org/learn/get-started\n[Learn]: https://www.rust-lang.org/learn\n[Documentation]: https://www.rust-lang.org/learn#learn-use\n[Contributing]: CONTRIBUTING.md\n\n## Why Rust?\n\n- **Performance:** Fast and memory-efficient, suitable for critical services, embedded devices, and easily integrated with other languages.\n\n- **Reliability:** Our rich type system and ownership model ensure memory and thread safety, reducing bugs at compile-time.\n\n- **Productivity:** Comprehensive documentation, a compiler committed to providing great diagnostics, and advanced tooling including package manager and build tool ([Cargo]), auto-formatter ([rustfmt]), linter ([Clippy]) and editor support ([rust-analyzer]).\n\n[Cargo]: https://github.com/rust-lang/cargo\n[rustfmt]: https://github.com/rust-lang/rustfmt\n[Clippy]: https://github.com/rust-lang/rust-clippy\n[rust-analyzer]: https://github.com/rust-lang/rust-analyzer\n\n## Quick Start\n\nRead [\"Installation\"] from [The Book].\n\n[\"Installation\"]: https://doc.rust-lang.org/book/ch01-01-installation.html\n[The Book]: https://doc.rust-lang.org/book/index.html\n\n## Installing from Source\n\nIf you really want to install from source (though this is not recommended), see\n[INSTALL.md](INSTALL.md).\n\n## Getting Help\n\nSee https://www.rust-lang.org/community for a list of chat platforms and forums.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\nFor a detailed explanation of the compiler's architecture and how to begin contributing, see the [rustc-dev-guide](https://rustc-dev-guide.rust-lang.org/).\n\n## License\n\nRust is primarily distributed under the terms of both the MIT license and the\nApache License (Version 2.0), with portions covered by various BSD-like\nlicenses.\n\nSee [LICENSE-APACHE](LICENSE-APACHE), [LICENSE-MIT](LICENSE-MIT), and\n[COPYRIGHT](COPYRIGHT) for details.\n\n## Trademark\n\n[The Rust Foundation][rust-foundation] owns and protects the Rust and Cargo\ntrademarks and logos (the \"Rust Trademarks\").\n\nIf you want to use these names or brands, please read the\n[Rust language trademark policy][trademark-policy].\n\nThird-party logos may be subject to third-party copyrights and trademarks. See\n[Licenses][policies-licenses] for details.\n\n[rust-foundation]: https://rustfoundation.org/\n[trademark-policy]: https://rustfoundation.org/policy/rust-trademark-policy/\n[policies-licenses]: https://www.rust-lang.org/policies/licenses\n",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[workspace]\nresolver = \"2\"\nmembers = [\n# tidy-alphabetical-start\n  \"compiler/rustc\",\n  \"src/build_helper\",\n  \"src/rustc-std-workspace/rustc-std-workspace-alloc\",\n  \"src/rustc-std-workspace/rustc-std-workspace-core\",\n  \"src/rustc-std-workspace/rustc-std-workspace-std\",\n  \"src/rustdoc-json-types\",\n  \"src/tools/build-manifest\",\n  \"src/tools/bump-stage0\",\n  \"src/tools/cargotest\",\n  \"src/tools/clippy\",\n  \"src/tools/clippy/clippy_dev\",\n  \"src/tools/collect-license-metadata\",\n  \"src/tools/compiletest\",\n  \"src/tools/coverage-dump\",\n  \"src/tools/features-status-dump\",\n  \"src/tools/generate-copyright\",\n  \"src/tools/generate-windows-sys\",\n  \"src/tools/html-checker\",\n  \"src/tools/jsondocck\",\n  \"src/tools/jsondoclint\",\n  \"src/tools/linkchecker\",\n  \"src/tools/lint-docs\",\n  \"src/tools/lld-wrapper\",\n  \"src/tools/llvm-bitcode-linker\",\n  \"src/tools/miri\",\n  \"src/tools/miri/cargo-miri\",\n  \"src/tools/miropt-test-tools\",\n  \"src/tools/opt-dist\",\n  \"src/tools/remote-test-client\",\n  \"src/tools/remote-test-server\",\n  \"src/tools/replace-version-placeholder\",\n  \"src/tools/run-make-support\",\n  \"src/tools/rust-installer\",\n  \"src/tools/rustdoc\",\n  \"src/tools/rustdoc-gui-test\",\n  \"src/tools/rustdoc-themes\",\n  \"src/tools/rustfmt\",\n  \"src/tools/test-float-parse\",\n  \"src/tools/tidy\",\n  \"src/tools/tier-check\",\n  \"src/tools/unicode-table-generator\",\n  \"src/tools/unstable-book-gen\",\n  \"src/tools/wasm-component-ld\",\n  \"src/tools/x\",\n# tidy-alphabetical-end\n]\n\nexclude = [\n  \"build\",\n  \"compiler/rustc_codegen_cranelift\",\n  \"compiler/rustc_codegen_gcc\",\n  \"src/bootstrap\",\n  \"tests/rustdoc-gui\",\n  # HACK(eddyb) This hardcodes the fact that our CI uses `/checkout/obj`.\n  \"obj\",\n]\n\n[profile.release.package.rustc_thread_pool]\n# The rustc fork of Rayon has deadlock detection code which intermittently\n# causes overflows in the CI (see https://github.com/rust-lang/rust/issues/90227)\n# so we turn overflow checks off for now.\n# FIXME: This workaround should be removed once #90227 is fixed.\noverflow-checks = false\n\n# These are very thin wrappers around executing lld with the right binary name.\n# Basically nothing within them can go wrong without having been explicitly logged anyway.\n# We ship these in every rustc tarball and even after compression they add up\n# to around 0.6MB of data every user needs to download (and 15MB on disk).\n[profile.release.package.lld-wrapper]\ndebug = 0\nstrip = true\n[profile.release.package.wasm-component-ld-wrapper]\ndebug = 0\nstrip = true\n\n# Bigint libraries are slow without optimization, speed up testing\n[profile.dev.package.test-float-parse]\nopt-level = 3\n\n# Speed up the binary as much as possible\n[profile.release.package.test-float-parse]\nopt-level = 3\ncodegen-units = 1\n# FIXME: LTO cannot be enabled for binaries in a workspace\n# <https://github.com/rust-lang/cargo/issues/9330>\n# lto = true\n\n# If you want to use a crate with local modifications, you can set a path or git dependency here.\n# For git dependencies, also add your source to ALLOWED_SOURCES in src/tools/tidy/src/extdeps.rs.\n#[patch.crates-io]\n\n",
    "strategic_keywords": [
      "memory",
      "rag",
      "workspace"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 90
    },
    "strategic_score": 90
  },
  {
    "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": 34755,
    "forks": 1989,
    "stars_this_period": 202,
    "source_slice": "all",
    "source_slices": [
      "all",
      "go"
    ],
    "metadata": {
      "topics": [
        "casaos",
        "docker",
        "golang",
        "home-automation",
        "home-cloud",
        "home-server",
        "iot",
        "raspberry",
        "self-hosted",
        "vuejs"
      ],
      "license": "Apache-2.0",
      "open_issues": 808,
      "created_at": "2021-09-26T02:33:09Z",
      "pushed_at": "2025-08-06T08:54:04Z",
      "homepage": "https://casaos.zimaspace.com",
      "default_branch": "main",
      "forks": 1989,
      "watchers": 205,
      "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": 18,
      "relevance": 15,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 6,
      "total": 75
    },
    "strategic_score": 75
  },
  {
    "owner": "xbtlin",
    "name": "ai-berkshire",
    "full_name": "xbtlin/ai-berkshire",
    "url": "https://github.com/xbtlin/ai-berkshire",
    "description": "AI 时代的伯克希尔：基于 Claude Code 的价值投资研究框架。巴菲特·芒格·段永平·李录四大师方法论 + 多Agent并行研究。| AI-era Berkshire: a value investing research framework built on Claude Code. 4 masters' methodologies + multi-agent adversarial analysis.",
    "language": "Python",
    "total_stars": 1793,
    "forks": 292,
    "stars_this_period": 201,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "ai",
        "ai-agent",
        "anthropic",
        "berkshire-hathaway",
        "charlie-munger",
        "china-stock",
        "claude",
        "claude-code",
        "financial-analysis",
        "fintech",
        "fundamental-analysis",
        "investment",
        "investment-research",
        "llm",
        "mcp",
        "portfolio-management",
        "stock-analysis",
        "stock-market",
        "value-investing",
        "warren-buffett"
      ],
      "license": "MIT",
      "open_issues": 11,
      "created_at": "2026-04-07T11:19:51Z",
      "pushed_at": "2026-06-25T21:12:01Z",
      "homepage": "https://github.com/xbtlin/ai-berkshire#readme",
      "default_branch": "main",
      "forks": 292,
      "watchers": 5,
      "archived": false,
      "size_kb": 23787
    },
    "readme_content": "# AI Berkshire - AI 时代的价值投资研究框架\n\n> \"Price is what you pay, value is what you get.\" — Warren Buffett\n>\n> 用 AI 重新定义投资研究的深度与效率。\n\n**AI Berkshire** 是一套基于 [Claude Code](https://claude.ai/code) 的投资研究 Skill 合集，将巴菲特、芒格、段永平、李录四位价值投资大师的方法论系统化、结构化，通过 AI Agent 实现专业级投资研究。\n\n一个人 + Claude = 一个投研团队。\n\n---\n\n## Real Track Record\n\n> 不是纸上谈兵。这套框架背后是真金白银验证的投资体系。\n\n### 2024 全年收益：+69.29%\n\n<img src=\"assets/2024-returns.jpg\" width=\"300\" />\n\n### 2025 年至今收益：+66.38%\n\n<img src=\"assets/2025-returns.jpg\" width=\"300\" />\n\n### 与主要指数对比\n\n| 指标 | 2024 全年 | 2025 至今 |\n|------|----------|----------|\n| **本框架实盘** | **+69.29%** | **+66.38%** |\n| 恒生指数 | +17.67% | +27.77% |\n| 标普500 | +23.31% | +16.39% |\n| 沪深300 | +14.68% | +17.66% |\n| 纳斯达克 | +28.64% | +20.36% |\n\n**2024 年超额收益**：跑赢标普500 **46个百分点**，跑赢恒生指数 **52个百分点**\n\n**2025 年超额收益**：跑赢标普500 **50个百分点**，跑赢恒生指数 **39个百分点**\n\n**两年累计实盘收益超 146万元**，连续两年大幅跑赢全球主要指数。\n\n> *免责声明：历史收益不代表未来表现。截图来自富途证券真实账户。*\n\n---\n\n## 为什么不能直接问 AI？\n\n你当然可以直接问 Claude：\"帮我分析拼多多值不值得买\"。你会得到一篇\"一方面...另一方面...\"的平衡分析，最后以\"投资有风险，请自行判断\"收尾。\n\n**这种分析看起来对，但没法拿来做决策。**\n\nAI Berkshire 解决的不是\"能不能分析\"的问题，而是**分析质量和决策纪律**的问题。以下是核心差异：\n\n### 1. 强制给结论，不打太极\n\n直接问AI，你得到的是两面讨好的\"分析\"。AI Berkshire 强制输出：**通过/不通过/灰色地带**，带具体价格区间和分层建议。\n\n> 普通AI回答：*\"拼多多有增长潜力但也面临竞争压力，投资者需要权衡...\"*\n>\n> AI Berkshire 输出：\n\n> | 策略 | 建议 | 价格区间 |\n> |------|------|---------|\n> | 激进型 | 当前价位可建仓20% | $95-105 |\n> | 稳健型 | 等回购政策明确后建仓 | $85-95 |\n> | 保守型 | 不符合10年确定性标准，观望 | — |\n>\n> **镜子测试**：5句话说不完整 = 不买，没有例外。\n\n### 2. 四大师视角对抗，而非单一分析\n\n不是\"用巴菲特方法分析一下\"这么简单。四个视角会产生**真实的矛盾和张力**——\n\n以拼多多为例：\n- **段永平**（商业模式）：好生意，C2M模式难以复制 → 评分 3.7/5\n- **巴菲特**（财务估值）：扣现金PE仅6.3x，印钞机 → 评分 4.4/5\n- **芒格**（逆向思考）：护城河比想象中浅，抖音3年做到4万亿GMV → 评分 3.5/5\n- **李录**（长期确定性）：管理层文化有隐患，10年后不确定 → 评分 2.0/5\n\n**巴菲特说\"真便宜\"，李录说\"不确定就不买\"**——这种冲突才是投资决策的真实状态。单一prompt无法制造这种多视角对抗，而这恰恰是避免盲点的关键。\n\n### 3. 结构化反偏见机制\n\nAI最危险的不是给错答案，而是给一个**看起来很对但经不起推敲**的答案。AI Berkshire 在流程中内置了多层\"防骗\"机制：\n\n| 机制 | 解决什么问题 | 举例 |\n|------|------------|------|\n| **信息丰富度评级（A/B/C）** | 防止\"资料多=确定性高\"的幻觉 | 泡泡玛特评为B级：数据有限，推算指标标注置信度 |\n| **芒格式逆向检验** | 强制思考失败场景 | \"什么情况下拼多多会死？\"→ 列出5大情景及概率 |\n| **快速否决清单** | 8条红线一票否决 | 管理层诚信污点 → 直接否决，不管估值多便宜 |\n| **反共识检查** | 避免和市场想法一样 | \"聪明人为什么在做空？\"→ 发现被忽视的风险 |\n| **留白原则** | 宁可说\"不知道\" | 数据不足时标注\"灰色地带\"，不用推测伪装确定性 |\n\n### 4. 金融数据的精确性\n\nLLM心算不可靠。PE算错一个小数点、市值单位搞混港币和人民币，就可能导致错误的投资决策。\n\n**真实案例**：分析腾讯时，不同来源的市值数据有\"港币亿\"和\"人民币亿\"两种单位。AI Berkshire 的处理方式：\n\n```bash\n# 市值手算校验：股价 × 总股本，与报告数据对比\npython3 tools/financial_rigor.py verify-market-cap \\\n  --price 510 --shares 9.11e9 --reported 4.65e12 --currency HKD\n# ✅ 验证通过, 偏差仅 0.08%\n```\n\n所有计算使用 Python `decimal.Decimal`（精确十进制），不用 `float`。关键数据至少2个独立来源交叉验证。\n\n### 5. 可复现的研究流程\n\n直接问AI，每次输出的格式、深度、覆盖面都不一样——今天分析腾讯有护城河评分，明天分析美团可能就忘了。\n\nAI Berkshire 确保：**同样的输入 → 结构一致、深度一致的输出**。这意味着你可以：\n- 7家公司横向对比，评分标准完全一致\n- 同一家公司半年后重新分析，直接对比变化\n- 团队成员之间的研究结果可以对齐\n\n> 真实输出——7家公司用同一标准 Checklist 筛选：\n>\n> | 公司 | 通过? | 能力圈 | 好生意 | 护城河 | 管理层 | 安全边际 | 综合 |\n> |------|:-----:|:------:|:------:|:------:|:------:|:-------:|:----:|\n> | 茅台 | ✅ 通过 | ★★★★★ | ★★★★★ | ★★★★★ | ★★★☆☆ | ★★★★☆ | 4.7 |\n> | 腾讯 | ✅ 通过 | ★★★★☆ | ★★★★★ | ★★★★★ | ★★★★★ | ★★★★☆ | 4.7 |\n> | 英伟达 | ✅ 有条件 | ★★★★☆ | ★★★★★ | ★★★★★ | ★★★★★ | ★★★☆☆ | 4.3 |\n> | 美团 | ✅ 有条件 | ★★★★☆ | ★★★★☆ | ★★★★☆ | ★★★★☆ | ★★★★☆ | 4.0 |\n> | 快手 | ✅ 有条件 | ★★★☆☆ | ★★★★☆ | ★★★★☆ | ★★★★☆ | ★★★★★ | 4.0 |\n> | 拼多多 | ❓ 灰色 | ★★★★☆ | ★★★★☆ | ★★★☆☆ | ★★★☆☆ | ★★★★★ | 3.8 |\n> | 泡泡玛特 | ❓ 灰色 | ★★★☆☆ | ★★★★☆ | ★★★★☆ | ★★★★★ | ★★★☆☆ | 3.7 |\n\n### 6. 多Agent并行 = 研究深度的倍增\n\n`/investment-team` 启动4个独立Agent**同时**研究一家公司。每个Agent各自搜索网络、交叉验证数据、独立给出结论。这不是把一个prompt拆成四段——是4个\"分析师\"各自做了完整的研究，Team Lead再综合。\n\n一个人直接问AI，上下文窗口是一个。4个Agent并行，等于4倍的搜索量、4倍的信息源、4个独立视角。\n\n```\n┌─────────────────────────────────────────────┐\n│              Team Lead (你)                  │\n│         统筹协调 · 汇总研判                  │\n├──────┬──────┬──────────┬───────────┤\n│ Agent 1    │ Agent 2    │ Agent 3        │ Agent 4         │\n│ 商业模式   │ 财务估值    │ 行业竞争       │ 风险管理层       │\n│ 段永平视角 │ 巴菲特视角  │ 芒格视角       │ 李录视角         │\n└──────┴──────┴──────────┴───────────┘\n        ↓ 并行研究，实时汇报进度 ↓\n              最终综合报告\n```\n\n### 一句话总结\n\n> **普通人问AI得到的是\"看起来对的分析\"，用 AI Berkshire 得到的是\"可以拿来做决策的投研报告\"。**\n\n---\n\n## 整体架构\n\n<p align=\"center\">\n  <img src=\"assets/architecture.png\" alt=\"AI Berkshire 整体架构\" width=\"600\" />\n</p>\n\n> 图源：[`assets/architecture.mmd`](assets/architecture.mmd)（Mermaid 可编辑源码）\n\n**三层设计哲学**：\n- **Skill 层**：把\"你要做什么\"抽象成 16 个明确入口——深度研究、财报分析、行业筛选、持仓管理、思维工具，按场景选用\n- **Agent 层**：每个 skill 内部都是 4 个 Agent 并行——它们各自独立搜索、独立判断、互相挑战，最后由 Team Lead 综合\n- **工具层**：精确计算、实时检索、报告抽检——保证每份报告的数据严谨性可验证\n\n---\n\n## Skills 一览（16个）\n\n### 🔬 深度研究类\n\n| Skill | 用途 | 适合场景 |\n|-------|------|---------|\n| [`/investment-research`](skills/investment-research.md) | 四大师综合深度分析 | 对一家上市公司进行全方位投资研究 |\n| [`/investment-team`](skills/investment-team.md) | 多Agent并行投研团队 | 4个Agent并行研究，最快速、最全面 |\n| [`/management-deep-dive`](skills/management-deep-dive.md) | 管理层纵深研究 | \"买股票就是买人\"——当管理层是核心变量时深挖 |\n| [`/private-company-research`](skills/private-company-research.md) | 未上市公司深度研究 | 研究蚂蚁、SpaceX等信息稀缺的未上市公司 |\n| [`/deep-company-series`](skills/deep-company-series.md) | 8篇长文系列拆一家公司 | 公众号级深度系列，12万字从认知重置到决策闭环 |\n\n### 📊 财报分析类\n\n| Skill | 用途 | 适合场景 |\n|-------|------|---------|\n| [`/earnings-review`](skills/earnings-review.md) | 财报精读（一手资料） | 只读原始财报，不依赖二手研报，像巴菲特一样读年报 |\n| [`/earnings-team`](skills/earnings-team.md) | 财报精读团队 + 公众号发布 | 四大师并行解读财报 → 编辑润色 → 读者评审 → 可发布文章 |\n\n### 🏭 行业筛选类\n\n| Skill | 用途 | 适合场景 |\n|-------|------|---------|\n| [`/industry-research`](skills/industry-research.md) | 产业链全景扫描 | 研究一个行业的全部投资机会（按产业链环节切片） |\n| [`/industry-funnel`](skills/industry-funnel.md) | 行业漏斗筛选 | 全市场 → 粗筛 ≤10 家 → 终选 3 家深度分析 |\n| [`/quality-screen`](skills/quality-screen.md) | 去劣筛选（7条硬指标） | 快速排除非一流公司，支持个股/行业/指数/主题批量筛 |\n| [`/investment-checklist`](skills/investment-checklist.md) | 巴菲特买入前 Checklist | 六关快速筛选，10分钟决定是否值得深入 |\n\n### 📈 持仓管理类\n\n| Skill | 用途 | 适合场景 |\n|-------|------|---------|\n| [`/portfolio-review`](skills/portfolio-review.md) | 组合管理与优化 | 从\"研究公司\"升级到\"管理组合\"——仓位、集中度、再平衡 |\n| [`/thesis-tracker`](skills/thesis-tracker.md) | 投资论文追踪 | 买入后的纪律系统：持续跟踪论文是否被证伪 |\n| [`/news-pulse`](skills/news-pulse.md) | 股价异动快速归因 | 股价大涨/大跌时10分钟搞清\"发生了什么\" |\n\n### 🧠 思维工具类\n\n| Skill | 用途 | 适合场景 |\n|-------|------|---------|\n| [`/dyp-ask`](skills/dyp-ask.md) | 段永平问答 | 以段永平的方式思考任何问题——商业、投资、人生 |\n| [`/financial-data`](skills/financial-data.md) | 财务数据获取与交叉验证规范 | 确保关键数据来自2个独立来源，误差>1%告警 |\n\n---\n\n## 快速开始\n\n### 1. 安装 Claude Code\n\n```bash\nnpm install -g @anthropic-ai/claude-code\n```\n\n### 2. 安装 Skills\n\n将 `skills/` 目录下的 `.md` 文件复制到你的 Claude Code commands 目录：\n\n```bash\n# 克隆仓库\ngit clone https://github.com/xbtlin/ai-berkshire.git\n\n# 复制 skills 到 Claude Code 全局 commands 目录\ncp ai-berkshire/skills/*.md ~/.claude/commands/\n```\n\n### 3. 使用\n\n在 Claude Code 中直接调用：\n\n```bash\n# 深度研究\n/investment-research 腾讯\n/investment-team 美团\n/management-deep-dive 王兴 美团\n/private-company-research SpaceX\n/deep-company-series 拼多多\n\n# 财报分析\n/earnings-review 腾讯 2025Q4\n/earnings-team PDD 2025年报\n\n# 行业筛选\n/industry-research 核电\n/industry-funnel AI算力\n/quality-screen 恒生指数成分股\n/investment-checklist 茅台, 英伟达, 苹果\n\n# 持仓管理\n/portfolio-review 腾讯30%, 美团20%, 茅台20%, 现金30%\n/thesis-tracker 拼多多\n/news-pulse 腾讯\n\n# 思维工具\n/dyp-ask 拼多多的护城河到底在哪里？\n```\n\n---\n\n## 各 Skill 详细介绍\n\n### 1. `/investment-research` — 四大师综合分析\n\n最全面的单公司深度研究框架。按七个模块顺序执行：\n\n```\n数据收集 → 生意本质(段永平) → 护城河(巴菲特) → 逆向思考(芒格)\n    → 管理层评估(段永平+巴菲特) → 文明趋势(李录) → 估值与安全边际\n```\n\n**核心特色**：\n- AI研究偏见自觉机制（A/B/C级信息丰富度评级）\n- 关键数据多源交叉验证（市值手算校验、至少2个独立来源）\n- 四位大师的\"追问\"贯穿全文\n- 三情景估值（乐观/中性/悲观）+ 反向DCF\n\n**输出示例摘录**：\n\n> #### 综合决策备忘录\n>\n> | 维度 | 结论 | 信心度 |\n> |------|------|--------|\n> | 生意质量（段永平） | 极佳：平台型生意，双边网络效应，边际成本趋零 | ★★★★★ |\n> | 护城河（巴菲特） | 宽阔且在变宽：网络效应+转换成本+规模效应三重叠加 | ★★★★☆ |\n> | 管理层（段永平+巴菲特） | 优秀：创始人掌舵，资本配置纪律强 | ★★★★☆ |\n> | 最大风险（芒格） | 监管政策不确定性，新业务亏损拖累整体利润 | ★★★☆☆ |\n> | 文明趋势（李录） | 顺应数字化消费趋势，但非\"文明级范式转移\" | ★★★★☆ |\n> | 估值（巴菲特+段永平） | 当前PE 18x，处于历史中位数偏低，有一定安全边际 | ★★★★☆ |\n>\n> **段永平**：\"这门生意的本质是连接消费者和商家，赚的是效率提升的钱。好生意的标志是：用户越多，商家越多；商家越多，用户越多。飞轮一旦转起来，很难停下。\"\n>\n> **芒格**：\"反过来想——如果这家公司明天消失，用户和商家会怎么办？如果答案是'很快找到替代品'，那护城河就不够深。如果答案是'生活会变得非常不方便'，那就值得关注。\"\n\n---\n\n### 2. `/investment-team` — 多Agent投研团队\n\n启动4个AI Agent并行研究，模拟真实投研团队协作。每个Agent独立搜索、独立分析、独立给出评分，最后由Team Lead综合研判。\n\n**输出示例摘录**：\n\n> #### 一句话结论\n> 美团是中国本地生活服务的绝对龙头，拥有多重网络效应护城河，当前估值处于历史较低水平，长期投资价值显著，建议逢低建仓。\n>\n> #### 四维评分总表\n>\n> | 维度 | 框架 | 评分 | 核心判断 |\n> |------|------|------|----------|\n> | 商业模式 & 护城河 | 段永平 | ★★★★☆ | 双边网络效应强劲，外卖+到店形成飞轮 |\n> | 财务 & 估值 | 巴菲特 | ★★★★☆ | 核心业务利润率持续改善，估值处于历史低位 |\n> | 行业 & 竞争 | 芒格 | ★★★☆☆ | 抖音入侵到店业务，竞争格局有恶化风险 |\n> | 风险 & 管理层 | 李录 | ★★★★☆ | 王兴战略眼光出色，但新业务烧钱需警惕 |\n>\n> **综合评分：3.8 / 5**\n>\n> #### 投资建议\n>\n> | 策略 | 建议 | 价格区间(港元) |\n> |------|------|---------------|\n> | 激进型 | 当前价位可建仓30% | 120-140 |\n> | 稳健型 | 等回调至100-110建仓 | 100-120 |\n> | 保守型 | 等待季报验证利润率趋势后再介入 | <100 |\n\n---\n\n### 3. `/investment-checklist` — 巴菲特买入前 Checklist\n\n六关快速筛选，帮你在10分钟内决定一家公司是否值得深入研究：\n\n```\n第一关：能力圈（我能理解吗？）\n    ↓ 通过\n第二关：好生意（经济特征如何？）\n    ↓ 通过\n第三关：护城河（竞争优势深不深？）\n    ↓ 通过\n第四关：管理层（值得信任吗？）\n    ↓ 通过\n第五关：安全边际（价格便宜吗？）\n    ↓ 通过\n第六关：决策纪律（是理性还是FOMO？）\n    ↓ 通过\n   ✅ 镜子测试\n```\n\n**支持多公司对比**——一次筛选多个标的：\n\n```\n/investment-checklist 腾讯, 阿里巴巴, 美团, 拼多多\n```\n\n**输出示例摘录**：\n\n> #### 镜子测试\n>\n> \"我以 380港元 买入 腾讯，因为：\n> 1. 这门生意的本质是**社交网络+数字内容平台**，我理解它；\n> 2. 它的护城河是**12亿用户的社交关系链**，而且在变宽；\n> 3. 管理层**Pony Ma低调务实、资本配置优秀**，值得信赖；\n> 4. 当前价格相当于内在价值的**8折**，有一定安全边际；\n> 5. 即使我错了，下行风险可控，因为**账上净现金超2000亿、游戏现金流强劲**。\"\n>\n> ✅ 通过镜子测试\n>\n> **5句话说不完整 = 不买。没有例外。**\n\n---\n\n### 4. `/industry-research` — 产业链全景扫描\n\n从一个投资主题出发，完成产业链全景研究：\n\n```\n投资逻辑链构建 → 产业链全景图 → 全球上市公司扫描\n    → 各环节头部公司四大师分析 → 投资组合配置建议\n```\n\n**输出示例摘录**：\n\n> #### 投资逻辑链：核电\n>\n> 底层趋势：AI数据中心电力需求爆发 + 碳中和目标\n> → 导致：稳定清洁基荷电源需求激增\n> → 创造：核电重启/新建/SMR的确定性需求\n> → 受益：铀矿 → 燃料加工 → 设备制造 → 运营商\n>\n> #### 推荐组合\n>\n> | 层级 | 仓位 | 标的 | 环节 | 核心逻辑 |\n> |------|------|------|------|---------|\n> | 核心 | 50% | 中国广核(CGN)、Cameco | 运营+铀矿 | 确定性最高 |\n> | 卫星 | 30% | 中国核电、东方电气 | 运营+设备 | 国产替代受益 |\n> | 期权 | 15% | NuScale、Nano Nuclear | SMR | 高风险高弹性 |\n> | ETF | 替代 | URA、URNM | 全链 | 懒人方案 |\n\n---\n\n### 5. `/industry-funnel` — 行业漏斗筛选\n\n从一个行业/方向出发，**全市场 → ≤10 家 → 3 家**逐层精选：\n\n```\n全市场扫描（活跃度 + 涨幅 + 市值前 30 并集，30-60 家）\n    ↓ 价值投资 5 条硬指标\n粗筛 ≤ 10 家\n    ↓ 精细分析（每家 300-500 字）\n精细分析 ≤ 10 家\n    ↓ 终选（按组合互补性，不按打分前 3）\n四大师深度分析 3 家（每家 800-1200 字）\n    ↓\n推荐组合（核心 / 卫星 / 期权）+ 操作信号\n```\n\n**核心特色**：\n- 每层都有明确留/弃标准，被淘汰的标的留下淘汰理由（不是黑箱）\n- 终选 3 家按\"组合互补性\"选（高确定性 + 中等弹性 + 高弹性），不按打分前 3 排序\n- 强制列\"未来 IPO 候选\"，避免漏掉一级市场核心玩家\n- AI 偏见自觉机制：应对龙头偏好 / 英文偏好 / 故事偏好 / 上市偏好\n\n**与 `/industry-research` 的区别**：\n- `industry-research` 偏重产业链结构与全景（按环节切片）\n- `industry-funnel` 偏重个股筛选漏斗（从全市场逐层精选到 3 家）\n\n**实测：AI 行业 4 子赛道并行（2026-05-09）**：\n\n| 子赛道 | 终选 3 家 | 核心仓位推荐 |\n|-------|---------|------------|\n| AI 算力 | TSMC / NVIDIA / SK Hynix | TSMC ★★★★★ |\n| AI 模型 | Alphabet / Meta / 阿里巴巴 | Alphabet ★★★★★ |\n| AI 应用 | 微软 / Adobe / AppLovin | 微软 + Adobe ★★★★ |\n| AI 基建电力 | Eaton / 特变电工 / Talen Energy | Eaton + 特变电工 ★★★★ |\n\n**关键发现**：AI 应用层最大赢家不是 AI Native 公司，而是有渠道+数据+工作流嵌入度的成熟巨头——这呼应了 1995-2000 互联网泡沫\"卖铲子\"的历史规律（亚马逊和苹果赢，Pets.com 输）。\n\n完整报告：[AI 算力](reports/AI算力-funnel-20260509.md) · [AI 模型](reports/AI模型-funnel-20260509.md) · [AI 应用](reports/AI应用-funnel-20260509.md) · [AI 基建电力](reports/AI基建电力-funnel-20260509.md)\n\n---\n\n### 6. `/private-company-research` — 未上市公司深度研究\n\n专为信息稀缺的未上市公司设计的\"侦探式\"研究框架：\n\n**核心差异化**：\n- **财务数据拼凑**：从招股书、母公司财报、融资新闻、行业数据多源拼凑\n- **置信度标注**：每个数据点标注 🟢高 / 🟡中 / 🔴低 置信度\n- **多方法估值交叉**：融资估值法 + 可比公司法 + DCF + 终局倒推法\n- **退出路径分析**：IPO/并购/二级转让全路径评估\n\n**输出示例摘录**：\n\n> #### 公司画像速览：SpaceX\n>\n> | 项目 | 内容 |\n> |------|------|\n> | 最新估值 | ~$350B (2025年二级市场) 🟡 |\n> | 推算收入 | ~$130亿 (2024年) 🟡 |\n> | Starlink用户 | 400万+ (2024年底) 🟢 |\n> | 发射次数 | 100+ 次/年 (2024年) 🟢 |\n>\n> #### 估值判断\n>\n> | 方法 | 估值区间 | 说明 |\n> |------|---------|------|\n> | 最近融资 | $350B | 二级市场报价，有流动性溢价 |\n> | 可比公司法 | $200-280B | 对标电信+航天+国防 |\n> | DCF(中性) | $250-350B | 假设Starlink 2027年$300亿收入 |\n> | 终局倒推 | $400-600B | 假设星链成为全球电信基础设施 |\n>\n> **综合合理估值区间：$250B - $400B**\n\n---\n\n### 7. `/news-pulse` — 股价异动新闻归因\n\n专为\"股价大涨/大跌时快速搞清发生了什么\"设计的情报响应 Skill。**不是深度投研，是 10-15 分钟的快速归因**——避免持仓异动时陷入小作文焦虑或盲目止损。\n\n**核心差异化**：\n- **4 维并行侦察**：公司事件 / 监管政策 / 行业对手 / 市场情绪（卖方+大V+南向资金）\n- **归因优先于罗列**：不是把所有新闻列一遍，而是判断\"哪个事件配得上这次股价异动\"\n- **强制性质判断**：价值事件 / 情绪波动 / **真因不明** / 混合——其中\"真因不明\"是最有价值的输出（可能存在内幕抢跑）\n- **明确行动建议**：是否触发深度研究、是否需要重审论文、是否仅观察等\n\n**与其他 Skill 的区别**：\n| 场景 | 用什么 |\n|------|------|\n| 完整投研（小时级） | `/investment-team` 或 `/investment-research` |\n| 财报深读 | `/earnings-re",
    "strategic_keywords": [
      "agent",
      "mcp",
      "skill",
      "llm"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 7,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 82
    },
    "strategic_score": 82
  },
  {
    "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": 7321,
    "forks": 447,
    "stars_this_period": 199,
    "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": 23,
      "created_at": "2026-03-27T17:54:33Z",
      "pushed_at": "2026-06-25T17:57:35Z",
      "homepage": "https://herdr.dev",
      "default_branch": "master",
      "forks": 447,
      "watchers": 18,
      "archived": false,
      "size_kb": 29375
    },
    "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": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 91
    },
    "strategic_score": 91
  },
  {
    "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": 19760,
    "forks": 1704,
    "stars_this_period": 196,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [
        "agent",
        "ai",
        "ai-agents",
        "browser-automation",
        "javascript",
        "mcp",
        "typescript",
        "web"
      ],
      "license": "MIT",
      "open_issues": 48,
      "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": 1704,
      "watchers": 59,
      "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": 18,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "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": 23040,
    "forks": 1886,
    "stars_this_period": 195,
    "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": 1886,
      "watchers": 97,
      "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": 16,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 8,
      "relation": 9,
      "risk_signal": 6,
      "total": 78
    },
    "strategic_score": 78
  },
  {
    "owner": "microsoft",
    "name": "vscode",
    "full_name": "microsoft/vscode",
    "url": "https://github.com/microsoft/vscode",
    "description": "Visual Studio Code",
    "language": "TypeScript",
    "total_stars": 186763,
    "forks": 40647,
    "stars_this_period": 192,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "editor",
        "electron",
        "microsoft",
        "typescript",
        "visual-studio-code"
      ],
      "license": "MIT",
      "open_issues": 18768,
      "created_at": "2015-09-03T20:23:38Z",
      "pushed_at": "2026-06-25T22:02:35Z",
      "homepage": "https://code.visualstudio.com",
      "default_branch": "main",
      "forks": 40647,
      "watchers": 3517,
      "archived": false,
      "size_kb": 1307217
    },
    "readme_content": "# Visual Studio Code - Open Source (\"Code - OSS\")\n[![Feature Requests](https://img.shields.io/github/issues/microsoft/vscode/feature-request.svg)](https://github.com/microsoft/vscode/issues?q=is%3Aopen+is%3Aissue+label%3Afeature-request+sort%3Areactions-%2B1-desc)\n[![Bugs](https://img.shields.io/github/issues/microsoft/vscode/bug.svg)](https://github.com/microsoft/vscode/issues?utf8=✓&q=is%3Aissue+is%3Aopen+label%3Abug)\n[![Gitter](https://img.shields.io/badge/chat-on%20gitter-yellow.svg)](https://gitter.im/Microsoft/vscode)\n\n## The Repository\n\nThis repository (\"`Code - OSS`\") is where we (Microsoft) develop the [Visual Studio Code](https://code.visualstudio.com) product together with the community. Not only do we work on code and issues here, but we also publish our [roadmap](https://github.com/microsoft/vscode/wiki/Roadmap), [monthly iteration plans](https://github.com/microsoft/vscode/wiki/Iteration-Plans), and our [endgame plans](https://github.com/microsoft/vscode/wiki/Running-the-Endgame). This source code is available to everyone under the standard [MIT license](https://github.com/microsoft/vscode/blob/main/LICENSE.txt).\n\n## Visual Studio Code\n\n<p align=\"center\">\n  <img alt=\"VS Code in action\" src=\"https://github.com/user-attachments/assets/56af271c-949d-454c-a3ea-16188c063414\">\n</p>\n\n[Visual Studio Code](https://code.visualstudio.com) is a distribution of the `Code - OSS` repository with Microsoft-specific customizations released under a traditional [Microsoft product license](https://code.visualstudio.com/License/).\n\n[Visual Studio Code](https://code.visualstudio.com) combines the simplicity of a code editor with what developers need for their core edit-build-debug cycle. It provides comprehensive code editing, navigation, and understanding support along with lightweight debugging, a rich extensibility model, and lightweight integration with existing tools.\n\nVisual Studio Code is updated monthly with new features and bug fixes. You can download it for Windows, macOS, and Linux on [Visual Studio Code's website](https://code.visualstudio.com/Download). To get the latest releases every day, install the [Insiders build](https://code.visualstudio.com/insiders).\n\n## Contributing\n\nThere are many ways in which you can participate in this project, for example:\n\n* [Submit bugs and feature requests](https://github.com/microsoft/vscode/issues), and help us verify as they are checked in\n* Review [source code changes](https://github.com/microsoft/vscode/pulls)\n* Review the [documentation](https://github.com/microsoft/vscode-docs) and make pull requests for anything from typos to new content.\n\nIf you are interested in fixing issues and contributing directly to the code base,\nplease see the document [How to Contribute](https://github.com/microsoft/vscode/wiki/How-to-Contribute), which covers the following:\n\n* [How to build and run from source](https://github.com/microsoft/vscode/wiki/How-to-Contribute)\n* [The development workflow, including debugging and running tests](https://github.com/microsoft/vscode/wiki/How-to-Contribute#debugging)\n* [Coding guidelines](https://github.com/microsoft/vscode/wiki/Coding-Guidelines)\n* [Submitting pull requests](https://github.com/microsoft/vscode/wiki/How-to-Contribute#pull-requests)\n* [Finding an issue to work on](https://github.com/microsoft/vscode/wiki/How-to-Contribute#where-to-contribute)\n* [Contributing to translations](https://aka.ms/vscodeloc)\n\n## Feedback\n\n* Ask a question on [Stack Overflow](https://stackoverflow.com/questions/tagged/vscode)\n* [Request a new feature](CONTRIBUTING.md)\n* Upvote [popular feature requests](https://github.com/microsoft/vscode/issues?q=is%3Aopen+is%3Aissue+label%3Afeature-request+sort%3Areactions-%2B1-desc)\n* [File an issue](https://github.com/microsoft/vscode/issues)\n* Connect with the extension author community on [GitHub Discussions](https://github.com/microsoft/vscode-discussions/discussions) or [Slack](https://aka.ms/vscode-dev-community)\n* Follow [@code](https://x.com/code) and let us know what you think!\n\nSee our [wiki](https://github.com/microsoft/vscode/wiki/Feedback-Channels) for a description of each of these channels and information on some other available community-driven channels.\n\n## Related Projects\n\nMany of the core components and extensions to VS Code live in their own repositories on GitHub. For example, the [node debug adapter](https://github.com/microsoft/vscode-node-debug) and the [mono debug adapter](https://github.com/microsoft/vscode-mono-debug) repositories are separate from each other. For a complete list, please visit the [Related Projects](https://github.com/microsoft/vscode/wiki/Related-Projects) page on our [wiki](https://github.com/microsoft/vscode/wiki).\n\n## Bundled Extensions\n\nVS Code includes a set of built-in extensions located in the [extensions](extensions) folder, including grammars and snippets for many languages. Extensions that provide rich language support (inline suggestions, Go to Definition) for a language have the suffix `language-features`. For example, the `json` extension provides coloring for `JSON` and the `json-language-features` extension provides rich language support for `JSON`.\n\n## Development Container\n\nThis repository includes a Visual Studio Code Dev Containers / GitHub Codespaces development container.\n\n* For [Dev Containers](https://aka.ms/vscode-remote/download/containers), use the **Dev Containers: Clone Repository in Container Volume...** command which creates a Docker volume for better disk I/O on macOS and Windows.\n  * If you already have VS Code and Docker installed, you can also click [here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode) to get started. This will cause VS Code to automatically install the Dev Containers extension if needed, clone the source code into a container volume, and spin up a dev container for use.\n\n* For Codespaces, install the [GitHub Codespaces](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces) extension in VS Code, and use the **Codespaces: Create New Codespace** command.\n\nDocker / the Codespace should have at least **4 cores and 6 GB of RAM (8 GB recommended)** to run a full build. See the [development container README](.devcontainer/README.md) for more information.\n\n## Code of Conduct\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n\n## License\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nLicensed under the [MIT](LICENSE.txt) license.\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"code-oss-dev\",\n  \"version\": \"1.127.0\",\n  \"distro\": \"7abf39b86c07d094722a4b3ec9f37e78fe3d5db3\",\n  \"author\": {\n    \"name\": \"Microsoft Corporation\"\n  },\n  \"license\": \"MIT\",\n  \"main\": \"./out/main.js\",\n  \"type\": \"module\",\n  \"private\": true,\n  \"scripts\": {\n    \"test\": \"echo Please run any of the test scripts from the scripts folder.\",\n    \"test-browser\": \"npx playwright install && node test/unit/browser/index.js\",\n    \"test-browser-no-install\": \"node test/unit/browser/index.js\",\n    \"test-node\": \"mocha test/unit/node/index.js --delay --ui=tdd --timeout=5000 --exit\",\n    \"test-extension\": \"vscode-test\",\n    \"test-build-scripts\": \"cd build && npm run test\",\n    \"check-cyclic-dependencies\": \"node build/lib/checkCyclicDependencies.ts out\",\n    \"preinstall\": \"node build/npm/preinstall.ts\",\n    \"postinstall\": \"node build/npm/postinstall.ts\",\n    \"compile\": \"npm-run-all2 -lp compile-client compile-copilot\",\n    \"compile-client\": \"npm run gulp compile\",\n    \"compile-copilot\": \"npm --prefix extensions/copilot run compile\",\n    \"build-fast\": \"npm-run-all2 -lp transpile-client build-fast-extensions compile-copilot\",\n    \"build-fast-extensions\": \"npm run gulp copy-codicons compile-extensions compile-extension-media\",\n    \"typecheck-client\": \"tsgo --project ./src/tsconfig.json --noEmit --skipLibCheck\",\n    \"codex:gen-protocol\": \"node build/codex/generate-protocol.mjs\",\n    \"watch\": \"npm-run-all2 -lp watch-client-transpile watch-client watch-extensions watch-copilot\",\n    \"watch-transpile\": \"npm-run-all2 -lp watch-client-transpile watch-extensions watch-copilot\",\n    \"watchd\": \"deemon npm run watch\",\n    \"watch-webd\": \"deemon npm run watch-web\",\n    \"kill-watchd\": \"deemon --kill npm run watch\",\n    \"kill-watch-webd\": \"deemon --kill npm run watch-web\",\n    \"restart-watchd\": \"deemon --restart npm run watch\",\n    \"restart-watch-webd\": \"deemon --restart npm run watch-web\",\n    \"watch-client\": \"npm run gulp watch-client\",\n    \"watch-clientd\": \"deemon npm run watch-client\",\n    \"kill-watch-clientd\": \"deemon --kill npm run watch-client\",\n    \"transpile-client\": \"node build/next/index.ts transpile\",\n    \"watch-client-transpile\": \"node build/next/index.ts transpile --watch\",\n    \"watch-client-transpiled\": \"deemon npm run watch-client-transpile\",\n    \"kill-watch-client-transpiled\": \"deemon --kill npm run watch-client-transpile\",\n    \"watch-extensions\": \"npm run gulp watch-extensions watch-extension-media\",\n    \"watch-extensionsd\": \"deemon npm run watch-extensions\",\n    \"kill-watch-extensionsd\": \"deemon --kill npm run watch-extensions\",\n    \"watch-copilot\": \"npm --prefix extensions/copilot run watch\",\n    \"watch-copilotd\": \"deemon npm run watch-copilot\",\n    \"kill-watch-copilotd\": \"deemon --kill npm run watch-copilot\",\n    \"precommit\": \"node --experimental-strip-types build/hygiene.ts\",\n    \"gulp\": \"node --experimental-strip-types --max-old-space-size=8192 ./node_modules/gulp/bin/gulp.js\",\n    \"electron\": \"node build/lib/electron.ts\",\n    \"7z\": \"7z\",\n    \"update-grammars\": \"node build/npm/update-all-grammars.ts\",\n    \"update-localization-extension\": \"node build/npm/update-localization-extension.ts\",\n    \"mixin-telemetry-docs\": \"node build/npm/mixin-telemetry-docs.ts\",\n    \"smoketest\": \"node build/lib/preLaunch.ts && cd test/smoke && npm run compile && node test/index.js\",\n    \"smoketest-no-compile\": \"cd test/smoke && node test/index.js\",\n    \"download-builtin-extensions\": \"node build/lib/builtInExtensions.ts\",\n    \"download-builtin-extensions-cg\": \"node build/lib/builtInExtensionsCG.ts\",\n    \"monaco-compile-check\": \"tsgo --project src/tsconfig.monaco.json --noEmit\",\n    \"tsec-compile-check\": \"node node_modules/tsec/bin/tsec -p src/tsconfig.tsec.json\",\n    \"vscode-dts-compile-check\": \"tsgo --project src/tsconfig.vscode-dts.json && tsgo --project src/tsconfig.vscode-proposed-dts.json\",\n    \"valid-layers-check\": \"node build/checker/layersChecker.ts && tsgo --project build/checker/tsconfig.browser.json && tsgo --project build/checker/tsconfig.worker.json && tsgo --project build/checker/tsconfig.node.json && tsgo --project build/checker/tsconfig.electron-browser.json && tsgo --project build/checker/tsconfig.electron-main.json && tsgo --project build/checker/tsconfig.electron-utility.json\",\n    \"define-class-fields-check\": \"node build/lib/propertyInitOrderChecker.ts && tsgo --project src/tsconfig.defineClassFields.json\",\n    \"update-distro\": \"node build/npm/update-distro.ts\",\n    \"export-policy-data\": \"node build/lib/policies/exportPolicyData.ts\",\n    \"web\": \"echo 'npm run web' is replaced by './scripts/code-server' or './scripts/code-web'\",\n    \"compile-cli\": \"npm run gulp compile-cli\",\n    \"compile-web\": \"npm run gulp compile-web\",\n    \"serve-out-rspack\": \"cd build/rspack && npx rspack serve --config rspack.serve-out.config.mts\",\n    \"watch-web\": \"npm run gulp watch-web\",\n    \"watch-cli\": \"npm run gulp watch-cli\",\n    \"mock-policy-server\": \"node --experimental-strip-types scripts/mock-policy-server/server.ts\",\n    \"eslint\": \"nod",
    "strategic_keywords": [
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 8,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 8,
      "total": 71
    },
    "strategic_score": 71
  },
  {
    "owner": "thedotmack",
    "name": "claude-mem",
    "full_name": "thedotmack/claude-mem",
    "url": "https://github.com/thedotmack/claude-mem",
    "description": "Persistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More",
    "language": "JavaScript",
    "total_stars": 84289,
    "forks": 7271,
    "stars_this_period": 191,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "ai-agents",
        "ai-memory",
        "anthropic",
        "artificial-intelligence",
        "chromadb",
        "claude",
        "claude-agent-sdk",
        "claude-agents",
        "claude-code",
        "claude-code-plugin",
        "claude-skills",
        "embeddings",
        "long-term-memory",
        "mem0",
        "memory-engine",
        "openmemory",
        "rag",
        "sqlite",
        "supermemory"
      ],
      "license": "Apache-2.0",
      "open_issues": 216,
      "created_at": "2025-08-31T20:50:03Z",
      "pushed_at": "2026-06-25T22:02:47Z",
      "homepage": "https://claude-mem.ai",
      "default_branch": "main",
      "forks": 7271,
      "watchers": 281,
      "archived": false,
      "size_kb": 213269
    },
    "readme_content": "<h1 align=\"center\">\n  <br>\n  <a href=\"https://github.com/thedotmack/claude-mem\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/thedotmack/claude-mem/main/docs/public/claude-mem-logo-for-dark-mode.webp\">\n      <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/thedotmack/claude-mem/main/docs/public/claude-mem-logo-for-light-mode.webp\">\n      <img src=\"https://raw.githubusercontent.com/thedotmack/claude-mem/main/docs/public/claude-mem-logo-for-light-mode.webp\" alt=\"Claude-Mem\" width=\"400\">\n    </picture>\n  </a>\n  <br>\n  <a href=\"https://vercel.com/open-source-program\">\n    <img alt=\"Vercel OSS Program\" src=\"https://vercel.com/oss/program-badge-2026.svg\" />\n  </a>\n</h1>\n\n<p align=\"center\">\n  <a href=\"docs/i18n/README.zh.md\">🇨🇳 中文</a> •\n  <a href=\"docs/i18n/README.zh-tw.md\">🇹🇼 繁體中文</a> •\n  <a href=\"docs/i18n/README.ja.md\">🇯🇵 日本語</a> •\n  <a href=\"docs/i18n/README.pt.md\">🇵🇹 Português</a> •\n  <a href=\"docs/i18n/README.pt-br.md\">🇧🇷 Português</a> •\n  <a href=\"docs/i18n/README.ko.md\">🇰🇷 한국어</a> •\n  <a href=\"docs/i18n/README.es.md\">🇪🇸 Español</a> •\n  <a href=\"docs/i18n/README.de.md\">🇩🇪 Deutsch</a> •\n  <a href=\"docs/i18n/README.fr.md\">🇫🇷 Français</a> •\n  <a href=\"docs/i18n/README.he.md\">🇮🇱 עברית</a> •\n  <a href=\"docs/i18n/README.ar.md\">🇸🇦 العربية</a> •\n  <a href=\"docs/i18n/README.ru.md\">🇷🇺 Русский</a> •\n  <a href=\"docs/i18n/README.pl.md\">🇵🇱 Polski</a> •\n  <a href=\"docs/i18n/README.cs.md\">🇨🇿 Čeština</a> •\n  <a href=\"docs/i18n/README.nl.md\">🇳🇱 Nederlands</a> •\n  <a href=\"docs/i18n/README.tr.md\">🇹🇷 Türkçe</a> •\n  <a href=\"docs/i18n/README.uk.md\">🇺🇦 Українська</a> •\n  <a href=\"docs/i18n/README.vi.md\">🇻🇳 Tiếng Việt</a> •\n  <a href=\"docs/i18n/README.tl.md\">🇵🇭 Tagalog</a> •\n  <a href=\"docs/i18n/README.id.md\">🇮🇩 Indonesia</a> •\n  <a href=\"docs/i18n/README.th.md\">🇹🇭 ไทย</a> •\n  <a href=\"docs/i18n/README.hi.md\">🇮🇳 हिन्दी</a> •\n  <a href=\"docs/i18n/README.bn.md\">🇧🇩 বাংলা</a> •\n  <a href=\"docs/i18n/README.ur.md\">🇵🇰 اردو</a> •\n  <a href=\"docs/i18n/README.ro.md\">🇷🇴 Română</a> •\n  <a href=\"docs/i18n/README.sv.md\">🇸🇪 Svenska</a> •\n  <a href=\"docs/i18n/README.it.md\">🇮🇹 Italiano</a> •\n  <a href=\"docs/i18n/README.el.md\">🇬🇷 Ελληνικά</a> •\n  <a href=\"docs/i18n/README.hu.md\">🇭🇺 Magyar</a> •\n  <a href=\"docs/i18n/README.fi.md\">🇫🇮 Suomi</a> •\n  <a href=\"docs/i18n/README.da.md\">🇩🇰 Dansk</a> •\n  <a href=\"docs/i18n/README.no.md\">🇳🇴 Norsk</a>\n</p>\n\n<h4 align=\"center\">Persistent memory compression system built for <a href=\"https://claude.com/claude-code\" target=\"_blank\">Claude Code</a>.</h4>\n\n<p align=\"center\">\n  <a href=\"LICENSE\">\n    <img src=\"https://img.shields.io/badge/License-Apache%202.0-blue.svg\" alt=\"License\">\n  </a>\n  <a href=\"package.json\">\n    <img src=\"https://img.shields.io/badge/version-13.4.0-green.svg\" alt=\"Version\">\n  </a>\n  <a href=\"package.json\">\n    <img src=\"https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg\" alt=\"Node\">\n  </a>\n  <a href=\"https://github.com/thedotmack/awesome-claude-code\">\n    <img src=\"https://awesome.re/mentioned-badge.svg\" alt=\"Mentioned in Awesome Claude Code\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://trendshift.io/repositories/15496\" target=\"_blank\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/thedotmack/claude-mem/main/docs/public/trendshift-badge-dark.svg\">\n      <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/thedotmack/claude-mem/main/docs/public/trendshift-badge.svg\">\n      <img src=\"https://raw.githubusercontent.com/thedotmack/claude-mem/main/docs/public/trendshift-badge.svg\" alt=\"thedotmack/claude-mem | Trendshift\" width=\"250\" height=\"55\"/>\n    </picture>\n  </a>\n</p>\n\n<br>\n\n<table align=\"center\">\n  <tr>\n    <td align=\"center\">\n      <a href=\"https://github.com/thedotmack/claude-mem\">\n        <picture>\n          <img\n            src=\"https://raw.githubusercontent.com/thedotmack/claude-mem/main/docs/public/cm-preview.gif\"\n            alt=\"Claude-Mem Preview\"\n            width=\"500\"\n          >\n        </picture>\n      </a>\n    </td>\n    <td align=\"center\">\n      <a href=\"https://www.star-history.com/#thedotmack/claude-mem&Date\">\n        <picture>\n          <source\n            media=\"(prefers-color-scheme: dark)\"\n            srcset=\"https://api.star-history.com/image?repos=thedotmack/claude-mem&type=date&theme=dark&legend=top-left\"\n          />\n          <source\n            media=\"(prefers-color-scheme: light)\"\n            srcset=\"https://api.star-history.com/image?repos=thedotmack/claude-mem&type=date&legend=top-left\"\n          />\n          <img\n            alt=\"Star History Chart\"\n            src=\"https://api.star-history.com/image?repos=thedotmack/claude-mem&type=date&legend=top-left\"\n            width=\"500\"\n          />\n        </picture>\n      </a>\n    </td>\n  </tr>\n</table>\n\n<p align=\"center\">\n  <a href=\"#quick-start\">Quick Start</a> •\n  <a href=\"#how-it-works\">How It Works</a> •\n  <a href=\"#mcp-search-tools\">Search Tools</a> •\n  <a href=\"#documentation\">Documentation</a> •\n  <a href=\"#configuration\">Configuration</a> •\n  <a href=\"#troubleshooting\">Troubleshooting</a> •\n  <a href=\"#license\">License</a>\n</p>\n\n<p align=\"center\">\n  Claude-Mem seamlessly preserves context across sessions by automatically capturing tool usage observations, generating semantic summaries, and making them available to future sessions. This enables Claude to maintain continuity of knowledge about projects even after sessions end or reconnect.\n</p>\n\n---\n\n## Quick Start\n\nInstall with a single command:\n\n```bash\nnpx claude-mem install\n```\n\nOr install for Gemini CLI (auto-detects `~/.gemini`):\n\n```bash\nnpx claude-mem install --ide gemini-cli\n```\nOr install for OpenCode:\n\n```bash\nnpx claude-mem install --ide opencode\n```\n\nOr install from the plugin marketplace inside Claude Code:\n\n```bash\n/plugin marketplace add thedotmack/claude-mem\n\n/plugin install claude-mem\n```\n\nRestart Claude Code or Gemini CLI. Context from previous sessions will automatically appear in new sessions.\n\n> **Note:** Claude-Mem is also published on npm, but `npm install -g claude-mem` installs the **SDK/library only** — it does not register the plugin hooks or set up the worker service. Always install via `npx claude-mem install` or the `/plugin` commands above.\n\n### 🦞 OpenClaw Gateway\n\nInstall claude-mem as a persistent memory plugin on [OpenClaw](https://openclaw.ai) gateways with a single command:\n\n```bash\ncurl -fsSL https://install.cmem.ai/openclaw.sh | bash\n```\n\nThe installer handles dependencies, plugin setup, AI provider configuration, worker startup, and optional real-time observation feeds to Telegram, Discord, Slack, and more. See the [OpenClaw Integration Guide](https://docs.claude-mem.ai/openclaw-integration) for details.\n\n**Key Features:**\n\n- 🧠 **Persistent Memory** - Context survives across sessions\n- 📊 **Progressive Disclosure** - Layered memory retrieval with token cost visibility\n- 🔍 **Skill-Based Search** - Query your project history with mem-search skill\n- 🖥️ **Web Viewer UI** - Real-time memory stream at http://localhost:37777\n- 💻 **Claude Desktop Skill** - Search memory from Claude Desktop conversations\n- 🔒 **Privacy Control** - Use `<private>` tags to exclude sensitive content from storage\n- ⚙️ **Context Configuration** - Fine-grained control over what context gets injected\n- 🤖 **Automatic Operation** - No manual intervention required\n- 🔗 **Citations** - Reference past observations with IDs (access via http://localhost:37777/api/observation/{id} or view all in the web viewer at http://localhost:37777)\n- 🧪 **Beta Channel** - Try experimental features like Endless Mode via version switching\n\n---\n\n## Documentation\n\n📚 **[View Full Documentation](https://docs.claude-mem.ai/)** - Browse on official website\n\n### Getting Started\n\n- **[Installation Guide](https://docs.claude-mem.ai/installation)** - Quick start & advanced installation\n- **[Gemini CLI Setup](https://docs.claude-mem.ai/gemini-cli/setup)** - Dedicated guide for Google's Gemini CLI integration\n- **[Usage Guide](https://docs.claude-mem.ai/usage/getting-started)** - How Claude-Mem works automatically\n- **[Search Tools](https://docs.claude-mem.ai/usage/search-tools)** - Query your project history with natural language\n- **[Beta Features](https://docs.claude-mem.ai/beta-features)** - Try experimental features like Endless Mode\n\n### Best Practices\n\n- **[Context Engineering](https://docs.claude-mem.ai/context-engineering)** - AI agent context optimization principles\n- **[Progressive Disclosure](https://docs.claude-mem.ai/progressive-disclosure)** - Philosophy behind Claude-Mem's context priming strategy\n\n### Architecture\n\n- **[Overview](https://docs.claude-mem.ai/architecture/overview)** - System components & data flow\n- **[Architecture Evolution](https://docs.claude-mem.ai/architecture-evolution)** - The journey from v3 to v5\n- **[Hooks Architecture](https://docs.claude-mem.ai/hooks-architecture)** - How Claude-Mem uses lifecycle hooks\n- **[Hooks Reference](https://docs.claude-mem.ai/architecture/hooks)** - 7 hook scripts explained\n- **[Worker Service](https://docs.claude-mem.ai/architecture/worker-service)** - HTTP API & Bun management\n- **[Database](https://docs.claude-mem.ai/architecture/database)** - SQLite schema & FTS5 search\n- **[Search Architecture](https://docs.claude-mem.ai/architecture/search-architecture)** - Hybrid search with Chroma vector database\n\n### Configuration & Development\n\n- **[Configuration](https://docs.claude-mem.ai/configuration)** - Environment variables & settings\n- **[Development](https://docs.claude-mem.ai/development)** - Building, testing, contributing\n- **[Troubleshooting](https://docs.claude-mem.ai/troubleshooting)** - Common issues & solutions\n\n---\n\n## How It Works\n\n**Core Components:**\n\n1. **5 Lifecycle Hooks** - SessionStart, UserPromptSubmit, PostToolUse, Stop, SessionEnd (6 hook scripts)\n2. **Smart Install** - Cached dependency checker (pre-hook script, not a lifecycle hook)\n3. **Worker Service** - HTTP API on port 37777 with web viewer UI and 10 search endpoints, managed by Bun\n4. **SQLite Database** - Stores sessions, observations, summaries\n5. **mem-search Skill** - Natural language queries with progressive disclosure\n6. **Chroma Vector Database** - Hybrid semantic + keyword search for intelligent context retrieval\n\nSee [Architecture Overview](https://docs.claude-mem.ai/architecture/overview) for details.\n\n---\n\n## MCP Search Tools\n\nClaude-Mem provides intelligent memory search through **4 MCP tools** following a token-efficient **3-layer workflow pattern**:\n\n**The 3-Layer Workflow:**\n\n1. **`search`** - Get compact index with IDs (~50-100 tokens/result)\n2. **`timeline`** - Get chronological context around interesting results\n3. **`get_observations`** - Fetch full details ONLY for filtered IDs (~500-1,000 tokens/result)\n\n**How It Works:**\n- Claude uses MCP tools to search your memory\n- Start with `search` to get an index of results\n- Use `timeline` to see what was happening around specific observations\n- Use `get_observations` to fetch full details for relevant IDs\n- **~10x token savings** by filtering before fetching details\n\n**Available MCP Tools:**\n\n1. **`search`** - Search memory index with full-text queries, filters by type/date/project\n2. **`timeline`** - Get chronological context around a specific observation or query\n3. **`get_observations`** - Fetch full observation details by IDs (always batch multiple IDs)\n\n**Example Usage:**\n\n```typescript\n// Step 1: Search for index\nsearch(query=\"authentication bug\", type=\"bugfix\", limit=10)\n\n// Step 2: Review index, identify relevant IDs (e.g., #123, #456)\n\n// Step 3: Fetch full details\nget_observations(ids=[123, 456])\n```\n\nSee [Search Tools Guide](https://docs.claude-mem.ai/usage/search-tools) for detailed examples.\n\n---\n\n## Beta Features\n\nClaude-Mem offers a **beta channel** with experimental features like **Endless Mode** (biomimetic memory ",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"claude-mem\",\n  \"version\": \"13.8.1\",\n  \"description\": \"Memory compression system for Claude Code - persist context across sessions\",\n  \"keywords\": [\n    \"claude\",\n    \"claude-code\",\n    \"claude-agent-sdk\",\n    \"mcp\",\n    \"plugin\",\n    \"memory\",\n    \"compression\",\n    \"knowledge-graph\",\n    \"transcript\",\n    \"typescript\",\n    \"nodejs\"\n  ],\n  \"author\": \"Alex Newman\",\n  \"license\": \"Apache-2.0\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/thedotmack/claude-mem.git\"\n  },\n  \"homepage\": \"https://github.com/thedotmack/claude-mem#readme\",\n  \"bugs\": {\n    \"url\": \"https://github.com/thedotmack/claude-mem/issues\"\n  },\n  \"type\": \"module\",\n  \"bin\": {\n    \"claude-mem\": \"./dist/npx-cli/index.js\"\n  },\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.js\"\n    },\n    \"./sdk\": {\n      \"types\": \"./dist/sdk/index.d.ts\",\n      \"import\": \"./dist/sdk/index.js\"\n    },\n    \"./modes/*\": \"./plugin/modes/*\"\n  },\n  \"files\": [\n    \"dist\",\n    \".agents/plugins/marketplace.json\",\n    \".codex-plugin\",\n    \"plugin/.claude-plugin\",\n    \"plugin/.codex-plugin\",\n    \"plugin/.mcp.json\",\n    \"plugin/package.json\",\n    \"plugin/bun.lock\",\n    \"plugin/hooks\",\n    \"plugin/modes\",\n    \"plugin/scripts/*.js\",\n    \"plugin/scripts/*.cjs\",\n    \"plugin/skills\",\n    \"plugin/ui\",\n    \"openclaw\"\n  ],\n  \"engines\": {\n    \"node\": \">=20.12.0\",\n    \"bun\": \">=1.0.0\"\n  },\n  \"scripts\": {\n    \"dev\": \"npm run build-and-sync\",\n    \"build\": \"node scripts/sync-plugin-manifests.js && node scripts/build-hooks.js && node scripts/gen-plugin-lockfile.cjs\",\n    \"build-and-sync\": \"npm run build && npm run sync-marketplace && (cd ~/.claude/plugins/marketplaces/thedotmack && npm run worker:restart)\",\n    \"sync-marketplace\": \"node scripts/sync-marketplace.cjs\",\n    \"sync-marketplace:force\": \"node scripts/sync-marketplace.cjs --force\",\n    \"build:binaries\": \"node scripts/build-worker-binary.js\",\n    \"build:cli-binary\": \"bun build --compile --minify ./src/services/worker-service.ts --outfile plugin/scripts/claude-mem\",\n    \"worker:logs\": \"tail -n 50 ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log\",\n    \"worker:tail\": \"tail -f 50 ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log\",\n    \"changelog:generate\": \"node scripts/generate-changelog.js\",\n    \"discord:notify\": \"node scripts/discord-release-notify.js\",\n    \"worker:start\": \"bun plugin/scripts/worker-service.cjs start\",\n    \"worker:stop\": \"bun plugin/scripts/worker-service.cjs stop\",\n    \"worker:restart\": \"bun plugin/scripts/worker-service.cjs restart\",\n    \"worker:status\": \"bun plugin/scripts/worker-service.cjs status\",\n    \"queue\": \"bun scripts/check-pending-queue.ts\",\n    \"queue:process\": \"bun scripts/check-pending-queue.ts --process\",\n    \"queue:clear:pending\": \"bun scripts/clear-pending-queue.ts --all --force\",\n    \"pr:status\": \"bun scripts/pr-babysit-status.ts\",\n    \"claude-md:regenerate\": \"bun scripts/regenerate-claude-md.ts\",\n    \"claude-md:dry-run\": \"bun scripts/regenerate-claude-md.ts --dry-run\",\n    \"strip-comments\": \"bun scripts/strip-comments.ts\",\n    \"strip-comments:check\": \"bun scripts/strip-comments.ts --check\",\n    \"strip-comments:dry-run\": \"bun scripts/strip-comments.ts --dry-run\",\n    \"translate-readme\": \"bun scripts/translate-readme/cli.ts -v -o docs/i18n README.md\",\n    \"translate:tier1\": \"npm run translate-readme -- zh zh-tw ja pt-br ko es de fr\",\n    \"translate:tier2\": \"npm run translate-readme -- he ar ru pl cs nl tr uk\",\n    \"translate:tier3\": \"npm run translate-readme -- vi id th hi bn ro sv\",\n    \"translate:tier4\": \"npm run translate-readme -- it el hu fi da no\",\n    \"translate:all\": \"npm run translate:tier1 & npm run translate:tier2 & npm run translate:tier3 & npm run translate:tier4 & wait\",\n    \"bug-report\": \"npx tsx scripts/bug-report/cli.ts\",\n    \"cursor:install\": \"bun plugin/scripts/worker-service.cjs cursor install\",\n    \"cursor:uninstall\": \"bun plugin/scripts/worker-service.cjs cursor uninstall\",\n    \"cursor:status\": \"bun plugin/scripts/worker-service.cjs cursor status\",\n    \"cursor:setup\": \"bun plugin/scripts/worker-service.cjs cursor setup\",\n    \"lint:hook-io\": \"node scripts/check-hook-io-discipline.cjs\",\n    \"lint:spawn-env\": \"node scripts/check-spawn-env-discipline.cjs\",\n    \"typecheck\": \"tsc --noEmit && tsc --noEmit -p src/ui/viewer/tsconfig.json\",\n    \"typecheck:root\": \"tsc --noEmit\",\n    \"typecheck:viewer\": \"tsc --noEmit -p src/ui/viewer/tsconfig.json\",\n    \"test\": \"bun test\",\n    \"test:sqlite\": \"bun test tests/sqlite/\",\n    \"test:agents\": \"bun test tests/worker/agents/\",\n    \"test:search\": \"bun test tests/worker/search/\",\n    \"test:context\": \"bun test tests/context/\",\n    \"test:infra\": \"bun test tests/infrastructure/\",\n    \"test:server\": \"bun test tests/server/\",\n    \"e2e:server-beta:docker\": \"bash scripts/e2e-server-beta-docker.sh\",\n    \"check:postinstall-allowlist\": \"node scripts/check-postinstall-allowlist.js\",\n    \"smoke:clean-room\": \"node scripts/smoke-clean-room.cjs\",\n    \"prepublishOnly\": \"npm run build && node ",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "rag",
      "skill",
      "embedding"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "owner": "vercel",
    "name": "next.js",
    "full_name": "vercel/next.js",
    "url": "https://github.com/vercel/next.js",
    "description": "The React Framework",
    "language": "JavaScript",
    "total_stars": 140215,
    "forks": 31258,
    "stars_this_period": 176,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "blog",
        "browser",
        "compiler",
        "components",
        "hybrid",
        "nextjs",
        "node",
        "react",
        "server-rendering",
        "ssg",
        "static",
        "static-site-generator",
        "universal",
        "vercel"
      ],
      "license": "MIT",
      "open_issues": 4127,
      "created_at": "2016-10-05T23:32:51Z",
      "pushed_at": "2026-06-25T21:58:27Z",
      "homepage": "https://nextjs.org",
      "default_branch": "canary",
      "forks": 31258,
      "watchers": 1649,
      "archived": false,
      "size_kb": 2498051
    },
    "readme_content": "packages/next/README.md",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"nextjs-project\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"workspaces\": [\n    \"packages/*\"\n  ],\n  \"scripts\": {\n    \"new-error\": \"turbo gen error\",\n    \"new-test\": \"turbo gen test\",\n    \"clean\": \"lerna clean -y && lerna run clean && lerna exec 'node ../../scripts/rm.mjs dist'\",\n    \"build\": \"turbo run build --remote-cache-timeout 60 --summarize true\",\n    \"build-all\": \"turbo run build build-native-auto --remote-cache-timeout 60 --summarize true\",\n    \"lerna\": \"lerna\",\n    \"dev\": \"turbo run dev --parallel --filter=\\\"!@next/bundle-analyzer-ui\\\"\",\n    \"bench:render-pipeline\": \"tsx bench/render-pipeline/benchmark.ts\",\n    \"bench:render-pipeline:analyze\": \"tsx bench/render-pipeline/analyze-profiles.ts\",\n    \"pack-next\": \"tsx scripts/pack-next.ts\",\n    \"eval\": \"node run-evals.js\",\n    \"test-types\": \"tsc\",\n    \"test-unit\": \"jest test/unit/ packages/next/ packages/font\",\n    \"test-dev\": \"scripts/run-jest.sh --mode=dev --bundler=webpack --headless --\",\n    \"test-dev-webpack\": \"scripts/run-jest.sh --mode=dev --bundler=webpack --headless --\",\n    \"test-dev-experimental\": \"scripts/run-jest.sh --mode=dev --bundler=webpack --experimental --headless --\",\n    \"test-dev-experimental-webpack\": \"scripts/run-jest.sh --mode=dev --bundler=webpack --experimental --headless --\",\n    \"test-dev-rspack\": \"scripts/run-jest.sh --mode=dev --bundler=rspack --headless --\",\n    \"test-dev-experimental-rspack\": \"scripts/run-jest.sh --mode=dev --bundler=rspack --experimental --headless --\",\n    \"test-dev-turbo\": \"scripts/run-jest.sh --mode=dev --bundler=turbo --headless --\",\n    \"test-dev-experimental-turbo\": \"scripts/run-jest.sh --mode=dev --bundler=turbo --experimental --headless --\",\n    \"test-start\": \"scripts/run-jest.sh --mode=start --bundler=webpack --headless --\",\n    \"test-start-webpack\": \"scripts/run-jest.sh --mode=start --bundler=webpack --headless --\",\n    \"test-start-experimental\": \"scripts/run-jest.sh --mode=start --bundler=webpack --experimental --headless --\",\n    \"test-start-experimental-webpack\": \"scripts/run-jest.sh --mode=start --bundler=webpack --experimental --headless --\",\n    \"test-start-rspack\": \"scripts/run-jest.sh --mode=start --bundler=rspack --headless --\",\n    \"test-start-experimental-rspack\": \"scripts/run-jest.sh --mode=start --bundler=rspack --experimental --headless --\",\n    \"test-start-turbo\": \"scripts/run-jest.sh --mode=start --bundler=turbo --headless --\",\n    \"test-start-experimental-turbo\": \"scripts/run-jest.sh --mode=start --bundler=turbo --experimental --headless --\",\n    \"test-deploy\": \"scripts/run-jest.sh --mode=deploy --bundler=webpack --headless --\",\n    \"test-deploy-webpack\": \"scripts/run-jest.sh --mode=deploy --bundler=webpack --headless --\",\n    \"test-deploy-turbo\": \"scripts/run-jest.sh --mode=deploy --bundler=turbo --headless --\",\n    \"testonly-dev\": \"scripts/run-jest.sh --mode=dev --bundler=webpack --\",\n    \"testonly-dev-webpack\": \"scripts/run-jest.sh --mode=dev --bundler=webpack --\",\n    \"testonly-dev-rspack\": \"scripts/run-jest.sh --mode=dev --bundler=rspack --\",\n    \"testonly-dev-turbo\": \"scripts/run-jest.sh --mode=dev --bundler=turbo --\",\n    \"testonly-start\": \"scripts/run-jest.sh --mode=start --bundler=webpack --\",\n    \"testonly-start-webpack\": \"scripts/run-jest.sh --mode=start --bundler=webpack --\",\n    \"testonly-start-rspack\": \"scripts/run-jest.sh --mode=start --bundler=rspack --\",\n    \"testonly-start-turbo\": \"scripts/run-jest.sh --mode=start --bundler=turbo --\",\n    \"testonly-deploy\": \"scripts/run-jest.sh --mode=deploy --bundler=webpack --\",\n    \"testonly-deploy-webpack\": \"scripts/run-jest.sh --mode=deploy --bundler=webpack --\",\n    \"testonly-deploy-turbo\": \"scripts/run-jest.sh --mode=deploy --bundler=turbo --\",\n    \"test\": \"scripts/run-jest.sh --bundler=webpack --headless --\",\n    \"test-webpack\": \"scripts/run-jest.sh --bundler=webpack --headless --\",\n    \"test-rspack\": \"scripts/run-jest.sh --bundler=rspack --headless --\",\n    \"test-turbo\": \"scripts/run-jest.sh --bundler=turbo --headless --\",\n    \"testonly\": \"jest --runInBand\",\n    \"testheadless\": \"scripts/run-jest.sh --headless --\",\n    \"genstats\": \"cross-env LOCAL_STATS=true node .github/actions/next-stats-action/src/index.js\",\n    \"git-reset\": \"git reset --hard HEAD\",\n    \"git-clean\": \"git clean -d -x -e node_modules -e packages -f\",\n    \"typescript\": \"tsc --noEmit\",\n    \"lint-typescript\": \"turbo run typescript\",\n    \"lint-eslint\": \"eslint --config eslint.cli.config.mjs\",\n    \"lint-ast-grep\": \"ast-grep scan\",\n    \"lint-no-typescript\": \"cross-env NODE_OPTIONS=\\\"--max-old-space-size=8192\\\" run-p prettier-check \\\"lint-eslint .\\\" lint-language\",\n    \"types-and-precompiled\": \"run-p \\\"lint-typescript --log-order=stream\\\" check-compiler-fixtures types:test-lib && pnpm check-precompiled\",\n    \"check-compiler-fixtures\": \"find crates/next-custom-transforms/tests/fixture -type f -name 'tsconfig.json' -print0 | xargs --null -I'{}' pnpm tsc --noEmit --project '{}'\",\n    \"validate-externals-doc\": \"node ./scripts/validate-externals-doc.",
    "strategic_keywords": [
      "workspace",
      "eval"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 16,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 80
    },
    "strategic_score": 80
  },
  {
    "owner": "QuantumNous",
    "name": "new-api",
    "full_name": "QuantumNous/new-api",
    "url": "https://github.com/QuantumNous/new-api",
    "description": "A unified AI model hub for aggregation & distribution. It supports cross-converting various LLMs into OpenAI-compatible, Claude-compatible, or Gemini-compatible formats. A centralized gateway for personal and enterprise model management. 🍥",
    "language": "Go",
    "total_stars": 40102,
    "forks": 9177,
    "stars_this_period": 172,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "ai-gateway",
        "claude",
        "deepseek",
        "gemini",
        "newapi",
        "openai",
        "rerank"
      ],
      "license": "AGPL-3.0",
      "open_issues": 886,
      "created_at": "2023-11-10T19:33:36Z",
      "pushed_at": "2026-06-25T13:47:38Z",
      "homepage": "https://www.newapi.ai",
      "default_branch": "main",
      "forks": 9177,
      "watchers": 123,
      "archived": false,
      "size_kb": 47848
    },
    "readme_content": "<div align=\"center\">\n\n![new-api](/web/default/public/logo.png)\n\n# New API\n\n🍥 **Next-Generation LLM Gateway and AI Asset Management System**\n\n<p align=\"center\">\n  <a href=\"./README.zh_CN.md\">简体中文</a> |\n  <a href=\"./README.zh_TW.md\">繁體中文</a> |\n  <strong>English</strong> |\n  <a href=\"./README.fr.md\">Français</a> |\n  <a href=\"./README.ja.md\">日本語</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://raw.githubusercontent.com/Calcium-Ion/new-api/main/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/Calcium-Ion/new-api?color=brightgreen\" alt=\"license\">\n  </a><!--\n  --><a href=\"https://github.com/Calcium-Ion/new-api/releases/latest\">\n    <img src=\"https://img.shields.io/github/v/release/Calcium-Ion/new-api?color=brightgreen&include_prereleases\" alt=\"release\">\n  </a><!--\n  --><a href=\"https://hub.docker.com/r/CalciumIon/new-api\">\n    <img src=\"https://img.shields.io/badge/docker-dockerHub-blue\" alt=\"docker\">\n  </a><!--\n  --><a href=\"https://goreportcard.com/report/github.com/Calcium-Ion/new-api\">\n    <img src=\"https://goreportcard.com/badge/github.com/Calcium-Ion/new-api\" alt=\"GoReportCard\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://trendshift.io/repositories/20180\" target=\"_blank\">\n    <img src=\"https://trendshift.io/api/badge/repositories/20180\" alt=\"QuantumNous%2Fnew-api | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/>\n  </a>\n  <br>\n  <a href=\"https://hellogithub.com/repository/QuantumNous/new-api\" target=\"_blank\">\n    <img src=\"https://api.hellogithub.com/v1/widgets/recommend.svg?rid=539ac4217e69431684ad4a0bab768811&claim_uid=tbFPfKIDHpc4TzR\" alt=\"Featured｜HelloGitHub\" style=\"width: 250px; height: 54px;\" width=\"250\" height=\"54\" />\n  </a><!--\n  --><a href=\"https://www.producthunt.com/products/new-api/launches/new-api?embed=true&utm_source=badge-featured&utm_medium=badge&utm_campaign=badge-new-api\" target=\"_blank\" rel=\"noopener noreferrer\">\n    <img src=\"https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1047693&theme=light&t=1769577875005\" alt=\"New API - All-in-one AI asset management gateway. | Product Hunt\" style=\"width: 250px; height: 54px;\" width=\"250\" height=\"54\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#-quick-start\">Quick Start</a> •\n  <a href=\"#-key-features\">Key Features</a> •\n  <a href=\"#-deployment\">Deployment</a> •\n  <a href=\"#-documentation\">Documentation</a> •\n  <a href=\"#-help-support\">Help</a>\n</p>\n\n</div>\n\n## 📝 Project Description\n\n> [!IMPORTANT]\n> - This project is intended solely for lawful and authorized AI API gateway, organization-level authentication, multi-model management, usage analytics, cost accounting, and private deployment scenarios.\n> - Users must lawfully obtain upstream API keys, accounts, model services, and interface permissions, and must comply with upstream terms of service and applicable laws and regulations.\n> - Users should ensure their use complies with upstream terms of service and applicable laws and regulations.\n> - When providing generative AI services to the public, users should comply with applicable regulatory requirements and fulfill all filing, licensing, content safety, real-name verification, log retention, tax, and upstream authorization obligations required by their jurisdiction.\n\n---\n\n## 🤝 Trusted Partners\n\n<p align=\"center\">\n  <em>No particular order</em>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.cherry-ai.com/\" target=\"_blank\">\n    <img src=\"./docs/images/cherry-studio.png\" alt=\"Cherry Studio\" height=\"80\" />\n  </a><!--\n  --><a href=\"https://github.com/iOfficeAI/AionUi/\" target=\"_blank\">\n    <img src=\"./docs/images/aionui.png\" alt=\"Aion UI\" height=\"80\" />\n  </a><!--\n  --><a href=\"https://bda.pku.edu.cn/\" target=\"_blank\">\n    <img src=\"./docs/images/pku.png\" alt=\"Peking University\" height=\"80\" />\n  </a><!--\n  --><a href=\"https://www.compshare.cn/?ytag=GPU_yy_gh_newapi\" target=\"_blank\">\n    <img src=\"./docs/images/ucloud.png\" alt=\"UCloud\" height=\"80\" />\n  </a><!--\n  --><a href=\"https://www.aliyun.com/\" target=\"_blank\">\n    <img src=\"./docs/images/aliyun.png\" alt=\"Alibaba Cloud\" height=\"80\" />\n  </a><!--\n  --><a href=\"https://io.net/\" target=\"_blank\">\n    <img src=\"./docs/images/io-net.png\" alt=\"IO.NET\" height=\"80\" />\n  </a>\n</p>\n\n---\n\n## 🙏 Special Thanks\n\n<p align=\"center\">\n  <a href=\"https://www.jetbrains.com/?from=new-api\" target=\"_blank\">\n    <img src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png\" alt=\"JetBrains Logo\" width=\"120\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  <strong>Thanks to <a href=\"https://www.jetbrains.com/?from=new-api\">JetBrains</a> for providing free open-source development license for this project</strong>\n</p>\n\n---\n\n## 🚀 Quick Start\n\n### Using Docker Compose (Recommended)\n\n```bash\n# Clone the project\ngit clone https://github.com/QuantumNous/new-api.git\ncd new-api\n\n# Edit docker-compose.yml configuration\nnano docker-compose.yml\n\n# Start the service\ndocker-compose up -d\n```\n\n<details>\n<summary><strong>Using Docker Commands</strong></summary>\n\n```bash\n# Pull the latest image\ndocker pull calciumion/new-api:latest\n\n# Using SQLite (default)\ndocker run --name new-api -d --restart always \\\n  -p 3000:3000 \\\n  -e TZ=Asia/Shanghai \\\n  -v ./data:/data \\\n  calciumion/new-api:latest\n\n# Using MySQL\ndocker run --name new-api -d --restart always \\\n  -p 3000:3000 \\\n  -e SQL_DSN=\"root:123456@tcp(localhost:3306)/oneapi\" \\\n  -e TZ=Asia/Shanghai \\\n  -v ./data:/data \\\n  calciumion/new-api:latest\n```\n\n> **💡 Tip:** `-v ./data:/data` will save data in the `data` folder of the current directory, you can also change it to an absolute path like `-v /your/custom/path:/data`\n\n</details>\n\n---\n\n🎉 After deployment is complete, visit `http://localhost:3000` to start using!\n\n> [!WARNING]\n> When operating this project as a public generative AI service or API resale service, users should first complete all required filing, licensing, content safety, real-name verification, log retention, tax, payment, and upstream authorization obligations.\n\n📖 For more deployment methods, please refer to [Deployment Guide](https://docs.newapi.pro/en/docs/installation)\n\n---\n\n## 📚 Documentation\n\n<div align=\"center\">\n\n### 📖 [Official Documentation](https://docs.newapi.pro/en/docs) | [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/QuantumNous/new-api)\n\n</div>\n\n**Quick Navigation:**\n\n| Category | Link |\n|------|------|\n| 🚀 Deployment Guide | [Installation Documentation](https://docs.newapi.pro/en/docs/installation) |\n| ⚙️ Environment Configuration | [Environment Variables](https://docs.newapi.pro/en/docs/installation/config-maintenance/environment-variables) |\n| 📡 API Documentation | [API Documentation](https://docs.newapi.pro/en/docs/api) |\n| ❓ FAQ | [FAQ](https://docs.newapi.pro/en/docs/support/faq) |\n| 💬 Community Interaction | [Communication Channels](https://docs.newapi.pro/en/docs/support/community-interaction) |\n\n---\n\n## ✨ Key Features\n\n> For detailed features, please refer to [Features Introduction](https://docs.newapi.pro/en/docs/guide/wiki/basic-concepts/features-introduction)\n\n### 🎨 Core Functions\n\n| Feature | Description |\n|------|------|\n| 🎨 New UI | Modern user interface design |\n| 🌍 Multi-language | Supports Simplified Chinese, Traditional Chinese, English, French, Japanese |\n| 🔄 Data Compatibility | Fully compatible with the original One API database |\n| 📈 Data Dashboard | Visual console and statistical analysis |\n| 🔒 Permission Management | Token grouping, model restrictions, user management |\n\n### 💰 Authorized Usage Accounting and Billing\n\n- ✅ Internal top-up and quota allocation for lawful authorized scenarios (EPay, Stripe)\n- ✅ Organization-level per-request, usage-based, and cache-hit cost accounting\n- ✅ Cache billing statistics for OpenAI, Azure, DeepSeek, Claude, Qwen, and supported models\n- ✅ Flexible billing policies for internal management or authorized enterprise customers\n\n### 🔐 Authorization and Security\n\n- 😈 Discord authorization login\n- 🤖 LinuxDO authorization login\n- 📱 Telegram authorization login\n- 🔑 OIDC unified authentication\n- 🔍 Key quota query usage (with [new-api-key-tool](https://github.com/Calcium-Ion/new-api-key-tool))\n\n### 🚀 Advanced Features\n\n**API Format Support:**\n- ⚡ [OpenAI Responses](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/create-response)\n- ⚡ [OpenAI Realtime API](https://docs.newapi.pro/en/docs/api/ai-model/realtime/create-realtime-session) (including Azure)\n- ⚡ [Claude Messages](https://docs.newapi.pro/en/docs/api/ai-model/chat/create-message)\n- ⚡ [Google Gemini](https://doc.newapi.pro/en/api/google-gemini-chat)\n- 🔄 [Rerank Models](https://docs.newapi.pro/en/docs/api/ai-model/rerank/create-rerank) (Cohere, Jina)\n\n**Intelligent Routing:**\n- ⚖️ Channel weighted random\n- 🔄 Automatic retry on failure\n- 🚦 User-level model rate limiting\n\n**Format Conversion:**\n- 🔄 **OpenAI Compatible ⇄ Claude Messages**\n- 🔄 **OpenAI Compatible → Google Gemini**\n- 🔄 **Google Gemini → OpenAI Compatible** - Text only, function calling not supported yet\n- 🚧 **OpenAI Compatible ⇄ OpenAI Responses** - In development\n- 🔄 **Thinking-to-content functionality**\n\n**Reasoning Effort Support:**\n\n<details>\n<summary>View detailed configuration</summary>\n\n**OpenAI series models:**\n- `o3-mini-high` - High reasoning effort\n- `o3-mini-medium` - Medium reasoning effort\n- `o3-mini-low` - Low reasoning effort\n- `gpt-5-high` - High reasoning effort\n- `gpt-5-medium` - Medium reasoning effort\n- `gpt-5-low` - Low reasoning effort\n\n**Claude thinking models:**\n- `claude-3-7-sonnet-20250219-thinking` - Enable thinking mode\n\n**Google Gemini series models:**\n- `gemini-2.5-flash-thinking` - Enable thinking mode\n- `gemini-2.5-flash-nothinking` - Disable thinking mode\n- `gemini-2.5-pro-thinking` - Enable thinking mode\n- `gemini-2.5-pro-thinking-128` - Enable thinking mode with thinking budget of 128 tokens\n- You can also append `-low`, `-medium`, or `-high` to any Gemini model name to request the corresponding reasoning effort (no extra thinking-budget suffix needed).\n\n</details>\n\n---\n\n## 🤖 Model Support\n\n> For details, please refer to [API Documentation - Gateway Interface](https://docs.newapi.pro/en/docs/api)\n\n| Model Type | Description | Documentation |\n|---------|------|------|\n| 🤖 OpenAI-Compatible | OpenAI compatible models | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createchatcompletion) |\n| 🤖 OpenAI Responses | OpenAI Responses format | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse) |\n| 🎨 Midjourney-Proxy | [Midjourney-Proxy(Plus)](https://github.com/novicezk/midjourney-proxy) | [Documentation](https://doc.newapi.pro/api/midjourney-proxy-image) |\n| 🎵 Suno-API | [Suno API](https://github.com/Suno-API/Suno-API) | [Documentation](https://doc.newapi.pro/api/suno-music) |\n| 🔄 Rerank | Cohere, Jina | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/rerank/creatererank) |\n| 💬 Claude | Messages format | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/chat/createmessage) |\n| 🌐 Gemini | Google Gemini format | [Documentation](https://docs.newapi.pro/en/docs/api/ai-model/chat/gemini/geminirelayv1beta) |\n| 🔧 Dify | ChatFlow mode | - |\n| 🎯 Custom upstream | Supports configuring legally authorized upstream endpoints | - |\n\n### 📡 Supported Interfaces\n\n<details>\n<summary>View complete interface list</summary>\n\n- [Chat Interface (Chat Completions)](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createchatcompletion)\n- [Response Interface (Responses)](https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse)\n- [Image Interface (Image)](https://docs.newapi.pro/en/docs/api/ai-model/images/openai/post-v1-images-generations)\n- [Audio Interface (Audio)](https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/create-transcription)\n- [Video Interface (Video)](https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/createspeech)\n- [Embedding Interface (Embeddings)](https://docs.newapi.pro/en/docs/api/ai-model/emb",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/QuantumNous/new-api\n\n// +heroku goVersion go1.18\ngo 1.25.1\n\nrequire (\n\tgithub.com/Calcium-Ion/go-epay v0.0.4\n\tgithub.com/abema/go-mp4 v1.4.1\n\tgithub.com/andybalholm/brotli v1.1.1\n\tgithub.com/anknown/ahocorasick v0.0.0-20190904063843-d75dbd5169c0\n\tgithub.com/aws/aws-sdk-go-v2 v1.41.5\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.19.10\n\tgithub.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.50.4\n\tgithub.com/aws/smithy-go v1.24.2\n\tgithub.com/bytedance/gopkg v0.1.3\n\tgithub.com/gin-contrib/cors v1.7.2\n\tgithub.com/gin-contrib/gzip v0.0.6\n\tgithub.com/gin-contrib/sessions v0.0.5\n\tgithub.com/gin-contrib/static v0.0.1\n\tgithub.com/gin-gonic/gin v1.9.1\n\tgithub.com/glebarez/sqlite v1.9.0\n\tgithub.com/go-audio/aiff v1.1.0\n\tgithub.com/go-audio/wav v1.1.0\n\tgithub.com/go-playground/validator/v10 v10.20.0\n\tgithub.com/go-redis/redis/v8 v8.11.5\n\tgithub.com/go-webauthn/webauthn v0.14.0\n\tgithub.com/golang-jwt/jwt/v5 v5.3.0\n\tgithub.com/google/uuid v1.6.0\n\tgithub.com/gorilla/websocket v1.5.0\n\tgithub.com/grafana/pyroscope-go v1.2.7\n\tgithub.com/jfreymuth/oggvorbis v1.0.5\n\tgithub.com/jinzhu/copier v0.4.0\n\tgithub.com/joho/godotenv v1.5.1\n\tgithub.com/mewkiz/flac v1.0.13\n\tgithub.com/nicksnyder/go-i18n/v2 v2.6.1\n\tgithub.com/pkg/errors v0.9.1\n\tgithub.com/pquerna/otp v1.5.0\n\tgithub.com/samber/hot v0.11.0\n\tgithub.com/samber/lo v1.52.0\n\tgithub.com/shirou/gopsutil v3.21.11+incompatible\n\tgithub.com/shopspring/decimal v1.4.0\n\tgithub.com/stretchr/testify v1.11.1\n\tgithub.com/stripe/stripe-go/v81 v81.4.0\n\tgithub.com/tcolgate/mp3 v0.0.0-20170426193717-e79c5a46d300\n\tgithub.com/thanhpk/randstr v1.0.6\n\tgithub.com/tidwall/gjson v1.18.0\n\tgithub.com/tidwall/sjson v1.2.5\n\tgithub.com/tiktoken-go/tokenizer v0.6.2\n\tgithub.com/waffo-com/waffo-go v1.3.2\n\tgithub.com/yapingcat/gomedia v0.0.0-20240906162731-17feea57090c\n\tgolang.org/x/crypto v0.48.0\n\tgolang.org/x/image v0.38.0\n\tgolang.org/x/net v0.50.0\n\tgolang.org/x/sync v0.20.0\n\tgolang.org/x/sys v0.41.0\n\tgolang.org/x/text v0.35.0\n\tgopkg.in/yaml.v3 v3.0.1\n\tgorm.io/driver/mysql v1.4.3\n\tgorm.io/driver/postgres v1.5.2\n\tgorm.io/gorm v1.25.2\n)\n\nrequire (\n\tgithub.com/waffo-com/waffo-pancake-sdk-go v0.3.1\n\tgorm.io/driver/clickhouse v0.6.0\n)\n\nrequire (\n\tgithub.com/ClickHouse/ch-go v0.65.0 // indirect\n\tgithub.com/ClickHouse/clickhouse-go/v2 v2.32.0 // indirect\n\tgithub.com/go-faster/city v1.0.1 // indirect\n\tgithub.com/go-faster/errors v0.7.1 // indirect\n\tgithub.com/hashicorp/go-version v1.7.0 // indirect\n\tgithub.com/paulmach/orb v0.11.1 // indirect\n\tgithub.com/pierrec/lz4/v4 v4.1.22 // indirect\n\tgithub.com/rogpeppe/go-internal v1.13.1 // indirect\n\tgithub.com/segmentio/asm v1.2.0 // indirect\n\tgo.opentelemetry.io/otel v1.34.0 // indirect\n\tgo.opentelemetry.io/otel/trace v1.34.0 // indirect\n)\n\nrequire github.com/Azure/go-ntlmssp v0.1.1\n\nrequire (\n\tgithub.com/DmitriyVTitov/size v1.5.0 // indirect\n\tgithub.com/anknown/darts v0.0.0-20151216065714-83ff685239e6 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect\n\tgithub.com/beorn7/perks v1.0.1 // indirect\n\tgithub.com/boombuler/barcode v1.1.0 // indirect\n\tgithub.com/bytedance/sonic v1.14.1 // indirect\n\tgithub.com/bytedance/sonic/loader v0.3.0 // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/cloudwego/base64x v0.1.6 // indirect\n\tgithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect\n\tgithub.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect\n\tgithub.com/dlclark/regexp2 v1.11.5 // indirect\n\tgithub.com/dustin/go-humanize v1.0.1 // indirect\n\tgithub.com/expr-lang/expr v1.17.8\n\tgithub.com/fxamacker/cbor/v2 v2.9.0 // indirect\n\tgithub.com/gabriel-vasile/mimetype v1.4.3 // indirect\n\tgithub.com/gin-contrib/sse v0.1.0 // indirect\n\tgithub.com/glebarez/go-sqlite v1.21.2 // indirect\n\tgithub.com/go-audio/audio v1.0.0 // indirect\n\tgithub.com/go-audio/riff v1.0.0 // indirect\n\tgithub.com/go-ole/go-ole v1.2.6 // indirect\n\tgithub.com/go-playground/locales v0.14.1 // indirect\n\tgithub.com/go-playground/universal-translator v0.18.1 // indirect\n\tgithub.com/go-sql-driver/mysql v1.7.0 // indirect\n\tgithub.com/go-webauthn/x v0.1.25 // indirect\n\tgithub.com/goccy/go-json v0.10.2 // indirect\n\tgithub.com/google/go-tpm v0.9.5 // indirect\n\tgithub.com/gorilla/context v1.1.1 // indirect\n\tgithub.com/gorilla/securecookie v1.1.1 // indirect\n\tgithub.com/gorilla/sessions v1.2.1 // indirect\n\tgithub.com/grafana/pyroscope-go/godeltaprof v0.1.9 // indirect\n\tgithub.com/icza/bitio v1.1.0 // indirect\n\tgithub.com/jackc/pgpassfile v1.0.0 // indirect\n\tgithub.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect\n\tgithub.com/jackc/pgx/v5 v5.9.2 // indirect\n\tgithub.com/jackc/puddle/v2 v2.2.2 // indirect\n\tgithub.com/jfreymuth/vorbis v1.0.2 // indirect\n\tgithub.com/jinzhu/inflection v1.0.0 // indirect\n\tgithub.com/jinzhu/now v1.1.5 // indirect\n\tgithub.com/json-iterator",
    "strategic_keywords": [
      "runtime",
      "llm"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 16,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "owner": "react",
    "name": "react",
    "full_name": "react/react",
    "url": "https://github.com/react/react",
    "description": "The library for web and native user interfaces.",
    "language": "JavaScript",
    "total_stars": 246102,
    "forks": 51072,
    "stars_this_period": 168,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "declarative",
        "frontend",
        "javascript",
        "library",
        "react",
        "ui"
      ],
      "license": "MIT",
      "open_issues": 1268,
      "created_at": "2013-05-24T16:15:54Z",
      "pushed_at": "2026-06-25T13:57:29Z",
      "homepage": "https://react.dev",
      "default_branch": "main",
      "forks": 51072,
      "watchers": 6687,
      "archived": false,
      "size_kb": 997264
    },
    "readme_content": "# [React](https://react.dev/) &middot; [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/facebook/react/blob/main/LICENSE) [![npm version](https://img.shields.io/npm/v/react.svg?style=flat)](https://www.npmjs.com/package/react) [![(Runtime) Build and Test](https://github.com/facebook/react/actions/workflows/runtime_build_and_test.yml/badge.svg)](https://github.com/facebook/react/actions/workflows/runtime_build_and_test.yml) [![(Compiler) TypeScript](https://github.com/facebook/react/actions/workflows/compiler_typescript.yml/badge.svg?branch=main)](https://github.com/facebook/react/actions/workflows/compiler_typescript.yml) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://legacy.reactjs.org/docs/how-to-contribute.html#your-first-pull-request)\n\nReact is a JavaScript library for building user interfaces.\n\n* **Declarative:** React makes it painless to create interactive UIs. Design simple views for each state in your application, and React will efficiently update and render just the right components when your data changes. Declarative views make your code more predictable, simpler to understand, and easier to debug.\n* **Component-Based:** Build encapsulated components that manage their own state, then compose them to make complex UIs. Since component logic is written in JavaScript instead of templates, you can easily pass rich data through your app and keep the state out of the DOM.\n* **Learn Once, Write Anywhere:** We don't make assumptions about the rest of your technology stack, so you can develop new features in React without rewriting existing code. React can also render on the server using [Node](https://nodejs.org/en) and power mobile apps using [React Native](https://reactnative.dev/).\n\n[Learn how to use React in your project](https://react.dev/learn).\n\n## Installation\n\nReact has been designed for gradual adoption from the start, and **you can use as little or as much React as you need**:\n\n* Use [Quick Start](https://react.dev/learn) to get a taste of React.\n* [Add React to an Existing Project](https://react.dev/learn/add-react-to-an-existing-project) to use as little or as much React as you need.\n* [Create a New React App](https://react.dev/learn/start-a-new-react-project) if you're looking for a powerful JavaScript toolchain.\n\n## Documentation\n\nYou can find the React documentation [on the website](https://react.dev/).\n\nCheck out the [Getting Started](https://react.dev/learn) page for a quick overview.\n\nThe documentation is divided into several sections:\n\n* [Quick Start](https://react.dev/learn)\n* [Tutorial](https://react.dev/learn/tutorial-tic-tac-toe)\n* [Thinking in React](https://react.dev/learn/thinking-in-react)\n* [Installation](https://react.dev/learn/installation)\n* [Describing the UI](https://react.dev/learn/describing-the-ui)\n* [Adding Interactivity](https://react.dev/learn/adding-interactivity)\n* [Managing State](https://react.dev/learn/managing-state)\n* [Advanced Guides](https://react.dev/learn/escape-hatches)\n* [API Reference](https://react.dev/reference/react)\n* [Where to Get Support](https://react.dev/community)\n* [Contributing Guide](https://legacy.reactjs.org/docs/how-to-contribute.html)\n\nYou can improve it by sending pull requests to [this repository](https://github.com/reactjs/react.dev).\n\n## Examples\n\nWe have several examples [on the website](https://react.dev/). Here is the first one to get you started:\n\n```jsx\nimport { createRoot } from 'react-dom/client';\n\nfunction HelloMessage({ name }) {\n  return <div>Hello {name}</div>;\n}\n\nconst root = createRoot(document.getElementById('container'));\nroot.render(<HelloMessage name=\"Taylor\" />);\n```\n\nThis example will render \"Hello Taylor\" into a container on the page.\n\nYou'll notice that we used an HTML-like syntax; [we call it JSX](https://react.dev/learn#writing-markup-with-jsx). JSX is not required to use React, but it makes code more readable, and writing it feels like writing HTML.\n\n## Contributing\n\nThe main purpose of this repository is to continue evolving React core, making it faster and easier to use. Development of React happens in the open on GitHub, and we are grateful to the community for contributing bugfixes and improvements. Read below to learn how you can take part in improving React.\n\n### [Code of Conduct](https://code.fb.com/codeofconduct)\n\nFacebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read [the full text](https://code.fb.com/codeofconduct) so that you can understand what actions will and will not be tolerated.\n\n### [Contributing Guide](https://legacy.reactjs.org/docs/how-to-contribute.html)\n\nRead our [contributing guide](https://legacy.reactjs.org/docs/how-to-contribute.html) to learn about our development process, how to propose bugfixes and improvements, and how to build and test your changes to React.\n\n### [Good First Issues](https://github.com/facebook/react/labels/good%20first%20issue)\n\nTo help you get your feet wet and get you familiar with our contribution process, we have a list of [good first issues](https://github.com/facebook/react/labels/good%20first%20issue) that contain bugs that have a relatively limited scope. This is a great place to get started.\n\n### License\n\nReact is [MIT licensed](./LICENSE).\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"private\": true,\n  \"workspaces\": [\n    \"packages/*\"\n  ],\n  \"devDependencies\": {\n    \"@babel/cli\": \"^7.10.5\",\n    \"@babel/code-frame\": \"^7.10.4\",\n    \"@babel/core\": \"^7.11.1\",\n    \"@babel/helper-define-map\": \"^7.18.6\",\n    \"@babel/helper-module-imports\": \"^7.10.4\",\n    \"@babel/parser\": \"^7.11.3\",\n    \"@babel/plugin-external-helpers\": \"^7.10.4\",\n    \"@babel/plugin-proposal-class-properties\": \"^7.10.4\",\n    \"@babel/plugin-proposal-object-rest-spread\": \"^7.11.0\",\n    \"@babel/plugin-syntax-dynamic-import\": \"^7.8.3\",\n    \"@babel/plugin-syntax-import-meta\": \"^7.10.4\",\n    \"@babel/plugin-syntax-jsx\": \"^7.23.3\",\n    \"@babel/plugin-syntax-typescript\": \"^7.14.5\",\n    \"@babel/plugin-transform-arrow-functions\": \"^7.10.4\",\n    \"@babel/plugin-transform-block-scoped-functions\": \"^7.10.4\",\n    \"@babel/plugin-transform-block-scoping\": \"^7.11.1\",\n    \"@babel/plugin-transform-class-properties\": \"^7.25.9\",\n    \"@babel/plugin-transform-classes\": \"^7.10.4\",\n    \"@babel/plugin-transform-destructuring\": \"^7.10.4\",\n    \"@babel/plugin-transform-for-of\": \"^7.10.4\",\n    \"@babel/plugin-transform-literals\": \"^7.10.4\",\n    \"@babel/plugin-transform-modules-commonjs\": \"^7.10.4\",\n    \"@babel/plugin-transform-object-super\": \"^7.10.4\",\n    \"@babel/plugin-transform-parameters\": \"^7.10.5\",\n    \"@babel/plugin-transform-private-methods\": \"^7.10.4\",\n    \"@babel/plugin-transform-react-jsx\": \"^7.23.4\",\n    \"@babel/plugin-transform-react-jsx-development\": \"^7.22.5\",\n    \"@babel/plugin-transform-react-jsx-source\": \"^7.10.5\",\n    \"@babel/plugin-transform-shorthand-properties\": \"^7.10.4\",\n    \"@babel/plugin-transform-spread\": \"^7.11.0\",\n    \"@babel/plugin-transform-template-literals\": \"^7.10.5\",\n    \"@babel/preset-env\": \"^7.26.9\",\n    \"@babel/preset-flow\": \"^7.10.4\",\n    \"@babel/preset-react\": \"^7.23.3\",\n    \"@babel/preset-typescript\": \"^7.26.0\",\n    \"@babel/traverse\": \"^7.11.0\",\n    \"@rollup/plugin-babel\": \"^6.0.3\",\n    \"@rollup/plugin-commonjs\": \"^24.0.1\",\n    \"@rollup/plugin-node-resolve\": \"^15.0.1\",\n    \"@rollup/plugin-replace\": \"^5.0.2\",\n    \"@rollup/plugin-typescript\": \"^12.1.2\",\n    \"@types/invariant\": \"^2.2.35\",\n    \"@typescript-eslint/eslint-plugin\": \"^6.21.0\",\n    \"@typescript-eslint/parser\": \"^6.21.0\",\n    \"abortcontroller-polyfill\": \"^1.7.5\",\n    \"art\": \"0.10.1\",\n    \"babel-plugin-syntax-hermes-parser\": \"^0.36.1\",\n    \"babel-plugin-syntax-trailing-function-commas\": \"^6.5.0\",\n    \"busboy\": \"^1.6.0\",\n    \"chalk\": \"^3.0.0\",\n    \"cli-table\": \"^0.3.1\",\n    \"coffee-script\": \"^1.12.7\",\n    \"confusing-browser-globals\": \"^1.0.9\",\n    \"core-js\": \"^3.6.4\",\n    \"create-react-class\": \"^15.6.3\",\n    \"danger\": \"^11.2.3\",\n    \"error-stack-parser\": \"^2.0.6\",\n    \"eslint\": \"^7.7.0\",\n    \"eslint-config-prettier\": \"^6.9.0\",\n    \"eslint-plugin-babel\": \"^5.3.0\",\n    \"eslint-plugin-es\": \"^4.1.0\",\n    \"eslint-plugin-eslint-plugin\": \"^3.5.3\",\n    \"eslint-plugin-ft-flow\": \"^2.0.3\",\n    \"eslint-plugin-jest\": \"28.4.0\",\n    \"eslint-plugin-no-for-of-loops\": \"^1.0.0\",\n    \"eslint-plugin-no-function-declare-after-return\": \"^1.0.0\",\n    \"eslint-plugin-react\": \"^6.7.1\",\n    \"eslint-plugin-react-hooks-published\": \"npm:eslint-plugin-react-hooks@^5.2.0\",\n    \"eslint-plugin-react-internal\": \"link:./scripts/eslint-rules\",\n    \"fbjs-scripts\": \"^3.0.1\",\n    \"filesize\": \"^6.0.1\",\n    \"flow-bin\": \"^0.317.0\",\n    \"flow-remove-types\": \"^2.317.0\",\n    \"flow-typed\": \"^4.1.1\",\n    \"glob\": \"^7.1.6\",\n    \"glob-stream\": \"^6.1.0\",\n    \"google-closure-compiler\": \"^20230206.0.0\",\n    \"gzip-size\": \"^5.1.1\",\n    \"hermes-eslint\": \"^0.36.1\",\n    \"hermes-parser\": \"^0.36.1\",\n    \"jest\": \"^29.4.2\",\n    \"jest-cli\": \"^29.4.2\",\n    \"jest-diff\": \"^29.4.2\",\n    \"jest-environment-jsdom\": \"^29.4.2\",\n    \"jest-silent-reporter\": \"^0.6.0\",\n    \"jest-snapshot-serializer-raw\": \"^1.2.0\",\n    \"minimatch\": \"^3.0.4\",\n    \"minimist\": \"^1.2.3\",\n    \"mkdirp\": \"^0.5.1\",\n    \"ncp\": \"^2.0.0\",\n    \"prettier\": \"^3.3.3\",\n    \"prettier-2\": \"npm:prettier@^2\",\n    \"prettier-plugin-hermes-parser\": \"^0.36.1\",\n    \"pretty-format\": \"^29.4.1\",\n    \"prop-types\": \"^15.6.2\",\n    \"random-seed\": \"^0.3.0\",\n    \"react-lifecycles-compat\": \"^3.0.4\",\n    \"rimraf\": \"^3.0.0\",\n    \"rollup\": \"^3.29.5\",\n    \"rollup-plugin-dts\": \"^6.1.1\",\n    \"rollup-plugin-prettier\": \"^4.1.1\",\n    \"rollup-plugin-strip-banner\": \"^3.0.0\",\n    \"semver\": \"^7.1.1\",\n    \"shelljs\": \"^0.8.5\",\n    \"signedsource\": \"^2.0.0\",\n    \"targz\": \"^1.0.1\",\n    \"through2\": \"^3.0.1\",\n    \"tmp\": \"^0.1.0\",\n    \"to-fast-properties\": \"^2.0.0\",\n    \"tsup\": \"^8.4.0\",\n    \"typescript\": \"^5.4.3\",\n    \"undici\": \"^5.28.4\",\n    \"web-streams-polyfill\": \"^3.1.1\",\n    \"yargs\": \"^15.3.1\"\n  },\n  \"jest\": {\n    \"testRegex\": \"/scripts/jest/dont-run-jest-directly\\\\.js$\"\n  },\n  \"scripts\": {\n    \"prebuild\": \"./scripts/react-compiler/link-compiler.sh\",\n    \"build\": \"node ./scripts/rollup/build-all-release-channels.js\",\n    \"build-for-devtools\": \"cross-env yarn build react/index,react/jsx,react/compiler-runtime,react-dom/index,react-dom/client,react-dom/unstable_testing,react-dom/test-utils,react-is,react-d",
    "strategic_keywords": [
      "runtime",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 90
    },
    "strategic_score": 90
  },
  {
    "owner": "python",
    "name": "cpython",
    "full_name": "python/cpython",
    "url": "https://github.com/python/cpython",
    "description": "The Python programming language",
    "language": "Python",
    "total_stars": 73417,
    "forks": 34780,
    "stars_this_period": 162,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "NOASSERTION",
      "open_issues": 9425,
      "created_at": "2017-02-10T19:23:51Z",
      "pushed_at": "2026-06-25T18:48:52Z",
      "homepage": "https://www.python.org",
      "default_branch": "main",
      "forks": 34780,
      "watchers": 1630,
      "archived": false,
      "size_kb": 837819
    },
    "readme_content": "This is Python version 3.16.0 alpha 0\n=====================================\n\n.. image:: https://github.com/python/cpython/actions/workflows/build.yml/badge.svg?branch=main&event=push\n   :alt: CPython build status on GitHub Actions\n   :target: https://github.com/python/cpython/actions\n\n.. image:: https://dev.azure.com/python/cpython/_apis/build/status/Azure%20Pipelines%20CI?branchName=main\n   :alt: CPython build status on Azure DevOps\n   :target: https://dev.azure.com/python/cpython/_build/latest?definitionId=4&branchName=main\n\n.. image:: https://img.shields.io/badge/discourse-join_chat-brightgreen.svg\n   :alt: Python Discourse chat\n   :target: https://discuss.python.org/\n\n\nCopyright © 2001 Python Software Foundation.  All rights reserved.\n\nSee the end of this file for further copyright and license information.\n\n.. contents::\n\nGeneral Information\n-------------------\n\n- Website: https://www.python.org\n- Source code: https://github.com/python/cpython\n- Issue tracker: https://github.com/python/cpython/issues\n- Documentation: https://docs.python.org\n- Developer's Guide: https://devguide.python.org/\n\nContributing to CPython\n-----------------------\n\nFor more complete instructions on contributing to CPython development,\nsee the `Developer Guide`_.\n\n.. _Developer Guide: https://devguide.python.org/\n\nUsing Python\n------------\n\nInstallable Python kits, and information about using Python, are available at\n`python.org`_.\n\n.. _python.org: https://www.python.org/\n\nBuild Instructions\n------------------\n\nOn Unix, Linux, BSD, macOS, and Cygwin::\n\n    ./configure\n    make\n    make test\n    sudo make install\n\nThis will install Python as ``python3``.\n\nYou can pass many options to the configure script; run ``./configure --help``\nto find out more.  On macOS case-insensitive file systems and on Cygwin,\nthe executable is called ``python.exe``; elsewhere it's just ``python``.\n\nBuilding a complete Python installation requires the use of various\nadditional third-party libraries, depending on your build platform and\nconfigure options.  Not all standard library modules are buildable or\nusable on all platforms.  Refer to the\n`Install dependencies <https://devguide.python.org/getting-started/setup-building.html#build-dependencies>`_\nsection of the `Developer Guide`_ for current detailed information on\ndependencies for various Linux distributions and macOS.\n\nOn macOS, there are additional configure and build options related\nto macOS framework and universal builds.  Refer to `Mac/README.rst\n<https://github.com/python/cpython/blob/main/Mac/README.rst>`_.\n\nOn Windows, see `PCbuild/readme.txt\n<https://github.com/python/cpython/blob/main/PCbuild/readme.txt>`_.\n\nTo build Windows installer, see `Tools/msi/README.txt\n<https://github.com/python/cpython/blob/main/Tools/msi/README.txt>`_.\n\nIf you wish, you can create a subdirectory and invoke configure from there.\nFor example::\n\n    mkdir debug\n    cd debug\n    ../configure --with-pydebug\n    make\n    make test\n\n(This will fail if you *also* built at the top-level directory.  You should do\na ``make clean`` at the top-level first.)\n\nTo get an optimized build of Python, ``configure --enable-optimizations``\nbefore you run ``make``.  This sets the default make targets up to enable\nProfile Guided Optimization (PGO) and may be used to auto-enable Link Time\nOptimization (LTO) on some platforms.  For more details, see the sections\nbelow.\n\nProfile Guided Optimization\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nPGO takes advantage of recent versions of the GCC or Clang compilers.  If used,\neither via ``configure --enable-optimizations`` or by manually running\n``make profile-opt`` regardless of configure flags, the optimized build\nprocess will perform the following steps:\n\nThe entire Python directory is cleaned of temporary files that may have\nresulted from a previous compilation.\n\nAn instrumented version of the interpreter is built, using suitable compiler\nflags for each flavor. Note that this is just an intermediary step.  The\nbinary resulting from this step is not good for real-life workloads as it has\nprofiling instructions embedded inside.\n\nAfter the instrumented interpreter is built, the Makefile will run a training\nworkload.  This is necessary in order to profile the interpreter's execution.\nNote also that any output, both stdout and stderr, that may appear at this step\nis suppressed.\n\nThe final step is to build the actual interpreter, using the information\ncollected from the instrumented one.  The end result will be a Python binary\nthat is optimized; suitable for distribution or production installation.\n\n\nLink Time Optimization\n^^^^^^^^^^^^^^^^^^^^^^\n\nEnabled via configure's ``--with-lto`` flag.  LTO takes advantage of the\nability of recent compiler toolchains to optimize across the otherwise\narbitrary ``.o`` file boundary when building final executables or shared\nlibraries for additional performance gains.\n\n\nWhat's New\n----------\n\nWe have a comprehensive overview of the changes in the `What's new in Python\n3.16 <https://docs.python.org/3.16/whatsnew/3.16.html>`_ document.  For a more\ndetailed change log, read `Misc/NEWS\n<https://github.com/python/cpython/tree/main/Misc/NEWS.d>`_, but a full\naccounting of changes can only be gleaned from the `commit history\n<https://github.com/python/cpython/commits/main>`_.\n\nIf you want to install multiple versions of Python, see the section below\nentitled \"Installing multiple versions\".\n\n\nDocumentation\n-------------\n\n`Documentation for Python 3.16 <https://docs.python.org/3.16/>`_ is online,\nupdated daily.\n\nIt can also be downloaded in many formats for faster access.  The documentation\nis downloadable in HTML, EPUB, and reStructuredText formats; the latter version\nis primarily for documentation authors, translators, and people with special\nformatting requirements.\n\nFor information about building Python's documentation, refer to `Doc/README.rst\n<https://github.com/python/cpython/blob/main/Doc/README.rst>`_.\n\n\nTesting\n-------\n\nTo test the interpreter, type ``make test`` in the top-level directory.  The\ntest set produces some output.  You can generally ignore the messages about\nskipped tests due to optional features which can't be imported.  If a message\nis printed about a failed test or a traceback or core dump is produced,\nsomething is wrong.\n\nBy default, tests are prevented from overusing resources like disk space and\nmemory.  To enable these tests, run ``make buildbottest``.\n\nIf any tests fail, you can re-run the failing test(s) in verbose mode.  For\nexample, if ``test_os`` and ``test_gdb`` failed, you can run::\n\n    make test TESTOPTS=\"-v test_os test_gdb\"\n\nIf the failure persists and appears to be a problem with Python rather than\nyour environment, you can `file a bug report\n<https://github.com/python/cpython/issues>`_ and include relevant output from\nthat command to show the issue.\n\nSee `Running & Writing Tests <https://devguide.python.org/testing/run-write-tests.html>`_\nfor more on running tests.\n\nInstalling multiple versions\n----------------------------\n\nOn Unix and Mac systems if you intend to install multiple versions of Python\nusing the same installation prefix (``--prefix`` argument to the configure\nscript) you must take care that your primary python executable is not\noverwritten by the installation of a different version.  All files and\ndirectories installed using ``make altinstall`` contain the major and minor\nversion and can thus live side-by-side.  ``make install`` also creates\n``${prefix}/bin/python3`` which refers to ``${prefix}/bin/python3.X``.  If you\nintend to install multiple versions using the same prefix you must decide which\nversion (if any) is your \"primary\" version.  Install that version using\n``make install``.  Install all other versions using ``make altinstall``.\n\nFor example, if you want to install Python 2.7, 3.6, and 3.15 with 3.15 being the\nprimary version, you would execute ``make install`` in your 3.15 build directory\nand ``make altinstall`` in the others.\n\n\nRelease Schedule\n----------------\n\nSee `PEP 826 <https://peps.python.org/pep-0826/>`__ for Python 3.16 release details.\n\n\nCopyright and License Information\n---------------------------------\n\n\nCopyright © 2001 Python Software Foundation.  All rights reserved.\n\nCopyright © 2000 BeOpen.com.  All rights reserved.\n\nCopyright © 1995-2001 Corporation for National Research Initiatives.  All\nrights reserved.\n\nCopyright © 1991-1995 Stichting Mathematisch Centrum.  All rights reserved.\n\nSee the `LICENSE <https://github.com/python/cpython/blob/main/LICENSE>`_ for\ninformation on the history of this software, terms & conditions for usage, and a\nDISCLAIMER OF ALL WARRANTIES.\n\nThis Python distribution contains *no* GNU General Public License (GPL) code,\nso it may be used in proprietary projects.  There are interfaces to some GNU\ncode but these are entirely optional.\n\nAll trademarks referenced herein are property of their respective holders.\n",
    "strategic_keywords": [
      "workflow"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "medium",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 8,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 7,
      "risk_signal": 6,
      "total": 67
    },
    "strategic_score": 67
  },
  {
    "owner": "multica-ai",
    "name": "multica",
    "full_name": "multica-ai/multica",
    "url": "https://github.com/multica-ai/multica",
    "description": "The open-source managed agents platform. Turn coding agents into real teammates — assign tasks, track progress, compound skills.",
    "language": "Go",
    "total_stars": 38028,
    "forks": 4710,
    "stars_this_period": 159,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [],
      "license": "NOASSERTION",
      "open_issues": 1064,
      "created_at": "2026-01-13T17:59:46Z",
      "pushed_at": "2026-06-25T11:34:44Z",
      "homepage": "https://multica.ai",
      "default_branch": "main",
      "forks": 4710,
      "watchers": 134,
      "archived": false,
      "size_kb": 67148
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"docs/assets/banner.jpg\" alt=\"Multica — humans and agents, side by side\" width=\"100%\">\n</p>\n\n<div align=\"center\">\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/assets/logo-dark.svg\">\n  <source media=\"(prefers-color-scheme: light)\" srcset=\"docs/assets/logo-light.svg\">\n  <img alt=\"Multica\" src=\"docs/assets/logo-light.svg\" width=\"50\">\n</picture>\n\n# Multica\n\n**Your next 10 hires won't be human.**\n\nThe open-source managed agents platform.<br/>\nTurn coding agents into real teammates — assign tasks, track progress, compound skills.\n\n[![CI](https://github.com/multica-ai/multica/actions/workflows/ci.yml/badge.svg)](https://github.com/multica-ai/multica/actions/workflows/ci.yml)\n[![GitHub stars](https://img.shields.io/github/stars/multica-ai/multica?style=flat)](https://github.com/multica-ai/multica/stargazers)\n[![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white)](https://discord.gg/W8gYBn226t)\n\n[Website](https://multica.ai) · [Cloud](https://multica.ai) · [Discord](https://discord.gg/W8gYBn226t) · [X](https://x.com/MulticaAI) · [Self-Hosting](SELF_HOSTING.md) · [Contributing](CONTRIBUTING.md)\n\n**English | [简体中文](README.zh-CN.md)**\n\n</div>\n\n## What is Multica?\n\nMultica turns coding agents into real teammates. Assign issues to an agent like you'd assign to a colleague — they'll pick up the work, write code, report blockers, and update statuses autonomously.\n\nNo more copy-pasting prompts. No more babysitting runs. Your agents show up on the board, participate in conversations, and compound reusable skills over time. Think of it as open-source infrastructure for managed agents — vendor-neutral, self-hosted, and designed for human + AI teams. Works with **Claude Code**, **Codex**, **GitHub Copilot CLI**, **OpenClaw**, **OpenCode**, **Hermes**, **Gemini**, **Pi**, **Cursor Agent**, **Kimi**, **Kiro CLI**, and **Qoder CLI**.\n\nFor larger teams, Squads add a stable routing layer: assign work to a group led by an agent, and the leader delegates to the right member.\n\n<p align=\"center\">\n  <img src=\"docs/assets/hero-screenshot.png\" alt=\"Multica board view\" width=\"800\">\n</p>\n\n## Why \"Multica\"?\n\nMultica — **Mul**tiplexed **I**nformation and **C**omputing **A**gent.\n\nThe name is a nod to Multics, the pioneering operating system of the 1960s that introduced time-sharing — letting multiple users share a single machine as if each had it to themselves. Unix was born as a deliberate simplification of Multics: one user, one task, one elegant philosophy.\n\nWe think the same inflection is happening again. For decades, software teams have been single-threaded — one engineer, one task, one context switch at a time. AI agents change that equation. Multica brings time-sharing back, but for an era where the \"users\" multiplexing the system are both humans and autonomous agents.\n\nIn Multica, agents are first-class teammates. They get assigned issues, report progress, raise blockers, and ship code — just like their human colleagues. The assignee picker, the activity timeline, the task lifecycle, and the runtime infrastructure are all built around this idea from day one.\n\nLike Multics before it, the bet is on multiplexing: a small team shouldn't feel small. With the right system, two engineers and a fleet of agents can move like twenty.\n\n## Features\n\nMultica manages the full agent lifecycle: from task assignment to execution monitoring to skill reuse.\n\n- **Agents as Teammates** — assign to an agent like you'd assign to a colleague. They have profiles, show up on the board, post comments, create issues, and report blockers proactively.\n- **Squads** — group agents (and humans) under a leader agent and assign work to the *squad*. The leader decides who should pick it up, so routing stays stable as the team grows. `@FrontendTeam` instead of `@alice-or-bob-or-carol`.\n- **Autonomous Execution** — set it and forget it. Full task lifecycle management (enqueue, claim, start, complete/fail) with real-time progress streaming via WebSocket.\n- **Autopilots** — schedule recurring work for agents. Cron triggers, webhooks, or manual runs — each autopilot creates the issue and routes it to an agent automatically, so daily standups, weekly reports, and periodic audits run themselves.\n- **Reusable Skills** — every solution becomes a reusable skill for the whole team. Deployments, migrations, code reviews — skills compound your team's capabilities over time.\n- **Unified Runtimes** — one dashboard for all your compute. Local daemons and cloud runtimes, auto-detection of available CLIs, real-time monitoring.\n- **Multi-Workspace** — organize work across teams with workspace-level isolation. Each workspace has its own agents, issues, and settings.\n\n---\n\n## Quick Install\n\n### macOS / Linux (Homebrew - recommended)\n\n```bash\nbrew install multica-ai/tap/multica\n```\n\nUse `brew upgrade multica-ai/tap/multica` to keep the CLI current.\n\n### macOS / Linux (install script)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash\n```\n\nUse this if Homebrew is not available. The script installs the Multica CLI on macOS and Linux by using Homebrew when it is on `PATH`, otherwise it downloads the binary directly.\n\n### Windows (PowerShell)\n\n```powershell\nirm https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.ps1 | iex\n```\n\nThen configure, authenticate, and start the daemon in one command:\n\n```bash\nmultica setup          # Connect to Multica Cloud, log in, start daemon\n```\n\n> **Self-hosting?** Add `--with-server` to deploy a full Multica server on your machine:\n>\n> ```bash\n> curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash -s -- --with-server\n> multica setup self-host\n> ```\n>\n> This pulls the official Multica images from GHCR (latest stable by default). Requires Docker. See the [Self-Hosting Guide](SELF_HOSTING.md) for details.\n> If the selected GHCR tag has not been published yet, fall back to `make selfhost-build` from a checkout.\n\n---\n\n## Getting Started\n\n### 1. Set up and start the daemon\n\n```bash\nmultica setup           # Configure, authenticate, and start the daemon\n```\n\nThe daemon runs in the background and auto-detects agent CLIs (`claude`, `codex`, `copilot`, `openclaw`, `opencode`, `hermes`, `gemini`, `pi`, `cursor-agent`, `kimi`, `kiro-cli`, `agy`, `qodercli`) on your PATH.\n\n### 2. Verify your runtime\n\nOpen your workspace in the Multica web app. Navigate to **Settings → Runtimes** — you should see your machine listed as an active **Runtime**.\n\n> **What is a Runtime?** A Runtime is a compute environment that can execute agent tasks. It can be your local machine (via the daemon) or a cloud instance. Each runtime reports which agent CLIs are available, so Multica knows where to route work.\n\n### 3. Create an agent\n\nGo to **Settings → Agents** and click **New Agent**. Pick the runtime you just connected and choose a provider (Claude Code, Codex, GitHub Copilot CLI, OpenClaw, OpenCode, Hermes, Gemini, Pi, Cursor Agent, Kimi, Kiro CLI, Antigravity, or Qoder CLI). Give your agent a name — this is how it will appear on the board, in comments, and in assignments.\n\n### 4. Assign your first task\n\nCreate an issue from the board (or via `multica issue create`), then assign it to your new agent. The agent will automatically pick up the task, execute it on your runtime, and report progress — just like a human teammate.\n\n---\n\n## CLI\n\nThe `multica` CLI connects your local machine to Multica — authenticate, manage workspaces, and run the agent daemon.\n\n| Command | Description |\n|---------|-------------|\n| `multica login` | Authenticate (opens browser) |\n| `multica daemon start` | Start the local agent runtime |\n| `multica daemon status` | Check daemon status |\n| `multica setup` | One-command setup for Multica Cloud (configure + login + start daemon) |\n| `multica setup self-host` | Same, but for self-hosted deployments |\n| `multica workspace list` | List your workspaces (current is marked with `*`) |\n| `multica workspace switch <id\\|slug>` | Switch the default workspace for this profile |\n| `multica issue list` | List issues in your workspace |\n| `multica issue create` | Create a new issue |\n| `multica update` | Update to the latest version |\n\nSee the [CLI and Daemon Guide](CLI_AND_DAEMON.md) for the full command reference.\n\n---\n\n## Architecture\n\n```\n┌──────────────┐     ┌──────────────┐     ┌──────────────────┐\n│   Next.js    │────>│  Go Backend  │────>│   PostgreSQL     │\n│   Frontend   │<────│  (Chi + WS)  │<────│   (pgvector)     │\n└──────────────┘     └──────┬───────┘     └──────────────────┘\n                            │\n                     ┌──────┴───────┐\n                     │ Agent Daemon │  runs on your machine\n                     └──────────────┘  (Claude Code, Codex, GitHub Copilot CLI,\n                                        OpenCode, OpenClaw, Hermes, Gemini,\n                                        Pi, Cursor Agent, Kimi, Kiro CLI, Qoder CLI)\n```\n\n| Layer | Stack |\n|-------|-------|\n| Frontend | Next.js 16 (App Router) |\n| Backend | Go (Chi router, sqlc, gorilla/websocket) |\n| Database | PostgreSQL 17 with pgvector |\n| Agent Runtime | Local daemon executing Claude Code, Codex, GitHub Copilot CLI, OpenClaw, OpenCode, Hermes, Gemini, Pi, Cursor Agent, Kimi, Kiro CLI, or Qoder CLI |\n\n## Development\n\nFor contributors working on the Multica codebase, see the [Contributing Guide](CONTRIBUTING.md).\n\n**Prerequisites:** [Node.js](https://nodejs.org/) v20+, [pnpm](https://pnpm.io/) v10.28+, [Go](https://go.dev/) v1.26+, [Docker](https://www.docker.com/)\n\n```bash\nmake dev\n```\n\n`make dev` auto-detects your environment (main checkout or worktree), creates the env file, installs dependencies, sets up the database, runs migrations, and starts all services.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full development workflow, worktree support, testing, and troubleshooting.\n\nAn iOS mobile client lives in [`apps/mobile/`](apps/mobile/) — see its [README](apps/mobile/README.md) for how to build it onto your own iPhone.\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "runtime",
      "skill",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "medium",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 8,
      "total": 91
    },
    "strategic_score": 91
  },
  {
    "owner": "Free-TV",
    "name": "IPTV",
    "full_name": "Free-TV/IPTV",
    "url": "https://github.com/Free-TV/IPTV",
    "description": "M3U Playlist for free TV channels",
    "language": "Python",
    "total_stars": 18184,
    "forks": 2676,
    "stars_this_period": 141,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "help-wanted",
        "looking-for-contributors"
      ],
      "license": "NOASSERTION",
      "open_issues": 228,
      "created_at": "2021-04-13T09:13:48Z",
      "pushed_at": "2026-06-17T05:25:41Z",
      "homepage": "",
      "default_branch": "master",
      "forks": 2676,
      "watchers": 688,
      "archived": false,
      "size_kb": 2546
    },
    "readme_content": "Free TV\n=======\n\nThis is an M3U playlist for free TV channels around the World.\n\nEither free locally (over the air):\n\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/us.svg\" width=\"24\">](lists/usa.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ca.svg\" width=\"24\">](lists/canada.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/gb.svg\" width=\"24\">](lists/uk.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ie.svg\" width=\"24\">](lists/ireland.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/au.svg\" width=\"24\">](lists/australia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/in.svg\" width=\"24\">](lists/india.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/jp.svg\" width=\"24\">](lists/japan.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/cn.svg\" width=\"24\">](lists/china.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/hk.svg\" width=\"24\">](lists/hong_kong.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/mo.svg\" width=\"24\">](lists/macau.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/tw.svg\" width=\"24\">](lists/taiwan.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/kp.svg\" width=\"24\">](lists/north_korea.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/kr.svg\" width=\"24\">](lists/korea.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/dk.svg\" width=\"24\">](lists/denmark.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/fo.svg\" width=\"24\">](lists/faroe_islands.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/gl.svg\" width=\"24\">](lists/greenland.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/fi.svg\" width=\"24\">](lists/finland.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/is.svg\" width=\"24\">](lists/iceland.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/no.svg\" width=\"24\">](lists/norway.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/se.svg\" width=\"24\">](lists/sweden.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ee.svg\" width=\"24\">](lists/estonia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/lv.svg\" width=\"24\">](lists/latvia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/lt.svg\" width=\"24\">](lists/lithuania.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/be.svg\" width=\"24\">](lists/belgium.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/nl.svg\" width=\"24\">](lists/netherlands.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/lu.svg\" width=\"24\">](lists/luxembourg.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/de.svg\" width=\"24\">](lists/germany.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/at.svg\" width=\"24\">](lists/austria.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ch.svg\" width=\"24\">](lists/switzerland.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/pl.svg\" width=\"24\">](lists/poland.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/cz.svg\" width=\"24\">](lists/czech_republic.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/sk.svg\" width=\"24\">](lists/slovakia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/hu.svg\" width=\"24\">](lists/hungary.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ro.svg\" width=\"24\">](lists/romania.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/md.svg\" width=\"24\">](lists/moldova.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/bg.svg\" width=\"24\">](lists/bulgaria.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/fr.svg\" width=\"24\">](lists/france.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/it.svg\" width=\"24\">](lists/italy.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/pt.svg\" width=\"24\">](lists/portugal.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/es.svg\" width=\"24\">](lists/spain.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ru.svg\" width=\"24\">](lists/russia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/by.svg\" width=\"24\">](lists/belarus.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ua.svg\" width=\"24\">](lists/ukraine.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/am.svg\" width=\"24\">](lists/armenia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/az.svg\" width=\"24\">](lists/azerbaijan.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ge.svg\" width=\"24\">](lists/georgia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ba.svg\" width=\"24\">](lists/bosnia_and_herzegovina.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/hr.svg\" width=\"24\">](lists/croatia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/me.svg\" width=\"24\">](lists/montenegro.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/mk.svg\" width=\"24\">](lists/north_macedonia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/rs.svg\" width=\"24\">](lists/serbia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/si.svg\" width=\"24\">](lists/slovenia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/al.svg\" width=\"24\">](lists/albania.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/xk.svg\" width=\"24\">](lists/kosovo.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/gr.svg\" width=\"24\">](lists/greece.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/cy.svg\" width=\"24\">](lists/cyprus.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ad.svg\" width=\"24\">](lists/andorra.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/mt.svg\" width=\"24\">](lists/malta.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/mc.svg\" width=\"24\">](lists/monaco.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/sm.svg\" width=\"24\">](lists/san_marino.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ir.svg\" width=\"24\">](lists/iran.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/iq.svg\" width=\"24\">](lists/iraq.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/il.svg\" width=\"24\">](lists/israel.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/qa.svg\" width=\"24\">](lists/qatar.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/tr.svg\" width=\"24\">](lists/turkey.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ae.svg\" width=\"24\">](lists/united_arab_emirates.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ar.svg\" width=\"24\">](lists/argentina.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/cr.svg\" width=\"24\">](lists/costa_rica.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/do.svg\" width=\"24\">](lists/dominican_republic.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/mx.svg\" width=\"24\">](lists/mexico.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/py.svg\" width=\"24\">](lists/paraguay.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/pe.svg\" width=\"24\">](lists/peru.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/ve.svg\" width=\"24\">](lists/venezuela.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/br.svg\" width=\"24\">](lists/brazil.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/tt.svg\" width=\"24\">](lists/trinidad.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/td.svg\" width=\"24\">](lists/chad.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/so.svg\" width=\"24\">](lists/somalia.md)\n[<img src=\"https://hatscripts.github.io/circle-flags/flags/id.svg\" width=\"24\">](lists/indonesia.md)\n\nOr free on the Internet:\n\n- Plex TV\n- Pluto TV (English, Spanish, French, Italian)\n- Redbox Live TV\n- Roku TV\n- Samsung TV Plus\n- Youtube live channels\n\nTo use it point your IPTV player to https://raw.githubusercontent.com/Free-TV/IPTV/master/playlist.m3u8.\n\nPhilosophy\n==========\n\nThe main goals for this playlist are listed below.\n\n**Quality over quantity**\n\nThe less channels we support the better.\n\n- All channels should work well.\n- As much as possible channels should be in HD, not SD.\n- Only one URL per channel (no +1, no alternate feeds, no regional declinations)\n\n**Only free channels**\n\nIf a channel is normally only available via commercial subscriptions it has nothing to do in this playlist. If on the other hand it is provided for free to everybody in a particular country, then it should be in this playlist.\n\n- No paid channels\n- Only channels which are officially provided for free (via DVB-S, DVB-T, analog, etc..)\n\n**Only mainstream channels**\n\nThis is a playlist for everybody.\n\n- No adult channels\n- No channels dedicated to any particular religion\n- No channels dedicated to any particular political party\n- No channels made for a country and funded by a different country\n\nFeed sources\n============\n\nIt can be quite hard to find up to date URLs, here's a list of sources:\n\n- https://github.com/iptv-org/iptv/tree/master/streams\n- Youtube: As long as the channel is live and its URL doesn't change (check the age of the stream, the number of viewers..)\n- Dailymotion: Same criteria as for youtube\n\nFormat\n======\n\nThe m3u8 playlist is generated by `make_playlist.py`, using the `.md` files located in `lists`.\n\nEach .md file represesnts a group. The `<h1>` line is used as the group title.\n\nOnly channels which URL column starts with `[>]` are included in the playlist.\n\nChannels which are not in HD are marked with an `Ⓢ`.\n\nChannels which use GeoIP blocking are marked with a `Ⓖ`.\n\nChannels which are live Youtube channels are marked with a `Ⓨ`.\n\nIssues\n======\n\nOnly create issues for bugs and feature requests.\n\nDo not create issues to add/edit or to remove channels. If you want to add/edit/remove channels, create a pull request directly.\n\nPull Requests\n=============\n\n**Only modify .md files**\n\nIf your Pull Request modifies channels, only modify .md files. Do not modify m3u8 files in your pull request.\n\n**Adding a new Channel**\n\nTo add a new channel, make a Pull Request.\n\n- In your Pull Request you need to provide information to show that the channel is free.\n- Use imgur.com to host the channel logo and point to it.\n- If you have a valid stream, add it and put `[>]` in front of it.\n- If you don't have an stream for the channel, add `[x]()` in the url column and place your channel in the Invalid category.\n- If you have a stream but it doesn't work well, put the channel in the Invalid category and put `[x]` in front of the url.\n- If you're adding geoblocked URLs specify it in your PR and specify which country they're working in. The PR will only be merged if these URLs can be tested.\n\n**Removing a Channel**\n\nTo remove a channel, make a Pull Request.\n\nIn your Pull Request you need to provide information to show that the channel is only available via a private paid subscription.\n\nNote: Public taxes (whether national or regional, whether called TV License or not) do not constitute a private paid subscription.\n\nIf a stream is broken, simply move the channel to the invalid category and replace `[>]` with `[x]` in the url column.\n",
    "strategic_keywords": [],
    "relationship_label": "投资观察对象",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 0,
      "novelty": 4,
      "productize": 4,
      "adoption": 8,
      "relation": 4,
      "risk_signal": 6,
      "total": 43
    },
    "strategic_score": 43
  },
  {
    "owner": "nodejs",
    "name": "node",
    "full_name": "nodejs/node",
    "url": "https://github.com/nodejs/node",
    "description": "Node.js JavaScript runtime ✨🐢🚀✨",
    "language": "JavaScript",
    "total_stars": 117982,
    "forks": 35773,
    "stars_this_period": 132,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "javascript",
        "js",
        "linux",
        "macos",
        "mit",
        "node",
        "nodejs",
        "runtime",
        "windows"
      ],
      "license": "NOASSERTION",
      "open_issues": 2413,
      "created_at": "2014-11-26T19:57:11Z",
      "pushed_at": "2026-06-25T20:54:52Z",
      "homepage": "https://nodejs.org",
      "default_branch": "main",
      "forks": 35773,
      "watchers": 3057,
      "archived": false,
      "size_kb": 1503248
    },
    "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": 15,
      "relevance": 16,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 6,
      "total": 82
    },
    "strategic_score": 82
  },
  {
    "owner": "pytorch",
    "name": "pytorch",
    "full_name": "pytorch/pytorch",
    "url": "https://github.com/pytorch/pytorch",
    "description": "Tensors and Dynamic neural networks in Python with strong GPU acceleration",
    "language": "Python",
    "total_stars": 101021,
    "forks": 28124,
    "stars_this_period": 124,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "autograd",
        "deep-learning",
        "gpu",
        "machine-learning",
        "neural-network",
        "numpy",
        "python",
        "tensor"
      ],
      "license": "NOASSERTION",
      "open_issues": 18274,
      "created_at": "2016-08-13T05:26:41Z",
      "pushed_at": "2026-06-25T22:03:14Z",
      "homepage": "https://pytorch.org",
      "default_branch": "main",
      "forks": 28124,
      "watchers": 1849,
      "archived": false,
      "size_kb": 1436609
    },
    "readme_content": "<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/pytorch-logo-light.png\" />\n  <source media=\"(prefers-color-scheme: light)\" srcset=\"https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/pytorch-logo-dark.png\" />\n  <img src=\"https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/pytorch-logo-dark.png\" alt=\"PyTorch logo\" />\n</picture>\n\n--------------------------------------------------------------------------------\n\nPyTorch is a Python package that provides two high-level features:\n- Tensor computation (like NumPy) with strong GPU acceleration\n- Deep neural networks built on a tape-based autograd system\n\nYou can reuse your favorite Python packages such as NumPy, SciPy, and Cython to extend PyTorch when needed.\n\nOur trunk health (Continuous Integration signals) can be found at [hud.pytorch.org](https://hud.pytorch.org/ci/pytorch/pytorch/main).\n\n<!-- toc -->\n\n- [More About PyTorch](#more-about-pytorch)\n  - [A GPU-Ready Tensor Library](#a-gpu-ready-tensor-library)\n  - [Dynamic Neural Networks: Tape-Based Autograd](#dynamic-neural-networks-tape-based-autograd)\n  - [Python First](#python-first)\n  - [Imperative Experiences](#imperative-experiences)\n  - [Fast and Lean](#fast-and-lean)\n  - [Extensions Without Pain](#extensions-without-pain)\n- [Installation](#installation)\n  - [Binaries](#binaries)\n    - [NVIDIA Jetson Platforms](#nvidia-jetson-platforms)\n  - [From Source](#from-source)\n    - [Prerequisites](#prerequisites)\n      - [NVIDIA CUDA Support](#nvidia-cuda-support)\n      - [AMD ROCm Support](#amd-rocm-support)\n      - [Intel GPU Support](#intel-gpu-support)\n    - [Get the PyTorch Source](#get-the-pytorch-source)\n    - [Install Dependencies](#install-dependencies)\n    - [Install PyTorch](#install-pytorch)\n      - [Adjust Build Options (Optional)](#adjust-build-options-optional)\n  - [Docker Image](#docker-image)\n    - [Using pre-built images](#using-pre-built-images)\n    - [Building the image yourself](#building-the-image-yourself)\n  - [Building the Documentation](#building-the-documentation)\n    - [Troubleshooting CI Errors](#troubleshooting-ci-errors)\n    - [Building a PDF](#building-a-pdf)\n  - [Previous Versions](#previous-versions)\n- [Getting Started](#getting-started)\n- [Resources](#resources)\n- [Communication](#communication)\n- [Releases and Contributing](#releases-and-contributing)\n- [The Team](#the-team)\n- [License](#license)\n\n<!-- tocstop -->\n\n## More About PyTorch\n\n[Learn the basics of PyTorch](https://pytorch.org/tutorials/beginner/basics/intro.html)\n\nAt a granular level, PyTorch is a library that consists of the following components:\n\n| Component | Description |\n| ---- | --- |\n| [**torch**](https://pytorch.org/docs/stable/torch.html) | A Tensor library like NumPy, with strong GPU support |\n| [**torch.autograd**](https://pytorch.org/docs/stable/autograd.html) | A tape-based automatic differentiation library that supports all differentiable Tensor operations in torch |\n| [**torch.jit**](https://pytorch.org/docs/stable/jit.html) | A compilation stack (TorchScript) to create serializable and optimizable models from PyTorch code  |\n| [**torch.nn**](https://pytorch.org/docs/stable/nn.html) | A neural networks library deeply integrated with autograd designed for maximum flexibility |\n| [**torch.multiprocessing**](https://pytorch.org/docs/stable/multiprocessing.html) | Python multiprocessing, but with magical memory sharing of torch Tensors across processes. Useful for data loading and Hogwild training |\n| [**torch.utils**](https://pytorch.org/docs/stable/data.html) | DataLoader and other utility functions for convenience |\n\nUsually, PyTorch is used either as:\n\n- A replacement for NumPy to use the power of GPUs.\n- A deep learning research platform that provides maximum flexibility and speed.\n\nElaborating Further:\n\n### A GPU-Ready Tensor Library\n\nIf you use NumPy, then you have used Tensors (a.k.a. ndarray).\n\n![Tensor illustration](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/tensor_illustration.png)\n\nPyTorch provides Tensors that can live either on the CPU or the GPU and accelerates the\ncomputation by a huge amount.\n\nWe provide a wide variety of tensor routines to accelerate and fit your scientific computation needs\nsuch as slicing, indexing, mathematical operations, linear algebra, reductions.\nAnd they are fast!\n\n### Dynamic Neural Networks: Tape-Based Autograd\n\nPyTorch has a unique way of building neural networks: using and replaying a tape recorder.\n\nMost frameworks such as TensorFlow, Theano, Caffe, and CNTK have a static view of the world.\nOne has to build a neural network and reuse the same structure again and again.\nChanging the way the network behaves means that one has to start from scratch.\n\nWith PyTorch, we use a technique called reverse-mode auto-differentiation, which allows you to\nchange the way your network behaves arbitrarily with zero lag or overhead. Our inspiration comes\nfrom several research papers on this topic, as well as current and past work such as\n[torch-autograd](https://github.com/twitter/torch-autograd),\n[autograd](https://github.com/HIPS/autograd),\n[Chainer](https://chainer.org), etc.\n\nWhile this technique is not unique to PyTorch, it's one of the fastest implementations of it to date.\nYou get the best of speed and flexibility for your crazy research.\n\n![Dynamic graph](https://github.com/pytorch/pytorch/raw/main/docs/source/_static/img/dynamic_graph.gif)\n\n### Python First\n\nPyTorch is not a Python binding into a monolithic C++ framework.\nIt is built to be deeply integrated into Python.\nYou can use it naturally like you would use [NumPy](https://www.numpy.org/) / [SciPy](https://www.scipy.org/) / [scikit-learn](https://scikit-learn.org) etc.\nYou can write your new neural network layers in Python itself, using your favorite libraries\nand use packages such as [Cython](https://cython.org/) and [Numba](http://numba.pydata.org/).\nOur goal is to not reinvent the wheel where appropriate.\n\n### Imperative Experiences\n\nPyTorch is designed to be intuitive, linear in thought, and easy to use.\nWhen you execute a line of code, it gets executed. There isn't an asynchronous view of the world.\nWhen you drop into a debugger or receive error messages and stack traces, understanding them is straightforward.\nThe stack trace points to exactly where your code was defined.\nWe hope you never spend hours debugging your code because of bad stack traces or asynchronous and opaque execution engines.\n\n### Fast and Lean\n\nPyTorch has minimal framework overhead. We integrate acceleration libraries\nsuch as [Intel MKL](https://software.intel.com/mkl) and NVIDIA ([cuDNN](https://developer.nvidia.com/cudnn), [NCCL](https://developer.nvidia.com/nccl)) to maximize speed.\nAt the core, its CPU and GPU Tensor and neural network backends\nare mature and have been tested for years.\n\nHence, PyTorch is quite fast — whether you run small or large neural networks.\n\nThe memory usage in PyTorch is extremely efficient compared to Torch or some of the alternatives.\nWe've written custom memory allocators for the GPU to make sure that\nyour deep learning models are maximally memory efficient.\nThis enables you to train bigger deep learning models than before.\n\n### Extensions Without Pain\n\nWriting new neural network modules, or interfacing with PyTorch's Tensor API, was designed to be straightforward\nand with minimal abstractions.\n\nYou can write new neural network layers in Python using the torch API\n[or your favorite NumPy-based libraries such as SciPy](https://pytorch.org/tutorials/advanced/numpy_extensions_tutorial.html).\n\nIf you want to write your layers in C/C++, we provide a convenient extension API that is efficient and with minimal boilerplate.\nNo wrapper code needs to be written. You can see [a tutorial here](https://pytorch.org/tutorials/advanced/cpp_extension.html) and [an example here](https://github.com/pytorch/extension-cpp).\n\n\n## Installation\n\n### Binaries\nCommands to install binaries via Conda or pip wheels are on our website: [https://pytorch.org/get-started/locally/](https://pytorch.org/get-started/locally/)\n\n\n#### NVIDIA Jetson Platforms\n\nPython wheels for NVIDIA's Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX, and Jetson AGX Orin are provided [here](https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-10-now-available/72048) and the L4T container is published [here](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch)\n\nThey require JetPack 4.2 and above, and [@dusty-nv](https://github.com/dusty-nv) and [@ptrblck](https://github.com/ptrblck) are maintaining them.\n\n\n### From Source\n\n#### Prerequisites\nIf you are installing from source, you will need:\n- Python 3.10 or later\n- A compiler that fully supports C++20, such as clang or gcc (gcc 11.3.0 or newer is required, on Linux)\n- Visual Studio or Visual Studio Build Tool (Windows only)\n- At least 10 GB of free disk space\n- 30-60 minutes for the initial build (subsequent rebuilds are much faster)\n\n\\* PyTorch CI uses Visual C++ BuildTools, which come with Visual Studio Enterprise,\nProfessional, or Community Editions. You can also install the build tools from\nhttps://visualstudio.microsoft.com/visual-cpp-build-tools/. The build tools *do not*\ncome with Visual Studio Code by default.\n\nAn example of environment setup is shown below:\n\n* Linux:\n\n```bash\n$ source <CONDA_INSTALL_DIR>/bin/activate\n$ conda create -y -n <CONDA_NAME>\n$ conda activate <CONDA_NAME>\n```\n* Windows:\n\n```bash\n$ source <CONDA_INSTALL_DIR>\\Scripts\\activate.bat\n$ conda create -y -n <CONDA_NAME>\n$ conda activate <CONDA_NAME>\n$ call \"C:\\Program Files\\Microsoft Visual Studio\\<VERSION>\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64\n```\n\nA conda environment is not required.  You can also do a PyTorch build in a\nstandard virtual environment, e.g., created with tools like `uv`, provided\nyour system has installed all the necessary dependencies unavailable as pip\npackages (e.g., CUDA, MKL.)\n\n##### NVIDIA CUDA Support\nIf you want to compile with CUDA support, [select a supported version of CUDA from our support matrix](https://pytorch.org/get-started/locally/), then install the following:\n- [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads)\n- [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) v9.0 or above\n- [Compiler](https://gist.github.com/ax3l/9489132) compatible with CUDA\n\nNote: You could refer to the [cuDNN Support Matrix](https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html) for cuDNN versions with the various supported CUDA, CUDA driver, and NVIDIA hardware.\n\nIf you want to disable CUDA support, export the environment variable `USE_CUDA=0`.\nOther potentially useful environment variables may be found in `setup.py`.  If\nCUDA is installed in a non-standard location, set PATH so that the nvcc you\nwant to use can be found (e.g., `export PATH=/usr/local/cuda-12.8/bin:$PATH`).\n\nIf you are building for NVIDIA's Jetson platforms (Jetson Nano, TX1, TX2, AGX Xavier), Instructions to install PyTorch for Jetson Nano are [available here](https://devtalk.nvidia.com/default/topic/1049071/jetson-nano/pytorch-for-jetson-nano/)\n\n##### AMD ROCm Support\nIf you want to compile with ROCm support, install\n- [AMD ROCm](https://rocm.docs.amd.com/en/latest/deploy/linux/quick_start.html) 4.0 and above installation\n- ROCm is currently supported only for Linux systems.\n\nBy default the build system expects ROCm to be installed in `/opt/rocm`. If ROCm is installed in a different directory, the `ROCM_PATH` environment variable must be set to the ROCm installation directory. The build system automatically detects the AMD GPU architecture. Optionally, the AMD GPU architecture can be explicitly set with the `PYTORCH_ROCM_ARCH` environment variable [AMD GPU architecture](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/reference/system-requirements.html#supported-gpus)\n\nIf you want to disab",
    "manifest_file": "pyproject.toml",
    "manifest_content": "# Package ######################################################################\n\n[build-system]\nrequires = [\n    \"setuptools>=77.0.0,<82\",  # 77.0 is the first release with PEP 639 license-files support\n    \"cmake>=3.27\",\n    \"ninja\",\n    \"numpy\",\n    \"packaging>=24.2\",  # required by setuptools>=77 to validate PEP 639 license expressions\n    \"pyyaml\",\n    \"requests\",\n    \"six\",  # dependency chain: NNPACK -> PeachPy -> six\n    \"typing-extensions>=4.10.0\",\n]\nbuild-backend = \"setuptools.build_meta\"\n\n[dependency-groups]\ndev = [\n    # This list should be kept in sync with the requirements-build.txt\n    # in PyTorch root until the project fully migrates to pyproject.toml\n    # after which this can be removed as it is already specified in the\n    # [build-system] section\n    \"setuptools>=77.0.0,<82\",  # 77.0 is the first release with PEP 639 license-files support\n    \"cmake>=3.27\",\n    \"ninja\",\n    \"numpy\",\n    \"packaging>=24.2\",  # required by setuptools>=77 to validate PEP 639 license expressions\n    \"pyyaml\",\n    \"requests\",\n    \"six\",  # dependency chain: NNPACK -> PeachPy -> six\n    \"typing-extensions>=4.10.0\",\n\n    # This list should be kept in sync with the requirements.txt in\n    # PyTorch root until the project fully migrates to pyproject.toml\n    \"build[uv]\",\n    \"expecttest>=0.3.0\",\n    \"filelock\",\n    \"fsspec>=0.8.5\",\n    \"hypothesis\",\n    \"jinja2\",\n    \"lintrunner; platform_machine != 's390x' and platform_machine != 'riscv64'\",\n    \"networkx>=2.5.1\",\n    \"optree>=0.13.0\",\n    \"psutil\",\n    \"sympy>=1.13.3\",\n    \"typing-extensions>=4.15.0\",\n    \"wheel\",\n]\n\n[project]\nname = \"torch\"\ndescription = \"Tensors and Dynamic neural networks in Python with strong GPU acceleration\"\nreadme = \"README.md\"\nrequires-python = \">=3.10\"\n# License info:\n#   - The main Pytorch project license is BSD-3-Clause.\n#   - The SPDX license expression below reflects installed pytorch packages.\nlicense = \"Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND BSD-2-Clause AND BSD-3-Clause AND BSL-1.0 AND MIT\"\nlicense-files = [\n    \"LICENSE\",\n    \"third_party/**/LICENSE\",\n    \"third_party/**/LICENSE.txt\",\n    \"third_party/**/LICENSE.rst\",\n    \"third_party/**/COPYING.BSD\",\n]\nauthors = [{ name = \"PyTorch Team\", email = \"packages@pytorch.org\" }]\nkeywords = [\"pytorch\", \"machine learning\"]\nclassifiers = [\n    \"Development Status :: 5 - Production/Stable\",\n    \"Intended Audience :: Developers\",\n    \"Intended Audience :: Education\",\n    \"Intended Audience :: Science/Research\",\n    \"Topic :: Scientific/Engineering\",\n    \"Topic :: Scientific/Engineering :: Mathematics\",\n    \"Topic :: Scientific/Engineering :: Artificial Intelligence\",\n    \"Topic :: Software Development\",\n    \"Topic :: Software Development :: Libraries\",\n    \"Topic :: Software Development :: Libraries :: Python Modules\",\n    \"Programming Language :: C++\",\n    \"Programming Language :: Python :: 3 :: Only\",\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    \"Programming Language :: Python :: 3.14\",\n    \"Programming Language :: Python :: 3.15\",\n]\ndynamic = [\n    \"entry-points\",\n    \"dependencies\",\n    \"scripts\",\n    \"version\",\n]\n\n[project.urls]\nHomepage = \"https://pytorch.org\"\nRepository = \"https://github.com/pytorch/pytorch\"\nDocumentation = \"https://pytorch.org/docs\"\n\"Issue Tracker\" = \"https://github.com/pytorch/pytorch/issues\"\nForum = \"https://discuss.pytorch.org\"\n\n[project.optional-dependencies]\noptree = [\"optree>=0.13.0\"]\nopt-einsum = [\"opt-einsum>=3.3\"]\npyyaml = [\"pyyaml\"]\n\n# Linter tools #################################################################\n\n[tool.isort]\nsrc_paths = [\"caffe2\", \"torch\", \"torchgen\", \"functorch\", \"test\"]\nextra_standard_library = [\"typing_extensions\"]\nskip_gitignore = true\nskip_glob = [\"third_party/*\"]\natomic = true\nprofile = \"black\"\nindent = 4\nline_length = 88\nlines_after_imports = 2\nmulti_line_output = 3\ninclude_trailing_comma = true\ncombine_as_imports = true\n\n[tool.usort]\npreserve_inline_comments = true\ncollapse_blank_lines_in_category = false\n\n[tool.usort.known]\nfirst_party = [\"caffe2\", \"torch\", \"torchgen\", \"functorch\", \"test\"]\nstandard_library = [\"typing_extensions\"]\n\n[tool.ruff]\nline-length = 88\nsrc = [\"caffe2\", \"torch\", \"torchgen\", \"functorch\", \"test\"]\nextend-exclude = [\"third_party\", \"test/cpython\"]\n\n[tool.ruff.per-file-target-version]\n\"**/py312_intrinsics.py\" = \"py312\"\n\n[tool.ruff.format]\ndocstring-code-format = true\nquote-style = \"double\"\n\n[tool.ruff.lint]\n# NOTE: Synchronize the ignores with .flake8\nexternal = [\n    # Codes from flake8-only plugins that ruff doesn't implement.\n    \"P201\",\n    \"P204\",\n    \"T484\",\n    # Codes that are preview-only in ruff, so flake8 is still the enforcer.\n    # As ruff promotes these out of preview, move them to flake8's ignore list.\n    \"B901\",\n    \"B909\",\n    \"E115\",\n    \"E201\",\n    \"E221\",\n    \"E225\",\n    \"E226\",\n    \"E227\",\n    \"E231\",\n    \"E241\",\n    \"E261\",\n    \"E262\",\n ",
    "strategic_keywords": [
      "memory"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 8,
      "novelty": 15,
      "productize": 7,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 6,
      "total": 68
    },
    "strategic_score": 68
  },
  {
    "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": 6570,
    "forks": 602,
    "stars_this_period": 112,
    "source_slice": "all",
    "source_slices": [
      "all",
      "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",
        "wanderlog",
        "wanderlust",
        "webapplication"
      ],
      "license": "AGPL-3.0",
      "open_issues": 23,
      "created_at": "2026-03-19T11:51:54Z",
      "pushed_at": "2026-06-25T21:59:11Z",
      "homepage": "https://demo.liketrek.com",
      "default_branch": "main",
      "forks": 602,
      "watchers": 13,
      "archived": false,
      "size_kb": 109817
    },
    "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.2\",\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  },\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    \"@rollup/rollup-linux-x64-musl\": \"4.62.0\",\n    \"@rollup/rollup-linux-arm64-musl\": \"4.62.0\",\n    \"@img/sharp-linuxmusl-x64\": \"0.35.1\",\n    \"@img/sharp-linuxmusl-arm64\": \"0.35.1\"\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": 17,
      "relevance": 16,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 6,
      "total": 75
    },
    "strategic_score": 75
  },
  {
    "owner": "voocel",
    "name": "ainovel-cli",
    "full_name": "voocel/ainovel-cli",
    "url": "https://github.com/voocel/ainovel-cli",
    "description": "✨多agent实现全自动AI小说生成",
    "language": "Go",
    "total_stars": 1043,
    "forks": 217,
    "stars_this_period": 108,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "agents",
        "ai",
        "ai-agents",
        "claude",
        "go",
        "llm",
        "novel",
        "openai"
      ],
      "license": "Apache-2.0",
      "open_issues": 11,
      "created_at": "2026-03-07T12:24:45Z",
      "pushed_at": "2026-06-24T11:03:53Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 217,
      "watchers": 3,
      "archived": false,
      "size_kb": 6193
    },
    "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.2\n\tgithub.com/voocel/litellm v1.6.18\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/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": 13,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 77
    },
    "strategic_score": 77
  },
  {
    "owner": "cheahjs",
    "name": "free-llm-api-resources",
    "full_name": "cheahjs/free-llm-api-resources",
    "url": "https://github.com/cheahjs/free-llm-api-resources",
    "description": "A list of free LLM inference resources accessible via API.",
    "language": "Python",
    "total_stars": 24178,
    "forks": 2461,
    "stars_this_period": 100,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "ai",
        "claude",
        "gemini",
        "llama",
        "llm",
        "openai"
      ],
      "license": "NOASSERTION",
      "open_issues": 48,
      "created_at": "2024-07-04T20:10:17Z",
      "pushed_at": "2026-06-23T07:54:42Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 2461,
      "watchers": 306,
      "archived": false,
      "size_kb": 429
    },
    "readme_content": "<!---\nWARNING: DO NOT EDIT THIS FILE DIRECTLY. IT IS GENERATED BY src/pull_available_models.py\n--->\n# Free LLM API resources\n\nThis lists various services that provide free access or credits towards API-based LLM usage.\n\n> [!NOTE]  \n> Please don't abuse these services, else we might lose them.\n\n> [!WARNING]  \n> This list explicitly excludes any services that are not legitimate (eg reverse engineers an existing chatbot)\n\n- [Free Providers](#free-providers)\n  - [OpenRouter](#openrouter)\n  - [Google AI Studio](#google-ai-studio)\n  - [NVIDIA NIM](#nvidia-nim)\n  - [Mistral (La Plateforme)](#mistral-la-plateforme)\n  - [Mistral (Codestral)](#mistral-codestral)\n  - [HuggingFace Inference Providers](#huggingface-inference-providers)\n  - [Vercel AI Gateway](#vercel-ai-gateway)\n  - [OpenCode Zen](#opencode-zen)\n  - [Cerebras](#cerebras)\n  - [Groq](#groq)\n  - [Cohere](#cohere)\n  - [GitHub Models](#github-models)\n  - [Cloudflare Workers AI](#cloudflare-workers-ai)\n- [Providers with trial credits](#providers-with-trial-credits)\n  - [Fireworks](#fireworks)\n  - [Baseten](#baseten)\n  - [Nebius](#nebius)\n  - [Novita](#novita)\n  - [AI21](#ai21)\n  - [Upstage](#upstage)\n  - [NLP Cloud](#nlp-cloud)\n  - [Alibaba Cloud (International) Model Studio](#alibaba-cloud-international-model-studio)\n  - [Modal](#modal)\n  - [Inference.net](#inferencenet)\n  - [Hyperbolic](#hyperbolic)\n  - [SambaNova Cloud](#sambanova-cloud)\n  - [Scaleway Generative APIs](#scaleway-generative-apis)\n\n## Free Providers\n\n### [OpenRouter](https://openrouter.ai)\n\n**Limits:**\n\n[20 requests/minute<br>50 requests/day<br>Up to 1000 requests/day with $10 lifetime topup](https://openrouter.ai/docs/api/reference/limits)\n\nModels share a common quota.\n\n- [Hermes 3 Llama 3.1 405B](https://openrouter.ai/nousresearch/hermes-3-llama-3.1-405b:free)\n- [Llama 3.2 3B Instruct](https://openrouter.ai/meta-llama/llama-3.2-3b-instruct:free)\n- [Llama 3.3 70B Instruct](https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free)\n- [cognitivecomputations/dolphin-mistral-24b-venice-edition:free](https://openrouter.ai/cognitivecomputations/dolphin-mistral-24b-venice-edition:free)\n- [cohere/north-mini-code:free](https://openrouter.ai/cohere/north-mini-code:free)\n- [google/gemma-4-26b-a4b-it:free](https://openrouter.ai/google/gemma-4-26b-a4b-it:free)\n- [google/gemma-4-31b-it:free](https://openrouter.ai/google/gemma-4-31b-it:free)\n- [liquid/lfm-2.5-1.2b-instruct:free](https://openrouter.ai/liquid/lfm-2.5-1.2b-instruct:free)\n- [liquid/lfm-2.5-1.2b-thinking:free](https://openrouter.ai/liquid/lfm-2.5-1.2b-thinking:free)\n- [nvidia/nemotron-3-nano-30b-a3b:free](https://openrouter.ai/nvidia/nemotron-3-nano-30b-a3b:free)\n- [nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free](https://openrouter.ai/nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free)\n- [nvidia/nemotron-3-super-120b-a12b:free](https://openrouter.ai/nvidia/nemotron-3-super-120b-a12b:free)\n- [nvidia/nemotron-3-ultra-550b-a55b:free](https://openrouter.ai/nvidia/nemotron-3-ultra-550b-a55b:free)\n- [nvidia/nemotron-3.5-content-safety:free](https://openrouter.ai/nvidia/nemotron-3.5-content-safety:free)\n- [nvidia/nemotron-nano-12b-v2-vl:free](https://openrouter.ai/nvidia/nemotron-nano-12b-v2-vl:free)\n- [nvidia/nemotron-nano-9b-v2:free](https://openrouter.ai/nvidia/nemotron-nano-9b-v2:free)\n- [openai/gpt-oss-120b:free](https://openrouter.ai/openai/gpt-oss-120b:free)\n- [openai/gpt-oss-20b:free](https://openrouter.ai/openai/gpt-oss-20b:free)\n- [poolside/laguna-m.1:free](https://openrouter.ai/poolside/laguna-m.1:free)\n- [poolside/laguna-xs.2:free](https://openrouter.ai/poolside/laguna-xs.2:free)\n- [qwen/qwen3-coder:free](https://openrouter.ai/qwen/qwen3-coder:free)\n- [qwen/qwen3-next-80b-a3b-instruct:free](https://openrouter.ai/qwen/qwen3-next-80b-a3b-instruct:free)\n\n### [Google AI Studio](https://aistudio.google.com)\n\nData is used for training when used outside of the UK/CH/EEA/EU.\n\n<table><thead><tr><th>Model Name</th><th>Model Limits</th></tr></thead><tbody>\n<tr><td>Gemini 3.5 Flash</td><td>250,000 tokens/minute<br>20 requests/day<br>5 requests/minute</td></tr>\n<tr><td>Gemini 3 Flash</td><td>250,000 tokens/minute<br>20 requests/day<br>5 requests/minute</td></tr>\n<tr><td>Gemini 3.1 Flash-Lite</td><td>250,000 tokens/minute<br>500 requests/day<br>15 requests/minute</td></tr>\n<tr><td>Gemini 2.5 Flash</td><td>250,000 tokens/minute<br>20 requests/day<br>5 requests/minute</td></tr>\n<tr><td>Gemini 2.5 Flash-Lite</td><td>250,000 tokens/minute<br>20 requests/day<br>10 requests/minute</td></tr>\n<tr><td>Gemini 3.1 Flash TTS</td><td>10,000 tokens/minute<br>10 requests/day<br>3 requests/minute</td></tr>\n<tr><td>Gemini 2.5 Flash TTS</td><td>10,000 tokens/minute<br>10 requests/day<br>3 requests/minute</td></tr>\n<tr><td>Gemini Robotics-ER 1.6</td><td>250,000 tokens/minute<br>20 requests/day<br>5 requests/minute</td></tr>\n<tr><td>Gemini Robotics-ER 1.5</td><td>250,000 tokens/minute<br>20 requests/day<br>10 requests/minute</td></tr>\n<tr><td>Gemma 3 27B Instruct</td><td>15,000 tokens/minute<br>14,400 requests/day<br>30 requests/minute</td></tr>\n<tr><td>Gemma 3 12B Instruct</td><td>15,000 tokens/minute<br>14,400 requests/day<br>30 requests/minute</td></tr>\n<tr><td>Gemma 3 4B Instruct</td><td>15,000 tokens/minute<br>14,400 requests/day<br>30 requests/minute</td></tr>\n<tr><td>Gemma 3 1B Instruct</td><td>15,000 tokens/minute<br>14,400 requests/day<br>30 requests/minute</td></tr>\n</tbody></table>\n\n### [NVIDIA NIM](https://build.nvidia.com/explore/discover)\n\nPhone number verification required.\nModels tend to be context window limited.\n\n**Limits:** 40 requests/minute\n\n- [Various open models](https://build.nvidia.com/models)\n\n### [Mistral (La Plateforme)](https://console.mistral.ai/)\n\n* Free tier (Experiment plan) requires opting into data training\n* Requires phone number verification.\n\n**Limits (per-model):** 1 request/second, 500,000 tokens/minute, 1,000,000,000 tokens/month\n\n- [Open and Proprietary Mistral models](https://docs.mistral.ai/getting-started/models/models_overview/)\n\n### [Mistral (Codestral)](https://codestral.mistral.ai/)\n\n* Currently free to use\n* Monthly subscription based\n* Requires phone number verification\n\n**Limits:** 30 requests/minute, 2,000 requests/day\n\n- Codestral\n\n### [HuggingFace Inference Providers](https://huggingface.co/docs/inference-providers/en/index)\n\nHuggingFace Serverless Inference limited to models smaller than 10GB. Some popular models are supported even if they exceed 10GB.\n\n**Limits:** [$0.10/month in credits](https://huggingface.co/docs/inference-providers/en/pricing)\n\n- Various open models across supported providers\n\n### [Vercel AI Gateway](https://vercel.com/docs/ai-gateway)\n\nRoutes to various supported providers.\n\n**Limits:** [$5/month](https://vercel.com/docs/ai-gateway/pricing)\n\n\n### [OpenCode Zen](https://opencode.ai/docs/zen/)\n\nAI gateway with curated models.\n\nFree models may use data for improvement.\n\n- Big Pickle Stealth\n- Nemotron 3 Super Free\n- DeepSeek V4 Flash Free\n\n### [Cerebras](https://cloud.cerebras.ai/)\n\n<table><thead><tr><th>Model Name</th><th>Model Limits</th></tr></thead><tbody>\n<tr><td>gpt-oss-120b</td><td>30 requests/minute<br>60,000 tokens/minute<br>900 requests/hour<br>1,000,000 tokens/hour<br>14,400 requests/day<br>1,000,000 tokens/day</td></tr>\n<tr><td>Llama 3.1 8B</td><td>30 requests/minute<br>60,000 tokens/minute<br>900 requests/hour<br>1,000,000 tokens/hour<br>14,400 requests/day<br>1,000,000 tokens/day</td></tr>\n</tbody></table>\n\n### [Groq](https://console.groq.com)\n\n<table><thead><tr><th>Model Name</th><th>Model Limits</th></tr></thead><tbody>\n<tr><td>Allam 2 7B</td><td>7,000 requests/day<br>6,000 tokens/minute</td></tr>\n<tr><td>Llama 3.1 8B</td><td>14,400 requests/day<br>6,000 tokens/minute</td></tr>\n<tr><td>Llama 3.3 70B</td><td>1,000 requests/day<br>12,000 tokens/minute</td></tr>\n<tr><td>Llama 4 Scout Instruct</td><td>1,000 requests/day<br>30,000 tokens/minute</td></tr>\n<tr><td>Whisper Large v3</td><td>2,000 requests/day</td></tr>\n<tr><td>Whisper Large v3 Turbo</td><td>2,000 requests/day</td></tr>\n<tr><td>canopylabs/orpheus-arabic-saudi</td><td></td></tr>\n<tr><td>canopylabs/orpheus-v1-english</td><td></td></tr>\n<tr><td>groq/compound</td><td>250 requests/day<br>70,000 tokens/minute</td></tr>\n<tr><td>groq/compound-mini</td><td>250 requests/day<br>70,000 tokens/minute</td></tr>\n<tr><td>meta-llama/llama-prompt-guard-2-22m</td><td></td></tr>\n<tr><td>meta-llama/llama-prompt-guard-2-86m</td><td></td></tr>\n<tr><td>openai/gpt-oss-120b</td><td>1,000 requests/day<br>8,000 tokens/minute</td></tr>\n<tr><td>openai/gpt-oss-20b</td><td>1,000 requests/day<br>8,000 tokens/minute</td></tr>\n<tr><td>openai/gpt-oss-safeguard-20b</td><td>1,000 requests/day<br>8,000 tokens/minute</td></tr>\n<tr><td>qwen/qwen3-32b</td><td>1,000 requests/day<br>6,000 tokens/minute</td></tr>\n<tr><td>qwen/qwen3.6-27b</td><td>1,000 requests/day<br>8,000 tokens/minute</td></tr>\n</tbody></table>\n\n### [Cohere](https://cohere.com)\n\n**Limits:**\n\n[20 requests/minute<br>1,000 requests/month](https://docs.cohere.com/docs/rate-limits)\n\nModels share a common monthly quota.\n\n- c4ai-aya-expanse-32b\n- c4ai-aya-vision-32b\n- command-a-03-2025\n- command-a-plus-05-2026\n- command-a-reasoning-08-2025\n- command-a-translate-08-2025\n- command-a-vision-07-2025\n- command-r-08-2024\n- command-r-plus-08-2024\n- command-r7b-12-2024\n- command-r7b-arabic-02-2025\n\n### [GitHub Models](https://github.com/marketplace/models)\n\nExtremely restrictive input/output token limits.\n\n**Limits:** [Dependent on Copilot subscription tier (Free/Pro/Pro+/Business/Enterprise)](https://docs.github.com/en/github-models/prototyping-with-ai-models#rate-limits)\n\n- Codestral 25.01\n- Cohere Command A\n- DeepSeek-R1\n- DeepSeek-R1-0528\n- DeepSeek-V3-0324\n- Llama 4 Maverick 17B 128E Instruct FP8\n- Llama 4 Scout 17B 16E Instruct\n- Llama-3.2-11B-Vision-Instruct\n- Llama-3.2-90B-Vision-Instruct\n- Llama-3.3-70B-Instruct\n- Meta-Llama-3.1-405B-Instruct\n- Meta-Llama-3.1-8B-Instruct\n- Ministral 3B\n- Mistral Medium 3 (25.05)\n- Mistral Small 3.1\n- OpenAI GPT-4.1\n- OpenAI GPT-4.1-mini\n- OpenAI GPT-4.1-nano\n- OpenAI GPT-4o\n- OpenAI GPT-4o mini\n- OpenAI Text Embedding 3 (large)\n- OpenAI Text Embedding 3 (small)\n- OpenAI gpt-5\n- OpenAI gpt-5-chat (preview)\n- OpenAI gpt-5-mini\n- OpenAI gpt-5-nano\n- OpenAI o1\n- OpenAI o1-mini\n- OpenAI o1-preview\n- OpenAI o3\n- OpenAI o3-mini\n- OpenAI o4-mini\n- Phi-4\n- Phi-4-mini-instruct\n- Phi-4-mini-reasoning\n- Phi-4-multimodal-instruct\n- Phi-4-reasoning\n\n### [Cloudflare Workers AI](https://developers.cloudflare.com/workers-ai)\n\n**Limits:** [10,000 neurons/day](https://developers.cloudflare.com/workers-ai/platform/pricing/#free-allocation)\n\n- @cf/aisingapore/gemma-sea-lion-v4-27b-it\n- @cf/google/gemma-4-26b-a4b-it\n- @cf/ibm-granite/granite-4.0-h-micro\n- @cf/moonshotai/kimi-k2.6\n- @cf/moonshotai/kimi-k2.7-code\n- @cf/nvidia/nemotron-3-120b-a12b\n- @cf/openai/gpt-oss-120b\n- @cf/openai/gpt-oss-20b\n- @cf/qwen/qwen3-30b-a3b-fp8\n- @cf/zai-org/glm-4.7-flash\n- @cf/zai-org/glm-5.2\n- DeepSeek R1 Distill Qwen 32B\n- Gemma 2B Instruct (LoRA)\n- Gemma 7B Instruct (LoRA)\n- Llama 2 7B Chat (LoRA)\n- Llama 3.1 8B Instruct (FP8)\n- Llama 3.2 11B Vision Instruct\n- Llama 3.2 1B Instruct\n- Llama 3.2 3B Instruct\n- Llama 3.3 70B Instruct (FP8)\n- Llama 4 Scout Instruct\n- Llama Guard 3 8B\n- Mistral 7B Instruct v0.2 (LoRA)\n- Mistral Small 3.1 24B Instruct\n- Qwen 2.5 Coder 32B Instruct\n- Qwen QwQ 32B\n\n</tbody></table>\n\n\n\n## Providers with trial credits\n\n### [Fireworks](https://fireworks.ai/)\n\n**Credits:** $1\n\n**Models:** [Various open models](https://fireworks.ai/models)\n\n### [Baseten](https://app.baseten.co/)\n\n**Credits:** $30\n\n**Models:** [Any supported model - pay by compute time](https://www.baseten.co/library/)\n\n### [Nebius](https://tokenfactory.nebius.com/)\n\n**Credits:** $1\n\n**Models:** [Various open models](https://tokenfactory.nebius.com/models)\n\n### [Novita](https://novita.ai/?ref=ytblmjc&utm_source=affiliate)\n\n**Credits:** $0.5 for 1 year\n\n**Models:** [Various open model",
    "strategic_keywords": [
      "llm",
      "inference"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 15,
      "novelty": 4,
      "productize": 11,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 4,
      "total": 65
    },
    "strategic_score": 65
  },
  {
    "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": 116944,
    "forks": 17712,
    "stars_this_period": 96,
    "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": 119,
      "created_at": "2020-09-28T15:36:08Z",
      "pushed_at": "2026-06-25T01:50:33Z",
      "homepage": "https://rustdesk.com",
      "default_branch": "master",
      "forks": 17712,
      "watchers": 607,
      "archived": false,
      "size_kb": 72446
    },
    "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": 14,
      "relevance": 8,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 8,
      "total": 69
    },
    "strategic_score": 69
  },
  {
    "owner": "ChromeDevTools",
    "name": "chrome-devtools-mcp",
    "full_name": "ChromeDevTools/chrome-devtools-mcp",
    "url": "https://github.com/ChromeDevTools/chrome-devtools-mcp",
    "description": "Chrome DevTools for coding agents",
    "language": "TypeScript",
    "total_stars": 44432,
    "forks": 2874,
    "stars_this_period": 96,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "browser",
        "chrome",
        "chrome-devtools",
        "debugging",
        "devtools",
        "mcp",
        "mcp-server",
        "puppeteer"
      ],
      "license": "Apache-2.0",
      "open_issues": 85,
      "created_at": "2025-09-11T10:39:55Z",
      "pushed_at": "2026-06-25T15:37:48Z",
      "homepage": "https://npmjs.org/package/chrome-devtools-mcp",
      "default_branch": "main",
      "forks": 2874,
      "watchers": 167,
      "archived": false,
      "size_kb": 8751
    },
    "readme_content": "# Chrome DevTools for agents\n\n[![npm chrome-devtools-mcp package](https://img.shields.io/npm/v/chrome-devtools-mcp.svg)](https://npmjs.org/package/chrome-devtools-mcp)\n\nChrome DevTools for agents (`chrome-devtools-mcp`) lets your coding agent (such as Antigravity, Claude, Cursor or Copilot)\ncontrol and inspect a live Chrome browser. It acts as a Model-Context-Protocol\n(MCP) server, giving your AI coding assistant access to the full power of\nChrome DevTools for reliable automation, in-depth debugging, and performance analysis.\nA [CLI](docs/cli.md) is also provided for use without MCP.\n\n## [Tool reference](./docs/tool-reference.md) | [Changelog](./CHANGELOG.md) | [Contributing](./CONTRIBUTING.md) | [Troubleshooting](./docs/troubleshooting.md) | [Design Principles](./docs/design-principles.md)\n\n## Key features\n\n- **Get performance insights**: Uses [Chrome\n  DevTools](https://github.com/ChromeDevTools/devtools-frontend) to record\n  traces and extract actionable performance insights.\n- **Advanced browser debugging**: Analyze network requests, take screenshots and\n  check browser console messages (with source-mapped stack traces).\n- **Reliable automation**. Uses\n  [puppeteer](https://github.com/puppeteer/puppeteer) to automate actions in\n  Chrome and automatically wait for action results.\n\n## Disclaimers\n\n`chrome-devtools-mcp` exposes content of the browser instance to the MCP clients\nallowing them to inspect, debug, and modify any data in the browser or DevTools.\nAvoid sharing sensitive or personal information that you don't want to share with\nMCP clients.\n\n`chrome-devtools-mcp` officially supports Google Chrome and [Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing/) only.\nOther Chromium-based browsers may work, but this is not guaranteed, and you may encounter unexpected behavior. Use at your own discretion.\nWe are committed to providing fixes and support for the latest version of [Extended Stable Chrome](https://chromiumdash.appspot.com/schedule).\n\nPerformance tools may send trace URLs to the Google CrUX API to fetch real-user\nexperience data. This helps provide a holistic performance picture by\npresenting field data alongside lab data. This data is collected by the [Chrome\nUser Experience Report (CrUX)](https://developer.chrome.com/docs/crux). To disable\nthis, run with the `--no-performance-crux` flag.\n\n## **Usage statistics**\n\nGoogle collects usage statistics (such as tool invocation success rates, latency, and environment information) to improve the reliability and performance of Chrome DevTools MCP.\n\nData collection is **enabled by default**. You can opt-out by passing the `--no-usage-statistics` flag when starting the server:\n\n```json\n\"args\": [\"-y\", \"chrome-devtools-mcp@latest\", \"--no-usage-statistics\"]\n```\n\nGoogle handles this data in accordance with the [Google Privacy Policy](https://policies.google.com/privacy).\n\nGoogle's collection of usage statistics for Chrome DevTools MCP is independent from the Chrome browser's usage statistics. Opting out of Chrome metrics does not automatically opt you out of this tool, and vice-versa.\n\nCollection is disabled if `CHROME_DEVTOOLS_MCP_NO_USAGE_STATISTICS` or `CI` env variables are set.\n\n## Update checks\n\nBy default, the server periodically checks the npm registry for updates and logs a notification when a newer version is available.\nYou can disable these update checks by setting the `CHROME_DEVTOOLS_MCP_NO_UPDATE_CHECKS` environment variable.\n\n## Requirements\n\n- [Node.js](https://nodejs.org/) [LTS](https://github.com/nodejs/Release#release-schedule) version.\n- [Chrome](https://www.google.com/chrome/) current stable version or newer.\n- [npm](https://www.npmjs.com/)\n\n## Getting started\n\nAdd the following config to your MCP client:\n\n```json\n{\n  \"mcpServers\": {\n    \"chrome-devtools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"chrome-devtools-mcp@latest\"]\n    }\n  }\n}\n```\n\n> [!NOTE]\n> Using `chrome-devtools-mcp@latest` ensures that your MCP client will always use the latest version of the Chrome DevTools MCP server.\n\nIf you are interested in doing only basic browser tasks, use the `--slim` mode:\n\n```json\n{\n  \"mcpServers\": {\n    \"chrome-devtools\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"chrome-devtools-mcp@latest\", \"--slim\", \"--headless\"]\n    }\n  }\n}\n```\n\nSee [Slim tool reference](./docs/slim-tool-reference.md).\n\n### MCP Client configuration\n\n<details>\n  <summary>Amp</summary>\n  Follow https://ampcode.com/manual#mcp and use the config provided above. You can also install the Chrome DevTools MCP server using the CLI:\n\n```bash\namp mcp add chrome-devtools -- npx chrome-devtools-mcp@latest\n```\n\n</details>\n\n<details>\n  <summary>Antigravity</summary>\n\nTo use the Chrome DevTools MCP server follow the instructions from <a href=\"https://antigravity.google/docs/mcp\">Antigravity's docs</a> to install a custom MCP server. Add the following config to the MCP servers config:\n\n```bash\n{\n  \"mcpServers\": {\n    \"chrome-devtools\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"chrome-devtools-mcp@latest\",\n        \"--browser-url=http://127.0.0.1:9222\",\n        \"-y\"\n      ]\n    }\n  }\n}\n```\n\nThis will make the Chrome DevTools MCP server automatically connect to the browser that Antigravity is using. If you are not using port 9222, make sure to adjust accordingly.\n\nChrome DevTools MCP will not start the browser instance automatically using this approach because the Chrome DevTools MCP server connects to Antigravity's built-in browser. If the browser is not already running, you have to start it first by clicking the Chrome icon at the top right corner.\n\n</details>\n\n<details>\n  <summary>Claude Code</summary>\n\n**Install via CLI (MCP only)**\n\nUse the Claude Code CLI to add the Chrome DevTools MCP server (<a href=\"https://code.claude.com/docs/en/mcp\">guide</a>):\n\n```bash\nclaude mcp add chrome-devtools --scope user npx chrome-devtools-mcp@latest\n```\n\n**Install as a Plugin (MCP + Skills)**\n\n> [!NOTE]\n> If you already had Chrome DevTools MCP installed previously for Claude Code, make sure to remove it first from your installation and configuration files.\n\nTo install Chrome DevTools MCP with skills, add the marketplace registry in Claude Code:\n\n```sh\n/plugin marketplace add ChromeDevTools/chrome-devtools-mcp\n```\n\nThen, install the plugin:\n\n```sh\n/plugin install chrome-devtools-mcp@chrome-devtools-plugins\n```\n\nRestart Claude Code to have the MCP server and skills load (check with `/skills`).\n\n> [!TIP]\n> If the plugin installation fails with a `Failed to clone repository` error (e.g., HTTPS connectivity issues behind a corporate firewall), see the [troubleshooting guide](./docs/troubleshooting.md#claude-code-plugin-installation-fails-with-failed-to-clone-repository) for workarounds, or use the CLI installation method above instead.\n\n</details>\n\n<details>\n  <summary>Cline</summary>\n  Follow https://docs.cline.bot/mcp/configuring-mcp-servers and use the config provided above.\n</details>\n\n<details>\n  <summary>Codex</summary>\n  Follow the <a href=\"https://developers.openai.com/codex/mcp/#configure-with-the-cli\">configure MCP guide</a>\n  using the standard config from above. You can also install the Chrome DevTools MCP server using the Codex CLI:\n\n```bash\ncodex mcp add chrome-devtools -- npx chrome-devtools-mcp@latest\n```\n\n**On Windows 11**\n\nConfigure the Chrome install location and increase the startup timeout by updating `.codex/config.toml` and adding the following `env` and `startup_timeout_ms` parameters:\n\n```\n[mcp_servers.chrome-devtools]\ncommand = \"cmd\"\nargs = [\n    \"/c\",\n    \"npx\",\n    \"-y\",\n    \"chrome-devtools-mcp@latest\",\n]\nenv = { SystemRoot=\"C:\\\\Windows\", PROGRAMFILES=\"C:\\\\Program Files\" }\nstartup_timeout_ms = 20_000\n```\n\n</details>\n\n<details>\n  <summary>Command Code</summary>\n\nUse the Command Code CLI to add the Chrome DevTools MCP server (<a href=\"https://commandcode.ai/docs/mcp\">MCP guide</a>):\n\n```bash\ncmd mcp add chrome-devtools --scope user npx chrome-devtools-mcp@latest\n```\n\n</details>\n\n<details>\n  <summary>Copilot CLI</summary>\n\nStart Copilot CLI:\n\n```\ncopilot\n```\n\nStart the dialog to add a new MCP server by running:\n\n```\n/mcp add\n```\n\nConfigure the following fields and press `CTRL+S` to save the configuration:\n\n- **Server name:** `chrome-devtools`\n- **Server Type:** `[1] Local`\n- **Command:** `npx -y chrome-devtools-mcp@latest`\n\n</details>\n\n<details>\n  <summary>Copilot / VS Code</summary>\n\n**Install as a Plugin (Recommended)**\n\nThe easiest way to get up and running is to install `chrome-devtools-mcp` as an agent plugin.\nThis bundles the **MCP server** and all **skills** together, so your agent gets both the tools\nand the expert guidance it needs to use them effectively.\n\n1.  Open the **Command Palette** (`Cmd+Shift+P` on macOS or `Ctrl+Shift+P` on Windows/Linux).\n2.  Search for and run the **Chat: Install Plugin From Source** command.\n3.  Paste in our repository name: `ChromeDevTools/chrome-devtools-mcp`.\n\nThat's it! Your agent is now supercharged with Chrome DevTools capabilities.\n\n---\n\n**Install as an MCP Server (MCP only)**\n\n**Click the button to install:**\n\n[<img src=\"https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Server&color=0098FF\" alt=\"Install in VS Code\">](https://vscode.dev/redirect/mcp/install?name=io.github.ChromeDevTools%2Fchrome-devtools-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22chrome-devtools-mcp%22%5D%2C%22env%22%3A%7B%7D%7D)\n\n[<img src=\"https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20Server&color=24bfa5\" alt=\"Install in VS Code Insiders\">](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522io.github.ChromeDevTools%252Fchrome-devtools-mcp%2522%252C%2522config%2522%253A%257B%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522-y%2522%252C%2522chrome-devtools-mcp%2522%255D%252C%2522env%2522%253A%257B%257D%257D%257D)\n\n**Or install manually:**\n\nFollow the VS Code [MCP configuration guide](https://code.visualstudio.com/docs/copilot/chat/mcp-servers#_add-an-mcp-server) using the standard config from above, or use the CLI:\n\nFor macOS and Linux:\n\n```bash\ncode --add-mcp '{\"name\":\"io.github.ChromeDevTools/chrome-devtools-mcp\",\"command\":\"npx\",\"args\":[\"-y\",\"chrome-devtools-mcp\"],\"env\":{}}'\n```\n\nFor Windows (PowerShell):\n\n```powershell\ncode --add-mcp '{\"\"\"name\"\"\":\"\"\"io.github.ChromeDevTools/chrome-devtools-mcp\"\"\",\"\"\"command\"\"\":\"\"\"npx\"\"\",\"\"\"args\"\"\":[\"\"\"-y\"\"\",\"\"\"chrome-devtools-mcp\"\"\"]}'\n```\n\n</details>\n\n<details>\n  <summary>Cursor</summary>\n\n**Click the button to install:**\n\n[<img src=\"https://cursor.com/deeplink/mcp-install-dark.svg\" alt=\"Install in Cursor\">](https://cursor.com/en/install-mcp?name=chrome-devtools&config=eyJjb21tYW5kIjoibnB4IC15IGNocm9tZS1kZXZ0b29scy1tY3BAbGF0ZXN0In0%3D)\n\n**Or install manually:**\n\nGo to `Cursor Settings` -> `MCP` -> `New MCP Server`. Use the config provided above.\n\n</details>\n\n<details>\n  <summary>Factory CLI</summary>\nUse the Factory CLI to add the Chrome DevTools MCP server (<a href=\"https://docs.factory.ai/cli/configuration/mcp\">guide</a>):\n\n```bash\ndroid mcp add chrome-devtools \"npx -y chrome-devtools-mcp@latest\"\n```\n\n</details>\n\n<details>\n  <summary>Gemini CLI</summary>\nInstall the Chrome DevTools MCP server using the Gemini CLI.\n\n**Project wide:**\n\n```bash\n# Either MCP only:\ngemini mcp add chrome-devtools npx chrome-devtools-mcp@latest\n# Or as a Gemini extension (MCP+Skills):\ngemini extensions install --auto-update https://github.com/ChromeDevTools/chrome-devtools-mcp\n```\n\n**Globally:**\n\n```bash\ngemini mcp add -s user chrome-devtools npx chrome-devtools-mcp@latest\n```\n\nAlternatively, follow the <a href=\"https://github.com/google-gemini/gemini-cli/blob/main/docs/tools/mcp-server.md#how-to-set-up-your-mcp-server\">MCP guide</a> and use the standard config from above.\n\n</details>\n\n<details>\n  <summary>Gemini Code Assist</summary>\n  Follow the <a href=\"https://cloud.google.com/gemini/docs/codeas",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"chrome-devtools-mcp\",\n  \"version\": \"1.4.0\",\n  \"description\": \"MCP server for Chrome DevTools\",\n  \"type\": \"module\",\n  \"bin\": {\n    \"chrome-devtools-mcp\": \"./build/src/bin/chrome-devtools-mcp.js\",\n    \"chrome-devtools\": \"./build/src/bin/chrome-devtools.js\"\n  },\n  \"main\": \"./build/src/index.js\",\n  \"scripts\": {\n    \"cli:generate\": \"node scripts/generate-cli.ts\",\n    \"clean\": \"node -e \\\"require('fs').rmSync('build', {recursive: true, force: true})\\\"\",\n    \"bundle\": \"npm run clean && npm run build && rollup -c rollup.config.mjs && node -e \\\"require('fs').rmSync('build/node_modules', {recursive: true, force: true})\\\" && node scripts/append-lighthouse-notices.ts\",\n    \"build\": \"tsc && node scripts/post-build.ts\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"format\": \"eslint --cache --fix . && prettier --write --cache .\",\n    \"check-format\": \"eslint --cache . && prettier --check --cache .;\",\n    \"gen\": \"npm run build && npm run docs:generate && npm run cli:generate && npm run update-metrics && npm run format\",\n    \"docs:generate\": \"node scripts/generate-docs.ts\",\n    \"start\": \"npm run build && node build/src/bin/chrome-devtools-mcp.js\",\n    \"start-debug\": \"DEBUG=mcp:* DEBUG_COLORS=false npm run build && node build/src/bin/chrome-devtools-mcp.js\",\n    \"test\": \"npm run build && node scripts/test.mjs\",\n    \"test:no-build\": \"node scripts/test.mjs\",\n    \"test:only\": \"npm run build && node scripts/test.mjs --test-only\",\n    \"test:update-snapshots\": \"npm run build && node scripts/test.mjs --test-update-snapshots\",\n    \"prepare\": \"node scripts/prepare.ts\",\n    \"verify-server-json-version\": \"node scripts/verify-server-json-version.ts\",\n    \"update-lighthouse\": \"node scripts/update-lighthouse.ts\",\n    \"update-metrics\": \"node scripts/update_metrics.ts\",\n    \"verify-npm-package\": \"node scripts/verify-npm-package.mjs\",\n    \"eval\": \"npm run build && node scripts/eval_gemini.ts\",\n    \"count-tokens\": \"node scripts/count_tokens.ts\"\n  },\n  \"files\": [\n    \"build/src\",\n    \"LICENSE\",\n    \"skills\",\n    \"!*.tsbuildinfo\",\n    \"!*.js.map\"\n  ],\n  \"repository\": \"ChromeDevTools/chrome-devtools-mcp\",\n  \"author\": \"Google LLC\",\n  \"license\": \"Apache-2.0\",\n  \"bugs\": {\n    \"url\": \"https://github.com/ChromeDevTools/chrome-devtools-mcp/issues\"\n  },\n  \"homepage\": \"https://github.com/ChromeDevTools/chrome-devtools-mcp#readme\",\n  \"mcpName\": \"io.github.ChromeDevTools/chrome-devtools-mcp\",\n  \"devDependencies\": {\n    \"@eslint/js\": \"^9.35.0\",\n    \"@google/genai\": \"^2.0.1\",\n    \"@modelcontextprotocol/sdk\": \"1.29.0\",\n    \"@rollup/plugin-commonjs\": \"^29.0.0\",\n    \"@rollup/plugin-json\": \"^6.1.0\",\n    \"@rollup/plugin-node-resolve\": \"^16.0.3\",\n    \"@stylistic/eslint-plugin\": \"^5.4.0\",\n    \"@toon-format/toon\": \"^2.2.0\",\n    \"@types/debug\": \"^4.1.12\",\n    \"@types/filesystem\": \"^0.0.36\",\n    \"@types/node\": \"^26.0.0\",\n    \"@types/semver\": \"^7.7.1\",\n    \"@types/sinon\": \"^21.0.0\",\n    \"@types/yargs\": \"^17.0.33\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.43.0\",\n    \"@typescript-eslint/parser\": \"^8.43.0\",\n    \"chrome-devtools-frontend\": \"1.0.1650035\",\n    \"core-js\": \"3.49.0\",\n    \"debug\": \"4.4.3\",\n    \"eslint\": \"^9.35.0\",\n    \"eslint-import-resolver-typescript\": \"^4.4.4\",\n    \"eslint-plugin-import\": \"^2.32.0\",\n    \"globals\": \"^17.0.0\",\n    \"lighthouse\": \"13.4.0\",\n    \"prettier\": \"^3.6.2\",\n    \"puppeteer\": \"25.2.0\",\n    \"rollup\": \"4.62.2\",\n    \"rollup-plugin-cleanup\": \"^3.2.1\",\n    \"rollup-plugin-license\": \"^3.6.0\",\n    \"semver\": \"^7.7.4\",\n    \"sinon\": \"^22.0.0\",\n    \"typescript\": \"^6.0.2\",\n    \"typescript-eslint\": \"^8.43.0\",\n    \"urlpattern-polyfill\": \"^10.1.0\",\n    \"yargs\": \"18.0.0\"\n  },\n  \"engines\": {\n    \"node\": \"^20.19.0 || ^22.12.0 || >=23\"\n  },\n  \"overrides\": {\n    \"puppeteer-core\": \"$puppeteer\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "automation",
      "protocol"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 14,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 91
    },
    "strategic_score": 91
  },
  {
    "owner": "MHSanaei",
    "name": "3x-ui",
    "full_name": "MHSanaei/3x-ui",
    "url": "https://github.com/MHSanaei/3x-ui",
    "description": "Xray panel supporting multi-protocol multi-user expire day & traffic & IP limit (Vmess, Vless, Trojan, ShadowSocks, Wireguard, Hysteria, Tunnel, Mixed, HTTP, Tun)",
    "language": "Go",
    "total_stars": 41516,
    "forks": 7739,
    "stars_this_period": 94,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "ech",
        "fail2ban",
        "http",
        "hysteria2",
        "mixed",
        "nodes",
        "post-quantum",
        "reality",
        "shadowsocks",
        "shadowsocks2022",
        "tls",
        "trojan",
        "tun",
        "tunnel",
        "vless",
        "vmess",
        "wireguard",
        "x25519",
        "xhttp"
      ],
      "license": "GPL-3.0",
      "open_issues": 93,
      "created_at": "2023-02-09T19:16:57Z",
      "pushed_at": "2026-06-25T22:01:31Z",
      "homepage": "https://t.me/XrayUI",
      "default_branch": "main",
      "forks": 7739,
      "watchers": 272,
      "archived": false,
      "size_kb": 50416
    },
    "readme_content": "[English](/README.md) | [فارسی](/README.fa_IR.md) | [العربية](/README.ar_EG.md) | [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md) | [Türkçe](/README.tr_TR.md)\n\n<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"./media/3x-ui-dark.png\">\n    <img alt=\"3x-ui\" src=\"./media/3x-ui-light.png\">\n  </picture>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/MHSanaei/3x-ui/releases\"><img src=\"https://img.shields.io/github/v/release/mhsanaei/3x-ui\" alt=\"Release\"></a>\n  <a href=\"https://github.com/MHSanaei/3x-ui/actions\"><img src=\"https://img.shields.io/github/actions/workflow/status/mhsanaei/3x-ui/release.yml.svg\" alt=\"Build\"></a>\n  <a href=\"#\"><img src=\"https://img.shields.io/github/go-mod/go-version/mhsanaei/3x-ui.svg\" alt=\"GO Version\"></a>\n  <a href=\"https://github.com/MHSanaei/3x-ui/releases/latest\"><img src=\"https://img.shields.io/github/downloads/mhsanaei/3x-ui/total.svg\" alt=\"Downloads\"></a>\n  <a href=\"https://www.gnu.org/licenses/gpl-3.0.en.html\"><img src=\"https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true\" alt=\"License\"></a>\n  <a href=\"https://pkg.go.dev/github.com/mhsanaei/3x-ui/v3\"><img src=\"https://pkg.go.dev/badge/github.com/mhsanaei/3x-ui/v3.svg\" alt=\"Go Reference\"></a>\n  <a href=\"https://goreportcard.com/report/github.com/mhsanaei/3x-ui/v3\"><img src=\"https://goreportcard.com/badge/github.com/mhsanaei/3x-ui/v3\" alt=\"Go Report Card\"></a>\n</p>\n\n**3X-UI** is an advanced, open-source web control panel for managing [Xray-core](https://github.com/XTLS/Xray-core) servers. It provides a clean, multi-language interface for deploying, configuring, and monitoring a wide range of proxy and VPN protocols — from a single VPS to multi-node deployments.\n\nBuilt as an enhanced fork of the original X-UI project, 3X-UI adds broader protocol support, improved stability, per-client traffic accounting, and many quality-of-life features.\n\n> [!IMPORTANT]\n> This project is intended for personal use only. Please do not use it for illegal purposes or in a production environment.\n\n## Features\n\n- **Multi-protocol inbounds** — VLESS, VMess, Trojan, Shadowsocks, WireGuard, Hysteria2, HTTP, SOCKS (Mixed), Dokodemo-door / Tunnel, and TUN.\n- **Modern transports & security** — TCP (Raw), mKCP, WebSocket, gRPC, HTTPUpgrade, and XHTTP, secured with TLS, XTLS, and REALITY.\n- **Fallbacks** — serve multiple protocols on a single port (e.g. VLESS and Trojan on 443) using Xray's fallback support.\n- **Per-client management** — traffic quotas, expiry dates, IP limits, live online status, and one-click share links, QR codes, and subscriptions.\n- **Traffic statistics** — per inbound, per client, and per outbound, with reset controls.\n- **Multi-node support** — manage and scale across multiple servers from a single panel.\n- **Outbound & routing** — WARP, NordVPN, custom routing rules, load balancers, and outbound proxy chaining.\n- **Built-in subscription server** with multiple output formats and [custom page templates](docs/custom-subscription-templates.md).\n- **Telegram bot** for remote monitoring and management.\n- **RESTful API** with in-panel Swagger documentation.\n- **Flexible storage** — SQLite (default) or PostgreSQL.\n- **13 UI languages** with dark and light themes.\n- **Fail2ban integration** for enforcing per-client IP limits.\n\n## Screenshots\n\n<details>\n<summary>Click to expand</summary>\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"./media/01-overview-dark.png\">\n  <img alt=\"Overview\" src=\"./media/01-overview-light.png\">\n</picture>\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"./media/02-add-inbound-dark.png\">\n  <img alt=\"Inbounds\" src=\"./media/02-add-inbound-light.png\">\n</picture>\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"./media/03-add-client-dark.png\">\n  <img alt=\"Add client\" src=\"./media/03-add-client-light.png\">\n</picture>\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"./media/05-add-nodes-dark.png\">\n  <img alt=\"Configs\" src=\"./media/05-add-nodes-light.png\">\n</picture>\n\n</details>\n\n## Quick Start\n\n```bash\nbash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)\n```\n\nTo install a specific version, append its tag (e.g. `v3.4.0`):\n\n```bash\nbash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v3.4.0\n```\n\nTo install the rolling **dev** build (latest per-commit pre-release from `main`, not a stable release), pass `dev-latest`:\n\n```bash\nbash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) dev-latest\n```\n\nDuring installation a random username, password, and access path are generated. After installation, run `x-ui` to open the management menu, where you can start/stop the service, view or reset your login credentials, manage SSL certificates, and more.\n\nFor full documentation, please visit the [project Wiki](https://github.com/MHSanaei/3x-ui/wiki).\n\n### Unattended install & cloud images\n\nThe installer also runs **non-interactively** for cloud-init and golden images.\nSet `XUI_NONINTERACTIVE=1` (or pipe with no TTY) and it installs end-to-end with\nzero prompts, generating random credentials and writing them to\n`/etc/x-ui/install-result.env`. See [`deploy/`](deploy/) for:\n\n- [Cloud-init user-data](deploy/cloud-init/) — unattended install on any cloud (Hetzner/AWS/DO/Vultr/GCP/Azure/Oracle)\n- [Packer golden image](deploy/packer/) — build an AWS EC2 AMI + qcow2 (amd64/arm64) with per-instance credentials generated on first boot\n- [Amazon Lightsail](deploy/lightsail/) — launch script + reusable snapshot builder\n- [AWS Marketplace checklist](deploy/marketplace/aws/)\n\n## Supported Platforms\n\n**Operating systems:** Ubuntu, Debian, Armbian, Fedora, CentOS, RHEL, AlmaLinux, Rocky Linux, Oracle Linux, Amazon Linux, Virtuozzo, Arch, Manjaro, Parch, openSUSE (Tumbleweed / Leap), Alpine, and Windows.\n\n**Architectures:** `amd64` · `386` · `arm64` (aarch64) · `armv7` · `armv6` · `armv5` · `s390x`.\n\n## Database Options\n\n3X-UI supports two backends, chosen during the install:\n\n- **SQLite** (default) — a single file at `/etc/x-ui/x-ui.db`. Zero setup, ideal for small and medium deployments.\n- **PostgreSQL** — recommended for high client counts or multi-node setups. The installer can install PostgreSQL locally for you, or accept a DSN to an existing server.\n\nAt runtime the backend is selected via environment variables (the installer writes these to `/etc/default/x-ui` for you):\n\n```\nXUI_DB_TYPE=postgres\nXUI_DB_DSN=postgres://xui:password@127.0.0.1:5432/xui?sslmode=disable\n```\n\n### Migrating an existing SQLite install to PostgreSQL\n\n```bash\nx-ui migrate-db --dsn \"postgres://xui:password@127.0.0.1:5432/xui?sslmode=disable\"\n# then set XUI_DB_TYPE and XUI_DB_DSN in /etc/default/x-ui and restart:\nsystemctl restart x-ui\n```\n\nThe source SQLite file is left untouched; remove it manually once you have verified the new backend.\n\n### Docker\n\nThe default `docker compose up -d` keeps using SQLite. To run with the bundled PostgreSQL service, uncomment the two `XUI_DB_*` env lines in `docker-compose.yml` and start with the profile:\n\n```bash\ndocker compose --profile postgres up -d\n```\n\nThe image bundles Fail2ban (enabled by default) to enforce per-client **IP limits**. Fail2ban bans offenders with `iptables`, which requires the `NET_ADMIN` capability. `docker-compose.yml` already grants it via `cap_add`; if you start the container with `docker run` instead, add the capabilities yourself, otherwise bans are logged but never applied:\n\n```bash\ndocker run -d --cap-add=NET_ADMIN --cap-add=NET_RAW ... ghcr.io/mhsanaei/3x-ui\n```\n\n## Environment Variables\n\n| Variable | Description | Default |\n| --- | --- | --- |\n| `XUI_DB_TYPE` | Database backend: `sqlite` or `postgres` | `sqlite` |\n| `XUI_DB_DSN` | PostgreSQL connection string (when `XUI_DB_TYPE=postgres`) | — |\n| `XUI_DB_FOLDER` | Directory for the SQLite database file | `/etc/x-ui` |\n| `XUI_DB_MAX_OPEN_CONNS` | Maximum open connections (PostgreSQL pool) | — |\n| `XUI_DB_MAX_IDLE_CONNS` | Maximum idle connections (PostgreSQL pool) | — |\n| `XUI_INIT_WEB_BASE_PATH` | The initial URI path for the web panel | `/` |\n| `XUI_ENABLE_FAIL2BAN` | Enable Fail2ban-based IP-limit enforcement | `true` |\n| `XUI_LOG_LEVEL` | Log verbosity (`debug`, `info`, `warning`, `error`) | `info` |\n| `XUI_DEBUG` | Enable debug mode | `false` |\n| `XUI_TUNNEL_HEALTH_MONITOR` | Enable the tunnel health monitor (probes a URL and restarts xray after repeated failures; a restart drops all clients) | `false` |\n| `XUI_TUNNEL_HEALTH_PROXY` | Proxy the probe is sent through; point it at a local xray inbound so the probe tests the tunnel (e.g. `socks5://127.0.0.1:1080`). Empty means the probe only checks host connectivity | — |\n| `XUI_TUNNEL_HEALTH_URL` | URL probed for tunnel health | `https://www.cloudflare.com/cdn-cgi/trace` |\n| `XUI_TUNNEL_HEALTH_INTERVAL` | Interval between probes | `30s` |\n| `XUI_TUNNEL_HEALTH_TIMEOUT` | Per-probe timeout | `10s` |\n| `XUI_TUNNEL_HEALTH_FAILURES` | Consecutive failures before a restart is triggered | `3` |\n| `XUI_TUNNEL_HEALTH_COOLDOWN` | Minimum delay between consecutive restarts | `5m` |\n\n## Supported Languages\n\nThe panel UI is available in 13 languages:\n\nEnglish · فارسی · العربية · 中文（简体） · 中文（繁體） · Español · Русский · Українська · Türkçe · Tiếng Việt · 日本語 · Bahasa Indonesia · Português (Brasil)\n\n## Contributing\n\nContributions are welcome. Please read the [Contributing Guide](/CONTRIBUTING.md) before opening an issue or pull request.\n\n## A Special Thanks to\n\n- [alireza0](https://github.com/alireza0/)\n\n## Acknowledgment\n\n- [Iran v2ray rules](https://github.com/chocolate4u/Iran-v2ray-rules) (License: **GPL-3.0**): _Enhanced v2ray/xray and v2ray/xray-clients routing rules with built-in Iranian domains and a focus on security and adblocking._\n- [Russia v2ray rules](https://github.com/runetfreedom/russia-v2ray-rules-dat) (License: **GPL-3.0**): _This repository contains automatically updated V2Ray routing rules based on data on blocked domains and addresses in Russia._\n\n## Community Tools\n\nTools and integrations built by the community around 3x-ui.\n\n- [terraform-provider-3x-ui](https://github.com/batonogov/terraform-provider-threexui) (License: **MIT**): _Manage inbounds, clients, panel settings, and Xray configuration as code with Terraform / OpenTofu._\n\n## Support project\n\n**If this project is helpful to you, you may wish to give it a**:star2:\n\n<a href=\"https://www.buymeacoffee.com/MHSanaei\" target=\"_blank\">\n<img src=\"./media/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 70px !important;width: 277px !important;\" >\n</a>\n\n</br>\n<a href=\"https://nowpayments.io/donation/hsanaei\" target=\"_blank\" rel=\"noreferrer noopener\">\n   <img src=\"./media/donation-button-black.svg\" alt=\"Crypto donation button by NOWPayments\">\n</a>\n\n## Stargazers over Time\n\n[![Stargazers over time](https://starchart.cc/MHSanaei/3x-ui.svg?variant=adaptive)](https://starchart.cc/MHSanaei/3x-ui)\n",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/mhsanaei/3x-ui/v3\n\ngo 1.26.4\n\nrequire (\n\tgithub.com/gin-contrib/gzip v1.2.6\n\tgithub.com/gin-contrib/sessions v1.1.0\n\tgithub.com/gin-gonic/gin v1.12.0\n\tgithub.com/go-ldap/ldap/v3 v3.4.13\n\tgithub.com/go-playground/validator/v10 v10.30.3\n\tgithub.com/goccy/go-json v0.10.6\n\tgithub.com/goccy/go-yaml v1.19.2\n\tgithub.com/google/uuid v1.6.0\n\tgithub.com/gorilla/websocket v1.5.3\n\tgithub.com/joho/godotenv v1.5.1\n\tgithub.com/mymmrac/telego v1.10.0\n\tgithub.com/nicksnyder/go-i18n/v2 v2.6.1\n\tgithub.com/op/go-logging v0.0.0-20160315200505-970db520ece7\n\tgithub.com/robfig/cron/v3 v3.0.1\n\tgithub.com/shirou/gopsutil/v4 v4.26.5\n\tgithub.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e\n\tgithub.com/valyala/fasthttp v1.71.0\n\tgithub.com/xlzd/gotp v0.1.0\n\tgithub.com/xtls/xray-core v1.260327.1-0.20260622185510-b99c3e56574f\n\tgo.uber.org/atomic v1.11.0\n\tgolang.org/x/crypto v0.53.0\n\tgolang.org/x/sys v0.46.0\n\tgolang.org/x/text v0.38.0\n\tgoogle.golang.org/grpc v1.81.1\n\tgopkg.in/natefinch/lumberjack.v2 v2.2.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\tpgregory.net/rapid v1.3.0\n)\n\nrequire (\n\tgithub.com/pion/dtls/v3 v3.1.4 // indirect\n\tgithub.com/pion/logging v0.2.4 // indirect\n\tgithub.com/pion/stun/v3 v3.1.6 // indirect\n\tgithub.com/pion/transport/v4 v4.0.2 // indirect\n\tgithub.com/wlynxg/anet v0.0.5 // indirect\n\tgolang.zx2c4.com/wireguard/windows v1.0.1 // indirect\n)\n\nrequire (\n\tgithub.com/Azure/go-ntlmssp v0.1.1 // indirect\n\tgithub.com/andybalholm/brotli v1.2.1 // indirect\n\tgithub.com/apernet/quic-go v0.59.1-0.20260425001925-6c6cc9bcb716 // indirect\n\tgithub.com/bytedance/gopkg v0.1.4 // indirect\n\tgithub.com/bytedance/sonic v1.15.2 // indirect\n\tgithub.com/bytedance/sonic/loader v0.5.1 // indirect\n\tgithub.com/cloudflare/circl v1.6.3 // indirect\n\tgithub.com/cloudwego/base64x v0.1.7 // indirect\n\tgithub.com/ebitengine/purego v0.10.1 // indirect\n\tgithub.com/gabriel-vasile/mimetype v1.4.13 // indirect\n\tgithub.com/gin-contrib/sse v1.1.1 // 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/go-playground/locales v0.14.1 // indirect\n\tgithub.com/go-playground/universal-translator v0.18.1 // indirect\n\tgithub.com/google/btree v1.1.3 // indirect\n\tgithub.com/gorilla/context v1.1.2 // indirect\n\tgithub.com/gorilla/securecookie v1.1.2 // indirect\n\tgithub.com/gorilla/sessions v1.4.0 // indirect\n\tgithub.com/grbit/go-json v0.11.0 // indirect\n\tgithub.com/jackc/pgpassfile v1.0.0 // indirect\n\tgithub.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect\n\tgithub.com/jackc/pgx/v5 v5.10.0 // indirect\n\tgithub.com/jackc/puddle/v2 v2.2.2 // indirect\n\tgithub.com/jinzhu/inflection v1.0.0 // indirect\n\tgithub.com/jinzhu/now v1.1.5 // indirect\n\tgithub.com/json-iterator/go v1.1.12 // indirect\n\tgithub.com/juju/ratelimit v1.0.2 // indirect\n\tgithub.com/klauspost/compress v1.18.6\n\tgithub.com/klauspost/cpuid/v2 v2.3.0 // indirect\n\tgithub.com/leodido/go-urn v1.4.0 // indirect\n\tgithub.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e // indirect\n\tgithub.com/mattn/go-isatty v0.0.22 // indirect\n\tgithub.com/mattn/go-sqlite3 v1.14.45 // indirect\n\tgithub.com/miekg/dns v1.1.72 // 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/pelletier/go-toml/v2 v2.3.1 // indirect\n\tgithub.com/pires/go-proxyproto v0.12.0 // indirect\n\tgithub.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect\n\tgithub.com/quic-go/qpack v0.6.0 // indirect\n\tgithub.com/quic-go/quic-go v0.60.0 // indirect\n\tgithub.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af\n\tgithub.com/rogpeppe/go-internal v1.15.0 // indirect\n\tgithub.com/sagernet/sing v0.8.10 // indirect\n\tgithub.com/sagernet/sing-shadowsocks v0.2.9 // indirect\n\tgithub.com/tklauser/go-sysconf v0.4.0 // indirect\n\tgithub.com/tklauser/numcpus v0.12.0 // indirect\n\tgithub.com/twitchyliquid64/golang-asm v0.15.1 // indirect\n\tgithub.com/ugorji/go/codec v1.3.1 // indirect\n\tgithub.com/valyala/bytebufferpool v1.0.0 // indirect\n\tgithub.com/valyala/fastjson v1.6.10 // indirect\n\tgithub.com/vishvananda/netlink v1.3.1 // indirect\n\tgithub.com/vishvananda/netns v0.0.5 // indirect\n\tgithub.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f // indirect\n\tgithub.com/yusufpapurcu/wmi v1.2.4 // indirect\n\tgo.mongodb.org/mongo-driver/v2 v2.6.0 // indirect\n\tgo4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect\n\tgolang.org/x/arch v0.28.0 // indirect\n\tgolang.org/x/exp v0.0.0-20260611194520-c48552f49976 // indirect\n\tgolang.org/x/mod v0.37.0 // indirect\n\tgolang.org/x/net v0.56.0\n\tgolang.org/x/sync v0.21.0 // indirect\n\tgolang.org/x/time v0.15.0 // indirect\n\tgolang.org/x/tools v0.46.0 // indirect\n\tgolang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect\n\tgolang.zx2c4.com/wireguard v0.0.0-20260522210424-ecfc5a8d5446 // indirect\n\tgoogle.golang.org/genproto/googleapis/",
    "strategic_keywords": [
      "rag",
      "workflow",
      "protocol"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 14,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 8,
      "total": 86
    },
    "strategic_score": 86
  },
  {
    "owner": "thesysdev",
    "name": "openui",
    "full_name": "thesysdev/openui",
    "url": "https://github.com/thesysdev/openui",
    "description": "The Open Standard for Generative UI",
    "language": "TypeScript",
    "total_stars": 7420,
    "forks": 550,
    "stars_this_period": 93,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "agent",
        "agents",
        "ai",
        "generative-ui",
        "help-wanted",
        "javascript",
        "llm",
        "looking-for-contributors"
      ],
      "license": "MIT",
      "open_issues": 70,
      "created_at": "2024-12-02T10:40:06Z",
      "pushed_at": "2026-06-25T17:18:54Z",
      "homepage": "https://www.openui.com",
      "default_branch": "main",
      "forks": 550,
      "watchers": 30,
      "archived": false,
      "size_kb": 189338
    },
    "readme_content": "<div align=\"center\">\n\n<a href=\"https://www.openui.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n  <img \n    src=\"./assets/banner.png\" \n    alt=\"OpenUI - The Open Standard for Generative UI\" \n    width=\"100%\" \n    style=\"cursor: pointer;\"\n  >\n</a>\n\n# OpenUI - The Open Standard for Generative UI\n\n<p align=\"center\">\n  <a href=\"https://github.com/thesysdev/openui/actions/workflows/build-js.yml\"><img alt=\"Build\" src=\"https://github.com/thesysdev/openui/actions/workflows/build-js.yml/badge.svg\"></a>\n  <a href=\"./LICENSE\"><img alt=\"License: MIT\" src=\"https://img.shields.io/badge/License-MIT-blue.svg\"></a>\n  <a href=\"https://discord.com/invite/Pbv5PsqUSv\"><img alt=\"Discord\" src=\"https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fdiscord.com%2Fapi%2Fv10%2Finvites%2FPbv5PsqUSv%3Fwith_counts%3Dtrue&query=%24.approximate_presence_count&label=Discord&suffix=%20online&logo=discord&logoColor=white&color=5865F2\"></a>\n</p>\n\n<a href=\"https://trendshift.io/repositories/22357\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/22357\" alt=\"thesysdev%2Fopenui | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n\n</div>\n\nOpenUI is a full-stack Generative UI framework: a compact streaming-first language, a React runtime with built-in component libraries, and ready-to-use chat interfaces that are up to 67% more token-efficient than JSON.\n\n<div align=\"center\">\n\n[Docs](https://openui.com) · [Playground](https://www.openui.com/playground) · [Discord](https://discord.com/invite/Pbv5PsqUSv) · [Contributing](./CONTRIBUTING.md)\n\n</div>\n\n> **Important:** OpenUI has no official cryptocurrency, token, or coin. Any asset using the OpenUI name is unaffiliated with this project and is not endorsed by its maintainers.\n\n---\n\n## What is OpenUI\n\n<div align=\"center\">\n\n<img src=\"./assets/demo.gif\" alt=\"OpenUI Demo\" width=\"100%\">\n</div>\n\nAt the center of OpenUI is **OpenUI Lang**: a compact, streaming-first language for model-generated UI. Instead of treating model output as only text, OpenUI lets you define components, generate prompt instructions from that component library, and render structured UI as the model streams.\n\n**Core capabilities:**\n\n- **OpenUI Lang** - A compact language for structured UI generation designed for streaming output.\n- **Built-in component libraries** - Charts, forms, tables, layouts, and more, ready to use or extend.\n- **Prompt generation from your component library** - Generate model instructions directly from the components you allow.\n- **Streaming renderer** - Parse and render model output progressively in React as tokens arrive.\n- **Chat and app surfaces** - Use the same foundation for assistants, copilots, and broader interactive product flows.\n\n## Quick Start\n\n```bash\nnpx @openuidev/cli@latest create --name genui-chat-app\ncd genui-chat-app\necho \"OPENAI_API_KEY=sk-your-key-here\" > .env\nnpm run dev\n```\n\nThis is the fastest way to start with OpenUI. The scaffolded app gives you an end-to-end starting point with streaming, built-in UI, and OpenUI Lang support.\n\nWhat this gives you:\n\n- **OpenUI Lang support** - Start with structured UI generation built into the app flow.\n- **Library-driven prompts** - Generate instructions from your allowed component set.\n- **Streaming support** - Update the UI progressively as output arrives.\n- **Working app foundation** - Start from a ready-to-run example instead of wiring everything manually.\n\n## How it works\n\nYour components define what the model can generate.\n\n```mermaid\nflowchart LR\n    A[\"Component Library\"] --> B[\"System Prompt\"]\n    B --> C[\"LLM\"]\n    C --> D[\"OpenUI Lang Stream\"]\n    D --> E[\"Renderer\"]\n    E --> F[\"Live UI\"]\n```\n\n1. Define or reuse a component library.\n2. Generate a system prompt from that library.\n3. Send that prompt to your model.\n4. Stream OpenUI Lang output back to the client.\n5. Render the output progressively with Renderer.\n\nTry it yourself in the [Playground](https://www.openui.com/playground): generate UI live with the default component library.\n\n## Packages\n\n| Package                                                                                                    | Best for                                         | Description                                                                                                  |\n| :--------------------------------------------------------------------------------------------------------- | :----------------------------------------------- | :----------------------------------------------------------------------------------------------------------- |\n| [`@openuidev/lang-core`](./packages/lang-core)                                                             | Framework-agnostic parsing and prompt generation | Core parser, prompt-generation, runtime-evaluation, and type layer with no React, Vue, or Svelte dependency  |\n| [`@openuidev/react-lang`](./packages/react-lang)                                                           | React rendering runtimes                         | Define component libraries, generate prompts, and render streamed OpenUI Lang in React                       |\n| [`@openuidev/react-headless`](./packages/react-headless)                                                   | Bring-your-own React chat UI                     | Headless chat state, streaming adapters, and message format converters                                       |\n| [`@openuidev/react-ui`](./packages/react-ui)                                                               | Fastest path to a full React chat experience     | Prebuilt chat layouts, standalone UI primitives, and two built-in component libraries                        |\n| [`@openuidev/react-email`](./packages/react-email)                                                         | Email generation and HTML export                 | React Email component definitions plus prompt options for model-generated emails                             |\n| [`@openuidev/vue-lang`](./packages/vue-lang)                                                               | Vue integrations                                 | Vue 3 bindings for defining model-renderable components and rendering streamed OpenUI Lang                   |\n| [`@openuidev/svelte-lang`](./packages/svelte-lang)                                                         | Svelte integrations                              | Svelte 5 bindings for defining model-renderable components and rendering streamed OpenUI Lang                |\n| [`@openuidev/browser-bundle`](./packages/browser-bundle)                                                   | CDN, iframe, and no-build embeds                 | Prebuilt browser bundle that ships the renderer, UI library, React, and styles as script + stylesheet assets |\n| [`@openuidev/cli`](./packages/openui-cli)                                                                  | Project scaffolding and prompt generation        | CLI for creating new apps and generating system prompts or JSON schema from a library definition             |\n| [`@openuidev/openclaw-os-plugin`](https://github.com/thesysdev/openclaw-os/tree/main/packages/claw-plugin) | OpenClaw workspaces                              | OpenClaw OS plugin for serving OpenUI-powered OpenClaw workspaces                                            |\n\nCommon starting points:\n\n```bash\n# React app with OpenUI rendering and prebuilt components\nnpm install @openuidev/react-lang @openuidev/react-ui\n\n# Framework-agnostic backend or Edge prompt generation\nnpm install @openuidev/lang-core\n\n# Vue or Svelte runtime\nnpm install @openuidev/vue-lang\nnpm install @openuidev/svelte-lang\n```\n\n## Why OpenUI Lang\n\nOpenUI Lang is designed for model-generated UI that needs to be both structured and streamable.\n\n- **Streaming output** - Emit UI incrementally as tokens arrive.\n- **Token efficiency** - Up to 67% fewer tokens than equivalent JSON (see [benchmarks](./benchmarks)).\n- **Controlled rendering** - Restrict output to the components you define and register.\n- **Typed component contracts** - Define component props and structure up front with Zod schemas.\n\n### Token efficiency benchmarks\n\nMeasured with `tiktoken` (GPT-5 encoder). OpenUI Lang vs two JSON-based streaming formats across seven UI scenarios:\n\n| Scenario           | Vercel JSON-Render | Thesys C1 JSON | OpenUI Lang |  vs Vercel |      vs C1 |\n| ------------------ | -----------------: | -------------: | ----------: | ---------: | ---------: |\n| simple-table       |                340 |            357 |         148 |     -56.5% |     -58.5% |\n| chart-with-data    |                520 |            516 |         231 |     -55.6% |     -55.2% |\n| contact-form       |                893 |            849 |         294 |     -67.1% |     -65.4% |\n| dashboard          |               2247 |           2261 |        1226 |     -45.4% |     -45.8% |\n| pricing-page       |               2487 |           2379 |        1195 |     -52.0% |     -49.8% |\n| settings-panel     |               1244 |           1205 |         540 |     -56.6% |     -55.2% |\n| e-commerce-product |               2449 |           2381 |        1166 |     -52.4% |     -51.0% |\n| **TOTAL**          |          **10180** |       **9948** |    **4800** | **-52.8%** | **-51.7%** |\n\nFull methodology and reproduction steps in [`benchmarks/`](./benchmarks).\n\n## Documentation\n\nDetailed documentation is available at [openui.com](https://openui.com).\n\n## Repository structure\n\n```\nopenui/\n├── packages/\n│   ├── react-lang/       # Core runtime (parser, renderer, prompt generation)\n│   ├── react-headless/   # Headless chat state & streaming adapters\n│   ├── react-ui/         # Prebuilt chat layouts & component libraries\n│   ├── react-email/      # React Email component library for generated emails\n│   ├── lang-core/        # Framework-agnostic parser, prompt, and runtime layer\n│   ├── vue-lang/         # Vue runtime bindings for OpenUI Lang\n│   ├── svelte-lang/      # Svelte runtime bindings for OpenUI Lang\n│   ├── browser-bundle/   # Script-tag bundle for CDN / iframe / no-build embeds\n│   └── openui-cli/       # CLI for scaffolding & prompt generation\n├── skills/\n│   └── openui/           # Claude Code skill for AI-assisted development\n├── examples/\n│   └── openui-chat/      # Full working example app (Next.js)\n├── docs/                 # Documentation site (openui.com)\n└── benchmarks/           # Token efficiency benchmarks\n```\n\nGood places to start:\n\n- [openui.com](https://openui.com) for the full docs\n- [`examples/openui-chat`](./examples/openui-chat) for a working app\n- [`CONTRIBUTING.md`](./CONTRIBUTING.md) if you want to contribute\n\n## Community\n\n- [Discord](https://discord.com/invite/Pbv5PsqUSv) - Ask questions, share what you're building\n- [GitHub Issues](https://github.com/thesysdev/openui/issues) - Report bugs or request features\n\n## How OpenUI compares\n\n| Feature                |             OpenUI |           json-render (Vercel) |     A2UI (Google) | CopilotKit OpenGenUI |\n| ---------------------- | -----------------: | -----------------------------: | ----------------: | -------------------: |\n| Tokens                 |                 1x |                             3x |                3x |                   4x |\n| Latency (60 tok/s)     |               4.9s |                          14.2s |             14.2s |                 ~20s |\n| Streaming              |                Yes |                            Yes |               Yes |              Partial |\n| Consistent output      |                Yes |                            Yes |               Yes |                   No |\n| Components             |   Library + custom |               Library + custom |       Custom only |                 None |\n| Multi-platform         | Web, mobile, email | Web, mobile, PDF, email, video | Web, iOS, Android |                  Web |\n| Built-in data fetching |                Yes |                             No |                No |              ",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"OpenUI\",\n  \"version\": \"1.0.0\",\n  \"description\": \"The open standard for generative UI — a streaming-first language, React runtime, and component libraries for building AI-powered chat and copilot interfaces\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"pnpm -r run test\"\n  },\n  \"devDependencies\": {\n    \"@arethetypeswrong/cli\": \"^0.18.2\",\n    \"@rolldown/binding-darwin-arm64\": \"1.0.0-rc.16\",\n    \"@typescript-eslint/eslint-plugin\": \"catalog:\",\n    \"eslint\": \"catalog:\",\n    \"eslint-config-prettier\": \"catalog:\",\n    \"eslint-plugin-prettier\": \"catalog:\",\n    \"eslint-plugin-react-hooks\": \"catalog:\",\n    \"eslint-plugin-react-refresh\": \"catalog:\",\n    \"eslint-plugin-storybook\": \"catalog:\",\n    \"eslint-plugin-unused-imports\": \"catalog:\",\n    \"prettier\": \"^3.2.5\",\n    \"prettier-plugin-organize-imports\": \"^3.2.4\",\n    \"publint\": \"^0.3.18\",\n    \"tsdown\": \"^0.21.7\",\n    \"typescript\": \"catalog:\"\n  },\n  \"keywords\": [\n    \"openui\",\n    \"generative-ui\",\n    \"react\",\n    \"ai\",\n    \"llm\",\n    \"streaming\",\n    \"chat\",\n    \"copilot\",\n    \"components\",\n    \"ui-framework\"\n  ],\n  \"homepage\": \"https://openui.com\",\n  \"author\": \"engineering@openui.com\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/thesysdev/openui.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/thesysdev/openui/issues\"\n  },\n  \"pnpm\": {\n    \"overrides\": {\n      \"langsmith@<0.6.0\": \"^0.6.0\",\n      \"ip-address@<10.1.1\": \">=10.1.1\",\n      \"postcss@<8.5.10\": \">=8.5.10\",\n      \"qs@<6.15.2\": \">=6.15.2\",\n      \"uuid@<11.1.1\": \"^11.1.1\",\n      \"cookie@<0.7.0\": \">=0.7.0\",\n      \"prismjs@<1.30.0\": \">=1.30.0\",\n      \"@ai-sdk/provider-utils@<=3.0.97\": \"^4.0.27\"\n    }\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "runtime",
      "llm",
      "workflow"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 14,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 91
    },
    "strategic_score": 91
  },
  {
    "owner": "microsoft",
    "name": "playwright",
    "full_name": "microsoft/playwright",
    "url": "https://github.com/microsoft/playwright",
    "description": "Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.",
    "language": "TypeScript",
    "total_stars": 91651,
    "forks": 5981,
    "stars_this_period": 85,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "automation",
        "chrome",
        "chromium",
        "e2e-testing",
        "electron",
        "end-to-end-testing",
        "firefox",
        "javascript",
        "playwright",
        "test",
        "test-automation",
        "testing",
        "testing-tools",
        "web",
        "webkit"
      ],
      "license": "Apache-2.0",
      "open_issues": 159,
      "created_at": "2019-11-15T18:32:42Z",
      "pushed_at": "2026-06-25T20:57:20Z",
      "homepage": "https://playwright.dev",
      "default_branch": "main",
      "forks": 5981,
      "watchers": 588,
      "archived": false,
      "size_kb": 236445
    },
    "readme_content": "# 🎭 Playwright\n\n[![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) <!-- GEN:chromium-version-badge -->[![Chromium version](https://img.shields.io/badge/chromium-150.0.7871.24-blue.svg?logo=google-chrome)](https://www.chromium.org/Home)<!-- GEN:stop --> <!-- GEN:firefox-version-badge -->[![Firefox version](https://img.shields.io/badge/firefox-151.0-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/)<!-- GEN:stop --> <!-- GEN:webkit-version-badge -->[![WebKit version](https://img.shields.io/badge/webkit-26.5-blue.svg?logo=safari)](https://webkit.org/)<!-- GEN:stop --> [![Join Discord](https://img.shields.io/badge/join-discord-informational)](https://aka.ms/playwright/discord)\n\n## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright)\n\nPlaywright is a framework for web automation and testing. It drives Chromium, Firefox, and WebKit with a single API — in your tests, in your scripts, and as a tool for AI agents.\n\n## Get Started\n\nChoose the path that fits your workflow:\n\n| | Best for | Install |\n|---|---|---|\n| **[Playwright Test](#playwright-test)** | End-to-end testing | `npm init playwright@latest` |\n| **[Playwright CLI](#playwright-cli)** | Coding agents (Claude Code, Copilot) | `npm i -g @playwright/cli@latest` |\n| **[Playwright MCP](#playwright-mcp)** | AI agents and LLM-driven automation | `npx @playwright/mcp@latest` |\n| **[Playwright Library](#playwright-library)** | Browser automation scripts | `npm i playwright` |\n| **[VS Code Extension](#vs-code-extension)** | Test authoring and debugging in VS Code | [Install from Marketplace](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) |\n\n---\n\n## Playwright Test\n\nPlaywright Test is a full-featured test runner built for end-to-end testing. It runs tests across Chromium, Firefox, and WebKit with full browser isolation, auto-waiting, and web-first assertions.\n\n### Install\n\n```bash\nnpm init playwright@latest\n```\n\nOr add manually:\n\n```bash\nnpm i -D @playwright/test\nnpx playwright install\n```\n\n### Write a test\n\n```TypeScript\nimport { test, expect } from '@playwright/test';\n\ntest('has title', async ({ page }) => {\n  await page.goto('https://playwright.dev/');\n  await expect(page).toHaveTitle(/Playwright/);\n});\n\ntest('get started link', async ({ page }) => {\n  await page.goto('https://playwright.dev/');\n  await page.getByRole('link', { name: 'Get started' }).click();\n  await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();\n});\n```\n\n### Run tests\n\n```bash\nnpx playwright test\n```\n\nTests run in parallel across all configured browsers, in headless mode by default. Each test gets a fresh browser context — full isolation with near-zero overhead.\n\n### Key capabilities\n\n**Auto-wait and web-first assertions.** No artificial timeouts. Playwright waits for elements to be actionable, and assertions automatically retry until conditions are met.\n\n**Locators.** Find elements with resilient locators that mirror how users see the page:\n\n```TypeScript\npage.getByRole('button', { name: 'Submit' })\npage.getByLabel('Email')\npage.getByPlaceholder('Search...')\npage.getByTestId('login-form')\n```\n\n**Test isolation.** Each test runs in its own browser context — equivalent to a fresh browser profile. Save authentication state once and reuse it across tests:\n\n```TypeScript\n// Save state after login\nawait page.context().storageState({ path: 'auth.json' });\n\n// Reuse in other tests\ntest.use({ storageState: 'auth.json' });\n```\n\n**Tracing.** Capture execution traces, screenshots, and videos on failure. Inspect every action, DOM snapshot, network request, and console message in the [Trace Viewer](https://playwright.dev/docs/trace-viewer):\n\n```TypeScript\n// playwright.config.ts\nexport default defineConfig({\n  use: {\n    trace: 'on-first-retry',\n  },\n});\n```\n\n```bash\nnpx playwright show-trace trace.zip\n```\n\n<!-- TODO: screenshot of trace viewer -->\n\n**Parallelism.** Tests run in parallel by default across all configured browsers.\n\n[Full testing documentation](https://playwright.dev/docs/intro)\n\n---\n\n## Playwright CLI\n\n[Playwright CLI](https://github.com/microsoft/playwright-cli) is a command-line interface for browser automation designed for coding agents. It's more token-efficient than MCP — commands avoid loading large tool schemas and accessibility trees into the model context.\n\n### Install\n\n```bash\nnpm install -g @playwright/cli@latest\n```\n\nOptionally install skills for richer agent integration:\n\n```bash\nplaywright-cli install --skills\n```\n\n### Usage\n\nPoint your coding agent at a task:\n\n```\nTest the \"add todo\" flow on https://demo.playwright.dev/todomvc using playwright-cli.\nTake screenshots for all successful and failing scenarios.\n```\n\nOr run commands directly:\n\n```bash\nplaywright-cli open https://demo.playwright.dev/todomvc/ --headed\nplaywright-cli type \"Buy groceries\"\nplaywright-cli press Enter\nplaywright-cli screenshot\n```\n\n### Session monitoring\n\nUse `playwright-cli show` to open a visual dashboard with live screencast previews of all running browser sessions. Click any session to zoom in and take remote control.\n\n```bash\nplaywright-cli show\n```\n\n<!-- TODO: screenshot of playwright-cli show dashboard -->\n\n[Full CLI documentation](https://playwright.dev/agent-cli/introduction) | [GitHub](https://github.com/microsoft/playwright-cli)\n\n---\n\n## Playwright MCP\n\nThe [Playwright MCP server](https://github.com/microsoft/playwright-mcp) gives AI agents full browser control through the [Model Context Protocol](https://modelcontextprotocol.io). Agents interact with pages using structured accessibility snapshots — no vision models or screenshots required.\n\n### Setup\n\nAdd to your MCP client (VS Code, Cursor, Claude Desktop, Windsurf, etc.):\n\n```json\n{\n  \"mcpServers\": {\n    \"playwright\": {\n      \"command\": \"npx\",\n      \"args\": [\"@playwright/mcp@latest\"]\n    }\n  }\n}\n```\n\n**One-click install for VS Code:**\n\n[<img src=\"https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20MCP%20Server&color=0098FF\" alt=\"Install in VS Code\" />](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522playwright%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522%2540playwright%252Fmcp%2540latest%2522%255D%257D)\n\n**For Claude Code:**\n\n```bash\nclaude mcp add playwright npx @playwright/mcp@latest\n```\n\n### How it works\n\nAsk your AI assistant to interact with any web page:\n\n```\nNavigate to https://demo.playwright.dev/todomvc and add a few todo items.\n```\n\nThe agent sees the page as a structured accessibility tree:\n\n```\n- heading \"todos\" [level=1]\n- textbox \"What needs to be done?\" [ref=e5]\n- listitem:\n  - checkbox \"Toggle Todo\" [ref=e10]\n  - text: \"Buy groceries\"\n```\n\nIt uses element refs like `e5` and `e10` to click, type, and interact — deterministically and without visual ambiguity. Tools cover navigation, form filling, screenshots, network mocking, storage management, and more.\n\n[Full MCP documentation](https://playwright.dev/mcp/introduction) | [GitHub](https://github.com/microsoft/playwright-mcp)\n\n---\n\n## Playwright Library\n\nUse `playwright` as a library for browser automation scripts — web scraping, PDF generation, screenshot capture, and any workflow that needs programmatic browser control without a test runner.\n\n### Install\n\n```bash\nnpm i playwright\n```\n\n### Examples\n\n**Take a screenshot:**\n\n```TypeScript\nimport { chromium } from 'playwright';\n\nconst browser = await chromium.launch();\nconst page = await browser.newPage();\nawait page.goto('https://playwright.dev/');\nawait page.screenshot({ path: 'screenshot.png' });\nawait browser.close();\n```\n\n**Generate a PDF:**\n\n```TypeScript\nimport { chromium } from 'playwright';\n\nconst browser = await chromium.launch();\nconst page = await browser.newPage();\nawait page.goto('https://playwright.dev/');\nawait page.pdf({ path: 'page.pdf', format: 'A4' });\nawait browser.close();\n```\n\n**Emulate a mobile device:**\n\n```TypeScript\nimport { chromium, devices } from 'playwright';\n\nconst browser = await chromium.launch();\nconst context = await browser.newContext(devices['iPhone 15']);\nconst page = await context.newPage();\nawait page.goto('https://playwright.dev/');\nawait page.screenshot({ path: 'mobile.png' });\nawait browser.close();\n```\n\n**Intercept network requests:**\n\n```TypeScript\nimport { chromium } from 'playwright';\n\nconst browser = await chromium.launch();\nconst page = await browser.newPage();\nawait page.route('**/*.{png,jpg,jpeg}', route => route.abort());\nawait page.goto('https://playwright.dev/');\nawait browser.close();\n```\n\n[Library documentation](https://playwright.dev/docs/library) | [API reference](https://playwright.dev/docs/api/class-playwright)\n\n---\n\n## VS Code Extension\n\nThe [Playwright VS Code extension](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) brings test running, debugging, and code generation directly into your editor.\n\n<!-- TODO: hero screenshot of VS Code with Playwright sidebar -->\n\n**Run and debug tests** from the editor with a single click. Set breakpoints, inspect variables, and step through test execution with a live browser view.\n\n**Generate tests with CodeGen.** Click \"Record new\" to open a browser — navigate and interact with your app while Playwright writes the test code for you.\n\n**Pick locators.** Hover over any element in the browser to see the best available locator, then click to copy it to your clipboard.\n\n**Trace Viewer integration.** Enable \"Show Trace Viewer\" in the sidebar to get a full execution trace after each test run — DOM snapshots, network requests, console logs, and screenshots at every step.\n\n[Install the extension](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) | [VS Code guide](https://playwright.dev/docs/getting-started-vscode)\n\n---\n\n## Cross-Browser Support\n\n|          | Linux | macOS | Windows |\n|   :---   | :---: | :---: | :---:   |\n| Chromium<sup>1</sup> <!-- GEN:chromium-version -->150.0.7871.24<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |\n| WebKit <!-- GEN:webkit-version -->26.5<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |\n| Firefox <!-- GEN:firefox-version -->151.0<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |\n\nHeadless and headed execution on all platforms. <sup>1</sup> Uses [Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing) by default.\n\n## Other Languages\n\nPlaywright is also available for [Python](https://playwright.dev/python/docs/intro), [.NET](https://playwright.dev/dotnet/docs/intro), and [Java](https://playwright.dev/java/docs/intro).\n\n## Resources\n\n* [Documentation](https://playwright.dev)\n* [API reference](https://playwright.dev/docs/api/class-playwright)\n* [MCP server](https://github.com/microsoft/playwright-mcp)\n* [CLI for coding agents](https://github.com/microsoft/playwright-cli)\n* [VS Code extension](https://github.com/microsoft/playwright-vscode)\n* [Contribution guide](CONTRIBUTING.md)\n* [Changelog](https://github.com/microsoft/playwright/releases)\n* [Discord](https://aka.ms/playwright/discord)\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"playwright-internal\",\n  \"private\": true,\n  \"version\": \"1.62.0-next\",\n  \"description\": \"A high-level API to automate web browsers\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/microsoft/playwright.git\"\n  },\n  \"homepage\": \"https://playwright.dev\",\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"author\": {\n    \"name\": \"Microsoft Corporation\"\n  },\n  \"license\": \"Apache-2.0\",\n  \"scripts\": {\n    \"ctest\": \"playwright test --config=tests/library/playwright.config.ts --project=chromium-*\",\n    \"ftest\": \"playwright test --config=tests/library/playwright.config.ts --project=firefox-*\",\n    \"wtest\": \"playwright test --config=tests/library/playwright.config.ts --project=webkit-*\",\n    \"wvtest\": \"playwright test --config=tests/webview/playwright.config.ts\",\n    \"atest\": \"playwright test --config=tests/android/playwright.config.ts\",\n    \"etest\": \"playwright test --config=tests/electron/playwright.config.ts\",\n    \"itest\": \"playwright test --config=tests/installation/playwright.config.ts\",\n    \"stest\": \"playwright test --config=tests/stress/playwright.config.ts\",\n    \"biditest\": \"playwright test --config=tests/bidi/playwright.config.ts\",\n    \"ttest\": \"node ./tests/playwright-test/stable-test-runner/node_modules/@playwright/test/cli test --config=tests/playwright-test/playwright.config.ts\",\n    \"ct\": \"playwright test tests/components/test-all.spec.js --reporter=list\",\n    \"test\": \"playwright test --config=tests/library/playwright.config.ts\",\n    \"test-mcp\": \"playwright test --config=tests/mcp/playwright.config.ts\",\n    \"ctest-mcp\": \"playwright test --config=tests/mcp/playwright.config.ts --project=chrome\",\n    \"test-extension\": \"playwright test --config=tests/extension/playwright.config.ts\",\n    \"eslint\": \"eslint --cache\",\n    \"tsc\": \"tsc -p .\",\n    \"doc\": \"node utils/doclint/cli.js\",\n    \"lint\": \"npm run eslint && npm run tsc && npm run doc && npm run check-deps && node utils/generate_channels.js && node utils/generate_types/ && npm run lint-tests && npm run test-types && npm run lint-packages\",\n    \"lint-packages\": \"node utils/workspace.js --ensure-consistent\",\n    \"lint-tests\": \"node utils/lint_tests.js\",\n    \"flint\": \"concurrently \\\"npm run eslint\\\" \\\"npm run tsc\\\" \\\"npm run doc\\\" \\\"npm run check-deps\\\" \\\"node utils/generate_channels.js\\\" \\\"npm run lint-tests\\\" \\\"npm run test-types\\\" \\\"npm run lint-packages\\\" \\\"node utils/doclint/linting-code-snippets/cli.js --js-only\\\"\",\n    \"clean\": \"node utils/build/clean.js\",\n    \"build\": \"node utils/build/build.js\",\n    \"watch\": \"node utils/build/build.js --watch --lint\",\n    \"test-types\": \"node utils/generate_types/ && concurrently \\\"tsc -p utils/generate_types/test/tsconfig.json\\\" \\\"tsc -p ./tests/\\\"\",\n    \"roll\": \"node utils/roll_browser.js\",\n    \"check-deps\": \"node utils/check_deps.js\",\n    \"build-android-driver\": \"./utils/build_android_driver.sh\",\n    \"innerloop\": \"playwright run-server --reuse-browser\",\n    \"test-playwright-cli\": \"playwright test --config=tests/mcp/playwright.config.ts --project=chrome cli-\",\n    \"playwright-cli\": \"node packages/playwright-core/lib/tools/cli-client/cli.js\",\n    \"playwright-cli-readme\": \"node utils/generate_cli_help.js --readme\"\n  },\n  \"workspaces\": [\n    \"packages/*\"\n  ],\n  \"devDependencies\": {\n    \"@actions/core\": \"^3.0.0\",\n    \"@actions/github\": \"^8.0.0\",\n    \"@babel/code-frame\": \"^7.27.1\",\n    \"@babel/core\": \"^7.28.0\",\n    \"@babel/helper-plugin-utils\": \"^7.27.1\",\n    \"@babel/parser\": \"^7.28.0\",\n    \"@babel/plugin-proposal-decorators\": \"^7.28.0\",\n    \"@babel/plugin-syntax-async-generators\": \"^7.8.4\",\n    \"@babel/plugin-syntax-import-attributes\": \"^7.27.1\",\n    \"@babel/plugin-syntax-json-strings\": \"^7.8.3\",\n    \"@babel/plugin-syntax-object-rest-spread\": \"^7.8.3\",\n    \"@babel/plugin-syntax-optional-catch-binding\": \"^7.8.3\",\n    \"@babel/plugin-transform-class-properties\": \"^7.27.1\",\n    \"@babel/plugin-transform-class-static-block\": \"^7.27.1\",\n    \"@babel/plugin-transform-explicit-resource-management\": \"^7.28.0\",\n    \"@babel/plugin-transform-export-namespace-from\": \"^7.27.1\",\n    \"@babel/plugin-transform-logical-assignment-operators\": \"^7.27.1\",\n    \"@babel/plugin-transform-modules-commonjs\": \"^7.27.1\",\n    \"@babel/plugin-transform-nullish-coalescing-operator\": \"^7.27.1\",\n    \"@babel/plugin-transform-numeric-separator\": \"^7.27.1\",\n    \"@babel/plugin-transform-optional-chaining\": \"^7.27.1\",\n    \"@babel/plugin-transform-private-methods\": \"^7.27.1\",\n    \"@babel/plugin-transform-private-property-in-object\": \"^7.27.1\",\n    \"@babel/plugin-transform-react-jsx\": \"^7.27.1\",\n    \"@babel/preset-typescript\": \"^7.27.1\",\n    \"@eslint/compat\": \"^1.3.2\",\n    \"@eslint/eslintrc\": \"^3.3.1\",\n    \"@eslint/js\": \"^9.34.0\",\n    \"@jest/expect-utils\": \"30.2.0\",\n    \"@modelcontextprotocol/sdk\": \"^1.28.0\",\n    \"@octokit/graphql-schema\": \"^15.26.0\",\n    \"@stylistic/eslint-plugin\": \"^5.2.3\",\n    \"@types/babel__code-frame\": \"^7.0.6\",\n    \"@types/babel__core\": \"^7.20.5\",\n    \"@types/babel__helper-plugin-utils\": \"^7.10.3\",\n    \"@types/babel__tr",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "rag",
      "llm",
      "workflow",
      "automation"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 14,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 91
    },
    "strategic_score": 91
  },
  {
    "owner": "denoland",
    "name": "deno",
    "full_name": "denoland/deno",
    "url": "https://github.com/denoland/deno",
    "description": "A modern runtime for JavaScript and TypeScript.",
    "language": "Rust",
    "total_stars": 107307,
    "forks": 6086,
    "stars_this_period": 67,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "deno",
        "javascript",
        "rust",
        "typescript"
      ],
      "license": "MIT",
      "open_issues": 1321,
      "created_at": "2018-05-15T01:34:26Z",
      "pushed_at": "2026-06-25T21:57:14Z",
      "homepage": "https://deno.com",
      "default_branch": "main",
      "forks": 6086,
      "watchers": 1426,
      "archived": false,
      "size_kb": 237928
    },
    "readme_content": "# Deno\n\n[![](https://img.shields.io/crates/v/deno.svg)](https://crates.io/crates/deno)\n[![Twitter badge][]][Twitter link] [![Bluesky badge][]][Bluesky link]\n[![Discord badge][]][Discord link] [![YouTube badge][]][YouTube link]\n\n<img align=\"right\" src=\"https://deno.land/logo.svg\" height=\"150px\" alt=\"the deno mascot dinosaur standing in the rain\">\n\n[Deno](https://deno.com)\n([/ˈdiːnoʊ/](https://ipa-reader.com/?text=%CB%88di%CB%90no%CA%8A), pronounced\n`dee-no`) is a JavaScript, TypeScript, and WebAssembly runtime with secure\ndefaults and a great developer experience. It's built on [V8](https://v8.dev/),\n[Rust](https://www.rust-lang.org/), and [Tokio](https://tokio.rs/).\n\nLearn more about the Deno runtime\n[in the documentation](https://docs.deno.com/runtime/manual).\n\n## Installation\n\nInstall the Deno runtime on your system using one of the commands below. Note\nthat there are a number of ways to install Deno - a comprehensive list of\ninstallation options can be found\n[here](https://docs.deno.com/runtime/manual/getting_started/installation).\n\nShell (Mac, Linux):\n\n```sh\ncurl -fsSL https://deno.land/install.sh | sh\n```\n\nPowerShell (Windows):\n\n```powershell\nirm https://deno.land/install.ps1 | iex\n```\n\n[Homebrew](https://formulae.brew.sh/formula/deno) (Mac):\n\n```sh\nbrew install deno\n```\n\n[Chocolatey](https://community.chocolatey.org/packages/deno) (Windows):\n\n```powershell\nchoco install deno\n```\n\n[WinGet](https://winstall.app/apps/DenoLand.Deno) (Windows):\n\n```powershell\nwinget install --id=DenoLand.Deno\n```\n\n[Scoop](https://scoop.sh/#/apps?q=deno&id=678d8fb557b611df996989c675b1099630a5bbee)\n(Windows):\n\n```powershell\nscoop install main/deno\n```\n\n### Build and install from source\n\nComplete instructions for building Deno from source can be found\n[here](https://github.com/denoland/deno/blob/main/.github/CONTRIBUTING.md#building-from-source).\n\n## Your first Deno program\n\nDeno can be used for many different applications, but is most commonly used to\nbuild web servers. Create a file called `server.ts` and include the following\nTypeScript code:\n\n```ts\nDeno.serve((_req: Request) => {\n  return new Response(\"Hello, world!\");\n});\n```\n\nRun your server with the following command:\n\n```sh\ndeno run --allow-net server.ts\n```\n\nThis should start a local web server on\n[http://localhost:8000](http://localhost:8000).\n\nLearn more about writing and running Deno programs\n[in the docs](https://docs.deno.com/runtime/manual).\n\n## Additional resources\n\n- **[Deno Docs](https://docs.deno.com)**: official guides and reference docs for\n  the Deno runtime, [Deno Deploy](https://deno.com/deploy), and beyond.\n- **[Deno Standard Library](https://jsr.io/@std)**: officially supported common\n  utilities for Deno programs.\n- **[JSR](https://jsr.io/)**: The open-source package registry for modern\n  JavaScript and TypeScript\n- **[Developer Blog](https://deno.com/blog)**: Product updates, tutorials, and\n  more from the Deno team.\n\n## Contributing\n\nWe appreciate your help! To contribute, please read our\n[contributing instructions](.github/CONTRIBUTING.md).\n\n[Build status - Cirrus]: https://github.com/denoland/deno/workflows/ci/badge.svg?branch=main&event=push\n[Build status]: https://github.com/denoland/deno/actions\n[Twitter badge]: https://img.shields.io/twitter/follow/deno_land.svg?style=social&label=Follow\n[Twitter link]: https://twitter.com/intent/follow?screen_name=deno_land\n[Bluesky badge]: https://img.shields.io/badge/Follow-whitesmoke?logo=bluesky\n[Bluesky link]: https://bsky.app/profile/deno.land\n[YouTube badge]: https://img.shields.io/youtube/channel/subscribers/UCqC2G2M-rg4fzg1esKFLFIw?style=social\n[YouTube link]: https://www.youtube.com/@deno_land\n[Discord badge]: https://img.shields.io/discord/684898665143206084?logo=discord&style=social\n[Discord link]: https://discord.gg/deno\n",
    "manifest_file": "Cargo.toml",
    "manifest_content": "# Copyright 2018-2026 the Deno authors. MIT license.\n\n[workspace]\nresolver = \"2\"\nmembers = [\n  \"cli\",\n  \"cli/lib\",\n  \"cli/rt\",\n  \"cli/rt_desktop\",\n  \"cli/snapshot\",\n  \"ext/bundle\",\n  \"ext/cache\",\n  \"ext/canvas\",\n  \"ext/cron\",\n  \"ext/crypto\",\n  \"ext/fetch\",\n  \"ext/ffi\",\n  \"ext/fs\",\n  \"ext/http\",\n  \"ext/image\",\n  \"ext/io\",\n  \"ext/kv\",\n  \"ext/napi\",\n  \"ext/napi/sym\",\n  \"ext/net\",\n  \"ext/node\",\n  \"ext/node_crypto\",\n  \"ext/node_sqlite\",\n  \"ext/rt_helper\",\n  \"ext/signals\",\n  \"ext/telemetry\",\n  \"ext/url\",\n  \"ext/web\",\n  \"ext/webgpu\",\n  \"ext/webidl\",\n  \"ext/websocket\",\n  \"ext/webstorage\",\n  \"libs/cache_dir\",\n  \"libs/cli_parser\",\n  \"libs/config\",\n  \"libs/core\",\n  \"libs/core/examples/snapshot\",\n  \"libs/core_testing\",\n  \"libs/crypto\",\n  \"libs/dcore\",\n  \"libs/dotenv\",\n  \"libs/eszip\",\n  \"libs/http_h1\",\n  \"libs/inspector_server\",\n  \"libs/lockfile\",\n  \"libs/maybe_sync\",\n  \"libs/napi_sys\",\n  \"libs/node_resolver\",\n  \"libs/node_shim\",\n  \"libs/npm\",\n  \"libs/npm_cache\",\n  \"libs/npm_installer\",\n  \"libs/npmrc\",\n  \"libs/ops\",\n  \"libs/ops/compile_test_runner\",\n  \"libs/package_json\",\n  \"libs/resolver\",\n  \"libs/serde_v8\",\n  \"libs/typescript_go_client\",\n  \"runtime\",\n  \"runtime/features\",\n  \"runtime/permissions\",\n  \"runtime/subprocess_windows\",\n  \"tests/bench\",\n  \"tests/bench_util\",\n  \"tests/ffi\",\n  \"tests/integration\",\n  \"tests/napi\",\n  \"tests/node_compat\",\n  \"tests/specs\",\n  \"tests/unit\",\n  \"tests/unit_node\",\n  \"tests/util/lib\",\n  \"tests/util/server\",\n  \"tests/util/test_macro\",\n  \"tools/bsdiff_helper\",\n]\n# tests/sqlite_extension is excluded because it requires rusqlite's \"loadable_extension\"\n# feature, which is incompatible with the \"session\" feature used by the rest of the workspace.\nexclude = [\"tests/util/std/hash/_wasm\", \"tests/sqlite_extension\"]\n\n[workspace.package]\nauthors = [\"the Deno authors\"]\nedition = \"2024\"\nlicense = \"MIT\"\nrepository = \"https://github.com/denoland/deno\"\n\n[workspace.dependencies]\ndeno_ast = { version = \"=0.53.2\", features = [\"transpiling\"] }\ndeno_core_icudata = \"0.77.0\"\ndeno_doc = \"=0.200.0\"\ndeno_error = \"=0.7.1\"\ndeno_graph = { version = \"=0.109.0\", default-features = false }\ndeno_lint = \"=0.84.1\"\ndeno_media_type = { version = \"=0.4.0\", features = [\"module_specifier\"] }\ndeno_native_certs = \"0.3.0\"\ndeno_path_util = \"=0.6.4\"\ndeno_semver = \"=0.10.0\"\ndeno_task_shell = \"=0.33.0\"\ndeno_terminal = \"=0.2.3\"\ndeno_unsync = { version = \"0.4.4\", default-features = false }\ndeno_whoami = \"0.1.0\"\nv8 = { version = \"149.4.0\", default-features = false, features = [\"simdutf\"] }\n\ndenokv_proto = \"0.13.0\"\ndenokv_remote = \"0.13.0\"\n# denokv_sqlite brings in bundled sqlite if we don't disable the default features\ndenokv_sqlite = { default-features = false, version = \"0.13.0\" }\n\n# exts\ndeno_bundle_runtime = { version = \"0.39.0\", path = \"./ext/bundle\" }\ndeno_cache = { version = \"0.185.0\", path = \"./ext/cache\" }\ndeno_canvas = { version = \"0.114.0\", path = \"./ext/canvas\" }\ndeno_cron = { version = \"0.132.0\", path = \"./ext/cron\" }\ndeno_crypto = { version = \"0.266.0\", path = \"./ext/crypto\" }\ndeno_fetch = { version = \"0.276.0\", path = \"./ext/fetch\" }\ndeno_ffi = { version = \"0.239.0\", path = \"./ext/ffi\" }\ndeno_fs = { version = \"0.162.0\", path = \"./ext/fs\" }\ndeno_http = { version = \"0.250.0\", path = \"./ext/http\" }\ndeno_image = { version = \"0.28.0\", path = \"./ext/image\" }\ndeno_io = { version = \"0.162.0\", path = \"./ext/io\" }\ndeno_kv = { version = \"0.160.0\", path = \"./ext/kv\" }\ndeno_napi = { version = \"0.183.0\", path = \"./ext/napi\" }\ndeno_net = { version = \"0.244.0\", path = \"./ext/net\" }\ndeno_node = { version = \"0.190.0\", path = \"./ext/node\" }\ndeno_node_crypto = { version = \"0.22.0\", path = \"./ext/node_crypto\" }\ndeno_node_sqlite = { version = \"0.22.0\", path = \"./ext/node_sqlite\" }\ndeno_os = { version = \"0.69.0\", path = \"./ext/os\" }\ndeno_process = { version = \"0.67.0\", path = \"./ext/process\" }\ndeno_signals = { version = \"0.43.0\", path = \"./ext/signals\" }\ndeno_telemetry = { version = \"0.74.0\", path = \"./ext/telemetry\" }\ndeno_tls = { version = \"0.239.0\", path = \"./ext/tls\" }\ndeno_web = { version = \"0.283.0\", path = \"./ext/web\" }\ndeno_webgpu = { version = \"0.219.0\", path = \"./ext/webgpu\" }\ndeno_webidl = { version = \"0.252.0\", path = \"./ext/webidl\" }\ndeno_websocket = { version = \"0.257.0\", path = \"./ext/websocket\" }\ndeno_webstorage = { version = \"0.247.0\", path = \"./ext/webstorage\" }\ndenort_helper = { version = \"0.50.0\", path = \"./ext/rt_helper\" }\n\n# workspace libraries\ndeno_bench_util = { version = \"0.246.0\", path = \"./tests/bench_util\" }\ndeno_cache_dir = { version = \"0.44.0\", path = \"./libs/cache_dir\" }\ndeno_cli_parser = { version = \"0.2.0\", path = \"./libs/cli_parser\" }\ndeno_config = { version = \"0.102.0\", features = [\"workspace\"], path = \"./libs/config\" }\ndeno_core = { version = \"0.405.0\", path = \"./libs/core\" }\ndeno_core_testing = { path = \"./libs/core_testing\" }\ndeno_crypto_provider = { version = \"0.46.0\", path = \"./libs/crypto\" }\ndeno_dotenv = { version = \"0.21.0\", path = \"./libs/dotenv\" }\ndeno_features = { version = \"0.49.0\", path = \"./runtime",
    "strategic_keywords": [
      "rag",
      "runtime",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 14,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "owner": "TencentCloud",
    "name": "TencentDB-Agent-Memory",
    "full_name": "TencentCloud/TencentDB-Agent-Memory",
    "url": "https://github.com/TencentCloud/TencentDB-Agent-Memory",
    "description": "TencentDB Agent Memory delivers fully local long-term memory for AI Agents via a 4-tier progressive pipeline, with zero external API dependencies.",
    "language": "TypeScript",
    "total_stars": 6157,
    "forks": 542,
    "stars_this_period": 67,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "agent",
        "ai-agent",
        "embedding",
        "llm",
        "local-first",
        "long-term-memory",
        "memory",
        "openclaw-plugin",
        "vector-search"
      ],
      "license": "NOASSERTION",
      "open_issues": 115,
      "created_at": "2026-04-07T06:34:26Z",
      "pushed_at": "2026-06-24T10:02:25Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 542,
      "watchers": 24,
      "archived": false,
      "size_kb": 3577
    },
    "readme_content": "<div align=\"center\">\n\n<img src=\"./assets/images/logo.png\" alt=\"TencentDB Agent Memory\" width=\"880\" />\n\n### Agents remember,Humans innovate.\n\n[![npm](https://img.shields.io/npm/v/@tencentdb-agent-memory/memory-tencentdb?color=blue)](https://www.npmjs.com/package/@tencentdb-agent-memory/memory-tencentdb)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Node](https://img.shields.io/badge/node-%3E=22.16-brightgreen)](https://nodejs.org/)\n[![OpenClaw](https://img.shields.io/badge/OpenClaw-%3E=2026.3.13-orange)](https://github.com/openclaw/openclaw)\n[![Hermes](https://img.shields.io/badge/Hermes-Gateway-7B61FF)](https://hermes-agent.nousresearch.com/docs/)\n[![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white)](https://discord.gg/kDtHb5RW2)\n\n[Highlights](#-highlights) · [Overview](#overview) · [Core Technology](#core-technology-reject-flat-storage-embrace-layering-and-symbolization) · [Features](#-features) · [Quick Start](#quick-start)\n\n<div align=\"center\">\n\n[**English**](./README.md) · [简体中文](./README_CN.md)\n\n</div>\n\n\n</div>\n\n---\n\n## ✨ Highlights\n\n> **TencentDB Agent Memory = symbolic short-term memory + layered long-term memory.**\n>\n> - **Symbolic short-term memory** offloads heavy tool logs and condenses them into compact Mermaid symbols, cutting token usage and improving task success.\n> - **Layered long-term memory** distills fragmented conversations into structured personas and scenes, instead of flat vector piles.\n\nWhen integrated with OpenClaw, it cuts token usage by up to **61.38%**, improves pass rate by **51.52%** (relative), and raises PersonaMem accuracy from **48%** to **76%**.\n\n| Memory Capability | Benchmark | OpenClaw Success | With Plugin | Relative Δ | OpenClaw Tokens | With Plugin Tokens | Relative Δ |\n| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: |\n| **Short-term** | WideSearch | 33% | **50%** | **+51.52%** | 221.31M | **85.64M** | **−61.38%** |\n| **Short-term** | SWE-bench | 58.4% | **64.2%** | **+9.93%** | 3474.1M | **2375.4M** | **−33.09%** |\n| **Short-term** | AA-LCR | 44.0% | **47.5%** | **+7.95%** | 112.0M | **77.3M** | **−30.98%** |\n| **Long-term** | PersonaMem | 48% | **76%** | **+59%** | — | — | — |\n\n> These results are measured over continuous long-horizon sessions, not isolated turns. For example, SWE-bench runs 50 consecutive tasks per session to simulate the context-accumulation pressure of real-world long-horizon agents.\n\n---\n\n## Overview\n\n**Memory is not about hoarding everything in the AI — it is about sparing humans from having to repeat themselves.**\n\nIn practice, we constantly re-explain the same SOPs, project background, tool conventions, and output formats to the Agent. Such information should not require repetition, nor should it be indiscriminately dumped into the context.\n\nTencentDB Agent Memory helps the Agent learn your workflows, retain task context, and reuse past experience. We reject both brute-force history accumulation and irreversible lossy summarization. Instead, we design memory as a layered system: **symbolic memory** for in-task information overload, and **memory layering** for cross-session experience.\n\n> **Let the Agent remember what should be remembered, so people can focus on judgment, creation, and work that truly matters.**\n\n---\n\n## Core Technology: Reject Flat Storage, Embrace Layering and Symbolization\n\nOur architecture rests on two pillars: **memory layering** and **symbolic memory**. Together they ensure Agents do not merely \"remember more\", but \"reason better\".\n\n### 1. Memory Layering: Progressive Disclosure with Heterogeneous Storage\n\nTraditional memory systems shred data into fragments and dump them into a flat vector store. Recall degenerates into a blind search across disconnected fragments, with no macro-level guidance.\n\nWhether it is long-term knowledge, short-term tasks, or future skill capabilities, memory should never be flat — both its formation and its recall must be hierarchical. TencentDB Agent Memory adopts **layering** as its unified architectural paradigm:\n\n*   **Short-term context layering.** The bottom layer archives raw tool outputs (`refs/*.md`); the middle layer extracts step-level summaries (`jsonl`); the top layer condenses state into a lightweight Mermaid canvas. The Agent only needs to attend to the top-layer structure in context, and drills down to the lower layers via `node_id` when an error occurs.\n*   **Long-term personalization layering.** In place of flat logs, we build a semantic pyramid: **L0 Conversation** (raw dialogue) → **L1 Atom** (atomic facts) → **L2 Scenario** (scene blocks) → **L3 Persona** (user profile). The Persona layer carries day-to-day preferences; the system drills down to Atoms only when details matter.\n*   **Skill generation layering.** Layering also applies to actions. The middle layer derives common solution patterns (**Scenario**) from bottom-layer execution traces (**Conversation**), and the top layer distills reusable Skills or standard SOPs (**Persona**).\n\n<p align=\"center\">\n  <img src=\"./assets/images/memory-pyramid-en.jpg\" alt=\"TencentDB Agent Memory L0 to L3 semantic pyramid\" width=\"860\" />\n</p>\n\n**Heterogeneous storage and progressive disclosure.** A dual-layer storage strategy underpins this architecture. The bottom layer (facts, logs, traces) is persisted in databases for robust full-text retrieval; the top layer (personas, scenes, canvases) is stored as human-readable Markdown files for high information density and white-box inspection. **Lower layers preserve evidence; upper layers preserve structure.**\n\n**Full traceability and lossless recovery.** Compression often sacrifices traceability. TencentDB Agent Memory avoids irreversible compression by maintaining a deterministic path from high-level abstractions back to ground-truth evidence. Whether it is an offloaded error log or a distilled user preference, the system guarantees a complete drill-down path: \"top-layer symbol (Persona / canvas) → mid-layer index (Scenario / jsonl) → bottom-layer raw text (L0 Conversation / refs)\".\n\n<div align=\"center\">\n  <img src=\"assets/images/flowchart1.png\" alt=\"Retrievable and Recoverable Drill-Down Chain\" />\n</div>\n\n### 2. Symbolic Memory: Maximum Semantics in Minimum Symbols (Mermaid Canvas)\n\nIn long tasks, the largest token consumers are verbose intermediate logs (search results, code, error traces). To address this, we combine **context offloading** with **symbolic memory**:\n\n*   **Mermaid symbol graph.** Instead of verbose prose or flat JSON, we encode task state transitions in high-density Mermaid syntax — precise enough for LLMs to parse, concise enough for humans to read.\n*   **History offloading.** Full tool logs are offloaded to external files; only a lightweight Mermaid task map remains in context.\n*   **`node_id` tracing.** The Agent reasons over the symbol graph; to verify a detail, it greps for the `node_id` and instantly retrieves the full raw text — cutting token cost while preserving full traceability.\n\n```mermaid\ngraph LR\n    Log[\"Verbose Logs<br/>(hundreds of thousands of tokens)\"] -->|\"1. Offload full text\"| FS[(\"External FS<br/>(refs/*.md)\")]\n    Log -->|\"2. Extract relations\"| MMD[\"Mermaid Canvas<br/>(with node_id)\"]\n    \n    MMD -->|\"3. Light injection\"| Agent((\"Agent Context<br/>(a few hundred tokens)\"))\n    Agent -. \"4. Recall via node_id\" .-> FS\n    \n    style Log fill:#f1f5f9,stroke:#94a3b8,stroke-dasharray: 5 5,color:#475569\n    style FS fill:#f8fafc,stroke:#cbd5e1,stroke-width:2px,color:#334155\n    style MMD fill:#eff6ff,stroke:#3b82f6,stroke-width:2px,color:#1e3a8a\n    style Agent fill:#fffbeb,stroke:#f59e0b,stroke-width:2px,color:#92400e\n```\n\n---\n\n## Quick Start\n## 🎬 Demos\n\n<table align=\"center\">\n  <tr align=\"center\" valign=\"middle\">\n    <td width=\"50%\" valign=\"middle\">\n      <video src=\"https://github.com/user-attachments/assets/09c64a2c-9997-42c0-90a3-a15e250cfa43\" controls=\"controls\" muted=\"muted\" style=\"max-width: 100%;\"></video>\n    </td>\n    <td width=\"50%\" valign=\"middle\">\n      <video src=\"https://github.com/user-attachments/assets/69045512-e75f-4c84-99dd-52ffa6e9e317\" controls=\"controls\" muted=\"muted\" style=\"max-width: 100%;\"></video>\n    </td>\n  </tr>\n  <tr align=\"center\" valign=\"top\">\n    <td>\n      <em>OpenClaw × Agent Memory</em>\n    </td>\n    <td>\n      <em>Hermes × Agent Memory</em>\n    </td>\n  </tr>\n</table>\n\n---\n\n\n### 1. OpenClaw\n### 1.1 Install the plugin\n\n```bash\nopenclaw plugins install @tencentdb-agent-memory/memory-tencentdb\nopenclaw gateway restart\n```\n\n> Please use the native OpenClaw command to upgrade the plugin. This approach prevents the plugin from being disabled caused by semantic version ranges.\n> ```bash\n> openclaw plugins update @tencentdb-agent-memory/memory-tencentdb\n> ```\n\n### 1.2 Zero-config to enable\n\nDefaults to a local `SQLite + sqlite-vec` backend.\n\n```jsonc\n// ~/.openclaw/openclaw.json\n{\n  \"memory-tencentdb\": {\n    \"enabled\": true\n  }\n}\n```\n\nOnce enabled, TencentDB Agent Memory automatically handles conversation capture, memory extraction, scene aggregation, persona generation, and recall before the next turn.\n\n### 1.3 Enable short-term compression (optional, requires version ≥ 0.3.4)\n\n```jsonc\n{\n  \"memory-tencentdb\": {\n    \"config\": {\n      \"offload\": {\n        \"enabled\": true\n      }\n    }\n  }\n}\n```\n\n#### Step 1 — Register the slot in your plugin config\n\nAdd the `slots` field so OpenClaw routes context-offload requests to this plugin:\n\n```jsonc\n{\n  \"plugins\": {\n    \"slots\": {\n      \"contextEngine\": \"memory-tencentdb\"\n    }\n  }\n}\n```\n\n#### Step 2 — Apply the runtime patch\n\nFor the best results, run the patch script below. It hooks `after-tool-call` messages so they can be offloaded and recovered correctly:\n\n```bash\nbash scripts/openclaw-after-tool-call-messages.patch.sh\n```\n\n> 💡 The patch only needs to be applied once per OpenClaw installation. After upgrading OpenClaw, re-run the script to re-apply.\n\n\n### 2. Hermes\n\nIn addition to OpenClaw, this plugin also supports [Hermes](https://github.com/NousResearch/hermes-agent) Agent. Choose the installation path based on your deployment scenario:\n\n| You want to … | Use |\n|---|---|\n| Spin up a memory-enabled Hermes from scratch in one command | 2.A Docker (below) |\n| Add memory to an existing Hermes install | 2.B Plug into an existing Hermes (next section) |\n\n#### 2.A Docker (greenfield, requires version ≥ 0.3.4)\n\nThe Docker image bundles `hermes-agent` and the `memory_tencentdb` provider together. The Gateway listens on `:8420`:\n\n```bash\n# ============ Configuration Parameters ============\n# MODEL_API_KEY    LLM API key (required) — replace with your own credential\n# MODEL_BASE_URL   LLM endpoint, defaults to Tencent Cloud LKE (Large Model Knowledge Engine)\n# MODEL_NAME       Model name, defaults to DeepSeek-V3.2\n# MODEL_PROVIDER   Provider type: \"custom\" works for any OpenAI-compatible endpoint\n\nMODEL_API_KEY=\"your-api-key\"\nMODEL_BASE_URL=\"https://api.lkeap.cloud.tencent.com/v1\"\nMODEL_NAME=\"deepseek-v3.2\"\nMODEL_PROVIDER=\"custom\"\n\n# ============ docker run Flags ============\n# -d                          Run container in detached (background) mode\n# --name hermes-memory        Container name, for later docker exec / logs / stop\n# --restart unless-stopped    Auto-restart on crash or host reboot\n# -p 8420:8420                Host port ↔ container port (Hermes Gateway)\n# -e MODEL_*                  Inject the config parameters above as env vars\n# -v hermes_data:/opt/data    Persist memory data to a named volume (survives restart)\n\n# Enter the Docker build directory (already cloned the repo and at the repo root)\ncd docker/opensource\n\n# Build\ndocker build -f Dockerfile.hermes -t hermes-memory .\n\n# Run\ndocker run -d \\\n  --name hermes-memory \\\n  --restart unless-stopped \\\n  -p 8420:8420 \\\n  -e MODEL_API_KEY=\"your-api-key\" \\\n  -e MODEL_BASE_URL=\"https://api.lkeap.cloud.tencent.com/v1\" \\\n  -e MODEL_NAME=\"deepseek-v3.2\" \\\n  -e MODEL_PROVIDER=\"custom\" \\\n  -v hermes_da",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"@tencentdb-agent-memory/memory-tencentdb\",\n  \"version\": \"0.3.6\",\n  \"description\": \"Four-layer local memory system plugin for OpenClaw — auto-captures, structures, and profiles conversational knowledge using local LLM + SQLite vector search (L0→L1→L2→L3 pipeline)\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.mjs\",\n  \"bin\": {\n    \"migrate-sqlite-to-tcvdb\": \"./bin/migrate-sqlite-to-tcvdb.mjs\",\n    \"export-tencent-vdb\": \"./bin/export-tencent-vdb.mjs\",\n    \"read-local-memory\": \"./bin/read-local-memory.mjs\"\n  },\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/index.mjs\",\n      \"default\": \"./dist/index.mjs\"\n    }\n  },\n  \"scripts\": {\n    \"build\": \"npm run build:plugin && npm run build:scripts\",\n    \"build:plugin\": \"tsdown\",\n    \"build:scripts\": \"npm run build:migrate-sqlite-to-vdb && npm run build:export-tencent-vdb && npm run build:read-local-memory\",\n    \"prepack\": \"npm run build\",\n    \"build:migrate-sqlite-to-vdb\": \"tsc -p scripts/migrate-sqlite-to-tcvdb/tsconfig.json --noEmitOnError false\",\n    \"migrate-sqlite-to-tcvdb\": \"node ./bin/migrate-sqlite-to-tcvdb.mjs\",\n    \"build:export-tencent-vdb\": \"tsc --project scripts/export-tencent-vdb/tsconfig.json\",\n    \"export-tencent-vdb\": \"node ./bin/export-tencent-vdb.mjs\",\n    \"build:read-local-memory\": \"tsc --project scripts/read-local-memory/tsconfig.json\",\n    \"read-local-memory\": \"node ./bin/read-local-memory.mjs\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:coverage\": \"vitest run --coverage\",\n    \"postinstall\": \"bash scripts/openclaw-after-tool-call-messages.patch.sh 2>/dev/null || true\"\n  },\n  \"files\": [\n    \"dist/\",\n    \"bin/\",\n    \"index.ts\",\n    \"scripts/migrate-sqlite-to-tcvdb/dist/\",\n    \"scripts/export-tencent-vdb/dist/\",\n    \"scripts/read-local-memory/dist/\",\n    \"scripts/memory-tencentdb-ctl.sh\",\n    \"scripts/install_hermes_memory_tencentdb.sh\",\n    \"scripts/README.memory-tencentdb-ctl.md\",\n    \"src\",\n    \"scripts/openclaw-after-tool-call-messages.patch.sh\",\n    \"scripts/setup-offload.sh\",\n    \"hermes-plugin/\",\n    \"openclaw.plugin.json\",\n    \"README.md\",\n    \"CHANGELOG.md\",\n    \"LICENSE\",\n    \"!src/**/*.test.ts\",\n    \"!src/**/*.spec.ts\",\n    \"!src/**/__tests__/\"\n  ],\n  \"keywords\": [\n    \"openclaw\",\n    \"openclaw-plugin\",\n    \"memory\",\n    \"ai-memory\",\n    \"long-term-memory\",\n    \"vector-search\",\n    \"sqlite-vec\",\n    \"llm\",\n    \"conversation\",\n    \"persona\",\n    \"scene-extraction\",\n    \"embedding\"\n  ],\n  \"author\": \"TencentDB Agent Memory Team\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=22.16.0\"\n  },\n  \"dependencies\": {\n    \"@ai-sdk/openai\": \"^3.0.53\",\n    \"@node-rs/jieba\": \"^2.0.1\",\n    \"@tencentdb-agent-memory/tcvdb-text\": \"^0.1.1\",\n    \"ai\": \"^6.0.164\",\n    \"js-tiktoken\": \"^1.0.18\",\n    \"json5\": \"^2.2.3\",\n    \"sqlite-vec\": \"0.1.7-alpha.2\",\n    \"tsx\": \"^4.21.0\",\n    \"undici\": \"^8.1.0\",\n    \"yaml\": \"^2.8.3\",\n    \"zod\": \"^4.4.3\"\n  },\n  \"optionalDependencies\": {\n    \"opik\": \"^1.0.0\"\n  },\n  \"peerDependencies\": {\n    \"node-llama-cpp\": \"^3.16.2\",\n    \"openclaw\": \">=2026.3.7\"\n  },\n  \"peerDependenciesMeta\": {\n    \"openclaw\": {\n      \"optional\": true\n    },\n    \"node-llama-cpp\": {\n      \"optional\": true\n    }\n  },\n  \"openclaw\": {\n    \"extensions\": [\n      \"./index.ts\"\n    ],\n    \"compat\": {\n      \"pluginApi\": \">=2026.3.13\",\n      \"minGatewayVersion\": \">=2026.3.13\"\n    },\n    \"build\": {\n      \"openclawVersion\": \"2026.3.13\",\n      \"pluginSdkVersion\": \"2026.3.13\"\n    },\n    \"bundle\": {\n      \"stageRuntimeDependencies\": true\n    }\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^25.5.2\",\n    \"@vitest/coverage-v8\": \"^4.1.2\",\n    \"tsdown\": \"^0.21.10\",\n    \"typescript\": \"^6.0.2\",\n    \"vitest\": \"^4.1.2\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "rag",
      "skill",
      "llm",
      "workflow",
      "vector",
      "embedding"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 14,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 88
    },
    "strategic_score": 88
  },
  {
    "owner": "jnMetaCode",
    "name": "superpowers-zh",
    "full_name": "jnMetaCode/superpowers-zh",
    "url": "https://github.com/jnMetaCode/superpowers-zh",
    "description": "🦸 AI 编程超能力 · 中文增强版 — superpowers（116k+ ⭐）完整汉化 + 6 个中国原创 skills，让 Claude Code / Copilot CLI / Hermes Agent / Cursor / Windsurf / Kiro / Gemini CLI 等 16 款 AI 编程工具真正会干活",
    "language": "JavaScript",
    "total_stars": 5932,
    "forks": 572,
    "stars_this_period": 65,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "agent-skills",
        "agentic-coding",
        "ai-coding",
        "chinese",
        "claude-code",
        "code-review",
        "cursor",
        "gemini-cli",
        "kiro",
        "mcp",
        "npm-package",
        "prompt-engineering",
        "skills",
        "superpowers",
        "tdd",
        "trae"
      ],
      "license": "MIT",
      "open_issues": 15,
      "created_at": "2026-03-20T00:12:39Z",
      "pushed_at": "2026-06-23T15:29:43Z",
      "homepage": "https://sp.aiolaola.com",
      "default_branch": "main",
      "forks": 572,
      "watchers": 22,
      "archived": false,
      "size_kb": 2729
    },
    "readme_content": "# superpowers-zh（AI 编程超能力 · 中文增强版）\n\n🌐 **简体中文** | [English (upstream)](https://github.com/obra/superpowers)\n\n> 🦸 **superpowers（233k+ ⭐）完整汉化 + 4 个中国原创 skills** — 让 Claude Code / Copilot CLI / Hermes Agent / Cursor / Windsurf / Kiro / Gemini CLI / Qoder 等 **18 款 AI 编程工具**真正会干活。从头脑风暴到代码审查，从 TDD 到调试，每个 skill 都是经过实战验证的工作方法论。\n\nChinese community edition of [superpowers](https://github.com/obra/superpowers) — 20 skills across 18 AI coding tools, including full translations and China-specific development skills.\n\n[![官网 sp.aiolaola.com](https://img.shields.io/badge/🌐_官网-sp.aiolaola.com-F59E0B)](https://sp.aiolaola.com)\n[![GitHub stars](https://img.shields.io/github/stars/jnMetaCode/superpowers-zh?style=social)](https://github.com/jnMetaCode/superpowers-zh)\n[![npm version](https://img.shields.io/npm/v/superpowers-zh)](https://www.npmjs.com/package/superpowers-zh)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)\n\n> 📖 **免费配套学习** → [从零学会 AI 编程](https://aiolaola.com/?utm_source=github&utm_campaign=superpowers)：180 节免费实操课 + 《AI 编程实战三卷书》在线阅读 + 实战社区 · superpowers 装好后配上方法论效率翻倍 · 永久免费\n\n### 📊 项目规模\n\n| 📦 翻译 Skills | 🇨🇳 中国特色 Skills | 🤖 支持工具 |\n|:---:|:---:|:---:|\n| **14** | **6** | **Claude Code / Copilot CLI / Hermes Agent / Cursor / Windsurf / Kiro / Gemini CLI / Codex / Aider / Trae / VS Code (Copilot) / DeerFlow / OpenCode / OpenClaw / Qwen Code / Antigravity / Claw Code / Qoder** |\n\n---\n\n## ❤️ 赞助商 &nbsp;<sub>🙏 想出现在这里？联系 **jnMetaCode@qq.com** 赞助</sub>\n\n<table>\n<tr>\n<td width=\"200\" align=\"center\">\n<a href=\"https://www.5cookie.cc/sign-up?aff=Pj7u\"><img src=\"assets/sponsors/5cookie-code.png\" width=\"180\" alt=\"5Cookie Code\"></a>\n</td>\n<td>\n<a href=\"https://www.5cookie.cc/sign-up?aff=Pj7u\"><b>5Cookie Code</b></a> 是一家稳定高速的 API 中继服务提供商，为 Claude Code、Codex 等平台或模型提供 API 中继服务。面向个人、团队和企业用户提供 AI 编码服务和 AI 生图服务。\n</td>\n</tr>\n</table>\n\n---\n\n## 这是什么？\n\n[superpowers](https://github.com/obra/superpowers) 是目前最火的 AI 编程 skills 框架（233k+ stars），为 AI 编程工具提供**系统化的工作方法论**。\n\n**superpowers-zh** 在完整翻译的基础上，新增了面向中国开发者的特色 skills。\n\n<!-- 效果对比 -->\n<table>\n<tr><td>\n\n**没装 superpowers-zh：**\n```\n你：给用户模块加个批量导出功能\nAI：好的，我来实现...（直接开始写代码）\n    export async function exportUsers() { ... }\n你：等等，格式不对，没分页，大数据量会 OOM...\n```\n\n</td><td>\n\n**装了 superpowers-zh：**\n```\n你：给用户模块加个批量导出功能\nAI：在开始实现之前，我需要了解几个关键问题：\n    1. 导出格式是 CSV 还是 Excel？\n    2. 预计数据量多大？需要异步处理吗？\n    3. 有权限要求吗？\n    → 给出 2-3 个方案，确认后再动手\n```\n\n</td></tr>\n</table>\n\n### 🆚 与英文上游的区别（老被问，一次说清）\n\n| 维度 | superpowers（英文上游） | superpowers-zh（中文增强版） |\n|------|----------------------|---------------------------|\n| ⭐ Star 数 | 233k+ | — |\n| 📦 Skills 总数 | 14 | **20**（14 翻译 + 4 国产原创 + 2 上游历史保留） |\n| 🌐 语言 | 英文 | 中文（技术术语保留英文） |\n| 🤖 **支持工具** | **6 款**：Claude Code / Cursor / Codex / OpenCode / Copilot CLI / Gemini CLI | **18 款**：上述 6 款 + Hermes Agent / Trae / Kiro / Qwen Code（通义灵码）/ OpenClaw / Claw Code / Antigravity / DeerFlow / VS Code / Windsurf / Aider / Qoder |\n| ⚡ **安装方式** | 按工具分别装（每款一条不同的 plugin marketplace 命令） | **`npx superpowers-zh` 一条命令自动识别项目里的工具并安装**；识别不出可 `--tool <name>` 显式指定 |\n| 🇨🇳 Git 平台 | GitHub 为主 | GitHub + Gitee + Coding + 极狐 GitLab + **CNB（腾讯云原生构建）** |\n| 🇨🇳 CI/CD 示例 | GitHub Actions | GitHub Actions + Gitee Go + Coding CI + 极狐 CI + `.cnb.yml` |\n| 🇨🇳 代码审查风格 | 西方直接风格 | 适配国内团队沟通文化 |\n| 🇨🇳 Git 提交规范 | 无 | Conventional Commits 中文适配 |\n| 🇨🇳 中文文档规范 | 无 | 中文排版 + 中英混排规则 + 告别机翻味 |\n| ➕ MCP 服务器构建 | 无 | 独立 `mcp-builder` skill |\n| ➕ 工作流执行器 | 无 | 独立 `workflow-runner` skill（多角色 YAML 编排） |\n| 🔄 版本跟进 | 独立迭代 | **同步上游 + 国产增量叠加** |\n| 🤝 接受新 skill PR | 一般不接受（原文：*\"we don't generally accept contributions of new skills\"*） | 欢迎 PR（中国开发者痛点优先） |\n| 💬 社区 | Discord | 微信公众号「AI不止语」+ 微信群 + QQ 群 |\n| 📜 License | MIT | MIT |\n\n**一句话总结：** 英文上游 = 方法论内核；中文增强版 = 方法论内核 **+** 18 款工具一键适配 **+** 国内 Git/CI 生态 **+** 中文化表达习惯。\n\n### 🤖 支持 18 款主流 AI 编程工具\n\n| 工具 | 类型 | 一键安装 | 手动安装 |\n|------|------|:---:|:---:|\n| [Claude Code](https://claude.ai/code) | CLI | `npx superpowers-zh` | `.claude/skills/` |\n| [Copilot CLI](https://githubnext.com/projects/copilot-cli) | CLI | `npx superpowers-zh --tool copilot` | `.claude/skills/` |\n| [Hermes Agent](https://github.com/NousResearch/hermes-agent) | CLI | `npx superpowers-zh --tool hermes` | `.hermes/skills/` |\n| [Cursor](https://cursor.sh) | IDE | `npx superpowers-zh` | `.cursor/skills/` |\n| [Windsurf](https://codeium.com/windsurf) | IDE | `npx superpowers-zh` | `.windsurf/skills/` |\n| [Kiro](https://kiro.dev) | IDE | `npx superpowers-zh` | `.kiro/steering/` |\n| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | CLI | `npx superpowers-zh` | `.gemini/skills/` |\n| [Codex CLI](https://github.com/openai/codex) | CLI | `npx superpowers-zh` | `.codex/skills/` |\n| [Aider](https://aider.chat) | CLI | `npx superpowers-zh` | `.aider/skills/` |\n| [Trae](https://trae.ai) | IDE | `npx superpowers-zh` | `.trae/skills/` + `.trae/rules/` |\n| [VS Code](https://code.visualstudio.com) (Copilot) | IDE 插件 | `npx superpowers-zh` | `.github/superpowers/` |\n| [DeerFlow 2.0](https://github.com/bytedance/deer-flow) | Agent 框架 | `npx superpowers-zh` | `skills/custom/` |\n| [OpenCode](https://opencode.ai) | CLI | `npx superpowers-zh` | `.opencode/skills/` |\n| [OpenClaw](https://github.com/anthropics/openclaw) | CLI | `npx superpowers-zh` | `skills/` |\n| [Qwen Code](https://tongyi.aliyun.com/lingma) (通义灵码) | IDE 插件 | `npx superpowers-zh` | `.qwen/skills/` |\n| [Antigravity](https://github.com/anthropics/antigravity) | CLI | `npx superpowers-zh` | `.agents/skills/` |\n| [Claw Code](https://github.com/ultraworkers/claw-code) | CLI (Rust) | `npx superpowers-zh` | `.claw/skills/` |\n| [Qoder](https://qoder.com) (阿里 AI IDE) | IDE | `npx superpowers-zh` | `.qoder/skills/` + `.qoder/rules/` |\n\n> 运行 `npx superpowers-zh` 会自动检测你项目中使用的工具，将 20 个 skills 安装到正确位置。\n\n### 翻译的 Skills（14 个）\n\n| Skill | 用途 |\n|-------|------|\n| **头脑风暴** (brainstorming) | 需求分析 → 设计规格，不写代码先想清楚 |\n| **编写计划** (writing-plans) | 把规格拆成可执行的实施步骤 |\n| **执行计划** (executing-plans) | 按计划逐步实施，每步验证 |\n| **测试驱动开发** (test-driven-development) | 严格 TDD：先写测试，再写代码 |\n| **系统化调试** (systematic-debugging) | 四阶段调试法：定位→分析→假设→修复 |\n| **请求代码审查** (requesting-code-review) | 派遣审查 agent 检查代码质量 |\n| **接收代码审查** (receiving-code-review) | 技术严谨地处理审查反馈，拒绝敷衍 |\n| **完成前验证** (verification-before-completion) | 证据先行——声称完成前必须跑验证 |\n| **派遣并行 Agent** (dispatching-parallel-agents) | 多任务并发执行 |\n| **子 Agent 驱动开发** (subagent-driven-development) | 每个任务一个 agent，两轮审查 |\n| **Git Worktree 使用** (using-git-worktrees) | 隔离式特性开发 |\n| **完成开发分支** (finishing-a-development-branch) | 合并/PR/保留/丢弃四选一 |\n| **编写 Skills** (writing-skills) | 创建新 skill 的方法论 |\n| **使用 Superpowers** (using-superpowers) | 元技能：如何调用和优先使用 skills |\n\n### 🇨🇳 中国特色 Skills（6 个）\n\n> ⚠️ **下表前 4 个 chinese-\\* 为「手动调用」skill**——不会自动触发，需在对话中显式输入 `/chinese-xxx` 才会加载。\n> 设计为参考资料而非工作流，避免污染上游 skill 的自动调度（如 `requesting-code-review`、`brainstorming` 等）。\n\n| Skill | 用途 | 调用方式 | 上游有吗？ |\n|-------|------|---------|:---:|\n| **中文代码审查** (chinese-code-review) | 符合国内团队文化的代码审查规范 | `/chinese-code-review`（手动） | 无 |\n| **中文 Git 工作流** (chinese-git-workflow) | 适配 Gitee/Coding/极狐 GitLab/CNB | `/chinese-git-workflow`（手动） | 无 |\n| **中文技术文档** (chinese-documentation) | 中文排版规范、中英混排、告别机翻味 | `/chinese-documentation`（手动） | 无 |\n| **中文提交规范** (chinese-commit-conventions) | 适配国内团队的 commit message 规范 | `/chinese-commit-conventions`（手动） | 无 |\n| **MCP 服务器构建** (mcp-builder) | 构建生产级 MCP 工具，扩展 AI 能力边界 | 自动 | 无 |\n| **工作流执行器** (workflow-runner) | 在 AI 工具内运行多角色 YAML 工作流 | 自动 | 无 |\n\n---\n\n## 快速开始\n\n### 方式一：npm 安装（推荐）\n\n```bash\ncd /your/project\nnpx superpowers-zh\n```\n\n> ⚠️ **不要在主目录（`~`）下跑**。v1.2.1 起会拒绝并提示，老版本会把 skills 和 `CLAUDE.md` 等 bootstrap 文件写到你的 home 目录，污染所有项目。如已误装见下文「卸载 / 误装清理」。\n\n### 方式二：手动安装（low-fidelity，仅作备选）\n\n> ⚠️ **手动 `cp -r skills` 是低保版安装，不等同于完整 plugin。**\n>\n> superpowers-zh 是一个完整 plugin，包含：`skills/`（20 个能力）+ `hooks/`（SessionStart 钩子，让 skill 在合适时机自动触发）+ `CLAUDE.md` / `GEMINI.md` 等 bootstrap 引导文件 + 4 套 plugin manifest（Claude Code / Cursor / Codex / Marketplace）。\n>\n> **下面的 `cp -r skills` 命令只复制 skills 目录**，不会自动配置 hooks、不会生成 bootstrap 引导。结果：skills 物理上存在，但 AI 不会在合适时机自动调用，需要你每次手动喊 \"use brainstorming skill\" 之类。\n>\n> **强烈推荐用方式一 `npx superpowers-zh`** —— 它会一键处理 skills 复制 + bootstrap 生成 + hooks 配置 + 工具特定适配。仅在 npx 不可用（极端无网络环境）时才退到手动。\n\n```bash\n# 克隆仓库\ngit clone https://github.com/jnMetaCode/superpowers-zh.git\n\n# 复制 skills 到你的项目（选择你使用的工具）\ncp -r superpowers-zh/skills /your/project/.claude/skills      # Claude Code / Copilot CLI\ncp -r superpowers-zh/skills /your/project/.hermes/skills      # Hermes Agent\ncp -r superpowers-zh/skills /your/project/.cursor/skills      # Cursor\ncp -r superpowers-zh/skills /your/project/.codex/skills       # Codex CLI\ncp -r superpowers-zh/skills /your/project/.kiro/steering      # Kiro\ncp -r superpowers-zh/skills /your/project/skills/custom       # DeerFlow 2.0\ncp -r superpowers-zh/skills /your/project/.trae/rules         # Trae\ncp -r superpowers-zh/skills /your/project/.agents        # Antigravity\ncp -r superpowers-zh/skills /your/project/.github/superpowers # VS Code (Copilot)\ncp -r superpowers-zh/skills /your/project/skills              # OpenClaw\ncp -r superpowers-zh/skills /your/project/.windsurf/skills   # Windsurf\ncp -r superpowers-zh/skills /your/project/.gemini/skills     # Gemini CLI\ncp -r superpowers-zh/skills /your/project/.aider/skills      # Aider\ncp -r superpowers-zh/skills /your/project/.opencode/skills   # OpenCode\ncp -r superpowers-zh/skills /your/project/.qwen/skills       # Qwen Code\ncp -r superpowers-zh/skills /your/project/.claw/skills       # Claw Code（Rust 版）\ncp -r superpowers-zh/skills /your/project/.qoder/skills      # Qoder（阿里 AI IDE）\n```\n\n### 方式三：在配置文件中引用\n\n根据你使用的工具，在对应配置文件中引用 skills：\n\n| 工具 | 配置文件 | 说明 |\n|------|---------|------|\n| Claude Code | `CLAUDE.md` | 项目根目录 |\n| Copilot CLI | `CLAUDE.md` | 与 Claude Code 共用插件格式 |\n| Hermes Agent | `HERMES.md` 或 `.hermes.md` | 项目根目录，安装时自动生成 |\n| Kiro | `.kiro/steering/*.md` | 支持 always/globs/手动三种模式 |\n| DeerFlow 2.0 | `skills/custom/*/SKILL.md` | 字节跳动开源 SuperAgent，自动发现自定义 skills |\n| Trae | `.trae/rules/project_rules.md` | 项目级规则 |\n| Antigravity | `GEMINI.md` 或 `AGENTS.md` | 项目根目录 |\n| VS Code | `.github/copilot-instructions.md` | Copilot 自定义指令 |\n| Cursor | `.cursor/rules/*.md` | 项目级规则目录 |\n| OpenClaw | `skills/*/SKILL.md` | 工作区级 skills 目录，自动发现 |\n| Windsurf | `.windsurf/skills/*/SKILL.md` | 项目级 skills 目录 |\n| Gemini CLI | `.gemini/skills/*/SKILL.md` | 项目级 skills 目录 |\n| Aider | `.aider/skills/*/SKILL.md` | 项目级 skills 目录 |\n| OpenCode | `.opencode/skills/*/SKILL.md` | 项目级 skills 目录 |\n| Hermes Agent | `.hermes/skills/*/SKILL.md` | 项目级 skills 目录 |\n| Qwen Code | `.qwen/skills/*/SKILL.md` | 项目级 skills 目录 |\n| Claw Code | `.claw/skills/*/SKILL.md` | Rust 版 CLI agent，兼容 Claude Code 的 SKILL.md 格式 |\n| Qoder | `.qoder/skills/*/SKILL.md` + `.qoder/rules/superpowers-zh.md` | 阿里 AI IDE，自动生成 `trigger: always_on` 的 bootstrap rule |\n\n> **详细安装指南**：[Kiro](docs/README.kiro.md) · [DeerFlow](docs/README.deerflow.md) · [Trae](docs/README.trae.md) · [Antigravity](docs/README.antigravity.md) · [VS Code](docs/README.vscode.md) · [Codex](docs/README.codex.md) · [OpenCode](docs/README.opencode.md) · [OpenClaw](docs/README.openclaw.md) · [Windsurf](docs/README.windsurf.md) · [Gemini CLI](docs/README.gemini-cli.md) · [Aider](docs/README.aider.md) · [Qwen Code](docs/README.qwen.md) · [Hermes Agent](docs/README.hermes.md) · [Qoder](docs/README.qoder.md) · [Kimi Code](docs/README.kimi.md) · [Pi](docs/README.pi.md)\n\n### 卸载 / 误装清理（v1.2.1+）\n\n```bash\ncd /your/project          # 或 cd ~ 如果误装到了主目录\nnpx superpowers-zh@latest --uninstall\n```\n\n会做这些：\n\n- 删除所有装过的 skill 目录（`.claude/skills/`、`.trae/skills/` 等）\n- 删除独立 bootstrap 文件（`.trae/rules/superpowers-zh.md`、`.qoder/rules/superpowers-zh.md`、`.agents/rules.md`）\n- 清理追加到 `CLAUDE.md` / `HERMES.md` / `GEMINI.md` / `CONVENTIONS.md` 里的 superpowers-zh 段，**保留你自己写的内容**\n\n数据安全说明：v1.2.1 起，安装会把追加内容包在 `<!-- superpowers-zh:begin/end -->` 哨兵注释之间，卸载按哨兵精确切除。识别不可靠时跳过 + 警告，**绝不会误删用户内容**。\n\n其他参数：\n\n| 参数 | 用途 |\n|---|---|\n| `--tool <name",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"superpowers-zh\",\n  \"version\": \"1.6.0\",\n  \"engines\": {\n    \"node\": \">=20.0.0\"\n  },\n  \"description\": \"AI 编程超能力中文增强版 — superpowers（159k+ ⭐）完整汉化 + 4 个中国原创 skills，支持 Claude Code / Copilot CLI / Hermes Agent / Cursor / Claw Code / Windsurf / Kiro / Gemini CLI / Qoder 等 18 款工具\",\n  \"type\": \"module\",\n  \"main\": \".opencode/plugins/superpowers.js\",\n  \"bin\": {\n    \"superpowers-zh\": \"bin/superpowers-zh.js\"\n  },\n  \"scripts\": {\n    \"site\": \"node site/build.mjs\",\n    \"site:deploy\": \"node site/build.mjs && wrangler pages deploy site/dist --project-name=superpowers-zh-site\",\n    \"version\": \"node scripts/sync-plugin-version.js && git add .claude-plugin/plugin.json .claude-plugin/marketplace.json .cursor-plugin/plugin.json .codex-plugin/plugin.json gemini-extension.json\"\n  },\n  \"files\": [\n    \"bin/\",\n    \"skills/\",\n    \"hooks/\",\n    \"assets/\",\n    \".claude-plugin/\",\n    \".cursor-plugin/\",\n    \".codex/INSTALL.md\",\n    \".codex-plugin/\",\n    \".opencode/INSTALL.md\",\n    \".opencode/plugins/\",\n    \".pi/extensions/\",\n    \"CLAUDE.md\",\n    \"GEMINI.md\",\n    \"RELEASE-NOTES.md\",\n    \"RELEASE-NOTES.zh.md\",\n    \"gemini-extension.json\",\n    \"docs/\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"keywords\": [\n    \"superpowers\",\n    \"claude-code\",\n    \"cursor\",\n    \"codex\",\n    \"gemini\",\n    \"kiro\",\n    \"deerflow\",\n    \"trae\",\n    \"antigravity\",\n    \"openclaw\",\n    \"windsurf\",\n    \"aider\",\n    \"opencode\",\n    \"qwen\",\n    \"vscode\",\n    \"copilot\",\n    \"hermes\",\n    \"hermes-agent\",\n    \"claw-code\",\n    \"qoder\",\n    \"ai-coding\",\n    \"skills\",\n    \"chinese\",\n    \"中文\",\n    \"tdd\",\n    \"debugging\",\n    \"code-review\",\n    \"pi-package\"\n  ],\n  \"pi\": {\n    \"skills\": [\n      \"./skills\"\n    ],\n    \"extensions\": [\n      \"./.pi/extensions/superpowers.ts\"\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/jnMetaCode/superpowers-zh.git\"\n  },\n  \"homepage\": \"https://github.com/jnMetaCode/superpowers-zh\",\n  \"author\": \"jnMetaCode\",\n  \"license\": \"MIT\"\n}\n",
    "strategic_keywords": [
      "agent",
      "mcp",
      "skill",
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 14,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "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": 2463,
    "forks": 294,
    "stars_this_period": 57,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [
        "backlink-analysis",
        "google-search-console-mcp",
        "keyword-research",
        "mcp",
        "seo",
        "seo-tools",
        "site-audit"
      ],
      "license": "MIT",
      "open_issues": 11,
      "created_at": "2026-02-27T18:57:41Z",
      "pushed_at": "2026-06-24T19:23:13Z",
      "homepage": "https://openseo.so",
      "default_branch": "main",
      "forks": 294,
      "watchers": 19,
      "archived": false,
      "size_kb": 18853
    },
    "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 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  - Find topics worth targeting, estimate demand, and prioritize what to write next.\n- Rank tracking\n  - Monitor keyword positions across desktop and mobile over time, with SERP feature detection.\n- Domain insights\n  - Understand where your domain is gaining or losing visibility so you can focus on the pages that move revenue.\n- Backlinks\n  - See who links to your site, which pages attract links, and where links are newly won or lost.\n- Site Audits\n  - Catch technical issues early so your site is easier for search engines to crawl and rank.\n- AI brand visibility\n  - See how your brand appears in AI answers, including competitor mentions and source coverage.\n- AI search prompt explorer\n  - Track and explore the prompts people might use when they ask AI tools for recommendations in your market.\n\n## OpenSEO MCP\n\nOpenSEO exposes an MCP server so AI agents can use your SEO data directly.\n\nConnect Codex, Claude Code, Claude Desktop, or another MCP client to:\n\n- Run keyword research\n- Inspect SERPs\n- Compare domains\n- Review backlinks\n- Work through SEO decisions from your editor or chat\n\nIn the app, open **AI & MCP** and copy your MCP server URL. Point your agent at whichever OpenSEO instance you use.\n\nHosted app:\n\n```sh\ncodex mcp add openseo --url https://app.openseo.so/mcp\nclaude mcp add --transport http --scope user openseo https://app.openseo.so/mcp\n```\n\nCloudflare self-hosted:\n\n```sh\ncodex mcp add openseo --url https://your-openseo-domain.com/mcp\nclaude mcp add --transport http --scope user openseo https://your-openseo-domain.com/mcp\n```\n\nLocal Docker:\n\n```sh\ncodex mcp add openseo --url http://localhost:3001/mcp\nclaude mcp add --transport http --scope user openseo http://localhost:3001/mcp\n```\n\nApprove the OpenSEO login when your agent asks.\n\n## OpenSEO Agent Skills\n\nOpenSEO Agent Skills are reusable workflows for Codex and Claude Code. They guide your agent through SEO tasks and can use the OpenSEO MCP for live keyword, SERP, backlink, and domain data.\n\n### Installation Options\n\nInstall with `skills add`:\n\n```sh\nnpx skills add every-app/open-seo\n```\n\nAuto-accept each OpenSEO skill:\n\n```sh\nnpx skills add every-app/open-seo --skill '*'\n```\n\nInstall for Claude Code only:\n\n```sh\nnpx skills add every-app/open-seo --skill '*' --agent claude-code\n```\n\nInstall for OpenAI Codex only:\n\n```sh\nnpx skills add every-app/open-seo --skill '*' --agent codex\n```\n\nYou can also pick skills directly from the GitHub repo and copy them into your agent's skills folder:\n\n```sh\ngit clone https://github.com/every-app/open-seo.git\n\n# Codex\nmkdir -p ~/.codex/skills\ncp -R open-seo/.agents/skills/* ~/.codex/skills/\n\n# Claude Code\nmkdir -p ~/.claude/skills\ncp -R open-seo/.agents/skills/* ~/.claude/skills/\n```\n\nStart with `/seo-project-setup`. It will ask about your project and help configure your workspace.\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## Roadmap\n\nTop priorities:\n\n- Google Search Console Integration + MCP\n- Local SEO\n- Custom Reports for Clients\n- Improved and Scheduled Site Audits\n- In App AI Agent\n- Support Multiple Projects\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## Community\n\nEmail me: ben@openseo.so\n\nJoin Discord to chat: [Discord](https://discord.gg/c9uGs3cFXr)\n\nFollow along for updates:\n\n- Sign up for the mailing list on our website: [openseo.so](https://openseo.so)\n- Follow on X: https://x.com/bensenescu\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\nBacklinks requires one more step beyond the API key: you also need DataForSEO Backlinks enabled on your account (trial or paid subscription), then confirm access from the Backlinks page in OpenSEO.\n\n1. Go to [DataForSEO API Access](https://app.dataforseo.com/api-access).\n2. Request API credentials by email (`API key by email` or `API password by email`).\n3. Use your DataForSEO login + API password, then base64 encode `login:password`:\n\n```sh\nprintf '%s' 'YOUR_LOGIN:YOUR_PASSWORD' | base64\n```\n\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\nBy default, `compose.yaml` pulls the published image from GHCR:\n\n- `ghcr.io/every-app/open-seo:latest`\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\nOr use a single command:\n\n```sh\ndocker compose up -d --pull always\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### 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\n### 1) Rank tracking\n\nThere are in-app estimates for this since its dependent on the settings you select.\n\n$2/month example:\n\n- 50 keywords\n- 1 device (Mobile or Desktop)\n- Search 5 pages deep.\n\nSearching ten pages deep costs 8x more than one page. Tracking both devices costs 2x more.\n\n### 2) Site audit\n\n- $0.01 per 20 pages audited with Lighthouse\n\n### 3) Keyword research (`related` mode)\n\n- Current billed cost pattern (from account usage logs):\n  - `0.02 + (0.0001 x returned_keywords)` USD\n- Default app setting: `150` results per search (`$0.035` each).\n- Available result tiers:\n  - 150 results = `$0.035`\n  - 300 results = `$0.05`\n  - 500 results = `$0.07`\n\n### 4) Domain overview\n\n- Standard domain overview request (with top 200 ranked keywords): `$0.0401` per domain.\n- General formula if needed:\n  - `0.0201 + (0.0001 x ranked_keywords_returned)` USD\n\n### 5) Backlinks search\n\n> [!NOTE]\n> There is a 2 week free trial, but then DataForSEO requires a $100/month commitment for this API. You can access this data for just $20/month through [openseo.so](https://openseo.so). Soon, we'll let you use an OpenSEO API key so that you can call our API from your self hosted instance.\n\n- Backlinks search costs about `$0.06` for a domain or `$0.04` for a page.\n- Opening extra tabs like `Referring Domains` or `Top Pages` adds about `+$0.02` each.\n- Exact cost can vary slightly based on returned rows and DataForSEO pricing.\n\n### 6) AI Search — Brand Lookup\n\n- One lookup = 6 DataForSEO AI Optimization calls (`aggregated_metrics` + `top_pages` + `mentions_search` across ChatGPT and Google AI Overview): up to about `$0.85` per lookup.\n  - `aggregated_metrics`: `$0.101` per platform.\n  - `top_pages`: page-ranke",
    "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 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.15.0\",\n    \"portless\": \"^0.5.2\",\n    \"pr",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "rag",
      "skill",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 88
    },
    "strategic_score": 88
  },
  {
    "owner": "astral-sh",
    "name": "ruff",
    "full_name": "astral-sh/ruff",
    "url": "https://github.com/astral-sh/ruff",
    "description": "An extremely fast Python linter and code formatter, written in Rust.",
    "language": "Rust",
    "total_stars": 48225,
    "forks": 2190,
    "stars_this_period": 56,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "linter",
        "pep8",
        "python",
        "python3",
        "ruff",
        "rust",
        "rustpython",
        "static-analysis",
        "static-code-analysis",
        "style-guide",
        "styleguide"
      ],
      "license": "MIT",
      "open_issues": 2029,
      "created_at": "2022-08-09T17:17:44Z",
      "pushed_at": "2026-06-25T21:37:40Z",
      "homepage": "https://docs.astral.sh/ruff",
      "default_branch": "main",
      "forks": 2190,
      "watchers": 104,
      "archived": false,
      "size_kb": 165861
    },
    "readme_content": "<!-- Begin section: Overview -->\n\n# Ruff\n\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![image](https://img.shields.io/pypi/v/ruff.svg)](https://pypi.python.org/pypi/ruff)\n[![image](https://img.shields.io/pypi/l/ruff.svg)](https://github.com/astral-sh/ruff/blob/main/LICENSE)\n[![image](https://img.shields.io/pypi/pyversions/ruff.svg)](https://pypi.python.org/pypi/ruff)\n[![Actions status](https://github.com/astral-sh/ruff/workflows/CI/badge.svg)](https://github.com/astral-sh/ruff/actions)\n[![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?logo=discord&logoColor=white)](https://discord.com/invite/astral-sh)\n\n[**Docs**](https://docs.astral.sh/ruff/) | [**Playground**](https://play.ruff.rs/)\n\nAn extremely fast Python linter and code formatter, written in Rust.\n\n<p align=\"center\">\n  <picture align=\"center\">\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/1309177/232603514-c95e9b0f-6b31-43de-9a80-9e844173fd6a.svg\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"https://user-images.githubusercontent.com/1309177/232603516-4fb4892d-585c-4b20-b810-3db9161831e4.svg\">\n    <img alt=\"Shows a bar chart with benchmark results.\" src=\"https://user-images.githubusercontent.com/1309177/232603516-4fb4892d-585c-4b20-b810-3db9161831e4.svg\">\n  </picture>\n</p>\n\n<p align=\"center\">\n  <i>Linting the CPython codebase from scratch.</i>\n</p>\n\n- ⚡️ 10-100x faster than existing linters (like Flake8) and formatters (like Black)\n- 🐍 Installable via `pip`\n- 🛠️ `pyproject.toml` support\n- 🤝 Python 3.14 compatibility\n- ⚖️ Drop-in parity with [Flake8](https://docs.astral.sh/ruff/faq/#how-does-ruffs-linter-compare-to-flake8), isort, and [Black](https://docs.astral.sh/ruff/faq/#how-does-ruffs-formatter-compare-to-black)\n- 📦 Built-in caching, to avoid re-analyzing unchanged files\n- 🔧 Fix support, for automatic error correction (e.g., automatically remove unused imports)\n- 📏 Over [900 built-in rules](https://docs.astral.sh/ruff/rules/), with native re-implementations\n    of popular Flake8 plugins, like flake8-bugbear\n- ⌨️ First-party [editor integrations](https://docs.astral.sh/ruff/editors) for [VS Code](https://github.com/astral-sh/ruff-vscode) and [more](https://docs.astral.sh/ruff/editors/setup)\n- 🌎 Monorepo-friendly, with [hierarchical and cascading configuration](https://docs.astral.sh/ruff/configuration/#config-file-discovery)\n\nRuff aims to be orders of magnitude faster than alternative tools while integrating more\nfunctionality behind a single, common interface.\n\nRuff can be used to replace [Flake8](https://pypi.org/project/flake8/) (plus dozens of plugins),\n[Black](https://github.com/psf/black), [isort](https://pypi.org/project/isort/),\n[pydocstyle](https://pypi.org/project/pydocstyle/), [pyupgrade](https://pypi.org/project/pyupgrade/),\n[autoflake](https://pypi.org/project/autoflake/), and more, all while executing tens or hundreds of\ntimes faster than any individual tool.\n\nRuff is extremely actively developed and used in major open-source projects like:\n\n- [Apache Airflow](https://github.com/apache/airflow)\n- [Apache Superset](https://github.com/apache/superset)\n- [FastAPI](https://github.com/tiangolo/fastapi)\n- [Hugging Face](https://github.com/huggingface/transformers)\n- [Pandas](https://github.com/pandas-dev/pandas)\n- [SciPy](https://github.com/scipy/scipy)\n\n...and [many more](#whos-using-ruff).\n\nRuff is backed by [Astral](https://astral.sh), the creators of\n[uv](https://github.com/astral-sh/uv) and [ty](https://github.com/astral-sh/ty).\n\nRead the [launch\npost](https://astral.sh/blog/announcing-astral-the-company-behind-ruff), or the\noriginal [project\nannouncement](https://notes.crmarsh.com/python-tooling-could-be-much-much-faster).\n\n## Testimonials\n\n[**Sebastián Ramírez**](https://twitter.com/tiangolo/status/1591912354882764802), creator\nof [FastAPI](https://github.com/tiangolo/fastapi):\n\n> Ruff is so fast that sometimes I add an intentional bug in the code just to confirm it's actually\n> running and checking the code.\n\n[**Nick Schrock**](https://twitter.com/schrockn/status/1612615862904827904), founder of [Elementl](https://www.elementl.com/),\nco-creator of [GraphQL](https://graphql.org/):\n\n> Why is Ruff a gamechanger? Primarily because it is nearly 1000x faster. Literally. Not a typo. On\n> our largest module (dagster itself, 250k LOC) pylint takes about 2.5 minutes, parallelized across 4\n> cores on my M1. Running ruff against our _entire_ codebase takes .4 seconds.\n\n[**Bryan Van de Ven**](https://github.com/bokeh/bokeh/pull/12605), co-creator\nof [Bokeh](https://github.com/bokeh/bokeh/), original author\nof [Conda](https://docs.conda.io/en/latest/):\n\n> Ruff is ~150-200x faster than flake8 on my machine, scanning the whole repo takes ~0.2s instead of\n> ~20s. This is an enormous quality of life improvement for local dev. It's fast enough that I added\n> it as an actual commit hook, which is terrific.\n\n[**Timothy Crosley**](https://twitter.com/timothycrosley/status/1606420868514877440),\ncreator of [isort](https://github.com/PyCQA/isort):\n\n> Just switched my first project to Ruff. Only one downside so far: it's so fast I couldn't believe\n> it was working till I intentionally introduced some errors.\n\n[**Tim Abbott**](https://github.com/zulip/zulip/pull/23431#issuecomment-1302557034), lead developer of [Zulip](https://github.com/zulip/zulip) (also [here](https://github.com/astral-sh/ruff/issues/465#issuecomment-1317400028)):\n\n> This is just ridiculously fast... `ruff` is amazing.\n\n<!-- End section: Overview -->\n\n## Table of Contents\n\nFor more, see the [documentation](https://docs.astral.sh/ruff/).\n\n1. [Getting Started](#getting-started)\n1. [Configuration](#configuration)\n1. [Rules](#rules)\n1. [Contributing](#contributing)\n1. [Support](#support)\n1. [Acknowledgements](#acknowledgements)\n1. [Who's Using Ruff?](#whos-using-ruff)\n1. [License](#license)\n\n## Getting Started<a id=\"getting-started\"></a>\n\nFor more, see the [documentation](https://docs.astral.sh/ruff/).\n\n### Installation\n\nRuff is available as [`ruff`](https://pypi.org/project/ruff/) on PyPI.\n\nInvoke Ruff directly with [`uvx`](https://docs.astral.sh/uv/):\n\n```shell\nuvx ruff check   # Lint all files in the current directory.\nuvx ruff format  # Format all files in the current directory.\n```\n\nOr install Ruff with `uv` (recommended), `pip`, or `pipx`:\n\n```shell\n# With uv.\nuv tool install ruff@latest  # Install Ruff globally.\nuv add --dev ruff            # Or add Ruff to your project.\n\n# With pip.\npip install ruff\n\n# With pipx.\npipx install ruff\n```\n\nStarting with version `0.5.0`, Ruff can be installed with our standalone installers:\n\n```shell\n# On macOS and Linux.\ncurl -LsSf https://astral.sh/ruff/install.sh | sh\n\n# On Windows.\npowershell -c \"irm https://astral.sh/ruff/install.ps1 | iex\"\n\n# For a specific version.\ncurl -LsSf https://astral.sh/ruff/0.15.20/install.sh | sh\npowershell -c \"irm https://astral.sh/ruff/0.15.20/install.ps1 | iex\"\n```\n\nYou can also install Ruff via [Homebrew](https://formulae.brew.sh/formula/ruff), [Conda](https://anaconda.org/conda-forge/ruff),\nand with [a variety of other package managers](https://docs.astral.sh/ruff/installation/).\n\n### Usage\n\nTo run Ruff as a linter, try any of the following:\n\n```shell\nruff check                          # Lint all files in the current directory (and any subdirectories).\nruff check path/to/code/            # Lint all files in `/path/to/code` (and any subdirectories).\nruff check path/to/code/*.py        # Lint all `.py` files in `/path/to/code`.\nruff check path/to/code/to/file.py  # Lint `file.py`.\nruff check @arguments.txt           # Lint using an input file, treating its contents as newline-delimited command-line arguments.\n```\n\nOr, to run Ruff as a formatter:\n\n```shell\nruff format                          # Format all files in the current directory (and any subdirectories).\nruff format path/to/code/            # Format all files in `/path/to/code` (and any subdirectories).\nruff format path/to/code/*.py        # Format all `.py` files in `/path/to/code`.\nruff format path/to/code/to/file.py  # Format `file.py`.\nruff format @arguments.txt           # Format using an input file, treating its contents as newline-delimited command-line arguments.\n```\n\nRuff can also be used as a [pre-commit](https://pre-commit.com/) hook via [`ruff-pre-commit`](https://github.com/astral-sh/ruff-pre-commit):\n\n```yaml\n- repo: https://github.com/astral-sh/ruff-pre-commit\n  # Ruff version.\n  rev: v0.15.20\n  hooks:\n    # Run the linter.\n    - id: ruff-check\n      args: [ --fix ]\n    # Run the formatter.\n    - id: ruff-format\n```\n\nRuff can also be used as a [VS Code extension](https://github.com/astral-sh/ruff-vscode) or with [various other editors](https://docs.astral.sh/ruff/editors/setup).\n\nRuff can also be used as a [GitHub Action](https://github.com/features/actions) via\n[`ruff-action`](https://github.com/astral-sh/ruff-action):\n\n```yaml\nname: Ruff\non: [ push, pull_request ]\njobs:\n  ruff:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: astral-sh/ruff-action@v3\n```\n\n### Configuration<a id=\"configuration\"></a>\n\nRuff can be configured through a `pyproject.toml`, `ruff.toml`, or `.ruff.toml` file (see:\n[_Configuration_](https://docs.astral.sh/ruff/configuration/), or [_Settings_](https://docs.astral.sh/ruff/settings/)\nfor a complete list of all configuration options).\n\nIf left unspecified, Ruff's default configuration is equivalent to the following `ruff.toml` file:\n\n```toml\n# Exclude a variety of commonly ignored directories.\nexclude = [\n    \".bzr\",\n    \".direnv\",\n    \".eggs\",\n    \".git\",\n    \".git-rewrite\",\n    \".hg\",\n    \".ipynb_checkpoints\",\n    \".mypy_cache\",\n    \".nox\",\n    \".pants.d\",\n    \".pyenv\",\n    \".pytest_cache\",\n    \".pytype\",\n    \".ruff_cache\",\n    \".svn\",\n    \".tox\",\n    \".venv\",\n    \".vscode\",\n    \"__pypackages__\",\n    \"_build\",\n    \"buck-out\",\n    \"build\",\n    \"dist\",\n    \"node_modules\",\n    \"site-packages\",\n    \"venv\",\n]\n\n# Same as Black.\nline-length = 88\nindent-width = 4\n\n# Assume Python 3.10\ntarget-version = \"py310\"\n\n[lint]\n# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.\nselect = [\"E4\", \"E7\", \"E9\", \"F\"]\nignore = []\n\n# Allow fix for all enabled rules (when `--fix`) is provided.\nfixable = [\"ALL\"]\nunfixable = []\n\n# Allow unused variables when underscore-prefixed.\ndummy-variable-rgx = \"^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$\"\n\n[format]\n# Like Black, use double quotes for strings.\nquote-style = \"double\"\n\n# Like Black, indent with spaces, rather than tabs.\nindent-style = \"space\"\n\n# Like Black, respect magic trailing commas.\nskip-magic-trailing-comma = false\n\n# Like Black, automatically detect the appropriate line ending.\nline-ending = \"auto\"\n```\n\nNote that, in a `pyproject.toml`, each section header should be prefixed with `tool.ruff`. For\nexample, `[lint]` should be replaced with `[tool.ruff.lint]`.\n\nSome configuration options can be provided via dedicated command-line arguments, such as those\nrelated to rule enablement and disablement, file discovery, and logging level:\n\n```shell\nruff check --select F401 --select F403 --quiet\n```\n\nThe remaining configuration options can be provided through a catch-all `--config` argument:\n\n```shell\nruff check --config \"lint.per-file-ignores = {'some_file.py' = ['F841']}\"\n```\n\nTo opt in to the latest lint rules, formatter style changes, interface updates, and more, enable\n[preview mode](https://docs.astral.sh/ruff/preview/) by setting `preview = true` in your configuration\nfile or passing `--preview` on the command line. Preview mode enables a collection of unstable\nfeatures that may change prior to stabilization.\n\nSee `ruff help` for more on Ruff's top-level commands, or `ruff help check` and `ruff help format`\nfor more on the linting and formatting commands, respectively.\n\n## Rules<a id=\"rules\"></a>\n\n<!-- Begin section",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[workspace]\nmembers = [\"crates/*\"]\nresolver = \"2\"\n\n[workspace.package]\n# Please update rustfmt.toml when bumping the Rust edition\nedition = \"2024\"\nrust-version = \"1.94\"\nhomepage = \"https://docs.astral.sh/ruff\"\ndocumentation = \"https://docs.astral.sh/ruff\"\nrepository = \"https://github.com/astral-sh/ruff\"\nauthors = [\"Charlie Marsh <charlie.r.marsh@gmail.com>\"]\nlicense = \"MIT\"\n\n[workspace.dependencies]\nruff = { version = \"0.15.20\", path = \"crates/ruff\" }\nruff_annotate_snippets = { version = \"0.0.3\", path = \"crates/ruff_annotate_snippets\" }\nruff_cache = { version = \"0.0.3\", path = \"crates/ruff_cache\" }\nruff_db = { version = \"0.0.3\", path = \"crates/ruff_db\", default-features = false }\nruff_diagnostics = { version = \"0.0.3\", path = \"crates/ruff_diagnostics\" }\nruff_formatter = { version = \"0.0.3\", path = \"crates/ruff_formatter\" }\nruff_graph = { version = \"0.0.3\", path = \"crates/ruff_graph\" }\nruff_index = { version = \"0.0.3\", path = \"crates/ruff_index\" }\nruff_linter = { version = \"0.15.20\", path = \"crates/ruff_linter\" }\nruff_macros = { version = \"0.0.3\", path = \"crates/ruff_macros\" }\nruff_markdown = { version = \"0.0.3\", path = \"crates/ruff_markdown\" }\nruff_memory_usage = { version = \"0.0.3\", path = \"crates/ruff_memory_usage\" }\nruff_notebook = { version = \"0.0.3\", path = \"crates/ruff_notebook\" }\nruff_options_metadata = { version = \"0.0.3\", path = \"crates/ruff_options_metadata\" }\nruff_python_ast = { version = \"0.0.3\", path = \"crates/ruff_python_ast\" }\nruff_python_codegen = { version = \"0.0.3\", path = \"crates/ruff_python_codegen\" }\nruff_python_formatter = { version = \"0.0.3\", path = \"crates/ruff_python_formatter\" }\nruff_python_importer = { version = \"0.0.3\", path = \"crates/ruff_python_importer\" }\nruff_python_index = { version = \"0.0.3\", path = \"crates/ruff_python_index\" }\nruff_python_literal = { version = \"0.0.3\", path = \"crates/ruff_python_literal\" }\nruff_python_parser = { version = \"0.0.3\", path = \"crates/ruff_python_parser\" }\nruff_python_semantic = { version = \"0.0.3\", path = \"crates/ruff_python_semantic\" }\nruff_python_stdlib = { version = \"0.0.3\", path = \"crates/ruff_python_stdlib\" }\nruff_python_trivia = { version = \"0.0.3\", path = \"crates/ruff_python_trivia\" }\nruff_server = { version = \"0.0.3\", path = \"crates/ruff_server\" }\nruff_source_file = { version = \"0.0.3\", path = \"crates/ruff_source_file\" }\nruff_mdtest = { path = \"crates/ruff_mdtest\" }\nruff_ranged_value = { version = \"0.0.2\", path = \"crates/ruff_ranged_value\" }\nruff_text_size = { version = \"0.0.3\", path = \"crates/ruff_text_size\" }\nruff_workspace = { version = \"0.0.3\", path = \"crates/ruff_workspace\" }\n\nty = { path = \"crates/ty\" }\nty_combine = { version = \"0.0.2\", path = \"crates/ty_combine\" }\nty_completion_bench = { path = \"crates/ty_completion_bench\" }\nty_completion_eval = { path = \"crates/ty_completion_eval\" }\nty_ide = { path = \"crates/ty_ide\" }\nty_module_resolver = { version = \"0.0.3\", path = \"crates/ty_module_resolver\" }\nty_project = { path = \"crates/ty_project\", default-features = false }\nty_python_semantic = { version = \"0.0.2\", path = \"crates/ty_python_semantic\" }\nty_python_core = { version = \"0.0.2\", path = \"crates/ty_python_core\" }\nty_server = { path = \"crates/ty_server\" }\nty_site_packages = { version = \"0.0.3\", path = \"crates/ty_site_packages\" }\nty_static = { version = \"0.0.3\", path = \"crates/ty_static\" }\nty_test = { path = \"crates/ty_test\" }\nty_vendored = { version = \"0.0.2\", path = \"crates/ty_vendored\" }\n\nmdtest = { path = \"crates/mdtest\" }\n\naho-corasick = { version = \"1.1.3\" }\narrayvec = { version = \"0.7.6\" }\nanstream = { version = \"1.0.0\" }\nanstyle = { version = \"1.0.10\" }\nanyhow = { version = \"1.0.80\" }\narc-swap = { version = \"1.7.1\" }\nargfile = { version = \"1.0.0\" }\nassert_fs = { version = \"1.1.0\" }\nrkyv = { version = \"0.8.16\" }\nbitflags = { version = \"2.5.0\" }\nbitvec = { version = \"1.0.1\", default-features = false, features = [\n    \"alloc\",\n] }\nbstr = { version = \"1.9.1\" }\ncachedir = { version = \"0.3.1\" }\ncamino = { version = \"1.1.7\" }\nclap = { version = \"4.5.3\", features = [\"derive\"] }\nclap_complete_command = { version = \"0.6.0\" }\nclearscreen = { version = \"4.0.0\" }\ncodspeed-criterion-compat = { version = \"4.4.1\", default-features = false }\ncolored = { version = \"3.0.0\" }\ncompact_str = \"0.9.0\"\nconsole_error_panic_hook = { version = \"0.1.7\" }\nconsole_log = { version = \"1.0.0\" }\ncountme = { version = \"3.0.1\" }\ncriterion = { version = \"0.8.0\", default-features = false }\ncrossbeam = { version = \"0.8.4\" }\ncsv = { version = \"1.3.1\" }\ndashmap = { version = \"6.0.1\" }\ndatatest-stable = { version = \"0.3.3\" }\ndivan = { package = \"codspeed-divan-compat\", version = \"4.4.1\" }\ndrop_bomb = { version = \"0.1.5\" }\ndunce = { version = \"1.0.5\" }\netcetera = { version = \"0.11.0\" }\nfern = { version = \"0.7.0\" }\nfiletime = { version = \"0.2.23\" }\nget-size2 = { version = \"0.10.0\", features = [\n    \"derive\",\n    \"smallvec\",\n    \"hashbrown\",\n    \"compact-str\",\n    \"ordermap\",\n    \"thin-vec\",\n] }\nglob = { version = \"0.3.1\" }\nglobset = { version = \"0.4.14\" }\nglobwalk = { ",
    "strategic_keywords": [
      "workspace",
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 16,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 6,
      "total": 75
    },
    "strategic_score": 75
  },
  {
    "owner": "hoangsonww",
    "name": "Claude-Code-Agent-Monitor",
    "full_name": "hoangsonww/Claude-Code-Agent-Monitor",
    "url": "https://github.com/hoangsonww/Claude-Code-Agent-Monitor",
    "description": "🚀 A real-time monitoring dashboard for Claude Code, built with SQLite3, Node.js, Express, React, Vite, TailwindCSS, and WebSockets. It tracks sessions, agent activity, tool usage, and subagent orchestration, providing live analytics, a Kanban status board, status notifications, a cute buddy, and an interactive web UI/MacOS/Windows native app.",
    "language": "TypeScript",
    "total_stars": 635,
    "forks": 141,
    "stars_this_period": 51,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai-agents",
        "claude-agents",
        "claude-code",
        "claude-skills",
        "express",
        "expressjs",
        "macos-app",
        "node",
        "nodejs",
        "python",
        "react",
        "rest-api",
        "rfc-6455",
        "sqlite",
        "sqlite3",
        "tailwind",
        "tailwindcss",
        "typescript",
        "vite",
        "websocket"
      ],
      "license": "MIT",
      "open_issues": 22,
      "created_at": "2026-03-05T18:52:21Z",
      "pushed_at": "2026-06-25T16:18:33Z",
      "homepage": "https://hoangsonww.github.io/Claude-Code-Agent-Monitor/",
      "default_branch": "master",
      "forks": 141,
      "watchers": 15,
      "archived": false,
      "size_kb": 74722
    },
    "readme_content": "# Agent Dashboard for Claude Code\n\n### Real-time monitoring platform for Claude Code agent activity 🚀\n\nA professional dashboard to track and visualize your Claude Code agent sessions, tool usage, and subagent orchestration in real-time. Built with Node.js, Express, React, and SQLite, it integrates directly with Claude Code via its native hook system for seamless session tracking and analytics.\n\n![Claude Code](https://img.shields.io/badge/Claude_Code-orange?style=flat-square&logo=claude&logoColor=white)\n![Claude Code Plugins](https://img.shields.io/badge/Claude_Code-Plugins_&_Skills-orange?style=flat-square&logo=anthropic&logoColor=white)\n![Model Context Protocol](https://img.shields.io/badge/Model_Context_Protocol-1.0-0f766e?style=flat-square&logo=modelcontextprotocol&logoColor=white)\n![Node.js](https://img.shields.io/badge/Node.js-%3E%3D18-339933?style=flat-square&logo=node.js&logoColor=white)\n![Python](https://img.shields.io/badge/Python-%3E%3D3.6-3776AB?style=flat-square&logo=python&logoColor=white)\n![Express](https://img.shields.io/badge/Express-4.21-000000?style=flat-square&logo=express&logoColor=white)\n![ws](https://img.shields.io/badge/ws-WebSocket_server-010101?style=flat-square&logo=socketdotio&logoColor=white)\n![web-push](https://img.shields.io/badge/web--push-VAPID-3b82f6?style=flat-square&logo=javascript&logoColor=white)\n![swagger-ui-express](https://img.shields.io/badge/swagger--ui--express-5.0-85EA2D?style=flat-square&logo=swagger&logoColor=white)\n![multer](https://img.shields.io/badge/multer-multipart_upload-FF6B6B?style=flat-square&logo=express&logoColor=white)\n![adm-zip](https://img.shields.io/badge/adm--zip-archive_extract-FBBF24?style=flat-square&logo=files&logoColor=white)\n![tar](https://img.shields.io/badge/tar-tgz_extract-A78BFA?style=flat-square&logo=gnu&logoColor=white)\n![React](https://img.shields.io/badge/React-18.3-61DAFB?style=flat-square&logo=react&logoColor=white)\n![TypeScript](https://img.shields.io/badge/TypeScript-5.7-3178C6?style=flat-square&logo=typescript&logoColor=white)\n![Javascript](https://img.shields.io/badge/JavaScript-ES6-F7DF1E?style=flat-square&logo=javascript&logoColor=white)\n![Vite](https://img.shields.io/badge/Vite-6.1-646CFF?style=flat-square&logo=vite&logoColor=white)\n![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-3.4-06B6D4?style=flat-square&logo=tailwindcss&logoColor=white)\n![PostCSS](https://img.shields.io/badge/PostCSS-8.5-DD3A0A?style=flat-square&logo=postcss&logoColor=white)\n![Autoprefixer](https://img.shields.io/badge/Autoprefixer-10.4-DD3735?style=flat-square&logo=autoprefixer&logoColor=white)\n![React Router](https://img.shields.io/badge/React_Router-6.28-CA4245?style=flat-square&logo=reactrouter&logoColor=white)\n![Lucide](https://img.shields.io/badge/Lucide_Icons-0.474-F56565?style=flat-square&logo=lucide&logoColor=white)\n![D3.js](https://img.shields.io/badge/D3.js-7-F9A03C?style=flat-square&logo=d3&logoColor=white)\n![Mermaid](https://img.shields.io/badge/Mermaid-10.2-ff3333?style=flat-square&logo=mermaid&logoColor=white)\n![i18next](https://img.shields.io/badge/i18next-22.4-7A42FF?style=flat-square&logo=i18next&logoColor=white)\n![i18next Language Detector](https://img.shields.io/badge/i18next_Language_Detector-6.1-7A42FF?style=flat-square&logo=i18next&logoColor=white)\n![SQLite](https://img.shields.io/badge/SQLite-3-003B57?style=flat-square&logo=sqlite&logoColor=white)\n![better--sqlite3](https://img.shields.io/badge/better--sqlite3-11.7-003B57?style=flat-square&logo=sqlite&logoColor=white)\n![better-sqlite3 WAL](https://img.shields.io/badge/better--sqlite3-WAL_mode-003B57?style=flat-square&logo=sqlite&logoColor=white)\n![WebSocket](https://img.shields.io/badge/WebSocket-RFC_6455-010101?style=flat-square&logo=socketdotio&logoColor=white)\n![SSE](https://img.shields.io/badge/SSE-Server_Sent_Events-FF6600?style=flat-square&logo=googlechrome&logoColor=white)\n![OpenAPI](https://img.shields.io/badge/OpenAPI-3.0-000000?style=flat-square&logo=openapiinitiative&logoColor=white)\n![Swagger](https://img.shields.io/badge/Swagger-3.0-85EA2D?style=flat-square&logo=swagger&logoColor=white)\n![VS Code](https://img.shields.io/badge/VS_Code-Extension-007ACC?style=flat-square&logo=vscodium&logoColor=white)\n![Electron](https://img.shields.io/badge/Electron-35-47848F?style=flat-square&logo=electron&logoColor=white)\n![electron-builder](https://img.shields.io/badge/electron--builder-25.1-2c2e3b?style=flat-square&logo=electron&logoColor=white)\n![macOS](https://img.shields.io/badge/macOS-Desktop_App-000000?style=flat-square&logo=apple&logoColor=white)\n![Windows](https://img.shields.io/badge/Windows-Desktop_App-0078D6?style=flat-square&logo=windows&logoColor=white)\n![SMAppService](https://img.shields.io/badge/SMAppService-Login_Items-000000?style=flat-square&logo=apple&logoColor=white)\n![Universal DMG](https://img.shields.io/badge/Universal_DMG-arm64_%2B_x64-7c3aed?style=flat-square&logo=apple&logoColor=white)\n![NSIS Installer](https://img.shields.io/badge/Windows-NSIS_%2B_Portable-1f6feb?style=flat-square&logo=windows&logoColor=white)\n![Vitest](https://img.shields.io/badge/Vitest-1.0-646CFF?style=flat-square&logo=vitest&logoColor=white)\n![React Testing Library](https://img.shields.io/badge/React_Testing_Library-13.0-FF5733?style=flat-square&logo=testinglibrary&logoColor=white)\n![ESLint](https://img.shields.io/badge/ESLint-8.44-4B32C3?style=flat-square&logo=eslint&logoColor=white)\n![Prettier](https://img.shields.io/badge/Prettier-3.8-F7B93E?style=flat-square&logo=prettier&logoColor=white)\n![Docker](https://img.shields.io/badge/Docker-20.10-2496ED?style=flat-square&logo=docker&logoColor=white)\n![Podman](https://img.shields.io/badge/Podman-4.0-CC342D?style=flat-square&logo=podman&logoColor=white)\n![Terraform](https://img.shields.io/badge/Terraform-%3E%3D1.5-844FBA?style=flat-square&logo=terraform&logoColor=white)\n![Kubernetes](https://img.shields.io/badge/Kubernetes-%3E%3D1.24-326CE5?style=flat-square&logo=kubernetes&logoColor=white)\n![Helm](https://img.shields.io/badge/Helm-3-0F1689?style=flat-square&logo=helm&logoColor=white)\n![Kustomize](https://img.shields.io/badge/Kustomize-5.0-326CE5?style=flat-square&logo=kubernetes&logoColor=white)\n![Nginx](https://img.shields.io/badge/Nginx-Ingress-009639?style=flat-square&logo=nginx&logoColor=white)\n![Prometheus](https://img.shields.io/badge/Prometheus-2.x-E6522C?style=flat-square&logo=prometheus&logoColor=white)\n![Grafana](https://img.shields.io/badge/Grafana-10.x-F46800?style=flat-square&logo=grafana&logoColor=white)\n![Coralogix](https://img.shields.io/badge/Coralogix-Observability-1a1a2e?style=flat-square&logo=datadog&logoColor=white)\n![OpenTelemetry](https://img.shields.io/badge/OpenTelemetry-Collector-4f46e5?style=flat-square&logo=opentelemetry&logoColor=white)\n![AWS](https://img.shields.io/badge/AWS-ECS%20%7C%20RDS-232F3E?style=flat-square&logo=task&logoColor=white)\n![Google Cloud](https://img.shields.io/badge/Google_Cloud-GKE%20%7C%20SQL-4285F4?style=flat-square&logo=googlecloud&logoColor=white)\n![Azure](https://img.shields.io/badge/Azure-AKS%20%7C%20SQL-0078D4?style=flat-square&logo=cloudflare&logoColor=white)\n![Oracle Cloud](https://img.shields.io/badge/Oracle_Cloud-OKE%20%7C%20DB-F80000?style=flat-square&logo=cloudways&logoColor=white)\n![GitHub Actions](https://img.shields.io/badge/GitHub_Actions-pipelines-2088FF?style=flat-square&logo=githubactions&logoColor=white)\n![GitLab CI](https://img.shields.io/badge/GitLab_CI-pipelines-FC6D26?style=flat-square&logo=gitlab&logoColor=white)\n![Make](https://img.shields.io/badge/Make-4.3-000000?style=flat-square&logo=make&logoColor=white)\n![Auto Release](https://img.shields.io/badge/CI-auto--release_to_GitHub-22c55e?style=flat-square&logo=githubactions&logoColor=white)\n![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)\n\n> [!TIP]\n> See also: [README-CN.md](./README-CN.md) (中文版本) and [README-VI.md](./README-VI.md) (Phiên bản tiếng Việt) for localized documentation with region-specific tips and best practices.\n\n---\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Internationalization (i18n)](#internationalization-i18n)\n- [Features](#features)\n- [Quick Start](#quick-start)\n- [How It Works](#how-it-works)\n- [Configuration](#configuration)\n- [npm Scripts](#npm-scripts)\n- [Plugin Marketplace](#plugin-marketplace)\n- [Agent Extensions](#agent-extensions)\n- [MCP Integration](#mcp-integration)\n- [API Reference](#api-reference)\n- [Hook Events](#hook-events)\n- [Browser Notifications](#browser-notifications)\n- [Update Notifier](#update-notifier)\n- [Tabby — Floating Cat Companion](#tabby--floating-cat-companion)\n- [Connection Status Modal](#connection-status-modal)\n- [VS Code Extension](#vs-code-extension)\n- [Desktop App (macOS & Windows)](#desktop-app-macos--windows)\n- [Data Storage](#data-storage)\n- [Statusline](#statusline)\n- [Server Architecture](#server-architecture)\n- [Client Routing](#client-routing)\n- [Hook Handler Flow](#hook-handler-flow)\n- [Deployment Modes](#deployment-modes)\n- [Project Structure](#project-structure)\n- [Troubleshooting](#troubleshooting)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Overview\n\nTrack sessions, monitor agents in real-time, visualize tool usage, and observe subagent orchestration through a professional dark-themed web interface. Integrates directly with Claude Code via its native hook system.\n\n```mermaid\ngraph LR\n    A[\"Claude Code<br/>Session\"] -->|hooks fire on<br/>tool use / stop| B[\"Hook Handler<br/>(Node.js script)\"]\n    B -->|HTTP POST| C[\"Dashboard Server<br/>(Express + SQLite)\"]\n    C -->|WebSocket<br/>broadcast| D[\"Dashboard UI<br/>(React + Tailwind)\"]\n    style A fill:#6366f1,stroke:#818cf8,color:#fff\n    style B fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed\n    style C fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed\n    style D fill:#10b981,stroke:#34d399,color:#fff\n```\n\nIn addition to the real-time monitoring dashboard, it also includes a local MCP server implementation in `mcp/` that exposes a catalog of tools for introspecting and managing the dashboard itself, making it easy to integrate dashboard operations directly into your Claude Code workflows. There is also an agent extension layer, which provides Claude Code plugins, skills, and subagents for dashboard interaction, analytics, and workflow intelligence.\n\n<a href=\"https://www.star-history.com/?repos=hoangsonww%2FClaude-Code-Agent-Monitor&type=date&legend=top-left\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=hoangsonww/Claude-Code-Agent-Monitor&type=date&theme=dark&legend=top-left\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=hoangsonww/Claude-Code-Agent-Monitor&type=date&legend=top-left\" />\n   <img alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=hoangsonww/Claude-Code-Agent-Monitor&type=date&legend=top-left\" />\n </picture>\n</a>\n\n### Internationalization (i18n)\n\nThe UI ships with built-in locale switching for English (`en`), Chinese (`zh`), and Vietnamese (`vi`). Language resources are loaded by namespace and persisted through browser storage for stable user preference across refreshes.\n\n```mermaid\nflowchart LR\n    A[\"User selects language<br/>en / zh / vi\"] --> B[\"i18next detector<br/>localStorage -> navigator\"]\n    B --> C[\"Resolved language<br/>fallback: en\"]\n    C --> D[\"Namespace resources<br/>common/nav/dashboard/...\"]\n    D --> E[\"React useTranslation hooks\"]\n    E --> F[\"Localized UI + accessibility labels\"]\n```\n\nFor full architecture and operational guidance, see [docs/I18N.md](./docs/I18N.md).\n\n### User Interface\n\nComes with a sleek dark theme, responsive design, and intuitive navigation to explore your agent activity:\n\n<p align=\"center\">\n  <img src=\"images/dashboard.png\" alt=\"Dashboard Overview\" width=\"100%\">\n  <br>\n  <em>📡 <strong>Dashboard · Monitor</strong> — overview stats, active agent cards, and recent activity feed</em>\n</p>\n\n<p align=\"center\">\n  <img ",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"agent-dashboard\",\n  \"version\": \"1.3.0\",\n  \"description\": \"Real-time dashboard for tracking Claude Code agent activity\",\n  \"private\": true,\n  \"type\": \"commonjs\",\n  \"main\": \"server/index.js\",\n  \"files\": [\n    \"server\",\n    \"scripts\",\n    \"data\",\n    \"mcp\",\n    \"statusline\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"author\": \"Son Nguyen\",\n  \"funding\": \"https://github.com/sponsors/hoangsonww\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/hoangsonww/Claude-Code-Agent-Monitor.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/hoangsonww/Claude-Code-Agent-Monitor/issues\"\n  },\n  \"license\": \"MIT\",\n  \"homepage\": \"https://github.com/hoangsonww/Claude-Code-Agent-Monitor#readme\",\n  \"keywords\": [\n    \"claude\",\n    \"claude-code\",\n    \"anthropic\",\n    \"agent\",\n    \"dashboard\",\n    \"real-time\",\n    \"monitoring\",\n    \"activity-tracking\",\n    \"mcp\",\n    \"model-context-protocol\",\n    \"nodejs\",\n    \"express\",\n    \"react\",\n    \"websocket\",\n    \"sqlite\",\n    \"better-sqlite3\",\n    \"web-push\",\n    \"vapid\",\n    \"notifications\",\n    \"productivity\",\n    \"developer-tools\"\n  ],\n  \"scripts\": {\n    \"prepare\": \"git config core.hooksPath .husky || true\",\n    \"dev\": \"node scripts/dev.js\",\n    \"dev:raw\": \"concurrently -n server,client -c blue,green \\\"npm run dev:server\\\" \\\"npm run dev:client\\\"\",\n    \"dev:server\": \"node --watch server/index.js\",\n    \"dev:client\": \"cd client && npm run dev\",\n    \"build\": \"cd client && npm run build\",\n    \"start\": \"node server/index.js\",\n    \"setup\": \"npm install && (cd client && npm install) && (cd vscode-extension && npm install)\",\n    \"update:pull-setup\": \"git pull --ff-only && npm run setup\",\n    \"mcp:install\": \"npm --prefix mcp install\",\n    \"mcp:build\": \"npm --prefix mcp run build\",\n    \"mcp:start\": \"npm --prefix mcp run start\",\n    \"mcp:start:http\": \"npm --prefix mcp run start:http\",\n    \"mcp:start:repl\": \"npm --prefix mcp run start:repl\",\n    \"mcp:dev\": \"npm --prefix mcp run dev\",\n    \"mcp:dev:http\": \"npm --prefix mcp run dev:http\",\n    \"mcp:dev:repl\": \"npm --prefix mcp run dev:repl\",\n    \"mcp:typecheck\": \"npm --prefix mcp run typecheck\",\n    \"mcp:docker:build\": \"docker build -f mcp/Dockerfile -t agent-dashboard-mcp:local .\",\n    \"mcp:podman:build\": \"podman build -f mcp/Dockerfile -t localhost/agent-dashboard-mcp:local .\",\n    \"desktop:install\": \"cd desktop && node scripts/install.js\",\n    \"desktop:dev\": \"npm run build && cd desktop && npm run dev\",\n    \"desktop:build\": \"cd desktop && npm run build\",\n    \"desktop:dmg\": \"npm run build && cd desktop && npm run dmg\",\n    \"desktop:dmg:arm64\": \"npm run build && cd desktop && npm run dmg:arm64\",\n    \"desktop:dmg:x64\": \"npm run build && cd desktop && npm run dmg:x64\",\n    \"desktop:win\": \"npm run build && cd desktop && npm run win\",\n    \"desktop:win:portable\": \"npm run build && cd desktop && npm run win:portable\",\n    \"desktop:test\": \"cd desktop && npm test\",\n    \"install-hooks\": \"node scripts/install-hooks.js\",\n    \"seed\": \"node scripts/seed.js\",\n    \"import-history\": \"node scripts/import-history.js\",\n    \"reconcile-tokens\": \"node scripts/import-history.js --reconcile-tokens\",\n    \"clear-data\": \"node scripts/clear-data.js\",\n    \"test\": \"node --test server/__tests__/*.test.js && cd client && npm test\",\n    \"test:server\": \"node --test server/__tests__/*.test.js\",\n    \"test:client\": \"cd client && npm test\",\n    \"test:mcp\": \"npm --prefix mcp run test\",\n    \"format\": \"prettier --write .\",\n    \"format:check\": \"prettier --check .\"\n  },\n  \"dependencies\": {\n    \"adm-zip\": \"^0.5.16\",\n    \"cors\": \"^2.8.5\",\n    \"express\": \"^4.21.2\",\n    \"multer\": \"^2.0.0\",\n    \"swagger-ui-express\": \"^5.0.1\",\n    \"tar\": \"^7.4.3\",\n    \"uuid\": \"^11.1.0\",\n    \"web-push\": \"^3.6.7\",\n    \"ws\": \"^8.18.0\"\n  },\n  \"optionalDependencies\": {\n    \"better-sqlite3\": \"^11.7.0\"\n  },\n  \"devDependencies\": {\n    \"concurrently\": \"^9.1.2\",\n    \"prettier\": \"^3.8.1\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "skill",
      "protocol"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 11,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 80
    },
    "strategic_score": 80
  },
  {
    "owner": "jesseduffield",
    "name": "lazygit",
    "full_name": "jesseduffield/lazygit",
    "url": "https://github.com/jesseduffield/lazygit",
    "description": "simple terminal UI for git commands",
    "language": "Go",
    "total_stars": 79659,
    "forks": 2883,
    "stars_this_period": 49,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "cli",
        "git",
        "terminal"
      ],
      "license": "MIT",
      "open_issues": 993,
      "created_at": "2018-05-19T00:53:06Z",
      "pushed_at": "2026-06-24T20:14:28Z",
      "homepage": "",
      "default_branch": "master",
      "forks": 2883,
      "watchers": 327,
      "archived": false,
      "size_kb": 154830
    },
    "readme_content": "<div align=\"center\">\n<sup>Special thanks to:</sup>\n<br>\n<br>\n<a href=\"https://www.warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=lazygit_20231023\">\n  <div>\n    <img src=\"https://github.com/warpdotdev/brand-assets/blob/main/Github/Sponsor/Warp-Github-LG-02.png?raw=true\" width=\"400\" alt=\"Warp\">\n  </div>\n  <b>Warp, the intelligent terminal</b>\n  <br>\n  <b>Available for macOS and Linux</b>\n  <br>\n  <div>\n    <sup>Visit warp.dev to learn more.</sup>\n  </div>\n</a>\n<br>\n<hr>\n<a href=\"https://tuple.app/lazygit\">\n  <div>\n    <img src=\"../assets/tuple.png\" width=\"400\" alt=\"Tuple\">\n  </div>\n  <b>Tuple, the premier screen sharing app for developers on macOS and Windows.</b>\n</a>\n<br>\n<hr>\n<br>\n<a href=\"https://www.subble.com\">\n  <div>\n    <img src=\"../assets/subble.webp\" width=\"400\" alt=\"Subble\">\n  </div>\n  <b>I (Jesse) co-founded Subble to save your company time and money by finding unused and over-provisioned SaaS licences. Check it out!</b>\n</a>\n<br>\n\n<hr>\n</div>\n\n<p align=\"center\">\n  <img width=\"536\" src=\"https://user-images.githubusercontent.com/8456633/174470852-339b5011-5800-4bb9-a628-ff230aa8cd4e.png\">\n</p>\n\n<div align=\"center\">\n\nA simple terminal UI for git commands\n<br/>\n\n[![GitHub Releases](https://img.shields.io/github/downloads/jesseduffield/lazygit/total)](https://github.com/jesseduffield/lazygit/releases) [![Go Report Card](https://goreportcard.com/badge/github.com/jesseduffield/lazygit)](https://goreportcard.com/report/github.com/jesseduffield/lazygit) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/f46416b715d74622895657935fcada21)](https://app.codacy.com/gh/jesseduffield/lazygit/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![Codacy Badge](https://app.codacy.com/project/badge/Coverage/f46416b715d74622895657935fcada21)](https://app.codacy.com/gh/jesseduffield/lazygit/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_coverage) [![golangci-lint](https://img.shields.io/badge/linted%20by-golangci--lint-brightgreen)](https://golangci-lint.run/) [![GitHub tag](https://img.shields.io/github/v/tag/jesseduffield/lazygit?color=blue)](https://github.com/jesseduffield/lazygit/releases/latest) [![homebrew](https://img.shields.io/homebrew/v/lazygit?color=blue)](https://formulae.brew.sh/formula/lazygit)\n\n![commit_and_push](../assets/demo/commit_and_push-compressed.gif)\n\n</div>\n\n## Sponsors\n\n<p align=\"center\">\n Maintenance of this project is made possible by all the <a href=\"https://github.com/jesseduffield/lazygit/graphs/contributors\">contributors</a> and <a href=\"https://github.com/sponsors/jesseduffield\">sponsors</a>. If you'd like to sponsor this project and have your avatar or company logo appear below <a href=\"https://github.com/sponsors/jesseduffield\">click here</a>. 💙\n</p>\n\n<p align=\"center\">\n<!-- sponsors --><a href=\"https://github.com/intabulas\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;intabulas.png\" width=\"60px\" alt=\"User avatar: Mark Lussier\" /></a><a href=\"https://github.com/peppy\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;peppy.png\" width=\"60px\" alt=\"User avatar: Dean Herbert\" /></a><a href=\"https://github.com/piot\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;piot.png\" width=\"60px\" alt=\"User avatar: Peter Bjorklund\" /></a><a href=\"https://github.com/oliverguenther\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;oliverguenther.png\" width=\"60px\" alt=\"User avatar: Oliver Günther\" /></a><a href=\"https://github.com/pawanjay176\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;pawanjay176.png\" width=\"60px\" alt=\"User avatar: Pawan Dhananjay\" /></a><a href=\"https://github.com/naoey\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;naoey.png\" width=\"60px\" alt=\"User avatar: \" /></a><a href=\"https://github.com/carstengehling\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;carstengehling.png\" width=\"60px\" alt=\"User avatar: Carsten Gehling\" /></a><a href=\"https://github.com/Xetera\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;Xetera.png\" width=\"60px\" alt=\"User avatar: \" /></a><a href=\"https://github.com/nartc\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;nartc.png\" width=\"60px\" alt=\"User avatar: Chau Tran\" /></a><a href=\"https://github.com/matejcik\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;matejcik.png\" width=\"60px\" alt=\"User avatar: matejcik\" /></a><a href=\"https://github.com/lucatume\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;lucatume.png\" width=\"60px\" alt=\"User avatar: theAverageDev (Luca Tumedei)\" /></a><a href=\"https://github.com/IvanZuy\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;IvanZuy.png\" width=\"60px\" alt=\"User avatar: \" /></a><a href=\"https://github.com/ava1ar\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;ava1ar.png\" width=\"60px\" alt=\"User avatar: Aliaksandr Stelmachonak\" /></a><a href=\"https://github.com/pedropombeiro\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;pedropombeiro.png\" width=\"60px\" alt=\"User avatar: Pedro Pombeiro\" /></a><a href=\"https://github.com/bburgy\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;bburgy.png\" width=\"60px\" alt=\"User avatar: Burgy Benjamin\" /></a><a href=\"https://github.com/JoeKlemmer\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;JoeKlemmer.png\" width=\"60px\" alt=\"User avatar: Joe Klemmer\" /></a><a href=\"https://github.com/tobi\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;tobi.png\" width=\"60px\" alt=\"User avatar: Tobias Lütke\" /></a><a href=\"https://github.com/benbfortis\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;benbfortis.png\" width=\"60px\" alt=\"User avatar: Ben Beaumont\" /></a><a href=\"https://github.com/jakewarren\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;jakewarren.png\" width=\"60px\" alt=\"User avatar: \" /></a><a href=\"https://github.com/tgpholly\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;tgpholly.png\" width=\"60px\" alt=\"User avatar: Holly\" /></a><a href=\"https://github.com/Tommylans\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;Tommylans.png\" width=\"60px\" alt=\"User avatar: Tom Lanser\" /></a><a href=\"https://github.com/socketbox\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;socketbox.png\" width=\"60px\" alt=\"User avatar: Casey Boettcher\" /></a><a href=\"https://github.com/bitprophet\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;bitprophet.png\" width=\"60px\" alt=\"User avatar: Jeff Forcier\" /></a><a href=\"https://github.com/tayleighr\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;tayleighr.png\" width=\"60px\" alt=\"User avatar: \" /></a><a href=\"https://github.com/Novakov\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;Novakov.png\" width=\"60px\" alt=\"User avatar: Maciej T. Nowak\" /></a><a href=\"https://github.com/jhillyerd\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;jhillyerd.png\" width=\"60px\" alt=\"User avatar: James Hillyerd\" /></a><a href=\"https://github.com/nekhaevskiy\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;nekhaevskiy.png\" width=\"60px\" alt=\"User avatar: Yury\" /></a><a href=\"https://github.com/reivilibre\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;reivilibre.png\" width=\"60px\" alt=\"User avatar: Olivier reivilibre\" /></a><a href=\"https://github.com/BSteffaniak\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;BSteffaniak.png\" width=\"60px\" alt=\"User avatar: Braden Steffaniak\" /></a><a href=\"https://github.com/jordan-gillard\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;jordan-gillard.png\" width=\"60px\" alt=\"User avatar: Jordan Gillard\" /></a><a href=\"https://github.com/smangels\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;smangels.png\" width=\"60px\" alt=\"User avatar: Sebastian\" /></a><a href=\"https://github.com/amslezak\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;amslezak.png\" width=\"60px\" alt=\"User avatar: Andy Slezak\" /></a><a href=\"https://github.com/mkock\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;mkock.png\" width=\"60px\" alt=\"User avatar: Martin Kock\" /></a><a href=\"https://github.com/danielkokott\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;danielkokott.png\" width=\"60px\" alt=\"User avatar: Daniel Kokott\" /></a><a href=\"https://github.com/heijmans\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;heijmans.png\" width=\"60px\" alt=\"User avatar: Jan Heijmans\" /></a><a href=\"https://github.com/knowald\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;knowald.png\" width=\"60px\" alt=\"User avatar: Kevin Nowald\" /></a><a href=\"https://github.com/ethanjli\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;ethanjli.png\" width=\"60px\" alt=\"User avatar: Ethan Li\" /></a><a href=\"https://github.com/phubaba\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;phubaba.png\" width=\"60px\" alt=\"User avatar: Robert Forler\" /></a><a href=\"https://github.com/neunkasulle\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;neunkasulle.png\" width=\"60px\" alt=\"User avatar: Jan Zenkner\" /></a><a href=\"https://github.com/RVxLab\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;RVxLab.png\" width=\"60px\" alt=\"User avatar: \" /></a><a href=\"https://github.com/FrederickGeek8\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;FrederickGeek8.png\" width=\"60px\" alt=\"User avatar: Frederick Morlock\" /></a><a href=\"https://github.com/ezdac\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;ezdac.png\" width=\"60px\" alt=\"User avatar: Maximilian Langenfeld\" /></a><a href=\"https://github.com/lppassos\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;lppassos.png\" width=\"60px\" alt=\"User avatar: \" /></a><a href=\"https://github.com/neilcode\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;neilcode.png\" width=\"60px\" alt=\"User avatar: Neil Lambert\" /></a><a href=\"https://github.com/dhh\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;dhh.png\" width=\"60px\" alt=\"User avatar: David Heinemeier Hansson\" /></a><a href=\"https://github.com/ethanfischer\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;ethanfischer.png\" width=\"60px\" alt=\"User avatar: Ethan Fischer\" /></a><a href=\"https://github.com/poshboytl\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;poshboytl.png\" width=\"60px\" alt=\"User avatar: Terry Tai\" /></a><a href=\"https://github.com/roesnera\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;roesnera.png\" width=\"60px\" alt=\"User avatar: Adam Roesner\" /></a><a href=\"https://github.com/seven1m\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;seven1m.png\" width=\"60px\" alt=\"User avatar: Tim Morgan\" /></a><a href=\"https://github.com/sgoridotla1\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;sgoridotla1.png\" width=\"60px\" alt=\"User avatar: Maksym Shypulniak\" /></a><a href=\"https://github.com/ADIX7\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;ADIX7.png\" width=\"60px\" alt=\"User avatar: Kovács Ádám\" /></a><a href=\"https://github.com/slowdub\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;slowdub.png\" width=\"60px\" alt=\"User avatar: \" /></a><a href=\"https://github.com/serranomorante\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;serranomorante.png\" width=\"60px\" alt=\"User avatar: Patricio Serrano\" /></a><a href=\"https://github.com/kiriDevs\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;kiriDevs.png\" width=\"60px\" alt=\"User avatar: Kiri\" /></a><a href=\"https://github.com/StevenMasini\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;StevenMasini.png\" width=\"60px\" alt=\"User avatar: Steven Masini\" /></a><a href=\"https://github.com/bjornevik\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;bjornevik.png\" width=\"60px\" alt=\"User avatar: John Even Bjørnevik\" /></a><a href=\"https://github.com/moberst\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;moberst.png\" width=\"60px\" alt=\"User avatar: Michael Oberst\" /></a><a href=\"https://github.com/adam-e-trepanier\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;adam-e-trepanier.png\" width=\"60px\" alt=\"User avatar: Adam Trepanier\" /></a><a href=\"https://github.com/arkalon76\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;arkalon76.png\" width=\"60px\" alt=\"User avatar: Kenth Fagerlund\" /></a><a href=\"https://github.com/Djuuu\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;Djuuu.png\" width=\"60px\" alt=\"User avatar: Julien Tardot\" /></a><a href=\"https://github.com/ellord\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;ellord.png\" width=\"60px\" alt=\"User avatar: Ellord Tayag\" /></a><a href=\"https://github.com/EdgarPost\"><img src=\"https:&#x2F;&#x2F;github.com&#x2F;EdgarPost.png\" width=\"60px\" alt=\"User avatar: Edgar Post-B",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/jesseduffield/lazygit\n\ngo 1.25.0\n\n// This is necessary to ignore test files when executing gofumpt.\nignore ./test\n\nrequire (\n\tdario.cat/mergo v1.0.2\n\tgithub.com/adrg/xdg v0.5.3\n\tgithub.com/atotto/clipboard v0.1.4\n\tgithub.com/aybabtme/humanlog v0.4.1\n\tgithub.com/cli/go-gh/v2 v2.13.0\n\tgithub.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21\n\tgithub.com/creack/pty v1.1.24\n\tgithub.com/gdamore/tcell/v3 v3.4.0\n\tgithub.com/go-errors/errors v1.5.1\n\tgithub.com/gookit/color v1.6.1\n\tgithub.com/integrii/flaggy v1.8.0\n\tgithub.com/jesseduffield/generics v0.0.0-20250517122708-b0b4a53a6f5c\n\tgithub.com/jesseduffield/lazycore v0.0.0-20221012050358-03d2e40243c5\n\tgithub.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0\n\tgithub.com/karimkhaleel/jsonschema v0.0.0-20231001195015-d933f0d94ea3\n\tgithub.com/kyokomi/emoji/v2 v2.2.13\n\tgithub.com/lucasb-eyer/go-colorful v1.4.0\n\tgithub.com/mgutz/str v1.2.0\n\tgithub.com/mitchellh/go-ps v1.0.0\n\tgithub.com/rivo/uniseg v0.4.7\n\tgithub.com/sahilm/fuzzy v0.1.2\n\tgithub.com/samber/lo v1.53.0\n\tgithub.com/sanity-io/litter v1.5.8\n\tgithub.com/sasha-s/go-deadlock v0.3.9\n\tgithub.com/sirupsen/logrus v1.9.4\n\tgithub.com/spf13/afero v1.15.0\n\tgithub.com/spkg/bom v1.0.1\n\tgithub.com/stefanhaller/git-todo-parser v0.0.7-0.20250905083220-c50528f08304\n\tgithub.com/stretchr/testify v1.11.1\n\tgithub.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e\n\tgolang.org/x/exp v0.0.0-20240719175910-8a7402abbf56\n\tgolang.org/x/sync v0.20.0\n\tgolang.org/x/sys v0.45.0\n\tgopkg.in/ozeidan/fuzzy-patricia.v3 v3.0.0\n\tgopkg.in/yaml.v3 v3.0.1\n)\n\nrequire (\n\tgithub.com/bahlo/generic-list-go v0.2.0 // indirect\n\tgithub.com/buger/jsonparser v1.1.2 // indirect\n\tgithub.com/cli/safeexec v1.0.1 // indirect\n\tgithub.com/clipperhouse/displaywidth v0.11.0 // indirect\n\tgithub.com/clipperhouse/uax29/v2 v2.7.0 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/fatih/color v1.9.0 // indirect\n\tgithub.com/gdamore/encoding v1.0.1 // indirect\n\tgithub.com/go-logfmt/logfmt v0.5.0 // indirect\n\tgithub.com/google/go-cmp v0.7.0 // indirect\n\tgithub.com/hpcloud/tail v1.0.0 // indirect\n\tgithub.com/invopop/jsonschema v0.10.0 // indirect\n\tgithub.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 // indirect\n\tgithub.com/kr/pretty v0.3.1 // 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/onsi/ginkgo v1.10.3 // indirect\n\tgithub.com/onsi/gomega v1.34.1 // indirect\n\tgithub.com/petermattis/goid v0.0.0-20250813065127-a731cc31b4fe // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/rogpeppe/go-internal v1.14.1 // indirect\n\tgithub.com/wk8/go-ordered-map/v2 v2.1.8 // indirect\n\tgolang.org/x/net v0.47.0 // indirect\n\tgolang.org/x/term v0.43.0 // indirect\n\tgolang.org/x/text v0.37.0 // indirect\n\tgopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect\n\tgopkg.in/fsnotify.v1 v1.4.7 // indirect\n\tgopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect\n)\n",
    "strategic_keywords": [
      "rag"
    ],
    "relationship_label": "开发者工具",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 8,
      "novelty": 4,
      "productize": 11,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 6,
      "total": 59
    },
    "strategic_score": 59
  },
  {
    "owner": "withastro",
    "name": "astro",
    "full_name": "withastro/astro",
    "url": "https://github.com/withastro/astro",
    "description": "The web framework for content-driven websites. ⭐️ Star to support our work!",
    "language": "TypeScript",
    "total_stars": 60507,
    "forks": 3570,
    "stars_this_period": 49,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "astro",
        "blog",
        "browser",
        "components",
        "hybrid",
        "islands",
        "node",
        "server",
        "static",
        "static-site-generator",
        "universal"
      ],
      "license": "NOASSERTION",
      "open_issues": 147,
      "created_at": "2021-03-15T17:19:47Z",
      "pushed_at": "2026-06-25T20:43:15Z",
      "homepage": "https://astro.build",
      "default_branch": "main",
      "forks": 3570,
      "watchers": 211,
      "archived": false,
      "size_kb": 228526
    },
    "readme_content": "![Build the web you want](.github/assets/banner.jpg 'Build the web you want')\n\n<p align=\"center\">\n  <br/>\n  <a href=\"https://astro.build\">Astro</a> is a website build tool for the modern web &mdash;\n  <br/>\n  powerful developer experience meets lightweight output.\n  <br/><br/>\n</p>\n\n<div align=\"center\">\n\n[![main](https://github.com/withastro/astro/actions/workflows/ci.yml/badge.svg)](https://github.com/withastro/astro/actions/workflows/ci.yml)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/withastro/astro/blob/main/LICENSE)\n[![npm version](https://badge.fury.io/js/astro.svg)](https://badge.fury.io/js/astro)\n\n</div>\n\n## Install\n\nThe **recommended** way to install the latest version of Astro is by running the command below:\n\n```bash\nnpm create astro@latest\n```\n\nYou can also install Astro **manually** by running this command instead:\n\n```bash\nnpm install astro\n```\n\nLooking for help? Start with our [Getting Started](https://docs.astro.build/en/getting-started/) guide.\n\nLooking for quick examples? [Open a starter project](https://astro.new/) right in your browser.\n\n## Documentation\n\nVisit our [official documentation](https://docs.astro.build/).\n\n## Support\n\nHaving trouble? Get help in the official [Astro Discord](https://astro.build/chat).\n\n## Contributing\n\n**New contributors welcome!** Check out our [Contributors Guide](CONTRIBUTING.md) for help getting started.\n\nJoin us on [Discord](https://astro.build/chat) to meet other maintainers. We'll help you get your first contribution in no time!\n\n## Directory\n\n| Package                                                             | Release Notes                                                                                                                                                    |\n| ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [astro](packages/astro)                                             | [![astro version](https://img.shields.io/npm/v/astro.svg?label=%20)](packages/astro/CHANGELOG.md)                                                                |\n| [create-astro](packages/create-astro)                               | [![create-astro version](https://img.shields.io/npm/v/create-astro.svg?label=%20)](packages/create-astro/CHANGELOG.md)                                           |\n| [@astrojs/react](packages/integrations/react)                       | [![@astrojs/react version](https://img.shields.io/npm/v/@astrojs/react.svg?label=%20)](packages/integrations/react/CHANGELOG.md)                                 |\n| [@astrojs/preact](packages/integrations/preact)                     | [![@astrojs/preact version](https://img.shields.io/npm/v/@astrojs/preact.svg?label=%20)](packages/integrations/preact/CHANGELOG.md)                              |\n| [@astrojs/solid-js](packages/integrations/solid)                    | [![@astrojs/solid version](https://img.shields.io/npm/v/@astrojs/solid-js.svg?label=%20)](packages/integrations/solid/CHANGELOG.md)                              |\n| [@astrojs/svelte](packages/integrations/svelte)                     | [![@astrojs/svelte version](https://img.shields.io/npm/v/@astrojs/svelte.svg?label=%20)](packages/integrations/svelte/CHANGELOG.md)                              |\n| [@astrojs/vue](packages/integrations/vue)                           | [![@astrojs/vue version](https://img.shields.io/npm/v/@astrojs/vue.svg?label=%20)](packages/integrations/vue/CHANGELOG.md)                                       |\n| [@astrojs/node](packages/integrations/node)                         | [![@astrojs/node version](https://img.shields.io/npm/v/@astrojs/node.svg?label=%20)](packages/integrations/node/CHANGELOG.md)                                    |\n| [@astrojs/vercel](packages/integrations/vercel)                     | [![@astrojs/vercel version](https://img.shields.io/npm/v/@astrojs/vercel.svg?label=%20)](packages/integrations/vercel/CHANGELOG.md)                              |\n| [@astrojs/cloudflare](packages/integrations/cloudflare)             | [![@astrojs/cloudflare version](https://img.shields.io/npm/v/@astrojs/cloudflare.svg?label=%20)](packages/integrations/cloudflare/CHANGELOG.md)                  |\n| [@astrojs/partytown](packages/integrations/partytown)               | [![@astrojs/partytown version](https://img.shields.io/npm/v/@astrojs/partytown.svg?label=%20)](packages/integrations/partytown/CHANGELOG.md)                     |\n| [@astrojs/sitemap](packages/integrations/sitemap)                   | [![@astrojs/sitemap version](https://img.shields.io/npm/v/@astrojs/sitemap.svg?label=%20)](packages/integrations/sitemap/CHANGELOG.md)                           |\n| [@astrojs/alpinejs](packages/integrations/alpinejs)                 | [![@astrojs/alpinejs version](https://img.shields.io/npm/v/@astrojs/alpinejs.svg?label=%20)](packages/integrations/alpinejs/CHANGELOG.md)                        |\n| [@astrojs/mdx](packages/integrations/mdx)                           | [![@astrojs/mdx version](https://img.shields.io/npm/v/@astrojs/mdx.svg?label=%20)](packages/integrations/mdx/CHANGELOG.md)                                       |\n| [@astrojs/rss](packages/astro-rss)                                  | [![@astrojs/rss version](https://img.shields.io/npm/v/@astrojs/rss.svg?label=%20)](packages/astro-rss/CHANGELOG.md)                                              |\n| [@astrojs/netlify](packages/integrations/netlify)                   | [![@astrojs/netlify version](https://img.shields.io/npm/v/@astrojs/netlify.svg?label=%20)](packages/integrations/netlify/CHANGELOG.md)                           |\n| [@astrojs/check](packages/language-tools/astro-check)               | [![astro-check version](https://img.shields.io/npm/v/@astrojs/check.svg?label=%20)](packages/language-tools/astro-check/CHANGELOG.md)                            |\n| [@astrojs/language-server](packages/language-tools/language-server) | [![@astrojs/language-server version](https://img.shields.io/npm/v/@astrojs/language-server.svg?label=%20)](packages/language-tools/language-server/CHANGELOG.md) |\n| [@astrojs/ts-plugin](packages/language-tools/ts-plugin)             | [![@astrojs/ts-plugin version](https://img.shields.io/npm/v/@astrojs/ts-plugin.svg?label=%20)](packages/language-tools/ts-plugin/CHANGELOG.md)                   |\n| [astro-vscode](packages/language-tools/vscode)                      | [![astro-vscode version](https://img.shields.io/npm/v/astro-vscode.svg?label=%20)](packages/language-tools/vscode/CHANGELOG.md)                                  |\n\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6178/badge)](https://bestpractices.coreinfrastructure.org/projects/6178)\n\nSeveral official projects are maintained outside of this repo:\n\n| Project                                                    | Repository                                                    |\n| ---------------------------------------------------------- | ------------------------------------------------------------- |\n| [@astrojs/compiler](https://github.com/withastro/compiler) | [withastro/compiler](https://github.com/withastro/compiler)   |\n| [Starlight](https://github.com/withastro/starlight)        | [withastro/starlight](https://github.com/withastro/starlight) |\n\n## Links\n\n- [License (MIT)](LICENSE)\n- [Code of Conduct](https://github.com/withastro/.github/blob/main/CODE_OF_CONDUCT.md)\n- [Open Governance & Voting](https://github.com/withastro/.github/blob/main/GOVERNANCE.md)\n- [Project Funding](https://github.com/withastro/.github/blob/main/FUNDING.md)\n- [Website](https://astro.build/)\n\n## Sponsors\n\nAstro is free, open source software made possible by these wonderful sponsors.\n\n[❤️ Sponsor Astro! ❤️](https://github.com/withastro/.github/blob/main/FUNDING.md)\n\n<p align=\"center\">\n  <a target=\"_blank\" href=\"https://opencollective.com/astrodotbuild\">\n    <img src=\"https://astro.build/sponsors.png\" alt=\"Sponsor logos including the current Astro Sponsors, Gold Sponsors, and Exclusive Partner Sponsors: Netlify, Sentry, and Project IDX.\" />\n  </a>\n</p>\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"root\",\n  \"type\": \"module\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/withastro/astro.git\"\n  },\n  \"scripts\": {\n    \"release\": \"pnpm run build && changeset publish\",\n    \"build\": \"turbo run build --filter=astro --filter=create-astro --filter=\\\"@astrojs/*\\\" --filter=\\\"astro-vscode\\\" --filter=\\\"@benchmark/*\\\"\",\n    \"build:ci\": \"turbo run build:ci --filter=astro --filter=create-astro --filter=\\\"@astrojs/*\\\" --filter=\\\"@benchmark/*\\\"\",\n    \"build:ci:no-cache\": \"pnpm -r --filter=astro --filter=create-astro --filter=\\\"@astrojs/*\\\" --filter=\\\"@benchmark/*\\\" build:ci\",\n    \"build:examples\": \"turbo run build --filter=\\\"@example/*\\\"\",\n    \"dev\": \"turbo run dev --concurrency=40 --parallel --filter=astro --filter=create-astro --filter=\\\"@astrojs/*\\\" --filter=\\\"@benchmark/*\\\"\",\n    \"format\": \"pnpm run format:code && pnpm run format:imports\",\n    \"format:ci\": \"pnpm run format:code:ci && pnpm run format:imports:ci\",\n    \"format:code\": \"biome format --write && prettier -w \\\"**/*\\\" --ignore-unknown --cache\",\n    \"format:code:ci\": \"biome format && prettier -w \\\"**/*\\\" --ignore-unknown --cache --check\",\n    \"format:imports\": \"biome check --formatter-enabled=false --write\",\n    \"format:imports:ci\": \"biome ci --formatter-enabled=false\",\n    \"test\": \"pnpm run test:astro && pnpm run test:integrations && pnpm run test:language-tools\",\n    \"test:astro\": \"node ./scripts/turbo-run-affected.js test --concurrency=1 --filter=astro --only\",\n    \"test:integrations\": \"node ./scripts/turbo-run-affected.js test --concurrency=1 --filter=create-astro --filter=\\\"@astrojs/*\\\" --filter=\\\"!./packages/language-tools/**/*\\\" --only\",\n    \"test:language-tools\": \"turbo run test --concurrency=1 --filter=\\\"./packages/language-tools/**/*\\\" --filter=\\\"!./packages/language-tools/ts-plugin\\\" --only\",\n    \"test:language-tools:no-vs\": \"turbo run test --filter=\\\"@astrojs/language-server\\\" --filter=\\\"@astrojs/check\\\" --only\",\n    \"test:citgm\": \"pnpm -r --filter=astro test\",\n    \"test:match\": \"cd packages/astro && pnpm run test:match\",\n    \"test:cli\": \"cd packages/astro && pnpm run test:cli\",\n    \"test:unit\": \"cd packages/astro && pnpm run test:unit\",\n    \"test:types\": \"cd packages/astro && pnpm run test:types\",\n    \"test:smoke\": \"pnpm test:smoke:example && pnpm test:smoke:docs\",\n    \"test:smoke:example\": \"turbo run build --concurrency=100% --filter=\\\"@example/*\\\"\",\n    \"test:smoke:docs\": \"turbo run build --filter=docs\",\n    \"test:check-examples\": \"node ./scripts/smoke/check.js\",\n    \"test:vite-ci\": \"cd packages/astro && pnpm run test:unit && pnpm run test:integration\",\n    \"test:e2e\": \"pnpm run test:e2e:astro && pnpm run test:e2e:alpinejs\",\n    \"test:e2e:astro\": \"cd packages/astro && pnpm playwright install firefox && pnpm run test:e2e\",\n    \"test:e2e:alpinejs\": \"cd packages/integrations/alpinejs && pnpm run test:e2e\",\n    \"test:e2e:match\": \"cd packages/astro && pnpm playwright install firefox && pnpm run test:e2e:match\",\n    \"test:e2e:hosts\": \"turbo run test:hosted\",\n    \"typecheck\": \"tsc -b\",\n    \"benchmark\": \"astro-benchmark\",\n    \"lint\": \"biome lint && knip && eslint --cache --concurrency=auto\",\n    \"lint:ci\": \"knip && pnpm run eslint:ci\",\n    \"eslint:ci\": \"NODE_OPTIONS=\\\"--max-old-space-size=8192\\\" eslint --cache --concurrency=auto\",\n    \"lint:fix\": \"biome lint --write --unsafe\",\n    \"publint\": \"pnpm -r --filter=astro --filter=create-astro --filter=\\\"@astrojs/*\\\" --no-bail exec publint\",\n    \"version\": \"changeset version && node ./scripts/deps/update-example-versions.js && pnpm install --no-frozen-lockfile && pnpm run format\",\n    \"preinstall\": \"npx only-allow pnpm\"\n  },\n  \"workspaces\": [\n    \"packages/markdown/*\",\n    \"packages/integrations/*\",\n    \"packages/*\",\n    \"packages/language-tools/*\"\n  ],\n  \"engines\": {\n    \"node\": \">=22.12.0\"\n  },\n  \"packageManager\": \"pnpm@11.5.0\",\n  \"dependencies\": {\n    \"astro-benchmark\": \"workspace:*\"\n  },\n  \"devDependencies\": {\n    \"@astrojs/check\": \"^0.9.5\",\n    \"@biomejs/biome\": \"2.4.10\",\n    \"@changesets/changelog-github\": \"^0.5.2\",\n    \"@changesets/cli\": \"^2.29.8\",\n    \"@flue/cli\": \"^0.8.0\",\n    \"@flue/runtime\": \"^0.8.0\",\n    \"@types/node\": \"^22.10.6\",\n    \"bgproc\": \"^0.2.0\",\n    \"eslint\": \"^10.4.0\",\n    \"eslint-plugin-regexp\": \"^3.1.0\",\n    \"knip\": \"5.82.1\",\n    \"only-allow\": \"^1.2.2\",\n    \"pkg-pr-new\": \"^0.0.71\",\n    \"prettier\": \"^3.8.1\",\n    \"prettier-plugin-astro\": \"^0.14.1\",\n    \"publint\": \"^0.3.17\",\n    \"tinyglobby\": \"^0.2.16\",\n    \"turbo\": \"^2.8.15\",\n    \"typescript\": \"~6.0.3\",\n    \"typescript-eslint\": \"^8.59.1\",\n    \"valibot\": \"^1.2.0\"\n  }\n}\n",
    "strategic_keywords": [
      "workflow"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 8,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 8,
      "total": 68
    },
    "strategic_score": 68
  },
  {
    "owner": "SagerNet",
    "name": "sing-box",
    "full_name": "SagerNet/sing-box",
    "url": "https://github.com/SagerNet/sing-box",
    "description": "The universal proxy platform",
    "language": "Go",
    "total_stars": 35355,
    "forks": 4212,
    "stars_this_period": 48,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [],
      "license": "NOASSERTION",
      "open_issues": 271,
      "created_at": "2022-06-30T13:27:22Z",
      "pushed_at": "2026-06-25T11:15:01Z",
      "homepage": "https://sing-box.sagernet.org/",
      "default_branch": "testing",
      "forks": 4212,
      "watchers": 192,
      "archived": false,
      "size_kb": 21162
    },
    "readme_content": "# sing-box\n\nThe universal proxy platform.\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/sing-box.svg)](https://repology.org/project/sing-box/versions)\n\n## Documentation\n\nhttps://sing-box.sagernet.org\n\n## License\n\n```\nCopyright (C) 2022 by nekohasekai <contact-sagernet@sekai.icu>\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see <http://www.gnu.org/licenses/>.\n\nIn addition, no derivative work may use the name or imply association\nwith this application without prior consent.\n```",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/sagernet/sing-box\n\ngo 1.24.7\n\nrequire (\n\tgithub.com/anthropics/anthropic-sdk-go v1.26.0\n\tgithub.com/anytls/sing-anytls v0.0.11\n\tgithub.com/caddyserver/certmagic v0.25.3-0.20260421143802-60d9d8b415d6\n\tgithub.com/caddyserver/zerossl v0.1.5\n\tgithub.com/coder/websocket v1.8.14\n\tgithub.com/creack/pty v1.1.24\n\tgithub.com/cretz/bine v0.2.0\n\tgithub.com/database64128/tfo-go/v2 v2.3.2\n\tgithub.com/go-chi/chi/v5 v5.2.5\n\tgithub.com/go-chi/render v1.0.3\n\tgithub.com/godbus/dbus/v5 v5.2.2\n\tgithub.com/gofrs/uuid/v5 v5.4.0\n\tgithub.com/insomniacslk/dhcp v0.0.0-20260220084031-5adc3eb26f91\n\tgithub.com/jsimonetti/rtnetlink v1.4.0\n\tgithub.com/keybase/go-keychain v0.0.1\n\tgithub.com/libdns/acmedns v0.5.0\n\tgithub.com/libdns/alidns v1.0.6\n\tgithub.com/libdns/cloudflare v0.2.2\n\tgithub.com/libdns/libdns v1.1.1\n\tgithub.com/logrusorgru/aurora v2.0.3+incompatible\n\tgithub.com/mdlayher/netlink v1.9.0\n\tgithub.com/metacubex/utls v1.8.4\n\tgithub.com/mholt/acmez/v3 v3.1.6\n\tgithub.com/miekg/dns v1.1.72\n\tgithub.com/openai/openai-go/v3 v3.26.0\n\tgithub.com/oschwald/maxminddb-golang v1.13.1\n\tgithub.com/pkg/sftp v1.13.10\n\tgithub.com/sagernet/asc-go v0.0.0-20241217030726-d563060fe4e1\n\tgithub.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a\n\tgithub.com/sagernet/cors v1.2.1\n\tgithub.com/sagernet/cronet-go v0.0.0-20260620140045-05ab0dc17597\n\tgithub.com/sagernet/cronet-go/all v0.0.0-20260620140045-05ab0dc17597\n\tgithub.com/sagernet/fswatch v0.1.2\n\tgithub.com/sagernet/gliderssh v0.3.4-0.20260531100337-2194faca5648\n\tgithub.com/sagernet/gomobile v0.1.12\n\tgithub.com/sagernet/gvisor v0.0.0-20250811.0-sing-box-mod.1\n\tgithub.com/sagernet/quic-go v0.59.0-sing-box-mod.4\n\tgithub.com/sagernet/sing v0.8.12-0.20260625092856-31bbf21d4b12\n\tgithub.com/sagernet/sing-cloudflared v0.1.1\n\tgithub.com/sagernet/sing-mux v0.3.5\n\tgithub.com/sagernet/sing-quic v0.6.2-0.20260525051024-9467ede27fb7\n\tgithub.com/sagernet/sing-shadowsocks v0.2.8\n\tgithub.com/sagernet/sing-shadowsocks2 v0.2.1\n\tgithub.com/sagernet/sing-shadowtls v0.2.1\n\tgithub.com/sagernet/sing-tun v0.8.12-0.20260623031040-54c9dbda5fe7\n\tgithub.com/sagernet/sing-vmess v0.2.8-0.20250909125414-3aed155119a1\n\tgithub.com/sagernet/smux v1.5.50-sing-box-mod.1\n\tgithub.com/sagernet/tailscale v1.92.4-sing-box-1.13-mod.7.0.20260527101438-dc40932c32d9\n\tgithub.com/sagernet/wireguard-go v0.0.3\n\tgithub.com/sagernet/ws v0.0.0-20231204124109-acfe8907c854\n\tgithub.com/spf13/cobra v1.10.2\n\tgithub.com/stretchr/testify v1.11.1\n\tgithub.com/vishvananda/netns v0.0.5\n\tgo.uber.org/zap v1.27.1\n\tgo4.org/netipx v0.0.0-20231129151722-fdeea329fbba\n\tgolang.org/x/crypto v0.48.0\n\tgolang.org/x/exp v0.0.0-20251219203646-944ab1f22d93\n\tgolang.org/x/mod v0.33.0\n\tgolang.org/x/net v0.50.0\n\tgolang.org/x/sync v0.19.0\n\tgolang.org/x/sys v0.41.0\n\tgolang.zx2c4.com/wireguard/wgctrl v0.0.0-20241231184526-a9ab2273dd10\n\tgoogle.golang.org/grpc v1.79.1\n\tgoogle.golang.org/protobuf v1.36.11\n\thowett.net/plist v1.0.1\n)\n\nrequire (\n\tfilippo.io/edwards25519 v1.1.0 // indirect\n\tgithub.com/ajg/form v1.5.1 // indirect\n\tgithub.com/akutz/memconn v0.1.0 // indirect\n\tgithub.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa // indirect\n\tgithub.com/andybalholm/brotli v1.1.0 // indirect\n\tgithub.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect\n\tgithub.com/cenkalti/backoff/v4 v4.3.0 // indirect\n\tgithub.com/coreos/go-iptables v0.7.1-0.20240112124308-65c67c9f46e6 // indirect\n\tgithub.com/coreos/go-oidc/v3 v3.17.0 // indirect\n\tgithub.com/database64128/netx-go v0.1.1 // indirect\n\tgithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect\n\tgithub.com/dblohm7/wingoes v0.0.0-20240119213807-a09d6be7affa // indirect\n\tgithub.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 // indirect\n\tgithub.com/ebitengine/purego v0.10.0 // indirect\n\tgithub.com/florianl/go-nfqueue/v2 v2.0.2 // indirect\n\tgithub.com/fsnotify/fsnotify v1.9.0 // indirect\n\tgithub.com/fxamacker/cbor/v2 v2.7.0 // indirect\n\tgithub.com/gaissmai/bart v0.18.0 // indirect\n\tgithub.com/go-jose/go-jose/v4 v4.1.3 // indirect\n\tgithub.com/go-json-experiment/json v0.0.0-20250813024750-ebf49471dced // indirect\n\tgithub.com/go-ole/go-ole v1.3.0 // indirect\n\tgithub.com/gobwas/httphead v0.1.0 // indirect\n\tgithub.com/gobwas/pool v0.2.1 // indirect\n\tgithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect\n\tgithub.com/google/btree v1.1.3 // indirect\n\tgithub.com/google/go-cmp v0.7.0 // indirect\n\tgithub.com/google/go-querystring v1.1.0 // indirect\n\tgithub.com/google/nftables v0.2.1-0.20240414091927-5e242ec57806 // indirect\n\tgithub.com/google/uuid v1.6.0 // indirect\n\tgithub.com/hashicorp/yamux v0.1.2 // indirect\n\tgithub.com/hdevalence/ed25519consensus v0.2.0 // indirect\n\tgithub.com/inconshreveable/mousetrap v1.1.0 // indirect\n\tgithub.com/klauspost/compress v1.18.0 // indirect\n\tgithub.com/klauspost/cpuid/v2 v2.3.0 // indirect\n\tgithub.com/kr/fs v0.1.0 // indirect\n\tgithub.com/mdlayher/socket v0.5.1 // indirect\n\tgithub.com/mitchellh/go-ps v1.0.0 // indirect\n\tgithub.com/philhofer/fwd v1.2.0 // indirec",
    "strategic_keywords": [],
    "relationship_label": "架构参考",
    "data_confidence": "medium",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 0,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 6,
      "risk_signal": 6,
      "total": 53
    },
    "strategic_score": 53
  },
  {
    "owner": "EveryInc",
    "name": "compound-engineering-plugin",
    "full_name": "EveryInc/compound-engineering-plugin",
    "url": "https://github.com/EveryInc/compound-engineering-plugin",
    "description": "Official Compound Engineering plugin for Claude Code, Codex, Cursor, and more",
    "language": "TypeScript",
    "total_stars": 22032,
    "forks": 1629,
    "stars_this_period": 48,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "compound",
        "engineering"
      ],
      "license": "MIT",
      "open_issues": 94,
      "created_at": "2025-10-09T19:43:46Z",
      "pushed_at": "2026-06-24T23:21:40Z",
      "homepage": "https://every.to/guides/compound-engineering",
      "default_branch": "main",
      "forks": 1629,
      "watchers": 114,
      "archived": false,
      "size_kb": 21961
    },
    "readme_content": "# Compound Engineering\n\n[![Build Status](https://github.com/EveryInc/compound-engineering-plugin/actions/workflows/ci.yml/badge.svg)](https://github.com/EveryInc/compound-engineering-plugin/actions/workflows/ci.yml)\n\nAI skills that make each unit of engineering work easier than the last.\n\n## Philosophy\n\n**Each unit of engineering work should make subsequent units easier -- not harder.**\n\nTraditional development accumulates technical debt. Every feature adds complexity. Every bug fix leaves behind a little more local knowledge that someone has to rediscover later. The codebase gets larger, the context gets harder to hold, and the next change becomes slower.\n\nCompound engineering inverts this. 80% is in planning and review, 20% is in execution:\n\n- Plan thoroughly before writing code with `/ce-brainstorm` and `/ce-plan`\n- Review to catch issues and calibrate judgment with `/ce-code-review` and `/ce-doc-review`\n- Codify knowledge so it is reusable with `/ce-compound`\n- Keep quality high so future changes are easy\n\nThe point is not ceremony. The point is leverage. A good brainstorm makes the plan sharper. A good plan makes execution smaller. A good review catches the pattern, not just the bug. A good compound note means the next agent does not have to learn the same lesson from scratch.\n\n**Learn more**\n\n- [Compound engineering: how Every codes with agents](https://every.to/chain-of-thought/compound-engineering-how-every-codes-with-agents)\n- [The story behind compounding engineering](https://every.to/source-code/my-ai-had-already-fixed-the-code-before-i-saw-it)\n\n## Workflow\n\nThe core loop is six steps: **brainstorm** the requirements, **plan** the implementation, **work** through the plan, **simplify** what you wrote, **review** the result, then **compound** the learning -- and repeat with better context.\n\n| Skill | Purpose |\n|-------|---------|\n| `/ce-brainstorm` | Interactive Q&A to think through a feature or problem and write a right-sized requirements doc |\n| `/ce-plan` | Turn the requirements into a detailed implementation plan with guardrails |\n| `/ce-work` | Execute the plan with worktrees and task tracking |\n| `/ce-simplify-code` | Refine the freshly written code for clarity and reuse before review |\n| `/ce-code-review` | Multi-agent review against the plan before merging |\n| `/ce-compound` | Capture the learning into `docs/solutions/` so the next loop starts smarter |\n\nEach cycle compounds: `/ce-compound` writes learnings that the next `/ce-brainstorm` and `/ce-plan` read as grounding -- brainstorms sharpen plans, plans inform future plans, reviews catch more issues, patterns get documented. That return arrow is the whole point.\n\n### Additional skills\n\nThese sit around the loop or get reached for on demand -- not every cycle needs them.\n\n| Skill | When to reach for it |\n|-------|---------|\n| `/ce-ideate` | *Before the loop*, when you don't yet know what to build -- generates and critically ranks grounded ideas, then routes the strongest one into `/ce-brainstorm` |\n| `/ce-strategy` | *Upstream anchor* -- creates and maintains `STRATEGY.md`, read as grounding by ideate, brainstorm, and plan so strategy choices flow into every feature |\n| `/ce-product-pulse` | *Outer loop* -- a time-windowed report on what users actually experienced (usage, performance, errors), saved to `docs/pulse-reports/`; its follow-ups feed back into ideation and brainstorming |\n| `/ce-debug` | *Instead of brainstorm -> plan -> work* when the input is a bug rather than a feature -- reproduce, trace the causal chain to root cause, then fix |\n\nFor the full catalog and how each skill chains together, see [docs/skills](docs/skills/README.md). The complete inventory is [below](#full-skill-inventory).\n\n## Quick Example\n\n**Finding a direction** -- when you don't have a specific idea yet, ideate first, then carry the strongest survivor into the loop:\n\n```text\n/ce-ideate new drawing tools\n/ce-ideate surprise me\n/ce-ideate github issues   # ground ideas in your open issues instead of a prompt\n```\n\n`/ce-ideate` does the homework first (codebase, past learnings, prior art on the web, optionally your issue tracker), then hands you a ranked set of grounded candidates to take into `/ce-brainstorm`.\n\n**Standard feature loop** -- turn a rough idea into shipped, reviewed code:\n\n```text\n/ce-brainstorm make background job retries safer\n/ce-plan\n/ce-work\n/ce-simplify-code\n/ce-code-review\n/ce-compound\n```\n\n**Simplifying code** -- use it after fresh implementation work, or point it at code that keeps slowing changes down:\n\n```text\n/ce-simplify-code\n/ce-simplify-code simplify the code in my most-churned file\n```\n\nThe first pass tightens recent branch changes before review. The targeted pass is useful when one file keeps absorbing unrelated fixes, follow-ups, or merge conflicts.\n\n**Debugging a bug** -- when you start from broken behavior instead of a feature:\n\n```text\n/ce-debug the checkout webhook sometimes creates duplicate invoices\n/ce-code-review\n/ce-compound\n```\n\n**Autonomous** -- hand off a feature and let the agent run the whole pipeline:\n\n```text\n/ce-brainstorm describe the feature\n/lfg\n```\n\n`/lfg` runs the loop hands-off: it plans, works through the plan, simplifies, runs code review and applies the fixes, runs browser tests, commits, pushes, opens a PR, then watches CI and repairs failures until it's green. Start it after `/ce-brainstorm` so it plans against real requirements rather than a one-line prompt. It's the autopilot version of the standard loop -- neat when you want to step away and come back to an open, green PR.\n\n## Getting Started\n\nAfter installing, run `/ce-setup` in any project. It checks repo-local config, reports optional tool capabilities, and helps keep machine-local CE settings safely gitignored.\n\nThe `compound-engineering` plugin currently ships 27 skills and 0 standalone agents. Specialist review, research, and workflow behavior lives inside the owning skills as skill-local prompt assets.\n\n### Full Skill Inventory\n\n| Skill | Purpose |\n|-------|---------|\n| `/ce-strategy` | Create or maintain `STRATEGY.md` |\n| `/ce-ideate` | Generate and critically evaluate grounded ideas |\n| `/ce-brainstorm` | Explore requirements and write a right-sized requirements doc |\n| `/ce-plan` | Create structured implementation plans |\n| `/ce-work` | Execute implementation plans systematically |\n| `/ce-code-review` | Review code with skill-local reviewer personas |\n| `/ce-doc-review` | Review requirements and plan documents |\n| `/ce-debug` | Reproduce failures, trace root cause, and fix bugs |\n| `/ce-compound` | Document solved problems to compound team knowledge |\n| `/ce-compound-refresh` | Refresh stale or drifting learnings |\n| `/ce-optimize` | Run iterative optimization loops |\n| `/ce-product-pulse` | Generate time-windowed product pulse reports |\n| `/ce-riffrec-feedback-analysis` | Convert Riffrec recordings or notes into structured feedback |\n| `/ce-resolve-pr-feedback` | Resolve PR review feedback |\n| `/ce-commit` | Create a git commit with a clear message |\n| `/ce-commit-push-pr` | Commit, push, and open a PR |\n| `/ce-worktree` | Ensure work happens in an isolated git worktree |\n| `/ce-promote` | Draft user-facing announcement copy |\n| `/ce-test-browser` | Run browser tests on PR-affected pages |\n| `/ce-test-xcode` | Build and test iOS apps on simulator |\n| `/ce-setup` | Diagnose optional tool capabilities and project config |\n| `/ce-simplify-code` | Simplify recent code changes |\n| `/ce-polish` | Start a dev server and iterate on UX polish |\n| `/ce-proof` | Create, edit, and share Proof documents |\n| `/ce-dogfood-beta` | Diff-scoped browser QA of the active branch |\n| `/ce-work-beta` | Experimental execution workflow with Codex delegation mode |\n| `/lfg` | Full autonomous engineering workflow |\n\n---\n\n## Install\n\n### Claude Code\n\n```text\n/plugin marketplace add EveryInc/compound-engineering-plugin\n/plugin install compound-engineering\n```\n\n> **Already have Compound Engineering installed?** Compound Engineering moved to a root-native layout. You must refresh the marketplace *before* updating — see [Existing Installs](#existing-installs). Running `/plugin update` alone keeps you on the old version.\n\n### Cursor\n\nIn Cursor Agent chat, install from the plugin marketplace:\n\n```text\n/add-plugin compound-engineering\n```\n\nOr search for \"compound engineering\" in the plugin marketplace.\n\n### Codex App\n\nCompound Engineering is not listed in Codex's built-in plugin marketplace yet. Add it as a custom marketplace:\n\n1. In the Codex app, open **Plugins** from the sidebar.\n2. Click **Add** / **Add plugin marketplace**.\n3. Enter:\n\n   | Field | Value |\n   | --- | --- |\n   | Source | `EveryInc/compound-engineering-plugin` |\n   | Git ref | `main` |\n   | Sparse paths | leave blank |\n\n4. Click **Add marketplace**.\n5. Select **Compound Engineering**, install **compound-engineering**, then restart Codex.\n\nThe Codex app install is self-contained for Compound Engineering. Specialist reviewer and research behavior lives inside the skills as local prompt assets; no separate custom-agent install step is required.\n\n### Codex CLI\n\nRegister the marketplace, then install the plugin.\n\n1. **Register the marketplace with Codex:**\n\n   ```bash\n   codex plugin marketplace add EveryInc/compound-engineering-plugin\n   ```\n\n2. **Install the plugin:**\n\n   ```bash\n   codex plugin add compound-engineering@compound-engineering-plugin\n   ```\n\n   You can also launch `codex`, run `/plugins`, find the **Compound Engineering** marketplace, select the **compound-engineering** plugin, and choose **Install**. Restart Codex after install completes.\n\nThe native Codex plugin install is self-contained for Compound Engineering. Specialist reviewer and research behavior lives inside the skills as local prompt assets; no separate custom-agent install step is required.\n\nFor a non-default Codex profile, run every Codex-related step against the same `CODEX_HOME`. This example installs CE into a `work` profile:\n\n```bash\nCODEX_HOME=\"$HOME/.codex/profiles/work\" codex plugin marketplace add EveryInc/compound-engineering-plugin\nCODEX_HOME=\"$HOME/.codex/profiles/work\" codex plugin add compound-engineering@compound-engineering-plugin\n```\n\nThe marketplace step only makes the plugin available; the plugin install is what activates the native CE skills for that profile.\n\n### Kimi Code CLI\n\nKimi Code CLI can install Compound Engineering directly from this repository because the repo ships a native `.kimi-plugin/plugin.json` manifest:\n\n```text\n/plugins install https://github.com/EveryInc/compound-engineering-plugin\n```\n\nYou can also browse it through Kimi's custom marketplace flow:\n\n```text\n/plugins marketplace https://raw.githubusercontent.com/EveryInc/compound-engineering-plugin/main/.kimi-plugin/marketplace.json\n```\n\nAfter installing or updating, run `/reload` or start a new Kimi session so the plugin skills are loaded.\n\n### GitHub Copilot\n\nFor **VS Code Copilot Agent Plugins**:\n\n1. Run `Chat: Install Plugin from Source` from the VS Code command palette\n2. Use `EveryInc/compound-engineering-plugin` for the repo\n3. Select `compound-engineering` when VS Code shows the plugins in this repository\n\nFor **Copilot CLI**, use:\n\nInside Copilot CLI:\n\n```text\n/plugin marketplace add EveryInc/compound-engineering-plugin\n/plugin install compound-engineering@compound-engineering-plugin\n```\n\nFrom a shell with the `copilot` binary:\n\n```bash\ncopilot plugin marketplace add EveryInc/compound-engineering-plugin\ncopilot plugin install compound-engineering@compound-engineering-plugin\n```\n\nCopilot CLI reads the existing Claude-compatible plugin manifests, so no separate Bun install step is needed.\n\n### Factory Droid\n\nFrom a shell with the `droid` binary:\n\n```bash\ndroid plugin marketplace add https://github.com/EveryInc/compound-engineering-plugin\ndroid plugin install compound-engineering@compound-engineering-plugin\n```\n\nDroid uses `plugin@marketplace` plugin IDs; here `compound-engineering` is the plugin a",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"compound-engineering\",\n  \"version\": \"3.14.3\",\n  \"description\": \"Official Compound Engineering skills plugin for coding agents\",\n  \"type\": \"module\",\n  \"private\": true,\n  \"main\": \".opencode/plugins/compound-engineering.js\",\n  \"pi\": {\n    \"extensions\": [\n      \"./.pi/extensions/compound-engineering.ts\"\n    ],\n    \"skills\": [\n      \"./skills\"\n    ]\n  },\n  \"homepage\": \"https://github.com/EveryInc/compound-engineering-plugin\",\n  \"repository\": \"https://github.com/EveryInc/compound-engineering-plugin\",\n  \"scripts\": {\n    \"dev\": \"bun run src/index.ts\",\n    \"convert\": \"bun run src/index.ts convert\",\n    \"cleanup\": \"bun run src/index.ts cleanup\",\n    \"list\": \"bun run src/index.ts list\",\n    \"cli:install\": \"bun run src/index.ts install\",\n    \"test\": \"bun test\",\n    \"plugin:validate\": \"claude plugin validate .claude-plugin/marketplace.json && claude plugin validate .\",\n    \"release:preview\": \"bun run scripts/release/preview.ts\",\n    \"release:sync-metadata\": \"bun run scripts/release/sync-metadata.ts --write\",\n    \"release:validate\": \"bun run scripts/release/validate.ts\"\n  },\n  \"dependencies\": {\n    \"citty\": \"^0.1.6\",\n    \"js-yaml\": \"^4.1.0\"\n  },\n  \"devDependencies\": {\n    \"@semantic-release/changelog\": \"^6.0.3\",\n    \"@semantic-release/git\": \"^10.0.1\",\n    \"@types/js-yaml\": \"^4.0.9\",\n    \"bun-types\": \"^1.0.0\",\n    \"semantic-release\": \"^25.0.3\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "rag",
      "skill",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 83
    },
    "strategic_score": 83
  },
  {
    "owner": "swisskyrepo",
    "name": "PayloadsAllTheThings",
    "full_name": "swisskyrepo/PayloadsAllTheThings",
    "url": "https://github.com/swisskyrepo/PayloadsAllTheThings",
    "description": "A list of useful payloads and bypass for Web Application Security and Pentest/CTF",
    "language": "Python",
    "total_stars": 78676,
    "forks": 17120,
    "stars_this_period": 44,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "bounty",
        "bugbounty",
        "bypass",
        "cheatsheet",
        "enumeration",
        "hacking",
        "hacktoberfest",
        "methodology",
        "payload",
        "payloads",
        "penetration-testing",
        "pentest",
        "privilege-escalation",
        "redteam",
        "security",
        "vulnerability",
        "web-application"
      ],
      "license": "MIT",
      "open_issues": 31,
      "created_at": "2016-10-18T07:29:07Z",
      "pushed_at": "2026-06-19T11:08:59Z",
      "homepage": "https://swisskyrepo.github.io/PayloadsAllTheThings/",
      "default_branch": "master",
      "forks": 17120,
      "watchers": 1962,
      "archived": false,
      "size_kb": 23267
    },
    "readme_content": "# Payloads All The Things\n\nA list of useful payloads and bypasses for Web Application Security.\nFeel free to improve with your payloads and techniques!\n\nYou can also contribute with a :beers: IRL, or using the sponsor button.\n\n[![Sponsor](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&link=https://github.com/sponsors/swisskyrepo)](https://github.com/sponsors/swisskyrepo)\n[![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Payloads%20All%20The%20Things,%20a%20list%20of%20useful%20payloads%20and%20bypasses%20for%20Web%20Application%20Security%20-%20by%20@pentest_swissky&url=https://github.com/swisskyrepo/PayloadsAllTheThings/)\n\nAn alternative display version is available at [PayloadsAllTheThingsWeb](https://swisskyrepo.github.io/PayloadsAllTheThings/).\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/.github/banner.png\" alt=\"banner\">\n</p>\n\n## :book: Documentation\n\nEvery section contains the following files, you can use the `_template_vuln` folder to create a new chapter:\n\n- README.md - vulnerability description and how to exploit it, including several payloads\n- Intruder - a set of files to give to Burp Intruder\n- Images - pictures for the README.md\n- Files - some files referenced in the README.md\n\nYou might also like the other projects from the AllTheThings family :\n\n- [InternalAllTheThings](https://swisskyrepo.github.io/InternalAllTheThings/) - Active Directory and Internal Pentest Cheatsheets\n- [HardwareAllTheThings](https://swisskyrepo.github.io/HardwareAllTheThings/) - Hardware/IOT Pentesting Wiki\n\nYou want more? Check the [Books](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/_LEARNING_AND_SOCIALS/BOOKS.md) and [YouTube channel](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/_LEARNING_AND_SOCIALS/YOUTUBE.md) selections.\n\n## :technologist: Contributions\n\nBe sure to read [CONTRIBUTING.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/CONTRIBUTING.md)\n\n<p align=\"center\">\n<a href=\"https://github.com/swisskyrepo/PayloadsAllTheThings/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=swisskyrepo/PayloadsAllTheThings&max=36\" alt=\"sponsors-list\" >\n</a>\n</p>\n\nThanks again for your contribution! :heart:\n\n## :beers: Sponsors\n\nThis project is proudly sponsored by these companies.\n\n| Logo | Description |\n| --- | --- |\n| [<img src=\"https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/refs/heads/master/.github/sponsors/serpapi.png\" alt=\"sponsor-serpapi\">](https://serpapi.com) | **SerpApi** is a real time API to access Google search results. It solves the issues of having to rent proxies, solving captchas, and JSON parsing. |\n| [<img src=\"https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/refs/heads/master/.github/sponsors/projectdiscovery.png\" alt=\"sponsor-projectdiscovery\">](https://projectdiscovery.io/) | **ProjectDiscovery** - Detect real, exploitable vulnerabilities. Harness the power of Nuclei for fast and accurate findings without false positives. |\n| [<img src=\"https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/refs/heads/master/.github/sponsors/talordata.png\" alt=\"sponsor-talordata\">](https://www.talordata.com/?campaignid=PDsJD5HLgWl2TxNd&utm_source=swisskyrepo&utm_term=swisskyrepo) | **Talordata** - Real-time Google, Bing, Yandex, DuckDuckGo SERP API for AI agents, SEO monitoring, and search data workflows. |\n| [<img src=\"https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/refs/heads/master/.github/sponsors/vaadata.png\" alt=\"sponsor-vaadata\">](https://www.vaadata.com/) | **VAADATA** - Ethical Hacking Services |\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 9,
      "risk_signal": 6,
      "total": 78
    },
    "strategic_score": 78
  },
  {
    "owner": "juspay",
    "name": "hyperswitch",
    "full_name": "juspay/hyperswitch",
    "url": "https://github.com/juspay/hyperswitch",
    "description": "Open source, composable payments platform | PCI compliant | SaaS and Self-host options | Enables connectivity to multiple payment, payout, fraud, vault and tokenization providers | Uplifts authorization with intelligent routing and revenue recovery | Reduce payment processing costs with cost observability | Reduces payment ops with reconciliation",
    "language": "Rust",
    "total_stars": 43121,
    "forks": 4894,
    "stars_this_period": 43,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "adyen",
        "beginner-friendly",
        "featured",
        "finance",
        "fintech",
        "hacktoberfest",
        "high-performance",
        "open-source",
        "orchestration",
        "payment",
        "payment-gateway",
        "payment-integration",
        "payment-processing",
        "payments",
        "payments-platform",
        "restful-api",
        "rust",
        "sdk",
        "stripe",
        "works-with-react"
      ],
      "license": "Apache-2.0",
      "open_issues": 1929,
      "created_at": "2022-10-17T11:18:28Z",
      "pushed_at": "2026-06-25T19:19:25Z",
      "homepage": "https://hyperswitch.io/",
      "default_branch": "main",
      "forks": 4894,
      "watchers": 124,
      "archived": false,
      "size_kb": 382869
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"./docs/imgs/hyperswitch-logo-dark.svg#gh-dark-mode-only\" alt=\"Hyperswitch-Logo\" width=\"40%\" />\n  <img src=\"./docs/imgs/hyperswitch-logo-light.svg#gh-light-mode-only\" alt=\"Hyperswitch-Logo\" width=\"40%\" />\n</p>\n\n<h1 align=\"center\">Composable Open-Source Payments Infrastructure</h1>\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/juspay/hyperswitch/main/docs/gifs/quickstart.gif\" alt=\"Quickstart demo\" />\n</p>\n\n\n<!-- @import \"[TOC]\" {cmd=\"toc\" depthFrom=1 depthTo=6 orderedList=false} -->\n\n<p align=\"center\">\n  <a href=\"https://github.com/juspay/hyperswitch/actions?query=workflow%3ACI+branch%3Amain\">\n    <img src=\"https://github.com/juspay/hyperswitch/workflows/CI-push/badge.svg\" />\n  </a>\n  <a href=\"https://github.com/juspay/hyperswitch/blob/main/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/juspay/hyperswitch\" />\n  </a>\n  <a href=\"https://github.com/juspay/hyperswitch/blob/main/LICENSE\">\n    <img src=\"https://img.shields.io/badge/Made_in-Rust-orange\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.linkedin.com/company/hyperswitch/\">\n    <img src=\"https://img.shields.io/badge/follow-hyperswitch-blue?logo=linkedin&labelColor=grey\"/>\n  </a>\n  <a href=\"https://x.com/hyperswitchio\">\n    <img src=\"https://img.shields.io/badge/follow-%40hyperswitchio-white?logo=x&labelColor=grey\"/>\n  </a>\n  <a href=\"https://inviter.co/hyperswitch-slack\">\n    <img src=\"https://img.shields.io/badge/chat-on_slack-blue?logo=slack&labelColor=grey&color=%233f0e40\"/>\n  </a>\n</p>\n\n<hr/>\n\n<details>\n<summary><strong>📁 Table of Contents</strong></summary>\n\n- [What Can I Do with Hyperswitch?](#-what-can-i-do-with-hyperswitch)\n- [Quickstart (Local Setup)](#-quickstart-local-setup)\n- [Cloud Deployment](#cloud-deployment)\n- [Hosted Sandbox (No Setup Required)](#hosted-sandbox-no-setup-required)\n- [Why Hyperswitch?](#-why-hyperswitch)\n- [Architectural Overview](#architectural-overview)\n- [Our Vision](#our-vision)\n- [Community & Contributions](#community--contributions)\n- [Feature Requests & Bugs](#feature-requests--bugs)\n- [Versioning](#versioning)\n- [License](#copyright-and-license)\n- [Team Behind Hyperswitch](#team-behind-hyperswitch)\n\n</details>\n\n<summary><h2>What Can I Do with Hyperswitch?</h2></summary>\n\nHyperswitch offers a modular, open-source payments infrastructure designed for flexibility and control. Apart from our Payment Suite offering, this solution allows businesses to pick and integrate only the modules they need on top of their existing payment stack — without unnecessary complexity or vendor lock-in.\n\nEach module is independent and purpose-built to optimize different aspects of payment processing.\n\n<h3> Learn More About The Payment Modules </h3>\n<details>\n\n- **Cost Observability**  \n  Advanced observability tools to audit, monitor, and optimize your payment costs. Detect hidden fees, downgrades, and penalties with self-serve dashboards and actionable insights.  \n  _[Read more](https://docs.hyperswitch.io/about-hyperswitch/payments-modules/ai-powered-cost-observability)_\n\n- **Revenue Recovery**  \n  Combat passive churn with intelligent retry strategies tuned by card bin, region, method, and more. Offers fine-grained control over retry algorithms, penalty budgets, and recovery transparency.  \n  _[Read more](https://docs.hyperswitch.io/about-hyperswitch/payments-modules/revenue-recovery)_\n\n- **Vault**  \n  A PCI-compliant vault service to store cards, tokens, wallets, and bank credentials. Provides a unified, secure, and reusable store of customer-linked payment methods. Also supports bring-your-own-vault to connect existing providers including VGS and TokenEx without re-tokenizing or migrating stored cards.  \n  _[Read more](https://docs.hyperswitch.io/about-hyperswitch/payments-modules/vault)_\n\n- **Intelligent Routing**  \n  Route each transaction across Stripe, Adyen, Braintree, Worldpay, Checkout.com, and 120+ others to the PSP with the highest predicted auth rate. Reduce retries, avoid downtime, and minimize latency while maximizing first attempt success. \n  _[Read more](https://docs.hyperswitch.io/about-hyperswitch/payments-modules/intelligent-routing)_\n\n- **Reconciliation**  \n  Automate 2-way and 3-way reconciliation with backdated support, staggered scheduling, and customizable outputs. Reduces manual ops effort and increases audit confidence.  \n  _[Read more](https://docs.hyperswitch.io/about-hyperswitch/payments-modules/reconciliation)_\n\n- **Alternate Payment Methods**  \n  Drop-in widgets for PayPal, Apple Pay, Google Pay, Samsung Pay, Pay by Bank, and BNPL providers like Klarna. Maximizes conversions with seamless one-click checkout.  \n  _[Read more](https://docs.hyperswitch.io/about-hyperswitch/payments-modules/enable-alternate-payment-method-widgets)_\n\n</details>\n\n## Quickstart \n\n<h3> Local Setup via Docker </h3>\n\n```bash\n# One-click local setup\n\ngit clone --depth 1 --branch latest https://github.com/juspay/hyperswitch\n\ncd hyperswitch\n\nscripts/setup.sh\n```\n<details>\n  <summary><strong>This script: </strong></summary>\n\n  - Detects Docker/Podman  \n  - Offers multiple deployment profiles:\n    - **Standard**: App server + Control Center  \n    - **Full**: Includes monitoring + schedulers  \n    - **Minimal**: Standalone App server  \n  - Provides access links when done\n\n  If you need further help, check out our [video tutorial](https://docs.hyperswitch.io/hyperswitch-open-source/overview/unified-local-setup-using-docker).  \n\n  👉 After setup, [configure a connector](https://docs.hyperswitch.io/hyperswitch-open-source/account-setup/using-hyperswitch-control-center#add-a-payment-processor) and [test a payment](https://docs.hyperswitch.io/hyperswitch-open-source/account-setup/test-a-payment).\n</details>\n\n\n<h3>Hosted Sandbox (No Setup Required)</h3>\n\nHyperswitch offers a fully hosted sandbox environment that requires no setup. You can explore the Control Center, configure payment connectors, and test payments directly from the UI.\n\n   <a href=\"https://app.hyperswitch.io\">\n     <img src=\"https://github.com/juspay/hyperswitch/blob/main/docs/imgs/try-the-sandbox.png?raw=true\" height=\"35\">\n   </a>\n\n\n<details>\n  <summary><strong> What you can do in the Hosted Sandbox</strong></summary>\n\n  - Access the full Control Center  \n  - Configure payment connectors  \n  - View logs, routing rules, and retry strategies  \n  - Try payments directly from the UI  \n</details>\n\n<h3><strong>Cloud Deployment</strong></h3>\n\nYou can deploy to AWS, GCP, or Azure using Helm Charts.\n\n<a href=\"https://docs.hyperswitch.io/hyperswitch-open-source/deploy-on-kubernetes-using-helm\">Cloud Deployment Instructions</a>.\n\n\n<a href=\"#architectural-overview\">\n  <h2 id=\"architectural-overview\">Architectural Overview</h2>\n</a>\n<img src=\"./docs/imgs/features.png\" />\n<img src=\"./docs/imgs/non-functional-features.png\" />\n<img src=\"./docs/imgs/hyperswitch-architecture-v1.png\" />\n\n## Why Hyperswitch?\n\nHyperswitch is a commercial open-source payments stack purpose-built for scale, flexibility, and developer experience. Designed with a modular architecture, Hyperswitch lets you pick only the components you need—whether it’s routing, retries, vaulting, or observability—without vendor lock-in or bloated integrations.\n\nBuilt in Rust for performance and reliability, Hyperswitch connects to Stripe, Adyen, Braintree, Worldpay, Checkout.com, Cybersource, and 120+ processors — exposing smart routing and retry logic, and provides a visual workflow builder in the Control Center. Whether you're integrating a full payment suite or augmenting an existing stack with a single module, Hyperswitch meets you where you are.\n\nCommon starting points: teams moving from a single Stripe/ Stripe connect or Braintree integration to multi-PSP routing, merchants replacing a payment gateway with direct acquirer connections to TSYS, JP Morgan Payments, or other acquirers, and merchants rearchitecting their payments platform through Hyperswitch while keeping their existing VGS, TokenEx or other existing vault intact.\n\n<strong>“Linux for Payments”</strong> — Hyperswitch is a well-architected reference for teams who want to own their payments stack.\n\nWe believe in:\n\n- <strong> Embracing Payment Diversity:</strong> Innovation comes from enabling choice—across payment methods, processors, and flows.\n\n- <strong> Open Source by Default:</strong> Transparency drives trust and builds better, reusable software.\n\n- <strong> Community-Driven Development:</strong> Our roadmap is shaped by real-world use cases and contributors. \n\n- <strong> Systems-Level Engineering:</strong> We hold ourselves to a high bar for reliability, security, and performance.\n\n- <strong> Maximizing Value Creation:</strong> For developers, customers, and partners alike.\n\n- <strong> Community-Driven, Enterprise-Tested:</strong> Hyperswitch is built in the open with real-world feedback from developers and contributors, and maintained by Juspay, the team powering payment infrastructure for 400+ leading enterprises worldwide.\n\n## Supported Connectors\n\nHyperswitch integrates with 100+ payment processors out of the box. Each connector has a dedicated guide covering credentials setup, webhook configuration, supported payment methods, and common failure modes.\n\n| Processor | Type | Guide |\n|-----------|------|-------|\n| Global Payments | Payment Gateway | [View →](https://docs.hyperswitch.io/integrations/connectors-integrations/payment-processor-capabilities/available-connectors/globalpayments) |\n| Stripe | Payment Gateway | [View →](https://docs.hyperswitch.io/integrations/connectors-integrations/payment-processor-capabilities/available-connectors/stripe) |\n| Paypal | Payment Gateway | [View →](https://docs.hyperswitch.io/integrations/connectors-integrations/payment-processor-capabilities/available-connectors/paypal) |\n| Adyen | Payment Gateway | [View →](https://docs.hyperswitch.io/integrations/connectors-integrations/payment-processor-capabilities/available-connectors/adyen) |\n| Bank of America | Payment Gateway | [View →](https://docs.hyperswitch.io/integrations/connectors-integrations/payment-processor-capabilities/available-connectors/boa) |\n\n👉 [Browse all available connectors →](https://docs.hyperswitch.io/integrations/connectors-integrations/payment-processor-capabilities/available-connectors)\n\n## Hyperswitch Ecosystem Mapping\nHyperswitch is built as a set of modular services and SDKs that work together. The Rust app server in this repo is the core, and the repositories below extend it with dashboards, client SDKs, and deployment tooling.\n\n### 1. Core backend services\n\nThe Rust services that process payments. The app server is the center of gravity; the vault and encryption service handle sensitive-data operations alongside it. [`hyperswitch-prism`](https://github.com/juspay/hyperswitch-prism) is a separate, lighter entry point: a unified connector library that can be used directly against payment processors without running the full switch.\n\n|  | [hyperswitch](https://github.com/juspay/hyperswitch) | [card-vault](https://github.com/juspay/hyperswitch-card-vault) | [encryption-service](https://github.com/juspay/hyperswitch-encryption-service) | [prism](https://github.com/juspay/hyperswitch-prism) |\n| :--- | :---: | :---: | :---: | :---: |\n| **Language** | Rust | Rust | Rust | Rust |\n| **Role** | App server. Routing, retries, vaulting, observability. | PCI-compliant card storage. | Encryption, decryption, KMS. | Unified connector library, 100+ processors. |\n| **Depends on** | card-vault, encryption-service | encryption-service | None | None |\n\n### 2. Dashboard\n\nMerchant-facing UIs for configuring connectors, routing, and viewing transactions. Both require the `hyperswitch` backend to be running.\n\n|  | [control-center](https://github.com/juspay/hyperswitch-control-center) | [control-center-embedded](https://github.com/juspay/hyperswitch-control-center-embedded) |\n| :--- | :---: | :---: |\n| **Language** | ReScript | TypeScript |\n| **Role** | Full merch",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[workspace]\nresolver = \"2\"\nmembers = [\"crates/*\"]\npackage.edition = \"2021\"\npackage.rust-version = \"1.85.0\"\npackage.license = \"Apache-2.0\"\n\n[workspace.dependencies]\ntracing = { version = \"0.1.41\" }\n\n# Most of the lint configuration is based on https://github.com/EmbarkStudios/rust-ecosystem/blob/main/lints.toml\n[workspace.lints.rust]\nunsafe_code = \"forbid\"\nrust_2018_idioms = { level = \"warn\", priority = -1 } # Remove priority once https://github.com/rust-lang/rust-clippy/pull/12827 is available in stable clippy\nunused_qualifications = \"warn\"\n# missing_debug_implementations = \"warn\"\n# missing_docs = \"warn\"\n\n[workspace.lints.clippy]\nas_conversions = \"warn\"\ncloned_instead_of_copied = \"warn\"\ndbg_macro = \"warn\"\nexpect_used = \"warn\"\nfn_params_excessive_bools = \"warn\"\nindex_refutable_slice = \"warn\"\nindexing_slicing = \"warn\"\nlarge_futures = \"warn\"\nmissing_panics_doc = \"warn\"\nmod_module_files = \"warn\"\nout_of_bounds_indexing = \"warn\"\npanic = \"warn\"\npanic_in_result_fn = \"warn\"\npanicking_unwrap = \"warn\"\nprint_stderr = \"warn\"\nprint_stdout = \"warn\"\ntodo = \"warn\"\ntrivially_copy_pass_by_ref = \"warn\"\nunimplemented = \"warn\"\nunnecessary_self_imports = \"warn\"\nunreachable = \"warn\"\nunwrap_in_result = \"warn\"\nunwrap_used = \"warn\"\nuse_self = \"warn\"\nwildcard_dependencies = \"warn\"\n\n# Lints to allow\noption_map_unit_fn = \"allow\"\n\n[profile.release]\nstrip = true\nlto = true\ncodegen-units = 1\n",
    "strategic_keywords": [
      "workspace",
      "workflow"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 16,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 80
    },
    "strategic_score": 80
  },
  {
    "owner": "xingkongliang",
    "name": "skills-manager",
    "full_name": "xingkongliang/skills-manager",
    "url": "https://github.com/xingkongliang/skills-manager",
    "description": "A lightweight desktop app to manage, sync, and organize AI agent skills across 15+ coding tools — Cursor, Claude Code, Codex, Copilot, and more.",
    "language": "Rust",
    "total_stars": 2499,
    "forks": 219,
    "stars_this_period": 43,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 98,
      "created_at": "2026-03-02T00:38:18Z",
      "pushed_at": "2026-06-22T03:42:30Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 219,
      "watchers": 8,
      "archived": false,
      "size_kb": 39180
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"assets/icon.png\" width=\"80\" />\n</p>\n\n<h1 align=\"center\">Skills Manager</h1>\n\n<p align=\"center\">\n  One app to manage AI agent skills across all your coding tools.\n</p>\n\n<p align=\"center\">\n  🎬 <a href=\"https://www.youtube.com/watch?v=wfbCrfNASVU\">Video intro (YouTube)</a>\n  &nbsp;·&nbsp;\n  <a href=\"https://www.bilibili.com/video/BV1845F6REUu/\">视频介绍 (Bilibili)</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"./README.zh-CN.md\">中文说明</a>\n  &nbsp;·&nbsp;\n  <a href=\"https://x.com/JayTL00\">@JayTL00 on X</a>\n  &nbsp;·&nbsp;\n  <a href=\"https://buymeacoffee.com/jaytl\">Buy me a coffee</a>\n</p>\n\n<p align=\"center\">\n  <img src=\"assets/demo/library.png\" width=\"800\" alt=\"Skills Manager Library\" />\n</p>\n\n<p align=\"center\"><strong>Install Skills — Marketplace</strong></p>\n<p align=\"center\"><img src=\"assets/demo/install-skills.png\" width=\"800\" alt=\"Install Skills Marketplace\" /></p>\n\n<p align=\"center\"><strong>Global Workspace</strong></p>\n<p align=\"center\"><img src=\"assets/demo/global-workspace.png\" width=\"800\" alt=\"Global Workspace\" /></p>\n\n<p align=\"center\"><strong>Agent Workspace</strong></p>\n<p align=\"center\"><img src=\"assets/demo/agent-workspace.png\" width=\"800\" alt=\"Agent Workspace\" /></p>\n\n<p align=\"center\"><strong>Project Workspace</strong></p>\n<p align=\"center\"><img src=\"assets/demo/project-workspace.png\" width=\"800\" alt=\"Project Workspace\" /></p>\n\n<p align=\"center\"><strong>Settings</strong></p>\n<p align=\"center\"><img src=\"assets/demo/settings.png\" width=\"800\" alt=\"Settings\" /></p>\n\n## Features\n\n- **Unified skill library** — Install skills from Git repos, local folders, `.zip` / `.skill` archives, or the [skills.sh](https://skills.sh) marketplace. Everything goes into one central repo, which defaults to `~/.skills-manager` and can be customized in **Settings**.\n- **Marketplace + AI search** — Browse popular skills from the marketplace, run keyword search, or enable SkillsMP AI search with your API key.\n- **Presets** — Group skills into named presets. In any workspace, click a preset pill to instantly activate or deactivate all its skills for the current agent scope. The sidebar lists all presets for quick access.\n- **Global Workspace** — Each agent gets its own page listing every skill in its global folder — including ones installed outside Skills Manager — so the view always reflects what the agent actually sees. Add or remove skills per agent, or use the All Agents overview to manage every installed agent at once.\n- **Project Workspaces** — View and manage project-local skill folders for supported agents, compare them with your central library, and sync changes in either direction. Supports nested skill directories and per-agent assignment when exporting.\n- **Linked Workspaces** — Point to any directory as a skills root — useful for skills that live outside the default agent paths. Managed as a standalone workspace without participating in global preset sync.\n- **Multi-tool sync** — Sync skills to any supported tool via symlink or copy with a single click. Every skill card shows an agent icon badge per enabled agent — click a badge to install or remove that skill for that agent right from the card, with the badge reflecting live sync state.\n- **Add from Library sheet** — In any workspace, click **+ Add Skills** to open a unified picker: search your central library, toggle target agents with always-visible chips (with select-all/clear), and batch-add multiple skills in one click.\n- **Batch operations** — Multi-select skills for bulk enable/disable, export, or delete. Project Workspaces also support bulk enable/disable for project-local skills.\n- **Skill tagging and filters** — Tag skills, use tags to group similar skills, and filter by source or tag — including an **Untagged** pill to quickly find skills missing labels.\n- **Update tracking** — Check for upstream updates on Git-based skills; re-import local ones.\n- **Skill preview and source inspection** — Read `SKILL.md` / `README.md`, inspect source metadata, and compare local content with the upstream version inside the app.\n- **Custom tools** — Add your own agents/tools with custom skills directories, or override the default path for any built-in tool.\n- **Git backup and restore** — Version-control your skill library with Git for backup and multi-machine sync, then restore snapshot versions from Version History when needed.\n- **Activity log & Export Logs** — Install / remove / update / sync operations are recorded locally. Use **Settings → Export Logs** to bundle recent logs and activity history into a single zip for easier issue reports.\n- **Flexible app settings** — Configure repo path, sync mode, theme, text size, language, tray behavior, proxy, Git remote, update checks, and the order agents appear throughout the app — all in one place.\n\n## Core Concepts\n\n<p align=\"center\">\n  <img src=\"assets/diagram-concept-map.png\" width=\"640\" alt=\"Concept map: Library, Preset, Global Workspace, Project Workspace, Agent\" />\n</p>\n\n- **Presets are reusable skill groups** — A preset is a named collection of skills. Activate a preset in any workspace to add all its skills to the selected agents; deactivate to remove them. Applying a preset is a one-time copy — not a live sync.\n- **Global Workspace manages per-agent global skills** — Each installed agent has its own global skills folder (e.g. `~/.claude/skills/` for Claude Code). Each agent page lists everything in that folder — even skills installed without Skills Manager — so you can add, remove, or adopt them; the All Agents overview manages every agent at once.\n- **Project Workspaces are project-local skill sets** — A project workspace manages the skills that live inside a specific project (e.g. `<project>/.claude/skills/`). Skills added here only apply to that project.\n- **Tags are for grouping and filtering** — Use tags to label similar skills, then filter by tag to find the subset you want quickly.\n- **Batch control works everywhere** — Multi-select skills in any workspace for bulk operations.\n\n## Quick Start\n\n1. Install skills from local folders, Git repositories, archives, or the marketplace. If you have a SkillsMP API key, you can also turn on AI search.\n2. Open **Global Workspace** from the sidebar and pick an agent (e.g. Claude Code).\n3. Click a **Preset** pill to activate its skills for that agent, or use **+ Add Skills** to pick from your library and toggle target agents inline. Active presets show a ✓; partial installs show a count badge.\n4. To manage project-local skills, open a **Project Workspace** and use the same preset pills or the **+ Add Skills** picker with its multi-agent target selector.\n5. Configure agent paths, custom tools, theme, language, proxy, and Git preferences in **Settings**.\n6. If you want history or multi-machine sync, set a Git remote in **Settings** and run **Start Backup** or **Sync to Git** from the **Library**.\n\n## Git Backup\n\nBack up the `skills/` folder inside your current central repository to a Git repo for version history and multi-machine sync. By default this is `~/.skills-manager/skills/`.\n\n### Quick setup\n\n1. Create a private repository (recommended).\n2. Open **Settings → Git Sync Configuration** and save your remote URL.\n3. Open **Library**.\n4. Choose one:\n- Existing remote: click **Start Backup** to clone from the configured remote.\n- New local repo: click **Start Backup** to initialize locally, then use **Sync to Git**.\n5. Use **Sync to Git** from the Library toolbar.\n\n`Sync to Git` automatically handles pull, commit, and push based on current repo status.\nEach successful sync creates a snapshot version tag. You can open **Version History** in the **Library**, inspect the timeline, and restore any snapshot as a new commit.\n\n### Authentication\n\n- SSH URL (`git@github.com:...`): requires SSH key configured on your machine and added to GitHub.\n- HTTPS URL (`https://github.com/...`): push usually requires a Personal Access Token (PAT).\n\n> **Note:** The SQLite database (`skills-manager.db` inside your current central repository, `~/.skills-manager/skills-manager.db` by default) is not included in Git — it stores metadata that can be rebuilt by scanning the skill files.\n\n## Supported Tools\n\nCursor · Claude Code · Codex · Grok · OpenCode · Amp · Kilo Code · Roo Code · Goose · Gemini CLI · GitHub Copilot · Windsurf · TRAE IDE · Antigravity · Clawdbot · Droid\n\nYou can also add custom tools in **Settings** and manage their skills the same way.\n\n## In-App Help\n\nThe **Help** button in **Settings** mirrors the current product flow: recommended workflows, presets, skill installation, the Library (with the Untagged filter and per-card delete), the Global Workspace and the **+ Add Skills** sheet, Project Workspaces with the multi-agent target picker, Git backup, and environment-level settings (including Export Logs for issue reports). It is intended as the in-app version of this quick-start guide.\n\n## Tech Stack\n\n| Layer | Tech |\n|-------|------|\n| Frontend | React 19, TypeScript, Vite, Tailwind CSS |\n| Desktop | Tauri 2 |\n| Backend | Rust |\n| Storage | SQLite (`rusqlite`) |\n| i18n | react-i18next |\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js 18+\n- Rust toolchain\n- [Tauri prerequisites](https://v2.tauri.app/start/prerequisites/) for your OS\n\n### Development\n\n```bash\nnpm install\nnpm run tauri:dev\n```\n\n### CLI\n\nThe repository includes an agent-friendly CLI built on the same Rust shared core used by the desktop app. Both the CLI and the desktop app go through the same SQLite database, central library, and sync engine.\n\n```bash\n# Repository / library overview\nnpm run cli -- repo status\nnpm run cli -- skills list\nnpm run cli -- skills show db\n\n# Install skills (default: enter library only — does NOT sync to agents)\nnpm run cli -- skills install ./my-skill                       # local path\nnpm run cli -- skills install https://github.com/foo/bar.git   # git URL\nnpm run cli -- skills install vercel-labs/agent-skills@react-best-practices  # skills.sh\nnpm run cli -- skills install foo/bar --sync                   # add to active preset + sync to agents\n\n# Update / check from upstream (git skills re-clone, local skills re-import source)\nnpm run cli -- skills update --all\nnpm run cli -- skills check --all\n\n# Search the skills.sh marketplace (no API key needed)\nnpm run cli -- skills search react --limit 5\n\n# Remove (--yes required; --dry-run available)\nnpm run cli -- skills remove <ref> --dry-run\nnpm run cli -- skills remove <ref> --yes\n\n# Enable / disable skills by changing preset membership\nnpm run cli -- presets add-skill <preset> <ref>\nnpm run cli -- presets remove-skill <preset> <ref>\n\n# Sync the active preset out to enabled agents\nnpm run cli -- skills sync --dry-run\nnpm run cli -- skills sync --tool claude_code\n\n# Adopt skills that already exist in an agent directory (e.g. ~/.claude/skills/)\nnpm run cli -- skills adopt ~/.claude/skills --dry-run\nnpm run cli -- skills adopt ~/.claude/skills\n\n# Tag\nnpm run cli -- skills tag add <ref> web frontend\nnpm run cli -- skills tag list\n\n# Presets\nnpm run cli -- presets list\nnpm run cli -- presets preview Default\nnpm run cli -- presets apply Default\nnpm run cli -- presets add-skill <preset> <skill>\nnpm run cli -- presets remove-skill <preset> <skill>\n\n# Export one skill to an arbitrary directory (one-shot copy, not managed)\nnpm run cli -- skills export db --dest ~/.claude/skills/db\n\n# Git-backed skills repo\nnpm run cli -- git status\nnpm run cli -- git pull\nnpm run cli -- git commit -m \"chore: update skills\"\n```\n\nAvailable command groups:\n- `repo` — inspect or change the configured base directory\n- `tools` — list detected tool targets and paths\n- `skills` — manage skills in the central library (`list / show / install / update / check / remove / enable / disable / sync / search / adopt / tag / export`)\n- `presets` — list presets, preview / apply, add or remove skills from a preset\n- `git` — operate on the git-backed `skills/` repository (`clone`, `pull`, `push`, `commit`, `versions`, `restore`",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workspace"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 11,
      "relevance": 20,
      "novelty": 4,
      "productize": 11,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 8,
      "total": 72
    },
    "strategic_score": 72
  },
  {
    "owner": "wezterm",
    "name": "wezterm",
    "full_name": "wezterm/wezterm",
    "url": "https://github.com/wezterm/wezterm",
    "description": "A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust",
    "language": "Rust",
    "total_stars": 26914,
    "forks": 1523,
    "stars_this_period": 37,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "rust",
        "serial",
        "serial-port",
        "terminal",
        "terminal-emulator",
        "terminal-emulators"
      ],
      "license": "NOASSERTION",
      "open_issues": 1727,
      "created_at": "2018-02-07T05:35:46Z",
      "pushed_at": "2026-06-23T19:23:02Z",
      "homepage": "https://wezterm.org/",
      "default_branch": "main",
      "forks": 1523,
      "watchers": 111,
      "archived": false,
      "size_kb": 312947
    },
    "readme_content": "# Wez's Terminal\n\n<img height=\"128\" alt=\"WezTerm Icon\" src=\"https://raw.githubusercontent.com/wezterm/wezterm/main/assets/icon/wezterm-icon.svg\" align=\"left\"> *A GPU-accelerated cross-platform terminal emulator and multiplexer written by <a href=\"https://github.com/wez\">@wez</a> and implemented in <a href=\"https://www.rust-lang.org/\">Rust</a>*\n\nUser facing docs and guide at: https://wezterm.org/\n\n![Screenshot](docs/screenshots/two.png)\n\n*Screenshot of wezterm on macOS, running vim*\n\n## Installation\n\nhttps://wezterm.org/installation\n\n## Getting help\n\nThis is a spare time project, so please bear with me.  There are a couple of channels for support:\n\n* You can use the [GitHub issue tracker](https://github.com/wezterm/wezterm/issues) to see if someone else has a similar issue, or to file a new one.\n* Start or join a thread in our [GitHub Discussions](https://github.com/wezterm/wezterm/discussions); if you have general\n  questions or want to chat with other wezterm users, you're welcome here!\n* There is a [Matrix room via Element.io](https://matrix.to/#/#wezterm:matrix.org)\n  for (potentially!) real time discussions.\n\nThe GitHub Discussions and Element/Gitter rooms are better suited for questions\nthan bug reports, but don't be afraid to use whichever you are most comfortable\nusing and we'll work it out.\n\n## Supporting the Project\n\nIf you use and like WezTerm, please consider sponsoring it: your support helps\nto cover the fees required to maintain the project and to validate the time\nspent working on it!\n\n[Read more about sponsoring](https://wezterm.org/sponsor.html).\n\n* [![Sponsor WezTerm](https://img.shields.io/github/sponsors/wez?label=Sponsor%20WezTerm&logo=github&style=for-the-badge)](https://github.com/sponsors/wez)\n* [Patreon](https://patreon.com/WezFurlong)\n* [Ko-Fi](https://ko-fi.com/wezfurlong)\n* [Liberapay](https://liberapay.com/wez)\n",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[workspace]\nmembers = [\n  \"bidi\",\n  \"bidi/generate\",\n  \"strip-ansi-escapes\",\n  \"sync-color-schemes\",\n  \"deps/cairo\",\n  \"wezterm\",\n  \"wezterm-blob-leases\",\n  \"wezterm-cell\",\n  \"wezterm-escape-parser\",\n  \"wezterm-dynamic\",\n  \"wezterm-gui\",\n  \"wezterm-mux-server\",\n  \"wezterm-open-url\",\n  \"wezterm-ssh\",\n  \"wezterm-surface\",\n  \"wezterm-uds\",\n]\nresolver = \"2\"\nexclude = [\n  \"termwiz/codegen\",\n  \"wezterm-char-props/codegen\",\n]\n\n[profile.release]\nopt-level = 3\n# debug = 2\n\n[profile.dev]\n# https://jakedeichert.com/blog/reducing-rust-incremental-compilation-times-on-macos-by-70-percent/\n# Disabled because it breaks builds on Windows\n#split-debuginfo = \"unpacked\"\n\n[workspace.dependencies]\nahash = \"0.8\"\nanyhow = \"1.0\"\nassert_fs = \"1.0.4\"\nasync-channel = \"2.3\"\nasync-executor = \"1.11\"\nasync-io = \"2.3\"\nasync-task = \"4.7\"\nasync-trait = \"0.1\"\nasync_ossl = { path = \"async_ossl\" }\nbacktrace = \"0.3\"\nbase64 = {version=\"0.22\", default-features=false }\nbase91 = { path = \"base91\" }\nbattery = { path = \"lua-api-crates/battery\" }\nbenchmarking = \"0.4\"\nbintree = { path = \"bintree\" }\nbitflags = \"1.3\"\nblock2 = \"0.6\"\nbstr = \"1.0\"\nbytemuck = { version=\"1.4\", features=[\"derive\"]}\nbytes = \"1.0\"\ncairo-rs = {version=\"0.18\", default-features=false} # See patch.crates-io section\ncamino = \"1.0\"\ncassowary = \"0.3\"\ncc = {version=\"1.0\", features = [\"parallel\"]}\ncgl = \"0.3\"\nchrono = {version=\"0.4\", default-features=false, features=[\"unstable-locales\", \"serde\"]}\nclap = {version=\"4.0\", features=[\"derive\"]}\nclap_complete = \"4.4\"\nclap_complete_fig = \"4.0\"\nclipboard-win = \"2.2\"\ncocoa = \"=0.25.0\"\ncodec = { path = \"codec\" }\ncolor-funcs = { path = \"lua-api-crates/color-funcs\" }\ncolorgrad = \"0.6\"\nconfig = { path = \"config\" }\ncore-foundation = \"=0.10.0\"\ncore-graphics = \"=0.24.0\"\ncore-text = \"=21.0.0\"\ncriterion = \"0.5\"\ncrossbeam = \"0.8\"\ncsscolorparser = \"0.6\"\ndeltae = \"0.3\"\ndhat = \"0.3\"\ndirs-next = \"2.0\"\ndns-lookup = \"2.0\"\ndowncast-rs = \"1.0\"\ndwrote = \"0.11\"\nembed-resource = \"1.7\"\nemojis = \"0.6\"\nencoding_rs = \"0.8\"\nenum-display-derive = \"0.1\"\nenv-bootstrap = { path = \"env-bootstrap\" }\nenv_logger = \"0.11\"\neuclid = {version=\"0.22\", default-features=false}\nfancy-regex = {version=\"0.14\", default-features=false, features=[]}\nfastrand = \"2.0\"\nfiledescriptor = { version=\"0.8.3\", path = \"filedescriptor\" }\nfilenamegen = \"0.2.6\"\nfilesystem = { path = \"lua-api-crates/filesystem\" }\nfinl_unicode = { version = \"1.3\",  git=\"https://github.com/wez/finl_unicode.git\", branch=\"no_std\" , default-features=false, features=[\"categories\", \"grapheme_clusters\"]}\nfixed = \"1.23\"\nfixedbitset = {version=\"0.4\", default-features=false}\nflume = \"0.11\"\nfnv = \"1.0\"\nfontconfig = { path = \"deps/fontconfig\" }\nfrecency = { path = \"frecency\" }\nfreetype = { path = \"deps/freetype\" }\nfutures = \"0.3\"\nfutures-lite = \"2.3\"\nfutures-util = \"0.3\"\ngethostname = \"0.5\"\ngetrandom = \"0.3.1\"\ngit2 = { version = \"0.20\", default-features = false, features = [\"https\"] }\ngl_generator = \"0.14\"\nglium = { version = \"0.35\", default-features = false }\ngovernor = {version=\"0.5\", default-features=false, features=[\"std\"]}\nguillotiere = \"0.6\"\nharfbuzz = { path = \"deps/harfbuzz\" }\nheapless = \"0.8\"\nhdrhistogram = \"7.1\"\nhex = {version=\"0.4\", default-features=false}\nhostname = \"0.4\"\nhttp_req = \"0.11\"\nhuman-sort = \"0.2\"\nhumansize = \"2.1\"\nhumantime = \"2.1\"\nimage = \"0.25\"\nintrusive-collections = \"0.9\"\nk9 = \"0.12.0\"\nlazy_static = \"1.4\"\nleb128 = \"0.2\"\nlfucache = { path = \"lfucache\" }\nlibc = \"0.2\"\nlibflate = \"2\"\nlibloading = \"0.8\"\nlibssh-rs = \"0.3.6\"\nline_drawing = \"0.8\"\nlog = \"0.4\"\nlogging = { path = \"lua-api-crates/logging\" }\nlru = \"0.16\"\nluahelper = { path = \"luahelper\" }\nmaplit = \"1.0\"\nmemmap2 = \"0.9\"\nmemmem = \"0.1\"\nmetrics = \"0.23\"\nminiz_oxide = \"0.7\"\nmio = \"0.8\"\nmlua = \"0.9\"\nmux = { path = \"mux\" }\nmux-lua = { path = \"lua-api-crates/mux\" }\nnames = { version = \"0.12\", default-features = false }\nnix = \"0.29\"\nnotify = \"5.0.0\"\nntapi = \"0.4\"\nnucleo-matcher = \"0.3\"\nnum = \"0.4\"\nnum-derive = \"0.4\"\nnum-traits = {version=\"0.2\", default-features=false }\nobjc = \"0.2\"\nobjc2 = \"0.6\"\nobjc2-core-graphics = \"0.3\"\nobjc2-foundation = \"0.3\"\nobjc2-user-notifications = \"0.3\"\nopenssl = \"0.10.57\"\nordered-float = {version=\"4.1\", default-features=false}\nparking_lot = \"0.12\"\npassfd = \"0.1.6\"\npercent-encoding = \"2.3\"\npest = \"2.7\"\npest_derive = \"2.7\"\nphf = {version=\"0.11\", default-features=false}\nphf_codegen = \"0.10\"\npkg-config = \"0.3\"\nplist = \"1.7\"\nplugin = { path = \"lua-api-crates/plugin\" }\nportable-pty = { path = \"pty\" }\npredicates = \"3.0\"\nproc-macro2 = \"1.0\"\nprocinfo = { path = \"procinfo\" }\nprocinfo-funcs = { path = \"lua-api-crates/procinfo-funcs\" }\npromise = { path = \"promise\" }\nquote = \"1.0.2\"\nrangeset = { path = \"rangeset\" }\nratelim= { path = \"ratelim\" }\nraw-window-handle = \"0.6\"\nrayon = \"1.10\"\nrcgen = \"0.12\"\nregex = \"1\"\nreqwest = \"0.12\"\nresize = \"0.5\"\nrstest = \"0.21\"\nrusqlite = \"0.32\"\nserde = {version=\"1.0\", default-features=false, features = [\"derive\"]}\nserde-funcs = { path = \"lua-api-crates/serde-funcs\" }\nserde_json = \"1.0\"\nserde_with = {version=\"2.0\", f",
    "strategic_keywords": [
      "workspace",
      "codegen"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 12,
      "relevance": 15,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 6,
      "total": 73
    },
    "strategic_score": 73
  }
]