[
  {
    "owner": "ripienaar",
    "name": "free-for-dev",
    "full_name": "ripienaar/free-for-dev",
    "url": "https://github.com/ripienaar/free-for-dev",
    "description": "A list of SaaS, PaaS and IaaS offerings that have free tiers of interest to devops and infradev",
    "language": "HTML",
    "total_stars": 126668,
    "forks": 13255,
    "stars_this_period": 1971,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "awesome-list",
        "free-for-developers"
      ],
      "license": "NOASSERTION",
      "open_issues": 12,
      "created_at": "2015-03-18T21:06:26Z",
      "pushed_at": "2026-06-29T19:40:39Z",
      "homepage": "https://free-for.dev/",
      "default_branch": "master",
      "forks": 13255,
      "watchers": 1776,
      "archived": false,
      "size_kb": 10253
    },
    "readme_content": "# free-for.dev\n\nDevelopers and Open Source authors now have many services offering free tiers, but finding them all takes time to make informed decisions.\n\nThis is a list of software (SaaS, PaaS, IaaS, etc.) and other offerings with free developer tiers.\n\nThe scope of this particular list is limited to things that infrastructure developers (System Administrator, DevOps Practitioners, etc.) are likely to find useful. We love all the free services out there, but it would be good to keep it on topic. It's a grey line sometimes, so this is opinionated; please don't feel offended if I don't accept your contribution.\n\nThis list results from Pull Requests, reviews, ideas, and work done by 1600+ people. You can also help by sending [Pull Requests](https://github.com/ripienaar/free-for-dev) to add more services or remove ones whose offerings have changed or been retired.\n\n[![Track Awesome List](https://www.trackawesomelist.com/badge.svg)](https://www.trackawesomelist.com/ripienaar/free-for-dev)\n\n**NOTE**: This list is only for as-a-Service offerings, not for self-hosted software. To be eligible, a service must offer a free tier, not just a free trial. The free tier must be for at least a year if it is time-bucketed. We also consider the free tier from a security perspective, so SSO is fine, but I will not accept services that restrict TLS to paid-only tiers.\n\n# Table of Contents\n\n  * [Major Cloud Providers' Always-Free Limits](#major-cloud-providers)\n  * [Cloud management solutions](#cloud-management-solutions)\n  * [Analytics, Events, and Statistics](#analytics-events-and-statistics)\n  * [APIs, Data and ML](#apis-data-and-ml)\n  * [Artifact Repos](#artifact-repos)\n  * [BaaS](#baas)\n  * [Low-code Platform](#low-code-platform)\n  * [CDN and Protection](#cdn-and-protection)\n  * [CI and CD](#ci-and-cd)\n  * [CMS](#cms)\n  * [Code Generation](#code-generation)\n  * [Code Quality](#code-quality)\n  * [Code Search and Browsing](#code-search-and-browsing)\n  * [Crash and Exception Handling](#crash-and-exception-handling)\n  * [Data Visualization on Maps](#data-visualization-on-maps)\n  * [Managed Data Services](#managed-data-services)\n  * [Design and UI](#design-and-ui)\n  * [Dev Blogging Sites](#dev-blogging-sites)\n  * [DNS](#dns)\n  * [Docker Related](#docker-related)\n  * [Domain](#domain)\n  * [Education and Career Development](#education-and-career-development)\n  * [Email](#email)\n  * [Feature Toggles Management Platforms](#feature-toggles-management-platforms)\n  * [Font](#font)\n  * [Forms](#forms)\n  * [Generative AI](#generative-ai)\n  * [IaaS](#iaas)\n  * [IDE and Code Editing](#ide-and-code-editing)\n  * [International Mobile Number Verification API and SDK](#international-mobile-number-verification-api-and-sdk)\n  * [Issue Tracking and Project Management](#issue-tracking-and-project-management)\n  * [Log Management](#log-management)\n  * [Mobile App Distribution and Feedback](#mobile-app-distribution-and-feedback)\n  * [Management Systems](#management-system)\n  * [Messaging and Streaming](#messaging-and-streaming)\n  * [Miscellaneous](#miscellaneous)\n  * [Monitoring](#monitoring)\n  * [PaaS](#paas)\n  * [Package Build System](#package-build-system)\n  * [Payment and Billing Integration](#payment-and-billing-integration)\n  * [Privacy Management](#privacy-management)\n  * [Screenshot APIs](#screenshot-apis)\n  * [Flutter Related and Building IOS Apps without Mac](#flutter-related-and-building-ios-apps-without-mac)\n  * [Search](#search)\n  * [Security and PKI](#security-and-pki)\n  * [Authentication, Authorization, and User Management](#authentication-authorization-and-user-management)\n  * [Source Code Repos](#source-code-repos)\n  * [Storage and Media Processing](#storage-and-media-processing)\n  * [Tunneling, WebRTC, Web Socket Servers and Other Routers](#tunneling-webrtc-web-socket-servers-and-other-routers)\n  * [Testing](#testing)\n  * [Tools for Teams and Collaboration](#tools-for-teams-and-collaboration)\n  * [Translation Management](#translation-management)\n  * [Visitor Session Recording](#visitor-session-recording)\n  * [Web Hosting](#web-hosting)\n  * [Commenting Platforms](#commenting-platforms)\n  * [Browser based hardware emulation](#browser-based-hardware-emulation-written-in-javascript)\n  * [Remote Desktop Tools](#remote-desktop-tools)\n  * [Other Free Resources](#other-free-resources)\n\n## Major Cloud Providers\n\n  * [Google Cloud Platform](https://cloud.google.com)\n    * App Engine - 28 frontend instance hours per day, nine backend instance hours per day\n    * Cloud Firestore - 1GB storage, 50,000 reads, 20,000 writes, 20,000 deletes per day\n    * Compute Engine - 1 non-preemptible e2-micro, 30GB HDD, 5GB snapshot storage (restricted to certain regions), 1 GB network egress from North America to all region destinations (excluding China and Australia) per month\n    * Cloud Storage - 5GB, 1GB network egress\n    * Cloud Shell - Web-based Linux shell/primary IDE with 5GB of persistent storage. 60 hours limit per week\n    * Cloud Pub/Sub - 10GB of messages per month\n    * Cloud Functions - 2 million invocations per month (includes both background and HTTP invocations)\n    * Cloud Run - 2 million requests per month, 360,000 GB-seconds memory, 180,000 vCPU-seconds of compute time, 1 GB network egress from North America per month\n    * Google Kubernetes Engine - No cluster management fee for one zonal cluster. Each user node is charged at standard Compute Engine pricing\n    * BigQuery - 1 TB of querying per month, 10 GB of storage each month\n    * Cloud Build - 120 build-minutes per day\n    * [Google Colab](https://colab.research.google.com/) - Free Jupyter Notebooks development environment.\n    * [Kaggle](https://www.kaggle.com/) - Jupyter Notebooks with 4 CPU cores and 30 GB RAM computational environment without any weekly usage limits. With Phone number verification - 1 Nvidia Tesla P100 GPU or 2x Nvidia Tesla T4 GPU can be added with usage limit of 30 GPU hours/week for free. With Identity verification - 1 TPU v3-8 with 96 CPU cores and 330 GB RAM is available with usage limit of 20 hours/week for free. Check [Technical Specifications](https://www.kaggle.com/docs/notebooks#technical-specifications) for more details.\n    * [Google Gemini API](https://ai.google.dev/) - Get free access to Gemini 1.5 Pro and Gemini 1.5 Flash models. The free tier offers 15 requests per minute, 1,500 requests per day, and 1 million tokens per minute.\n    * Full, detailed list - https://cloud.google.com/free\n\n  * [Amazon Web Services](https://aws.amazon.com)\n    * [CloudFront](https://aws.amazon.com/cloudfront/) - 1TB egress per month and 2M Function invocations per month\n    * [CloudWatch](https://aws.amazon.com/cloudwatch/) - 10 custom metrics and ten alarms\n    * [CodeBuild](https://aws.amazon.com/codebuild/) - 100min of build time per month\n    * [CodeCommit](https://aws.amazon.com/codecommit/) - 5 active users,50GB storage, and 10000 requests per month\n    * [CodePipeline](https://aws.amazon.com/codepipeline/) - 1 active pipeline per month\n    * [DynamoDB](https://aws.amazon.com/dynamodb/) - 25GB NoSQL DB\n    * [EC2](https://aws.amazon.com/ec2/) - 750 hours per month of t2.micro or t3.micro(12mo). 100GB egress per month\n    * [EBS](https://aws.amazon.com/ebs/) - 30GB per month of General Purpose (SSD) or Magnetic(12mo)\n    * [Elastic Load Balancing](https://aws.amazon.com/elasticloadbalancing/) - 750 hours per month(12mo)\n    * [RDS](https://aws.amazon.com/rds/) - 750 hours per month of db.t2.micro, db.t3.micro, or db.t4g.micro, 20GB of General Purpose (SSD) storage, 20GB of storage backups(12 mo)\n    * [S3](https://aws.amazon.com/s3/) - 5GB Standard object storage, 20K Get requests and 2K Put requests(12 mo)\n    * [Glacier](https://aws.amazon.com/glacier/) - 10GB long-term object storage\n    * [Lambda](https://aws.amazon.com/lambda/) - 1 million requests per month\n    * [SNS](https://aws.amazon.com/sns/) - 1 million publishes per month\n    * [SES](https://aws.amazon.com/ses/) - 3.000 messages per month (12mo)\n    * [SQS](https://aws.amazon.com/sqs/) - 1 million messaging queue requests\n    * Full, detailed list - https://aws.amazon.com/free/\n\n  * [Microsoft Azure](https://azure.microsoft.com)\n    * [Virtual Machines](https://azure.microsoft.com/services/virtual-machines/) - 1 B1S Linux VM, 1 B1S Windows VM (12mo)\n    * [App Service](https://azure.microsoft.com/services/app-service/) - 10 web, mobile, or API apps (60 CPU minutes/day)\n    * [Functions](https://azure.microsoft.com/services/functions/) - 1 million requests per month\n    * [DevTest Labs](https://azure.microsoft.com/services/devtest-lab/) - Enable fast, easy, and lean dev-test environments\n    * [Active Directory](https://azure.microsoft.com/services/active-directory/) - 500,000 objects\n    * [Active Directory B2C](https://azure.microsoft.com/services/active-directory/external-identities/b2c/) - 50,000 monthly stored users\n    * [Azure DevOps](https://azure.microsoft.com/services/devops/) - 5 active users, unlimited private Git repos\n    * [Azure Pipelines](https://azure.microsoft.com/services/devops/pipelines/) - 10 free parallel jobs with unlimited minutes for open source for Linux, macOS, and Windows\n    * [Microsoft IoT Hub](https://azure.microsoft.com/services/iot-hub/) - 8,000 messages per day\n    * [Load Balancer](https://azure.microsoft.com/services/load-balancer/) - 1 free public load-balanced IP (VIP)\n    * [Notification Hubs](https://azure.microsoft.com/services/notification-hubs/) - 1 million push notifications\n    * [Bandwidth](https://azure.microsoft.com/pricing/details/bandwidth/) - 15GB Inbound(12mo) & 5GB egress per month\n    * [Cosmos DB](https://azure.microsoft.com/services/cosmos-db/) - 25GB storage and 1000 RUs of provisioned throughput\n    * [Static Web Apps](https://azure.microsoft.com/pricing/details/app-service/static/) - Build, deploy, and host static apps and serverless functions with free SSL, Authentication/Authorization, and custom domains\n    * [Storage](https://azure.microsoft.com/services/storage/) - 5GB LRS File or Blob storage (12mo)\n    * [Cognitive Services](https://azure.microsoft.com/services/cognitive-services/) - AI/ML APIs (Computer Vision, Translator, Face detection, Bots, etc) with free tier including limited transactions\n    * [Cognitive Search](https://azure.microsoft.com/services/search/#features) - AI-based search and indexation service, free for 10,000 documents\n    * [Azure Kubernetes Service](https://azure.microsoft.com/services/kubernetes-service/) - Managed Kubernetes service, free cluster management\n    * [Event Grid](https://azure.microsoft.com/services/event-grid/) - 100K ops/month\n    * Full, detailed list - https://azure.microsoft.com/free/\n\n  * [Oracle Cloud](https://www.oracle.com/cloud/)\n    * Compute\n       - 2 AMD-based Compute VMs with 1/8 OCPU and 1 GB memory each\n       - 2 Arm-based Ampere A1 cores and 12 GB of memory usable as one VM or up to 2 VMs\n       - Instances will be reclaimed when [deemed idle](https://docs.oracle.com/en-us/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm#compute__idleinstances)\n    * Block Volume - 2 volumes, 200 GB total (used for compute)\n    * Object Storage - 10 GB\n    * Load balancer - 1 instance with 10 Mbps\n    * Databases - 2 DBs, 20 GB each\n    * Monitoring - 500 million ingestion data points, 1 billion retrieval datapoints\n    * Bandwidth - 10 TB egress per month, speed limited to 50 Mbps on x64-based VM, 500 Mbps * core count on ARM-based VM\n    * Public IP - 2 IPv4 for VMs, 1 IPv4 for load balancer\n    * Notifications - 1 million delivery options per month, 1000 emails sent per month\n    * Full, detailed list - https://www.oracle.com/cloud/free/\n\n  * [IBM Cloud](https://www.ibm.com/cloud/free/)\n    * Cloudant database - 1 GB of data storage\n    * Db2 database - 100MB of data storage\n    * API Connect - 50,000 API calls per month\n    * Availability Monitoring - 3 million data points per month\n    * Log Analysis - 500MB of daily log\n    * Full, ",
    "strategic_keywords": [
      "rag"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 8,
      "novelty": 4,
      "productize": 14,
      "adoption": 8,
      "relation": 7,
      "risk_signal": 4,
      "total": 65
    },
    "strategic_score": 65
  },
  {
    "owner": "simplex-chat",
    "name": "simplex-chat",
    "full_name": "simplex-chat/simplex-chat",
    "url": "https://github.com/simplex-chat/simplex-chat",
    "description": "SimpleX - the first messaging network operating without user identifiers of any kind - 100% private by design! iOS, Android and desktop apps 📱!",
    "language": "Haskell",
    "total_stars": 16486,
    "forks": 952,
    "stars_this_period": 1611,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "chat",
        "double-ratchet",
        "e2ee",
        "encryption",
        "haskell",
        "messaging",
        "privacy",
        "protocol",
        "security"
      ],
      "license": "AGPL-3.0",
      "open_issues": 1158,
      "created_at": "2019-12-21T09:50:09Z",
      "pushed_at": "2026-06-29T21:56:35Z",
      "homepage": "https://simplex.chat",
      "default_branch": "stable",
      "forks": 952,
      "watchers": 120,
      "archived": false,
      "size_kb": 418848
    },
    "readme_content": "[![build](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml/badge.svg?branch=stable)](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml)\n[![GitHub downloads](https://img.shields.io/github/downloads/simplex-chat/simplex-chat/total)](https://github.com/simplex-chat/simplex-chat/releases)\n[![GitHub release](https://img.shields.io/github/v/release/simplex-chat/simplex-chat)](https://github.com/simplex-chat/simplex-chat/releases)\n[![Join on Reddit](https://img.shields.io/reddit/subreddit-subscribers/SimpleXChat?style=social)](https://www.reddit.com/r/SimpleXChat)\n<a rel=\"me\" href=\"https://mastodon.social/@simplex\">![Follow on Mastodon](https://img.shields.io/mastodon/follow/108619463746856738?domain=https%3A%2F%2Fmastodon.social&style=social)</a>\n\n| 30/03/2023 | EN, [FR](/docs/lang/fr/README.md), [CZ](/docs/lang/cs/README.md), [PL](/docs/lang/pl/README.md) |\n\n<img src=\"images/github-banner.jpg\" alt=\"SimpleX logo\" width=\"100%\">\n\nInvest in SimpleX Chat. [Register now](https://simplexchat.typeform.com/crowdfunding).\n\n# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!\n\n[<img src=\"./images/trail-of-bits.jpg\" height=\"80\">](http://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html) &nbsp;&nbsp;&nbsp; [<img src=\"./images/privacy-guides.jpg\" height=\"64\">](https://www.privacyguides.org/en/real-time-communication/#simplex-chat) &nbsp;&nbsp;&nbsp; [<img src=\"./images/whonix-logo.jpg\" height=\"64\">](https://www.whonix.org/wiki/Chat#Recommendation) &nbsp;&nbsp;&nbsp; [<img src=\"./images/kuketz-blog.jpg\" height=\"64\">](https://www.kuketz-blog.de/simplex-eindruecke-vom-messenger-ohne-identifier/)\n\n**[Why we are building SimpleX Network](./docs/WHY.md)**\n\n## Welcome to SimpleX Chat!\n\n1. 📲 [Install the app](#install-the-app).\n2. ↔️ [Connect to the team](#connect-to-the-team), [join user groups](#join-user-groups) and [follow our updates](#follow-our-updates).\n3. 🤝 [Make a private connection](#make-a-private-connection) with a friend.\n4. 🔤 [Help translating SimpleX Chat](#help-translating-simplex-chat).\n5. ⚡️ [Contribute](#contribute) and [support us with donations](#please-support-us-with-your-donations).\n\n[Learn more about SimpleX Chat](#contents).\n\n## Install the app\n\n[<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/apple_store.svg\" alt=\"iOS app\" height=\"42\">](https://apps.apple.com/us/app/simplex-chat/id1605771084)\n&nbsp;\n[![Android app](https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/google_play.svg)](https://play.google.com/store/apps/details?id=chat.simplex.app)\n&nbsp;\n[<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/f_droid.svg\" alt=\"F-Droid\" height=\"41\">](https://app.simplex.chat)\n&nbsp;\n[<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/testflight.png\" alt=\"iOS TestFlight\" height=\"41\">](https://testflight.apple.com/join/DWuT2LQu)\n&nbsp;\n[<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/apk_icon.png\" alt=\"APK\" height=\"41\">](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-aarch64.apk)\n\n- 🖲 Protects your messages and metadata - who you talk to and when.\n- 🔐 Double ratchet end-to-end encryption, with additional encryption layer.\n- 📱 Mobile apps for Android ([Google Play](https://play.google.com/store/apps/details?id=chat.simplex.app), [APK](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-aarch64.apk)) and [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084).\n- 🚀 [TestFlight preview for iOS](https://testflight.apple.com/join/DWuT2LQu) with the new features 1-2 weeks earlier - **limited to 10,000 users**!\n- 🖥 Available as a terminal (console) [app / CLI](#zap-quick-installation-of-a-terminal-app) on Linux, MacOS, Windows.\n\n## Connect to the team\n\nYou can connect to the team via the app using \"chat with the developers button\" available when you have no conversations in the profile, \"Send questions and ideas\" in the app settings or via our [SimpleX address](https://smp6.simplex.im/a#lrdvu2d8A1GumSmoKb2krQmtKhWXq-tyGpHuM7aMwsw). Please connect to:\n\n- to ask any questions\n- to suggest any improvements\n- to share anything relevant\n\nWe are replying the questions manually, so it is not instant – it can take up to 24 hours.\n\nIf you are interested in helping us to integrate open-source language models, and in [joining our team](./docs/JOIN_TEAM.md), please get in touch.\n\n## Join user groups\n\nYou can find the groups created by users in [SimpleX Directory](https://simplex.chat/directory/). It is also available as [SimpleX bot](https://smp4.simplex.im/a#lXUjJW5vHYQzoLYgmi8GbxkGP41_kjefFvBrdwg-0Ok) that allows to add your own groups and communities to the directory. We are not responsible for the content shared in these groups.\n\n**Please note**: The groups below are created for the users to be able to ask questions, make suggestions and ask questions about SimpleX Chat only.\n\nYou can join an English-speaking users group if you want to ask any questions: [#SimpleX users group](https://smp4.simplex.im/g#hr4lvFeBmndWMKTwqiodPz3VBo_6UmdGWocXd1SupsM)\n\nThere is also a group [#simplex-devs](https://smp6.simplex.im/g#Drx3efC-n418AuSpzTspw9SER0iJwrQTmKBafQHwkKM) for developers who build on SimpleX platform:\n\n- chat bots and automations\n- integrations with other apps\n- social apps and services\n- etc.\n\nYou can join these and other groups by opening these links in the app or by opening them in a desktop browser and scanning the QR code.\n\n## Follow our updates\n\nWe publish our updates and releases via:\n\n- [Reddit](https://www.reddit.com/r/SimpleXChat/), [Twitter](https://twitter.com/SimpleXChat), [Lemmy](https://lemmy.ml/c/simplex), [Mastodon](https://mastodon.social/@simplex) and [Nostr](https://snort.social/p/npub1exv22uulqnmlluszc4yk92jhs2e5ajcs6mu3t00a6avzjcalj9csm7d828).\n- SimpleX Chat [team profile](#connect-to-the-team).\n- [blog](https://simplex.chat/blog/) and [RSS feed](https://simplex.chat/feed.rss).\n- [mailing list](https://simplex.chat/#join-simplex), very rarely.\n\n## Make a private connection\n\nYou need to share a link with your friend or scan a QR code from their phone, in person or during a video call, to make a connection and start messaging.\n\nThe channel through which you share the link does not have to be secure - it is enough that you can confirm who sent you the message and that your SimpleX connection is established.\n\n<img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/app1.png\" alt=\"Make a private connection\" height=\"360\"> <img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/arrow.png\" height=\"360\"> <img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/app2.png\" alt=\"Conversation\" height=\"360\"> <img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/arrow.png\" height=\"360\"> <img src=\"https://raw.githubusercontent.com/simplex-chat/.github/refs/heads/master/profile/images/app3.png\" alt=\"Video call\" height=\"360\">\n\nAfter you connect, you can [verify connection security code](./blog/20230103-simplex-chat-v4.4-disappearing-messages.md#connection-security-verification).\n\n## User guide (NEW)\n\nRead about the app features and settings in the new [User guide](./docs/guide/README.md).\n\n## Contribute\n\nWe would love to have you join the development! You can help us with:\n\n- [develop a chat bot](#develop-a-chat-bot) for SimpleX Chat!\n- writing a tutorial or recipes about hosting servers, chat bots, etc.\n- developing features - please connect to us via chat so we can help you get started.\n\n## Help translating SimpleX Chat\n\nThanks to our users and [Weblate](https://hosted.weblate.org/engage/simplex-chat/), SimpleX Chat apps, website and documents are translated to many other languages.\n\nJoin our translators to help SimpleX grow!\n\n|locale|language |contributor|[Android](https://play.google.com/store/apps/details?id=chat.simplex.app) and [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084)|[website](https://simplex.chat)|Github docs|\n|:----:|:-------:|:---------:|:---------:|:---------:|:---------:|\n|🇬🇧 en|English   | |✓|✓|✓|✓|\n|ar|العربية   |[jermanuts](https://github.com/jermanuts)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/ar/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ar/)<br>-|[![website](https://hosted.weblate.org/widgets/simplex-chat/ar/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/ar/)||\n|🇧🇬 bg|Български | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/bg/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/bg/)<br>[![ios app](https://hosted.weblate.org/widget/simplex-chat/ios/bg/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/bg/)|||\n|🇨🇿 cs|Čeština   |[zen0bit](https://github.com/zen0bit)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/cs/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/cs/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/cs/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/cs/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/cs/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/cs/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/cs)|\n|🇩🇪 de|Deutsch   |[mlanp](https://github.com/mlanp)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/de/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/de/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/de/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/de/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/de/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/de/)||\n|🇪🇸 es|Español   |[Mateyhv](https://github.com/Mateyhv)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/es/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/es/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/es/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/es/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/es/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/es/)||\n|🇫🇮 fi|Suomi     | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/fi/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fi/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fi/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fi/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fi/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fi/)||\n|🇫🇷 fr|Français  |[ishi_sama](https://github.com/ishi-sama)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/fr/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fr/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fr/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fr/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fr/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fr/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/fr)|\n|🇮🇱 he|עִברִית     | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/he/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/he/)<br>-|||\n|🇭🇺 hu|Magyar    | |[![android app](https://ho",
    "strategic_keywords": [
      "workflow",
      "protocol"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 14,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 8,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "owner": "xbtlin",
    "name": "ai-berkshire",
    "full_name": "xbtlin/ai-berkshire",
    "url": "https://github.com/xbtlin/ai-berkshire",
    "description": "AI 时代的伯克希尔：基于 Claude Code / Codex 的价值投资研究框架。巴菲特·芒格·段永平·李录四大师方法论 + 多Agent并行研究。| AI-era Berkshire: a value investing research framework built for Claude Code / Codex. 4 masters' methodologies + multi-agent adversarial analysis.",
    "language": "Python",
    "total_stars": 6558,
    "forks": 862,
    "stars_this_period": 1397,
    "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": 24,
      "created_at": "2026-04-07T11:19:51Z",
      "pushed_at": "2026-06-29T09:13:25Z",
      "homepage": "https://github.com/xbtlin/ai-berkshire#readme",
      "default_branch": "main",
      "forks": 862,
      "watchers": 20,
      "archived": false,
      "size_kb": 19714
    },
    "readme_content": "中文 | [English](README_EN.md)\n\n# 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 与 Codex 的投资研究 Skill 合集，将巴菲特、芒格、段永平、李录四位价值投资大师的方法论系统化、结构化，通过 AI Agent 实现专业级投资研究。\n\n一个人 + Claude Code / Codex = 一个投研团队。\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 一览（18个）\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| [`/bottleneck-hunter`](skills/bottleneck-hunter.md) | 供应链瓶颈猎手 | 从超级趋势出发，寻找产业链物理瓶颈和套利机会 |\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| [`/wechat-article`](skills/wechat-article.md) | 微信公众号文章 | 作者、编辑、读者三Agent协作，产出可发布文章 |\n\n---\n\n## 快速开始\n\n### 1. 安装 AI 客户端\n\n本仓库保留同一套 canonical workflow，并分别提供 Claude Code commands 与 Codex skills。按你使用的客户端安装即可。\n\nClaude Code 用户：\n\n```bash\nnpm install -g @anthropic-ai/claude-code\n```\n\nCodex 用户：\n\n```bash\n# macOS / Linux\ncurl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 或使用 npm\nnpm install -g @openai/codex\n\n# 或使用 Homebrew\nbrew install --cask codex\n\n# 验证安装\ncodex --version\n```\n\nWindows 用户可使用官方 PowerShell 安装命令：`powershell -ExecutionPolicy ByPass -c \"irm https://chatgpt.com/codex/install.ps1 | iex\"`。\n\n如果 `codex --version` 能正常输出版本号，就可以继续安装本项目的 Codex skills。\n\n### 2. 安装 Skills\n\nClaude Code 用户安装：\n\n```bash\n# 克隆仓库\ngit clone https://github.com/xbtlin/ai-berkshire.git\n\n# 复制 skills 到 Claude Code 全局 commands 目录\ncd ai-berkshire\n./scripts/install-claude-commands.sh\n```\n\nCodex 用户安装：\n\n```bash\n# 克隆仓库\ngit clone https://github.com/xbtlin/ai-berkshire.git\n\n# 生成并安装 Codex skills 到 ~/.codex/skills\ncd ai-berkshire\n./scripts/install-codex-skills.sh\n\n# 可选：安装 Codex slash prompts 到 ~/.codex/prompts\n# 用于获得接近 Claude Code 的 /investment-research 体验\n./scripts/install-codex-prompts.sh\n```\n\n仓库同时维护三套入口：`skills/*.md` 是 Claude Code command 源文件；`codex-skills/*/SKILL.md` 是 Codex skill 包，由 `scripts/sync-codex-skills.py` 从 `skills/*.md` 生成；`codex-prompts/*.md` 是可选的 Codex slash prompt 兼容层。\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/bottleneck-hunter AI基础设施\n/investment-checklist 茅台, 英伟达, 苹果\n\n# 持仓管理\n/portfolio-review 腾讯30%, 美团20%, 茅台20%, 现金30%\n/thesis-tracker 拼多多\n/news-pulse 腾讯\n\n# 思维工具\n/dyp-ask 拼多多的护城河到底在哪里？\n/wechat-article 大模型OPD技术解读\n```\n\n在 Codex 中安装后重启 Codex，然后直接按 skill 名称描述任务，例如：\n\n```text\n使用 investment-research 研究腾讯\n使用 earnings-review 分析 PDD 2025年报\n使用 industry-funnel 筛选 AI算力\n使用 bottleneck-hunter 扫描 AI基础设施瓶颈\n使用 wechat-article 写大模型OPD技术解读\n```\n\n如果安装了 Codex slash prompts，重启 Codex 后也可以在 `/` 菜单里搜索这些 prompt。Codex 官方的 custom prompt 入口通常显示为 `prompts:<name>`，例如：\n\n```text\n/prompts:investment-research 腾讯\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| ",
    "strategic_keywords": [
      "agent",
      "mcp",
      "skill",
      "llm"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 7,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 86
    },
    "strategic_score": 86
  },
  {
    "owner": "msitarzewski",
    "name": "agency-agents",
    "full_name": "msitarzewski/agency-agents",
    "url": "https://github.com/msitarzewski/agency-agents",
    "description": "A complete AI agency at your fingertips - From frontend wizards to Reddit community ninjas, from whimsy injectors to reality checkers. Each agent is a specialized expert with personality, processes, and proven deliverables.",
    "language": "Shell",
    "total_stars": 118778,
    "forks": 19460,
    "stars_this_period": 1221,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 86,
      "created_at": "2025-10-13T12:12:29Z",
      "pushed_at": "2026-06-29T18:23:32Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 19460,
      "watchers": 884,
      "archived": false,
      "size_kb": 3405
    },
    "readme_content": "# 🎭 The Agency: AI Specialists Ready to Transform Your Workflow\n\n> **A complete AI agency at your fingertips** - From frontend wizards to Reddit community ninjas, from whimsy injectors to reality checkers. Each agent is a specialized expert with personality, processes, and proven deliverables.\n\n[![GitHub stars](https://img.shields.io/github/stars/msitarzewski/agency-agents?style=social)](https://github.com/msitarzewski/agency-agents)\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[![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?logo=github)](https://github.com/sponsors/msitarzewski)\n[![Download the app](https://img.shields.io/github/v/release/msitarzewski/agency-agents-app?label=Download%20app&color=2563eb)](https://github.com/msitarzewski/agency-agents-app/releases/latest)\n\n> ### 🆕 There's an app now\n>\n> **[Agency Agents](https://agencyagents.app)** is a native app for **macOS, Linux & Windows** that browses the entire roster and installs it into Claude Code, Cursor, Codex, Gemini, Osaurus, and more — with a click. No clone, no scripts, and it auto-updates.\n>\n> **→ [Download the latest release](https://github.com/msitarzewski/agency-agents-app/releases/latest) · [agencyagents.app](https://agencyagents.app)**\n\n---\n\n## 🚀 What Is This?\n\nBorn from a Reddit thread and months of iteration, **The Agency** is a growing collection of meticulously crafted AI agent personalities. Each agent is:\n\n- **🎯 Specialized**: Deep expertise in their domain (not generic prompt templates)\n- **🧠 Personality-Driven**: Unique voice, communication style, and approach\n- **📋 Deliverable-Focused**: Real code, processes, and measurable outcomes\n- **✅ Production-Ready**: Battle-tested workflows and success metrics\n\n**Think of it as**: Assembling your dream team, except they're AI specialists who never sleep, never complain, and always deliver.\n\n---\n\n## ⚡ Quick Start\n\n### Option 1: Install the app (Recommended)\n\nThe fastest way in — no clone, no terminal. [**Agency Agents**](https://agencyagents.app) is a native desktop app (macOS · Linux · Windows) that browses the whole roster and installs agents into Claude Code, Cursor, Codex, Gemini CLI, OpenCode, Qwen, and Osaurus for you, then keeps them up to date.\n\n**[⬇ Download the latest release](https://github.com/msitarzewski/agency-agents-app/releases/latest)** — or on a Mac:\n\n```bash\nbrew install --cask msitarzewski/agency-agents/agency-agents\n```\n\nPrefer the command line? The script-based options below install the same agents.\n\n### Option 2: Use with Claude Code\n\n```bash\n# Install all agents to your Claude Code directory\n./scripts/install.sh --tool claude-code\n\n# Or manually copy a category if you only want one division\ncp engineering/*.md ~/.claude/agents/\n\n# Then activate any agent in your Claude Code sessions:\n# \"Hey Claude, activate Frontend Developer mode and help me build a React component\"\n```\n\n### Option 3: Use as Reference\n\nEach agent file contains:\n- Identity & personality traits\n- Core mission & workflows\n- Technical deliverables with code examples\n- Success metrics & communication style\n\nBrowse the agents below and copy/adapt the ones you need!\n\n### Option 4: Use with Other Tools (GitHub Copilot, Antigravity, Gemini CLI, OpenCode, OpenClaw, Cursor, Aider, Windsurf, Kimi Code, Codex, Osaurus, Hermes)\n\n```bash\n# Step 1 -- generate integration files for all supported tools\n./scripts/convert.sh\n\n# Step 2 -- install interactively (auto-detects what you have installed)\n./scripts/install.sh\n\n# Or target a specific tool directly\n./scripts/install.sh --tool antigravity\n./scripts/install.sh --tool gemini-cli\n./scripts/install.sh --tool opencode\n./scripts/install.sh --tool copilot\n./scripts/install.sh --tool openclaw\n./scripts/install.sh --tool cursor\n./scripts/install.sh --tool aider\n./scripts/install.sh --tool windsurf\n./scripts/install.sh --tool kimi\n./scripts/install.sh --tool codex\n./scripts/install.sh --tool osaurus\n./scripts/install.sh --tool hermes\n```\n\n**Install only the teams you need** (not everyone wants all 16 divisions):\n\n```bash\n./scripts/install.sh                                    # interactive wizard: pick tools + teams\n./scripts/install.sh --tool claude-code --division engineering,security\n./scripts/install.sh --tool cursor --agent frontend-developer,ui-designer\n./scripts/install.sh --list teams                       # see every team + agent count\n./scripts/install.sh --tool opencode --division engineering --dry-run\n```\n\n> **OpenCode note:** OpenCode's runtime currently registers only ~119 agents and silently drops the rest ([upstream bug](https://github.com/anomalyco/opencode/issues/27988)). Installing a subset with `--division` keeps you under that limit. The installer warns you when a selection would exceed it.\n\nSee the [Multi-Tool Integrations](#-multi-tool-integrations) section below for full details.\n\n---\n\n## 🎨 The Agency Roster\n\n### 💻 Engineering Division\n\nBuilding the future, one commit at a time.\n\n| Agent | Specialty | When to Use |\n|-------|-----------|-------------|\n| 🎨 [Frontend Developer](engineering/engineering-frontend-developer.md) | React/Vue/Angular, UI implementation, performance | Modern web apps, pixel-perfect UIs, Core Web Vitals optimization |\n| 🏗️ [Backend Architect](engineering/engineering-backend-architect.md) | API design, database architecture, scalability | Server-side systems, microservices, cloud infrastructure |\n| 📱 [Mobile App Builder](engineering/engineering-mobile-app-builder.md) | iOS/Android, React Native, Flutter | Native and cross-platform mobile applications |\n| 🤖 [AI Engineer](engineering/engineering-ai-engineer.md) | ML models, deployment, AI integration | Machine learning features, data pipelines, AI-powered apps |\n| 🚀 [DevOps Automator](engineering/engineering-devops-automator.md) | CI/CD, infrastructure automation, cloud ops | Pipeline development, deployment automation, monitoring |\n| ⚡ [Rapid Prototyper](engineering/engineering-rapid-prototyper.md) | Fast POC development, MVPs | Quick proof-of-concepts, hackathon projects, fast iteration |\n| 💎 [Senior Developer](engineering/engineering-senior-developer.md) | Laravel/Livewire, advanced patterns | Complex implementations, architecture decisions |\n| 🔧 [Filament Optimization Specialist](engineering/engineering-filament-optimization-specialist.md) | Filament PHP admin UX, structural form redesign, resource optimization | Restructuring Filament resources/forms/tables for faster, cleaner admin workflows |\n| ⚡ [Autonomous Optimization Architect](engineering/engineering-autonomous-optimization-architect.md) | LLM routing, cost optimization, shadow testing | Autonomous systems needing intelligent API selection and cost guardrails |\n| 🔩 [Embedded Firmware Engineer](engineering/engineering-embedded-firmware-engineer.md) | Bare-metal, RTOS, ESP32/STM32/Nordic firmware | Production-grade embedded systems and IoT devices |\n| 🚨 [Incident Response Commander](engineering/engineering-incident-response-commander.md) | Incident management, post-mortems, on-call | Managing production incidents and building incident readiness |\n| ⛓️ [Solidity Smart Contract Engineer](engineering/engineering-solidity-smart-contract-engineer.md) | EVM contracts, gas optimization, DeFi | Secure, gas-optimized smart contracts and DeFi protocols |\n| 🧭 [Codebase Onboarding Engineer](engineering/engineering-codebase-onboarding-engineer.md) | Fast developer onboarding, read-only codebase exploration, factual explanation | Helping new developers understand unfamiliar repos quickly by reading the code, tracing code paths, and stating facts about structure and behavior |\n| 📚 [Technical Writer](engineering/engineering-technical-writer.md) | Developer docs, API reference, tutorials | Clear, accurate technical documentation |\n| 💬 [WeChat Mini Program Developer](engineering/engineering-wechat-mini-program-developer.md) | WeChat ecosystem, Mini Programs, payment integration | Building performant apps for the WeChat ecosystem |\n| 👁️ [Code Reviewer](engineering/engineering-code-reviewer.md) | Constructive code review, security, maintainability | PR reviews, code quality gates, mentoring through review |\n| 🗄️ [Database Optimizer](engineering/engineering-database-optimizer.md) | Schema design, query optimization, indexing strategies | PostgreSQL/MySQL tuning, slow query debugging, migration planning |\n| 🌿 [Git Workflow Master](engineering/engineering-git-workflow-master.md) | Branching strategies, conventional commits, advanced Git | Git workflow design, history cleanup, CI-friendly branch management |\n| 🏛️ [Software Architect](engineering/engineering-software-architect.md) | System design, DDD, architectural patterns, trade-off analysis | Architecture decisions, domain modeling, system evolution strategy |\n| 🛡️ [SRE](engineering/engineering-sre.md) | SLOs, error budgets, observability, chaos engineering | Production reliability, toil reduction, capacity planning |\n| 🧬 [AI Data Remediation Engineer](engineering/engineering-ai-data-remediation-engineer.md) | Self-healing pipelines, air-gapped SLMs, semantic clustering | Fixing broken data at scale with zero data loss |\n| 🔧 [Data Engineer](engineering/engineering-data-engineer.md) | Data pipelines, lakehouse architecture, ETL/ELT | Building reliable data infrastructure and warehousing |\n| 🔗 [Feishu Integration Developer](engineering/engineering-feishu-integration-developer.md) | Feishu/Lark Open Platform, bots, workflows | Building integrations for the Feishu ecosystem |\n| 🧱 [CMS Developer](engineering/engineering-cms-developer.md) | WordPress & Drupal themes, plugins/modules, content architecture | Code-first CMS implementation and customization |\n| 📧 [Email Intelligence Engineer](engineering/engineering-email-intelligence-engineer.md) | Email parsing, MIME extraction, structured data for AI agents | Turning raw email threads into reasoning-ready context |\n| 🎙️ [Voice AI Integration Engineer](engineering/engineering-voice-ai-integration-engineer.md) | Speech-to-text pipelines, Whisper, ASR, speaker diarization | End-to-end transcription pipelines, audio preprocessing, structured transcript delivery |\n| 🖧 [IT Service Manager](engineering/engineering-it-service-manager.md) | ITIL 4 service management | Incident/problem/change management, SLAs, CMDB |\n| 🪡 [Minimal Change Engineer](engineering/engineering-minimal-change-engineer.md) | Minimum-viable diffs | Fixing only what's asked, no scope creep |\n| 📜 [OrgScript Engineer](engineering/engineering-orgscript-engineer.md) | OrgScript grammar & AST validation | Designing/parsing OrgScript business-logic definitions |\n| 🧬 [Prompt Engineer](engineering/engineering-prompt-engineer.md) | LLM prompt design & optimization | Turning vague instructions into reliable AI behaviors |\n| 🕸️ [Multi-Agent Systems Architect](engineering/engineering-multi-agent-systems-architect.md) | Multi-agent pipeline design & governance | Topology, context, trust, failure recovery for agent systems |\n| 🛒 [Drupal Shopping Cart Engineer](engineering/engineering-drupal-shopping-cart.md) | Drupal Commerce storefronts | Catalog, payments, checkout, orders on Drupal 10/11 |\n| 🛍️ [WordPress Shopping Cart Engineer](engineering/engineering-wordpress-shopping-cart.md) | WooCommerce storefronts | Catalog, payments, checkout, conversion on WordPress |\n\n### 🎨 Design Division\n\nMaking it beautiful, usable, and delightful.\n\n| Agent | Specialty | When to Use |\n|-------|-----------|-------------|\n| 🎯 [UI Designer](design/design-ui-designer.md) | Visual design, component libraries, design systems | Interface creation, brand consistency, component design |\n| 🔍 [UX Researcher](design/design-ux-researcher.md) | User testing, behavior analysis, research | Understanding users, usability testing, design insights |\n| 🏛️ [UX Architect](design/design-ux-architect.md) | Technical a",
    "strategic_keywords": [
      "agent",
      "agents",
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 4,
      "productize": 11,
      "adoption": 8,
      "relation": 9,
      "risk_signal": 8,
      "total": 80
    },
    "strategic_score": 80
  },
  {
    "owner": "browser-use",
    "name": "video-use",
    "full_name": "browser-use/video-use",
    "url": "https://github.com/browser-use/video-use",
    "description": "Edit videos with coding agents",
    "language": "Python",
    "total_stars": 11878,
    "forks": 1569,
    "stars_this_period": 976,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 47,
      "created_at": "2026-04-12T01:34:42Z",
      "pushed_at": "2026-05-15T06:39:02Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 1569,
      "watchers": 65,
      "archived": false,
      "size_kb": 559
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"static/video-use-banner.png\" alt=\"video-use\" width=\"100%\">\n</p>\n\n# video-use\n\nIntroducing **video-use** — edit videos with Claude Code. 100% open source.\n\nDrop raw footage in a folder, chat with Claude Code, get `final.mp4` back. Works for any content — talking heads, montages, tutorials, travel, interviews — without presets or menus.\n\n## What it does\n\n- **Cuts out filler words** (`umm`, `uh`, false starts) and dead space between takes\n- **Auto color grades** every segment (warm cinematic, neutral punch, or any custom ffmpeg chain)\n- **30ms audio fades** at every cut so you never hear a pop\n- **Burns subtitles** in your style — 2-word UPPERCASE chunks by default, fully customizable\n- **Generates animation overlays** via [HyperFrames](https://github.com/heygen-com/hyperframes), [Remotion](https://www.remotion.dev/), [Manim](https://www.manim.community/), or PIL — spawned in parallel sub-agents, one per animation\n- **Self-evaluates the rendered output** at every cut boundary before showing you anything\n- **Persists session memory** in `project.md` so next week's session picks up where you left off\n\n## Setup prompt\n\nPaste into Claude Code, Codex, Hermes, Openclaw, or any agent with shell access:\n\n```text\nSet up https://github.com/browser-use/video-use for me.\n\nRead install.md first to install this repo, wire up ffmpeg, register the skill with whichever agent you're running under, and set up the ElevenLabs API key — ask me to paste it when you need it. Then read SKILL.md for daily usage, and always read helpers/ because that's where the editing scripts live. After install, don't transcribe anything on your own — just tell me it's ready and wait for me to drop footage into a folder.\n```\n\nThe agent handles the clone, dependencies, skill registration, and prompts you once for your ElevenLabs API key (grab one at [elevenlabs.io/app/settings/api-keys](https://elevenlabs.io/app/settings/api-keys)).\n\nThen point your agent at a folder of raw takes:\n\n```bash\ncd /path/to/your/videos\nclaude    # or codex, hermes, etc.\n```\n\nFor always-on editing from your own VPS or Telegram, run the agent through [Browser Use Box](https://browser-use.com/bux). [Watch the 15-second demo](https://www.tiktok.com/@browser_use/video/7639824093721758989).\n\nAnd in the session:\n\n> edit these into a launch video\n\nIt inventories the sources, proposes a strategy, waits for your OK, then produces `edit/final.mp4` next to your sources. All outputs live in `<videos_dir>/edit/` — the skill directory stays clean.\n\n## Manual install\n\nIf you'd rather do it by hand:\n\n```bash\n# 1. Clone and symlink into your agent's skills directory\ngit clone https://github.com/browser-use/video-use ~/Developer/video-use\nln -sfn ~/Developer/video-use ~/.claude/skills/video-use        # Claude Code\n# ln -sfn ~/Developer/video-use ~/.codex/skills/video-use       # Codex\n\n# 2. Install deps\ncd ~/Developer/video-use\nuv sync                         # or: pip install -e .\nbrew install ffmpeg             # required\nbrew install yt-dlp             # optional, for downloading online sources\n\n# 3. Add your ElevenLabs API key\ncp .env.example .env\n$EDITOR .env                    # ELEVENLABS_API_KEY=...\n```\n\n## How it works\n\nThe LLM never watches the video. It **reads** it — through two layers that together give it everything it needs to cut with word-boundary precision.\n\n<p align=\"center\">\n  <img src=\"static/timeline-view.svg\" alt=\"timeline_view composite — filmstrip + speaker track + waveform + word labels + silence-gap cut candidates\" width=\"100%\">\n</p>\n\n**Layer 1 — Audio transcript (always loaded).** One ElevenLabs Scribe call per source gives word-level timestamps, speaker diarization, and audio events (`(laughter)`, `(applause)`, `(sigh)`). All takes pack into a single ~12KB `takes_packed.md` — the LLM's primary reading view.\n\n```\n## C0103  (duration: 43.0s, 8 phrases)\n  [002.52-005.36] S0 Ninety percent of what a web agent does is completely wasted.\n  [006.08-006.74] S0 We fixed this.\n```\n\n**Layer 2 — Visual composite (on demand).** `timeline_view` produces a filmstrip + waveform + word labels PNG for any time range. Called only at decision points — ambiguous pauses, retake comparisons, cut-point sanity checks.\n\n> Naive approach: 30,000 frames × 1,500 tokens = **45M tokens of noise**.\n> Video Use: **12KB text + a handful of PNGs**.\n\nSame idea as browser-use giving an LLM a structured DOM instead of a screenshot — but for video.\n\n## Pipeline\n\n```\nTranscribe ──> Pack ──> LLM Reasons ──> EDL ──> Render ──> Self-Eval\n                                                              │\n                                                              └─ issue? fix + re-render (max 3)\n```\n\nThe self-eval loop runs `timeline_view` on the _rendered output_ at every cut boundary — catches visual jumps, audio pops, hidden subtitles. You see the preview only after it passes.\n\n## Design principles\n\n1. **Text + on-demand visuals.** No frame-dumping. The transcript is the surface.\n2. **Audio is primary, visuals follow.** Cuts come from speech boundaries and silence gaps.\n3. **Ask → confirm → execute → self-eval → persist.** Never touch the cut without strategy approval.\n4. **Zero assumptions about content type.** Look, ask, then edit.\n5. **12 hard rules, artistic freedom elsewhere.** Production-correctness is non-negotiable. Taste isn't.\n\nSee [`SKILL.md`](./SKILL.md) for the full production rules and editing craft.\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"video-use\"\nversion = \"0.1.0\"\ndescription = \"Conversation-driven video editor skill for Claude Code\"\nlicense = { file = \"LICENSE\" }\nrequires-python = \">=3.10\"\ndependencies = [\n    \"requests\",\n    \"librosa\",\n    \"matplotlib\",\n    \"pillow\",\n    \"numpy\",\n]\n\n[project.optional-dependencies]\nanimations = [\"manim\"]\n\n[build-system]\nrequires = [\"setuptools>=61.0\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[tool.setuptools]\npy-modules = []\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "skill",
      "llm",
      "eval"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 92
    },
    "strategic_score": 92
  },
  {
    "owner": "topoteretes",
    "name": "cognee",
    "full_name": "topoteretes/cognee",
    "url": "https://github.com/topoteretes/cognee",
    "description": "Cognee is the open-source AI memory platform for agents. Give your AI agents persistent long-term memory across sessions with a self-hosted knowledge graph engine.",
    "language": "Python",
    "total_stars": 25635,
    "forks": 2361,
    "stars_this_period": 924,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "agent-memory",
        "agent-skills",
        "ai",
        "ai-agents",
        "ai-memory",
        "cognitive-architecture",
        "cognitive-memory",
        "context-engineering",
        "contributions-welcome",
        "good-first-issue",
        "good-first-pr",
        "graph-database",
        "graph-rag",
        "help-wanted",
        "knowledge",
        "knowledge-graph",
        "memory-management",
        "open-source",
        "vector-database"
      ],
      "license": "Apache-2.0",
      "open_issues": 429,
      "created_at": "2023-08-16T16:16:33Z",
      "pushed_at": "2026-06-29T20:25:40Z",
      "homepage": "https://www.cognee.ai",
      "default_branch": "main",
      "forks": 2361,
      "watchers": 73,
      "archived": false,
      "size_kb": 200726
    },
    "readme_content": "<div align=\"center\">\n  <a href=\"https://github.com/topoteretes/cognee\">\n    <img src=\"https://raw.githubusercontent.com/topoteretes/cognee/refs/heads/dev/assets/cognee-logo-transparent.png\" alt=\"Cognee Logo\" height=\"60\">\n  </a>\n\n  <br />\n\n  Cognee - The Open-Source AI Memory Platform for Agents\n\n  <p align=\"center\">\n  <a href=\"https://www.youtube.com/watch?v=8hmqS2Y5RVQ&t=13s\">Demo</a>\n  .\n  <a href=\"https://docs.cognee.ai/\">Docs</a>\n  .\n  <a href=\"https://cognee.ai\">Learn More</a>\n  ·\n  <a href=\"https://discord.gg/NQPKmU5CCg\">Join Discord</a>\n  ·\n  <a href=\"https://www.reddit.com/r/AIMemory/\">Join r/AIMemory</a>\n  .\n  <a href=\"https://github.com/topoteretes/cognee-community\">Community Plugins & Add-ons</a>\n  </p>\n\n\n  [![GitHub forks](https://img.shields.io/github/forks/topoteretes/cognee.svg?style=social&label=Fork&maxAge=2592000)](https://GitHub.com/topoteretes/cognee/network/)\n  [![GitHub stars](https://img.shields.io/github/stars/topoteretes/cognee.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/topoteretes/cognee/stargazers/)\n  [![GitHub commits](https://badgen.net/github/commits/topoteretes/cognee)](https://GitHub.com/topoteretes/cognee/commit/)\n  [![GitHub tag](https://badgen.net/github/tag/topoteretes/cognee)](https://github.com/topoteretes/cognee/tags/)\n  [![Downloads](https://static.pepy.tech/badge/cognee)](https://pepy.tech/project/cognee)\n  [![License](https://img.shields.io/github/license/topoteretes/cognee?colorA=00C586&colorB=000000)](https://github.com/topoteretes/cognee/blob/main/LICENSE)\n  [![Contributors](https://img.shields.io/github/contributors/topoteretes/cognee?colorA=00C586&colorB=000000)](https://github.com/topoteretes/cognee/graphs/contributors)\n  <a href=\"https://github.com/sponsors/topoteretes\"><img src=\"https://img.shields.io/badge/Sponsor-❤️-ff69b4.svg\" alt=\"Sponsor\"></a>\n\n<p>\n  <a href=\"https://trendshift.io/repositories/13955\" target=\"_blank\" style=\"display:inline-block;\">\n    <img src=\"https://trendshift.io/api/badge/repositories/13955\" alt=\"topoteretes%2Fcognee | Trendshift\" width=\"250\" height=\"55\" />\n  </a>\n</p>\n\nCognee is the open-source AI memory platform that gives AI agents persistent long-term memory across sessions. Ingest data in any format, build a self-hosted knowledge graph, and let every agent recall, connect, and act with full context\n\n  <p align=\"center\">\n  🌐 This README is also available in:\n  :\n  <!-- Keep these links. Translations will automatically update with the README. -->\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=de\">Deutsch</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=es\">Español</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=fr\">Français</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=ja\">日本語</a> |\n  <a href=\"README_ko.md\">한국어</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=pt\">Português</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=ru\">Русский</a> |\n  <a href=\"https://www.readme-i18n.com/topoteretes/cognee?lang=zh\">中文</a>\n  </p>\n\n<p align=\"center\">\n  <img src=\"assets/cognee-demo.gif\" alt=\"Cognee Demo\" width=\"80%\" />\n</p>\n</div>\n\n📄 Read the research paper: [Optimizing the Interface Between Knowledge Graphs and LLMs for Complex Reasoning](https://arxiv.org/abs/2505.24478) — Markovic et al., 2025\n\n\n## About Cognee\n\nCognee is an open-source AI memory platform for AI Agents. Ingest data in any format, and Cognee continuously builds a self-hosted knowledge graph that gives your agents persistent long-term memory across sessions. Cognee combines vector embeddings, graph reasoning, and cognitive-science-grounded ontology generation to make documents both searchable by meaning and connected by relationships that evolve as your knowledge does.\n\n:star: _Help us reach more developers and grow the cognee community. Star this repo!_\n\n:books: _Check our detailed [documentation](https://docs.cognee.ai/getting-started/installation#environment-configuration) for setup and configuration._\n\n:crab: _Available as a plugin for your OpenClaw — [cognee-openclaw](https://www.npmjs.com/package/@cognee/cognee-openclaw)_\n\n✴️ _Available as a plugin for your Claude Code — [claude-code-plugin](https://github.com/topoteretes/cognee-integrations/tree/main/integrations/claude-code)_\n\n🦀 _Available as a Rust client — [cognee-rs](https://github.com/topoteretes/cognee-rs)_\n\n🟦 _Available as a TypeScript client — [@cognee/cognee-ts](https://www.npmjs.com/package/@cognee/cognee-ts)_\n\n\n\n### Why use Cognee:\n\n- Easily Build Company Brain - unify data from various sources in one place and enable Agents with your domain knowledge\n- Knowledge infrastructure — unified ingestion, graph/vector search, runs locally, ontology grounding, multimodal\n- Persistent and Learning Agents - learn from feedback, context management, cross-agent knowledge sharing\n- Reliable and Trustworthy Agents - agentic user/tenant isolation, traceability, OTEL collector, audit traits\n\n### How it Works\n\n<p align=\"center\">\n  <img src=\"assets/remember.svg\" alt=\"Cognee Products\" width=\"80%\" />\n</p>\n\n<p align=\"center\">\n  <img src=\"assets/recall.svg\" alt=\"Cognee Recall\" width=\"80%\" />\n</p>\n\n## Basic Usage & Feature Guide\n\nTo learn more, [check out this short, end-to-end Colab walkthrough](https://colab.research.google.com/drive/12Vi9zID-M3fpKpKiaqDBvkk98ElkRPWy?usp=sharing) of Cognee's core features.\n\n[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/12Vi9zID-M3fpKpKiaqDBvkk98ElkRPWy?usp=sharing)\n\n## Quickstart\n\nLet’s try Cognee in just a few lines of code.\n\n### Prerequisites\n\n- Python 3.10 to 3.14\n\n### Step 1: Install Cognee\n\nYou can install Cognee with **pip**, **poetry**, **uv**, or your preferred Python package manager.\n\n```bash\nuv pip install cognee\n```\n\n### Step 2: Configure the LLM\n```python\nimport os\nos.environ[\"LLM_API_KEY\"] = \"YOUR OPENAI_API_KEY\"\n```\nAlternatively, create a `.env` file using our [template](https://github.com/topoteretes/cognee/blob/main/.env.template).\n\nTo integrate other LLM providers, see our [LLM Provider Documentation](https://docs.cognee.ai/setup-configuration/llm-providers).\n\n### Step 3: Run the Pipeline\n\nCognee's API gives you four operations — `remember`, `recall`, `forget`, and `improve`:\n\n```python\nimport cognee\nimport asyncio\n\n\nasync def main():\n    # Store permanently in the knowledge graph (runs add + cognify + improve)\n    await cognee.remember(\"Cognee turns documents into AI memory.\")\n\n    # Store in session memory (fast cache, syncs to graph in background)\n    await cognee.remember(\"User prefers detailed explanations.\", session_id=\"chat_1\")\n\n    # Query with auto-routing (picks best search strategy automatically)\n    results = await cognee.recall(\"What does Cognee do?\")\n    for result in results:\n        print(result)\n\n    # Query session memory first, fall through to graph if needed\n    results = await cognee.recall(\"What does the user prefer?\", session_id=\"chat_1\")\n    for result in results:\n        print(result)\n\n    # Delete when done\n    await cognee.forget(dataset=\"main_dataset\")\n\n\nif __name__ == '__main__':\n    asyncio.run(main())\n\n```\n\n### Use the Cognee CLI\n\n```bash\ncognee-cli remember \"Cognee turns documents into AI memory.\"\n\ncognee-cli recall \"What does Cognee do?\"\n\ncognee-cli forget --all\n```\n\nTo open the local UI, run:\n```bash\ncognee-cli -ui\n```\n\n> **Note:** The MCP server launched by `cognee-cli -ui` runs inside a Docker container.\n> Docker Desktop, Colima, or any OCI-compatible runtime with a working `docker` CLI is\n> required. See [Docker & Colima Setup](docs/docker-colima-setup.md) for details.\n\n## Run with Docker\n\nPrefer containers? Cognee publishes prebuilt images to Docker Hub on every push to `main`:\n[`cognee/cognee`](https://hub.docker.com/r/cognee/cognee) (the API server) and\n[`cognee/cognee-mcp`](https://hub.docker.com/r/cognee/cognee-mcp) (the MCP server).\n\n### Option A — Docker Compose (build from source)\n\nClone the repo, create a `.env` with at least `LLM_API_KEY`, then:\n\n```bash\ncp .env.template .env   # then edit .env and set LLM_API_KEY\n\n# Start the API server (http://localhost:8000)\ndocker compose up\n\n# Optional profiles (combine as needed):\ndocker compose --profile ui up        # + frontend on http://localhost:3000\ndocker compose --profile mcp up       # + MCP server on http://localhost:8001\ndocker compose --profile postgres up  # + Postgres/PGVector\ndocker compose --profile neo4j up     # + Neo4j\n```\n\n> The `cognee` and `cognee-mcp` services publish different host ports (`8000` vs `8001`),\n> so you can run both at once.\n\n### Option B — Pull the prebuilt image (no clone required)\n\n```bash\n# Create a minimal .env in the current directory\necho 'LLM_API_KEY=\"YOUR_OPENAI_API_KEY\"' > .env\n\n# API server\ndocker run --env-file ./.env -p 8000:8000 --rm -it cognee/cognee:main\n\n# MCP server (HTTP transport)\ndocker pull cognee/cognee-mcp:main\ndocker run -e TRANSPORT_MODE=http --env-file ./.env -p 8000:8000 --rm -it cognee/cognee-mcp:main\n```\n\nSee the [MCP server README](cognee-mcp/README.md) for SSE/stdio transports, optional\nextras, and MCP client configuration.\n\n## Use with AI Agents\n\n### Claude Code\n\nInstall the [Cognee memory plugin](https://github.com/topoteretes/cognee-integrations/tree/main/integrations/claude-code) to give Claude Code persistent memory across sessions. The plugin captures prompts, tool traces, and assistant responses into session memory, injects relevant context on every prompt, and syncs session memory into the permanent knowledge graph at session end.\n\n**Install** from the Claude Code marketplace. The recommended way is from your shell, *before* launching Claude Code, so the first `claude` launch is a clean session that bootstraps memory automatically:\n\n```bash\n# Add the marketplace and install the plugin (one-time, user-scoped)\nclaude plugin marketplace add topoteretes/cognee-integrations\nclaude plugin install cognee-memory@cognee\n\n# Set env vars for your mode (see below), then launch\nexport LLM_API_KEY=\"sk-...\"   # local mode; or COGNEE_BASE_URL + COGNEE_API_KEY for cloud\nclaude\n```\n\n**Local mode** (default) — the plugin bootstraps a local Cognee API at `http://localhost:8011`. Only `LLM_API_KEY` is required; the Cognee API key is auto-minted if absent:\n\n```bash\nexport LLM_API_KEY=\"sk-...\"\n```\n\n**Cognee Cloud or a remote server** — set both:\n\n```bash\nexport COGNEE_BASE_URL=\"https://your-instance.cognee.ai\"\nexport COGNEE_API_KEY=\"ck_...\"\n```\n\nOn startup you should see a \"Cognee Memory Connected\" system message.\n\nThe plugin hooks into Claude Code's lifecycle — `SessionStart` selects mode and sets up identity, `UserPromptSubmit` injects dataset-scoped context, `PostToolUse` captures tool traces, `Stop` writes the assistant's answer, `PreCompact` preserves memory across context resets, and `SessionEnd` triggers the final sync into the permanent graph.\n\nSee the [plugin README](https://github.com/topoteretes/cognee-integrations/tree/main/integrations/claude-code) for sessions, datasets, and full configuration.\n\n### Connect to Cognee Cloud\n\nPoint any Python agent at a managed Cognee instance — all SDK calls route to the cloud:\n\n```python\nimport cognee\n\nawait cognee.serve(url=\"https://your-instance.cognee.ai\", api_key=\"ck_...\")\n\nawait cognee.remember(\"important context\")\nresults = await cognee.recall(\"what happened?\")\n\nawait cognee.disconnect()\n```\n\n## Examples\n\nBrowse more examples in the [`examples/`](examples/) folder — demos, guides, custom pipelines, and database configurations.\n\n**Use Case 1 — Customer Support Agent**\n\n```python\nGoal: Resolve customer issues using their personal data across finance, support, and product history.\n\nUser: \"My invoice looks wrong and the issue is still not resolved.\"\n\nCognee tracks: past interactions, failed actions, resolved cases, product history\n\n# Agent response:\nAgent: \"I found 2 similar billing cases resolved last month.\n        The issue was caused by a syn",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"cognee\"\n\nversion = \"1.2.2\"\ndescription = \"Cognee - is a library for enriching LLM context with a semantic layer for better understanding and reasoning.\"\nauthors = [\n    { name = \"Vasilije Markovic\" },\n    { name = \"Boris Arzentar\" },\n]\nrequires-python = \">=3.10,<3.15\"\nreadme = \"README.md\"\nlicense = \"Apache-2.0\"\nclassifiers = [\n    \"Development Status :: 4 - Beta\",\n    \"Intended Audience :: Developers\",\n    \"License :: OSI Approved :: Apache Software License\",\n    \"Topic :: Software Development :: Libraries\",\n    \"Operating System :: MacOS :: MacOS X\",\n    \"Operating System :: POSIX :: Linux\",\n    \"Operating System :: Microsoft :: Windows\",\n]\ndependencies = [\n    \"openai>=1.80.1\",\n    \"python-dotenv>=1.0.1,<2.0.0\",\n    \"pydantic>=2.10.5\",\n    # GHSA-4xgf-cpjx-pc3j: 2.12.0–2.14.1 vulnerable, fixed in 2.14.2. Exclude the\n    # vulnerable range rather than capping, so the patched 2.14.2+ is adopted once\n    # it clears the `exclude-newer` window (it was <2 days old at time of writing).\n    \"pydantic-settings>=2.2.1,!=2.12.*,!=2.13.*,!=2.14.0,!=2.14.1,<3\",\n    \"typing_extensions>=4.12.2,<5.0.0\",\n    \"numpy>=1.26.4, <=4.0.0\",\n    \"sqlalchemy>=2.0.39,<3.0.0\",\n    \"aiosqlite>=0.20.0,<1.0.0\",\n    \"filelock>=3.12.0,<4.0.0\",  # cross-process migration lock for SQLite (Linux/macOS/Windows)\n    \"tiktoken>=0.8.0,<1.0.0\",\n    \"litellm>=1.83.7\",\n    \"instructor>=1.9.1,<1.15.3\",\n    \"filetype>=1.2.0,<2.0.0\",\n    \"aiohttp>=3.13.5,<4.0.0\",\n    \"aiofiles>=23.2.1\",\n    \"rdflib>=7.1.4,<7.2.0\",\n    \"pypdf>=6.6.2,<7.0.0\",\n    \"jinja2>=3.1.3,<4\",\n    \"lancedb>=0.24.3,<1.0.0\",  # 0.24.2 bundles lance 0.32.0 whose list-column decoder panics on tables with deletion vectors\n    \"nbformat>=5.7.0,<6.0.0\",\n    \"alembic>=1.13.3,<2\",\n    \"limits>=4.4.1,<5\",\n    \"fastapi>=0.116.2,<1.0.0\",\n    \"starlette>=0.48\",\n    \"python-multipart>=0.0.22,<1.0.0\",\n    \"fastapi-users[sqlalchemy]>=15.0.2\",\n    \"structlog>=25.2.0,<26\",\n    \"pympler>=1.1,<2.0.0\",\n    \"pylance>=0.22.0,<=0.36.0\",\n    \"ladybug>=0.16.0,<0.18\",\n    \"python-magic-bin<0.5 ; platform_system == 'Windows'\", # Only needed for Windows\n    \"networkx>=3.4.2,<4\",\n    \"uvicorn>=0.34.0,<1.0.0\",\n    \"gunicorn>=20.1.0,<24\",\n    \"websockets>=15.0.1,<16.0.0\",\n    \"tenacity>=9.0.0\",\n    \"fakeredis[lua]>=2.32.0\",\n    \"diskcache>=5.6.3\",\n    \"aiolimiter>=1.2.1\",\n    \"urllib3>=2.6.0\",\n    \"cbor2>=5.8.0\",\n    \"langdetect>=1.0.9\",\n    \"datamodel-code-generator>=0.54.0\",\n]\n\n[project.optional-dependencies]\napi=[]\n\ndistributed = [\n    \"modal>=1.0.5,<2.0.0\",\n]\n\nscraping = [\n    \"tavily-python>=0.7.12\",\n    \"beautifulsoup4>=4.13.1\",\n    \"playwright>=1.9.0\",\n    \"lxml>=4.9.3,<5 ; python_version < '3.13'\",\n    \"lxml>=5,<6 ; python_version >= '3.13' and python_version < '3.14'\",\n    # cp314 wheels start at lxml 6.0.1; without this 3.14 falls back to a\n    # source build that requires libxml2/libxslt headers (CI doesn't have them).\n    \"lxml>=6.0.1,<7 ; python_version >= '3.14'\",\n    \"protego>=0.1\",\n    \"APScheduler>=3.10.0,<=3.11.0\"\n]\n\nfastembed = [\n    \"fastembed<=0.8.0\",\n    # onnxruntime 1.23.2 only ships wheels through cp313; cp314 wheels start\n    # at onnxruntime 1.24.1. Split by python_version so existing 3.10–3.13\n    # users keep the pinned version and 3.14 picks up the first cp314-capable\n    # release.\n    \"onnxruntime<=1.23.2 ; python_version < '3.14'\",\n    \"onnxruntime>=1.24.1 ; python_version >= '3.14'\",\n]\n\nneo4j = [\"neo4j>=5.28.0,<6\"]\nneptune = [\"langchain_aws>=0.2.22\"]\npostgres = [\n    \"psycopg2>=2.9.10,<3\",\n    \"pgvector>=0.3.5,<0.4\",\n    \"asyncpg>=0.30.0,<1.0.0\",\n]\npostgres-binary = [\n    \"psycopg2-binary>=2.9.10,<3.0.0\",\n    \"pgvector>=0.3.5,<0.4\",\n    \"asyncpg>=0.30.0,<1.0.0\",\n]\nnotebook = [\"notebook>=7.1.0,<8\"]\nlangchain = [\n    \"langsmith>=0.2.3,<1.0.0\",\n    \"langchain_text_splitters>=0.3.2,<1.0.0\",\n    \"langchain-core>=1.2.5\"\n]\nllama-index = [\"llama-index-core>=0.14.20,<0.15\"]\nhuggingface = [\"transformers>=4.46.3,<5\"]\nollama = [\"transformers>=4.46.3,<5\"]\nmistral = [\"mistral-common>=1.5.2,<2\", \"mistralai>=1.9.10,<2\"]\nanthropic = [\"anthropic>=0.27\"]\nazure = [\"azure-identity>=1.15.0,<2\"]\ndeepeval = [\"deepeval>=3.0.1,<4\"]\nposthog = [\"posthog>=3.5.0,<4\"]\ngroq = [\"groq>=0.8.0,<1.0.0\"]\nllama-cpp = [\"llama-cpp-python[server]>=0.3.0,<1.0.0\"]\ndocs = [\n    \"lxml>=4.9.3,<5 ; python_version < '3.13'\",\n    \"lxml>=5,<6 ; python_version >= '3.13' and python_version < '3.14'\",\n    # cp314 wheels start at lxml 6.0.1.\n    \"lxml>=6.0.1,<7 ; python_version >= '3.14'\",\n    \"unstructured[csv, doc, docx, epub, md, odt, org, ppt, pptx, rst, rtf, tsv, xlsx, pdf]>=0.18.1,<19\",\n    \"nltk>=3.9.3,<4\", # TODO: Remove when unstructured is above v0.21.0 as it won't use nltk anymore\n]\ncodegraph = [\n    \"fastembed<=0.8.0 ; python_version < '3.14'\",\n    \"transformers>=4.46.3,<5\",\n    \"tree-sitter>=0.24.0,<0.25\",\n    \"tree-sitter-python>=0.23.6,<0.24\",\n]\nevals = [\n    \"plotly>=6.0.0,<7\",\n    \"gdown>=5.2.0,<6\",\n    \"pandas>=2.2.2,<3.0.0\",\n    \"matplotlib>=3.8.3,<4\",\n    \"scikit-learn>=1.6.1,<2\",\n    \"locust>",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "rag",
      "skill",
      "llm",
      "vector",
      "embedding"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 97
    },
    "strategic_score": 97
  },
  {
    "owner": "HKUDS",
    "name": "Vibe-Trading",
    "full_name": "HKUDS/Vibe-Trading",
    "url": "https://github.com/HKUDS/Vibe-Trading",
    "description": "\"Vibe-Trading: Your Personal Trading Agent\"",
    "language": "Python",
    "total_stars": 15044,
    "forks": 2685,
    "stars_this_period": 840,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "ai-agent",
        "algorithmic-trading",
        "backtesting",
        "fintech",
        "llm",
        "mcp",
        "multi-agent",
        "python",
        "quantitative-finance",
        "trading"
      ],
      "license": "MIT",
      "open_issues": 11,
      "created_at": "2026-04-01T09:52:20Z",
      "pushed_at": "2026-06-29T09:15:54Z",
      "homepage": "https://vibetrading.wiki/",
      "default_branch": "main",
      "forks": 2685,
      "watchers": 89,
      "archived": false,
      "size_kb": 53069
    },
    "readme_content": "<p align=\"center\">\n  <b>English</b> | <a href=\"README_zh.md\">中文</a> | <a href=\"README_ja.md\">日本語</a> | <a href=\"README_ko.md\">한국어</a> | <a href=\"README_ar.md\">العربية</a>\n</p>\n\n<p align=\"center\">\n  <img src=\"assets/icon.png\" width=\"120\" alt=\"Vibe-Trading Logo\"/>\n</p>\n\n<h1 align=\"center\">Vibe-Trading: Your Personal Trading Agent</h1>\n\n<p align=\"center\">\n  <b>One Command to Empower Your Agent with Comprehensive Trading Capabilities</b>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://trendshift.io/repositories/25527\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/25527\" alt=\"HKUDS%2FVibe-Trading | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/Python-3.11%2B-3776AB?style=flat&logo=python&logoColor=white\" alt=\"Python\">\n  <img src=\"https://img.shields.io/badge/Backend-FastAPI-009688?style=flat\" alt=\"FastAPI\">\n  <img src=\"https://img.shields.io/badge/Frontend-React%2019-61DAFB?style=flat&logo=react&logoColor=white\" alt=\"React\">\n  <a href=\"https://pypi.org/project/vibe-trading-ai/\"><img src=\"https://img.shields.io/pypi/v/vibe-trading-ai?style=flat&logo=pypi&logoColor=white\" alt=\"PyPI\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-yellow?style=flat\" alt=\"License\"></a>\n  <br>\n  <a href=\"https://github.com/HKUDS/.github/blob/main/profile/README.md\"><img src=\"https://img.shields.io/badge/Feishu-Group-E9DBFC?style=flat-square&logo=feishu&logoColor=white\" alt=\"Feishu\"></a>\n  <a href=\"https://github.com/HKUDS/.github/blob/main/profile/README.md\"><img src=\"https://img.shields.io/badge/WeChat-Group-C5EAB4?style=flat-square&logo=wechat&logoColor=white\" alt=\"WeChat\"></a>\n  <a href=\"https://discord.gg/6TdQnT5xcF\"><img src=\"https://img.shields.io/badge/Discord-Join-7289DA?style=flat-square&logo=discord&logoColor=white\" alt=\"Discord\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://vibetrading.wiki/\">Website</a> &nbsp;&middot;&nbsp;\n  <a href=\"https://vibetrading.wiki/docs/\">Docs</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-news\">News</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-key-features\">Features</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-shadow-account\">Shadow Account</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-demo\">Demo</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-quick-start\">Quick Start</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-examples\">Examples</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-api-server\">API / MCP</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-roadmap\">Roadmap</a> &nbsp;&middot;&nbsp;\n  <a href=\"#-contributing\">Contributing</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#-quick-start\"><img src=\"assets/pip-install.svg\" height=\"45\" alt=\"pip install vibe-trading-ai\"></a>\n</p>\n\n---\n\n## 📰 News\n\n- **2026-06-29** 🛡️ **Live advisory safety + Trading 212 read-only connector + Windows/Gemini fixes**: live order guards now have an opt-in, broker-agnostic `PreTradeAdvisoryInterface` that records advisory reviews without bypassing the mandate gate, kill switch, or audit trail ([#328](https://github.com/HKUDS/Vibe-Trading/pull/328), closes [#317](https://github.com/HKUDS/Vibe-Trading/issues/317), thanks @shadowinlife). Trading 212 joins the connector layer with read-only account, positions, orders, history, and instrument-metadata support; `place_order` / `cancel_order` still hard-refuse until a structural paper/live boundary exists ([#321](https://github.com/HKUDS/Vibe-Trading/pull/321), closes [#309](https://github.com/HKUDS/Vibe-Trading/issues/309), thanks @mvanhorn). Windows startup avoids the pandas 3.0 `Timestamp` crash via the `<3.0.0` constraint ([#329](https://github.com/HKUDS/Vibe-Trading/pull/329), closes [#324](https://github.com/HKUDS/Vibe-Trading/issues/324), thanks @hannibal-lee); Gemini `thought_signature` dict-history replay was verified/fixed on `main` ([#318](https://github.com/HKUDS/Vibe-Trading/issues/318)); `.US` financial statements now route to SEC EDGAR instead of Eastmoney ([#325](https://github.com/HKUDS/Vibe-Trading/issues/325)); and the Alpha Library landing page got cache/date/selector/noscript/DNS-prefetch hardening while heavier CSP and social-card follow-ups stay tracked ([#323](https://github.com/HKUDS/Vibe-Trading/issues/323)).\n\n- **2026-06-28** 🧰 **Cross-platform setup/dev + runtime and file-tool hardening**: `vibe-trading setup` and `vibe-trading dev` now handle Windows TypeScript builds, launch the backend from the right cwd, use the Vite 5899 port, and shut child processes down cleanly ([#292](https://github.com/HKUDS/Vibe-Trading/pull/292), thanks @digger-yu). Runtime status polling now degrades instead of crashing ([#322](https://github.com/HKUDS/Vibe-Trading/issues/322)); MCP OAuth cache keys are sanitized ([#313](https://github.com/HKUDS/Vibe-Trading/issues/313)); OpenAI defaults and Robinhood `agent.json` validation were tightened ([#319](https://github.com/HKUDS/Vibe-Trading/pull/319), [#320](https://github.com/HKUDS/Vibe-Trading/pull/320), thanks @mvanhorn); and file tools got isolated read/write roots plus broader sandbox tests ([#299](https://github.com/HKUDS/Vibe-Trading/pull/299), thanks @skloxo).\n- **2026-06-27** 🧯 **Content-filter resilience + Shadow Account feature contract cleanup**: event-driven and swarm runs now skip individual LLM content-moderation hits, warn in run cards when filter rates are high, and recognize Gemini safety finish reasons instead of aborting an entire analysis ([#308](https://github.com/HKUDS/Vibe-Trading/pull/308), closes [#307](https://github.com/HKUDS/Vibe-Trading/issues/307), thanks @shadowinlife). Shadow Account extraction/codegen now share one `PRICE_FEATURES` contract and keep four-decimal return bounds, preventing rule/codegen drift and precision loss on `prior_5d_return` ([#316](https://github.com/HKUDS/Vibe-Trading/pull/316), thanks @Robin1987China).\n<details>\n<summary>Earlier news</summary>\n\n- **2026-06-26** 🎯 **Shadow Account conditional entry + tushare ETF/index/HK routing**: extracted Shadow Account rules now carry RSI / prior-return bounds, so the generated SignalEngine enters on real conditions (RSI in range, prior-return in range) instead of blindly replaying the holding cadence ([#314](https://github.com/HKUDS/Vibe-Trading/pull/314), follows [#302](https://github.com/HKUDS/Vibe-Trading/pull/302), thanks @Robin1987China). The tushare loader also routes ETF/LOF → `fund_daily()`, indices → `index_daily()`, and HK equities → `hk_daily()` instead of always calling `daily()` (which silently returns empty for non-stocks), with per-symbol empty-result + partial-fetch warnings ([#315](https://github.com/HKUDS/Vibe-Trading/pull/315), closes [#310](https://github.com/HKUDS/Vibe-Trading/issues/310), thanks @shadowinlife).\n- **2026-06-25** 🧪 **Strict validation JSON + calmer agent context**: standalone backtest validation now normalizes nested `NaN` / `Infinity` values before writing `artifacts/validation.json` or CLI stdout, so strict JSON parsers no longer choke on validation payloads ([#306](https://github.com/HKUDS/Vibe-Trading/pull/306), thanks @gyx09212214-prog). The agent prompt also derives the current data-source count from the loader registry, and `_microcompact()` now waits for real token pressure instead of clearing older tool results during short runs ([#296](https://github.com/HKUDS/Vibe-Trading/pull/296), closes [#282](https://github.com/HKUDS/Vibe-Trading/issues/282), thanks @MarkfuGod).\n- **2026-06-24** 🎯 **Shadow Account price context + reactive Chinese UI + LAN auth fix**: Shadow Account rule extraction now sees PIT-safe entry context — `entry_rsi14` and `prior_5d_return` fetched through the loader registry as of `buy_dt`, with graceful offline/no-data degradation ([#302](https://github.com/HKUDS/Vibe-Trading/pull/302), follows [#295](https://github.com/HKUDS/Vibe-Trading/issues/295), thanks @Robin1987China). The main Web UI panels now use reactive English / zh-CN translations across charts, chat, Alpha Library, Correlation, and Run Detail ([#301](https://github.com/HKUDS/Vibe-Trading/pull/301), thanks @skloxo). Remote same-origin Web UI deployments with `API_AUTH_KEY` can post and upload again after the CSRF hardening, while mismatched cross-site origins remain blocked ([#304](https://github.com/HKUDS/Vibe-Trading/pull/304), thanks @Hinotoi-agent).\n- **2026-06-23** 🛡️ **Local API CSRF hardening**: a malicious web page can no longer drive unsafe cross-site requests (POST/PUT/DELETE) against the loopback API — CORS blocks reading the response but not the side effect, so loopback dev-mode trust now applies the existing cross-site guard to unsafe methods *before* honoring it. Safe methods and local CLI / non-browser uploads are unaffected ([#293](https://github.com/HKUDS/Vibe-Trading/pull/293), thanks @Hinotoi-agent).\n- **2026-06-22** 🔧 **Live-authorize OAuth fix + Alpha Zoo headline fix**: `connector authorize` now holds the OAuth handshake open through a multi-minute broker sign-in (tunable via `VIBE_LIVE_AUTHORIZE_TIMEOUT_SECONDS`) and no longer spawns a competing callback server on retry, so the token actually persists ([#281](https://github.com/HKUDS/Vibe-Trading/pull/281), closes [#259](https://github.com/HKUDS/Vibe-Trading/issues/259), thanks @Robin1987China). The Alpha Zoo page no longer prints its alpha count twice ([#287](https://github.com/HKUDS/Vibe-Trading/pull/287), closes [#286](https://github.com/HKUDS/Vibe-Trading/issues/286), thanks @digger-yu). Scheduled research also picked up end-to-end usage docs ([#288](https://github.com/HKUDS/Vibe-Trading/pull/288)).\n- **2026-06-21** ⏰ **Scheduled-research executor + Reports library + post-backtest attribution**: scheduled research now runs **end to end** — a default-off background executor (`VIBE_TRADING_ENABLE_SCHEDULER`) fires due interval/cron jobs through the session runtime ([#278](https://github.com/HKUDS/Vibe-Trading/pull/278), thanks @mvanhorn, closing [#254](https://github.com/HKUDS/Vibe-Trading/issues/254)). A new **`/reports` Run Library** page lists, searches, and filters report-worthy runs with links into Run Detail + Compare ([#224](https://github.com/HKUDS/Vibe-Trading/pull/224), thanks @LemonCANDY42). And after every backtest the agent now runs **layered attribution** — trade-level winners/losers, beta regression, market-regime analysis, and a Monte Carlo permutation test, gated by data availability and routing ([#280](https://github.com/HKUDS/Vibe-Trading/pull/280), thanks @shadowinlife).\n- **2026-06-20** 🔬 **Research Autopilot loop closes (Phase 3) + loader OHLC integrity guard + 4 academic alphas**: **Research Autopilot** now runs **hypothesis → signal-engine → backtest** end to end — `scaffold_signal_engine` writes a contract-correct engine and `link_autopilot_backtest` feeds run metrics back to the hypothesis (**68 tools**) ([#267](https://github.com/HKUDS/Vibe-Trading/pull/267)). A structural **OHLC sanity check** drops dirty bars (`high < low`, non-positive prices, bad bracketing) centrally at the loader boundary, guarding every data source ([#274](https://github.com/HKUDS/Vibe-Trading/pull/274), thanks @Shizoqua). And the **academic alpha family grows 6 → 10** — Jegadeesh reversal, George-Hwang 52-week-high, Amihud illiquidity, Harvey-Siddique skew (**456 factors**) ([#277](https://github.com/HKUDS/Vibe-Trading/pull/277), thanks @Robin1987China).\n- **2026-06-19** 🚀 **v0.1.10 — Global data layer**: market-data sources grow 10 → 18 (free **Eastmoney / Sina / Stooq / Yahoo** + key-gated **Finnhub / Alpha Vantage / Tiingo / FMP**, ban-risk fallback) plus **18 read-only data tools** (fund flow, dragon-tiger, northbound, margin, block trades, SEC EDGAR + XBRL, financials, options chains, full-market screening…) across A-share / US / HK, all over MCP. Also bundles everything since 0.1.9 — 10 broker connectors, `alpha compare`, the provider-reliability overhaul, and the opt-in data cache. `pip install -U vibe-trading-ai`\n- **2026-06-18** 🔬 **Research Autopilot Phase 1 + a local Data Bridge loader, + a Discord security no",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"vibe-trading-ai\"\nversion = \"0.1.10\"\ndescription = \"Natural-language finance research AI agent with backtesting\"\nrequires-python = \">=3.11\"\nlicense = \"MIT\"\nreadme = \"README.md\"\nauthors = [\n    {name = \"HKUDS\", email = \"hkuds@connect.hku.hk\"},\n]\nkeywords = [\"finance\", \"trading\", \"backtesting\", \"agent\", \"swarm\", \"quantitative\"]\nclassifiers = [\n    \"Development Status :: 4 - Beta\",\n    \"Intended Audience :: Financial and Insurance Industry\",\n    \"Programming Language :: Python :: 3.11\",\n    \"Programming Language :: Python :: 3.12\",\n    \"Topic :: Office/Business :: Financial :: Investment\",\n]\ndependencies = [\n    \"rich>=13.0.0\",\n    \"pyyaml>=6.0.0\",\n    \"langchain>=1.0.0,<2\",\n    \"langchain-core>=1.0.0,<2\",\n    \"langchain-openai>=1.0.0,<2\",\n    \"langgraph>=1.0.10,<1.1\",\n    \"langgraph-checkpoint>=2.1.0,<5\",\n    \"python-dotenv>=1.0.0\",\n    \"httpx>=0.28.0\",\n    \"defusedxml>=0.7.1\",\n    \"oauth-cli-kit>=0.1.3\",\n    \"pandas>=2.0.0,<3.0.0\",\n    \"openpyxl>=3.1.0\",\n    \"python-docx>=1.1.0\",\n    \"python-pptx>=0.6.23\",\n    \"pypdfium2>=4.0.0\",\n    \"Pillow>=10.0.0\",\n    \"numpy>=1.24.0\",\n    \"scipy>=1.10.0\",\n    \"duckdb>=1.2.0\",\n    \"scikit-learn>=1.3.0\",\n    \"joblib>=1.3.0\",\n    \"smartmoneyconcepts>=0.0.1\",\n    \"tushare>=1.2.89\",\n    \"requests>=2.31.0\",\n    \"yfinance>=0.2.30\",\n    \"akshare>=1.12.0\",\n    \"ccxt>=4.0.0\",\n    \"fastapi>=0.104.0\",\n    \"uvicorn[standard]>=0.24.0\",\n    \"pydantic>=2.0.0\",\n    \"python-multipart>=0.0.18\",\n    \"sse-starlette>=1.6.0\",\n    \"fastmcp>=2.14.0\",\n    \"ddgs>=6.0.0\",\n    \"jinja2>=3.1.0\",\n    \"matplotlib>=3.7.0\",\n    \"weasyprint>=60.0\",\n    \"prompt_toolkit>=3.0.0\",\n]\n\n[project.urls]\nHomepage = \"https://vibetrading.wiki/\"\nDocumentation = \"https://vibetrading.wiki/docs/\"\nRepository = \"https://github.com/HKUDS/Vibe-Trading\"\nIssues = \"https://github.com/HKUDS/Vibe-Trading/issues\"\n\n[project.scripts]\nvibe-trading = \"cli:main\"\nvibe-trading-mcp = \"mcp_server:main\"\n\n[tool.setuptools]\npackage-dir = {\"\" = \"agent\"}\npy-modules = [\"api_server\", \"mcp_server\"]\n\n[tool.setuptools.packages.find]\nwhere = [\"agent\"]\ninclude = [\"src*\", \"backtest*\", \"cli*\"]\n\n[tool.setuptools.package-data]\n\"src\" = [\n    \"skills/**/*.md\",\n    \"skills/**/*.yaml\",\n    \"skills/**/*.json\",\n    \"skills/**/*.py\",\n    \"providers/*.json\",\n    \"swarm/presets/*.yaml\",\n    \"shadow_account/templates/*.j2\",\n    \"shadow_account/templates/*.html\",\n    \"shadow_account/templates/*.css\",\n]\n\"backtest\" = [\"*.py\"]\n\"src.factors\" = [\"zoo/**/*.yaml\", \"zoo/**/*.md\", \"zoo/**/NOTICE\"]\n\n[project.optional-dependencies]\nibkr = [\n    \"ib_async>=2.0\",\n]\ndeepseek = [\n    \"langchain-deepseek>=1.0.0,<2\",\n]\nashare = [\n    # Free, no-auth A-share source over BaoStock's TCP protocol; bypasses the\n    # HTTP CDN IP blocks that affect eastmoney-backed sources. The Tencent\n    # A-share loader needs no extra dependency (stdlib HTTP only).\n    \"baostock>=0.8.8\",\n]\nharmonic = [\n    \"pyharmonics>=1.5.0\",\n]\ndev = [\n    \"pytest>=7.0\",\n    \"pytest-cov>=4.0\",\n    \"pytest-socket>=0.7.0\",\n]\n\n[tool.pytest.ini_options]\ntestpaths = [\"agent/tests\"]\npythonpath = [\"agent\"]\nmarkers = [\n    \"unit: Unit tests (fast, no network)\",\n    \"integration: Integration tests (may need network)\",\n]\n\n[tool.ruff]\ntarget-version = \"py311\"\nline-length = 120\nsrc = [\"agent\"]\n\n[tool.coverage.run]\nsource = [\"agent\"]\nomit = [\n    \"agent/tests/*\",\n    \"agent/tests/**/*\",\n    \"agent/**/__init__.py\",\n]\n\n[tool.coverage.report]\nshow_missing = true\nskip_empty = true\nfail_under = 0\nexclude_also = [\n    \"if __name__ == .__main__.\",\n    \"raise NotImplementedError\",\n    \"\\\\.\\\\.\\\\.\",\n]\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"W\"]\nignore = [\"E501\"]\n\n[tool.ruff.lint.per-file-ignores]\n# Alpha zoo files import the full src.factors.base surface verbatim\n# to match research-paper formulas. F401 (unused-import) is noise here;\n# F841 (unused-local-variable) stays active to catch real formula bugs.\n\"agent/src/factors/zoo/**/*.py\" = [\"F401\"]\n",
    "strategic_keywords": [
      "agent",
      "mcp",
      "llm"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 94
    },
    "strategic_score": 94
  },
  {
    "owner": "altic-dev",
    "name": "FluidVoice",
    "full_name": "altic-dev/FluidVoice",
    "url": "https://github.com/altic-dev/FluidVoice",
    "description": "FluidVoice - Fastest macOS Offline Dictation app - Voice to Text fully Local. One ⭐ takes us a long way :))",
    "language": "Swift",
    "total_stars": 4334,
    "forks": 272,
    "stars_this_period": 836,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [],
      "license": "GPL-3.0",
      "open_issues": 85,
      "created_at": "2025-09-21T17:35:02Z",
      "pushed_at": "2026-06-28T22:50:52Z",
      "homepage": "https://altic.dev/fluid",
      "default_branch": "main",
      "forks": 272,
      "watchers": 12,
      "archived": false,
      "size_kb": 80259
    },
    "readme_content": "# FluidVoice\n\n[![GitHub stars](https://img.shields.io/github/stars/altic-dev/FluidVoice?style=social)](https://github.com/altic-dev/FluidVoice/stargazers)\n[![Sponsor FluidVoice](https://img.shields.io/badge/Sponsor-GitHub%20Sponsors-ea4aaa?logo=githubsponsors&logoColor=white)](https://github.com/sponsors/altic-dev)\n[![Supported Models](https://img.shields.io/badge/Models-Nemotron%20Speech%203.5%20%7C%20Parakeet%20Flash%20%7C%20Parakeet%20v3%20%26%20v2%20%7C%20Cohere%20%7C%20Apple%20Speech%20%7C%20Whisper-blue)](https://huggingface.co/nvidia/parakeet_realtime_eou_120m-v1)\n\nOpen source voice-to-text dictation app for macOS with on-device AI enhancement.\n\n**Install with Homebrew:** `brew install --cask fluidvoice`\n\n**Manual download:** [latest release](https://github.com/altic-dev/FluidVoice/releases/latest)\n\n> [!IMPORTANT]\n> This project is free and open source under GPLv3. If FluidVoice is useful to you, please star the repository — it helps visibility and keeps development going.\n\n---\n\n## Support FluidVoice\n\nIf FluidVoice helps you, you can support continued development and future platform work for iOS and Windows on [GitHub Sponsors](https://github.com/sponsors/altic-dev).\n\n---\n\n## What's New in 1.6.0\n\n- **Insanely fast Parakeet** — rebuilt Parakeet implementation with pretty much zero delay between speaking and seeing words on screen\n- **Fluid Intelligence** — fully local AI model for on-device dictation enhancement. No cloud, no API keys, no data leaving your Mac\n- **Better Theming** — adaptive light/dark theme with a compact toolbar switcher\n- **Refreshed Onboarding** — language-first voice engine setup, real dictation tryout, and AI enhancement setup in one clean pass\n\n> [!WARNING]\n> Based on early feedback, Fluid Intelligence may cause you to unsubscribe from other dictation apps and save money. You've been warned.\n\n## Fluid Intelligence\n\nFluidVoice is fully open source under GPLv3. **Fluid Intelligence** is a separate, privately maintained local AI runtime that powers advanced on-device dictation enhancement — smart formatting, context-aware capitalization, and post-processing — all running locally on your Mac.\n\nThe app works great on its own with any supported speech model and optional cloud AI providers. Fluid Intelligence adds a fully local, private AI layer for users who want on-device enhancement without sending data anywhere.\n\nWe're keeping Fluid Intelligence private for now so we can sustainably offer the core dictation experience for free. This may change in the future.\n\n---\n\n## Star History\n\n<a href=\"https://star-history.com/#altic-dev/FluidVoice&Date\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=altic-dev/FluidVoice&type=Date&theme=dark\" />\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=altic-dev/FluidVoice&type=Date\" />\n    <img alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=altic-dev/FluidVoice&type=Date\" />\n  </picture>\n</a>\n\n---\n\n## Fluid Intelligence Sneak Peek\n\n<table>\n  <tr>\n    <td width=\"50%\" align=\"center\"><b>Email Template</b></td>\n    <td width=\"50%\" align=\"center\"><b>Flowers</b></td>\n  </tr>\n  <tr>\n    <td width=\"50%\"><video src=\"https://github.com/user-attachments/assets/6c7a7c4c-17a8-453d-8eff-1aa1fa9f6077\" width=\"100%\"></video></td>\n    <td width=\"50%\"><video src=\"https://github.com/user-attachments/assets/36747e9d-1ea3-4d27-8d38-eaacb6d57285\" width=\"100%\"></video></td>\n  </tr>\n  <tr>\n    <td width=\"50%\" align=\"center\"><b>Change Time & Name</b></td>\n    <td width=\"50%\" align=\"center\"><b>Emoji</b></td>\n  </tr>\n  <tr>\n    <td width=\"50%\"><video src=\"https://github.com/user-attachments/assets/04e00f3d-a602-448d-9bde-50b5e8f61ac6\" width=\"100%\"></video></td>\n    <td width=\"50%\"><video src=\"https://github.com/user-attachments/assets/5f6063ab-0506-4687-b825-c7bf4ab66ed6\" width=\"100%\"></video></td>\n  </tr>\n  <tr>\n    <td width=\"50%\" align=\"center\"><b>Hyphens & Numbers</b></td>\n    <td width=\"50%\"></td>\n  </tr>\n  <tr>\n    <td width=\"50%\"><video src=\"https://github.com/user-attachments/assets/47175f2b-9f06-452e-b892-42488e4ba536\" width=\"100%\"></video></td>\n    <td width=\"50%\"></td>\n  </tr>\n</table>\n\n## Demo\n\n### Command Mode — Take any action on your Mac using FluidVoice\n\nhttps://github.com/user-attachments/assets/ffb47afd-1621-432a-bdca-baa4b8526301\n\n### Write Mode — Write or rewrite text in any text box in any app\n\nhttps://github.com/user-attachments/assets/c57ef6d5-f0a1-4a3f-a121-637533442c24\n\n## Screenshots\n\n### Command Mode\n\n![Command Mode](assets/cmd_mode_ss.png)\n\n### History & Stats\n\n![History & Stats](assets/history__ss.png)\n\n---\n\n## Features\n\n- **Fluid Intelligence** — on-device AI enhancement for smart formatting, context-aware capitalization, and post-processing, all running locally on your Mac with zero data leaving your machine\n- **Command Mode** — control your Mac by voice: launch apps, run shortcuts, trigger system actions, and automate workflows without touching the keyboard\n- **Write Mode** — write or rewrite text directly in any text field across any app. Select text and rewrite it, or dictate new content inline\n- **Live Preview** — real-time transcription overlay with notch support, so you see words appear as you speak\n- **Multiple Speech Models** — Nemotron Speech 3.5, Parakeet Flash, Parakeet TDT v3 & v2, Cohere Transcribe, Apple Speech, and Whisper. Pick the model that fits your language and latency needs\n- **AI Enhancement** — optional post-processing via OpenAI, Groq, custom providers, or local Fluid Intelligence for cleaner, more accurate transcripts\n- **Audio History** — optional local recording history with budget controls and ZIP export, so you can review past dictations without cloud storage\n- **Today-Usage Stats** — daily usage tracking at a glance with a stats header card and toolbar pill\n- **Adaptive Theming** — light/dark theme that follows your system, with a compact toolbar switcher\n- **Global Hotkey** — instant voice capture from anywhere, no app switching needed\n- **Smart Typing** — direct insertion into any app via accessibility APIs for reliable, app-independent text entry\n- **Menu Bar Integration** — quick access, status, and settings from the menu bar\n- **Auto-Updates** — seamless updates with an optional beta channel for early previews\n- **Per-App Configuration** — assign different prompt sets to different apps, so your dictation adapts to whatever you're working in. Fully optional\n- **Notch-Aware Overlay** — transcription overlay that fits cleanly around the MacBook notch, or use a standard overlay if your Mac doesn't have one\n- **Local-First** — your voice and text never leave your machine unless you opt in to a cloud AI provider\n- **Fastest Parakeet on Mac** — one of the fastest native implementations of Parakeet on macOS, with near-instant transcription and minimal latency\n- **Configurable Overlay** — choose from pill-shaped to large overlay sizes to show live preview, or keep it minimal. Everything is optional\n- **Everything is Optional** — AI enhancement, Fluid Intelligence, audio history, analytics, and beta builds are all opt-in. The core dictation experience works out of the box with zero configuration beyond permissions and a hotkey\n\n---\n\n## Supported Models\n\n| Model | Best for | Language support | Download size | Hardware |\n| --- | --- | --- | --- | --- |\n| Nemotron Speech 3.5 — Ultra Fast Low Latency | Streaming-capable multilingual dictation | ~40 languages | ~670 MB | Apple Silicon |\n| Nemotron 3.5 Multilingual | Higher-accuracy multilingual dictation | ~40 languages | ~530 MB | Apple Silicon |\n| [Parakeet Flash (Beta)](https://huggingface.co/nvidia/parakeet_realtime_eou_120m-v1) | Lowest-latency live English dictation | English | ~250 MB | Apple Silicon |\n| Parakeet TDT v3 | Fast default multilingual dictation | [25 languages](#parakeet-tdt-v3-languages) | ~500 MB | Apple Silicon |\n| Parakeet TDT v2 | Fastest English-only dictation | [English](#parakeet-tdt-v2-languages) | ~500 MB | Apple Silicon |\n| Cohere Transcribe | High-accuracy multilingual dictation | [14 languages](#cohere-transcribe-languages) | ~1.4 GB | Apple Silicon |\n| Apple Speech | Zero-download native macOS speech | [System languages](#apple-speech-languages) | Built-in | Apple Silicon + Intel |\n| Whisper Tiny / Base / Small / Medium / Large | Broad compatibility, including Intel Macs | [99 languages](#whisper-language-support) | ~75 MB to ~2.9 GB | Apple Silicon + Intel |\n\n### Parakeet TDT v3 Languages\n\nBulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Spanish, Swedish, and Ukrainian.\n\n### Parakeet TDT v2 Languages\n\nEnglish.\n\n### Cohere Transcribe Languages\n\nEnglish, French, German, Italian, Spanish, Portuguese, Greek, Dutch, Polish, Mandarin, Japanese, Korean, Vietnamese, and Arabic.\n\n### Apple Speech Languages\n\nSystem language support depends on the macOS speech recognition languages available on your machine.\n\n### Whisper Language Support\n\nWhisper supports up to 99 languages, depending on the model size you choose.\n\n---\n\n## Quick Start\n\n1. **Install** with Homebrew:\n   ```bash\n   brew install --cask fluidvoice\n   ```\n   Or download the [latest release](https://github.com/altic-dev/FluidVoice/releases/latest).\n\n2. **Grant permissions** — FluidVoice will ask for microphone and accessibility access. Both are required for dictation and typing into other apps.\n\n3. **Set your hotkey** — pick a global hotkey in settings that triggers voice capture from anywhere.\n\n4. **Go through onboarding** — choose your voice model based on your language and latency needs. Models range from zero-download Apple Speech to high-accuracy Nemotron and Whisper.\n\n5. **(Optional) Enable Fluid Intelligence** — download the local AI model during onboarding for on-device dictation enhancement. Everything runs locally, no data leaves your Mac.\n\n6. **(Optional) Bring your own AI provider** — add an OpenAI, Groq, or custom provider API key for cloud-based enhancement. Keys are stored securely in macOS Keychain. Select \"Always allow\" for key access.\n\n7. **(Optional) Opt in to beta builds** — `Settings → Automatic Updates → Beta Releases` for early access to new features.\n\n---\n\n## Requirements\n\n- macOS 15.0 (Sequoia) or later\n- Apple Silicon Mac for all models\n- Intel Macs supported via Whisper models (from 1.5.1+)\n- ~1 GB disk space for a voice model\n- ~3.5 GB disk space for the Fluid Intelligence model (optional)\n- Microphone access\n- Accessibility permissions for typing\n\n---\n\n## Building from Source\n\n```bash\ngit clone https://github.com/altic-dev/FluidVoice.git\ncd FluidVoice\nopen Fluid.xcodeproj\n```\n\nBuild and run in Xcode. All dependencies are managed via Swift Package Manager.\n\n### Build Only (No Signing)\n\n```bash\nxcodebuild -project Fluid.xcodeproj -scheme Fluid -destination 'platform=macOS' build CODE_SIGNING_ALLOWED=NO\n```\n\n---\n\n## Contributing\n\nContributions are welcome! Please create an issue first to discuss major changes before submitting a pull request.\n\n### Development Setup\n\n1. Clone and open in Xcode as above.\n2. **Signing:** `FluidVoice → Signing & Capabilities → Automatically manage signing → pick your Team` (Personal Team is fine). Stored in `xcuserdata/` (gitignored).\n3. Build and run — SPM handles dependencies.\n4. **(Optional) Pre-commit hook** to prevent accidental team ID commits:\n   ```bash\n   cp scripts/check-team-id.sh .git/hooks/pre-commit\n   chmod +x .git/hooks/pre-commit\n   ```\n\n### Pull Request Guidelines\n\n- **One feature or fix per PR** — keep changes focused and atomic\n- **Create an issue first** so work is trackable before review\n- **Discuss non-trivial changes** before opening a PR\n- **Follow the PR template**\n- **Test thoroughly** on your machine\n- **Never commit personal team IDs or API keys**\n- **Check `git diff`** before committing\n\n---\n\n#",
    "strategic_keywords": [
      "runtime"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 8,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 7,
      "risk_signal": 10,
      "total": 80
    },
    "strategic_score": 80
  },
  {
    "owner": "firecrawl",
    "name": "firecrawl",
    "full_name": "firecrawl/firecrawl",
    "url": "https://github.com/firecrawl/firecrawl",
    "description": "The API to search, scrape, and interact with the web at scale. 🔥",
    "language": "TypeScript",
    "total_stars": 141465,
    "forks": 8147,
    "stars_this_period": 812,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "ai-agents",
        "ai-crawler",
        "ai-scraping",
        "ai-search",
        "crawler",
        "data-extraction",
        "html-to-markdown",
        "llm",
        "markdown",
        "scraper",
        "scraping",
        "web-crawler",
        "web-data",
        "web-data-extraction",
        "web-scraper",
        "web-scraping",
        "web-search",
        "webscraping"
      ],
      "license": "AGPL-3.0",
      "open_issues": 372,
      "created_at": "2024-04-15T21:02:29Z",
      "pushed_at": "2026-06-29T22:02:22Z",
      "homepage": "https://firecrawl.dev",
      "default_branch": "main",
      "forks": 8147,
      "watchers": 381,
      "archived": false,
      "size_kb": 94094
    },
    "readme_content": "<h3 align=\"center\">\n  <a name=\"readme-top\"></a>\n  <img\n    src=\"https://raw.githubusercontent.com/firecrawl/firecrawl/main/img/firecrawl_logo.png\"\n    height=\"200\"\n  >\n</h3>\n\n<div align=\"center\">\n  <a href=\"https://github.com/firecrawl/firecrawl/blob/main/LICENSE\">\n    <img src=\"https://img.shields.io/github/license/firecrawl/firecrawl\" alt=\"License\">\n  </a>\n  <a href=\"https://pepy.tech/project/firecrawl-py\">\n    <img src=\"https://static.pepy.tech/badge/firecrawl-py\" alt=\"Downloads\">\n  </a>\n  <a href=\"https://GitHub.com/firecrawl/firecrawl/graphs/contributors\">\n    <img src=\"https://img.shields.io/github/contributors/firecrawl/firecrawl.svg\" alt=\"GitHub Contributors\">\n  </a>\n  <a href=\"https://firecrawl.dev\">\n    <img src=\"https://img.shields.io/badge/Visit-firecrawl.dev-orange\" alt=\"Visit firecrawl.dev\">\n  </a>\n</div>\n\n<div>\n  <p align=\"center\">\n    <a href=\"https://twitter.com/firecrawl\">\n      <img src=\"https://img.shields.io/badge/Follow%20on%20X-000000?style=for-the-badge&logo=x&logoColor=white\" alt=\"Follow on X\" />\n    </a>\n    <a href=\"https://www.linkedin.com/company/104100957\">\n      <img src=\"https://img.shields.io/badge/Follow%20on%20LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white\" alt=\"Follow on LinkedIn\" />\n    </a>\n    <a href=\"https://discord.gg/firecrawl\">\n      <img src=\"https://img.shields.io/badge/Join%20our%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white\" alt=\"Join our Discord\" />\n    </a>\n  </p>\n</div>\n\n---\n\n# **🔥 Firecrawl**\n\n**The API to search, scrape, and interact with the web at scale. 🔥** The web context API to find sources, extract content, and turn it into clean Markdown or structured data your agents can ship with. Open source and available as a [hosted service](https://firecrawl.dev/?ref=github).\n\n_Pst. Hey, you, join our stargazers :)_\n\n<a href=\"https://github.com/firecrawl/firecrawl\">\n  <img src=\"https://img.shields.io/github/stars/firecrawl/firecrawl.svg?style=social&label=Star&maxAge=2592000\" alt=\"GitHub stars\">\n</a>\n\n---\n\n## Why Firecrawl?\n\n- **Industry-leading reliability**: Covers 96% of the web, including JS-heavy pages — no proxy headaches, just clean data ([see benchmarks](https://www.firecrawl.dev/blog/the-worlds-best-web-data-api-v25))\n- **Blazingly fast**: P95 latency of 3.4s across millions of pages, built for real-time agents and dynamic apps\n- **LLM-ready output**: Clean markdown, structured JSON, screenshots, and more — spend fewer tokens, build better AI apps\n- **We handle the hard stuff**: Rotating proxies, orchestration, rate limits, JS-blocked content, and more — zero configuration\n- **Agent ready**: Connect Firecrawl to any AI agent or MCP client with a single command\n- **Media parsing**: Parse and extract content from web-hosted PDFs, DOCX, and more\n- **Actions**: Click, scroll, write, wait, and press before extracting content\n- **Open source**: Developed transparently and collaboratively — [join our community](https://github.com/firecrawl/firecrawl)\n\n---\n\n## Feature Overview\n\n**Core Endpoints**\n\n| Feature | Description |\n|---------|-------------|\n| [**Search**](#search) | Search the web and get full page content from results |\n| [**Scrape**](#scrape) | Convert any URL to markdown, HTML, screenshots, or structured JSON |\n| [**Interact**](#interact) | Scrape a page, then interact with it using AI prompts or code |\n\n**More**\n\n| Feature | Description |\n|---------|-------------|\n| [**Agent**](#agent) | Automated data gathering, just describe what you need |\n| [**Crawl**](#crawl) | Scrape all URLs of a website with a single request |\n| [**Map**](#map) | Discover all URLs on a website instantly |\n| [**Batch Scrape**](#batch-scrape) | Scrape thousands of URLs asynchronously |\n\n---\n\n## Quick Start\n\nSign up at [firecrawl.dev](https://firecrawl.dev) to get your API key. Try the [playground](https://firecrawl.dev/playground) to test it out.\n\n### Search\n\nSearch the web and get full content from results.\n\n```python\nfrom firecrawl import Firecrawl\n\napp = Firecrawl(api_key=\"fc-YOUR_API_KEY\")\n\nsearch_result = app.search(\"firecrawl\", limit=5)\n```\n\n<details>\n<summary><b>Node.js / cURL / CLI</b></summary>\n\n**Node.js**\n```javascript\nimport { Firecrawl } from 'firecrawl';\n\nconst app = new Firecrawl({apiKey: \"fc-YOUR_API_KEY\"});\n\napp.search(\"firecrawl\", { limit: 5 })\n```\n\n**cURL**\n```bash\ncurl -X POST 'https://api.firecrawl.dev/v2/search' \\\n-H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n-H 'Content-Type: application/json' \\\n-d '{\n  \"query\": \"firecrawl\",\n  \"limit\": 5\n}'\n```\n\n**CLI**\n```bash\nfirecrawl search \"firecrawl\" --limit 5\n```\n</details>\n\nOutput:\n```json\n[\n  {\n    \"url\": \"https://firecrawl.dev\",\n    \"title\": \"Firecrawl\",\n    \"markdown\": \"Turn websites into...\"\n  },\n  {\n    \"url\": \"https://docs.firecrawl.dev\",\n    \"title\": \"Firecrawl Docs\",\n    \"markdown\": \"# Getting Started...\"\n  }\n]\n```\n\n### Scrape\n\nGet LLM-ready data from any website — markdown, JSON, screenshots, and more.\n\n```python\nfrom firecrawl import Firecrawl\n\napp = Firecrawl(api_key=\"fc-YOUR_API_KEY\")\n\nresult = app.scrape('firecrawl.dev')\n```\n\n<details>\n<summary><b>Node.js / cURL / CLI</b></summary>\n\n**Node.js**\n```javascript\nimport { Firecrawl } from 'firecrawl';\n\nconst app = new Firecrawl({ apiKey: \"fc-YOUR_API_KEY\" });\n\napp.scrape('firecrawl.dev')\n```\n\n**cURL**\n```bash\ncurl -X POST 'https://api.firecrawl.dev/v2/scrape' \\\n-H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n-H 'Content-Type: application/json' \\\n-d '{\n  \"url\": \"firecrawl.dev\"\n}'\n```\n\n**CLI**\n```bash\nfirecrawl scrape https://firecrawl.dev\nfirecrawl https://firecrawl.dev --only-main-content\n```\n</details>\n\nOutput:\n```\n# Firecrawl\n\nFirecrawl helps AI systems search, scrape, and interact with the web.\n\n## Features\n- Search: Find information across the web\n- Scrape: Clean data from any page\n- Interact: Click, navigate, and operate pages\n- Agent: Autonomous data gathering\n```\n\n### Interact\n\nScrape a page, then interact with it using AI prompts or code.\n\n```python\nfrom firecrawl import Firecrawl\n\napp = Firecrawl(api_key=\"fc-YOUR_API_KEY\")\n\nresult = app.scrape(\"https://amazon.com\")\nscrape_id = result.metadata.scrape_id\n\napp.interact(scrape_id, prompt=\"Search for 'mechanical keyboard'\")\napp.interact(scrape_id, prompt=\"Click the first result\")\n```\n\n<details>\n<summary><b>Node.js / cURL / CLI</b></summary>\n\n**Node.js**\n```javascript\nimport { Firecrawl } from 'firecrawl';\n\nconst app = new Firecrawl({apiKey: \"fc-YOUR_API_KEY\"});\n\nconst result = await app.scrape(\"https://amazon.com\");\n\nawait app.interact(result.metadata.scrapeId, {\n  prompt: \"Search for 'mechanical keyboard'\"\n});\nawait app.interact(result.metadata.scrapeId, {\n  prompt: \"Click the first result\"\n});\n```\n\n**cURL**\n```bash\n# 1. Scrape the page\ncurl -X POST 'https://api.firecrawl.dev/v2/scrape' \\\n-H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n-H 'Content-Type: application/json' \\\n-d '{\"url\": \"https://amazon.com\"}'\n\n# 2. Interact with the page (use scrapeId from step 1)\ncurl -X POST 'https://api.firecrawl.dev/v2/scrape/SCRAPE_ID/interact' \\\n-H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n-H 'Content-Type: application/json' \\\n-d '{\"prompt\": \"Search for mechanical keyboard\"}'\n```\n\n**CLI**\n```bash\nfirecrawl scrape https://amazon.com\nfirecrawl interact exec --prompt \"Search for 'mechanical keyboard'\"\nfirecrawl interact exec --prompt \"Click the first result\"\n```\n</details>\n\nOutput:\n```json\n{\n  \"success\": true,\n  \"output\": \"Keyboard available at $100\",\n  \"liveViewUrl\": \"https://liveview.firecrawl.dev/...\"\n}\n```\n\n---\n\n## Power Your Agent\n\nConnect Firecrawl to any AI agent or MCP client in minutes.\n\n### Skill\n\nGive your agent easy access to real-time web data with one command.\n\n```bash\nnpx -y firecrawl-cli@latest init --all --browser\n```\n\nRestart your agent after installing. Works with [Claude Code](https://claude.ai/code), [Antigravity](https://antigravity.google), [OpenCode](https://opencode.ai), and more.\n\n### MCP\n\nConnect any MCP-compatible client to the web in seconds.\n\n```json\n{\n  \"mcpServers\": {\n    \"firecrawl-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"firecrawl-mcp\"],\n      \"env\": {\n        \"FIRECRAWL_API_KEY\": \"fc-YOUR_API_KEY\"\n      }\n    }\n  }\n}\n```\n\n### Agent Onboarding\n\nAre you an AI agent? Fetch this skill to sign up your user, get an API key, and start building with Firecrawl.\n\n```bash\ncurl -s https://firecrawl.dev/agent-onboarding/SKILL.md\n```\n\nSee the [Skill + CLI documentation](https://docs.firecrawl.dev/sdks/cli) for all available commands. For MCP, see [firecrawl-mcp-server](https://github.com/firecrawl/firecrawl-mcp-server).\n\n---\n\n## More Endpoints\n\n### Agent\n\n**The easiest way to get data from the web.** Describe what you need, and our AI agent searches, navigates, and retrieves it. No URLs required.\n\nAgent is the evolution of our `/extract` endpoint: faster, more reliable, and doesn't require you to know the URLs upfront.\n```bash\ncurl -X POST 'https://api.firecrawl.dev/v2/agent' \\\n  -H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"prompt\": \"Find the pricing plans for Notion\"\n  }'\n```\n\nResponse:\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"result\": \"Notion offers the following pricing plans:\\n\\n1. Free - $0/month...\\n2. Plus - $10/seat/month...\\n3. Business - $18/seat/month...\",\n    \"sources\": [\"https://www.notion.so/pricing\"]\n  }\n}\n```\n\n#### Agent with Structured Output\n\nUse a schema to get structured data:\n```python\nfrom firecrawl import Firecrawl\nfrom pydantic import BaseModel, Field\nfrom typing import List, Optional\n\napp = Firecrawl(api_key=\"fc-YOUR_API_KEY\")\n\nclass Founder(BaseModel):\n    name: str = Field(description=\"Full name of the founder\")\n    role: Optional[str] = Field(None, description=\"Role or position\")\n\nclass FoundersSchema(BaseModel):\n    founders: List[Founder] = Field(description=\"List of founders\")\n\nresult = app.agent(\n    prompt=\"Find the founders of Firecrawl\",\n    schema=FoundersSchema\n)\n\nprint(result.data)\n```\n```json\n{\n  \"founders\": [\n    {\"name\": \"Eric Ciarla\", \"role\": \"Co-founder\"},\n    {\"name\": \"Nicolas Camara\", \"role\": \"Co-founder\"},\n    {\"name\": \"Caleb Peffer\", \"role\": \"Co-founder\"}\n  ]\n}\n```\n\n#### Agent with URLs (Optional)\n\nFocus the agent on specific pages:\n```python\nresult = app.agent(\n    urls=[\"https://docs.firecrawl.dev\", \"https://firecrawl.dev/pricing\"],\n    prompt=\"Compare the features and pricing information\"\n)\n```\n\n#### Model Selection\n\nChoose between two models based on your needs:\n\n| Model | Cost | Best For |\n|-------|------|----------|\n| `spark-1-mini` (default) | 60% cheaper | Most tasks |\n| `spark-1-pro` | Standard | Complex research, critical data gathering |\n```python\nresult = app.agent(\n    prompt=\"Compare enterprise features across Firecrawl, Apify, and ScrapingBee\",\n    model=\"spark-1-pro\"\n)\n```\n\n\n**When to use Pro:**\n- Comparing data across multiple websites\n- Extracting from sites with complex navigation or auth\n- Research tasks where the agent needs to explore multiple paths\n- Critical data where accuracy is paramount\n\nLearn more about Spark models in our [Agent documentation](https://docs.firecrawl.dev/features/agent).\n\n### Crawl\n\nCrawl an entire website and get content from all pages.\n```bash\ncurl -X POST 'https://api.firecrawl.dev/v2/crawl' \\\n  -H 'Authorization: Bearer fc-YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"url\": \"https://docs.firecrawl.dev\",\n    \"limit\": 100,\n    \"scrapeOptions\": {\n      \"formats\": [\"markdown\"]\n    }\n  }'\n```\n\nReturns a job ID:\n```json\n{\n  \"success\": true,\n  \"id\": \"123-456-789\",\n  \"url\": \"https://api.firecrawl.dev/v2/crawl/123-456-789\"\n}\n```\n\n#### Check Crawl Status\n```bash\ncurl -X GET 'https://api.firecrawl.dev/v2/crawl/123-456-789' \\\n  -H 'Authorization: Bearer fc-YOUR_API_KEY'\n```\n```json\n{\n  \"status\": \"completed\",\n  \"total\": 50,\n  \"completed\": 50,\n  \"creditsUsed\": 50,\n  \"data\": [\n    {\n      \"markdown\": \"# Page Title\\n\\nContent...\",\n      \"metadata\": {\"title\": \"Page Title\", \"sourceURL\": \"https://...\"}\n    }\n  ]\n}\n```\n\n**Note:** The [SDKs](#sdks) handle p",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "llm"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 10,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "owner": "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": 23449,
    "forks": 3340,
    "stars_this_period": 760,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "ai-agents",
        "ai-tools",
        "automation",
        "boilerplate",
        "claude",
        "claude-code",
        "clone",
        "developer-tools",
        "nextjs",
        "react",
        "reverse-engineering",
        "shadcn-ui",
        "skills",
        "tailwindcss",
        "template",
        "typescript",
        "web-scraping",
        "website-clone"
      ],
      "license": "MIT",
      "open_issues": 19,
      "created_at": "2026-03-13T11:14:39Z",
      "pushed_at": "2026-06-01T04:09:21Z",
      "homepage": "https://dsc.gg/jcodesmore",
      "default_branch": "master",
      "forks": 3340,
      "watchers": 109,
      "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": 19,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "owner": "hugohe3",
    "name": "ppt-master",
    "full_name": "hugohe3/ppt-master",
    "url": "https://github.com/hugohe3/ppt-master",
    "description": "AI generates a real, editable PowerPoint from any document — native shapes & animations, speaker notes voiced as audio narration, and the option to follow your own .pptx template, not slide images · by Hugo He",
    "language": "Python",
    "total_stars": 34345,
    "forks": 2905,
    "stars_this_period": 700,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "ai-agent",
        "aippt",
        "office",
        "powerpoint",
        "powerpoint-generation",
        "ppt",
        "pptx",
        "presentation",
        "slide",
        "slides"
      ],
      "license": "MIT",
      "open_issues": 5,
      "created_at": "2025-12-10T06:54:33Z",
      "pushed_at": "2026-06-29T06:03:29Z",
      "homepage": "https://hugohe3.github.io/ppt-master/",
      "default_branch": "main",
      "forks": 2905,
      "watchers": 76,
      "archived": false,
      "size_kb": 782206
    },
    "readme_content": "# PPT Master — AI generates natively editable PPTX from any document\n\n[![Version](https://img.shields.io/badge/version-v2.11.0-blue.svg)](https://github.com/hugohe3/ppt-master/releases)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![GitHub stars](https://img.shields.io/github/stars/hugohe3/ppt-master.svg)](https://github.com/hugohe3/ppt-master/stargazers)\n[![AtomGit stars](https://atomgit.com/hugohe3/ppt-master/star/badge.svg)](https://atomgit.com/hugohe3/ppt-master)\n[![The Agentic Leaderboard](https://www.theagenticleaderboard.com/badges/ppt-master.svg)](https://www.theagenticleaderboard.com/agent/?q=ppt-master)\n\n<p align=\"center\">\n  <a href=\"https://trendshift.io/repositories/25760?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-25760\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://trendshift.io/api/badge/repositories/25760\" alt=\"hugohe3%2Fppt-master | Trendshift\" width=\"250\" height=\"55\"/></a>\n</p>\n\nEnglish | [中文](./README_CN.md)\n\n<details open>\n<summary>This project is kept free and open source with the support of <a href=\"https://www.packyapi.com/register?aff=ppt-master\">PackyCode</a>, <a href=\"https://apikey.fun/register?aff=PPT-MASTER\">APIKEY.FUN</a>, <a href=\"https://runapi.co/register?aff=WMLJ\">RunAPI</a>, <a href=\"https://www.compshare.cn/coding-plan?ytag=GPU_YY-git_pptmaster0624\">YouYun ZhiSuan</a> and other sponsors.</summary>\n\n<table>\n  <tr>\n    <td width=\"180\"><a href=\"https://www.packyapi.com/register?aff=ppt-master\"><img src=\"docs/assets/sponsors/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 project users: register using <a href=\"https://www.packyapi.com/register?aff=ppt-master\">this link</a> and enter the promo code <strong>ppt-master</strong> during recharge to get 10% off.</td>\n  </tr>\n  <tr>\n    <td width=\"180\"><a href=\"https://apikey.fun/register?aff=PPT-MASTER\"><img src=\"docs/assets/sponsors/apikey-fun.png\" alt=\"APIKEY.FUN\" width=\"150\"></a></td>\n    <td>Thanks to APIKEY.FUN for sponsoring this project! APIKEY.FUN is a professional enterprise-grade AI relay service committed to stable, efficient, and low-cost AI access for businesses and developers. The platform supports mainstream models including Claude, OpenAI, and Gemini, with prices as low as <strong>7% of official rates</strong>. Register through <a href=\"https://apikey.fun/register?aff=PPT-MASTER\">our dedicated link</a> for an exclusive perk: <strong>up to 5% off on top-ups, permanently</strong>.</td>\n  </tr>\n  <tr>\n    <td width=\"180\"><a href=\"https://runapi.co/register?aff=WMLJ\"><img src=\"docs/assets/sponsors/runapi.png\" alt=\"RunAPI\" width=\"150\"></a></td>\n    <td>Thanks to RunAPI for sponsoring this project! RunAPI is an efficient and stable API platform — a single API Key gives you access to 150+ leading models, including OpenAI, Claude, Gemini, DeepSeek, and Grok, at prices as low as <strong>10% of official rates</strong>, with exceptional stability and seamless compatibility with tools like Claude Code. RunAPI offers an exclusive perk for PPT Master users: register and contact an administrator via <a href=\"https://runapi.co/register?aff=WMLJ\">our dedicated link</a> to claim <strong>¥7 in free credit</strong>.</td>\n  </tr>\n  <tr>\n    <td width=\"180\"><a href=\"https://www.compshare.cn/coding-plan?ytag=GPU_YY-git_pptmaster0624\"><img src=\"docs/assets/sponsors/youyun.png\" alt=\"YouYun ZhiSuan\" width=\"150\"></a></td>\n    <td>Thanks to YouYun ZhiSuan for sponsoring this project! YouYun ZhiSuan is UCloud's AI cloud platform, providing one-stop API services for mainstream domestic and international models, all accessible with a single key. The platform features cost-effective CodingPlan packages for domestic models (including GLM5.2, Deepseek-v4, and more), along with official channels for stable access to overseas models, meeting diverse development needs. It's compatible with mainstream AI coding tools like Claude Code and Codex, as well as general API calls. The platform supports enterprise-level high concurrency, 24/7 technical support, and self-service invoicing. Register through <a href=\"https://www.compshare.cn/coding-plan?ytag=GPU_YY-git_pptmaster0624\">this link</a> to receive up to <strong>¥10 in free credits</strong> and get started right away.</td>\n  </tr>\n</table>\n\n</details>\n\n> [!IMPORTANT]\n> ### This is a tool, not a wishing well\n> Don't expect it to hand you a finished, perfect deck in one shot. Its real value is taking most of the tedious work off your plate; the polishing that's left is yours — a natively editable deck exists precisely so you can keep working on it, not a flat image you can't touch. The cheaper the model, the more there is to do. How good the result turns out comes down to your skill with this project and with PowerPoint.\n\n<p align=\"center\">\n  <a href=\"https://hugohe3.github.io/ppt-master/\"><strong>Live Demo</strong></a> ·\n  <a href=\"https://www.hehugo.com/\"><strong>About Hugo He</strong></a> ·\n  <a href=\"./examples/\"><strong>Examples</strong></a> ·\n  <a href=\"./docs/faq.md\"><strong>FAQ</strong></a> ·\n  <a href=\"./docs/roadmap.md\"><strong>Roadmap</strong></a> ·\n  <a href=\"mailto:heyug3@gmail.com\"><strong>Contact</strong></a>\n</p>\n\n<h3 align=\"center\">Download the new <a href=\"https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_attention_is_all_you_need/exports/attention_is_all_you_need_narrated.pptx\">narrated <em>Attention Is All You Need</em> deck</a> — play it in PowerPoint and every slide reads itself out loud. That's just the tip of what PPT Master can do.</h3>\n<h3 align=\"center\">Of course, you can also download any of the six example decks below — opening the raw .pptx in PowerPoint is the fastest way to see this project's real capability ceiling.</h3>\n\n<table>\n  <tr>\n    <td align=\"center\" width=\"33%\">\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_pritzker_2026\"><img src=\"docs/assets/screenshots/preview_pritzker_2026.png\" alt=\"Editorial magazine — Pritzker 2026 architecture review\" /></a><br/>\n      <sub><b>Editorial Magazine</b> — architecture photography, calm typographic grid<br/>\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_pritzker_2026\">Flip online</a> · <a href=\"https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_pritzker_2026/exports/pritzker_2026.pptx\">Download .pptx</a></sub>\n    </td>\n    <td align=\"center\" width=\"33%\">\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_global_ai_capital_2026\"><img src=\"docs/assets/screenshots/preview_global_ai_capital.png\" alt=\"Data journalism — Global AI Capital 2026\" /></a><br/>\n      <sub><b>Data Journalism</b> — Bloomberg-style dark dashboard, chart-driven<br/>\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_global_ai_capital_2026\">Flip online</a> · <a href=\"https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_global_ai_capital_2026/exports/global_ai_capital_2026.pptx\">Download .pptx</a></sub>\n    </td>\n    <td align=\"center\" width=\"33%\">\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_swiss_grid_systems\"><img src=\"docs/assets/screenshots/preview_swiss_grid.png\" alt=\"Swiss typographic grid — Grid Systems primer\" /></a><br/>\n      <sub><b>Swiss Grid</b> — strict modular grid, restrained type, red-accent<br/>\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_swiss_grid_systems\">Flip online</a> · <a href=\"https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_swiss_grid_systems/exports/swiss_grid_systems.pptx\">Download .pptx</a></sub>\n    </td>\n  </tr>\n  <tr>\n    <td align=\"center\" width=\"33%\">\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_glassmorphism_demo\"><img src=\"docs/assets/screenshots/preview_glassmorphism_demo.png\" alt=\"Glassmorphism SaaS — AI Agent engineering demo\" /></a><br/>\n      <sub><b>Glassmorphism SaaS</b> — translucent layers, gradient depth, product UI<br/>\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_glassmorphism_demo\">Flip online</a> · <a href=\"https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_glassmorphism_demo/exports/glassmorphism_demo.pptx\">Download .pptx</a></sub>\n    </td>\n    <td align=\"center\" width=\"33%\">\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_sugar_rush_memphis\"><img src=\"docs/assets/screenshots/preview_sugar_rush_memphis.png\" alt=\"Memphis pop — Sugar Rush festival\" /></a><br/>\n      <sub><b>Memphis Pop</b> — bold primaries, geometric patterns, playful energy<br/>\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_sugar_rush_memphis\">Flip online</a> · <a href=\"https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_sugar_rush_memphis/exports/sugar_rush_memphis.pptx\">Download .pptx</a></sub>\n    </td>\n    <td align=\"center\" width=\"33%\">\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_indie_bookstore_zine_guide\"><img src=\"docs/assets/screenshots/preview_indie_bookstore_zine.png\" alt=\"Risograph zine — Indie bookstore guide\" /></a><br/>\n      <sub><b>Risograph Zine</b> — duotone print, hand-made bookstore-culture feel<br/>\n      <a href=\"https://hugohe3.github.io/ppt-master/viewer.html?project=ppt169_indie_bookstore_zine_guide\">Flip online</a> · <a href=\"https://raw.githubusercontent.com/hugohe3/ppt-master/main/examples/ppt169_indie_bookstore_zine_guide/exports/indie_bookstore_zine_guide.pptx\">Download .pptx</a></sub>\n    </td>\n  </tr>\n</table>\n\n<p align=\"center\">\n  <sub>Generated with Claude Opus 4.7 + <code>gpt-image-2</code>. <a href=\"https://hugohe3.github.io/ppt-master/\">Flip through all examples online →</a> · <a href=\"./examples/\"><code>examples/</code> directory</a> · <a href=\"./docs/why-ppt-master.md\">Why PPT Master?</a></sub>\n</p>\n\n---\n\nDrop in your source material and get back a **real PowerPoint**: directly editable, with native slide transitions and entrance animations, speaker notes you can turn into audio narration, and the option to follow your own PPT template — a complete deck you can present as-is and keep editing. How to use each capability → [Getting Started](./docs/getting-started.md).\n\n> **⚠️ PPT Master is a harness, not a complete agent.** `harness + model = agent` — the tool owns the workflow; the model sets the ceiling. To form a genuinely high-quality agent, use **Claude with a large context window (~1M tokens) + AI image generation (`gpt-image-2`)**. Other models can run the pipeline but cannot reach the same quality ceiling. If results disappoint, upgrade the model — don't blame the harness.\n\n> **How it works** — PPT Master is a workflow (a \"skill\") that works inside AI IDEs like Claude Code, Cursor, VS Code + Copilot, or Codebuddy. You chat with the AI — \"make a deck from this PDF\" — and it follows the workflow to produce a real editable `.pptx` on your computer. No coding on your side; the IDE is just where the conversation happens.\n>\n> **What you'll do**: install Python, install an AI IDE, drop in your material.\n\n> **Why it's shaped this way** — knowing how to use Python and AI agents will matter more and more. This project is meant to show how far you can go with just those two things. There's a learning curve if you're starting cold, but it's the curve worth climbing. Making a deck is just the excuse — what I'm really pushing is Python and agents.\n\nPPT Master is different:\n\n- **Real PowerPoint** — if a file can't be opened and edited in PowerPoint, it shouldn't be called a PPT. Every element PPT Master outputs is directly clickable and edi",
    "manifest_file": "requirements.txt",
    "manifest_content": "# PPT Master Dependencies / PPT Master 依赖\n# =============================================\n#\n# Full list lives inside the skill so installing the skill alone gives full capability.\n# 完整依赖列表已内置于 skill 内部，单独安装 skill 即可获得完整能力。\n#\n# Install / 安装方式：\n#   pip install -r requirements.txt                     # from repo root / 仓库根目录\n#   pip install -r skills/ppt-master/requirements.txt   # from anywhere / 任意位置\n#\n-r skills/ppt-master/requirements.txt\n",
    "strategic_keywords": [
      "agent",
      "skill"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "requirements.txt"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 16,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 6,
      "total": 84
    },
    "strategic_score": 84
  },
  {
    "owner": "diegosouzapw",
    "name": "OmniRoute",
    "full_name": "diegosouzapw/OmniRoute",
    "url": "https://github.com/diegosouzapw/OmniRoute",
    "description": "Never stop coding. Free AI gateway: one endpoint, 160+ providers (50+ free), connect Claude Code, Codex, Cursor, Cline & Copilot to FREE Claude/GPT/Gemini. RTK+Caveman stacked compression saves 15-95% tokens, smart auto-fallback, MCP/A2A, multimodal APIs, Desktop/PWA.",
    "language": "TypeScript",
    "total_stars": 7906,
    "forks": 1339,
    "stars_this_period": 614,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "a2a",
        "ai-agents",
        "ai-gateway",
        "anthropic",
        "claude",
        "claude-code",
        "cline",
        "codex",
        "copilot",
        "cursor",
        "deepseek",
        "free-ai",
        "gemini",
        "gemini-cli",
        "llm-gateway",
        "mcp",
        "openai",
        "openai-proxy",
        "qwen",
        "token-saver"
      ],
      "license": "MIT",
      "open_issues": 113,
      "created_at": "2026-02-13T12:38:31Z",
      "pushed_at": "2026-06-29T21:30:20Z",
      "homepage": "https://omniroute.online",
      "default_branch": "main",
      "forks": 1339,
      "watchers": 28,
      "archived": false,
      "size_kb": 218605
    },
    "readme_content": "<div align=\"center\">\n\n<img src=\"./docs/screenshots/MainOmniRoute.png\" alt=\"OmniRoute Dashboard\" width=\"820\"/>\n\n<br/>\n\n# 🚀 OmniRoute — The Free AI Gateway\n\n### Never stop coding. Connect every AI tool to **237 providers** — **50+ free** — through one endpoint.\n\n**Plug Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini. Auto-fallback.**\n<br/>\n\n**RTK + Caveman compression saves 15–95% tokens. Never hit limits.**\n\n<br/>\n\n**~1.6B documented free tokens/month** — up to **~2.1B in your first month** with signup credits — aggregated across the free tiers, plus a long tail of permanently-free, no-cap providers, and the compression above stretches every one further. ([how we count →](docs/reference/FREE_TIERS.md#tldr--how-much-free-inference-does-omniroute-actually-aggregate))\n\n<br/>\n\n[![231 AI Providers](https://img.shields.io/badge/231-AI_Providers-6C5CE7?style=for-the-badge)](#-231-ai-providers--50-free)\n[![50+ Free](https://img.shields.io/badge/50%2B-Free_Tiers-00B894?style=for-the-badge)](#-231-ai-providers--50-free)\n[![1.6B Free Tokens/mo](https://img.shields.io/badge/1.6B-Free_Tokens%2Fmo-00B894?style=for-the-badge)](docs/reference/FREE_TIERS.md)\n[![Token Savings](https://img.shields.io/badge/up_to_95%25-Token_Savings-E17055?style=for-the-badge)](#%EF%B8%8F-save-1595-tokens--automatically)\n[![17 Strategies](https://img.shields.io/badge/17-Routing_Strategies-0984E3?style=for-the-badge)](#-combos--the-flagship)\n[![$0 to start](https://img.shields.io/badge/%240-To_Start-FDCB6E?style=for-the-badge&logoColor=black)](#-quick-start)\n\n<br/>\n\n### 💬 Join the community\n\n[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/EkzRkpzKYt)\n[![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/omnirouteOficial)\n[![WhatsApp Global](https://img.shields.io/badge/WhatsApp_Global-25D366?style=for-the-badge&logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)\n[![WhatsApp Brasil](https://img.shields.io/badge/WhatsApp_Brasil-25D366?style=for-the-badge&logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/BTGJXIyjeNIIgExvTMGGhI)\n\n**Questions, provider tips, roadmap & support → [Discord](https://discord.gg/EkzRkpzKYt) · [Telegram](https://t.me/omnirouteOficial) · WhatsApp [🌍 Global](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) / [🇧🇷 Brasil](https://chat.whatsapp.com/BTGJXIyjeNIIgExvTMGGhI)**\n\n<br/>\n\n<a href=\"https://trendshift.io/repositories/23589\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/23589\" alt=\"diegosouzapw%2FOmniRoute | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n\n[![npm](https://img.shields.io/npm/v/omniroute?logo=npm&style=flat-square)](https://www.npmjs.com/package/omniroute)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE)\n[![Node](https://img.shields.io/badge/node-%E2%89%A522.0.0-brightgreen?style=flat-square)](package.json)\n[![Stars](https://img.shields.io/github/stars/diegosouzapw/OmniRoute?style=social)](https://github.com/diegosouzapw/OmniRoute)\n\n<div align=\"center\">\n\n[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)\n![NPM Monthly](https://img.shields.io/npm/dm/omniroute?label=npm/month&color=cb3837&logo=npm)\n[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)\n![Docker Pulls](https://img.shields.io/docker/pulls/diegosouzapw/omniroute?label=docker%20pulls&logo=docker&color=2496ED)\n![Electron Downloads](https://img.shields.io/github/downloads/diegosouzapw/omniroute/total?style=flat&label=electron%20downloads&logo=electron&color=47848F)\n[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)\n\n</div>\n\n<br/>\n\n[**🚀 Quick Start**](#-quick-start) • [**🎯 Combos**](#-combos--the-flagship) • [**🌐 Providers**](#-231-ai-providers--50-free) • [**🔌 CLI & MCP**](#-full-cli--a2a--mcp) • [**🗜️ Compression**](#%EF%B8%8F-save-1595-tokens--automatically) • [**🌍 Website**](https://omniroute.online)\n\n[💥 The Promise](#-the-promise) • [🤔 Why](#-why-omniroute) • [🏆 What Sets Apart](#-what-sets-omniroute-apart) • [🤖 Compatible CLIs](#-compatible-clis--coding-agents) • [🖥️ Where It Runs](#%EF%B8%8F-where-omniroute-runs--anywhere) • [🔒 Private](#-private--local-first) • [🎬 In Action](#-omniroute-in-action) • [📚 Explore More](#-explore-more) • [📧 Support](#-support--community)\n\n</div>\n\n<div align=\"center\">\n <b>🌐 Available in 41+ languages</b>\n <table>\n  <tr>\n    <td align=\"center\"><a href=\"README.md\">🇺🇸</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/pt-BR/README.md\">🇧🇷</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/es/README.md\">🇪🇸</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/fr/README.md\">🇫🇷</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/it/README.md\">🇮🇹</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ru/README.md\">🇷🇺</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/zh-CN/README.md\">🇨🇳</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/zh-TW/README.md\">🇹🇼</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/de/README.md\">🇩🇪</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ja/README.md\">🇯🇵</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ko/README.md\">🇰🇷</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/in/README.md\">🇮🇳</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"docs/i18n/th/README.md\">🇹🇭</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/vi/README.md\">🇻🇳</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/id/README.md\">🇮🇩</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ms/README.md\">🇲🇾</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/phi/README.md\">🇵🇭</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ar/README.md\">🇸🇦</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/he/README.md\">🇮🇱</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/az/README.md\">🇦🇿</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/uk-UA/README.md\">🇺🇦</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/pl/README.md\">🇵🇱</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/cs/README.md\">🇨🇿</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"docs/i18n/nl/README.md\">🇳🇱</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/bg/README.md\">🇧🇬</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/da/README.md\">🇩🇰</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/fi/README.md\">🇫🇮</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/no/README.md\">🇳🇴</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/sv/README.md\">🇸🇪</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/hu/README.md\">🇭🇺</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/ro/README.md\">🇷🇴</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/sk/README.md\">🇸🇰</a></td>\n    <td align=\"center\"><a href=\"docs/i18n/pt/README.md\">🇵🇹</a></td>\n    <td align=\"center\"></td>\n  </tr>\n</table>\n</div>\n\n<br/>\n\n<div align=\"center\">\n\n# 💰 ~1.6B Free Tokens / Month\n\n</div>\n\n> Stacking free tiers by hand is painful — dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute aggregates the **documented** free tiers of **40+ provider pools / 500+ models** into one honest number and shows it live on the dashboard (`/dashboard/free-tiers`).\n\n- **~1.6B free tokens / month** (steady) — and **up to ~2.1B in your first month** with signup credits.\n- **Pool-deduped, honest** — we count each shared free pool **once**, so the headline isn't inflated by rate-limit ceilings the way multi-billion competitor claims are. (Counting every rate limit 24/7 would read ~10B; we don't publish that.)\n- **Plus the un-countable** — permanently-free, no-token-cap providers (SiliconFlow, Z.AI GLM-Flash, Kilo, OpenCode Zen…) and a **$10 OpenRouter top-up** that unlocks **+24M/mo**, both surfaced separately so they never inflate the headline.\n- **Per-model breakdown**, **live used / remaining** for the current month, and a transparent **terms flag** per provider.\n\n![Free-Tier Budget card (preview mockup)](docs/screenshots/free-tier-budget-card.svg)\n\n> Preview mockup — a real screenshot lands once the `/dashboard/free-tiers` page is validated. Full methodology (pool dedupe, credit tiers, provider terms): **[docs/reference/FREE_TIERS.md](docs/reference/FREE_TIERS.md)**.\n\n<br/>\n\n<div align=\"center\">\n\n# 💥 The Promise\n\n</div>\n\n> One endpoint. **237 providers.** Never stop building — and let OmniRoute pick the cheapest one that works.\n\n<table>\n  <tr>\n    <td width=\"33%\" valign=\"top\"><b>🚫 Never hit limits</b><br/><sub>Auto-fallback across 237 providers in milliseconds. Quota out? Next provider takes over — zero downtime.</sub></td>\n    <td width=\"33%\" valign=\"top\"><b>💸 Save up to 95% tokens</b><br/><sub>RTK + Caveman stacked compression cuts 15–95% of eligible tokens (~89% avg on tool-heavy sessions).</sub></td>\n    <td width=\"33%\" valign=\"top\"><b>🆓 $0 to start</b><br/><sub>50+ providers with a free tier, 11 free <i>forever</i> (Kiro, Qoder, Pollinations, LongCat…). No card needed.</sub></td>\n  </tr>\n  <tr>\n    <td width=\"33%\" valign=\"top\"><b>🔌 Every tool works</b><br/><sub>16+ coding agents — Claude Code, Codex, Cursor, Cline, Copilot, Antigravity — through one config.</sub></td>\n    <td width=\"33%\" valign=\"top\"><b>🧩 One endpoint</b><br/><sub>OpenAI ↔ Claude ↔ Gemini ↔ Responses API translation. Point any tool at <code>/v1</code> and it just works.</sub></td>\n    <td width=\"33%\" valign=\"top\"><b>🛡️ Production-grade</b><br/><sub>Circuit breakers, TLS stealth, MCP (87 tools), A2A, memory, guardrails, evals. 14,965 tests.</sub></td>\n  </tr>\n</table>\n\n<br/>\n<br/>\n\n<div align=\"center\">\n\n# 🤔 Why OmniRoute?\n\n</div>\n\n> Stop juggling 10 dashboards, dead API keys, and surprise bills.\n\n| ❌ The daily pain                                      | ✅ How OmniRoute fixes it                                                     |\n| ------------------------------------------------------ | ----------------------------------------------------------------------------- |\n| 📉 Subscription quota expires unused every month       | **Maximize subscriptions** — track quota, use every token before reset        |\n| 🛑 Rate limits stop you mid-coding                     | **4-tier auto-fallback** — Subscription → API → Cheap → Free, in milliseconds |\n| 🔥 Tool outputs (`git diff`, `grep`, logs) burn tokens | **RTK + Caveman compression** — save 15–95% eligible tokens per request       |\n| 💸 Expensive APIs ($20–50/mo per provider)             | **Cost-optimized routing** — auto-route to the cheapest viable model          |\n| 🧰 Each AI tool wants its own setup                    | **One endpoint, every tool, one dashboard**                                   |\n| 🌍 AI blocked in your country                          | **3-level proxy** + TLS fingerprint stealth — use AI from anywhere            |\n\n<div align=\"center\">\n\n```\n┌──────────────────────────────────────────────────────────┐\n│        Your IDE / CLI  (Claude Code, Cursor, Cline…)       │\n└─────────────────────────┬──────────────────────────────────┘\n                          │ http://localhost:20128/v1\n                          ▼\n┌──────────────────────────────────────────────────────────┐\n│                  OmniRoute — Smart Router                  │\n│  RTK + Caveman compression · 17 routing strategies         │\n│  Circuit breakers · TLS stealth · MCP · A2A · Guardrails   │\n└─────────────────────────┬──────────────────────────────────┘\n        ┌─────────────┬────┴────────┬─────────────┐\n        ▼ Tier 1      ▼ Tier 2      ▼ Tier 3       ▼ Tier 4\n   SUBSCRIPTION     API KEY        CHEAP          FREE\n   Claude Code,     DeepSeek,      GLM $0.5,      Kiro, Qoder,\n   Codex, Copilot   Groq, xAI      MiniMax $0.2   Pollinations\n   quota out? ───▶  budget hit? ─▶ budget hit",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"omniroute\",\n  \"version\": \"3.8.41\",\n  \"description\": \"Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.\",\n  \"type\": \"module\",\n  \"bin\": {\n    \"omniroute\": \"bin/omniroute.mjs\",\n    \"omniroute-reset-password\": \"bin/reset-password.mjs\"\n  },\n  \"files\": [\n    \"bin/\",\n    \"dist/\",\n    \"@omniroute/\",\n    \"open-sse/\",\n    \"src/domain/\",\n    \"src/lib/\",\n    \"src/models/\",\n    \"src/mitm/\",\n    \"src/server/\",\n    \"src/shared/\",\n    \"src/sse/\",\n    \"src/types/\",\n    \".env.example\",\n    \"scripts/build/postinstall.mjs\",\n    \"bin/cli/runtime/\",\n    \"scripts/postinstall.mjs\",\n    \"scripts/build/postinstallSupport.mjs\",\n    \"scripts/build/runtime-env.mjs\",\n    \"scripts/build/colocateOptionals.mjs\",\n    \"scripts/build/sync-env.mjs\",\n    \"scripts/dev/responses-ws-proxy.mjs\",\n    \"scripts/dev/tls-options.mjs\",\n    \"scripts/check/check-supported-node-runtime.ts\",\n    \"scripts/dev/sync-env.mjs\",\n    \"scripts/build/native-binary-compat.mjs\",\n    \"scripts/build/build-next-isolated.mjs\",\n    \"scripts/build/runtime-env.mjs\",\n    \"README.md\",\n    \"LICENSE\",\n    \"!**/__tests__/**\",\n    \"!**/*.test.ts\",\n    \"!**/*.test.tsx\",\n    \"!**/*.test.js\",\n    \"!**/*.test.mjs\",\n    \"!**/*.spec.ts\",\n    \"!**/*.spec.tsx\"\n  ],\n  \"workspaces\": [\n    \"open-sse\"\n  ],\n  \"engines\": {\n    \"node\": \">=22.0.0 <23 || >=24.0.0 <27\"\n  },\n  \"keywords\": [\n    \"ai\",\n    \"router\",\n    \"proxy\",\n    \"openai\",\n    \"claude\",\n    \"anthropic\",\n    \"gemini\",\n    \"fallback\",\n    \"cursor\",\n    \"cline\",\n    \"codex\",\n    \"llm\",\n    \"auto-fallback\"\n  ],\n  \"license\": \"MIT\",\n  \"author\": \"diegosouzapw\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/diegosouzapw/OmniRoute\"\n  },\n  \"homepage\": \"https://omniroute.online\",\n  \"scripts\": {\n    \"dev\": \"node --max-old-space-size=8192 scripts/dev/run-next.mjs dev\",\n    \"prebuild:docs\": \"node scripts/docs/gen-openapi-module.mjs\",\n    \"gen:provider-reference\": \"node --import tsx scripts/docs/gen-provider-reference.ts\",\n    \"bench:compression\": \"node --import tsx scripts/compression/benchmark.ts\",\n    \"eval:compression\": \"node --import tsx scripts/compression-eval/index.ts\",\n    \"release:sync-changelog-i18n\": \"node scripts/release/sync-changelog-i18n.mjs\",\n    \"build\": \"node scripts/build/build-next-isolated.mjs\",\n    \"build:secure\": \"OMNIROUTE_BUILD_PROFILE=minimal node scripts/build/build-next-isolated.mjs\",\n    \"build:cli\": \"node --import tsx scripts/build/prepublish.ts\",\n    \"build:release\": \"rm -rf .build dist && OMNIROUTE_BUILD_SHA=$(git rev-parse --short HEAD) npm run build && npm run build:cli && node scripts/build/write-build-sha.mjs\",\n    \"build:native:tproxy\": \"cd src/mitm/tproxy/native && npx --yes node-gyp rebuild\",\n    \"start\": \"node scripts/dev/run-next.mjs start\",\n    \"lint\": \"eslint .\",\n    \"lint:md\": \"npx --yes markdownlint-cli2 \\\"docs/**/*.md\\\" \\\"*.md\\\" \\\"!docs/i18n\\\" \\\"!docs/research\\\"\",\n    \"lint:prose\": \"vale docs\",\n    \"electron:dev\": \"concurrently \\\"npm run dev\\\" \\\"wait-on http://localhost:20128 && cd electron && npm run dev\\\"\",\n    \"electron:build\": \"npm run build && cd electron && npm run build\",\n    \"electron:build:win\": \"npm run build && cd electron && npm run build:win\",\n    \"electron:build:mac\": \"npm run build && cd electron && npm run build:mac\",\n    \"electron:build:linux\": \"npm run build && cd electron && npm run build:linux\",\n    \"electron:smoke:packaged\": \"node scripts/dev/smoke-electron-packaged.mjs\",\n    \"test\": \"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-concurrency=20 tests/unit/*.test.ts \\\"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\\\"\",\n    \"test:unit\": \"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=20 tests/unit/*.test.ts \\\"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\\\"\",\n    \"test:unit:ci\": \"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-sse/utils/setupPolyfill.ts --import ./tests/_setup/isolateDataDir.ts --test --test-force-exit --test-concurrency=4 tests/unit/*.test.ts \\\"tests/unit/{api,auth,authz,build,cli,cli-helper,combo,compression,correctness,cors,dashboard,db,db-adapters,docs,gamification,guardrails,lib,mcp,runtime,security,services,settings,shared,ui,usage}/**/*.test.ts\\\"\",\n    \"test:unit:fast\": \"cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --max-old-space-size=8192 --import tsx --import ./open-ss",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "runtime",
      "llm",
      "inference"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 96
    },
    "strategic_score": 96
  },
  {
    "owner": "Robbyant",
    "name": "lingbot-map",
    "full_name": "Robbyant/lingbot-map",
    "url": "https://github.com/Robbyant/lingbot-map",
    "description": "A feed-forward 3D foundation model for reconstructing scenes from streaming data",
    "language": "Python",
    "total_stars": 8564,
    "forks": 832,
    "stars_this_period": 521,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 57,
      "created_at": "2026-04-15T17:59:48Z",
      "pushed_at": "2026-06-25T15:03:12Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 832,
      "watchers": 81,
      "archived": false,
      "size_kb": 374207
    },
    "readme_content": "<div align=\"center\">\n  <img src=\"assets/teaser.webp\" width=\"100%\">\n\n<h1>LingBot-Map: Geometric Context Transformer for Streaming 3D Reconstruction</h1>\n\nRobbyant Team\n\n</div>\n\n<div align=\"center\">\n\n[![Paper](https://img.shields.io/static/v1?label=Paper&message=arXiv&color=red&logo=arxiv)](https://arxiv.org/abs/2604.14141)\n[![PDF](https://img.shields.io/static/v1?label=Paper&message=PDF&color=red&logo=adobeacrobatreader)](lingbot-map_paper.pdf)\n[![Project](https://img.shields.io/badge/Project-Website-blue)](https://technology.robbyant.com/lingbot-map)\n[![HuggingFace](https://img.shields.io/static/v1?label=%F0%9F%A4%97%20Model&message=HuggingFace&color=orange)](https://huggingface.co/robbyant/lingbot-map)\n[![ModelScope](https://img.shields.io/static/v1?label=%F0%9F%A4%96%20Model&message=ModelScope&color=purple)](https://www.modelscope.cn/models/Robbyant/lingbot-map)\n[![License](https://img.shields.io/badge/License-Apache--2.0-green)](LICENSE.txt)\n\n</div>\n\nhttps://github.com/user-attachments/assets/fe39e095-af2c-4ec9-b68d-a8ba97e505ab\n\n-----\n\n### 🗺️ Meet LingBot-Map! We've built a feed-forward 3D foundation model for streaming 3D reconstruction! 🏗️🌍\n\nLingBot-Map has focused on:\n\n- **Geometric Context Transformer**: Architecturally unifies coordinate grounding, dense geometric cues, and long-range drift correction within a single streaming framework through anchor context, pose-reference window, and trajectory memory.\n- **High-Efficiency Streaming Inference**: A feed-forward architecture with paged KV cache attention, enabling stable inference at ~20 FPS on 518×378 resolution over long sequences exceeding 10,000 frames.\n- **State-of-the-Art Reconstruction**: Superior performance on diverse benchmarks compared to both existing streaming and iterative optimization-based approaches.\n\n---\n\n## 📑 Table of Contents\n\n<details>\n<summary>Click to expand</summary>\n\n- [📰 News](#-news)\n- [📋 TODO](#-todo)\n- [⚙️ Installation](#️-installation)\n- [📦 Model Download](#-model-download)\n- [🚀 Quick Start](#-quick-start)\n- [🎬 Interactive Demo (`demo.py`)](#-interactive-demo-demopy)\n  - [Try the Example Scenes](#try-the-example-scenes)\n  - [Streaming with Keyframe Interval](#streaming-with-keyframe-interval)\n  - [Windowed Inference (for long sequences, >3000 frames)](#windowed-inference-for-long-sequences-3000-frames)\n  - [Sky Masking](#sky-masking)\n  - [Visualization Options](#visualization-options)\n  - [Performance & Memory](#performance--memory)\n- [🎥 Offline Rendering Pipeline (`demo_render/batch_demo.py`)](#-offline-rendering-pipeline-demo_renderbatch_demopy)\n- [📜 License](#-license)\n- [📖 Citation](#-citation)\n- [✨ Acknowledgments](#-acknowledgments)\n\n</details>\n\n---\n\n## 📰 News\n\n- **2026-05-25** — 📊 **Evaluation benchmark released**. We released the evaluation scripts for KITTI and Oxford Spires — see [benchmark/](benchmark/) for the pipeline, and run [`preprocess/oxford.py`](preprocess/oxford.py) to prepare Oxford Spires data before evaluation.\n- **2026-04-29** — 📹 **Long-video demo released**. We released a very-long-video example (~25 000 frames, 13-minute indoor walkthrough) rendered with the offline pipeline — see [Worked Example](#worked-example--long-indoor-walkthrough-25-000-frames-13-minutes) for the command, flag rationale, and rendered output.\n- **2026-04-27** — 🚀 **LingBot-Map accelerated**. Pull the latest `main` and run `python demo.py --compile ...` or `python gct_profile.py --backend flashinfer --dtype bf16 --compile` to verify on your hardware.\n- **2026-04-24** — Fixed a FlashInfer KV cache bug where `--keyframe_interval > 1` silently cached non-keyframes. **You should now see better pose and reconstruction quality when running with more than 320 frames**.\n\n---\n\n## 📋 TODO\n\n- ✅ Release evaluation benchmark\n  - ✅ Oxford Spires dataset\n  - ✅ KITTI dataset\n  - ✅ VBR dataset\n  - ✅ Droid-W dataset\n  - ✅ TUM-D dataset\n  - ✅ 7-scenes dataset\n  - ✅ ETH3D dataset\n  - ✅ Tanks and Temples dataset\n  - ✅ NRGBD dataset\n- ✅ Release demo scripts\n  - ✅ Indoor long-video demo ([Featured indoor walkthrough](#-featured-indoor-walkthrough-25-000-frames-13-minutes))\n  - ✅ Outdoor long-video demo\n  - ✅ LingBot-World demo\n  - ✅ Aerial long-video demo\n\n---\n\n## ⚙️ Installation\n\n**1. Create conda environment**\n\n```bash\nconda create -n lingbot-map python=3.10 -y\nconda activate lingbot-map\n```\n\n**2. Install PyTorch (CUDA 12.8)**\n\n```bash\npip install torch==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128\n```\n\n> PyTorch 2.8.0 is the recommended version because NVIDIA Kaolin (required by the batch rendering pipeline) has prebuilt wheels for `torch-2.8.0_cu128`. If you only need `demo.py` you may use a newer PyTorch, but the batch renderer then requires building Kaolin from source.\n> For other CUDA versions, see [PyTorch Get Started](https://pytorch.org/get-started/locally/).\n\n**3. Install lingbot-map**\n\n```bash\npip install -e .\n```\n\n**4. Install FlashInfer (recommended)**\n\nFlashInfer provides paged KV cache attention for efficient streaming inference. It is a pure-Python package that JIT-compiles CUDA kernels on first use, so a single wheel works across CUDA/PyTorch versions:\n\n```bash\npip install --index-url https://pypi.org/simple flashinfer-python\n```\n\n> `--index-url https://pypi.org/simple` is only needed if your default pip index is an internal mirror that doesn't have `flashinfer-python`.\n> (Optional) For faster first-use, you can additionally install a CUDA-specific JIT cache: `pip install flashinfer-jit-cache -f https://flashinfer.ai/whl/cu128/flashinfer-jit-cache/`.\n> See [FlashInfer installation](https://docs.flashinfer.ai/installation.html) for details. If FlashInfer is not installed, the model falls back to SDPA (PyTorch native attention) via `--use_sdpa`.\n\n**5. Visualization dependencies (optional)**\n\n```bash\npip install -e \".[vis]\"\n```\n\n## 📦 Model Download\n\n| Model Name | Huggingface Repository | ModelScope Repository | Description |\n| :--- | :--- | :--- | :--- |\n| lingbot-map-long | [robbyant/lingbot-map](https://huggingface.co/robbyant/lingbot-map) | [Robbyant/lingbot-map](https://www.modelscope.cn/models/Robbyant/lingbot-map) | Better suited for long sequences and large scale scenes (Recommend). |\n| lingbot-map | [robbyant/lingbot-map](https://huggingface.co/robbyant/lingbot-map) | [Robbyant/lingbot-map](https://www.modelscope.cn/models/Robbyant/lingbot-map) | Balanced checkpoint — trade off all-around performance across short and long sequences. |\n| lingbot-map-stage1 | [robbyant/lingbot-map](https://huggingface.co/robbyant/lingbot-map) | [Robbyant/lingbot-map](https://www.modelscope.cn/models/Robbyant/lingbot-map) | Stage-1 training checkpoint of lingbot-map — can be loaded into the VGGT model for bidirectional inference (c2w). |\n\n> 🚧 **Coming soon:** we're training an stronger model that supports longer sequences — stay tuned.\n\n## 🚀 Quick Start\n\nAfter installation, run your first scene with one command:\n\n```bash\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/courthouse --mask_sky\n```\n\nThis launches an interactive [viser](https://github.com/nerfstudio-project/viser) viewer at `http://localhost:8080`. See [Interactive Demo](#-interactive-demo-demopy) below for the full set of scenes and flags, or jump to [Offline Rendering Pipeline](#-offline-rendering-pipeline-demo_renderbatch_demopy) for long-sequence batch rendering.\n\n## 🎬 Interactive Demo (`demo.py`)\n\nRun `demo.py` for interactive 3D visualization via a browser-based [viser](https://github.com/nerfstudio-project/viser) viewer (default `http://localhost:8080`).\n\n### Try the Example Scenes\n\nWe provide four example scenes in `example/` that you can run out of the box:\n```bash\n# courthouse scene\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/courthouse --mask_sky\n```\n\n\nhttps://github.com/user-attachments/assets/aa10f7ab-8024-43c7-92f8-d56159ec85c8\n\n\n\n\n\n\n```bash\n# University scene\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/university --mask_sky\n```\n\n\nhttps://github.com/user-attachments/assets/212a1744-6ff5-4ccf-9bd4-728608248b57\n\n\n\n\n\n\n\n```bash\n# Loop scene (loop closure trajectory)\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/loop\n```\n\n\nhttps://github.com/user-attachments/assets/5ae0a292-b081-40c6-838c-b7c1a0538d75\n\n\n\n\n\n```bash\n# Oxford scene with sky masking (outdoor, large scale scene)\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --image_folder example/oxford --mask_sky\n```\n\n\nhttps://github.com/user-attachments/assets/6b8daa95-9ed4-40b2-9902-7435779b886d\n\n\n\n\n\n\n#### 🎯 Featured: indoor walkthrough (~25 000 frames, 13 minutes)\n\n\n*Sequence is too long for the interactive viser viewer — this clip was rendered with the [Offline Rendering Pipeline](#-offline-rendering-pipeline-demo_renderbatch_demopy). See that section for the full command.*\n\nWe will provide more examples in the follow-up.\n\n### Streaming with Keyframe Interval\n\nUse `--keyframe_interval` to reduce KV cache memory by only keeping every N-th frame as a keyframe. Non-keyframe frames still produce predictions but are not stored in the cache. This is useful for long sequences which exceed 320 frames (We train with video RoPE on 320 views, so performance degrades when the KV cache stores more than 320 views. Using a keyframe strategy allows inference over longer sequences.).\n\n\n**Dataset:** Download the demo sequences from [robbyant/lingbot-map-demo](https://huggingface.co/datasets/robbyant/lingbot-map-demo/tree/main) on Hugging Face.\n\nExample run on the `travel` sequence from the dataset above (sky masking on, 4 camera optimization iterations, keyframe every 2 frames):\n\n```bash\npython demo.py \\\n    --image_folder /path/to/lingbot-map-demo/travel/ \\\n    --model_path /path/to/lingbot-map-long.pt \\\n    --mask_sky \\\n    --camera_num_iterations 4 \\\n    --keyframe_interval 2\n```\n\n\nhttps://github.com/user-attachments/assets/d350b590-d036-4363-af8c-7af3918338ef\n\n\n\n> **Note on inference range.** Our method does not perform state resetting by default, so the maximum inference range is bounded by the longest distance seen during training on the dataset. Beyond that distance, state resetting becomes necessary. If you observe pose collapse, switch to windowed mode (`--mode windowed`) — in most cases tuning `--keyframe_interval` alone is enough and the rest of the windowed parameters can stay at their defaults.\n\n\n### Windowed Inference (for long sequences, >3000 frames)\n\n```bash\npython demo.py --model_path /path/to/lingbot-map-long.pt \\\n    --video_path video.mp4 --fps 10 \\\n    --mode windowed --window_size 128 --overlap_keyframes 16 --keyframe_interval 2 \n```\n\n\n### Sky Masking\n\nSky masking uses an ONNX sky segmentation model to filter out sky points from the reconstructed point cloud, which improves visualization quality for outdoor scenes.\n\n**Setup:**\n\n```bash\n# Install onnxruntime (required)\npip install onnxruntime        # CPU\n# or\npip install onnxruntime-gpu    # GPU (faster for large image sets)\n```\n\nThe sky segmentation model (`skyseg.onnx`) will be automatically downloaded from [HuggingFace](https://huggingface.co/JianyuanWang/skyseg/resolve/main/skyseg.onnx) on first use.\n\n**Usage:**\n\n```bash\npython demo.py --model_path /path/to/checkpoint.pt \\\n    --image_folder /path/to/images/ --mask_sky\n```\n\nSky masks are cached in `<image_folder>_sky_masks/` so subsequent runs skip regeneration. You can also specify a custom cache directory with `--sky_mask_dir`, or save side-by-side mask visualizations with `--sky_mask_visualization_dir`:\n\n```bash\npython demo.py --model_path /path/to/checkpoint.pt \\\n    --image_folder /path/to/images/ --mask_sky \\\n    --sky_mask_dir /path/to/cached_masks/ \\\n    --sky_mask_visualization_dir /path/to/mask_viz/\n```\n\n### Visualization Options\n\n| Argument | Default | Description |\n|:---|:---|:---|\n| `--port` | `8080` | Viser viewer port |\n| `--conf_threshold` | `1.5` | V",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"lingbot-map\"\nversion = \"0.1.0\"\ndescription = \"LingBot-Map: Geometric Context Transformer for Streaming 3D Reconstruction\"\nrequires-python = \">= 3.10\"\ndependencies = [\n    \"Pillow\",\n    \"huggingface_hub\",\n    \"einops\",\n    \"safetensors\",\n    \"opencv-python\",\n    \"tqdm\",\n    \"scipy\"\n]\n\n[project.optional-dependencies]\nvis = [\"viser>=0.2.23\", \"trimesh\", \"matplotlib\", \"onnxruntime\", \"requests\"]\ndemo = [\"lingbot-map[vis]\"]\n\n[build-system]\nrequires = [\"setuptools>=61.0\", \"wheel\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[tool.setuptools.packages.find]\nwhere = [\".\"]\ninclude = [\"lingbot_map*\"]\n",
    "strategic_keywords": [
      "memory",
      "runtime",
      "eval",
      "inference"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "owner": "commaai",
    "name": "openpilot",
    "full_name": "commaai/openpilot",
    "url": "https://github.com/commaai/openpilot",
    "description": "openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300+ supported cars.",
    "language": "Python",
    "total_stars": 62744,
    "forks": 11111,
    "stars_this_period": 465,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "advanced-driver-assistance-systems",
        "driver-assistance-systems",
        "robotics"
      ],
      "license": "MIT",
      "open_issues": 144,
      "created_at": "2016-11-24T01:33:30Z",
      "pushed_at": "2026-06-29T21:11:23Z",
      "homepage": "https://comma.ai/openpilot",
      "default_branch": "master",
      "forks": 11111,
      "watchers": 1318,
      "archived": false,
      "size_kb": 1152203
    },
    "readme_content": "<div align=\"center\" style=\"text-align: center;\">\n\n<h1>openpilot</h1>\n\n<p>\n  <b>openpilot is an operating system for robotics.</b>\n  <br>\n  Currently, it upgrades the driver assistance system in 300+ supported cars.\n</p>\n\n<h3>\n  <a href=\"https://docs.comma.ai\">Docs</a>\n  <span> · </span>\n  <a href=\"https://docs.comma.ai/contributing/roadmap/\">Roadmap</a>\n  <span> · </span>\n  <a href=\"https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md\">Contribute</a>\n  <span> · </span>\n  <a href=\"https://discord.comma.ai\">Community</a>\n  <span> · </span>\n  <a href=\"https://comma.ai/shop\">Try it on a comma four</a>\n</h3>\n\nQuick start: `bash <(curl -fsSL openpilot.comma.ai)`\n\n[![openpilot tests](https://github.com/commaai/openpilot/actions/workflows/tests.yaml/badge.svg)](https://github.com/commaai/openpilot/actions/workflows/tests.yaml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![X Follow](https://img.shields.io/twitter/follow/comma_ai)](https://x.com/comma_ai)\n[![Discord](https://img.shields.io/discord/469524606043160576)](https://discord.comma.ai)\n\n</div>\n\n<table>\n  <tr>\n    <td><a href=\"https://youtu.be/NmBfgOanCyk\" title=\"Video By Greer Viau\"><img src=\"https://github.com/commaai/openpilot/assets/8762862/2f7112ae-f748-4f39-b617-fabd689c3772\"></a></td>\n    <td><a href=\"https://youtu.be/VHKyqZ7t8Gw\" title=\"Video By Logan LeGrand\"><img src=\"https://github.com/commaai/openpilot/assets/8762862/92351544-2833-40d7-9e0b-7ef7ae37ec4c\"></a></td>\n    <td><a href=\"https://youtu.be/SUIZYzxtMQs\" title=\"A drive to Taco Bell\"><img src=\"https://github.com/commaai/openpilot/assets/8762862/05ceefc5-2628-439c-a9b2-89ce77dc6f63\"></a></td>\n  </tr>\n</table>\n\n\nUsing openpilot in a car\n------\n\nTo use openpilot in a car, you need four things:\n1. **Supported Device:** a comma four, available at [comma.ai/shop/comma-four](https://www.comma.ai/shop/comma-four).\n2. **Software:** The setup procedure for the comma four allows users to enter a URL for custom software. Use the URL `openpilot.comma.ai` to install the release version.\n3. **Supported Car:** Ensure that you have one of [the 300+ supported cars](docs/CARS.md).\n4. **Car Harness:** You will also need a [car harness](https://comma.ai/shop/car-harness) to connect your comma four to your car.\n\nWe have detailed instructions for [how to install the harness and device in a car](https://comma.ai/setup). Note that it's possible to run openpilot on [other hardware](https://blog.comma.ai/self-driving-car-for-free/), although it's not plug-and-play.\n\n\n### Branches\n\nRunning `master` and other branches directly is supported, but it's recommended to run one of the following prebuilt branches:\n\n| comma four branch      | comma 3X branch        | URL                                    | description                                                                         |\n|------------------------|------------------------|----------------------------------------|-------------------------------------------------------------------------------------|\n| `release-mici`         | `release-tizi`         | openpilot.comma.ai                     | This is openpilot's release branch.                                                 |\n| `release-mici-staging` | `release-tizi-staging` | openpilot-test.comma.ai                | This is the staging branch for releases. Use it to get new releases slightly early. |\n| `nightly`              | `nightly`              | openpilot-nightly.comma.ai             | This is the bleeding edge development branch. Do not expect this to be stable.      |\n| `nightly-dev`          | `nightly-dev`          | installer.comma.ai/commaai/nightly-dev | Same as nightly, but includes experimental development features for some cars.      |\n\nTo start developing openpilot\n------\n\nopenpilot is developed by [comma](https://comma.ai/) and by users like you. We welcome both pull requests and issues on [GitHub](http://github.com/commaai/openpilot).\n\n* Join the [community Discord](https://discord.comma.ai)\n* Check out [the contributing docs](docs/CONTRIBUTING.md)\n* Check out the [openpilot tools](openpilot/tools/)\n* Code documentation lives at https://docs.comma.ai\n* Information about running openpilot lives on the [community wiki](https://github.com/commaai/openpilot/wiki)\n\nWant to get paid to work on openpilot? [comma is hiring](https://comma.ai/jobs#open-positions) and offers lots of [bounties](https://comma.ai/bounties) for external contributors.\n\nSafety and Testing\n----\n\n* openpilot observes [ISO26262](https://en.wikipedia.org/wiki/ISO_26262) guidelines, see [SAFETY.md](docs/SAFETY.md) for more details.\n* openpilot has software-in-the-loop [tests](.github/workflows/tests.yaml) that run on every commit.\n* The code enforcing the safety model lives in panda and is written in C, see [code rigor](https://github.com/commaai/panda#code-rigor) for more details.\n* panda has software-in-the-loop [safety tests](https://github.com/commaai/panda/tree/master/tests/safety).\n* Internally, we have a hardware-in-the-loop Jenkins test suite that builds and unit tests the various processes.\n* panda has additional hardware-in-the-loop [tests](https://github.com/commaai/panda/blob/master/Jenkinsfile).\n* We run the latest openpilot in a testing closet containing 10 comma devices continuously replaying routes.\n\n<details>\n<summary>MIT Licensed</summary>\n\nopenpilot is released under the MIT license. Some parts of the software are released under other licenses as specified.\n\nAny user of this software shall indemnify and hold harmless Comma.ai, Inc. and its directors, officers, employees, agents, stockholders, affiliates, subcontractors and customers from and against all allegations, claims, actions, suits, demands, damages, liabilities, obligations, losses, settlements, judgments, costs and expenses (including without limitation attorneys’ fees and costs) which arise out of, relate to or result from any use of this software by user.\n\n**THIS IS ALPHA QUALITY SOFTWARE FOR RESEARCH PURPOSES ONLY. THIS IS NOT A PRODUCT.\nYOU ARE RESPONSIBLE FOR COMPLYING WITH LOCAL LAWS AND REGULATIONS.\nNO WARRANTY EXPRESSED OR IMPLIED.**\n</details>\n\n<details>\n<summary>User Data and comma Account</summary>\n\nBy default, openpilot uploads driving data to our servers. You can also access your data through [comma connect](https://connect.comma.ai/). We use your data to train better models and improve openpilot for everyone.\n\nopenpilot is open source software, and users can disable data collection if they wish.\n\nopenpilot logs the road-facing cameras, CAN, GPS, IMU, magnetometer, thermal sensors, crashes, and operating system logs.\nThe driver-facing camera and microphone are only logged if you explicitly opt-in in settings.\n\nBy using openpilot, you agree to [our Privacy Policy](https://comma.ai/privacy). You understand that use of this software or its related services will generate certain types of user data, which may be logged and stored at the sole discretion of comma. By accepting this agreement, you grant an irrevocable, perpetual, worldwide right to comma for the use of this data.\n</details>\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"openpilot\"\nrequires-python = \">= 3.12.3, < 3.13\"\nlicense = {text = \"MIT License\"}\nversion = \"0.1.0\"\ndescription = \"an open source driver assistance system\"\nauthors = [\n  {name = \"Vehicle Researcher\", email=\"user@comma.ai\"}\n]\n\ndependencies = [\n  # multiple users\n  \"sounddevice\",  # micd + soundd\n  \"pyserial\",     # pigeond + qcomgpsd\n  \"requests\",     # many one-off uses\n  \"sympy\",        # rednose + friends\n  \"crcmod-plus\",  # cars + qcomgpsd\n  \"tqdm\",         # cars (fw_versions.py) on start + many one-off uses\n\n  # core\n  \"cffi\",\n  \"scons\",\n  \"pycapnp==2.1.0\",  # 2.2 introduces a memory leak due to cyclic references\n  \"Cython\",\n  \"setuptools\",\n  \"numpy >=2.0\",\n\n  # vendored native dependencies\n  \"bzip2 @ git+https://github.com/commaai/dependencies.git@release-bzip2#subdirectory=bzip2\",\n  \"bootstrap-icons @ git+https://github.com/commaai/dependencies.git@release-bootstrap-icons#subdirectory=bootstrap-icons\",\n  \"capnproto @ git+https://github.com/commaai/dependencies.git@release-capnproto#subdirectory=capnproto\",\n  \"catch2 @ git+https://github.com/commaai/dependencies.git@release-catch2#subdirectory=catch2\",\n  \"acados @ git+https://github.com/commaai/dependencies.git@release-acados#subdirectory=acados\",\n  \"eigen @ git+https://github.com/commaai/dependencies.git@release-eigen#subdirectory=eigen\",\n  \"ffmpeg @ git+https://github.com/commaai/dependencies.git@release-ffmpeg#subdirectory=ffmpeg\",\n  \"libjpeg @ git+https://github.com/commaai/dependencies.git@release-libjpeg#subdirectory=libjpeg\",\n  \"libyuv @ git+https://github.com/commaai/dependencies.git@release-libyuv#subdirectory=libyuv\",\n  \"zstd @ git+https://github.com/commaai/dependencies.git@release-zstd#subdirectory=zstd\",\n  \"ncurses @ git+https://github.com/commaai/dependencies.git@release-ncurses#subdirectory=ncurses\",\n  \"zeromq @ git+https://github.com/commaai/dependencies.git@release-zeromq#subdirectory=zeromq\",\n  \"libusb @ git+https://github.com/commaai/dependencies.git@release-libusb#subdirectory=libusb\",\n  \"json11 @ git+https://github.com/commaai/dependencies.git@release-json11#subdirectory=json11\",\n  \"git-lfs @ git+https://github.com/commaai/dependencies.git@release-git-lfs#subdirectory=git-lfs\",\n  \"gcc-arm-none-eabi @ git+https://github.com/commaai/dependencies.git@release-gcc-arm-none-eabi#subdirectory=gcc-arm-none-eabi\",\n  \"xvfb @ git+https://github.com/commaai/dependencies.git@release-xvfb#subdirectory=xvfb\",\n\n  # body / webrtcd\n  \"av\",\n  \"aiortc\",\n\n  # panda\n  \"libusb1\",\n  \"spidev; platform_system == 'Linux'\",\n\n  # logging\n  \"pyzmq\",\n  \"sentry-sdk\",\n  \"xattr\",  # used in place of 'os.getxattr' for macOS compatibility\n\n  # athena\n  \"PyJWT\",\n  \"json-rpc\",\n  \"websocket_client\",\n\n  # joystickd\n  \"inputs\",\n\n  # these should be removed\n  \"psutil\",\n  \"pycryptodome\", # used in panda, body, and a test\n  \"setproctitle\",\n\n  # logreader\n  \"zstandard\",\n\n  # ui\n  \"raylib @ git+https://github.com/commaai/dependencies.git@release-raylib#subdirectory=raylib\",\n  \"qrcode\",\n  \"jeepney\",\n  \"pillow\",\n]\n\n[project.optional-dependencies]\ndocs = [\n  \"Jinja2\",\n  \"zensical\",\n]\n\ntesting = [\n  \"coverage\",\n  \"hypothesis ==6.47.*\",\n  \"ty\",\n  \"pytest\",\n  \"pytest-cpp\",\n  \"pytest-subtests\",\n  # https://github.com/pytest-dev/pytest-xdist/pull/1229\n  \"pytest-xdist @ git+https://github.com/sshane/pytest-xdist@2b4372bd62699fb412c4fe2f95bf9f01bd2018da\",\n  \"pytest-mock\",\n  \"ruff\",\n  \"codespell\",\n  \"pre-commit-hooks\",\n]\n\ndev = [\n  \"matplotlib\",\n]\n\ntools = [\n  \"imgui @ git+https://github.com/commaai/dependencies.git@release-imgui#subdirectory=imgui\",\n\n  # this can be added back once it's stripped down some more\n  #\"metadrive-simulator @ git+https://github.com/commaai/metadrive.git@minimal ; (platform_machine != 'aarch64')\",\n]\n\n[project.urls]\nHomepage = \"https://github.com/commaai/openpilot\"\n\n[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[tool.hatch.build.targets.wheel]\npackages = [\n  \"openpilot\",\n  \"msgq\",\n  \"opendbc\",\n  \"panda\",\n  \"rednose\",\n  \"teleoprtc\",\n  \"tinygrad\",\n]\n\n[tool.hatch.metadata]\nallow-direct-references = true\n\n[tool.pytest.ini_options]\nminversion = \"6.0\"\naddopts = \"-Werror --strict-config --strict-markers --durations=10 -n auto --dist=loadgroup\"\ncpp_files = \"test_*\"\ncpp_harness = \"openpilot/selfdrive/test/cpp_harness.py\"\npython_files = \"test_*.py\"\nmarkers = [\n  \"slow: tests that take awhile to run and can be skipped with -m 'not slow'\",\n  \"tici: tests that are only meant to run on the C3/C3X\",\n  \"skip_tici_setup: mark test to skip tici setup fixture\",\n  \"nocapture: don't capture test output\",\n  \"shared_download_cache: share download cache between tests\",\n  \"xdist_group_class_property: group tests by a property of the class that contains them\",\n]\ntestpaths = [\n  \"openpilot\",\n]\n\n[tool.codespell]\nquiet-level = 3\n# if you've got a short variable name that's getting flagged, add it here\nignore-words-list = \"bu,ro,te,ue,alo,hda,ois,nam,nams,ned,som,parm,setts,inout,warmup,bumb,nd,sie,preints,whit,indexIn,ws,uint,grey,deque,stdio,",
    "strategic_keywords": [
      "memory",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 16,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 91
    },
    "strategic_score": 91
  },
  {
    "owner": "facebook",
    "name": "astryx",
    "full_name": "facebook/astryx",
    "url": "https://github.com/facebook/astryx",
    "description": "An open source design system that's fully customizable and agent ready",
    "language": "TypeScript",
    "total_stars": 1209,
    "forks": 76,
    "stars_this_period": 394,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 125,
      "created_at": "2026-01-09T16:20:32Z",
      "pushed_at": "2026-06-29T21:47:19Z",
      "homepage": "http://astryx.atmeta.com",
      "default_branch": "main",
      "forks": 76,
      "watchers": 4,
      "archived": false,
      "size_kb": 295672
    },
    "readme_content": "<!-- SYNC CONTRACT: Architecture changes require documentation updates. -->\n\n# Astryx\n\nAn open source design system that's fully customizable and built for how we build now — by people and the agents working alongside them.\n\n> **Currently in Beta** · Built on [React](https://react.dev) and [StyleX](https://stylexjs.com)\n\n## Overview\n\nAstryx is an open source design system that grew inside Meta over the last eight years, where it became the most-used and largest design system in the company — powering 13,000+ apps and shaped by the engineers, designers, and product teams who depend on it every day.\n\nIt ships 150+ accessible components, brand-level theming, dark mode, ready-to-ship templates, and a CLI as one cohesive system. You import pre-built CSS and use typed React components — no build plugin, no styling library to adopt — and both people and AI assistants build with the same tooling.\n\n**What makes Astryx different:**\n\n- **Open internals.** Components are built to be composed at any level, not locked behind a closed top-level API. The building blocks you'd reach for are exported directly, and when you need to go deeper, swizzle ejects a component's full source into your project to own.\n- **No styling lock-in.** Astryx authors its styles with StyleX, but that's invisible to consumers. Override with `className` using Tailwind, CSS modules, or plain CSS — whatever your project already uses.\n- **Customize without wrapping.** A theme is a set of CSS custom property overrides, so a designer can make Astryx unmistakably theirs without forking or wrapping component source.\n- **Built for people and agents.** The API, docs, and CLI are designed together so a person and an AI assistant build the same way, from the same reference.\n\n## Getting Started\n\nInstall Astryx and a theme:\n\n```bash\n# npm\nnpm install @astryxdesign/core @astryxdesign/theme-neutral\nnpm install -D @astryxdesign/cli\n\n# pnpm\npnpm add @astryxdesign/core @astryxdesign/theme-neutral\npnpm add -D @astryxdesign/cli\n\n# yarn\nyarn add @astryxdesign/core @astryxdesign/theme-neutral\nyarn add -D @astryxdesign/cli\n```\n\nThe simplest setup is a few CSS imports plus a theme provider — no build plugin, no PostCSS or Babel config. See the **[@astryxdesign/core README](packages/core/README.md#quick-start)** for the full guide (Next.js, Tailwind, Vite, and CDN).\n\nFor reliable CLI access, add a script to your `package.json`:\n\n```json\n\"scripts\": {\n  \"astryx\": \"node node_modules/@astryxdesign/cli/bin/astryx.mjs\"\n}\n```\n\nThen use it as `npm run astryx -- component --list`. This avoids path errors when AI assistants or new developers invoke the CLI directly.\n\n## Packages\n\n| Package                                    | Description                                                                                          | README                             |\n| ------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------- |\n| [`@astryxdesign/core`](packages/core)      | Components, theme system, and utilities                                                              | [README](packages/core/README.md)  |\n| [`@astryxdesign/cli`](packages/cli)        | CLI tooling: component docs, templates, scaffolding, themes, and codemods                            | [README](packages/cli/README.md)   |\n| [`@astryxdesign/build`](packages/build)    | Build plugins for StyleX source builds                                                               | [README](packages/build/README.md) |\n| [`@astryxdesign/theme-*`](packages/themes) | Seven ready-made, fully customizable themes (neutral, butter, chocolate, matcha, stone, gothic, y2k) | [README](packages/themes)          |\n\n> `@astryxdesign/lab` (experimental components) and `@astryxdesign/vega` (Vega/Vega-Lite chart wrapper) are used internally for Storybook and the sandbox; they are not yet published to npm.\n\n## Principles\n\nThese are the promises Astryx makes to the people building on it.\n\n- **Guidance over enforcement.** Components give you capability rather than guardrails that fight you. Design opinions live in docs and examples — if you pass a value, the component renders it.\n- **Strong, documented conventions.** Every component follows the same naming, prop, and composition rules, and every one is thoroughly documented — so once you've learned a few, the rest feel familiar, and both people and AI can predict how an unfamiliar component behaves.\n- **One system for humans and AI.** The API, conventions, docs, and CLI are designed together so people and AI assistants build the same way. Every change that made Astryx easier for AI made it easier for people too.\n- **Earned by measurement.** We test conventions rather than assert them, hold the results loosely, and revisit them when a new situation proves them wrong.\n\n## Architecture\n\n### Foundations\n\nThe building blocks for visually cohesive and accessible interfaces: typography, color, layout, and accessibility.\n\n### Components\n\nA library of 150+ reusable UI building blocks with full TypeScript support.\n\n### Patterns\n\nBattle-tested design solutions for common interactions and workflows: table pages, detail page layouts, form wizards, navigation patterns, data entry flows.\n\n## Project Structure\n\n| Directory   | Purpose                                                     |\n| ----------- | ----------------------------------------------------------- |\n| `apps/`     | Example apps, the docsite, and Storybook                    |\n| `packages/` | Published packages: core, cli, build, themes                |\n| `internal/` | Internal tooling: test utilities, eslint plugin, vibe tests |\n\n## Contributing\n\nWe welcome contributions! See **[CONTRIBUTING.md](CONTRIBUTING.md)** for the full guide.\n\nQuick start for contributors: this repo uses **pnpm 10** via [Corepack](https://nodejs.org/api/corepack.html). Enable it once and the right pnpm version installs automatically:\n\n```bash\ncorepack enable\npnpm install\n```\n\n## License\n\nMIT\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"xds\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"build\": \"pnpm -F @astryxdesign/build build && pnpm -F @astryxdesign/core build && pnpm -F @astryxdesign/vega build && pnpm -F @astryxdesign/theme-neutral build && pnpm -F @astryxdesign/theme-matcha build && pnpm -F @astryxdesign/theme-stone build && pnpm -F @astryxdesign/theme-gothic build && pnpm -F @astryxdesign/theme-chocolate build && pnpm -F @astryxdesign/theme-y2k build && pnpm -F @astryxdesign/theme-butter build && pnpm bundle:cli-themes\",\n    \"bundle:cli-themes\": \"node scripts/generate-cli-themes.mjs\",\n    \"dev\": \"pnpm -F @astryxdesign/storybook dev\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:coverage\": \"vitest --coverage\",\n    \"check:package-boundaries\": \"node scripts/check-package-boundaries.js\",\n    \"check:repo\": \"pnpm check:sync && pnpm check:package-boundaries && pnpm check:changesets && pnpm check:demo-media\",\n    \"check:changesets\": \"node scripts/check-changesets.mjs\",\n    \"check:demo-media\": \"node scripts/check-demo-media.mjs\",\n    \"check:sync\": \"node scripts/check-sync.js\",\n    \"lint\": \"pnpm check:repo && eslint . --cache\",\n    \"lint:strict\": \"pnpm check:repo && ASTRYX_STRICT_LINT=1 eslint . --cache\",\n    \"storybook\": \"pnpm -F @astryxdesign/storybook dev\",\n    \"storybook:build\": \"pnpm -F @astryxdesign/storybook build\",\n    \"docs\": \"pnpm -F @astryxdesign/docs dev\",\n    \"sync:exports\": \"node scripts/sync-exports.js\",\n    \"sync:exports:check\": \"node scripts/sync-exports.js --check\",\n    \"xds\": \"pnpm -F @astryxdesign/cli xds\",\n    \"package:source\": \"node scripts/package-source.js\",\n    \"changeset\": \"changeset\",\n    \"changeset:new\": \"node scripts/changeset-new.mjs\",\n    \"version-packages\": \"changeset version && node scripts/format-changelogs.mjs\",\n    \"format-changelogs\": \"node scripts/format-changelogs.mjs\",\n    \"setup-trusted-publishing\": \"node scripts/npm/setup-trusted-publishing.mjs\",\n    \"verify-exports\": \"node scripts/verify-exports.mjs\",\n    \"release\": \"pnpm build && changeset publish\",\n    \"prepare\": \"husky install\",\n    \"dev:sandbox\": \"pnpm -F @astryxdesign/core build && pnpm -F @astryxdesign/sandbox dev\",\n    \"dev:sandbox:source\": \"ASTRYX_SOURCE=1 pnpm -F @astryxdesign/sandbox dev\"\n  },\n  \"devDependencies\": {\n    \"@axe-core/playwright\": \"^4.11.3\",\n    \"@changesets/cli\": \"^2.31.0\",\n    \"@eslint-react/eslint-plugin\": \"^5.9.1\",\n    \"@eslint/js\": \"^10.0.1\",\n    \"@playwright/test\": \"^1.61.0\",\n    \"@testing-library/user-event\": \"^14.5.0\",\n    \"@types/node\": \"^25.9.3\",\n    \"@types/react\": \"^19.2.17\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"@vitejs/plugin-react\": \"^4.3.0\",\n    \"@vitest/coverage-v8\": \"^2.1.0\",\n    \"esbuild\": \"^0.28.1\",\n    \"eslint\": \"^10.5.0\",\n    \"eslint-plugin-react-compiler\": \"19.1.0-rc.2\",\n    \"husky\": \"^9.1.7\",\n    \"jscodeshift\": \"^17.3.0\",\n    \"jsdom\": \"^27.4.0\",\n    \"prettier\": \"^3.8.4\",\n    \"react\": \"^19.2.7\",\n    \"react-dom\": \"^19.2.7\",\n    \"tsup\": \"^8.3.0\",\n    \"typescript\": \"^6.0.3\",\n    \"typescript-eslint\": \"^8.61.1\",\n    \"vite-plugin-singlefile\": \"^2.3.3\",\n    \"vitest\": \"^2.1.0\"\n  },\n  \"packageManager\": \"pnpm@10.34.1\",\n  \"workspaces\": [\n    \"apps/*\",\n    \"packages/*\",\n    \"packages/themes/*\",\n    \"internal/*\"\n  ],\n  \"lint-staged\": {\n    \"*.{ts,tsx}\": \"eslint --cache --fix\",\n    \"*.{ts,tsx,md}\": \"prettier --write\"\n  },\n  \"pnpm\": {\n    \"overrides\": {\n      \"prettier\": \"^3.8.4\",\n      \"postcss\": \"^8.5.10\",\n      \"picomatch\": \"^4.0.4\",\n      \"micromatch>picomatch\": \"^2.3.2\",\n      \"anymatch>picomatch\": \"^2.3.2\",\n      \"minimatch\": \"^9.0.7\",\n      \"dompurify\": \"^3.4.11\",\n      \"vite\": \"^6.4.3\",\n      \"tmp\": \">=0.2.6\",\n      \"esbuild\": \">=0.28.1\",\n      \"@babel/core\": \"^7.29.6\",\n      \"hono\": \"^4.12.25\"\n    },\n    \"onlyBuiltDependencies\": [\n      \"esbuild\",\n      \"@swc/core\",\n      \"sharp\",\n      \"@parcel/watcher\",\n      \"core-js\",\n      \"puppeteer\"\n    ]\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "rag"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 8,
      "total": 92
    },
    "strategic_score": 92
  },
  {
    "owner": "TauricResearch",
    "name": "TradingAgents",
    "full_name": "TauricResearch/TradingAgents",
    "url": "https://github.com/TauricResearch/TradingAgents",
    "description": "TradingAgents: Multi-Agents LLM Financial Trading Framework",
    "language": "Python",
    "total_stars": 89748,
    "forks": 17320,
    "stars_this_period": 373,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "agent",
        "finance",
        "llm",
        "multiagent",
        "trading"
      ],
      "license": "Apache-2.0",
      "open_issues": 284,
      "created_at": "2024-12-28T03:31:08Z",
      "pushed_at": "2026-06-22T02:05:09Z",
      "homepage": "https://arxiv.org/pdf/2412.20138",
      "default_branch": "main",
      "forks": 17320,
      "watchers": 662,
      "archived": false,
      "size_kb": 5058
    },
    "readme_content": "<p align=\"center\">\n  <img src=\"assets/TauricResearch.png\" style=\"width: 60%; height: auto;\">\n</p>\n\n<div align=\"center\" style=\"line-height: 1;\">\n  <a href=\"https://arxiv.org/abs/2412.20138\" target=\"_blank\"><img alt=\"arXiv\" src=\"https://img.shields.io/badge/arXiv-2412.20138-B31B1B?logo=arxiv\"/></a>\n  <a href=\"https://discord.com/invite/hk9PGKShPK\" target=\"_blank\"><img alt=\"Discord\" src=\"https://img.shields.io/badge/Discord-TradingResearch-7289da?logo=discord&logoColor=white&color=7289da\"/></a>\n  <a href=\"./assets/wechat.png\" target=\"_blank\"><img alt=\"WeChat\" src=\"https://img.shields.io/badge/WeChat-TauricResearch-brightgreen?logo=wechat&logoColor=white\"/></a>\n  <a href=\"https://x.com/TauricResearch\" target=\"_blank\"><img alt=\"X Follow\" src=\"https://img.shields.io/badge/X-TauricResearch-white?logo=x&logoColor=white\"/></a>\n  <br>\n  <a href=\"https://github.com/TauricResearch/\" target=\"_blank\"><img alt=\"Community\" src=\"https://img.shields.io/badge/Join_GitHub_Community-TauricResearch-14C290?logo=discourse\"/></a>\n</div>\n\n<div align=\"center\">\n  <!-- Keep these links. Translations will automatically update with the README. -->\n  <a href=\"https://www.readme-i18n.com/TauricResearch/TradingAgents?lang=de\">Deutsch</a> | \n  <a href=\"https://www.readme-i18n.com/TauricResearch/TradingAgents?lang=es\">Español</a> | \n  <a href=\"https://www.readme-i18n.com/TauricResearch/TradingAgents?lang=fr\">français</a> | \n  <a href=\"https://www.readme-i18n.com/TauricResearch/TradingAgents?lang=ja\">日本語</a> | \n  <a href=\"https://www.readme-i18n.com/TauricResearch/TradingAgents?lang=ko\">한국어</a> | \n  <a href=\"https://www.readme-i18n.com/TauricResearch/TradingAgents?lang=pt\">Português</a> | \n  <a href=\"https://www.readme-i18n.com/TauricResearch/TradingAgents?lang=ru\">Русский</a> | \n  <a href=\"https://www.readme-i18n.com/TauricResearch/TradingAgents?lang=zh\">中文</a>\n</div>\n\n---\n\n# TradingAgents: Multi-Agents LLM Financial Trading Framework\n\n## News\n- [2026-06] **TradingAgents v0.3.0** released with a verified data-access contract, an expanded provider registry (NVIDIA, Kimi, Groq, Mistral, Bedrock, and any OpenAI-compatible endpoint), FRED and Polymarket data vendors, a current-generation model catalog, and a CI gate. See [CHANGELOG.md](CHANGELOG.md) for the full list.\n- [2026-05] **TradingAgents v0.2.5** released with the grounded Sentiment Analyst, GPT-5.5 etc. model coverage, Qwen/GLM/MiniMax dual-region support, `TRADINGAGENTS_*` env-var configurability with API-key auto-detection, remote Ollama support, non-US alpha benchmarks, and ticker path-traversal hardening.\n- [2026-04] **TradingAgents v0.2.4** released with structured-output agents (Research Manager, Trader, Portfolio Manager), LangGraph checkpoint resume, persistent decision log, DeepSeek/Qwen/GLM/Azure provider support, Docker, and a Windows UTF-8 encoding fix.\n- [2026-03] **TradingAgents v0.2.3** released with multi-language support, GPT-5.4 family models, unified model catalog, backtesting date fidelity, and proxy support.\n- [2026-03] **TradingAgents v0.2.2** released with GPT-5.4/Gemini 3.1/Claude 4.6 model coverage, five-tier rating scale, OpenAI Responses API, Anthropic effort control, and cross-platform stability.\n- [2026-02] **TradingAgents v0.2.0** released with multi-provider LLM support (GPT-5.x, Gemini 3.x, Claude 4.x, Grok 4.x) and improved system architecture.\n- [2026-01] **Trading-R1** [Technical Report](https://arxiv.org/abs/2509.11420) released, with [Terminal](https://github.com/TauricResearch/Trading-R1) expected to land soon.\n\n<div align=\"center\">\n<a href=\"https://www.star-history.com/#TauricResearch/TradingAgents&Date\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=TauricResearch/TradingAgents&type=Date&theme=dark\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=TauricResearch/TradingAgents&type=Date\" />\n   <img alt=\"TradingAgents Star History\" src=\"https://api.star-history.com/svg?repos=TauricResearch/TradingAgents&type=Date\" style=\"width: 80%; height: auto;\" />\n </picture>\n</a>\n</div>\n\n> 🎉 **TradingAgents** officially released! We have received numerous inquiries about the work, and we would like to express our thanks for the enthusiasm in our community.\n>\n> So we decided to fully open-source the framework. Looking forward to building impactful projects with you!\n\n<div align=\"center\">\n\n🚀 [TradingAgents](#tradingagents-framework) | ⚡ [Installation & CLI](#installation-and-cli) | 🎬 [Demo](https://www.youtube.com/watch?v=90gr5lwjIho) | 📦 [Package Usage](#tradingagents-package) | 🤝 [Contributing](#contributing) | 📄 [Citation](#citation)\n\n</div>\n\n## TradingAgents Framework\n\nTradingAgents is a multi-agent trading framework that mirrors the dynamics of real-world trading firms. By deploying specialized LLM-powered agents: from fundamental analysts, sentiment experts, and technical analysts, to trader, risk management team, the platform collaboratively evaluates market conditions and informs trading decisions. Moreover, these agents engage in dynamic discussions to pinpoint the optimal strategy.\n\n<p align=\"center\">\n  <img src=\"assets/schema.png\" style=\"width: 100%; height: auto;\">\n</p>\n\n> TradingAgents framework is designed for research purposes. Trading performance may vary based on many factors, including the chosen backbone language models, model temperature, trading periods, the quality of data, and other non-deterministic factors. [It is not intended as financial, investment, or trading advice.](https://tauric.ai/disclaimer/)\n\nOur framework decomposes complex trading tasks into specialized roles.\n\n### Analyst Team\n- Fundamentals Analyst: Evaluates company financials and performance metrics, identifying intrinsic values and potential red flags.\n- Sentiment Analyst: Aggregates news headlines, StockTwits, and Reddit chatter into a single sentiment read to gauge short-term market mood.\n- News Analyst: Monitors global news and macroeconomic indicators, interpreting the impact of events on market conditions.\n- Technical Analyst: Utilizes technical indicators (like MACD and RSI) to detect trading patterns and forecast price movements.\n\n<p align=\"center\">\n  <img src=\"assets/analyst.png\" width=\"100%\" style=\"display: inline-block; margin: 0 2%;\">\n</p>\n\n### Researcher Team\n- Comprises both bullish and bearish researchers who critically assess the insights provided by the Analyst Team. Through structured debates, they balance potential gains against inherent risks.\n\n<p align=\"center\">\n  <img src=\"assets/researcher.png\" width=\"70%\" style=\"display: inline-block; margin: 0 2%;\">\n</p>\n\n### Trader Agent\n- Composes reports from the analysts and researchers to make informed trading decisions, determining the timing and magnitude of trades.\n\n<p align=\"center\">\n  <img src=\"assets/trader.png\" width=\"70%\" style=\"display: inline-block; margin: 0 2%;\">\n</p>\n\n### Risk Management and Portfolio Manager\n- Continuously evaluates portfolio risk by assessing market volatility, liquidity, and other risk factors. The risk management team evaluates and adjusts trading strategies, providing assessment reports to the Portfolio Manager for final decision.\n- The Portfolio Manager approves/rejects the transaction proposal. If approved, the order will be sent to the simulated exchange and executed.\n\n<p align=\"center\">\n  <img src=\"assets/risk.png\" width=\"70%\" style=\"display: inline-block; margin: 0 2%;\">\n</p>\n\n## Installation and CLI\n\n### Installation\n\nClone TradingAgents:\n```bash\ngit clone https://github.com/TauricResearch/TradingAgents.git\ncd TradingAgents\n```\n\nCreate a virtual environment in any of your favorite environment managers:\n```bash\nconda create -n tradingagents python=3.12\nconda activate tradingagents\n```\n\nInstall the package and its dependencies:\n```bash\npip install .\n```\n\n### Docker\n\nAlternatively, run with Docker:\n```bash\ncp .env.example .env  # add your API keys\ndocker compose run --rm tradingagents\n```\n\nFor local models with Ollama:\n```bash\ndocker compose --profile ollama run --rm tradingagents-ollama\n```\n\n### Required APIs\n\nTradingAgents supports multiple LLM providers. Set the API key for your chosen provider:\n\n```bash\nexport OPENAI_API_KEY=...          # OpenAI (GPT)\nexport GOOGLE_API_KEY=...          # Google (Gemini)\nexport ANTHROPIC_API_KEY=...       # Anthropic (Claude)\nexport XAI_API_KEY=...             # xAI (Grok)\nexport DEEPSEEK_API_KEY=...        # DeepSeek\nexport DASHSCOPE_API_KEY=...       # Qwen — International (dashscope-intl.aliyuncs.com)\nexport DASHSCOPE_CN_API_KEY=...    # Qwen — China (dashscope.aliyuncs.com)\nexport ZHIPU_API_KEY=...           # GLM via Z.AI (international)\nexport ZHIPU_CN_API_KEY=...        # GLM via BigModel (China, open.bigmodel.cn)\nexport MINIMAX_API_KEY=...         # MiniMax — Global (api.minimax.io)\nexport MINIMAX_CN_API_KEY=...      # MiniMax — China (api.minimaxi.com)\nexport OPENROUTER_API_KEY=...      # OpenRouter\nexport ALPHA_VANTAGE_API_KEY=...   # Alpha Vantage\n```\n\nFor Azure OpenAI, copy `.env.enterprise.example` to `.env.enterprise` and fill in your credentials.\n\nFor AWS Bedrock, install the extra with `pip install \".[bedrock]\"`, set `llm_provider: \"bedrock\"`, configure AWS credentials (environment variables, `~/.aws/credentials`, or an IAM role) and `AWS_DEFAULT_REGION`, and use a Bedrock model ID, e.g. `us.anthropic.claude-opus-4-8-v1:0`.\n\nFor local models, configure Ollama with `llm_provider: \"ollama\"`. The default endpoint is `http://localhost:11434/v1`; set `OLLAMA_BASE_URL` to point at a remote `ollama-serve`. Pull models with `ollama pull <name>`, and pick \"Custom model ID\" in the CLI for any model not listed by default.\n\nFor any other OpenAI-compatible server (vLLM, LM Studio, llama.cpp, or a custom relay), use `llm_provider: \"openai_compatible\"` and set the endpoint via `backend_url` (or `TRADINGAGENTS_LLM_BACKEND_URL`), e.g. `http://localhost:8000/v1` for vLLM or `http://localhost:1234/v1` for LM Studio. The model is whatever your server serves. No key is needed for local servers; set `OPENAI_COMPATIBLE_API_KEY` when the endpoint requires one.\n\nAlternatively, copy `.env.example` to `.env` and fill in your keys:\n```bash\ncp .env.example .env\n```\n\n### CLI Usage\n\nLaunch the interactive CLI:\n```bash\ntradingagents          # installed command\npython -m cli.main     # alternative: run directly from source\n```\nYou will see a screen where you can select your desired tickers, analysis date, LLM provider, research depth, and more.\n\n### Markets and tickers\n\nTradingAgents works with any market Yahoo Finance covers, using the exchange-suffixed ticker. Company identity and the alpha benchmark resolve automatically per market.\n\n- US: `AAPL`, `SPY`\n- Hong Kong: `0700.HK` · Tokyo: `7203.T` · London: `AZN.L`\n- India: `RELIANCE.NS`, `.BO` · Canada: `.TO` · Australia: `.AX`\n- China A-shares: Shanghai `.SS`, Shenzhen `.SZ` (e.g. `600519.SS` for Kweichow Moutai)\n- Crypto: `BTC-USD`, `ETH-USD`\n\n<p align=\"center\">\n  <img src=\"assets/cli/cli_init.png\" width=\"100%\" style=\"display: inline-block; margin: 0 2%;\">\n</p>\n\nAn interface will appear showing results as they load, letting you track the agent's progress as it runs.\n\n<p align=\"center\">\n  <img src=\"assets/cli/cli_news.png\" width=\"100%\" style=\"display: inline-block; margin: 0 2%;\">\n</p>\n\n<p align=\"center\">\n  <img src=\"assets/cli/cli_transaction.png\" width=\"100%\" style=\"display: inline-block; margin: 0 2%;\">\n</p>\n\n## TradingAgents Package\n\n### Implementation Details\n\nWe built TradingAgents with LangGraph to ensure flexibility and modularity. The framework supports multiple LLM providers: OpenAI, Google, Anthropic, xAI, DeepSeek, Qwen (Alibaba DashScope, international and China endpoints), GLM (Zhipu), MiniMax (global + China), OpenRouter, Ollama for local models, and Azure OpenAI for enterprise.\n\n### Python Usage\n\nTo use TradingAgents inside your code, you can import the `tradingagents` module and initialize a `TradingAgentsGraph()` object. The `.propagate()",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [\"setuptools>=61.0\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"tradingagents\"\nversion = \"0.3.0\"\ndescription = \"TradingAgents: Multi-Agents LLM Financial Trading Framework\"\nreadme = \"README.md\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"langchain-core>=0.3.81\",\n    \"backtrader>=1.9.78.123\",\n    \"langchain-anthropic>=0.3.15\",\n    \"langchain-experimental>=0.3.4\",\n    \"langchain-google-genai>=4.0.0\",\n    \"langchain-openai>=0.3.23\",\n    \"langgraph>=0.4.8\",\n    \"langgraph-checkpoint-sqlite>=2.0.0\",\n    \"pandas>=2.3.0\",\n    \"parsel>=1.10.0\",\n    \"python-dotenv>=1.0.0\",\n    \"pytz>=2025.2\",\n    \"questionary>=2.1.0\",\n    \"redis>=6.2.0\",\n    \"requests>=2.32.4\",\n    \"rich>=14.0.0\",\n    \"typer>=0.21.0\",\n    \"setuptools>=80.9.0\",\n    \"stockstats>=0.6.5\",\n    \"tqdm>=4.67.1\",\n    \"typing-extensions>=4.14.0\",\n    \"yfinance>=1.4.1\",\n]\n\n[project.optional-dependencies]\ndev = [\n    \"ruff>=0.15\",\n    \"pytest>=8.0\",\n    \"pytest-subtests>=0.13\",\n]\n# Amazon Bedrock support (AWS SigV4 auth + boto3). Optional so the core install\n# stays lean: pip install \"tradingagents[bedrock]\".\nbedrock = [\n    \"langchain-aws>=1.5.0\",\n]\n\n[project.scripts]\ntradingagents = \"cli.main:app\"\n\n[tool.setuptools.packages.find]\ninclude = [\"tradingagents*\", \"cli*\"]\n\n[tool.setuptools.package-data]\ncli = [\"static/*\"]\n\n[tool.pytest.ini_options]\ntestpaths = [\"tests\"]\naddopts = \"-ra --strict-markers\"\nmarkers = [\n    \"unit: fast isolated unit tests\",\n    \"integration: tests requiring external services\",\n    \"smoke: quick sanity-check tests\",\n]\nfilterwarnings = [\n    \"ignore::DeprecationWarning\",\n]\n\n[tool.ruff]\nline-length = 100\ntarget-version = \"py310\"\nextend-exclude = [\"results\", \"worklog\"]\n\n[tool.ruff.lint]\n# Standard \"good defaults\" rule set (pyflakes + pycodestyle + isort + bugbear +\n# pyupgrade + comprehensions/simplify). Line length (E501) and layout are owned\n# by the formatter; whole-repo `ruff format` adoption is deferred until the\n# open-PR backlog clears, to avoid mass merge conflicts.\nselect = [\"E\", \"W\", \"F\", \"I\", \"B\", \"UP\", \"C4\", \"SIM\"]\nignore = [\"E501\"]\n\n[tool.ruff.lint.per-file-ignores]\n\"**/__init__.py\" = [\"F401\"]   # intentional re-exports\n\n[tool.ruff.lint.isort]\n# Keep multiple aliased names from one module in a single combined import block\n# (e.g. the vendor re-exports in interface.py) instead of one statement per name.\ncombine-as-imports = true\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "rag",
      "llm"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 88
    },
    "strategic_score": 88
  },
  {
    "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": 8465,
    "forks": 515,
    "stars_this_period": 353,
    "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": 31,
      "created_at": "2026-03-27T17:54:33Z",
      "pushed_at": "2026-06-29T21:36:32Z",
      "homepage": "https://herdr.dev",
      "default_branch": "master",
      "forks": 515,
      "watchers": 21,
      "archived": false,
      "size_kb": 28498
    },
    "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/\">docs</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**run all your coding agents in one terminal. see who's blocked, working, or done at a glance.**\n\nrun your agents where they already run; your machine, a server, anywhere you can ssh. each one gets its own real terminal, not an app's imitation of one, so even full-screen TUIs render right. click, drag, and split panes into workspaces and tabs, and watch each agent go blocked, working, done. close the laptop and nothing dies; reattach from another terminal, or from your phone over ssh. one local rust binary, not an app: no gui, no electron, no mac-only wrapper, no account, no telemetry. (if you've used tmux: it's that, rebuilt for agents.)\n\n---\n\n## what you get\n\n- **a real terminal per agent.** you see each agent's own screen, not an app's imitation of one, so even full-screen TUIs render right.\n- **agent state at a glance.** the sidebar rolls every agent up to 🔴 blocked, 🟡 working, 🔵 done, or 🟢 idle, so you always know who needs you. zero config, no hooks required.\n- **workspaces, tabs, panes.** organize by repo or folder, click, drag, and split, mouse-native throughout.\n- **nothing dies on detach.** a background server keeps panes and agents alive; detach and reattach from any terminal, including your phone over ssh.\n- **runs anywhere.** single ~10MB rust binary, linux and macos (windows beta), no dependencies, runs inside the terminal you already use.\n- **scriptable.** a local socket api and cli that agents can drive, plus plugins you can write in any language.\n\n## how it compares\n\n|                          | tmux | gui managers | herdr |\n|--------------------------|------|--------------|-------|\n| persistent sessions       | ✓    | —            | ✓     |\n| detach / reattach        | ✓    | —            | ✓     |\n| runs anywhere, over ssh  | ✓    | —            | ✓     |\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. it has no idea which pane is blocked, working, or done; you can bolt a bell character and per-harness hooks onto it, but you wire each one yourself and still have no shared view of the fleet. the gui agent managers (conductor, cmux, emdash) do show agent state, so call that table stakes. the difference is everything around it. they are apps, often mac-only and closed, that redraw the terminal inside a wrapper. herdr is a single binary that runs in the terminal you already use, anywhere you can ssh, and shows each agent's real screen on a server that keeps it alive when you disconnect. see the [full comparison](https://herdr.dev/compare/) with tmux, zellij, cmux, warp, conductor, and more.\n\n## install\n\n```bash\ncurl -fsSL https://herdr.dev/install.sh | sh\n```\n\nwindows preview beta:\n\n```powershell\npowershell -ExecutionPolicy Bypass -c \"irm https://herdr.dev/install.ps1 | iex\"\n```\n\nalso available with `brew install herdr`, `mise use -g herdr`, `nix run github:ogulcancelik/herdr`, or as a stable Linux/macOS binary from [releases](https://github.com/ogulcancelik/herdr/releases).\n\n`herdr update` upgrades an installer-managed install; Homebrew, mise, and Nix update through their own package managers. channel, preview, restart, and restore details are in the [install docs](https://herdr.dev/docs/install/).\n\n## quick start\n\n```bash\nherdr\n```\n\nherdr starts or attaches to a background server and opens a workspace. run an agent in the pane.\n\nherdr is mouse-native, so clicking and dragging panes, tabs, and split borders gets you everywhere without a single keybinding. for the keyboard, `ctrl+b` is the prefix: press it, release, then press the action key, so `ctrl+b` then `c` makes a tab. one reserved key keeps herdr out of your shell's way.\n\n- `ctrl+b` then `shift+n` for a new workspace\n- `ctrl+b` then `v` or `minus` to split panes\n- `ctrl+b` then `c` for a new tab\n- `ctrl+b` then `w` to switch workspaces\n- `ctrl+b` then `q` to detach; agents keep running, run `herdr` again to reattach\n\npress `ctrl+b` then `?` for every binding. the [keyboard guide](https://herdr.dev/docs/keyboard/) explains the prefix model and how to go prefix-free; the full keymap, copy mode, and config syntax live in the [configuration docs](https://herdr.dev/docs/configuration/).\n\n## remote\n\nrun herdr on a VPS and reach it from your local terminal. `herdr --remote` makes your local terminal the client of the remote server, so pasting images into your agents keeps working, the thing plain `ssh` + `tmux` breaks.\n\n```bash\nherdr --remote workbox\nherdr --remote ssh://you@yourserver:2222\n```\n\nsee the [persistence and remote docs](https://herdr.dev/docs/persistence-remote/) for named sessions, keepalives, direct attach, and handoff.\n\n## supported agents\n\ndetection works out of the box with 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. any other agent still works; herdr runs it as a terminal multiplexer, and custom integrations can report labels and state over the socket api.\n\nofficial integrations add native session restore, and some report semantic state directly. install one with `herdr integration install <agent>`, available for pi, omp, claude, codex, copilot, devin, droid, kimi, opencode, kilo, hermes, qodercli, and cursor. see the [integrations docs](https://herdr.dev/docs/integrations/).\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 subscribe to state changes instead of polling. install the reusable skill with:\n\n```bash\nnpx skills add ogulcancelik/herdr --skill herdr -g\n```\n\nstart with the [agent skill docs](https://herdr.dev/docs/agent-skill/), [socket API docs](https://herdr.dev/docs/socket-api/), and [`SKILL.md`](./SKILL.md).\n\n## docs\n\n- [quick start](https://herdr.dev/docs/quick-start/): first session, panes, copy, and named sessions\n- [concepts](https://herdr.dev/docs/concepts/): server and client, workspaces, tabs, and panes\n- [install](https://herdr.dev/docs/install/): install, update, channels, Homebrew, mise, and Nix\n- [session state](https://herdr.dev/docs/session-state/): detach, restart restore, agent restore, and live handoff\n- [configuration](https://herdr.dev/docs/configuration/): keybindings, copy mode, themes, notifications, environment variables\n- [integrations](https://herdr.dev/docs/integrations/): native session restore and semantic state per agent\n- [socket api](https://herdr.dev/docs/socket-api/): socket protocol and cli reference\n- [`SKILL.md`](./SKILL.md): reusable agent skill\n\n## agent instructions\n\nif you are an ai agent helping with this repository, read [`AGENTS.md`](./AGENTS.md) before making changes and read [`CONTRIBUTING.md`](./CONTRIBUTING.md) before opening issues or PRs.\n\n## development\n\n```bash\ngit clone https://github.com/ogulcancelik/herdr\ncd herdr\ncargo build --release\n./target/release/herdr\n\njust test        # unit tests\njust check       # formatting, tests, and maintenance checks\n```\n\n## sponsors\n\nherdr is built full-time, in the open, with no revenue behind it. sponsoring directly funds development, stability, and the path to a real agent runtime.\n\n[**→ become a sponsor**](https://github.com/sponsors/ogulcancelik) · enterprise / partnership: hey@herdr.dev · see [SPONSORS.md](./SPONSORS.md) for tiers. thank you 🐑\n\n## license\n\nHerdr is dual-licensed:\n\n1. Open source: GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).\n2. Commercial: commercial licenses are available for organizations that cannot comply with AGPL.\n\nContact: hey@herdr.dev\n\n## mandatory star history\n\n<a href=\"https://www.star-history.com/?repos=ogulcancelik%2Fherdr&type=date&legend=top-left\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=ogulcancelik/herdr&type=date&theme=dark&legend=top-left&v=2026-05-19\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=ogulcancelik/herdr&type=date&legend=top-left&v=2026-05-19\" />\n   <img alt=\"star history chart\" src=\"https://api.star-history.com/chart?repos=ogulcancelik/herdr&type=date&legend=top-left&v=2026-05-19\" />\n </picture>\n</a>\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 = [\n    \"src/**/*\",\n    \"assets/sounds/*\",\n    \"docs/next/api/herdr-api.schema.json\",\n    \"README.md\",\n    \"LICENSE\",\n    \"Cargo.toml\",\n]\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\"\nschemars = { version = \"1.2.1\", features = [\"derive\"] }\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",
      "workspace"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 20,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 82
    },
    "strategic_score": 82
  },
  {
    "owner": "cupy",
    "name": "cupy",
    "full_name": "cupy/cupy",
    "url": "https://github.com/cupy/cupy",
    "description": "NumPy & SciPy for GPU",
    "language": "Python",
    "total_stars": 11800,
    "forks": 1082,
    "stars_this_period": 352,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "cublas",
        "cuda",
        "cudnn",
        "cupy",
        "curand",
        "cusolver",
        "cusparse",
        "cusparselt",
        "cutensor",
        "gpu",
        "nccl",
        "numpy",
        "nvrtc",
        "nvtx",
        "python",
        "rocm",
        "scipy",
        "tensor"
      ],
      "license": "MIT",
      "open_issues": 685,
      "created_at": "2016-11-01T09:54:45Z",
      "pushed_at": "2026-06-29T21:24:27Z",
      "homepage": "https://cupy.dev",
      "default_branch": "main",
      "forks": 1082,
      "watchers": 132,
      "archived": false,
      "size_kb": 48238
    },
    "readme_content": "<div align=\"center\"><img src=\"https://raw.githubusercontent.com/cupy/cupy/main/docs/image/cupy_logo_1000px.png\" width=\"400\"/></div>\n\n# CuPy : NumPy & SciPy for GPU\n\n[![pypi](https://img.shields.io/pypi/v/cupy)](https://pypi.python.org/pypi/cupy)\n[![Conda](https://img.shields.io/badge/conda--forge-cupy-blue)](https://anaconda.org/conda-forge/cupy)\n[![GitHub license](https://img.shields.io/github/license/cupy/cupy)](https://github.com/cupy/cupy)\n[![Matrix](https://img.shields.io/matrix/cupy_community:gitter.im?server_fqdn=matrix.org)](https://gitter.im/cupy/community)\n[![Twitter](https://img.shields.io/twitter/follow/CuPy_Team?label=%40CuPy_Team)](https://twitter.com/CuPy_Team)\n[![Medium](https://img.shields.io/badge/Medium-CuPy-teal)](https://medium.com/cupy-team)\n\n[**Website**](https://cupy.dev/)\n| [**Install**](https://docs.cupy.dev/en/stable/install.html)\n| [**Tutorial**](https://docs.cupy.dev/en/stable/user_guide/basic.html)\n| [**Examples**](https://github.com/cupy/cupy/tree/main/examples)\n| [**Documentation**](https://docs.cupy.dev/en/stable/)\n| [**API Reference**](https://docs.cupy.dev/en/stable/reference/)\n| [**Forum**](https://groups.google.com/forum/#!forum/cupy)\n\nCuPy is a NumPy/SciPy-compatible array library for GPU-accelerated computing with Python.\nCuPy acts as a [drop-in replacement](https://docs.cupy.dev/en/stable/reference/comparison.html) to run existing NumPy/SciPy code on NVIDIA CUDA or AMD ROCm platforms.\n\n```py\n>>> import cupy as cp\n>>> x = cp.arange(6).reshape(2, 3).astype('f')\n>>> x\narray([[ 0.,  1.,  2.],\n       [ 3.,  4.,  5.]], dtype=float32)\n>>> x.sum(axis=1)\narray([  3.,  12.], dtype=float32)\n```\n\nCuPy also provides access to low-level CUDA features.\nYou can pass `ndarray` to existing CUDA C/C++ programs via [RawKernels](https://docs.cupy.dev/en/stable/user_guide/kernel.html#raw-kernels), use [Streams](https://docs.cupy.dev/en/stable/reference/cuda.html) for performance, or even call [CUDA Runtime APIs](https://docs.cupy.dev/en/stable/reference/cuda.html#runtime-api) directly.\n\n## Installation\n\n### Pip\n\nBinary packages (wheels) are available for Linux and Windows on [PyPI](https://pypi.org/org/cupy/).\nChoose the right package for your platform.\n\n| Platform                                                                                                     | Architecture      | Command                     |\n|--------------------------------------------------------------------------------------------------------------| ----------------- |-----------------------------|\n| CUDA 12.x                                                                                                    | x86_64 / aarch64  | `pip install cupy-cuda12x`  |\n| CUDA 13.x                                                                                                    | x86_64 / aarch64  | `pip install cupy-cuda13x`  |\n| ROCm 7.0 (*[experimental](https://docs.cupy.dev/en/latest/install.html#using-cupy-on-amd-gpu-experimental)*) | x86_64            | `pip install cupy-rocm-7-0` |\n\n> [!NOTE]\\\n> To install pre-releases, append `--pre -U -f https://pip.cupy.dev/pre` (e.g., `pip install cupy-cuda12x --pre -U -f https://pip.cupy.dev/pre`).\n\n### Conda\n\nBinary packages are also available for Linux and Windows on [Conda-Forge](https://anaconda.org/conda-forge/cupy).\n\n| Platform              | Architecture                | Command                                                       |\n| --------------------- | --------------------------- | ------------------------------------------------------------- |\n| CUDA                  | x86_64 / aarch64 / ppc64le  | `conda install -c conda-forge cupy`                           |\n\nIf you need a slim installation (without also getting CUDA dependencies installed), you can do `conda install -c conda-forge cupy-core`.\n\nIf you need to use a particular CUDA version (say 12.0), you can use the `cuda-version` metapackage to select the version, e.g. `conda install -c conda-forge cupy cuda-version=12.0`.\n\n> [!NOTE]\\\n> If you encounter any problem with CuPy installed from `conda-forge`, please feel free to report to [cupy-feedstock](https://github.com/conda-forge/cupy-feedstock/issues), and we will help investigate if it is just a packaging issue in `conda-forge`'s recipe or a real issue in CuPy.\n\n### Docker\n\nUse [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/overview.html) to run [CuPy container images](https://hub.docker.com/r/cupy/cupy).\n\n```\n$ docker run --gpus all -it cupy/cupy\n```\n\n## Resources\n\n- [Installation Guide](https://docs.cupy.dev/en/stable/install.html) - instructions on building from source\n- [Release Notes](https://github.com/cupy/cupy/releases)\n- [Projects using CuPy](https://github.com/cupy/cupy/wiki/Projects-using-CuPy)\n- [Contribution Guide](https://docs.cupy.dev/en/stable/contribution.html)\n- [GPU Acceleration in Python using CuPy and Numba (GTC November 2021 Technical Session)](https://www.nvidia.com/en-us/on-demand/session/gtcfall21-a31149/)\n- [GPU-Acceleration of Signal Processing Workflows using CuPy and cuSignal[^1] (ICASSP'21 Tutorial)](https://github.com/awthomp/cusignal-icassp-tutorial)\n\n[^1]: cuSignal is now part of CuPy starting v13.0.0.\n\n## License\n\nMIT License (see `LICENSE` file).\n\nCuPy is designed based on NumPy's API and SciPy's API (see `docs/source/license.rst` file).\n\nCuPy is being developed and maintained by [Preferred Networks](https://www.preferred.jp/en/) and [community contributors](https://github.com/cupy/cupy/graphs/contributors).\n\n## Reference\n\nRyosuke Okuta, Yuya Unno, Daisuke Nishino, Shohei Hido and Crissman Loomis.\n**CuPy: A NumPy-Compatible Library for NVIDIA GPU Calculations.**\n*Proceedings of Workshop on Machine Learning Systems (LearningSys) in The Thirty-first Annual Conference on Neural Information Processing Systems (NIPS)*, (2017).\n[[PDF](http://learningsys.org/nips17/assets/papers/paper_16.pdf)]\n\n```bibtex\n@inproceedings{cupy_learningsys2017,\n  author       = \"Okuta, Ryosuke and Unno, Yuya and Nishino, Daisuke and Hido, Shohei and Loomis, Crissman\",\n  title        = \"CuPy: A NumPy-Compatible Library for NVIDIA GPU Calculations\",\n  booktitle    = \"Proceedings of Workshop on Machine Learning Systems (LearningSys) in The Thirty-first Annual Conference on Neural Information Processing Systems (NIPS)\",\n  year         = \"2017\",\n  url          = \"http://learningsys.org/nips17/assets/papers/paper_16.pdf\"\n}\n```\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\n# Need to be installed manually when using `--no-build-isolation`.\n# Keep in sync with `docs/source/contribution.rst`.\nrequires = [\"setuptools>=77\", \"wheel\", \"Cython>=3.2,<3.3\", \"numpy>=2.0\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"cupy\"\ndescription = \"CuPy: NumPy & SciPy for GPU\"\nauthors = [{ name = \"Seiya Tokui\", email = \"tokui@preferred.jp\" }]\nmaintainers = [{ name = \"CuPy Developers\" }]\nlicense = \"MIT\"\nlicense-files = [\"LICENSE\", \"docs/source/license.rst\"]\nclassifiers = [\n  \"Development Status :: 5 - Production/Stable\",\n  \"Intended Audience :: Science/Research\",\n  \"Intended Audience :: Developers\",\n  \"Programming Language :: Python\",\n  \"Programming Language :: Python :: 3\",\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 :: Only\",\n  \"Programming Language :: Cython\",\n  \"Topic :: Software Development\",\n  \"Topic :: Scientific/Engineering\",\n  \"Operating System :: POSIX\",\n  \"Operating System :: Microsoft :: Windows\",\n]\nrequires-python = \">=3.10\"\ndynamic = [\n  \"version\",\n  \"readme\",  # long_description\n  \"dependencies\",  # install_requires\n  \"optional-dependencies\",  # extras_require\n]\n\n[project.urls]\n\"Homepage\" = \"https://cupy.dev/\"\n\"Documentation\" = \"https://docs.cupy.dev/\"\n\"Bug Tracker\" = \"https://github.com/cupy/cupy/issues\"\n\"Source Code\" = \"https://github.com/cupy/cupy\"\n\n[tool.setuptools]\n# Do not include files listed in MANIFEST.in to wheels.\ninclude-package-data = false\n\n[tool.setuptools.packages.find]\ninclude = [\"cupy*\", \"cupyx*\", \"cupy_backends*\"]\n\n[tool.setuptools.dynamic]\nversion = { attr = \"cupy._version.__version__\" }\n\n[tool.autopep8]\nexclude = \"*.git*, *.eggs*, *docs/source*\"\n\n[tool.autopep8.per-file-ignores]\n# ignore long lines containing arrays of numerical constants\n\"cupyx/scipy/special/_gammainc.py\" = [\"E501\"]\n\n[tool.mypy]\n# Keep in sync with the list in .pre-commit-config.yaml\nfiles = [\"cupy\", \"cupyx\", \"cupy_backends\", \".github\", \".pfnci\"]\nignore_missing_imports = true\ndisable_error_code = [\"attr-defined\"]\n\n[tool.pytest.ini_options]\nxfail_strict = true\ntestpaths = \"tests\"\naddopts = \"--strict-markers\"\nmarkers = [\n  \"slow\", \"multi_gpu\",\n  # If pytest-run-parallel is not available\n  \"parallel_threads\", \"iterations\", \"thread_unsafe\",\n]\nfilterwarnings = [\n  \"always\",  # Make sure previous calls cannot hide future warnings.\n  \"error::FutureWarning\",\n  # ignore FutureWarning from cupy._util.experimental\n  'ignore:.* is experimental\\.:FutureWarning:cupy',\n  \"ignore::UserWarning\",\n  \"error::DeprecationWarning\",\n  \"error::PendingDeprecationWarning\",\n  \"error::cupy.exceptions.VisibleDeprecationWarning\",\n  \"error::cupy.exceptions.ComplexWarning\",\n  # distutils (Python 3.10)\n  \"ignore:The distutils(.+) is deprecated:DeprecationWarning\",\n  \"ignore:dep_util is Deprecated:DeprecationWarning\",\n  # pkg_resources\n  \"ignore::DeprecationWarning:pkg_resources\",\n  \"ignore:pkg_resources is deprecated\",\n  # Using `scipy.sparse` against NumPy 1.15+ raises warning\n  # as it uses `np.matrix` which is pending deprecation.\n  # Also exclude `numpy.matrixlib.defmatrix` as SciPy and our\n  # test code uses `np.asmatrix`, which internally calls\n  # `np.matrix`.\n  'ignore::PendingDeprecationWarning:scipy\\.sparse\\.\\w+',\n  'ignore::PendingDeprecationWarning:numpy\\.matrixlib\\.defmatrix',\n  # SciPy 1.17 announces an upcoming dtype change in\n  # ``diags()`` / ``diags_array()`` via a FutureWarning when the\n  # input dtype is integer.  CuPy mirrors current behaviour and\n  # will adapt when SciPy actually flips the default.\n  'ignore:Input has data type.*output has been cast.*:FutureWarning',\n  # pyreadline (dependency from optuna -> cliff -> cmd2) uses deprecated ABCs\n  \"ignore:Using or importing the ABCs from:DeprecationWarning:pyreadline\",\n  # google-api-core>=2.28.0 warns about Python versions approaching EOL\n  \"ignore::FutureWarning:google.api_core\",\n  # Ignore warnings from Optuna 3.0 internal code\n  # TODO(kmaehashi): Remove after the issue is fixed in Optuna.\n  \"ignore:(.+?) has been deprecated in v3.0.0:FutureWarning:optuna\",\n  # Ignore warnings from SQLAlchemy on which Optuna depends\n  'ignore:Deprecated API features detected! These feature\\(s\\) are not compatible with SQLAlchemy 2\\.0\\.:DeprecationWarning:optuna',\n  'ignore:(.+?)SQLAlchemy 2\\.0(.+?):DeprecationWarning',\n  # setuptools 65+\n  # TODO(kmaehashi): Remove distutils from cupy_builder to remove this\n  \"ignore:Absolute path '(.+?)' is being replaced with a relative path '(.+?)' for outputs:DeprecationWarning:distutils\",\n]\n\n[tool.coverage.run]\nplugins = \"Cython.Coverage\"\ninclude = [\"cupy/*\", \"cupyx/*\", \"examples/*\"]\n\n[tool.coverage.report]\necxlude_lines = [\"if __name__ == .__main__.:\"]\n\n[tool.ruff]\nline-length = 79\nextend-exclude = [\n  \"docs/source\",\n  \"third_party\",\n]\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"W\", \"UP\", \"I002\", \"",
    "strategic_keywords": [
      "runtime"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 20,
      "relevance": 8,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 6,
      "total": 80
    },
    "strategic_score": 80
  },
  {
    "owner": "canopy-network",
    "name": "canopy",
    "full_name": "canopy-network/canopy",
    "url": "https://github.com/canopy-network/canopy",
    "description": "The official go implementation of the Canopy Network protocol",
    "language": "Go",
    "total_stars": 12633,
    "forks": 15499,
    "stars_this_period": 351,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "auto-scaling-architecture",
        "layerless-blockchain-creator",
        "mesh-security-provider",
        "permissionless-interoperability",
        "recursive-cloning-model"
      ],
      "license": "MIT",
      "open_issues": 80,
      "created_at": "2024-10-30T11:39:07Z",
      "pushed_at": "2026-06-29T17:57:46Z",
      "homepage": "https://canopynetwork.org",
      "default_branch": "main",
      "forks": 15499,
      "watchers": 18,
      "archived": false,
      "size_kb": 38531
    },
    "readme_content": "<img src=\"./canopy-logo-white-bg.svg\" alt=\"Canopy Logo\" width=\"500\"/>\n\n_Official golang implementation of the Canopy Network Protocol_\n\n[![GoDoc](https://img.shields.io/badge/godoc-reference-white.svg)](https://godoc.org/github.com/canopy-network/canopy)\n[![Getting Started](https://img.shields.io/badge/getting%20started-guide-white)](https://canopynetwork.org)\n[![Go Version](https://img.shields.io/badge/golang-v1.21-white.svg)](https://golang.org)\n[![Next.js Version](https://img.shields.io/badge/next%20js-v14.2.3-white.svg)](https://nextjs.org/)\n\n\n# Overview\n\n[![License](https://img.shields.io/badge/License-MIT-white.svg)](https://opensource.org/licenses/MIT)\n[![Testing](https://img.shields.io/badge/testing-docker%20compose-white)](https://docs.docker.com/compose/)\n[![Platform](https://img.shields.io/badge/platform-linux%20%7C%20macos-white.svg)](https://github.com/canopy-network/canopy/releases)\n[![Status](https://img.shields.io/badge/status-alphanet-white)](https://docs.docker.com/compose/)\n\n### ⫸ **Welcome to the Network that Powers the Peer-to-Peer Launchpad for New Chains**\n\nBuilt on a recursive architecture, chains bootstrap each other into independence —  \nforming an `unstoppable` web of utility and security. \n\n**Here you'll find:**\n\n➪ A recursive framework to build blockchains.\n\n➪ The seed chain that started the recursive cycle.\n\nFor more information on the Canopy Network Protocol visit [https://canopynetwork.org](https://canopynetwork.org)\n\n## Network Status\n\n⪢ Canopy is in `Betanet` 🚀 ➝ learn more about the [road-to-mainnet](https://www.canopynetwork.org/learn-more/road-to-mainnet)\n\n## Protocol Documentation\n\n➪ Check out the Canopy Network wiki:  [https://canopy-network.gitbook.io/docs](https://canopy-network.gitbook.io/docs)\n\n## Repository Documentation\n\nWelcome to the Canopy Network reference implementation. This repository can be well understood reading about the core modules:\n\n- [Controller](controller/README.md): Coordinates communication between all the major parts of the Canopy blockchain, like a central hub or \"bus\" that connects the system together.\n- [Finite State Machine (FSM)](fsm/README.md): Defines the logic for how transactions change the blockchain's state — it decides what’s valid and how state transitions happen from one block to the next.\n- [Byzantine Fault Tolerant (BFT) Consensus](bft/README.md): A consensus mechanism that allows the network to agree on new blocks even if some nodes are unreliable or malicious.\n- [Peer-to-Peer Networking](p2p/README.md): A secure and encrypted communication system that lets nodes talk directly to each other without needing a central server.\n- [Persistence](store/README.md): Manages the blockchain’s storage — it saves the current state (ledger), indexes past transactions, and ensures fast and reliable data verification.\n\n## How to Run It\n\n➪ To run the Canopy binary, use the following commands:\n\n```bash\nmake build/canopy-full\ncanopy start\n```\n\n## How to Run It with 🐳 Docker\n\n➪ To run a Canopy `Localnet` in a *containerized* environment, use the following commands:\n```bash\nmake docker/build\nmake docker/up-fast\nmake docker/logs\n\nor simply\n\nmake docker/up && make docker/logs\n```\n\n## Running Tests\n\n➪ To run Canopy unit tests, use the Go testing tools:\n\n```bash\nmake test\n```\n\n## How to Contribute\n\n➪ Canopy is an open-source project, and we welcome contributions from the community. Here's how to get involved:\n\n1. **Fork** the repository and clone it locally.\n2. **Code** your improvements or fixes.\n3. **Submit a Pull Request** (PR) for review.\n\n➣ Please follow these [guidelines](CONTRIBUTING.md) to maintain high-quality contributions:\n\n### High Impact or Architectural Changes\n\n➪ Before making large changes, discuss them with the Canopy team on [Discord](https://discord.gg/pNcSJj7Wdh) to ensure alignment.\n\n### Coding Style\n\n- Code must adhere to official Go formatting (use [`gofmt`](https://golang.org/cmd/gofmt)).\n- (Optional) Use [EditorConfig](https://editorconfig.org) for consistent formatting.\n- All code should follow Go documentation/commentary guidelines.\n- PRs should be opened against the `development` branch.\n\n[![Pre-Release](https://img.shields.io/github/release-pre/canopy-network/canopy.svg)](https://github.com/canopy-network/canopy/releases)\n[![Go Report Card](https://goreportcard.com/badge/github.com/canopy-network/canopy)](https://goreportcard.com/report/github.com/canopy-network/canopy)\n[![Contributors](https://img.shields.io/github/contributors/canopy-network/canopy.svg)](https://github.com/canopy-network/canopy/pulse)\n[![Last Commit](https://img.shields.io/github/last-commit/canopy-network/canopy.svg)](https://github.com/canopy-network/canopy/pulse)\n\n## Contact\n\n[![Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://x.com/CNPYNetwork)\n[![Discord](https://img.shields.io/badge/discord-online-blue.svg)](https://discord.gg/pNcSJj7Wdh)\n",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/canopy-network/canopy\n\ngo 1.24.0\n\nrequire (\n\tfilippo.io/edwards25519 v1.1.0\n\tgithub.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b\n\tgithub.com/allegro/bigcache/v3 v3.1.0\n\tgithub.com/cenkalti/backoff/v4 v4.3.0\n\tgithub.com/cockroachdb/pebble/v2 v2.1.1\n\tgithub.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1\n\tgithub.com/drand/kyber v1.3.0\n\tgithub.com/drand/kyber-bls12381 v0.3.1\n\tgithub.com/ethereum/go-ethereum v1.15.11\n\tgithub.com/fatih/color v1.17.0\n\tgithub.com/google/btree v1.1.3\n\tgithub.com/google/go-cmp v0.7.0\n\tgithub.com/gorilla/websocket v1.5.3\n\tgithub.com/hashicorp/golang-lru/v2 v2.0.7\n\tgithub.com/julienschmidt/httprouter v1.3.0\n\tgithub.com/libp2p/go-buffer-pool v0.1.0\n\tgithub.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f\n\tgithub.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1\n\tgithub.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a\n\tgithub.com/phuslu/iploc v1.0.20240731\n\tgithub.com/prometheus/client_golang v1.23.2\n\tgithub.com/rs/cors v1.11.0\n\tgithub.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible\n\tgithub.com/spf13/cobra v1.9.1\n\tgithub.com/stretchr/testify v1.11.1\n\tgolang.org/x/crypto v0.42.0\n\tgolang.org/x/mod v0.29.0\n\tgolang.org/x/net v0.44.0\n\tgolang.org/x/sync v0.17.0\n\tgolang.org/x/term v0.35.0\n\tgolang.org/x/text v0.30.0\n\tgoogle.golang.org/protobuf v1.36.10\n\tgopkg.in/natefinch/lumberjack.v2 v2.2.1\n)\n\nrequire (\n\tgithub.com/DataDog/zstd v1.5.7 // indirect\n\tgithub.com/RaduBerinde/axisds v0.0.0-20250419182453-5135a0650657 // indirect\n\tgithub.com/RaduBerinde/btreemap v0.0.0-20250419232817-bf0d809ae648 // indirect\n\tgithub.com/StackExchange/wmi v1.2.1 // indirect\n\tgithub.com/beorn7/perks v1.0.1 // indirect\n\tgithub.com/bits-and-blooms/bitset v1.20.0 // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/cockroachdb/crlib v0.0.0-20251024155502-a2e0a212ef05 // indirect\n\tgithub.com/cockroachdb/errors v1.12.0 // indirect\n\tgithub.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect\n\tgithub.com/cockroachdb/redact v1.1.6 // indirect\n\tgithub.com/cockroachdb/swiss v0.0.0-20250624142022-d6e517c1d961 // indirect\n\tgithub.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb // indirect\n\tgithub.com/consensys/bavard v0.1.27 // indirect\n\tgithub.com/consensys/gnark-crypto v0.16.0 // indirect\n\tgithub.com/crate-crypto/go-eth-kzg v1.3.0 // indirect\n\tgithub.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/ethereum/c-kzg-4844/v2 v2.1.0 // indirect\n\tgithub.com/ethereum/go-verkle v0.2.2 // indirect\n\tgithub.com/getsentry/sentry-go v0.36.1 // indirect\n\tgithub.com/go-ole/go-ole v1.3.0 // indirect\n\tgithub.com/gogo/protobuf v1.3.2 // indirect\n\tgithub.com/golang/snappy v1.0.0 // indirect\n\tgithub.com/holiman/uint256 v1.3.2 // indirect\n\tgithub.com/inconshreveable/mousetrap v1.1.0 // indirect\n\tgithub.com/kilic/bls12-381 v0.1.0 // indirect\n\tgithub.com/klauspost/compress v1.18.1 // indirect\n\tgithub.com/kr/pretty v0.3.1 // indirect\n\tgithub.com/kr/text v0.2.0 // indirect\n\tgithub.com/mattn/go-colorable v0.1.13 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/minio/minlz v1.0.1 // indirect\n\tgithub.com/mmcloughlin/addchain v0.4.0 // indirect\n\tgithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect\n\tgithub.com/pkg/errors v0.9.1 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/prometheus/client_model v0.6.2 // indirect\n\tgithub.com/prometheus/common v0.67.1 // indirect\n\tgithub.com/prometheus/procfs v0.19.1 // indirect\n\tgithub.com/rogpeppe/go-internal v1.14.1 // indirect\n\tgithub.com/spf13/pflag v1.0.6 // indirect\n\tgithub.com/supranational/blst v0.3.14 // indirect\n\tgithub.com/tklauser/go-sysconf v0.3.12 // indirect\n\tgithub.com/tklauser/numcpus v0.6.1 // indirect\n\tgo.yaml.in/yaml/v2 v2.4.3 // indirect\n\tgolang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect\n\tgolang.org/x/sys v0.37.0 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n\trsc.io/tmplfunc v0.0.3 // indirect\n)\n",
    "strategic_keywords": [
      "rag",
      "protocol"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 14,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 6,
      "total": 85
    },
    "strategic_score": 85
  },
  {
    "owner": "0xNyk",
    "name": "council-of-high-intelligence",
    "full_name": "0xNyk/council-of-high-intelligence",
    "url": "https://github.com/0xNyk/council-of-high-intelligence",
    "description": "18 AI personas deliberate your hardest decisions across multiple LLM providers. Aristotle, Feynman, Kahneman, Torvalds & more — structured multi-round deliberation with genuine model diversity. One command: /council",
    "language": "Shell",
    "total_stars": 1828,
    "forks": 199,
    "stars_this_period": 323,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "ai-agents",
        "claude",
        "claude-code",
        "decision-making",
        "deliberation",
        "gemini",
        "multi-llm",
        "ollama",
        "openai",
        "prompt-engineering"
      ],
      "license": "MIT",
      "open_issues": 6,
      "created_at": "2026-03-02T08:47:09Z",
      "pushed_at": "2026-06-27T03:38:09Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 199,
      "watchers": 11,
      "archived": false,
      "size_kb": 476
    },
    "readme_content": "# Council of High Intelligence\n\n<p align=\"center\">\n  <img src=\"assets/header.jpeg\" alt=\"Council of High Intelligence\" width=\"800\">\n</p>\n\n<p align=\"center\">\n  18 AI personas deliberate your hardest decisions across multiple LLM providers. One command.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/0xNyk/council-of-high-intelligence/releases\"><img src=\"https://img.shields.io/github/v/release/0xNyk/council-of-high-intelligence\" alt=\"Release\"></a>\n  <a href=\"https://github.com/0xNyk/council-of-high-intelligence/stargazers\"><img src=\"https://img.shields.io/github/stars/0xNyk/council-of-high-intelligence\" alt=\"Stars\"></a>\n  <a href=\"https://creativecommons.org/publicdomain/zero/1.0/\"><img src=\"https://img.shields.io/badge/license-CC0-blue\" alt=\"License\"></a>\n  <img src=\"https://img.shields.io/badge/Claude_Code-skill-blueviolet\" alt=\"Claude Code Skill\">\n  <img src=\"https://img.shields.io/badge/Codex-skill-black\" alt=\"Codex Skill\">\n  <img src=\"https://img.shields.io/badge/members-18-orange\" alt=\"18 Members\">\n</p>\n\n<details>\n<summary><strong>Table of Contents</strong></summary>\n\n- [Quickstart](#quickstart)\n- [Why This Works](#why-this-works)\n- [The 18 Council Members](#the-18-council-members)\n- [Three Deliberation Modes](#three-deliberation-modes)\n- [Multi-Provider Auto-Routing](#multi-provider-auto-routing)\n- [Deliberation Protocol](#deliberation-protocol)\n- [Installation](#installation)\n- [Requirements](#requirements)\n- [Contributing](#contributing)\n- [Support the Project](#support-the-project)\n\n</details>\n\n## Quickstart\n\n### Claude Code\n\n```bash\ngit clone https://github.com/0xNyk/council-of-high-intelligence.git\ncd council-of-high-intelligence\n./install.sh\n```\n\nThen in Claude Code:\n\n```\n/council Should we open-source our agent framework?\n/council --quick Should we add caching here?\n/council --duo Should we use microservices or monolith?\n```\n\n### Codex\n\n```bash\ngit clone https://github.com/0xNyk/council-of-high-intelligence.git\ncd council-of-high-intelligence\n./install.sh --codex\n```\n\nThen in Codex:\n\n```\n/council Should we open-source our agent framework?\n/council --quick Should we add caching here?\n/council --duo Should we use microservices or monolith?\n```\n\n## Why This Works\n\nA single LLM gives you one reasoning path dressed up as confidence. Ask it a hard question and you get a fluent, structured, wrong answer. The council gives you structured disagreement instead:\n\n- **Get genuinely different perspectives** — polarity pairs force real tension (Socrates destroys assumptions; Feynman rebuilds from first principles). Multi-provider routing spreads members across Claude, OpenAI, Gemini, and Ollama so you get actually different reasoning, not costume changes on one model\n- **Catch wrong questions early** — the Problem Restate Gate makes every member reframe the question before analysis begins. If 3 members restate your question differently, the question was the problem\n- **Know what the council can't answer** — verdicts lead with Unresolved Questions and Recommended Next Steps, not with confident-sounding consensus. What the council doesn't know matters more than where it agrees\n- **Prevent groupthink** — dissent quotas, novelty gates, and counterfactual prompts enforce genuine disagreement. If >70% agree too early, two members are forced to steelman the opposing view\n\n> **Why not just ask Claude directly?** A single prompt gives you one model's confident best guess. The council gives you 3-18 independent analyses from different intellectual traditions, forces them to challenge each other's claims, and synthesizes a verdict that surfaces disagreement rather than hiding it. It's the difference between asking one advisor and convening a board.\n\n## The 18 Council Members\n\n| Agent | Figure | Domain | Default Model | Polarity |\n|-------|--------|--------|-------|----------|\n| `council-aristotle` | Aristotle | Categorization & structure | opus | Classifies everything |\n| `council-socrates` | Socrates | Assumption destruction | opus | Questions everything |\n| `council-sun-tzu` | Sun Tzu | Adversarial strategy | sonnet | Reads terrain & competition |\n| `council-ada` | Ada Lovelace | Formal systems & abstraction | sonnet | What can/can't be mechanized |\n| `council-aurelius` | Marcus Aurelius | Resilience & moral clarity | opus | Control vs acceptance |\n| `council-machiavelli` | Machiavelli | Power dynamics & realpolitik | sonnet | How actors actually behave |\n| `council-lao-tzu` | Lao Tzu | Non-action & emergence | opus | When less is more |\n| `council-feynman` | Feynman | First-principles debugging | sonnet | Refuses unexplained complexity |\n| `council-torvalds` | Linus Torvalds | Pragmatic engineering | sonnet | Ship it or shut up |\n| `council-musashi` | Miyamoto Musashi | Strategic timing | sonnet | The decisive strike |\n| `council-watts` | Alan Watts | Perspective & reframing | opus | Dissolves false problems |\n| `council-karpathy` | Andrej Karpathy | Neural network intuition | sonnet | How models actually learn and fail |\n| `council-sutskever` | Ilya Sutskever | Scaling frontier & AI safety | opus | When capability becomes risk |\n| `council-kahneman` | Daniel Kahneman | Cognitive bias & decision science | opus | Your own thinking is the first error |\n| `council-meadows` | Donella Meadows | Systems thinking & feedback loops | sonnet | Redesign the system, not the symptom |\n| `council-munger` | Charlie Munger | Multi-model reasoning & economics | sonnet | Invert — what guarantees failure? |\n| `council-taleb` | Nassim Taleb | Antifragility & tail risk | opus | Design for the tail, not the average |\n| `council-rams` | Dieter Rams | User-centered design | sonnet | Less, but better — the user decides |\n\n<details>\n<summary><strong>Polarity Pairs</strong> — members are chosen as deliberate counterweights</summary>\n\n- **Socrates vs Feynman** — Destroys top-down vs rebuilds bottom-up\n- **Aristotle vs Lao Tzu** — Classifies everything vs structure IS the problem\n- **Sun Tzu vs Aurelius** — Wins external games vs governs the internal one\n- **Ada vs Machiavelli** — Formal purity vs messy human incentives\n- **Torvalds vs Watts** — Ships concrete solutions vs questions whether the problem exists\n- **Musashi vs Torvalds** — Waits for the perfect moment vs ships it now\n- **Karpathy vs Sutskever** — Build it, observe it, iterate vs pause, research, ensure safety first\n- **Karpathy vs Ada** — Empirical ML intuition vs formal systems theory\n- **Kahneman vs Feynman** — Your cognition is the first error vs trust first-principles reasoning\n- **Meadows vs Torvalds** — Redesign the feedback loop vs fix the symptom and ship\n- **Munger vs Aristotle** — Multi-model lattice vs single taxonomic system\n- **Taleb vs Karpathy** — Hidden catastrophic tails vs smooth empirical scaling curves\n- **Rams vs Ada** — What the user needs vs what computation can do\n\n</details>\n\n## Three Deliberation Modes\n\n### Full Mode (default)\n3-round structured deliberation: independent analysis → cross-examination → final positions.\n\n```\n/council Should we open-source our agent framework?\n/council --triad strategy What's our competitive moat?\n/council --full What is the right pricing model?\n```\n\n### Quick Mode (`--quick`)\n2-round rapid analysis for simpler decisions. No cross-examination.\n\n```\n/council --quick Should we add caching here?\n/council --quick --triad shipping Should we release today?\n```\n\n### Duo Mode (`--duo`)\n2-member dialectic using polarity pairs. Great for exploring tensions.\n\n```\n/council --duo Should we use microservices or monolith?\n/council --duo --members torvalds,ada Is this abstraction worth it?\n```\n\n<details>\n<summary><strong>Pre-defined Triads</strong> — 20 domain-specific 3-member combinations</summary>\n\n| Domain | Triad | Rationale |\n|--------|-------|-----------|\n| `architecture` | Aristotle + Ada + Feynman | Classify + formalize + simplicity-test |\n| `strategy` | Sun Tzu + Machiavelli + Aurelius | Terrain + incentives + moral grounding |\n| `ethics` | Aurelius + Socrates + Lao Tzu | Duty + questioning + natural order |\n| `debugging` | Feynman + Socrates + Ada | Bottom-up + assumption testing + formal verification |\n| `innovation` | Ada + Lao Tzu + Aristotle | Abstraction + emergence + classification |\n| `conflict` | Socrates + Machiavelli + Aurelius | Expose + predict + ground |\n| `complexity` | Lao Tzu + Aristotle + Ada | Emergence + categories + formalism |\n| `risk` | Sun Tzu + Aurelius + Feynman | Threats + resilience + empirical verification |\n| `shipping` | Torvalds + Musashi + Feynman | Pragmatism + timing + first-principles |\n| `product` | Torvalds + Machiavelli + Watts | Ship it + incentives + reframing |\n| `founder` | Musashi + Sun Tzu + Torvalds | Timing + terrain + engineering reality |\n| `ai` | Karpathy + Sutskever + Ada | Empirical ML + scaling frontier + formal limits |\n| `ai-product` | Karpathy + Torvalds + Machiavelli | ML capability + shipping pragmatism + incentives |\n| `ai-safety` | Sutskever + Aurelius + Socrates | Safety frontier + moral clarity + assumption destruction |\n| `decision` | Kahneman + Munger + Aurelius | Bias detection + inversion + moral clarity |\n| `systems` | Meadows + Lao Tzu + Aristotle | Feedback loops + emergence + categories |\n| `uncertainty` | Taleb + Sun Tzu + Sutskever | Tail risk + terrain + scaling frontier |\n| `design` | Rams + Torvalds + Watts | User clarity + maintainability + reframing |\n| `economics` | Munger + Machiavelli + Sun Tzu | Models + incentives + competition |\n| `bias` | Kahneman + Socrates + Watts | Cognitive bias + assumption destruction + frame audit |\n\n</details>\n\n<details>\n<summary><strong>Council Profiles</strong> — pre-built panels for different needs</summary>\n\n### `classic` (default)\nAll 18 members with domain triads above. Best for broad deliberation.\n\n### `exploration-orthogonal`\n12-member panel for discovery and \"unknown unknowns\" reduction:\n- Socrates, Feynman, Sun Tzu, Machiavelli, Ada, Lao Tzu, Aurelius, Torvalds, Karpathy, Sutskever, Kahneman, Meadows\n- Profile triads: `unknowns`, `market-entry`, `system-design`, `reframing`, `ai-frontier`, `blind-spots`\n\n### `execution-lean`\n5-member panel for fast decision-to-action:\n- Torvalds, Feynman, Sun Tzu, Aurelius, Ada\n- Profile triads: `ship-now`, `launch-strategy`, `stability`\n\n</details>\n\n## Multi-Provider Auto-Routing\n\nThe council automatically detects installed LLM providers and distributes members across them for genuine model diversity — zero config required.\n\n```\n/council --triad decision Should we accept this acquisition offer?\n```\n\n**Supported providers** (auto-detected):\n| Provider | CLI | Exec Method |\n|----------|-----|-------------|\n| Anthropic (Claude) | native | subagent (always available) |\n| OpenAI | `codex` | `codex exec` |\n| Google | `gemini` | `gemini -p` |\n| Ollama (local) | `ollama` | `ollama run` |\n| NVIDIA NIM | `NVIDIA_API_KEY` env | `openai_compatible_api` |\n| Cursor | `cursor-agent` | `cursor-agent -p` |\n\nNVIDIA NIM ([build.nvidia.com](https://build.nvidia.com)) exposes 130+ open-weight models (DeepSeek, Kimi, MiniMax, GLM, Qwen, Nemotron) via an OpenAI-compatible endpoint. Free tier: 1,000 credits, 40 RPM. Detection requires only `export NVIDIA_API_KEY=nvapi-...` — no CLI binary needed. See `configs/provider-model-slots.nim.example.yaml` for a sample seat allocation.\n\nCursor CLI ([cursor.com/cli](https://cursor.com/cli)) is a model **aggregator** — one binary (`cursor-agent`) serves GPT-5.x, Claude, Gemini, and Grok families through a single `CURSOR_API_KEY` (or `cursor-agent login`). Members route via headless read-only mode (`cursor-agent -p --mode ask --model <id>`). Install with `curl https://cursor.com/install -fsS | bash`. Because Cursor can serve `claude-*` models, pick **cross-family** Cursor models (e.g. `gpt-5.4-high`, `gemini-2.5-pro`, `grok-4`) when a seat needs to add diversity rather than duplicate Anthropic bias. List live IDs with `cursor-agent --list-models`. See `configs/provider-model-slots.cursor.example.yaml` for a sample seat all",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "llm",
      "protocol"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 15,
      "productize": 4,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 78
    },
    "strategic_score": 78
  },
  {
    "owner": "vercel-labs",
    "name": "skills",
    "full_name": "vercel-labs/skills",
    "url": "https://github.com/vercel-labs/skills",
    "description": "The open agent skills tool - npx skills",
    "language": "TypeScript",
    "total_stars": 24322,
    "forks": 2000,
    "stars_this_period": 300,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "NOASSERTION",
      "open_issues": 812,
      "created_at": "2026-01-14T21:31:18Z",
      "pushed_at": "2026-06-29T22:00:46Z",
      "homepage": "https://skills.sh",
      "default_branch": "main",
      "forks": 2000,
      "watchers": 74,
      "archived": false,
      "size_kb": 1000
    },
    "readme_content": "# skills\n\nThe CLI for the open agent skills ecosystem.\n\n<!-- agent-list:start -->\nSupports **OpenCode**, **Claude Code**, **Codex**, **Cursor**, and [68 more](#supported-agents).\n<!-- agent-list:end -->\n\n[![skills.sh](https://skills.sh/b/vercel-labs/skills)](https://skills.sh/vercel-labs/skills)\n\n## Install a Skill\n\n```bash\nnpx skills add vercel-labs/agent-skills\n```\n\n## Use a Skill Without Installing\n\nGenerate a prompt for one skill, or start a supported coding agent interactively:\n\n```bash\nnpx skills use vercel-labs/agent-skills@web-design-guidelines | claude\nnpx skills use vercel-labs/agent-skills --skill web-design-guidelines --agent claude-code\n```\n\n`skills use` resolves sources the same way as `skills add`, writes the selected skill files to a temporary directory, and prints only the generated prompt to stdout unless `--agent` is provided. With `--agent`, it starts one supported agent interactively with the generated prompt.\n\n### Source Formats\n\n```bash\n# GitHub shorthand (owner/repo)\nnpx skills add vercel-labs/agent-skills\n\n# Full GitHub URL\nnpx skills add https://github.com/vercel-labs/agent-skills\n\n# Direct path to a skill in a repo\nnpx skills add https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design-guidelines\n\n# GitLab URL\nnpx skills add https://gitlab.com/org/repo\n\n# Any git URL\nnpx skills add git@github.com:vercel-labs/agent-skills.git\n\n# Local path\nnpx skills add ./my-local-skills\n```\n\n### Options\n\n| Option                    | Description                                                                                                                                        |\n| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `-g, --global`            | Install to user directory instead of project                                                                                                       |\n| `-a, --agent <agents...>` | <!-- agent-names:start -->Target specific agents (e.g., `claude-code`, `codex`). See [Supported Agents](#supported-agents)<!-- agent-names:end --> |\n| `-s, --skill <skills...>` | Install specific skills by name (use `'*'` for all skills)                                                                                         |\n| `-l, --list`              | List available skills without installing                                                                                                           |\n| `--copy`                  | Copy files instead of symlinking to agent directories                                                                                              |\n| `-y, --yes`               | Skip all confirmation prompts                                                                                                                      |\n| `--all`                   | Install all skills to all agents without prompts                                                                                                   |\n\n### Examples\n\n```bash\n# List skills in a repository\nnpx skills add vercel-labs/agent-skills --list\n\n# Install specific skills\nnpx skills add vercel-labs/agent-skills --skill frontend-design --skill skill-creator\n\n# Install a skill with spaces in the name (must be quoted)\nnpx skills add owner/repo --skill \"Convex Best Practices\"\n\n# Install to specific agents\nnpx skills add vercel-labs/agent-skills -a claude-code -a opencode\n\n# Non-interactive installation (CI/CD friendly)\nnpx skills add vercel-labs/agent-skills --skill frontend-design -g -a claude-code -y\n\n# Install all skills from a repo to all agents\nnpx skills add vercel-labs/agent-skills --all\n\n# Install all skills to specific agents\nnpx skills add vercel-labs/agent-skills --skill '*' -a claude-code\n\n# Install specific skills to all agents\nnpx skills add vercel-labs/agent-skills --agent '*' --skill frontend-design\n```\n\n### Installation Scope\n\n| Scope       | Flag      | Location            | Use Case                                      |\n| ----------- | --------- | ------------------- | --------------------------------------------- |\n| **Project** | (default) | `./<agent>/skills/` | Committed with your project, shared with team |\n| **Global**  | `-g`      | `~/<agent>/skills/` | Available across all projects                 |\n\n### Installation Methods\n\nWhen installing interactively, you can choose:\n\n| Method                    | Description                                                                                 |\n| ------------------------- | ------------------------------------------------------------------------------------------- |\n| **Symlink** (Recommended) | Creates symlinks from each agent to a canonical copy. Single source of truth, easy updates. |\n| **Copy**                  | Creates independent copies for each agent. Use when symlinks aren't supported.              |\n\n## Other Commands\n\n| Command                      | Description                                   |\n| ---------------------------- | --------------------------------------------- |\n| `npx skills use <source>`    | Use one skill without installing              |\n| `npx skills list`            | List installed skills (alias: `ls`)           |\n| `npx skills find [query]`    | Search for skills interactively or by keyword |\n| `npx skills remove [skills]` | Remove installed skills from agents           |\n| `npx skills update [skills]` | Update installed skills to latest versions    |\n| `npx skills init [name]`     | Create a new SKILL.md template                |\n\n### `skills list`\n\nList all installed skills. Similar to `npm ls`.\n\n```bash\n# List all installed skills (project and global)\nnpx skills list\n\n# List only global skills\nnpx skills ls -g\n\n# Filter by specific agents\nnpx skills ls -a claude-code -a cursor\n```\n\n### `skills find`\n\nSearch for skills interactively or by keyword.\n\n```bash\n# Interactive search (fzf-style)\nnpx skills find\n\n# Search by keyword\nnpx skills find typescript\n\n# Search across every repository owned by an organization or user\nnpx skills find react --owner vercel\n```\n\n### `skills update`\n\n```bash\n# Update all skills (interactive scope prompt)\nnpx skills update\n\n# Update a single skill by name\nnpx skills update my-skill\n\n# Update multiple specific skills\nnpx skills update frontend-design web-design-guidelines\n\n# Update only global or project skills\nnpx skills update -g\nnpx skills update -p\n\n# Non-interactive (auto-detects scope: project if in a project, else global)\nnpx skills update -y\n```\n\n| Option          | Description                                                               |\n| --------------- | ------------------------------------------------------------------------- |\n| `-g, --global`  | Only update global skills                                                 |\n| `-p, --project` | Only update project skills                                                |\n| `-y, --yes`     | Skip scope prompt (auto-detect: project if in a project dir, else global) |\n| `[skills...]`   | Update specific skills by name instead of all                             |\n\n### `skills init`\n\n```bash\n# Create SKILL.md in current directory\nnpx skills init\n\n# Create a new skill in a subdirectory\nnpx skills init my-skill\n```\n\n### `skills remove`\n\nRemove installed skills from agents.\n\n```bash\n# Remove interactively (select from installed skills)\nnpx skills remove\n\n# Remove specific skill by name\nnpx skills remove web-design-guidelines\n\n# Remove multiple skills\nnpx skills remove frontend-design web-design-guidelines\n\n# Remove from global scope\nnpx skills remove --global web-design-guidelines\n\n# Remove from specific agents only\nnpx skills remove --agent claude-code cursor my-skill\n\n# Remove all installed skills without confirmation\nnpx skills remove --all\n\n# Remove all skills from a specific agent\nnpx skills remove --skill '*' -a cursor\n\n# Remove a specific skill from all agents\nnpx skills remove my-skill --agent '*'\n\n# Use 'rm' alias\nnpx skills rm my-skill\n```\n\n| Option         | Description                                      |\n| -------------- | ------------------------------------------------ |\n| `-g, --global` | Remove from global scope (~/) instead of project |\n| `-a, --agent`  | Remove from specific agents (use `'*'` for all)  |\n| `-s, --skill`  | Specify skills to remove (use `'*'` for all)     |\n| `-y, --yes`    | Skip confirmation prompts                        |\n| `--all`        | Shorthand for `--skill '*' --agent '*' -y`       |\n\n## What are Agent Skills?\n\nAgent skills are reusable instruction sets that extend your coding agent's capabilities. They're defined in `SKILL.md`\nfiles with YAML frontmatter containing a `name` and `description`.\n\nSkills let agents perform specialized tasks like:\n\n- Generating release notes from git history\n- Creating PRs following your team's conventions\n- Integrating with external tools (Linear, Notion, etc.)\n\nDiscover skills at **[skills.sh](https://skills.sh)**\n\n## Supported Agents\n\nSkills can be installed to any of these agents:\n\n<!-- supported-agents:start -->\n| Agent | `--agent` | Project Path | Global Path |\n|-------|-----------|--------------|-------------|\n| AiderDesk | `aider-desk` | `.aider-desk/skills/` | `~/.aider-desk/skills/` |\n| Amp, Replit, Universal | `amp`, `replit`, `universal` | `.agents/skills/` | `~/.config/agents/skills/` |\n| Antigravity | `antigravity` | `.agents/skills/` | `~/.gemini/antigravity/skills/` |\n| Antigravity CLI | `antigravity-cli` | `.agents/skills/` | `~/.gemini/antigravity-cli/skills/` |\n| AstrBot | `astrbot` | `data/skills/` | `~/.astrbot/data/skills/` |\n| Autohand Code CLI | `autohand-code` | `.autohand/skills/` | `~/.autohand/skills/` |\n| Augment | `augment` | `.augment/skills/` | `~/.augment/skills/` |\n| IBM Bob | `bob` | `.bob/skills/` | `~/.bob/skills/` |\n| Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |\n| OpenClaw | `openclaw` | `skills/` | `~/.openclaw/skills/` |\n| Cline, Dexto, Kimi Code CLI, Loaf, Warp, Zed | `cline`, `dexto`, `kimi-code-cli`, `loaf`, `warp`, `zed` | `.agents/skills/` | `~/.agents/skills/` |\n| CodeArts Agent | `codearts-agent` | `.codeartsdoer/skills/` | `~/.codeartsdoer/skills/` |\n| CodeBuddy | `codebuddy` | `.codebuddy/skills/` | `~/.codebuddy/skills/` |\n| Codemaker | `codemaker` | `.codemaker/skills/` | `~/.codemaker/skills/` |\n| Code Studio | `codestudio` | `.codestudio/skills/` | `~/.codestudio/skills/` |\n| Codex | `codex` | `.agents/skills/` | `~/.codex/skills/` |\n| Command Code | `command-code` | `.commandcode/skills/` | `~/.commandcode/skills/` |\n| Continue | `continue` | `.continue/skills/` | `~/.continue/skills/` |\n| Cortex Code | `cortex` | `.cortex/skills/` | `~/.snowflake/cortex/skills/` |\n| Crush | `crush` | `.crush/skills/` | `~/.config/crush/skills/` |\n| Cursor | `cursor` | `.agents/skills/` | `~/.cursor/skills/` |\n| Deep Agents | `deepagents` | `.agents/skills/` | `~/.deepagents/agent/skills/` |\n| Devin for Terminal | `devin` | `.devin/skills/` | `~/.config/devin/skills/` |\n| Droid | `droid` | `.factory/skills/` | `~/.factory/skills/` |\n| Eve | `eve` | `agent/skills/` | N/A (project-only) |\n| Firebender | `firebender` | `.agents/skills/` | `~/.firebender/skills/` |\n| ForgeCode | `forgecode` | `.forge/skills/` | `~/.forge/skills/` |\n| Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.gemini/skills/` |\n| GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.copilot/skills/` |\n| Goose | `goose` | `.goose/skills/` | `~/.config/goose/skills/` |\n| Hermes Agent | `hermes-agent` | `.hermes/skills/` | `~/.hermes/skills/` |\n| inference.sh | `inference-sh` | `.inferencesh/skills/` | `~/.inferencesh/skills/` |\n| Jazz | `jazz` | `.jazz/skills/` | `~/.jazz/skills/` |\n| Junie | `junie` | `.junie/skills/` | `~/.junie/skills/` |\n| iFlow CLI | `iflow-cli` | `.iflow/skills/` | `~/.iflow/skills/` |\n| Kilo Code | `kilo` | `.kilocode/skills/` | `~/.kilocode/skills/` |\n| Kiro CLI | `kiro-cli` | `.ki",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"skills\",\n  \"version\": \"1.5.13\",\n  \"description\": \"The open agent skills ecosystem\",\n  \"type\": \"module\",\n  \"bin\": {\n    \"skills\": \"./bin/cli.mjs\",\n    \"add-skill\": \"./bin/cli.mjs\"\n  },\n  \"files\": [\n    \"dist\",\n    \"bin\",\n    \"README.md\",\n    \"ThirdPartyNoticeText.txt\"\n  ],\n  \"scripts\": {\n    \"build\": \"node scripts/generate-licenses.ts && obuild\",\n    \"generate-licenses\": \"node scripts/generate-licenses.ts\",\n    \"dev\": \"node src/cli.ts\",\n    \"exec:test\": \"node scripts/execute-tests.ts\",\n    \"prepublishOnly\": \"npm run build\",\n    \"format\": \"prettier --write \\\"src/**/*.ts\\\" \\\"scripts/**/*.ts\\\"\",\n    \"format:check\": \"prettier --check \\\"src/**/*.ts\\\" \\\"scripts/**/*.ts\\\"\",\n    \"prepare\": \"husky\",\n    \"test\": \"vitest\",\n    \"type-check\": \"tsc --noEmit\",\n    \"publish:snapshot\": \"npm version prerelease --preid=snapshot --no-git-tag-version && npm publish --tag snapshot\"\n  },\n  \"lint-staged\": {\n    \"src/**/*.ts\": \"prettier --write\",\n    \"scripts/**/*.ts\": \"prettier --write\",\n    \"tests/**/*.ts\": \"prettier --write\"\n  },\n  \"keywords\": [\n    \"cli\",\n    \"agent-skills\",\n    \"skills\",\n    \"ai-agents\",\n    \"aider-desk\",\n    \"amp\",\n    \"antigravity\",\n    \"antigravity-cli\",\n    \"astrbot\",\n    \"autohand-code\",\n    \"augment\",\n    \"bob\",\n    \"claude-code\",\n    \"openclaw\",\n    \"cline\",\n    \"codearts-agent\",\n    \"codebuddy\",\n    \"codemaker\",\n    \"codestudio\",\n    \"codex\",\n    \"command-code\",\n    \"continue\",\n    \"cortex\",\n    \"crush\",\n    \"cursor\",\n    \"deepagents\",\n    \"devin\",\n    \"dexto\",\n    \"droid\",\n    \"eve\",\n    \"firebender\",\n    \"forgecode\",\n    \"gemini-cli\",\n    \"github-copilot\",\n    \"goose\",\n    \"hermes-agent\",\n    \"inference-sh\",\n    \"jazz\",\n    \"junie\",\n    \"iflow-cli\",\n    \"kilo\",\n    \"kimi-code-cli\",\n    \"kiro-cli\",\n    \"kode\",\n    \"lingma\",\n    \"loaf\",\n    \"mcpjam\",\n    \"mistral-vibe\",\n    \"moxby\",\n    \"mux\",\n    \"opencode\",\n    \"openhands\",\n    \"ona\",\n    \"pi\",\n    \"qoder\",\n    \"qoder-cn\",\n    \"qwen-code\",\n    \"replit\",\n    \"reasonix\",\n    \"rovodev\",\n    \"roo\",\n    \"tabnine-cli\",\n    \"terramind\",\n    \"tinycloud\",\n    \"trae\",\n    \"trae-cn\",\n    \"warp\",\n    \"windsurf\",\n    \"zed\",\n    \"zencoder\",\n    \"zenflow\",\n    \"neovate\",\n    \"pochi\",\n    \"promptscript\",\n    \"adal\",\n    \"universal\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vercel-labs/skills.git\"\n  },\n  \"homepage\": \"https://github.com/vercel-labs/skills#readme\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vercel-labs/skills/issues\"\n  },\n  \"author\": \"\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@clack/prompts\": \"^0.11.0\",\n    \"@types/bun\": \"latest\",\n    \"@types/node\": \"^22.10.0\",\n    \"@vercel/detect-agent\": \"^1.2.1\",\n    \"husky\": \"^9.1.7\",\n    \"lint-staged\": \"^16.2.7\",\n    \"obuild\": \"^0.4.22\",\n    \"picocolors\": \"^1.1.1\",\n    \"prettier\": \"^3.8.1\",\n    \"simple-git\": \"^3.27.0\",\n    \"typescript\": \"^5.9.3\",\n    \"vitest\": \"^4.0.17\",\n    \"xdg-basedir\": \"^5.1.0\"\n  },\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"packageManager\": \"pnpm@10.17.1\",\n  \"dependencies\": {\n    \"yaml\": \"^2.8.3\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "medium",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 20,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 8,
      "total": 82
    },
    "strategic_score": 82
  },
  {
    "owner": "santifer",
    "name": "career-ops",
    "full_name": "santifer/career-ops",
    "url": "https://github.com/santifer/career-ops",
    "description": "AI-powered job search system built on Claude Code. 14 skill modes, Go dashboard, PDF generation, batch processing.",
    "language": "JavaScript",
    "total_stars": 56635,
    "forks": 11189,
    "stars_this_period": 284,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "ai-agent",
        "anthropic",
        "automation",
        "beginner-friendly",
        "career",
        "careerops",
        "claude",
        "claude-code",
        "cli",
        "first-timers-only",
        "golang",
        "good-first-issue",
        "interview-prep",
        "job-search",
        "open-source",
        "resume"
      ],
      "license": "MIT",
      "open_issues": 95,
      "created_at": "2026-04-04T18:21:18Z",
      "pushed_at": "2026-06-29T19:27:45Z",
      "homepage": "https://career-ops.org",
      "default_branch": "main",
      "forks": 11189,
      "watchers": 208,
      "archived": false,
      "size_kb": 32828
    },
    "readme_content": "# Career-Ops\n\n[English](README.md) | [Deutsch](README.de.md) | [Español](README.es.md) | [Français](README.fr.md) | [Português (Brasil)](README.pt-BR.md) | [한국어](README.ko-KR.md) | [日本語](README.ja.md) | [简体中文](README.cn.md) | [繁體中文](README.zh-TW.md) | [Українська](README.ua.md) | [Русский](README.ru.md) | [Polski](README.pl.md) | [Dansk](README.da.md) | [العربية](README.ar.md)\n\n<p align=\"center\">\n  <a href=\"https://x.com/santifer\"><img src=\"docs/hero-banner.jpg\" alt=\"Career-Ops Multi-Agent Job Search System\" width=\"800\"></a>\n</p>\n\n<p align=\"center\">\n  <em>I spent months applying to jobs the hard way. So I engineered the system I wish I had.</em><br>\n  Companies use AI to filter candidates. <strong>I just gave candidates AI to <em>choose</em> companies.</strong><br>\n  <em>Now it's open source.</em>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://trendshift.io/repositories/25195\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://trendshift.io/api/badge/repositories/25195\" alt=\"santifer%2Fcareer-ops | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.producthunt.com/products/santifer-io?utm_source=badge-featured&utm_medium=badge\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"docs/press/producthunt.svg\" alt=\"Career-Ops on Claude | Product Hunt\" style=\"width: 206px; height: 54px; vertical-align: middle;\" width=\"206\" height=\"54\"/></a>\n</p>\n\n<p align=\"center\"><sub>FEATURED IN</sub></p>\n\n<p align=\"center\">\n  <a href=\"https://wired.com.gr/article/to-ai-ergaleio-pou-fernei-epanastasi-ston-tropo-pou-psachnoume-douleia/\" rel=\"noopener noreferrer nofollow\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/press/wired-dark.svg\"><img src=\"docs/press/wired.svg\" alt=\"WIRED\" height=\"32\"></picture></a>\n  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n  <a href=\"https://www.businessinsider.com/how-i-built-tool-filter-job-listings-landed-head-ai-2026-4\" rel=\"noopener noreferrer nofollow\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/press/business-insider-dark.svg\"><img src=\"docs/press/business-insider.svg\" alt=\"Business Insider\" height=\"32\"></picture></a>\n</p>\n\n---\n\n<p align=\"center\">\n  <img src=\"docs/demo.gif\" alt=\"Career-Ops Demo\" width=\"800\">\n</p>\n\n<p align=\"center\"><strong>740+ job listings evaluated · 100+ personalized CVs · 1 dream role landed</strong></p>\n\n<p align=\"center\">\n  <a href=\"https://warpchart.dev/hq\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://warpchart.dev/api/chart?theme=dark&v=3\">\n      <img alt=\"Live star telemetry of santifer/career-ops\" src=\"https://warpchart.dev/api/chart?theme=light&v=3\" loading=\"lazy\">\n    </picture>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://discord.gg/8pRpHETxa4\"><img src=\"https://img.shields.io/badge/Join_the_community-Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white\" alt=\"Discord\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/santifer/career-ops/releases/latest\"><img src=\"https://img.shields.io/npm/v/%40santifer%2Fcareer-ops?style=for-the-badge&labelColor=2b3137&color=2ea44f&label=release\" alt=\"Latest release\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://claude.com/claude-code\"><img src=\"https://img.shields.io/badge/Built_with-Claude_Code-000?style=for-the-badge&logo=anthropic&logoColor=white\" alt=\"Built with Claude Code\"></a>\n</p>\n\n<p align=\"center\">\n  <sub>Also runs on any agent-skill-standard CLI. See <a href=\"docs/SUPPORTED_CLIS.md\">Supported CLIs</a>.</sub><br>\n  <img src=\"https://img.shields.io/badge/Claude_Code-000?style=flat&logo=anthropic&logoColor=white\" alt=\"Claude Code\">\n  <img src=\"https://img.shields.io/badge/OpenCode-111827?style=flat&logo=terminal&logoColor=white\" alt=\"OpenCode\">\n  <img src=\"https://img.shields.io/badge/Antigravity_CLI-4285F4?style=flat&logo=google&logoColor=white\" alt=\"Antigravity CLI\">\n  <img src=\"https://img.shields.io/badge/Codex-412991?style=flat&logo=openai&logoColor=white\" alt=\"Codex\">\n  <img src=\"https://img.shields.io/badge/Qwen-615CED?style=flat\" alt=\"Qwen\">\n  <img src=\"https://img.shields.io/badge/Kimi-FF4B4B?style=flat\" alt=\"Kimi\">\n  <img src=\"https://img.shields.io/badge/GitHub_Copilot-000?style=flat&logo=githubcopilot&logoColor=white\" alt=\"GitHub Copilot\">\n  <img src=\"https://img.shields.io/badge/Grok_Build_CLI-000?style=flat&logo=x&logoColor=white\" alt=\"Grok Build CLI\">\n  <br>\n  <img src=\"https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white\" alt=\"Node.js\">\n  <img src=\"https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white\" alt=\"Go\">\n  <img src=\"https://img.shields.io/badge/Playwright-2EAD33?style=flat&logo=playwright&logoColor=white\" alt=\"Playwright\">\n  <img src=\"https://img.shields.io/badge/Bubble_Tea-FF75B5?style=flat&logo=go&logoColor=white\" alt=\"Bubble Tea\">\n  <img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT\">\n  <a href=\"TRADEMARK.md\"><img src=\"https://img.shields.io/badge/Trademark-Policy-blue.svg\" alt=\"Trademark Policy\"></a>\n</p>\n\n## What Is This\n\nCareer-Ops ([career-ops.org](https://career-ops.org), also known as **careerops**) turns any AI coding CLI into a full job search command center. Instead of manually tracking applications in a spreadsheet, you get an AI-powered pipeline that:\n\n- **Evaluates offers** with a structured A-F scoring system (10 weighted dimensions)\n- **Generates tailored PDFs** -- ATS-optimized CVs customized per job description\n- **Scans portals** automatically (Greenhouse, Ashby, Lever, company pages)\n- **Processes in batch** -- evaluate 10+ offers in parallel with sub-agents\n- **Tracks everything** in a single source of truth with integrity checks\n\n> **Important: This is NOT a spray-and-pray tool.** Career-ops is a filter -- it helps you find the few offers worth your time out of hundreds. The system strongly recommends against applying to anything scoring below 4.0/5. Your time is valuable, and so is the recruiter's. Always review before submitting.\n\nCareer-ops is agentic: whichever AI coding CLI you choose navigates career pages with Playwright, evaluates fit by reasoning about your CV vs the job description (not keyword matching), and adapts your resume per listing.\n\n> **Heads up: the first evaluations won't be great.** The system doesn't know you yet. Feed it context -- your CV, your career story, your proof points, your preferences, what you're good at, what you want to avoid. The more you nurture it, the better it gets. Think of it as onboarding a new recruiter: the first week they need to learn about you, then they become invaluable.\n\nBuilt by someone who used it to evaluate 740+ job offers, generate 100+ tailored CVs, and land a Head of Applied AI role. [Read the full case study](https://santifer.io/career-ops-system).\n\n## Features\n\n| Feature                  | Description                                                                                                                              |\n| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| **Auto-Pipeline**        | Paste a URL, get a full evaluation + PDF + tracker entry                                                                                 |\n| **6-Block Evaluation**   | Role summary, CV match, level strategy, comp research, personalization, interview prep (STAR+R) -- plus a Block G posting-legitimacy check that flags scams and ghost jobs |\n| **Interview Story Bank** | Accumulates STAR+Reflection stories across evaluations -- 5-10 master stories that answer any behavioral question                        |\n| **Negotiation Scripts**  | Salary negotiation frameworks, geographic discount pushback, competing offer leverage                                                    |\n| **ATS PDF Generation**   | Keyword-injected CVs with Space Grotesk + DM Sans design                                                                                 |\n| **Cover Letter Generator** | Research-backed cover letters with keyword mirroring, four interactive angle prompts (why/problems/approach/tone), draft-in-chat approval gate, and A4 PDF via the same HTML + Playwright pipeline as CVs. Auto-drafts on every evaluation; complete and generate on demand via `/career-ops cover` |\n| **Portal Scanner**       | 45+ companies pre-configured (Anthropic, OpenAI, ElevenLabs, Retool, n8n...) + custom queries across Ashby, Greenhouse, Lever, Wellfound |\n| **Batch Processing**     | Parallel evaluation with headless CLI workers (`claude -p` / `opencode run`)                                                             |\n| **Dashboard TUI**        | Terminal UI to browse, filter, and sort your pipeline                                                                                    |\n| **Human-in-the-Loop**    | AI evaluates and recommends, you decide and act. The system never submits an application -- you always have the final call               |\n| **Pipeline Integrity**   | Automated merge, dedup, status normalization, health checks                                                                              |\n\n## Quick Start\n\n**Fastest way — one command:**\n\n```bash\nnpx @santifer/career-ops init\n```\n\n> 💡 `npx` ships with [Node.js](https://nodejs.org) — it runs the installer once,\n> without installing anything globally. No Node yet? Install it first.\n> (Already using a Claude Code / Gemini / Codex CLI? Then you already have it.)\n\nThis clones the latest release into `./career-ops` and installs dependencies. Then:\n\n```bash\ncd career-ops\nclaude   # or gemini / codex / qwen / opencode / agy / grok — open your AI CLI here\n```\n\n**On first launch, career-ops walks you through setup — your CV, profile and target roles — just by chatting. Nothing to edit by hand.**\n\n<details>\n<summary><b>Prefer to set it up manually? (git clone)</b></summary>\n\n```bash\ngit clone https://github.com/santifer/career-ops.git\ncd career-ops && npm install\nnpx playwright install chromium   # only needed for PDF generation\n\n# 2. Check setup\nnpm run doctor                     # Validates all prerequisites\n\n# 3. Configure\ncp config/profile.example.yml config/profile.yml  # Edit with your details\ncp templates/portals.example.yml portals.yml       # Customize companies\n\n# 4. Add your CV\n# Create cv.md in the project root with your CV in markdown\n\n# 5. Open your AI CLI in this directory\nclaude   # or codex / opencode / gemini / qwen / agy / grok\n\n# Then ask your CLI to adapt the system to you:\n# \"Change the archetypes to backend engineering roles\"\n# \"Translate the modes to English\"\n# \"Add these 5 companies to portals.yml\"\n# \"Update my profile with this CV I'm pasting\"\n\n# 6. Start using\n# Paste a job URL or JD text to trigger auto-pipeline\n# If your CLI supports slash commands, use /career-ops (or its CLI-specific alias)\n# In Codex, ask for the same mode in plain language, e.g.:\n# \"Run the career-ops scan mode\"\n# \"Run the career-ops pipeline mode for data/pipeline.md\"\n# \"Run the career-ops pdf mode for the latest evaluated role\"\n# \"Run the career-ops tracker mode and summarize the current statuses\"\n```\n\n</details>\n\n> **The system is designed to be customized by your AI coding CLI itself.** Modes, archetypes, scoring weights, negotiation scripts -- just ask it to change them. It reads the same files it uses, so it knows exactly what to edit.\n\nSee [docs/SETUP.md](docs/SETUP.md) for the full setup guide, [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) for instructions on running career-ops cheaply using custom or local models, and [docs/FAQ.md](docs/FAQ.md) for answers to common setup questions.\n\n## Antigravity CLI Integration\n\nCareer-ops supports Antigravity CLI natively, the same way it supports Claude Code and OpenCode. All slash commands are available through the shared skill entrypoint, using the same `modes/*.md` evaluation logic.\n\nGoogle has transitioned consumer Gemini CLI acc",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"career-ops\",\n  \"version\": \"1.15.0\",\n  \"description\": \"AI-powered job search pipeline — works with any AI coding CLI (Claude Code, OpenCode, Gemini, Codex, Qwen)\",\n  \"private\": true,\n  \"scripts\": {\n    \"doctor\": \"node doctor.mjs\",\n    \"or\": \"node openrouter-runner.mjs\",\n    \"or:scan\": \"node openrouter-runner.mjs scan\",\n    \"or:pipeline\": \"node openrouter-runner.mjs pipeline\",\n    \"or:eval\": \"node openrouter-runner.mjs evaluate\",\n    \"or:apply\": \"node openrouter-runner.mjs apply\",\n    \"verify\": \"node verify-pipeline.mjs\",\n    \"normalize\": \"node normalize-statuses.mjs\",\n    \"dedup\": \"node dedup-tracker.mjs\",\n    \"merge\": \"node merge-tracker.mjs\",\n    \"reconcile\": \"node reconcile-pipeline.mjs\",\n    \"pdf\": \"node generate-pdf.mjs\",\n    \"cover-letter\": \"node generate-cover-letter.mjs --payload\",\n    \"sync-check\": \"node cv-sync-check.mjs\",\n    \"update:check\": \"node update-system.mjs check\",\n    \"update:test\": \"node updater-migration-tests.mjs\",\n    \"update\": \"node update-system.mjs apply\",\n    \"rollback\": \"node update-system.mjs rollback\",\n    \"liveness\": \"node check-liveness.mjs\",\n    \"scan\": \"node scan.mjs\",\n    \"scan:full\": \"node scan-ats-full.mjs\",\n    \"validate:portals\": \"node validate-portals.mjs\",\n    \"verify:portals\": \"node verify-portals.mjs\",\n    \"tracker\": \"node tracker.mjs\",\n    \"patterns\": \"node analyze-patterns.mjs\",\n    \"reposts\": \"node detect-reposts.mjs\",\n    \"gemini:eval\": \"node gemini-eval.mjs\",\n    \"ollama:eval\": \"node ollama-eval.mjs\",\n    \"openai:eval\": \"node openai-eval.mjs\",\n    \"star\": \"node match-star.mjs\",\n    \"archive\": \"node archive-posting.mjs\",\n    \"build:dashboard\": \"node build-dashboard.mjs\",\n    \"serve:dashboard\": \"cd dashboard && go run . --path ..\",\n    \"postinstall\": \"npx playwright install chromium --with-deps || npx playwright install chromium --with-deps\"\n  },\n  \"keywords\": [\n    \"ai\",\n    \"job-search\",\n    \"claude-code\",\n    \"opencode\",\n    \"career\",\n    \"career-ops\",\n    \"careerops\",\n    \"automation\"\n  ],\n  \"author\": \"Santiago Fernández de Valderrama <hi@santifer.io> (https://santifer.io)\",\n  \"homepage\": \"https://santifer.io\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/santifer/career-ops\"\n  },\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@google/generative-ai\": \"^0.24.1\",\n    \"dotenv\": \"^17.0.0\",\n    \"js-yaml\": \"^4.1.1\",\n    \"playwright\": \"1.61.1\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "skill",
      "eval",
      "automation"
    ],
    "relationship_label": "Skill 来源",
    "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": "lumina-ai-inc",
    "name": "chunkr",
    "full_name": "lumina-ai-inc/chunkr",
    "url": "https://github.com/lumina-ai-inc/chunkr",
    "description": "Vision infrastructure to turn complex documents into RAG/LLM-ready data",
    "language": "Rust",
    "total_stars": 3805,
    "forks": 243,
    "stars_this_period": 284,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [],
      "license": "AGPL-3.0",
      "open_issues": 18,
      "created_at": "2024-08-24T19:32:47Z",
      "pushed_at": "2026-04-09T22:53:39Z",
      "homepage": "https://chunkr.ai",
      "default_branch": "main",
      "forks": 243,
      "watchers": 20,
      "archived": false,
      "size_kb": 636565
    },
    "readme_content": "<br />\n<div align=\"center\">\n  <a href=\"https://github.com/lumina-ai-inc/chunkr\">\n    <img src=\"images/logo.svg\" alt=\"Chunkr Logo\" width=\"80\" height=\"80\">\n  </a>\n\n<h3 align=\"center\">Chunkr | Open Source Document Intelligence API</h3>\n\n  <p align=\"center\">\n    Production-ready service for document layout analysis, OCR, and semantic chunking.<br />\n    Convert PDFs, PPTs, Word docs & images into RAG/LLM-ready chunks.\n    <br /><br />\n    <b>Layout Analysis</b> | <b>OCR + Bounding Boxes</b> | <b>Structured HTML & Markdown</b> | <b>Vision-Language Model Processing</b>\n    <br /><br />\n    👉 <b>Note:</b> The <a href=\"https://github.com/lumina-ai-inc/chunkr\">open-source AGPL version</a> is **different** from our fully managed <a href=\"https://www.chunkr.ai\">Cloud API</a>.  \n    The open-source release uses community/open-source models, while the Cloud API runs **proprietary in-house models** for higher accuracy, speed, and enterprise reliability.\n    <br /><br />\n    <a href=\"https://www.chunkr.ai\"><img src=\"https://img.shields.io/badge/Try_it_out-chunkr.ai-blue?style=flat&logo=rocket&height=20\" alt=\"Try it out\" height=\"20\"></a>\n    &nbsp;&nbsp;&nbsp;\n    <a href=\"https://github.com/lumina-ai-inc/chunkr/issues/new\"><img src=\"https://img.shields.io/badge/Report_Bug-GitHub_Issues-red?style=flat&logo=github&height=20\" alt=\"Report Bug\" height=\"20\"></a>\n    &nbsp;&nbsp;&nbsp;\n    <a href=\"#connect-with-us\"><img src=\"https://img.shields.io/badge/Contact-Get_in_Touch-green?style=flat&logo=mail&height=20\" alt=\"Contact\" height=\"20\"></a>\n    &nbsp;&nbsp;&nbsp;\n    <a href=\"https://discord.gg/XzKWFByKzW\"><img src=\"https://img.shields.io/badge/Discord-Join_Community-5865F2?style=flat&logo=discord&logoColor=white&height=20\" alt=\"Discord\" height=\"20\"></a>\n    &nbsp;&nbsp;&nbsp;\n    <a href=\"https://deepwiki.com/lumina-ai-inc/chunkr\"><img src=\"https://deepwiki.com/badge.svg\" alt=\"Ask DeepWiki\"></a>\n  </p>\n</div>\n\n<div align=\"center\">\n  <a href=\"https://www.chunkr.ai\" width=\"1200\" height=\"630\">\n    <img src=\"https://chunkr.ai/og-image.png\" alt=\"Chunkr Cloud API\">\n  </a>\n</div>\n\n## Table of Contents\n- [Table of Contents](#table-of-contents)\n- [(Super) Quick Start](#super-quick-start)\n- [Documentation](#documentation)\n- [Open Source vs Cloud API vs Enterprise](#open-source-vs-cloud-api-vs-enterprise)\n- [Quick Start with Docker Compose](#quick-start-with-docker-compose)\n- [LLM Configuration](#llm-configuration)\n  - [Using models.yaml (Recommended)](#using-modelsyaml-recommended)\n  - [Using environment variables (Basic)](#using-environment-variables-basic)\n  - [Common LLM API Providers](#common-llm-api-providers)\n- [Licensing](#licensing)\n- [Connect With Us](#connect-with-us)\n\n## Open Source vs Cloud API vs Enterprise\n\n| Feature | Open Source Repo (good) | Cloud API - chunkr.ai (best) | Enterprise |\n|---------|--------------------|------------------------|------------|\n| **Perfect for** | Development & testing | Production workloads | Large-scale / High-security |\n| **Layout Analysis** | Uses open-source models | Proprietary in-house models | In-house + custom-tuned |\n| **OCR Accuracy** | Community OCR engines | Optimized OCR stack | Optimized + domain-tuned |\n| **VLM Processing** | Basic open VLMs | Enhanced proprietary VLMs | Custom fine-tunes |\n| **Excel Support** | ❌ | ✅ Native parser | ✅ Native parser |\n| **Document Types** | PDF, PPT, Word, Images | PDF, PPT, Word, Images, Excel | PDF, PPT, Word, Images, Excel |\n| **Infrastructure** | Self-hosted | Fully managed cloud | Managed / On-prem |\n| **Support** | Discord community | Dedicated support | Dedicated founding team |\n| **Migration Support** | Community-driven | Docs + email | Dedicated migration team |\n\n---\n\nThe **open-source release** is ideal if you want transparency, local hosting, or to experiment with Chunkr’s pipeline.  \nFor **best performance, production reliability, and access to in-house models**, we recommend the <a href=\"https://www.chunkr.ai\">Chunkr Cloud API</a>.  \nFor **high-security or regulated industries**, our **Enterprise edition** offers on-prem or VPC deployments.\n\n\n## Quick Start with Docker Compose\n\n1. Prerequisites:\n   - [Docker and Docker Compose](https://docs.docker.com/get-docker/)\n   - [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) (for GPU support, optional)\n\n2. Clone the repo:\n```bash\ngit clone https://github.com/lumina-ai-inc/chunkr\ncd chunkr\n```\n\n3. Set up environment variables:\n```bash\n# Copy the example environment file\ncp .env.example .env\n\n# Configure your llm models\ncp models.example.yaml models.yaml\n```\n\nFor more information on how to set up LLMs, see [here](#llm-configuration).\n\n4. Start the services:\n```bash\n# For GPU deployment:\ndocker compose up -d\n\n# For CPU-only deployment:\ndocker compose -f compose.yaml -f compose.cpu.yaml up -d\n\n# For Mac ARM architecture (M1, M2, M3, etc.):\ndocker compose -f compose.yaml -f compose.cpu.yaml -f compose.mac.yaml up -d\n```\n\n5. Access the services:\n   - Web UI: `http://localhost:5173`\n   - API: `http://localhost:8000`\n\n6. Stop the services when done:\n```bash\n# For GPU deployment:\ndocker compose down\n\n# For CPU-only deployment:\ndocker compose -f compose.yaml -f compose.cpu.yaml down\n\n# For Mac ARM architecture (M1, M2, M3, etc.):\ndocker compose -f compose.yaml -f compose.cpu.yaml -f compose.mac.yaml down\n```\n## LLM Configuration\n\nChunkr supports two ways to configure LLMs:\n\n1. **models.yaml file**: Advanced configuration for multiple LLMs with additional options\n2. **Environment variables**: Simple configuration for a single LLM\n\n### Using models.yaml (Recommended)\n\nFor more flexible configuration with multiple models, default/fallback options, and rate limits:\n\n1. Copy the example file to create your configuration:\n```bash\ncp models.example.yaml models.yaml\n```\n\n2. Edit the models.yaml file with your configuration. Example:\n```yaml\nmodels:\n  - id: gpt-4o\n    model: gpt-4o\n    provider_url: https://api.openai.com/v1/chat/completions\n    api_key: \"your_openai_api_key_here\"\n    default: true\n    rate-limit: 200 # requests per minute - optional\n```\n\nBenefits of using models.yaml:\n- Configure multiple LLM providers simultaneously\n- Set default and fallback models\n- Add distributed rate limits per model\n- Reference models by ID in API requests (see docs for more info)\n\n>Read the `models.example.yaml` file for more information on the available options.\n\n### Using environment variables (Basic)\n\nYou can use any OpenAI API compatible endpoint by setting the following variables in your .env file:\n``` \nLLM__KEY:\nLLM__MODEL:\nLLM__URL:\n```\n\n### Common LLM API Providers\n\nBelow is a table of common LLM providers and their configuration details to get you started:\n\n| Provider         | API URL                                                                  | Documentation                                                                                                                          |\n| ---------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |\n| OpenAI           | https://api.openai.com/v1/chat/completions                               | [OpenAI Docs](https://platform.openai.com/docs)                                                                                        |\n| Google AI Studio | https://generativelanguage.googleapis.com/v1beta/openai/chat/completions | [Google AI Docs](https://ai.google.dev/gemini-api/docs/openai)                                                                         |\n| OpenRouter       | https://openrouter.ai/api/v1/chat/completions                            | [OpenRouter Models](https://openrouter.ai/models)                                                                                      |\n| Self-Hosted      | http://localhost:8000/v1                                                 | [VLLM](https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html) or [Ollama](https://ollama.com/blog/openai-compatibility) |\n\n## Licensing\n\nThe core of this project is dual-licensed:\n\n1. [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE)\n2. Commercial License\n\nTo use Chunkr without complying with the AGPL-3.0 license terms you can [contact us](mailto:mehul@chunkr.ai) or visit our [website](https://chunkr.ai).\n\n## Connect With Us\n- 📧 Email: [mehul@chunkr.ai](mailto:mehul@chunkr.ai)\n- 📅 Schedule a call: [Book a 30-minute meeting](https://cal.com/mehulc/30min)\n- 🌐 Visit our website: [chunkr.ai](https://chunkr.ai)\n",
    "strategic_keywords": [
      "rag",
      "llm"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 16,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 6,
      "total": 75
    },
    "strategic_score": 75
  },
  {
    "owner": "unclecode",
    "name": "crawl4ai",
    "full_name": "unclecode/crawl4ai",
    "url": "https://github.com/unclecode/crawl4ai",
    "description": "🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don't be shy, join here: https://discord.gg/jP8KfhDhyN",
    "language": "Python",
    "total_stars": 70291,
    "forks": 7202,
    "stars_this_period": 279,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 117,
      "created_at": "2024-05-09T09:48:50Z",
      "pushed_at": "2026-06-28T08:24:32Z",
      "homepage": "https://crawl4ai.com",
      "default_branch": "main",
      "forks": 7202,
      "watchers": 386,
      "archived": false,
      "size_kb": 150775
    },
    "readme_content": "# 🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper.\n\n<div align=\"center\">\n\n<a href=\"https://trendshift.io/repositories/11716\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/11716\" alt=\"unclecode%2Fcrawl4ai | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n\n[![GitHub Stars](https://img.shields.io/github/stars/unclecode/crawl4ai?style=social)](https://github.com/unclecode/crawl4ai/stargazers)\n[![GitHub Forks](https://img.shields.io/github/forks/unclecode/crawl4ai?style=social)](https://github.com/unclecode/crawl4ai/network/members)\n\n[![PyPI version](https://badge.fury.io/py/crawl4ai.svg)](https://badge.fury.io/py/crawl4ai)\n[![Python Version](https://img.shields.io/pypi/pyversions/crawl4ai)](https://pypi.org/project/crawl4ai/)\n[![Downloads](https://static.pepy.tech/badge/crawl4ai/month)](https://pepy.tech/project/crawl4ai)\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/unclecode?style=flat&logo=GitHub-Sponsors&label=Sponsors&color=pink)](https://github.com/sponsors/unclecode)\n\n---\n#### 🚀 Crawl4AI Cloud API — Closed Beta (Launching Soon)\nReliable, large-scale web extraction, now built to be _**drastically more cost-effective**_ than any of the existing solutions.\n\n👉 **Apply [here](https://forms.gle/E9MyPaNXACnAMaqG7) for early access**  \n_We’ll be onboarding in phases and working closely with early users.\nLimited slots._\n\n---\n\n<p align=\"center\">\n    <a href=\"https://x.com/crawl4ai\">\n      <img src=\"https://img.shields.io/badge/Follow%20on%20X-000000?style=for-the-badge&logo=x&logoColor=white\" alt=\"Follow on X\" />\n    </a>\n    <a href=\"https://www.linkedin.com/company/crawl4ai\">\n      <img src=\"https://img.shields.io/badge/Follow%20on%20LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white\" alt=\"Follow on LinkedIn\" />\n    </a>\n    <a href=\"https://discord.gg/jP8KfhDhyN\">\n      <img src=\"https://img.shields.io/badge/Join%20our%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white\" alt=\"Join our Discord\" />\n    </a>\n  </p>\n</div>\n\nCrawl4AI turns the web into clean, LLM ready Markdown for RAG, agents, and data pipelines. Fast, controllable, battle tested by a 50k+ star community.\n\n[✨ Check out latest update v0.9](#-recent-updates)\n\n✨ **New in v0.9**: Major secure-by-default release of the Docker API server. Auth is on by default, the server binds loopback unless given a token, and the request body is now an untrusted trust boundary. Breaking changes for the self-hosted server only; the pip library is unchanged. If you self-host the Docker API, read the [migration guide](https://github.com/unclecode/crawl4ai/blob/main/deploy/docker/MIGRATION.md) before upgrading. [Release notes →](https://github.com/unclecode/crawl4ai/blob/main/docs/blog/release-v0.9.0.md)\n\n✨ Recent v0.8.7: Security-hardening release. Fixes critical Docker API vulnerabilities (RCE, SSRF, auth bypass, file write, XSS, hardcoded JWT secret), adds DomainMapper, and ships scraping, deep-crawl, and LLM fixes. [Release notes →](https://github.com/unclecode/crawl4ai/blob/main/docs/blog/release-v0.8.7.md)\n\n✨ Recent v0.8.6: Security hotfix that replaced `litellm` with `unclecode-litellm` due to a PyPI supply chain compromise.\n\n✨ Previous v0.8.0: Crash Recovery & Prefetch Mode! Deep crawl crash recovery with `resume_state` and `on_state_change` callbacks for long-running crawls. New `prefetch=True` mode for 5-10x faster URL discovery. [Release notes →](https://github.com/unclecode/crawl4ai/blob/main/docs/blog/release-v0.8.0.md)\n\n✨ Previous v0.7.8: Stability & Bug Fix Release! 11 bug fixes addressing Docker API issues, LLM extraction improvements, URL handling fixes, and dependency updates. [Release notes →](https://github.com/unclecode/crawl4ai/blob/main/docs/blog/release-v0.7.8.md)\n\n<details>\n  <summary>🤓 <strong>My Personal Story</strong></summary>\n\nI grew up on an Amstrad, thanks to my dad, and never stopped building. In grad school I specialized in NLP and built crawlers for research. That’s where I learned how much extraction matters.\n\nIn 2023, I needed web-to-Markdown. The “open source” option wanted an account, API token, and $16, and still under-delivered. I went turbo anger mode, built Crawl4AI in days, and it went viral. Now it’s the most-starred crawler on GitHub.\n\nI made it open source for **availability**, anyone can use it without a gate. Now I’m building the platform for **affordability**, anyone can run serious crawls without breaking the bank. If that resonates, join in, send feedback, or just crawl something amazing.\n</details>\n\n\n<details>\n  <summary>Why developers pick Crawl4AI</summary>\n\n- **LLM ready output**, smart Markdown with headings, tables, code, citation hints\n- **Fast in practice**, async browser pool, caching, minimal hops\n- **Full control**, sessions, proxies, cookies, user scripts, hooks\n- **Adaptive intelligence**, learns site patterns, explores only what matters\n- **Deploy anywhere**, zero keys, CLI and Docker, cloud friendly\n</details>\n\n\n## 🚀 Quick Start \n\n1. Install Crawl4AI:\n```bash\n# Install the package\npip install -U crawl4ai\n\n# For pre release versions\npip install crawl4ai --pre\n\n# Run post-installation setup\ncrawl4ai-setup\n\n# Verify your installation\ncrawl4ai-doctor\n```\n\nIf you encounter any browser-related issues, you can install them manually:\n```bash\npython -m playwright install --with-deps chromium\n```\n\n2. Run a simple web crawl with Python:\n```python\nimport asyncio\nfrom crawl4ai import *\n\nasync def main():\n    async with AsyncWebCrawler() as crawler:\n        result = await crawler.arun(\n            url=\"https://www.nbcnews.com/business\",\n        )\n        print(result.markdown)\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n3. Or use the new command-line interface:\n```bash\n# Basic crawl with markdown output\ncrwl https://www.nbcnews.com/business -o markdown\n\n# Deep crawl with BFS strategy, max 10 pages\ncrwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10\n\n# Use LLM extraction with a specific question\ncrwl https://www.example.com/products -q \"Extract all product prices\"\n```\n\n## 💖 Support Crawl4AI\n\n> 🎉 **Sponsorship Program Now Open!** After powering 51K+ developers and 1 year of growth, Crawl4AI is launching dedicated support for **startups** and **enterprises**. Be among the first 50 **Founding Sponsors** for permanent recognition in our Hall of Fame.\n\nCrawl4AI is the #1 trending open-source web crawler on GitHub. Your support keeps it independent, innovative, and free for the community — while giving you direct access to premium benefits.\n\n<div align=\"\">\n  \n[![Become a Sponsor](https://img.shields.io/badge/Become%20a%20Sponsor-pink?style=for-the-badge&logo=github-sponsors&logoColor=white)](https://github.com/sponsors/unclecode)  \n[![Current Sponsors](https://img.shields.io/github/sponsors/unclecode?style=for-the-badge&logo=github&label=Current%20Sponsors&color=green)](https://github.com/sponsors/unclecode)\n\n</div>\n\n### 🤝 Sponsorship Tiers\n\n- **🌱 Believer ($5/mo)** — Join the movement for data democratization  \n- **🚀 Builder ($50/mo)** — Priority support & early access to features  \n- **💼 Growing Team ($500/mo)** — Bi-weekly syncs & optimization help  \n- **🏢 Data Infrastructure Partner ($2000/mo)** — Full partnership with dedicated support  \n  *Custom arrangements available - see [SPONSORS.md](SPONSORS.md) for details & contact*\n\n**Why sponsor?**  \nNo rate-limited APIs. No lock-in. Build and own your data pipeline with direct guidance from the creator of Crawl4AI.\n\n[See All Tiers & Benefits →](https://github.com/sponsors/unclecode)\n\n\n## ✨ Features \n\n<details>\n<summary>📝 <strong>Markdown Generation</strong></summary>\n\n- 🧹 **Clean Markdown**: Generates clean, structured Markdown with accurate formatting.\n- 🎯 **Fit Markdown**: Heuristic-based filtering to remove noise and irrelevant parts for AI-friendly processing.\n- 🔗 **Citations and References**: Converts page links into a numbered reference list with clean citations.\n- 🛠️ **Custom Strategies**: Users can create their own Markdown generation strategies tailored to specific needs.\n- 📚 **BM25 Algorithm**: Employs BM25-based filtering for extracting core information and removing irrelevant content. \n</details>\n\n<details>\n<summary>📊 <strong>Structured Data Extraction</strong></summary>\n\n- 🤖 **LLM-Driven Extraction**: Supports all LLMs (open-source and proprietary) for structured data extraction.\n- 🧱 **Chunking Strategies**: Implements chunking (topic-based, regex, sentence-level) for targeted content processing.\n- 🌌 **Cosine Similarity**: Find relevant content chunks based on user queries for semantic extraction.\n- 🔎 **CSS-Based Extraction**: Fast schema-based data extraction using XPath and CSS selectors.\n- 🔧 **Schema Definition**: Define custom schemas for extracting structured JSON from repetitive patterns.\n\n</details>\n\n<details>\n<summary>🌐 <strong>Browser Integration</strong></summary>\n\n- 🖥️ **Managed Browser**: Use user-owned browsers with full control, avoiding bot detection.\n- 🔄 **Remote Browser Control**: Connect to Chrome Developer Tools Protocol for remote, large-scale data extraction.\n- 👤 **Browser Profiler**: Create and manage persistent profiles with saved authentication states, cookies, and settings.\n- 🔒 **Session Management**: Preserve browser states and reuse them for multi-step crawling.\n- 🧩 **Proxy Support**: Seamlessly connect to proxies with authentication for secure access.\n- ⚙️ **Full Browser Control**: Modify headers, cookies, user agents, and more for tailored crawling setups.\n- 🌍 **Multi-Browser Support**: Compatible with Chromium, Firefox, and WebKit.\n- 📐 **Dynamic Viewport Adjustment**: Automatically adjusts the browser viewport to match page content, ensuring complete rendering and capturing of all elements.\n\n</details>\n\n<details>\n<summary>🔎 <strong>Crawling & Scraping</strong></summary>\n\n- 🖼️ **Media Support**: Extract images, audio, videos, and responsive image formats like `srcset` and `picture`.\n- 🚀 **Dynamic Crawling**: Execute JS and wait for async or sync for dynamic content extraction.\n- 📸 **Screenshots**: Capture page screenshots during crawling for debugging or analysis.\n- 📂 **Raw Data Crawling**: Directly process raw HTML (`raw:`) or local files (`file://`).\n- 🔗 **Comprehensive Link Extraction**: Extracts internal, external links, and embedded iframe content.\n- 🛠️ **Customizable Hooks**: Define hooks at every step to customize crawling behavior (supports both string and function-based APIs).\n- 💾 **Caching**: Cache data for improved speed and to avoid redundant fetches.\n- 📄 **Metadata Extraction**: Retrieve structured metadata from web pages.\n- 📡 **IFrame Content Extraction**: Seamless extraction from embedded iframe content.\n- 🕵️ **Lazy Load Handling**: Waits for images to fully load, ensuring no content is missed due to lazy loading.\n- 🔄 **Full-Page Scanning**: Simulates scrolling to load and capture all dynamic content, perfect for infinite scroll pages.\n\n</details>\n\n<details>\n<summary>🚀 <strong>Deployment</strong></summary>\n\n- 🐳 **Dockerized Setup**: Optimized Docker image with FastAPI server for easy deployment.\n- 🔑 **Secure Authentication**: Built-in JWT token authentication for API security.\n- 🔄 **API Gateway**: One-click deployment with secure token authentication for API-based workflows.\n- 🌐 **Scalable Architecture**: Designed for mass-scale production and optimized server performance.\n- ☁️ **Cloud Deployment**: Ready-to-deploy configurations for major cloud platforms.\n\n</details>\n\n<details>\n<summary>🎯 <strong>Additional Features</strong></summary>\n\n- 🕶️ **Stealth Mode**: Avoid bot detection by mimicking real users.\n- 🏷️ **Tag-Based Content Extraction**: Refine crawling based on custom tags, headers, or metadata.\n- 🔗 **Link Analysis**: Extract and analyze all links for detailed data exploration.\n- 🛡️ **Error Handling**: Robust error management for seamless execution.\n- 🔐 **CORS & Static Serving**: Supports filesystem-based caching and cross-origin requests.\n- 📖 **Cl",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [\"setuptools>=64.0.0\", \"wheel\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"Crawl4AI\"\ndynamic = [\"version\"]\ndescription = \"🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & scraper\"\nreadme = \"README.md\"\nrequires-python = \">=3.10\"\nlicense = \"Apache-2.0\"\nauthors = [\n    {name = \"Unclecode\", email = \"unclecode@kidocode.com\"}\n]\ndependencies = [\n    \"aiofiles>=24.1.0\",\n    \"aiohttp>=3.11.11\",\n    \"aiosqlite~=0.20\",\n    \"anyio>=4.0.0\",\n    \"lxml~=5.3\",\n    \"unclecode-litellm==1.81.13\",\n    \"numpy>=1.26.0,<3\",\n    \"pillow>=10.4\",\n    \"playwright>=1.49.0\",\n    \"patchright>=1.49.0\",\n    \"python-dotenv~=1.0\",\n    \"requests~=2.26\",\n    \"beautifulsoup4~=4.12\",\n    \"playwright-stealth>=2.0.0\",\n    \"xxhash~=3.4\",\n    \"rank-bm25~=0.2\",\n    \"snowballstemmer~=2.2\",\n    \"pydantic>=2.10\",\n    \"pyOpenSSL>=25.3.0\",\n    \"psutil>=6.1.1\",\n    \"PyYAML>=6.0\",\n    \"nltk>=3.9.1\",\n    \"rich>=13.9.4\",\n    \"cssselect>=1.2.0\",\n    \"httpx>=0.27.2\",\n    \"httpx[http2]>=0.27.2\",\n    \"fake-useragent>=2.0.3\",\n    \"click>=8.1.7\",\n    \"chardet>=5.2.0\",\n    \"brotli>=1.1.0\",\n    \"humanize>=4.10.0\",\n    \"lark>=1.2.2\",\n    \"alphashape>=1.3.1\",\n    \"shapely>=2.0.0\"\n]\nclassifiers = [\n    \"Development Status :: 4 - Beta\",\n    \"Intended Audience :: Developers\",\n    \"Programming Language :: Python :: 3\",\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]\n\n[project.optional-dependencies]\npdf = [\"pypdf\"]  \ntorch = [\"torch\", \"nltk\", \"scikit-learn\"]\ntransformer = [\"transformers\", \"tokenizers\", \"sentence-transformers\"]\ncosine = [\"torch\", \"transformers\", \"nltk\", \"sentence-transformers\"]\nsync = [\"selenium\"]\nall = [\n    \"pypdf\",\n    \"torch\",\n    \"nltk\",\n    \"scikit-learn\",\n    \"transformers\",\n    \"tokenizers\",\n    \"sentence-transformers\",\n    \"selenium\"\n]\n\n[project.scripts]\ncrawl4ai-download-models = \"crawl4ai.model_loader:main\"\ncrawl4ai-migrate = \"crawl4ai.migrations:main\"\ncrawl4ai-setup = \"crawl4ai.install:post_install\"\ncrawl4ai-doctor = \"crawl4ai.install:doctor\"\ncrwl = \"crawl4ai.cli:main\"\n\n[tool.setuptools]\npackages = {find = {where = [\".\"], include = [\"crawl4ai*\"]}}\n\n[tool.setuptools.package-data]\ncrawl4ai = [\"js_snippet/*.js\", \"crawlers/google_search/*.js\"]\n\n[tool.setuptools.dynamic]\nversion = {attr = \"crawl4ai.__version__.__version__\"}\n\n[tool.uv.sources]\ncrawl4ai = { workspace = true }\n\n[dependency-groups]\ndev = [\n    \"crawl4ai\",\n]\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "rag",
      "llm"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "owner": "tinyhumansai",
    "name": "openhuman",
    "full_name": "tinyhumansai/openhuman",
    "url": "https://github.com/tinyhumansai/openhuman",
    "description": "Your Personal AI super intelligence. Private, Simple and extremely powerful.",
    "language": "Rust",
    "total_stars": 33866,
    "forks": 3279,
    "stars_this_period": 276,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [],
      "license": "GPL-3.0",
      "open_issues": 206,
      "created_at": "2026-02-18T20:01:27Z",
      "pushed_at": "2026-06-29T17:18:40Z",
      "homepage": "https://tinyhumans.ai/openhuman",
      "default_branch": "main",
      "forks": 3279,
      "watchers": 178,
      "archived": false,
      "size_kb": 129207
    },
    "readme_content": "<h1 align=\"center\">OpenHuman</h1>\n\n<p align=\"center\">\n <img src=\"./gitbooks/.gitbook/assets/demo.png\" alt=\"The Tet\" />\n</p>\n\n<p align=\"center\" style=\"display: inline-block\">\n\t<a href=\"https://trendshift.io/repositories/23680\" target=\"_blank\" style=\"display: inline-block\">\n\t\t<img src=\"https://trendshift.io/api/badge/repositories/23680\" alt=\"tinyhumansai%2Fopenhuman | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/>\n\t</a>\n\t<a href=\"https://www.producthunt.com/products/openhuman?embed=true&amp;utm_source=badge-top-post-badge&amp;utm_medium=badge&amp;utm_campaign=badge-openhuman\" target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t<img alt=\"OpenHuman - An open source AI harness built with the human in mind | Product Hunt\" width=\"250\" height=\"54\" src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=1136902&amp;theme=light&amp;period=daily&amp;t=1778916022823\">\n\t\t</a>\n\t\t<a href=\"https://www.producthunt.com/products/openhuman?embed=true&amp;utm_source=badge-top-post-badge&amp;utm_medium=badge&amp;utm_campaign=badge-openhuman\" target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t\t<img alt=\"OpenHuman - An open source AI harness built with the human in mind | Product Hunt\" width=\"250\" height=\"54\" src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=1136902&amp;theme=light&amp;period=weekly&amp;t=1779351403565\">\n\t\t</a>\n</p>\n<p align=\"center\" style=\"display: inline-block\">\n <a href=\"https://www.producthunt.com/products/openhuman?embed=true&amp;utm_source=badge-top-post-topic-badge&amp;utm_medium=badge&amp;utm_campaign=badge-openhuman\" target=\"_blank\" rel=\"noopener noreferrer\">\n  <img alt=\"OpenHuman - An open source AI harness built with the human in mind | Product Hunt\" width=\"250\" height=\"54\" src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-topic-badge.svg?post_id=1136902&amp;theme=light&amp;period=weekly&amp;topic_id=268&amp;t=1779351808756\">\n  </a>\n  <a href=\"https://www.producthunt.com/products/openhuman?embed=true&amp;utm_source=badge-top-post-topic-badge&amp;utm_medium=badge&amp;utm_campaign=badge-openhuman\" target=\"_blank\" rel=\"noopener noreferrer\">\n   <img alt=\"OpenHuman - An open source AI harness built with the human in mind | Product Hunt\" width=\"250\" height=\"54\" src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-topic-badge.svg?post_id=1136902&amp;theme=light&amp;period=weekly&amp;topic_id=46&amp;t=1779351808756\">\n   </a>\n </p>\n\n\n<p align=\"center\">\n <strong>OpenHuman is your Personal AI super intelligence: local memory, managed services where needed, simple and powerful.</strong>\n</p>\n\n\n<p align=\"center\">\n <a href=\"https://discord.tinyhumans.ai/\">Discord</a> •\n <a href=\"https://www.reddit.com/r/tinyhumansai/\">Reddit</a> •\n <a href=\"https://x.com/intent/follow?screen_name=tinyhumansai\">X/Twitter</a> •\n <a href=\"https://tinyhumans.gitbook.io/openhuman/\">Docs</a> •\n <a href=\"https://x.com/intent/follow?screen_name=senamakel\">Follow @senamakel (Creator)</a>\n</p>\n\n<p align=\"center\">\n  🇺🇸 <a href=\"./README.md\">English</a> | 🇨🇳 <a href=\"./docs/README.zh-CN.md\">简体中文</a> | 🇯🇵 <a href=\"./docs/README.ja-JP.md\">日本語</a> | 🇰🇷 <a href=\"./docs/README.ko.md\">한국어</a> | 🇩🇪 <a href=\"./docs/README.de.md\">Deutsch</a> | 🇵🇰 <a href=\"./docs/README.ur-pk.md\">اردو</a>\n</p>\n\n\n\n<p align=\"center\">\n <img src=\"https://img.shields.io/badge/status-early%20beta-orange\" alt=\"Early Beta\" />\n <a href=\"https://github.com/tinyhumansai/openhuman/releases/latest\"><img src=\"https://img.shields.io/github/v/release/tinyhumansai/openhuman?label=latest\" alt=\"Latest Release\" /></a>\n <a href=\"https://github.com/tinyhumansai/openhuman/stargazers\"><img src=\"https://img.shields.io/github/stars/tinyhumansai/openhuman?style=flat\" alt=\"GitHub Stars\" /></a>\n <a href=\"./LICENSE\"><img src=\"https://img.shields.io/github/license/tinyhumansai/openhuman\" alt=\"License\" /></a>\n <a href=\"./docs/README.zh-CN.md\"><img src=\"https://img.shields.io/badge/lang-简体中文-blue\" alt=\"简体中文\" /></a>\n <a href=\"./docs/README.ja-JP.md\"><img src=\"https://img.shields.io/badge/lang-日本語-blue\" alt=\"日本語\" /></a>\n <a href=\"./docs/README.ko.md\"><img src=\"https://img.shields.io/badge/lang-한국어-blue\" alt=\"한국어\" /></a>\n <a href=\"./docs/README.de.md\"><img src=\"https://img.shields.io/badge/lang-Deutsch-blue\" alt=\"Deutsch\" /></a>\n <a href=\"./docs/README.ur-pk.md\"><img src=\"https://img.shields.io/badge/lang-اردو-blue\" alt=\"اردو\" /></a>\n</p>\n\n> **Early Beta**: Under active development. Expect rough edges.\n\n> **Local + managed services, upfront:** OpenHuman stores its Memory Tree, Obsidian-style Markdown vault, workspace config, and local runtime state on your machine. The default managed experience still uses OpenHuman-hosted services for account sign-in, model routing, web search proxying, and managed integration/OAuth flows through the Composio connector layer. Choose custom/local settings if you want to bring your own model, search, or Composio credentials; some real-time triggers and hosted features still require the managed backend.\n\n# Install\n\nDownload installers from [tinyhumans.ai/openhuman](https://tinyhumans.ai/openhuman?utm_source=github&utm_medium=readme) or from the [GitHub Releases](https://github.com/tinyhumansai/openhuman/releases/latest) page. For terminal installs, the native package paths below are preferred — they ride your OS package-manager's signing chain.\n\n## Recommended install (native packages)\n\nThese paths verify the artifact through your OS package manager's signing chain (Homebrew bottle hash, signed apt repo, MSI signature).\n\n**macOS (Homebrew tap):**\n\n```bash\nbrew tap tinyhumansai/core\nbrew install openhuman\n```\n\n**Linux (Debian/Ubuntu — signed apt repo):**\n\n```bash\nsudo apt-get install -y --no-install-recommends gnupg2 curl ca-certificates\ncurl -fsSL https://tinyhumansai.github.io/openhuman/apt/KEY.gpg \\\n  | sudo gpg --dearmor -o /etc/apt/keyrings/openhuman.gpg\necho \"deb [signed-by=/etc/apt/keyrings/openhuman.gpg arch=amd64] \\\n  https://tinyhumansai.github.io/openhuman/apt stable main\" \\\n  | sudo tee /etc/apt/sources.list.d/openhuman.list\nsudo apt-get update\nsudo apt-get install -y openhuman\n```\n\n**Linux (Arch — AUR):** the [`openhuman-bin` AUR recipe](./packages/arch/openhuman-bin/) is in the repo. Once published, Arch users can install it with `yay -S openhuman-bin`.\n\n**Windows:** download the signed `.msi` from the [latest release](https://github.com/tinyhumansai/openhuman/releases/latest) and run it.\n\n**Manual `.dmg` / `.deb` / `.AppImage` / `.msi`:** grab the installer for your platform directly from the [latest release page](https://github.com/tinyhumansai/openhuman/releases/latest).\n\n> **Linux:** the AppImage can crash on launch under Wayland (and on Arch-based distros with `sharun: Interpreter not found!`) — see [#2463](https://github.com/tinyhumansai/openhuman/issues/2463) for the cause and env-var workarounds. The `.deb` package above avoids those failure modes on Debian/Ubuntu.\n\n## Alternative: script install (no integrity check)\n\n> **Warning — unverified install.** These scripts are served live from `raw.githubusercontent.com` and do **not** ship a separate signature, so `curl … | bash` and `irm … | iex` have no way to detect tampering of the script bytes. Prefer the **native package** paths above whenever possible. If you must use the script, see \"Verified script install\" below.\n\n```bash\n# macOS or Linux x64\ncurl -fsSL https://raw.githubusercontent.com/tinyhumansai/openhuman/main/scripts/install.sh | bash\n\n# Windows (PowerShell)\nirm https://raw.githubusercontent.com/tinyhumansai/openhuman/main/scripts/install.ps1 | iex\n```\n\n## Verified script install status\n\nA separately signed script-install path is not currently available. Issue [#2620](https://github.com/tinyhumansai/openhuman/issues/2620) is closed after the native package paths were promoted, but current release assets do not include `install.sh.asc` / `install.ps1.asc` for pre-execution script verification. Treat the script install path as unverified and prefer the native package options above when possible.\n\n# What is OpenHuman?\n\nOpenHuman is an open-source agentic assistant designed to integrate with you in your daily life. Each bullet links to the deeper writeup in the [docs](https://tinyhumans.gitbook.io/openhuman/).\n\n- **Simple, UI-first & Human** A clean desktop experience and short onboarding paths take you from install to a working agent in a few clicks — no config-first setup, no terminal required. The agent has [a face](https://tinyhumans.gitbook.io/openhuman/features/mascot): a desktop mascot that speaks, reacts to its surroundings, [joins your Google Meets](https://tinyhumans.gitbook.io/openhuman/features/mascot/meeting-agents) as a real participant, remembers you across weeks, and keeps thinking in the background even when you've stopped typing.\n\n- **100+ one-click OAuth integrations, 5,000+ MCP servers, 90,000+ Skills**: plug into Gmail, Notion, GitHub, Slack, Stripe, Calendar, Drive, Linear, Jira and the rest of your stack with [**one-click OAuth**](https://tinyhumans.gitbook.io/openhuman/features/integrations) — 100+ curated connectors brokered through the Composio layer. Beyond that, OpenHuman browses the open **Model Context Protocol** ecosystem (Smithery + the official MCP registry — thousands of servers) and a **90,000-entry Skills catalog**, so the agent can install new typed tools and skills on demand. Every connection becomes a typed tool, and every twenty minutes [auto-fetch](https://tinyhumans.gitbook.io/openhuman/features/obsidian-wiki/auto-fetch) walks each active connection and pulls fresh data into the [memory tree](https://tinyhumans.gitbook.io/openhuman/features/memory-tree). No prompts, no polling loops you have to write, so the agent already has tomorrow's context this morning.\n\n  Managed integrations use OpenHuman's Composio connector layer. OAuth handshakes and integration tool calls are proxied through the managed backend by default. If you want to run Composio directly instead, configure direct mode with your own Composio API key; real-time trigger webhooks then need to be hosted and wired by you.\n\n- **[Memory Tree](https://tinyhumans.gitbook.io/openhuman/features/memory-tree) + [Obsidian Wiki](https://tinyhumans.gitbook.io/openhuman/features/obsidian-wiki)**: a local-first knowledge base built from your data and your activity. Everything you connect is canonicalized into ≤3k-token Markdown chunks, scored, and folded into hierarchical summary trees stored in **SQLite on your machine**. The same chunks land as `.md` files in an Obsidian-compatible vault you can open, browse and edit, inspired by Karpathy's [obsidian-wiki workflow](https://x.com/karpathy/status/2039805659525644595).\n\n- **[SuperContext](https://tinyhumans.gitbook.io/openhuman/features/super-context)**: a fresh chat shouldn't start cold. With SuperContext enabled, the harness deterministically spawns a read-only `context_scout` on the **first turn of every new thread** — it sweeps your memory tree, files, and connected data, assembles a bounded context bundle, and prepends it to your message before the model ever reads it. No tool call to wait on, no \"let me look that up\" round-trip: the agent answers your first message already knowing the relevant background. Toggle it from the composer or `context.super_context_enabled`.\n\n- **[Goals & Todos](https://tinyhumans.gitbook.io/openhuman/features/goals-and-todos)**: OpenHuman keeps the agent pointed at what matters. A short, human-editable list of **long-term goals** (`MEMORY_GOALS.md`) rides along in memory and can self-reflect against your recent activity; each **thread** can carry a single durable **goal** with an optional token budget that the agent works across turns, interrupts and idle periods (autonomous idle continuation); and every conversation hosts a **kanban task board** of todos that you and the agent build together — plans, acceptance criteria, approval gates and all. There's also a personal task list you own outri",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[package]\nname = \"openhuman\"\nversion = \"0.58.0\"\nedition = \"2021\"\ndescription = \"OpenHuman core business logic and RPC server\"\nautobins = false\n\n[[bin]]\nname = \"openhuman-core\"\npath = \"src/main.rs\"\n\n[[bin]]\nname = \"slack-backfill\"\npath = \"src/bin/slack_backfill.rs\"\n\n[[bin]]\nname = \"gmail-backfill-3d\"\npath = \"src/bin/gmail_backfill_3d.rs\"\n\n[[bin]]\nname = \"memory-tree-init-smoke\"\npath = \"src/bin/memory_tree_init_smoke.rs\"\n\n[[bin]]\nname = \"inference-probe\"\npath = \"src/bin/inference_probe.rs\"\n\n[[bin]]\nname = \"harness-subagent-audit\"\npath = \"src/bin/harness_subagent_audit.rs\"\n\n[[bin]]\nname = \"test-mcp-stub\"\npath = \"src/bin/test_mcp_stub.rs\"\n\n[lib]\nname = \"openhuman_core\"\ncrate-type = [\"rlib\"]\n\n[dependencies]\n# tiny.place A2A social network SDK — published on crates.io (tinyhumansai/tiny.place)\ntinyplace = \"1.0.1\"\n# TokenJuice code compressor — AST-aware signature extraction. Optional (C build)\n# behind the default `tokenjuice-treesitter` feature; disabling it falls back to\n# the language-agnostic brace-depth heuristic. See src/openhuman/tokenjuice/compressors/code.rs.\ntree-sitter = { version = \"0.24\", optional = true }\ntree-sitter-rust = { version = \"0.23\", optional = true }\ntree-sitter-typescript = { version = \"0.23\", optional = true }\ntree-sitter-python = { version = \"0.23\", optional = true }\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\nserde_repr = \"0.1\"\nserde_yaml = \"0.9\"\n# (Removed `html2md` dep. dhat-rs profiling on real Gmail inboxes\n# showed `html2md::walk` and `html2md::tables::handle` allocating\n# ~894 MB peak heap on a 10 KB HTML input from Otter.ai-style emails\n# (deeply-nested table-as-layout HTML). Cause: recursive walker holding\n# per-frame Vec state across nesting layers + 5 sequential\n# `regex::replace_all` passes in `clean_markdown` each producing a\n# fresh full-size String. We now use a linear-time tag-and-entity\n# stripper (`fast_html_to_text` in\n# providers/gmail/post_process.rs) and prefer the email's\n# `text/plain` MIME part when available.)\nreqwest = { version = \"0.12\", default-features = false, features = [\"json\", \"blocking\", \"rustls-tls\", \"native-tls\", \"stream\", \"http2\", \"multipart\", \"socks\"] }\ntokio = { version = \"1\", features = [\"full\", \"sync\"] }\nonce_cell = \"1.19\"\nparking_lot = \"0.12\"\nlog = \"0.4\"\nlibc = \"0.2\"\nnu-ansi-term = \"0.46\"\nenv_logger = \"0.11\"\nbase64 = \"0.22\"\naes-gcm = \"0.10\"\nargon2 = \"0.5\"\nrand = \"0.10\"\ndirs = \"5\"\nsha2 = \"0.10\"\n# Line-level text diffs for the memory_diff module (modified-item unified diffs).\nsimilar = \"2\"\n# Git-backed change ledger for the memory_diff module: snapshots are commits,\n# checkpoints are tags, read markers are refs, diffs are git tree diffs.\n# Vendored libgit2 (no system git dependency on end-user machines).\ngit2 = { version = \"0.21\", default-features = false, features = [\"vendored-libgit2\"] }\n# Legacy SHA-1 only used for Tencent COS HMAC-SHA1 signing (yuanbao\n# channel media upload). Not used for any new security-sensitive work.\nsha1 = \"0.10\"\nhmac = \"0.12\"\n# Archive extraction for the Node.js runtime bootstrap. Unix Node\n# distributions ship as .tar.xz, Windows as .zip. `xz2` with `static`\n# bundles liblzma so we don't need it as a system dependency.\ntar = \"0.4\"\nxz2 = { version = \"0.1\", features = [\"static\"] }\nzip = { version = \"2\", default-features = false, features = [\"deflate\"] }\n# gzip decoder for the Piper tar.gz binary releases on macOS / Linux. Already\n# pulled in transitively by zip's `deflate` feature; declared directly so\n# the installer module can `use flate2::read::GzDecoder`.\nflate2 = \"1\"\n# Real timeout for `node --version` probes in the runtime resolver. Guards\n# against a broken shim on PATH hanging the bootstrap forever.\nwait-timeout = \"0.2\"\nuuid = { version = \"1\", features = [\"v4\"] }\nanyhow = \"1.0\"\nasync-trait = \"0.1\"\nchacha20poly1305 = \"0.10\"\n# Wipe master keys / decrypted secret buffers from memory on drop (audit C9).\n# Already present transitively (resolved to 1.8.x via the *-dalek / cipher\n# crates); declared directly so the keyring module can `use zeroize::Zeroizing`.\nzeroize = \"1\"\nx25519-dalek = { version = \"2\", features = [\"static_secrets\"] }\nhkdf = \"0.12\"\nhex = \"0.4\"\ntokio-util = { version = \"0.7\", features = [\"rt\", \"io\"] }\n# tokio-tungstenite is declared per-target below so the TLS backend\n# (native-tls on Windows, rustls on macOS / Linux) matches the reqwest\n# backend selected at each TLS call site.\nfutures = \"0.3\"\nrusqlite = { version = \"0.37\", features = [\"bundled\"] }\nchrono = { version = \"0.4\", features = [\"serde\"] }\niana-time-zone = \"0.1\"\ncron = \"0.12\"\nfutures-util = \"0.3\"\ndirectories = \"6\"\ntoml = \"1.0\"\nshellexpand = \"3.1\"\nschemars = \"1.2\"\ntracing = { version = \"0.1\", default-features = false }\ntracing-log = \"0.2\"\ntracing-subscriber = { version = \"0.3\", default-features = false, features = [\"fmt\", \"ansi\", \"env-filter\"] }\ntracing-appender = \"0.2\"\nprometheus = { version = \"0.14\", default-features = false }\nurlencoding = \"2.1\"\nmotosan-ai-oauth = { version = \"0.2\", features = [\"codex\"] }\nthiserror = ",
    "strategic_keywords": [
      "agent",
      "memory",
      "mcp",
      "inference"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 10,
      "total": 92
    },
    "strategic_score": 92
  },
  {
    "owner": "yt-dlp",
    "name": "yt-dlp",
    "full_name": "yt-dlp/yt-dlp",
    "url": "https://github.com/yt-dlp/yt-dlp",
    "description": "A feature-rich command-line audio/video downloader",
    "language": "Python",
    "total_stars": 174238,
    "forks": 14694,
    "stars_this_period": 271,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "cli",
        "downloader",
        "python",
        "sponsorblock",
        "youtube-dl",
        "youtube-downloader",
        "yt-dlp"
      ],
      "license": "Unlicense",
      "open_issues": 2517,
      "created_at": "2020-10-26T04:22:55Z",
      "pushed_at": "2026-06-29T22:00:04Z",
      "homepage": "https://discord.gg/H5MNcFW63r",
      "default_branch": "master",
      "forks": 14694,
      "watchers": 876,
      "archived": false,
      "size_kb": 61170
    },
    "readme_content": "<!-- MANPAGE: BEGIN EXCLUDED SECTION -->\n<div align=\"center\">\n\n[![YT-DLP](https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/.github/banner.svg)](#readme)\n\n[![Release version](https://img.shields.io/github/v/release/yt-dlp/yt-dlp?color=brightgreen&label=Latest&style=for-the-badge)](#installation \"Installation\")\n[![Python Version](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fyt-dlp%2Fyt-dlp%2Frefs%2Fheads%2Fmaster%2Fpyproject.toml&style=for-the-badge)](https://github.com/yt-dlp/yt-dlp/blob/master/pyproject.toml \"Python Version\")\n[![PyPI](https://img.shields.io/badge/-PyPI-blue.svg?logo=pypi&labelColor=555555&style=for-the-badge)](https://pypi.org/project/yt-dlp \"PyPI\")\n[![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?&logo=discord&logoColor=white&style=for-the-badge)]([#](https://discord.gg/H5MNcFW63r \"Discord\")\n[![License: Unlicense](https://img.shields.io/badge/-Unlicense-red.svg?style=for-the-badge)](LICENSE \"License\")\n[![Commits](https://img.shields.io/github/commit-activity/m/yt-dlp/yt-dlp?label=commits&style=for-the-badge)](https://github.com/yt-dlp/yt-dlp/commits \"Commit History\")\n\n</div>\n<!-- MANPAGE: END EXCLUDED SECTION -->\n\nyt-dlp is a feature-rich command-line audio/video downloader with support for [thousands of sites](supportedsites.md). The project is a fork of [youtube-dl](https://github.com/ytdl-org/youtube-dl) based on the now inactive [youtube-dlc](https://github.com/blackjack4494/yt-dlc).\n\n<!-- MANPAGE: MOVE \"USAGE AND OPTIONS\" SECTION HERE -->\n\n<!-- MANPAGE: BEGIN EXCLUDED SECTION -->\n* [INSTALLATION](#installation)\n    * [Detailed instructions](https://github.com/yt-dlp/yt-dlp/wiki/Installation)\n    * [Release Files](#release-files)\n    * [Update](#update)\n    * [Dependencies](#dependencies)\n    * [Compile](#compile)\n* [USAGE AND OPTIONS](#usage-and-options)\n    * [General Options](#general-options)\n    * [Network Options](#network-options)\n    * [Geo-restriction](#geo-restriction)\n    * [Video Selection](#video-selection)\n    * [Download Options](#download-options)\n    * [Filesystem Options](#filesystem-options)\n    * [Thumbnail Options](#thumbnail-options)\n    * [Internet Shortcut Options](#internet-shortcut-options)\n    * [Verbosity and Simulation Options](#verbosity-and-simulation-options)\n    * [Workarounds](#workarounds)\n    * [Video Format Options](#video-format-options)\n    * [Subtitle Options](#subtitle-options)\n    * [Authentication Options](#authentication-options)\n    * [Post-processing Options](#post-processing-options)\n    * [SponsorBlock Options](#sponsorblock-options)\n    * [Extractor Options](#extractor-options)\n    * [Preset Aliases](#preset-aliases)\n* [CONFIGURATION](#configuration)\n    * [Configuration file encoding](#configuration-file-encoding)\n    * [Authentication with netrc](#authentication-with-netrc)\n    * [Notes about environment variables](#notes-about-environment-variables)\n* [OUTPUT TEMPLATE](#output-template)\n    * [Output template examples](#output-template-examples)\n* [FORMAT SELECTION](#format-selection)\n    * [Filtering Formats](#filtering-formats)\n    * [Sorting Formats](#sorting-formats)\n    * [Format Selection examples](#format-selection-examples)\n* [MODIFYING METADATA](#modifying-metadata)\n    * [Modifying metadata examples](#modifying-metadata-examples)\n* [EXTRACTOR ARGUMENTS](#extractor-arguments)\n* [PLUGINS](#plugins)\n    * [Installing Plugins](#installing-plugins)\n    * [Developing Plugins](#developing-plugins)\n* [EMBEDDING YT-DLP](#embedding-yt-dlp)\n    * [Embedding examples](#embedding-examples)\n* [CHANGES FROM YOUTUBE-DL](#changes-from-youtube-dl)\n    * [New features](#new-features)\n    * [Differences in default behavior](#differences-in-default-behavior)\n    * [Deprecated options](#deprecated-options)\n* [CONTRIBUTING](CONTRIBUTING.md#contributing-to-yt-dlp)\n    * [Opening an Issue](CONTRIBUTING.md#opening-an-issue)\n    * [Developer Instructions](CONTRIBUTING.md#developer-instructions)\n* [WIKI](https://github.com/yt-dlp/yt-dlp/wiki)\n    * [FAQ](https://github.com/yt-dlp/yt-dlp/wiki/FAQ)\n<!-- MANPAGE: END EXCLUDED SECTION -->\n\n\n# INSTALLATION\n\n<!-- MANPAGE: BEGIN EXCLUDED SECTION -->\n[![Windows](https://img.shields.io/badge/-Windows_x64-blue.svg?style=for-the-badge&logo=windows)](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe)\n[![Unix](https://img.shields.io/badge/-Linux/BSD-red.svg?style=for-the-badge&logo=linux)](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp)\n[![MacOS](https://img.shields.io/badge/-MacOS-lightblue.svg?style=for-the-badge&logo=apple)](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos)\n[![PyPI](https://img.shields.io/badge/-PyPI-blue.svg?logo=pypi&labelColor=555555&style=for-the-badge)](https://pypi.org/project/yt-dlp)\n[![Source Tarball](https://img.shields.io/badge/-Source_tar-green.svg?style=for-the-badge)](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.tar.gz)\n[![Other variants](https://img.shields.io/badge/-Other-grey.svg?style=for-the-badge)](#release-files)\n[![All versions](https://img.shields.io/badge/-All_Versions-lightgrey.svg?style=for-the-badge)](https://github.com/yt-dlp/yt-dlp/releases)\n<!-- MANPAGE: END EXCLUDED SECTION -->\n\nYou can install yt-dlp using [the binaries](#release-files), [pip](https://pypi.org/project/yt-dlp) or one using a third-party package manager. See [the wiki](https://github.com/yt-dlp/yt-dlp/wiki/Installation) for detailed instructions\n\n\n<!-- MANPAGE: BEGIN EXCLUDED SECTION -->\n## RELEASE FILES\n\n#### Recommended\n\nFile|Description\n:---|:---\n[yt-dlp](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp)|Platform-independent [zipimport](https://docs.python.org/3/library/zipimport.html) binary. Needs Python (recommended for **Linux/BSD**)\n[yt-dlp.exe](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe)|Windows (Win8+) standalone x64 binary (recommended for **Windows**)\n[yt-dlp_macos](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos)|Universal MacOS (10.15+) standalone executable (recommended for **MacOS**)\n\n#### Alternatives\n\nFile|Description\n:---|:---\n[yt-dlp_linux](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux)|Linux (glibc 2.17+) standalone x86_64 binary\n[yt-dlp_linux.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux.zip)|Unpackaged Linux (glibc 2.17+) x86_64 executable (no auto-update)\n[yt-dlp_linux_aarch64](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux_aarch64)|Linux (glibc 2.17+) standalone aarch64 binary\n[yt-dlp_linux_aarch64.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux_aarch64.zip)|Unpackaged Linux (glibc 2.17+) aarch64 executable (no auto-update)\n[yt-dlp_linux_armv7l.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux_armv7l.zip)|Unpackaged Linux (glibc 2.31+) armv7l executable (no auto-update)\n[yt-dlp_musllinux](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_musllinux)|Linux (musl 1.2+) standalone x86_64 binary\n[yt-dlp_musllinux.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_musllinux.zip)|Unpackaged Linux (musl 1.2+) x86_64 executable (no auto-update)\n[yt-dlp_musllinux_aarch64](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_musllinux_aarch64)|Linux (musl 1.2+) standalone aarch64 binary\n[yt-dlp_musllinux_aarch64.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_musllinux_aarch64.zip)|Unpackaged Linux (musl 1.2+) aarch64 executable (no auto-update)\n[yt-dlp_x86.exe](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_x86.exe)|Windows (Win8+) standalone x86 (32-bit) binary\n[yt-dlp_win_x86.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_win_x86.zip)|Unpackaged Windows (Win8+) x86 (32-bit) executable (no auto-update)\n[yt-dlp_arm64.exe](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_arm64.exe)|Windows (Win10+) standalone ARM64 binary\n[yt-dlp_win_arm64.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_win_arm64.zip)|Unpackaged Windows (Win10+) ARM64 executable (no auto-update)\n[yt-dlp_win.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_win.zip)|Unpackaged Windows (Win8+) x64 executable (no auto-update)\n[yt-dlp_macos.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos.zip)|Unpackaged MacOS (10.15+) executable (no auto-update)\n\n#### Misc\n\nFile|Description\n:---|:---\n[yt-dlp.tar.gz](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.tar.gz)|Source tarball\n[SHA2-512SUMS](https://github.com/yt-dlp/yt-dlp/releases/latest/download/SHA2-512SUMS)|GNU-style SHA512 sums\n[SHA2-512SUMS.sig](https://github.com/yt-dlp/yt-dlp/releases/latest/download/SHA2-512SUMS.sig)|GPG signature file for SHA512 sums\n[SHA2-256SUMS](https://github.com/yt-dlp/yt-dlp/releases/latest/download/SHA2-256SUMS)|GNU-style SHA256 sums\n[SHA2-256SUMS.sig](https://github.com/yt-dlp/yt-dlp/releases/latest/download/SHA2-256SUMS.sig)|GPG signature file for SHA256 sums\n\nThe public key that can be used to verify the GPG signatures is [available here](https://github.com/yt-dlp/yt-dlp/blob/master/public.key)\nExample usage:\n```\ncurl -L https://github.com/yt-dlp/yt-dlp/raw/master/public.key | gpg --import\ngpg --verify SHA2-256SUMS.sig SHA2-256SUMS\ngpg --verify SHA2-512SUMS.sig SHA2-512SUMS\n```\n\n#### Licensing\n\nWhile yt-dlp is licensed under the [Unlicense](LICENSE), many of the release files contain code from other projects with different licenses.\n\nMost notably, the PyInstaller-bundled executables include GPLv3+ licensed code, and as such the combined work is licensed under [GPLv3+](https://www.gnu.org/licenses/gpl-3.0.html).\n\nThe zipimport Unix executable (`yt-dlp`) contains [ISC](https://github.com/meriyah/meriyah/blob/main/LICENSE.md) licensed code from [`meriyah`](https://github.com/meriyah/meriyah) and [MIT](https://github.com/davidbonnet/astring/blob/main/LICENSE) licensed code from [`astring`](https://github.com/davidbonnet/astring).\n\nSee [THIRD_PARTY_LICENSES.txt](THIRD_PARTY_LICENSES.txt) for more details.\n\nThe git repository, the source tarball (`yt-dlp.tar.gz`), the PyPI source distribution and the PyPI built distribution (wheel) only contain code licensed under the [Unlicense](LICENSE).\n\n<!-- MANPAGE: END EXCLUDED SECTION -->\n\n**Note**: The manpages, shell completion (autocomplete) files etc. are available inside the [source tarball](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.tar.gz)\n\n\n## UPDATE\nYou can use `yt-dlp -U` to update if you are using the [release binaries](#release-files)\n\nIf you [installed with pip](https://github.com/yt-dlp/yt-dlp/wiki/Installation#with-pip), simply re-run the same command that was used to install the program\n\nFor other third-party package managers, see [the wiki](https://github.com/yt-dlp/yt-dlp/wiki/Installation#third-party-package-managers) or refer to their documentation\n\n<a id=\"update-channels\"></a>\n\nThere are currently three release channels for binaries: `stable`, `nightly` and `master`.\n\n* `stable` is the default channel, which offers releases published on a (mostly) monthly schedule. While it is named `stable` due to many of its changes having been tested by users of the `nightly` or `master` release channels, the latest `stable` release is often \"stale\" and prone to external breakage (i.e. sites changing things on their end and breaking yt-dlp).\n* The `nightly` channel offers releases that publish shortly before midnight UTC on any day that sees changes to the codebase. This channel serves as a snapshot of the project's development, and it is the **recommended channel for regular users** of yt-dlp. The `nightly` releases are available from [yt-dlp/yt-dlp-nightly-builds](https://github.com/yt-dlp/yt-dlp-nightly-builds/releases) or as development releases of the `yt-dlp` PyPI package (which",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [\"hatchling>=1.27.0\"]\nbuild-backend = \"hatchling.build\"\n\n[project]\nname = \"yt-dlp\"\nauthors = [\n    {name = \"pukkandan\", email = \"pukkandan.ytdlp@gmail.com\"},\n]\nmaintainers = [\n    {email = \"maintainers@yt-dlp.org\"},\n    {name = \"Grub4K\", email = \"contact@grub4k.dev\"},\n    {name = \"bashonly\", email = \"bashonly@protonmail.com\"},\n    {name = \"coletdjnz\", email = \"coletdjnz@protonmail.com\"},\n]\ndescription = \"A feature-rich command-line audio/video downloader\"\nreadme = \"README.md\"\nrequires-python = \">=3.10\"\nkeywords = [\n    \"cli\",\n    \"downloader\",\n    \"youtube-dl\",\n    \"youtube-downloader\",\n    \"sponsorblock\",\n    \"yt-dlp\",\n]\nlicense = \"Unlicense\"\nlicense-files = [\"LICENSE\"]\nclassifiers = [\n    \"Topic :: Multimedia :: Video\",\n    \"Development Status :: 5 - Production/Stable\",\n    \"Environment :: Console\",\n    \"Programming Language :: Python\",\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 :: Implementation\",\n    \"Programming Language :: Python :: Implementation :: CPython\",\n    \"Programming Language :: Python :: Implementation :: PyPy\",\n    \"Operating System :: OS Independent\",\n]\ndynamic = [\"version\"]\ndependencies = []\n\n[project.optional-dependencies]\ndefault = [\n    \"brotli ; implementation_name == 'cpython' and sys_platform != 'ios'\",\n    \"brotlicffi ; implementation_name != 'cpython'\",\n    \"certifi\",\n    \"mutagen\",\n    \"pycryptodomex\",\n    \"requests>=2.32.2,<3\",\n    \"urllib3>=2.0.2,<3\",\n    \"websockets>=13.0\",\n    \"yt-dlp-ejs==0.8.0\",\n]\ncurl-cffi = [\n    \"curl-cffi>=0.5.10,!=0.6.*,!=0.7.*,!=0.8.*,!=0.9.*,<0.16 ; implementation_name == 'cpython'\",\n]\nsecretstorage = [\n    \"secretstorage\",\n]\ndeno = [\n    \"deno>=2.6.6\",\n]\npin = [\n    \"brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios'\",\n    \"brotlicffi==1.2.0.1 ; implementation_name != 'cpython'\",\n    \"certifi==2026.5.20\",\n    \"charset-normalizer==3.4.7\",\n    \"idna==3.18\",\n    \"mutagen==1.47.0\",\n    \"pycryptodomex==3.23.0\",\n    \"requests==2.34.2\",\n    \"urllib3==2.7.0\",\n    \"websockets==16.0\",\n    \"yt-dlp-ejs==0.8.0\",\n]\npin-curl-cffi = [\n    \"certifi==2026.5.20 ; implementation_name == 'cpython'\",\n    \"cffi==2.0.0 ; implementation_name == 'cpython'\",\n    \"curl-cffi==0.15.0 ; implementation_name == 'cpython'\",\n    \"markdown-it-py==4.2.0 ; implementation_name == 'cpython'\",\n    \"mdurl==0.1.2 ; implementation_name == 'cpython'\",\n    \"pycparser==3.0 ; implementation_name == 'cpython'\",\n    \"pygments==2.20.0 ; implementation_name == 'cpython'\",\n    \"rich==15.0.0 ; implementation_name == 'cpython'\",\n]\npin-secretstorage = [\n    \"cffi==2.0.0 ; platform_python_implementation != 'PyPy'\",\n    \"cryptography==49.0.0\",\n    \"jeepney==0.9.0\",\n    \"pycparser==3.0 ; implementation_name != 'PyPy' and platform_python_implementation != 'PyPy'\",\n    \"secretstorage==3.5.0\",\n    \"typing-extensions==4.15.0 ; python_full_version < '3.11'\",\n]\npin-deno = [\n    \"deno==2.8.3\",\n]\n\n[dependency-groups]\nbuild = [\n    \"build\",\n    \"hatchling>=1.27.0\",\n]\nstatic-analysis = [\n    \"autopep8~=2.0\",\n    \"ruff~=0.15.0\",\n]\ntest = [\n    \"pytest~=9.0\",\n    \"pytest-rerunfailures~=16.0\",\n]\ndev = [\n    \"pre-commit\",\n    {include-group = \"static-analysis\"},\n    {include-group = \"test\"},\n]\npyinstaller = [\n    \"pyinstaller>=6.17.0\",\n]\ndelocate = [\n    \"delocate>=0.13.0 ; sys_platform == 'darwin'\",\n]\npyflakes = [\n    \"pyflakes~=3.4.0\",\n]\npip = [\n    \"pip\",\n]\nuv = [\n    \"uv>=0.10\",\n]\n\n[project.urls]\nDocumentation = \"https://github.com/yt-dlp/yt-dlp#readme\"\nRepository = \"https://github.com/yt-dlp/yt-dlp\"\nTracker = \"https://github.com/yt-dlp/yt-dlp/issues\"\nFunding = \"https://github.com/yt-dlp/yt-dlp/blob/master/Maintainers.md#maintainers\"\n\n[project.scripts]\nyt-dlp = \"yt_dlp:main\"\n\n[project.entry-points.pyinstaller40]\nhook-dirs = \"yt_dlp.__pyinstaller:get_hook_dirs\"\n\n[tool.hatch.build.targets.sdist]\ninclude = [\n    \"/yt_dlp\",\n    \"/devscripts\",\n    \"/test\",\n    \"/.gitignore\",  # included by default, needed for auto-excludes\n    \"/Changelog.md\",\n    \"/LICENSE\",  # included as license\n    \"/pyproject.toml\",  # included by default\n    \"/README.md\",  # included as readme\n    \"/supportedsites.md\",\n]\nartifacts = [\n    \"/yt_dlp/extractor/lazy_extractors.py\",\n    \"/completions\",\n    \"/AUTHORS\",  # included by default\n    \"/README.txt\",\n    \"/yt-dlp.1\",\n]\n\n[tool.hatch.build.targets.wheel]\npackages = [\"yt_dlp\"]\nartifacts = [\n    \"/yt_dlp/extractor/lazy_extractors.py\",\n]\nexclude = [\n    \"/yt_dlp/**/*.md\",\n]\n\n[tool.hatch.build.targets.wheel.shared-data]\n\"completions/bash/yt-dlp\" = \"share/bash-completion/completions/yt-dlp\"\n\"completions/zsh/_yt-dlp\" = \"share/zsh/site-functions/_yt-dlp\"\n\"completions/fish/yt-dlp.fish\" = \"share/fish/vendor_completions.d/yt-dlp.fish\"\n\"README.txt\" = \"share/doc/yt_dlp/README.txt\"\n\"yt-dlp.1",
    "strategic_keywords": [
      "embedding"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 6,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 8,
      "total": 70
    },
    "strategic_score": 70
  },
  {
    "owner": "refactoringhq",
    "name": "tolaria",
    "full_name": "refactoringhq/tolaria",
    "url": "https://github.com/refactoringhq/tolaria",
    "description": "Desktop app to manage markdown knowledge bases",
    "language": "TypeScript",
    "total_stars": 17479,
    "forks": 1205,
    "stars_this_period": 249,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "AGPL-3.0",
      "open_issues": 72,
      "created_at": "2026-02-14T19:43:14Z",
      "pushed_at": "2026-06-29T18:37:56Z",
      "homepage": "https://tolaria.md",
      "default_branch": "main",
      "forks": 1205,
      "watchers": 47,
      "archived": false,
      "size_kb": 93333
    },
    "readme_content": "![Latest stable](https://img.shields.io/github/v/release/refactoringhq/tolaria?display_name=tag) [![CI](https://github.com/refactoringhq/tolaria/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/refactoringhq/tolaria/actions/workflows/ci.yml) [![Codecov](https://codecov.io/gh/refactoringhq/tolaria/graph/badge.svg?branch=main)](https://codecov.io/gh/refactoringhq/tolaria) [![CodeScene Hotspot Code Health](https://codescene.io/projects/76865/status-badges/hotspot-code-health)](https://codescene.io/projects/76865)\n\n# 💧 Tolaria\n\nTolaria is a desktop app for macOS, Windows, and Linux for managing **markdown knowledge bases**. People use it for a variety of use cases:\n\n* Operate second brains and personal knowledge\n* Organize company docs as context for AI\n* Store OpenClaw/assistants memory and procedures\n\nPersonally, I use it to **run my life** (hey 👋 [Luca here](http://x.com/lucaronin)). I have a massive workspace of 10,000+ notes, which are the result of my [Refactoring](https://refactoring.fm/) work + a ton of personal journaling and *second braining*.\n\n<img width=\"1000\" height=\"656\" alt=\"1776506856823-CleanShot_2026-04-18_at_12 06 57_2x\" src=\"https://github.com/user-attachments/assets/8aeafb0a-b236-43c2-a083-ec111f903c38\" />\n\n## Walkthroughs\n\nYou can find some Loom walkthroughs below — they are short and to the point:\n- [How I Organize My Own Tolaria Workspace](https://www.loom.com/share/bb3aaffa238b4be0bd62e4464bca2528)\n- [My Inbox Workflow](https://www.loom.com/share/dffda263317b4fa8b47b59cdf9330571)\n- [How I Save Web Resources to Tolaria](https://www.loom.com/share/8a3c1776f801402ebbf4d7b0f31e9882)\n\n## Principles\n\n- 📑 **Files-first** — Your notes are plain markdown files. They're portable, work with any editor, and require no export step. Your data belongs to you, not to any app.\n- 🔌 **Git-first** — Every vault is a git repository. You get full version history, the ability to use any git remote, and zero dependency on Tolaria servers.\n- 🛜 **Offline-first, zero lock-in** — No accounts, no subscriptions, no cloud dependencies. Your vault works completely offline and always will. If you stop using Tolaria, you lose nothing.\n- 🔬 **Open source** — Tolaria is free and open source. I built this for [myself](https://x.com/lucaronin) and for sharing it with others.\n- 📋 **Standards-based** — Notes are markdown files with YAML frontmatter. No proprietary formats, no locked-in data. Everything works with standard tools if you decide to move away from Tolaria.\n- 🔍 **Types as lenses, not schemas** — Types in Tolaria are navigation aids, not enforcement mechanisms. There's no required fields, no validation, just helpful categories for finding notes.\n- 🪄**AI-first but not AI-only** — A vault of files works very well with AI agents, but you are free to use whatever you want. We support Claude Code, Codex CLI, and Gemini CLI setup paths, but you can edit the vault with any AI you want. We provide an AGENTS file for your agents to figure out.\n- ⌨️ **Keyboard-first** — Tolaria is designed for power-users who want to use keyboard as much as possible. A lot of how we designed the Editor and the Command Palette is based on this.\n- 💪 **Built from real use** — Tolaria was created for manage my personal vault of 10,000+ notes, and I use it every day. Every feature exists because it solved a real problem.\n\n## Installation\n\n### Homebrew\n\nInstall via Homebrew on macOS:\n\n```batch\nbrew install --cask tolaria\n```\n\n### Download from releases\n\nDownload the [latest release here](https://refactoringhq.github.io/tolaria/download/) for macOS, Windows, or Linux. Windows installers are Authenticode-signed; company-managed devices may still require IT approval of the Tolaria publisher before first install.\n\n## Getting started\n\nWhen you open Tolaria for the first time you get the chance of cloning the [getting started vault](https://github.com/refactoringhq/tolaria-getting-started) — which gives you a walkthrough of the whole app.\n\nThe public user docs live in [`site/`](site/) and are published to GitHub Pages. Start with [Install Tolaria](site/start/install.md), then [First Launch](site/start/first-launch.md).\n\n## Open source and local setup\n\nTolaria is open source and built with Tauri, React, and TypeScript. If you want to run or contribute to the app locally, here is [how to get started](https://github.com/refactoringhq/tolaria/blob/main/docs/GETTING-STARTED.md). You can also find the gist below 👇\n\n### Prerequisites\n\n- Node.js 20+\n- pnpm 8+\n- Rust stable\n- macOS or Linux for development\n\n#### Linux system dependencies\n\nTauri 2 on Linux requires WebKit2GTK 4.1 and GTK 3:\n\n- Arch / Manjaro:\n  ```bash\n  sudo pacman -S --needed webkit2gtk-4.1 base-devel curl wget file openssl \\\n    appmenu-gtk-module libappindicator-gtk3 librsvg\n  ```\n- Debian / Ubuntu (22.04+):\n  ```bash\n  sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \\\n    libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev \\\n    libsoup-3.0-dev patchelf\n  ```\n- Fedora 38+:\n  ```bash\n  sudo dnf install webkit2gtk4.1-devel openssl-devel curl wget file \\\n    libappindicator-gtk3-devel librsvg2-devel\n  ```\n\nThe bundled MCP server still spawns the system `node` binary at runtime on Linux, so install Node from your distro package manager if you want the external AI tooling flow.\n\n### Quick start\n\n```bash\npnpm install\npnpm dev\n```\n\nOpen `http://localhost:5173` for the browser-based mock mode, or run the native desktop app with:\n\n```bash\npnpm tauri dev\n```\n\n## Tech Docs\n\n- 📐 [ARCHITECTURE.md](docs/ARCHITECTURE.md) — System design, tech stack, data flow\n- 🧩 [ABSTRACTIONS.md](docs/ABSTRACTIONS.md) — Core abstractions and models\n- 🚀 [GETTING-STARTED.md](docs/GETTING-STARTED.md) — How to navigate the codebase\n- 📚 [ADRs](docs/adr) — Architecture Decision Records\n\n## Security\n\nIf you believe you have found a security issue, please report it privately as described in [SECURITY.md](./SECURITY.md).\n\n## License\n\nTolaria is licensed under AGPL-3.0-or-later. The Tolaria name and logo remain covered by the project’s trademark policy.\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"tolaria\",\n  \"private\": true,\n  \"license\": \"AGPL-3.0-or-later\",\n  \"version\": \"0.1.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"tsc -b && vite build\",\n    \"agent-docs\": \"node scripts/build-agent-docs.mjs\",\n    \"bundle-mcp\": \"node scripts/bundle-mcp-server.mjs\",\n    \"docs:dev\": \"vitepress dev site --host 127.0.0.1\",\n    \"docs:build\": \"pnpm agent-docs && vitepress build site\",\n    \"docs:preview\": \"vitepress preview site --host 127.0.0.1\",\n    \"lint\": \"eslint . --max-warnings=0\",\n    \"l10n:translate\": \"lara-cli translate\",\n    \"l10n:translate:force\": \"lara-cli translate --force\",\n    \"l10n:validate\": \"node scripts/validate-locales.mjs\",\n    \"perf:editor\": \"node scripts/editor-performance-benchmark.mjs\",\n    \"perf:editor:update\": \"node scripts/editor-performance-benchmark.mjs --update\",\n    \"preview\": \"vite preview\",\n    \"tauri\": \"tauri\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:e2e\": \"playwright test\",\n    \"playwright:smoke\": \"playwright test --config playwright.smoke.config.ts tests/smoke/autosave-low-end-typing.spec.ts tests/smoke/create-note-backing-file.spec.ts tests/smoke/delete-note-nonblocking.spec.ts tests/smoke/example.spec.ts tests/smoke/fix-crash-create-note.spec.ts tests/smoke/quick-open-create-note.spec.ts tests/smoke/save-before-note-switch.spec.ts tests/smoke/h1-untitled-auto-rename.spec.ts tests/smoke/keyboard-command-routing.spec.ts tests/smoke/missing-string-metadata-open-note.spec.ts tests/smoke/multibyte-search-snippet.spec.ts tests/smoke/pull-refresh-open-note.spec.ts tests/smoke/wikilink-path-fix.spec.ts\",\n    \"playwright:regression\": \"playwright test tests/smoke/\",\n    \"playwright:integration\": \"playwright test --config playwright.integration.config.ts\",\n    \"test:coverage\": \"node scripts/run-vitest-coverage.mjs\",\n    \"prepare\": \"husky\"\n  },\n  \"dependencies\": {\n    \"@anthropic-ai/sdk\": \"^0.78.0\",\n    \"@blocknote/code-block\": \"^0.46.2\",\n    \"@blocknote/core\": \"^0.46.2\",\n    \"@blocknote/mantine\": \"^0.46.2\",\n    \"@blocknote/react\": \"^0.46.2\",\n    \"@codemirror/commands\": \"^6.10.2\",\n    \"@codemirror/lang-javascript\": \"^6.2.5\",\n    \"@codemirror/lang-json\": \"^6.0.2\",\n    \"@codemirror/lang-markdown\": \"^6.5.0\",\n    \"@codemirror/lang-python\": \"^6.2.1\",\n    \"@codemirror/lang-sql\": \"^6.10.0\",\n    \"@codemirror/lang-yaml\": \"^6.1.2\",\n    \"@codemirror/language\": \"^6.12.2\",\n    \"@codemirror/state\": \"^6.5.4\",\n    \"@codemirror/view\": \"^6.39.16\",\n    \"@dnd-kit/core\": \"^6.3.1\",\n    \"@dnd-kit/sortable\": \"^10.0.0\",\n    \"@dnd-kit/utilities\": \"^3.2.2\",\n    \"@ironcalc/wasm\": \"0.5.4\",\n    \"@ironcalc/workbook\": \"0.5.7\",\n    \"@lezer/highlight\": \"^1.2.3\",\n    \"@mantine/core\": \"^8.3.14\",\n    \"@phosphor-icons/react\": \"^2.1.10\",\n    \"@radix-ui/react-dialog\": \"^1.1.15\",\n    \"@radix-ui/react-dropdown-menu\": \"^2.1.16\",\n    \"@radix-ui/react-select\": \"^2.2.6\",\n    \"@radix-ui/react-separator\": \"^1.1.8\",\n    \"@radix-ui/react-slot\": \"^1.2.4\",\n    \"@radix-ui/react-tabs\": \"^1.1.13\",\n    \"@radix-ui/react-tooltip\": \"^1.2.8\",\n    \"@sentry/react\": \"^10.47.0\",\n    \"@shikijs/langs\": \"3.23.0\",\n    \"@tailwindcss/vite\": \"^4.1.18\",\n    \"@tauri-apps/api\": \"^2.10.1\",\n    \"@tauri-apps/plugin-deep-link\": \"2.4.9\",\n    \"@tauri-apps/plugin-dialog\": \"^2.6.0\",\n    \"@tauri-apps/plugin-opener\": \"^2.5.3\",\n    \"@tauri-apps/plugin-process\": \"^2.3.1\",\n    \"@tauri-apps/plugin-updater\": \"^2.10.0\",\n    \"@tiptap/pm\": \"3.22.5\",\n    \"@tldraw/assets\": \"4.5.10\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"clsx\": \"^2.1.1\",\n    \"date-fns\": \"^4.1.0\",\n    \"dompurify\": \"3.4.2\",\n    \"katex\": \"^0.16.28\",\n    \"mermaid\": \"^11.14.0\",\n    \"posthog-js\": \"^1.363.5\",\n    \"radix-ui\": \"^1.4.3\",\n    \"react\": \"^19.2.0\",\n    \"react-day-picker\": \"^9.13.2\",\n    \"react-dom\": \"^19.2.0\",\n    \"react-markdown\": \"^10.1.0\",\n    \"react-virtuoso\": \"^4.18.1\",\n    \"rehype-highlight\": \"^7.0.2\",\n    \"remark-gfm\": \"^4.0.1\",\n    \"safe-regex2\": \"5.1.1\",\n    \"tailwind-merge\": \"^3.4.1\",\n    \"tailwindcss\": \"^4.1.18\",\n    \"tldraw\": \"^4.5.10\",\n    \"tw-animate-css\": \"^1.4.0\",\n    \"unicode-emoji-json\": \"^0.8.0\"\n  },\n  \"devDependencies\": {\n    \"@eslint/js\": \"^9.39.1\",\n    \"@playwright/test\": \"^1.58.2\",\n    \"@tauri-apps/cli\": \"^2.10.0\",\n    \"@testing-library/jest-dom\": \"^6.9.1\",\n    \"@testing-library/react\": \"^16.3.2\",\n    \"@translated/lara-cli\": \"^1.3.2\",\n    \"@types/node\": \"^24.10.1\",\n    \"@types/react\": \"^19.2.7\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"@types/ws\": \"^8.18.1\",\n    \"@vitejs/plugin-react\": \"^5.1.1\",\n    \"@vitest/coverage-v8\": \"^4.0.18\",\n    \"esbuild\": \"^0.27.3\",\n    \"eslint\": \"^9.39.1\",\n    \"eslint-plugin-react-hooks\": \"^7.0.1\",\n    \"eslint-plugin-react-refresh\": \"^0.4.24\",\n    \"globals\": \"^16.5.0\",\n    \"gray-matter\": \"^4.0.3\",\n    \"husky\": \"^9.1.7\",\n    \"jsdom\": \"^28.0.0\",\n    \"typescript\": \"~5.9.3\",\n    \"typescript-eslint\": \"^8.48.0\",\n    \"vite\": \"^7.3.2\",\n    \"vitepress\": \"^1.6.4\",\n    \"vitest\": \"^4.0.18\",\n    \"ws\": \"^8.19.0\"\n  },\n  \"pnpm\": {\n    \"overrides\": {\n      \"@hono/node-server\": \"1.19.13\",\n      \"express-rate-limit\"",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 19,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 10,
      "total": 98
    },
    "strategic_score": 98
  },
  {
    "owner": "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": 23944,
    "forks": 1952,
    "stars_this_period": 237,
    "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": 50,
      "created_at": "2026-01-28T00:42:34Z",
      "pushed_at": "2026-06-23T20:08:19Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 1952,
      "watchers": 107,
      "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": 17,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 8,
      "relation": 9,
      "risk_signal": 6,
      "total": 79
    },
    "strategic_score": 79
  },
  {
    "owner": "drawdb-io",
    "name": "drawdb",
    "full_name": "drawdb-io/drawdb",
    "url": "https://github.com/drawdb-io/drawdb",
    "description": "Free, simple, and intuitive online database diagram editor and SQL generator.",
    "language": "JavaScript",
    "total_stars": 37768,
    "forks": 3060,
    "stars_this_period": 230,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "database-schema",
        "diagram-editor",
        "editor",
        "erd",
        "erdiagram",
        "indexeddb",
        "javascript",
        "mariadb",
        "oracle-database",
        "oracle-db",
        "postgresql",
        "react",
        "sql",
        "sql-server",
        "sqlite",
        "svg",
        "tailwindcss"
      ],
      "license": "AGPL-3.0",
      "open_issues": 224,
      "created_at": "2023-07-16T17:09:20Z",
      "pushed_at": "2026-06-29T21:23:23Z",
      "homepage": "https://drawdb.app",
      "default_branch": "main",
      "forks": 3060,
      "watchers": 136,
      "archived": false,
      "size_kb": 7113
    },
    "readme_content": "<div align=\"center\">\n  <sup>Special thanks to:</sup>\n  <br>\n  <a href=\"https://www.warp.dev/drawdb/\" target=\"_blank\">\n    <img alt=\"Warp sponsorship\" width=\"280\" src=\"https://github.com/user-attachments/assets/c7f141e7-9751-407d-bb0e-d6f2c487b34f\">\n    <br>\n    <b>Next-gen AI-powered intelligent terminal for all platforms</b>\n  </a>\n</div>\n\n<br/>\n<br/>\n\n<div align=\"center\">\n    <img width=\"64\" alt=\"drawDB logo\" src=\"./src/assets/icon-dark.png\">\n    <h1>drawDB</h1>\n</div>\n\n<h3 align=\"center\">Free, simple, and intuitive database schema editor and SQL generator.</h3>\n\n<div align=\"center\" style=\"margin-bottom:12px;\">\n    <a href=\"https://drawdb.app/\" style=\"display: flex; align-items: center;\">\n        <img src=\"https://img.shields.io/badge/Start%20building-grey\" alt=\"drawDB\"/>\n    </a>\n    <a href=\"https://discord.gg/BrjZgNrmR6\" style=\"display: flex; align-items: center;\">\n        <img src=\"https://img.shields.io/discord/1196658537208758412.svg?label=Join%20the%20Discord&logo=discord\" alt=\"Discord\"/>\n    </a>\n    <a href=\"https://x.com/drawDB_\" style=\"display: flex; align-items: center;\">\n        <img src=\"https://img.shields.io/badge/Follow%20us%20on%20X-blue?logo=X\" alt=\"Follow us on X\"/>\n    </a>\n</div>\n\n<h3 align=\"center\"><img width=\"700\" style=\"border-radius:5px;\" alt=\"drawDB screenshot demo\" src=\"drawdb.png\"></h3>\n\nDrawDB is a robust and user-friendly database entity relationship diagram (ERD) editor right in your browser. Build diagrams with a few clicks, export and import SQL scripts, generate migrations, customize your editor, and more without creating an account. See the full set of features on [here](https://drawdb.app/).\n\n## Getting Started\n\n### Local Development\n\n```bash\ngit clone https://github.com/drawdb-io/drawdb\ncd drawdb\nnpm install\nnpm run dev\n```\n\n### Build\n\n```bash\ngit clone https://github.com/drawdb-io/drawdb\ncd drawdb\nnpm install\nnpm run build\n```\n\n### Docker Build\n\n```bash\ndocker build -t drawdb .\ndocker run -p 3000:80 drawdb\n```\n\nIf you want to enable sharing, set up the [server](https://github.com/drawdb-io/drawdb-server) and environment variables according to `.env.sample`. This is optional unless you need to share files.\n\n## Contributing\n\nPlease see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on how to contribute to this project.\n\n## Support\n- Join discussions: [Discord](https://discord.gg/BrjZgNrmR6)\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"drawdb\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"lint\": \"eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"@dbml/core\": \"^3.13.9\",\n    \"@dnd-kit/core\": \"^6.3.1\",\n    \"@dnd-kit/sortable\": \"^10.0.0\",\n    \"@dnd-kit/utilities\": \"^3.2.2\",\n    \"@douyinfe/semi-ui\": \"^2.77.1\",\n    \"@lexical/react\": \"^0.12.5\",\n    \"@monaco-editor/react\": \"^4.7.0\",\n    \"@vercel/analytics\": \"^1.2.2\",\n    \"axios\": \"^1.16.0\",\n    \"dexie\": \"^3.2.4\",\n    \"dexie-react-hooks\": \"^1.1.7\",\n    \"file-saver\": \"^2.0.5\",\n    \"framer-motion\": \"^10.18.0\",\n    \"html-to-image\": \"1.11.11\",\n    \"i18next\": \"^23.11.4\",\n    \"i18next-browser-languagedetector\": \"^8.0.0\",\n    \"jsonschema\": \"^1.4.1\",\n    \"jspdf\": \"^4.2.1\",\n    \"jszip\": \"^3.10.1\",\n    \"lexical\": \"^0.12.5\",\n    \"lodash\": \"^4.18.1\",\n    \"luxon\": \"^3.7.1\",\n    \"nanoid\": \"^5.1.5\",\n    \"node-sql-parser\": \"^5.4.0\",\n    \"oracle-sql-parser\": \"^0.1.0\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-hotkeys-hook\": \"^4.4.1\",\n    \"react-i18next\": \"^14.1.1\",\n    \"react-tweet\": \"^3.3.1\",\n    \"react-router-dom\": \"^6.30.4\",\n    \"usehooks-ts\": \"^3.1.0\"\n  },\n  \"devDependencies\": {\n    \"@tailwindcss/postcss\": \"^4.0.14\",\n    \"@types/react\": \"^18.2.43\",\n    \"@types/react-dom\": \"^18.2.17\",\n    \"@vitejs/plugin-react\": \"^6.0.3\",\n    \"eslint\": \"^8.55.0\",\n    \"eslint-config-prettier\": \"^9.1.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.5\",\n    \"postcss\": \"^8.5.14\",\n    \"prettier\": \"3.2.5\",\n    \"tailwindcss\": \"^4.0.14\",\n    \"vite\": \"^8.1.0\"\n  }\n}\n",
    "strategic_keywords": [],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 17,
      "relevance": 0,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 6,
      "risk_signal": 10,
      "total": 61
    },
    "strategic_score": 61
  },
  {
    "owner": "google-research",
    "name": "timesfm",
    "full_name": "google-research/timesfm",
    "url": "https://github.com/google-research/timesfm",
    "description": "TimesFM (Time Series Foundation Model) is a pretrained time-series foundation model developed by Google Research for time-series forecasting.",
    "language": "Python",
    "total_stars": 26176,
    "forks": 2529,
    "stars_this_period": 223,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 228,
      "created_at": "2024-04-29T21:26:26Z",
      "pushed_at": "2026-06-23T18:50:53Z",
      "homepage": "https://research.google/blog/a-decoder-only-foundation-model-for-time-series-forecasting/",
      "default_branch": "master",
      "forks": 2529,
      "watchers": 178,
      "archived": false,
      "size_kb": 5192
    },
    "readme_content": "# TimesFM\n\nTimesFM (Time Series Foundation Model) is a pretrained time-series foundation\nmodel developed by Google Research for time-series forecasting.\n\n*   Paper:\n    [A decoder-only foundation model for time-series forecasting](https://arxiv.org/abs/2310.10688),\n    ICML 2024.\n*   All checkpoints:\n    [TimesFM Hugging Face Collection](https://huggingface.co/collections/google/timesfm-release-66e4be5fdb56e960c1e482a6).\n*   [Google Research blog](https://research.google/blog/a-decoder-only-foundation-model-for-time-series-forecasting/).\n*   TimesFM in Google 1P Products:\n    *   [BigQuery ML](https://cloud.google.com/bigquery/docs/timesfm-model): Enterprise level SQL queries for scalability and reliability.\n    *   [Google Sheets](https://workspaceupdates.googleblog.com/2026/02/forecast-data-in-connected-sheets-BigQueryML-TimesFM.html): For your daily spreadsheet. \n    *   [Vertex Model Garden](https://pantheon.corp.google.com/vertex-ai/publishers/google/model-garden/timesfm): Dockerized endpoint for agentic calling.\n\nThis open version is not an officially supported Google product.\n\n**Latest Model Version:** TimesFM 2.5\n\n**Archived Model Versions:**\n\n-   1.0 and 2.0: relevant code archived in the sub directory `v1`. You can `pip\n    install timesfm==1.3.0` to install an older version of this package to load\n    them.\n## Update - June 5, 2026\n\nUpdated PyPI to `timesfm=2.0.0`. See [Install](https://github.com/google-research/timesfm#from-pypi).\n\n## Update - Apr. 9, 2026\n\nAdded fine-tuning example using HuggingFace Transformers + PEFT (LoRA) — see\n[`timesfm-forecasting/examples/finetuning/`](timesfm-forecasting/examples/finetuning/).\nAlso added unit tests (`tests/`) and incorporated several community fixes.\n\nShoutout to [@kashif](https://github.com/kashif) and [@darkpowerxo](https://github.com/darkpowerxo). \n\n## Update - Mar. 19, 2026\n\nHuge shoutout to [@borealBytes](https://github.com/borealBytes) for adding the support for [AGENTS](https://github.com/google-research/timesfm/blob/master/AGENTS.md)! TimesFM [SKILL.md](https://github.com/google-research/timesfm/tree/master/timesfm-forecasting) is out.\n\n## Update - Oct. 29, 2025\n\nAdded back the covariate support through XReg for TimesFM 2.5.\n\n\n## Update - Sept. 15, 2025\n\nTimesFM 2.5 is out!\n\nComparing to TimesFM 2.0, this new 2.5 model:\n\n-   uses 200M parameters, down from 500M.\n-   supports up to 16k context length, up from 2048.\n-   supports continuous quantile forecast up to 1k horizon via an optional 30M\n    quantile head.\n-   gets rid of the `frequency` indicator.\n-   has a couple of new forecasting flags.\n\nSince the Sept. 2025 launch, the following improvements have been completed:\n\n1.  ✅ Flax version of the model for faster inference.\n2.  ✅ Covariate support via XReg (see Oct. 2025 update).\n3.  ✅ Documentation, examples, and agent skill (see `timesfm-forecasting/`).\n4.  ✅ Fine-tuning example with LoRA via HuggingFace Transformers + PEFT (see `timesfm-forecasting/examples/finetuning/`).\n5.  ✅ Unit tests for core layers, configs, and utilities (see `tests/`).\n\n### Install\n\n#### From `PyPI`\n\n```shell\n# Install the package with torch\npip install timesfm[torch]\n# Or with Flax\npip install timesfm[flax]\n# And when XReg is needed\npip install timesfm[xreg]\n```\n\n#### Local Install\n\n1.  Clone the repository:\n    ```shell\n    git clone https://github.com/google-research/timesfm.git\n    cd timesfm\n    ```\n\n2.  Create a virtual environment and install dependencies using `uv`:\n    ```shell\n    # Create a virtual environment\n    uv venv\n    \n    # Activate the environment\n    source .venv/bin/activate\n    \n    # Install the package in editable mode with torch\n    uv pip install -e .[torch]\n    # Or with flax\n    uv pip install -e .[flax]\n    # And when XReg is needed\n    uv pip install -e .[xreg]\n    ```\n\n3. [Optional] Install your preferred `torch` / `jax` backend based on your OS and accelerators\n(CPU, GPU, TPU or Apple Silicon).:\n\n-   [Install PyTorch](https://pytorch.org/get-started/locally/).\n-   [Install Jax](https://docs.jax.dev/en/latest/installation.html#installation)\n    for Flax.\n\n### Code Example\n\n```python\nimport torch\nimport numpy as np\nimport timesfm\n\ntorch.set_float32_matmul_precision(\"high\")\n\nmodel = timesfm.TimesFM_2p5_200M_torch.from_pretrained(\"google/timesfm-2.5-200m-pytorch\")\n\nmodel.compile(\n    timesfm.ForecastConfig(\n        max_context=1024,\n        max_horizon=256,\n        normalize_inputs=True,\n        use_continuous_quantile_head=True,\n        force_flip_invariance=True,\n        infer_is_positive=True,\n        fix_quantile_crossing=True,\n    )\n)\npoint_forecast, quantile_forecast = model.forecast(\n    horizon=12,\n    inputs=[\n        np.linspace(0, 1, 100),\n        np.sin(np.linspace(0, 20, 67)),\n    ],  # Two dummy inputs\n)\npoint_forecast.shape  # (2, 12)\nquantile_forecast.shape  # (2, 12, 10): mean, then 10th to 90th quantiles.\n```\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[project]\nname = \"timesfm\"\nversion = \"2.0.1\"\ndescription = \"A time series foundation model.\"\nauthors = [\n    {name = \"Rajat Sen\", email = \"senrajat@google.com\"},\n    {name = \"Yichen Zhou\", email = \"yichenzhou@google.com\"},\n    {name = \"Abhimanyu Das\", email = \"abhidas@google.com\"},\n    {name = \"Petros Mol\", email = \"pmol@google.com\"},\n    {name = \"Michael Chertushkin\", email = \"chertushkinmichael@gmail.com\"},\n]\nlicense = {text = \"Apache-2.0\"}\nreadme = \"README.md\"\nrequires-python = \">=3.10\"\ndependencies = [\n    \"numpy>=1.26.4\",\n    \"huggingface_hub[cli]>=0.23.0\",\n    \"safetensors>=0.5.3\",\n]\n\n[project.optional-dependencies]\ntorch = [\n    \"torch>=2.0.0\",\n]\nflax = [\n    \"flax\",\n    \"optax\",\n    \"einshape\",\n    \"orbax-checkpoint\",\n    \"jaxtyping\",\n    \"jax[cuda]\"\n]\nxreg = [\n    \"jax[cuda]\",\n    \"scikit-learn\",\n]\n\n[tool.ruff]\nline-length = 88\nindent-width = 2\n\n[build-system]\nrequires = [\"setuptools>=61.0\"]\nbuild-backend = \"setuptools.build_meta\"\n\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workspace",
      "inference"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 93
    },
    "strategic_score": 93
  },
  {
    "owner": "soxoj",
    "name": "maigret",
    "full_name": "soxoj/maigret",
    "url": "https://github.com/soxoj/maigret",
    "description": "🕵️‍♂️ Collect a dossier on a person by username from 3000+ sites",
    "language": "Python",
    "total_stars": 34325,
    "forks": 2595,
    "stars_this_period": 191,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "cli",
        "cybersecurity",
        "identification",
        "information-gathering",
        "infosec",
        "investigation",
        "open-source",
        "osint",
        "osint-framework",
        "osint-python",
        "pentesting",
        "python",
        "python3",
        "reconnaissance",
        "redteam",
        "scraping",
        "sherlock",
        "social-network",
        "socmint",
        "username"
      ],
      "license": "MIT",
      "open_issues": 38,
      "created_at": "2020-06-27T14:16:42Z",
      "pushed_at": "2026-06-29T20:05:00Z",
      "homepage": "https://maigret.app",
      "default_branch": "main",
      "forks": 2595,
      "watchers": 156,
      "archived": false,
      "size_kb": 20558
    },
    "readme_content": "# Maigret\n\n<div align=\"center\">\n  <div>\n    <a href=\"https://pypi.org/project/maigret/\">\n        <img alt=\"PyPI version badge for Maigret\" src=\"https://img.shields.io/pypi/v/maigret?style=flat-square\" />\n    </a>\n    <a href=\"https://pepy.tech/project/maigret\">\n      <img alt=\"Total downloads\" src=\"https://static.pepy.tech/badge/maigret\" />\n      <img alt=\"Downloads/month\" src=\"https://static.pepy.tech/badge/maigret/month\" />\n    </a>\n  </div>\n  <div>\n    <a href=\"https://github.com/soxoj/maigret\">\n        <img alt=\"View count for Maigret project\" src=\"https://komarev.com/ghpvc/?username=maigret&color=brightgreen&label=views&style=flat-square\" />\n    </a>\n    <a href=\"https://github.com/soxoj/maigret\">\n        <img alt=\"Minimum Python version required: 3.10+\" src=\"https://img.shields.io/badge/Python-3.10%2B-brightgreen?style=flat-square\" />\n    </a>\n    <a href=\"https://github.com/soxoj/maigret/blob/main/LICENSE\">\n        <img alt=\"License badge for Maigret\" src=\"https://img.shields.io/github/license/soxoj/maigret?style=flat-square\" />\n    </a>\n  </div>\n  <br>\n  <div>\n    <img src=\"https://raw.githubusercontent.com/soxoj/maigret/main/static/maigret.png\" height=\"300\" alt=\"Maigret logo\"/>\n  </div>\n  <br>\n  <div>\n    <a href=\"https://codewiki.google/github.com/soxoj/maigret\">\n        <img alt=\"Ask Code Wiki about Maigret\" src=\"https://img.shields.io/badge/Code_Wiki-ask_about_repo-yellow?logo=googlegemini\" />\n    </a>\n    <a href=\"https://deepwiki.com/soxoj/maigret\">\n        <img alt=\"Ask DeepWiki about Maigret\" src=\"https://img.shields.io/badge/DeepWiki-ask_about_repo-yellow\" />\n    </a>\n  </div>\n  <br>\n  <div>\n    <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a>\n  </div>\n  <br>\n</div>\n\n**Maigret** collects a dossier on a person **by username only**, checking for accounts on a huge number of sites and gathering all the available information from web pages. No API keys required. **[AI profiling (demo)](#ai-analysis)**. \n\n## Sponsors\n\n<p align=\"center\">\n  <a href=\"https://www.rapidproxy.io/?ref=soxoj\">\n    <img src=\"https://github.com/user-attachments/assets/1b4ad463-c6eb-448b-8e14-5792ee3d4181\" width=\"220\" alt=\"RapidProxy\">\n  </a>\n</p>\n\n<p>\n  <a href=\"https://www.rapidproxy.io/?ref=soxoj\"><b>RapidProxy</b></a> provides high-performance residential proxies for Twitter scraping, Selenium automation, and web data extraction.<br>\n  90M+ IPs • Smart rotation • Anti-block • Non-expiring traffic<br>\n  <b>Special Offer:</b> Try it free — Plans from $0.65/GB. Use code <code>RAPID10</code> for 10% off.\n</p>\n\n<br>\n\n<p align=\"center\">\n  <a href=\"https://vaultproxies.net/?utm_source=maigret&utm_medium=readme\">\n    <img src=\"https://i.imgur.com/TF165pP.gif\" width=\"320\" alt=\"VaultProxies\">\n  </a>\n</p>\n\n<p>\n  <a href=\"https://vaultproxies.net/?utm_source=maigret&utm_medium=readme\"><b>VaultProxies</b></a> — The proxy network ops teams reach for when they're tired of getting throttled, flagged, or guessed.<br>\n  Enterprise-grade rotation • High uptime • Throttle-resistant routing<br>\n  <b>Special Offer:</b> Plans from $1/GB — as low as $0.50/GB. Use code <code>50OFF</code> for 50% off.\n</p>\n\n<br>\n\n<p align=\"center\">\n  <a href=\"https://9proxy.com/?utm_source=Github&utm_campaign=obscura\">\n    <img src=\"https://i.imgur.com/FleHdvu.gif\" width=\"250\" alt=\"9Proxy\">\n  </a>\n</p>\n\n<p>\n  <a href=\"https://9proxy.com/?utm_source=Github&utm_campaign=obscura\"><b>9Proxy</b></a> provides residential proxies from just <b>$0.018/IP or $0.68/GB</b>. 20M+ IPs across 90+ countries. Sticky or rotating sessions, managed from desktop or mobile app.\n</p>\n\n## Contents\n\n- [In one minute](#in-one-minute)\n- [Main features](#main-features)\n- [Demo](#demo)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Contributing](#contributing)\n- [Commercial Use](#commercial-use)\n- [About](#about)\n\n<a id=\"one-minute\"></a>\n## In one minute\n\nEnsure you have Python 3.10 or higher.\n\n```bash\npip install maigret\nmaigret YOUR_USERNAME\n```\n\nNo install? Try the [community Telegram bot](https://sites.google.com/view/maigret-bot-link) or a [Cloud Shell](#cloud-shells). \n\nWant a web UI? See [how to launch it](#web-interface).\n\nSee also: [Quick start](https://maigret.readthedocs.io/en/latest/quick-start.html). \n\n## Main features\n\n- Supports 3,000+ sites ([see full list](https://github.com/soxoj/maigret/blob/main/sites.md)). A default run checks the 500 highest-ranked sites by traffic; pass `-a` to scan everything, or `--tags` to narrow by category/country.\n- Embeddable in Python projects — import `maigret` and run searches programmatically (see [library usage](https://maigret.readthedocs.io/en/latest/library-usage.html)).\n- [Extracts](https://github.com/soxoj/socid_extractor) all available information about the account owner from profile pages and site APIs, including links to other accounts.\n- Performs recursive search using discovered usernames and other IDs.\n- Allows filtering by tags (site categories, countries).\n- Detects and partially bypasses blocks, censorship, and CAPTCHA.\n- Fetches an [auto-updated site database](https://maigret.readthedocs.io/en/latest/settings.html#database-auto-update) from GitHub each run (once per 24 hours), and falls back to the built-in database if offline.\n- Works with Tor and I2P websites; able to check domains.\n- Ships with a [web interface](#web-interface) for browsing results as a graph and downloading reports in every format from a single page.\n- Optional [AI analysis mode](#ai-analysis) (`--ai`) that turns raw findings into a short investigation summary using an OpenAI-compatible API.\n\nFor the complete feature list, see the [features documentation](https://maigret.readthedocs.io/en/latest/features.html).\n\n### Used by\n\nProfessional OSINT and social-media analysis tools built on Maigret:\n\n<a href=\"https://github.com/SocialLinks-IO/sociallinks-api\"><img height=\"60\" alt=\"Social Links API\" src=\"https://github.com/user-attachments/assets/789747b2-d7a0-4d4e-8868-ffc4427df660\"></a>\n<a href=\"https://sociallinks.io/products/sl-crimewall\"><img height=\"60\" alt=\"Social Links Crimewall\" src=\"https://github.com/user-attachments/assets/0b18f06c-2f38-477b-b946-1be1a632a9d1\"></a>\n<a href=\"https://usersearch.ai/\"><img height=\"60\" alt=\"UserSearch\" src=\"https://github.com/user-attachments/assets/66daa213-cf7d-40cf-9267-42f97cf77580\"></a>\n\n## Demo\n\n### Video\n\n<a href=\"https://asciinema.org/a/Ao0y7N0TTxpS0pisoprQJdylZ\">\n  <img src=\"https://asciinema.org/a/Ao0y7N0TTxpS0pisoprQJdylZ.svg\" alt=\"asciicast\" width=\"600\">\n</a>\n\n### Reports\n\n[PDF report](https://raw.githubusercontent.com/soxoj/maigret/main/static/report_alexaimephotographycars.pdf), [HTML report](https://htmlpreview.github.io/?https://raw.githubusercontent.com/soxoj/maigret/main/static/report_alexaimephotographycars.html)\n\n![HTML report screenshot](https://raw.githubusercontent.com/soxoj/maigret/main/static/report_alexaimephotography_html_screenshot.png)\n\n![XMind 8 report screenshot](https://raw.githubusercontent.com/soxoj/maigret/main/static/report_alexaimephotography_xmind_screenshot.png)\n\n[Full console output](https://raw.githubusercontent.com/soxoj/maigret/main/static/recursive_search.md)\n\n## Installation\n\nAlready ran the [In one minute](#one-minute) steps? You're set. Below are alternative methods.\n\nDon't want to install anything? Use the [community Telegram bot](https://sites.google.com/view/maigret-bot-link).\n\n### Windows\n\nDownload `maigret_standalone.exe` from [Releases](https://github.com/soxoj/maigret/releases). You can launch it two ways:\n\n- **Double-click it** — Maigret will ask for a username, run a default search, and wait at the end so the report links stay visible.\n- **Run it from a terminal** — open Command Prompt (press `Win+R`, type `cmd`, hit Enter) or PowerShell to pass extra options:\n\n```cmd\ncd %USERPROFILE%\\Downloads\nmaigret_standalone.exe USERNAME\nmaigret_standalone.exe USERNAME --html       :: also save an HTML report\nmaigret_standalone.exe --help                :: list all options\n```\n\nVideo guide: https://youtu.be/qIgwTZOmMmM.\n\n<a id=\"cloud-shells\"></a>\n### Cloud Shells\n\nRun Maigret in the browser via cloud shells or Jupyter notebooks:\n\n<a href=\"https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/soxoj/maigret&tutorial=cloudshell-tutorial.md\"><img src=\"https://user-images.githubusercontent.com/27065646/92304704-8d146d80-ef80-11ea-8c29-0deaabb1c702.png\" alt=\"Open in Cloud Shell\" height=\"50\"></a>\n<a href=\"https://repl.it/github/soxoj/maigret\"><img src=\"https://replit.com/badge/github/soxoj/maigret\" alt=\"Run on Replit\" height=\"50\"></a>\n\n<a href=\"https://colab.research.google.com/gist/soxoj/879b51bc3b2f8b695abb054090645000/maigret-collab.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"45\"></a>\n<a href=\"https://mybinder.org/v2/gist/soxoj/9d65c2f4d3bec5dd25949197ea73cf3a/HEAD\"><img src=\"https://mybinder.org/badge_logo.svg\" alt=\"Open In Binder\" height=\"45\"></a>\n\n### Local installation (pip)\n\n```bash\n# install from pypi\npip3 install maigret\n\n# usage\nmaigret username\n```\n\n### From source\n\n```bash\n# or clone and install manually\ngit clone https://github.com/soxoj/maigret && cd maigret\n\n# build and install\npip3 install .\n\n# usage\nmaigret username\n```\n\n### Docker\n\nTwo image variants are published:\n\n- `soxoj/maigret:latest` — CLI mode (default)\n- `soxoj/maigret:web` — auto-launches the [web interface](#web-interface)\n\n```bash\n# official image (CLI)\ndocker pull soxoj/maigret\n\n# CLI usage\ndocker run -v /mydir:/app/reports soxoj/maigret:latest username --html\n\n# Web UI (open http://localhost:5000)\ndocker run -p 5000:5000 soxoj/maigret:web\n\n# Web UI on a custom port\ndocker run -e PORT=8080 -p 8080:8080 soxoj/maigret:web\n\n# manual build\ndocker build -t maigret .                  # CLI image (default target)\ndocker build --target web -t maigret-web . # Web UI image\n```\n\n### Troubleshooting\n\nBuild errors? See the [troubleshooting guide](https://maigret.readthedocs.io/en/latest/installation.html#troubleshooting).\n\nPDF reports (`--pdf`) are an optional extra — install with `pip install 'maigret[pdf]'`. They need system-level graphics libraries on Linux/macOS; see the [PDF reports section](https://maigret.readthedocs.io/en/latest/installation.html#optional-pdf-reports-maigret-pdf) for per-OS install steps.\n\n## Usage\n\n### Examples\n\n```bash\n# make HTML, PDF, and Xmind8 reports\nmaigret user --html\nmaigret user --pdf\nmaigret user --xmind #Output not compatible with xmind 2022+\n\n# machine-readable exports\nmaigret user --json ndjson   # newline-delimited JSON (also: --json simple)\nmaigret user --csv\nmaigret user --txt\nmaigret user --graph         # interactive D3 graph (HTML)\nmaigret user --neo4j         # Neo4j Cypher script (graph database)\n\n# search on sites marked with tags photo & dating\nmaigret user --tags photo,dating\n\n# search on sites marked with tag us\nmaigret user --tags us\n\n# highlight sites whose page also mentions specific keywords\nmaigret user --keywords python rust\n# keyword-matched sites are shown with \"[++]\" in bright green\n\n# search for three usernames on all available sites\nmaigret user1 user2 user3 -a\n\n# AI-assisted investigation summary (needs OPENAI_API_KEY)\nmaigret user --ai\n```\n\n`--neo4j` writes a `*_neo4j.cypher` script of the results graph; import it with `cypher-shell -u neo4j -p <password> < report_user_neo4j.cypher` or paste it into the Neo4j Browser. Re-imports are idempotent. See the [Neo4j export docs](https://maigret.readthedocs.io/en/latest/command-line-options.html#neo4j-export).\n\nRun `maigret --help` for all options. Docs: [CLI options](https://maigret.readthedocs.io/en/latest/command-line-options.html), [more examples](https://maigret.readthedocs.io/en/latest/usage-examples.html). Running into 403s or timeouts? See [TROUBLESHOOTING.md](TROUBLESHOOTING.md).\n\n<a id=\"web-interface\"></a>\n### Web interface\n\nMaigret has a built-in web UI with a results graph and downloadable reports.\n\n<details>\n<summary>Web Interface Screenshots</summary>\n\n![Web interface: ",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [\"poetry-core\"]\nbuild-backend = \"poetry.core.masonry.api\"\n\n[tool.poetry]\nname = \"maigret\"\nversion = \"0.6.1\"\ndescription = \"🕵️‍♂️ Collect a dossier on a person by username from thousands of sites.\"\nauthors = [\"Soxoj <soxoj@protonmail.com>\"]\nreadme = \"README.md\"\nlicense = \"MIT License\"\nhomepage = \"https://pypi.org/project/maigret\"\ndocumentation = \"https://maigret.readthedocs.io\"\nrepository = \"https://github.com/soxoj/maigret\"\nclassifiers = [\n    \"Development Status :: 5 - Production/Stable\",\n    \"Programming Language :: Python :: 3\",\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    \"Intended Audience :: Information Technology\",\n    \"Operating System :: OS Independent\",\n    \"License :: OSI Approved :: MIT License\",\n    \"Natural Language :: English\"\n]\n\n[tool.poetry.urls]\n\"Bug Tracker\" = \"https://github.com/soxoj/maigret/issues\"\n\"Funding\" = \"https://www.patreon.com/soxoj\"\n\n[tool.poetry.dependencies]\n# poetry install\n# Install only production dependencies:\n# poetry install --without dev\n# Install with dev dependencies:\n# poetry install --with dev\npython = \"^3.10\"\naiodns = \">=3,<5\"\naiohttp = \"^3.12.14\"\naiohttp-socks = \">=0.10.1,<0.12.0\"\narabic-reshaper = {version = \"^3.0.0\", optional = true}\ncertifi = \">=2025.6.15,<2027.0.0\"\ncolorama = \"^0.4.6\"\nhtml5lib = \"^1.1\"\nJinja2 = \"^3.1.6\"\nlxml = \">=6.0.2,<7.0\"\nMarkupSafe = \"^3.0.2\"\npycountry = \">=24.6.1,<27.0.0\"\nPySocks = \"^1.7.1\"\npython-bidi = {version = \"^0.6.3\", optional = true}\nrequests = \"^2.32.4\"\nsocid-extractor = \">=0.0.27,<0.1.1\"\nsoupsieve = \"^2.6\"\nalive_progress = \"^3.2.0\"\ntyping-extensions = \"^4.14.1\"\nxhtml2pdf = {version = \"^0.2.11\", optional = true}\nXMind = \"^1.2.0\"\nyarl = \"^1.20.1\"\nnetworkx = \"^2.6.3\"\npyvis = \"^0.3.2\"\nreportlab = \"^4.4.3\"\nflask = {extras = [\"async\"], version = \"^3.1.1\"}\nasgiref = \"^3.9.1\"\nplatformdirs = \"^4.3.8\"\ncurl-cffi = \">=0.14,<1.0\"\n\n\n[tool.poetry.extras]\n# Install PDF support with: pip install 'maigret[pdf]'\n# Skipped by default because the underlying `pycairo` has no Linux/macOS\n# wheels on PyPI and requires system libcairo + pkg-config to build.\n# arabic-reshaper and python-bidi are pulled in too — they're only used\n# by xhtml2pdf (RTL text shaping in PDFs), nothing in maigret core touches\n# them, and python-bidi v0.5+ is a Rust binding that can need cargo on\n# niche platforms.\npdf = [\"xhtml2pdf\", \"arabic-reshaper\", \"python-bidi\"]\n\n\n[tool.poetry.group.dev.dependencies]\n# How to add a new dev dependency: poetry add black --group dev\n# Install dev dependencies with: poetry install --with dev\nflake8 = \"^7.1.1\"\npytest = \">=8.3.4,<10.0.0\"\npytest-asyncio = \"^1.0.0\"\npytest-cov = \">=6,<8\"\npytest-httpserver = \"^1.0.0\"\npytest-rerunfailures = \">=15.1,<17.0\"\nreportlab = \"^4.4.3\"\nxhtml2pdf = \"^0.2.11\"\narabic-reshaper = \"^3.0.0\"\npython-bidi = \"^0.6.3\"\nmypy = \">=1.14.1,<3.0.0\"\ntuna = \"^0.5.11\"\ncoverage = \"^7.9.2\"\nblack = \">=25.1,<27.0\"\n\n[tool.poetry.scripts]\n# Run with: poetry run maigret <username>\nmaigret = \"maigret.maigret:run\"\nupdate_sitesmd = \"utils.update_site_data:main\"\n",
    "strategic_keywords": [
      "automation"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 18,
      "relevance": 8,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 4,
      "total": 69
    },
    "strategic_score": 69
  },
  {
    "owner": "veracrypt",
    "name": "VeraCrypt",
    "full_name": "veracrypt/VeraCrypt",
    "url": "https://github.com/veracrypt/VeraCrypt",
    "description": "Disk encryption with strong security based on TrueCrypt",
    "language": "C",
    "total_stars": 10456,
    "forks": 1231,
    "stars_this_period": 187,
    "source_slice": "all",
    "source_slices": [
      "all"
    ],
    "metadata": {
      "topics": [
        "encryption",
        "encryption-algorithms",
        "encryption-decryption",
        "idrix",
        "veracrypt",
        "veracrypt-source"
      ],
      "license": "NOASSERTION",
      "open_issues": 432,
      "created_at": "2014-11-08T22:12:36Z",
      "pushed_at": "2026-06-29T00:20:33Z",
      "homepage": "https://veracrypt.jp",
      "default_branch": "master",
      "forks": 1231,
      "watchers": 228,
      "archived": false,
      "size_kb": 579272
    },
    "readme_content": "This archive contains the source code of VeraCrypt.\nIt is based on the original TrueCrypt 7.1a with security enhancements and modifications.\n\n# Important\n\nYou may use the source code contained in this archive only if you accept and\nagree to the license terms contained in the file 'License.txt', which is\nincluded in this archive.\n\nNote that the license specifies, for example, that a derived work must not be\ncalled 'TrueCrypt' or 'VeraCrypt'\n\n# Contents\n\n[I. Windows](#i-windows)\n\n[II. Linux and Mac OS X](#ii-linux-and-mac-os-x)\n\n[III. FreeBSD and OpenBSD](#iii-freebsd-and-openbsd)\n\n[IV. Third-Party Developers (Contributors)](#iv-third-party-developers-contributors)\n\n[V. Legal Information](#v-legal-information)\n\n[VI. Further Information](#vi-further-information)\n\n# I. Windows\n\n## Requirements for Building VeraCrypt for Windows:\n\nA detailed guide on how to build VeraCrypt on Windows can be found in\nthe [documentation](./doc/html/en/CompilingGuidelineWin.html) in the repository and\nit is also available [online](https://veracrypt.jp/en/CompilingGuidelineWin.html) or on the [mirror](https://veracrypt.io/en/CompilingGuidelineWin.html).\n\nIMPORTANT:\n\nThe 64-bit editions of Windows Vista and later versions of Windows, and in\nsome cases (e.g. playback of HD DVD content) also the 32-bit editions do not\nallow the VeraCrypt driver to run without an appropriate digital signature.\nTherefore, all .sys files in official VeraCrypt binary packages are digitally\nsigned with the digital certificate of the IDRIX, which was issued by\nGlobalSign certification authority. At the end of each official .exe and\n.sys file, there are embedded digital signatures and all related certificates\n(i.e. all certificates in the relevant certification chain, such as the\ncertification authority certificates, CA-MS cross-certificate, and the\nIDRIX certificate).\n\nKeep this in mind if you compile VeraCrypt and compare your binaries with the\nofficial binaries. If your binaries are unsigned, the sizes of the official\nbinaries will usually be approximately 10 KiB greater than the sizes of your\nbinaries (there may be further differences if you use a different version of\nthe compiler, or if you install a different or no service pack for Visual\nStudio, or different hotfixes for it, or if you use different versions of\nthe required SDKs).\n\n## Instructions for Signing and Packaging VeraCrypt for Windows:\n\nFirst, create an environment variable 'WSDK81' pointing to the Windows SDK\nfor Windows 8.1 installation directory.\n\nThe folder \"Signing\" contains a batch file (sign.bat) that will sign all\nVeraCrypt components using a code signing certificate present on the\ncertificate store and build the final installation setup and MSI package.\nThe batch file assumes that the code signing certificate is issued by\nGlobalSign. This is the case for IDRIX's certificate. If yours is issued by\nanother CA, then you should put its intermediate certificates in the \"Signing\"\nfolder and modify sign.bat accordingly.\n\nTo generate MSI packages, WiX Toolset v3.11 must be installed.\n\n## VeraCrypt EFI Boot Loader:\n\nVeraCrypt source code contains pre-built EFI binaries under src\\Boot\\EFI.\nThe source code of VeraCrypt EFI Boot Loader is licensed under LGPL and\nit is available at https://github.com/veracrypt/VeraCrypt-DCS.\nFor build instructions, please refer to the file src\\Boot\\EFI\\Readme.txt.\n\n# II. Linux and Mac OS X\n\nA detailed guide on how to build VeraCrypt on Linux can be found in\nthe [documentation](./doc/html/en/CompilingGuidelineLinux.html) in the repository and\nit is also available [online](https://veracrypt.jp/en/CompilingGuidelineLinux.html) or on the [mirror](https://veracrypt.io/en/CompilingGuidelineLinux.html).\n\n## Requirements for Building VeraCrypt for Linux and Mac OS X:\n\n- GNU Make\n- GNU C++ Compiler 4.0 or compatible\n- Apple Xcode or Xcode command line tools (Mac OS X only)\n- YASM 1.3.0 or newer (Linux only, x86/x64 architecture only)\n- pkg-config\n- wxWidgets 3.0 shared library and header files installed or\n  wxWidgets 3.0 library source code (available at https://www.wxwidgets.org)\n- FUSE library and header files (available at https://github.com/libfuse/libfuse\n  and https://macfuse.github.io/)\n- PCSC-lite library and header files (available at https://github.com/LudovicRousseau/PCSC)\n\n## Instructions for Building VeraCrypt for Linux and Mac OS X:\n\n1. Change the current directory to the root of the VeraCrypt source code.\n\n2. If you have no wxWidgets shared library installed, run the following\n   command to configure the wxWidgets static library for VeraCrypt and to\n   build it:\n\n   `$ make WXSTATIC=1 WX_ROOT=/usr/src/wxWidgets wxbuild`\n\n   The variable `WX_ROOT` must point to the location of the source code of the\n   wxWidgets library. Output files will be placed in the './wxrelease/'\n   directory.\n\n3. To build VeraCrypt, run the following command:\n\n   `$ make`\n\n   or if you have no wxWidgets shared library installed:\n\n   `$ make WXSTATIC=1`\n\n4. If successful, the VeraCrypt executable should be located in the directory\n   'Main'.\n\nReproducible build note: when `SOURCE_DATE_EPOCH` is not set, a build from a\ngit checkout uses the HEAD commit timestamp, while a build from a release\ntarball uses the release date in `src/Common/Tcdefs.h` at 00:00 UTC. To\nreproduce official release artifacts from a git checkout, set\n`SOURCE_DATE_EPOCH` explicitly or build from the release tarball. Vendored\nVeraCrypt sources tracked in another git checkout are treated the same way and\nuse that checkout's HEAD timestamp.\n\nBoth the generated `.deb` and `.rpm` packages are reproducible, including on older rpm (e.g. CentOS/RHEL 7) that lacks the `SOURCE_DATE_EPOCH`/`_buildhost` build macros.\n\nBy default, a universal executable supporting both graphical and text user\ninterface (through the switch --text) is built.\nOn Linux, a console-only executable, which requires no GUI library, can be\nbuilt using the 'NOGUI' parameter:\n\n`$ make NOGUI=1 WXSTATIC=1 WX_ROOT=/usr/src/wxWidgets wxbuild`\n\n`$ make NOGUI=1 WXSTATIC=1`\n\n## Arch Linux package build:\n\nArch Linux users can build and install a package from the current checkout with\nmakepkg:\n\n`$ cd src/Build/Packaging/arch`\n\n`$ makepkg -si`\n\nOn MacOSX, building a console-only executable is not supported.\n\n## Mac OS X specifics:\n\nUnder MacOSX, the latest installed SDK is used by default. To use a different version\nof the SDK when building using make, you can export the environment variable VC_OSX_SDK:\n\n`$ export VC_OSX_SDK=13.0`\n\nFor development dependencies management, you can use [homebrew](https://brew.sh).\n\n`$ brew install pkg-config yasm wxwidgets`\n\nYou also need system dependencies\n\n`$ brew install --cask macfuse packages`\n\nAfter installing dependencies via brew, you can build a local development build\n\n`$ ./src/Build/build_veracrypt_macosx.sh -b`\n\nIf you want to build the package, you must pass `-p` to the build script above. The built\nexecutable will be in `.src/Main`\n\nIf you prefer to build from sources, or without homebrew, pkg-config and packages must be installed.\n\nGet pkg-config from https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz and\ncompile using the following commands:\n\n`$ CFLAGS=\"-Wno-int-conversion\" CXXFLAGS=\"-Wno-int-conversion\" ./configure --with-internal-glib`\n\n`$ make`\n\n`$ sudo make install`\n\nAfter making sure pkg-config is available, download and install macFUSE from\nhttps://macfuse.github.io/\n\nThe [build_veracrypt_macosx.sh](./src/Build/build_veracrypt_macosx.sh) script performs the\nfull build of VeraCrypt including the creation of the installer pkg. It expects\nto find the wxWidgets 3.2.5 sources at the same level as where you put\nVeraCrypt sources (i.e. if \"src\" path is \"/Users/joe/Projects/VeraCrypt/src\"\nthen wxWidgets should be at \"/Users/joe/Projects/wxWidgets-3.2.5\")\n\nThe make build process uses Code Signing certificates whose ID is specified in\nsrc/Main/Main.make (look for lines containing \"Developer ID Application\" and\n\"Developer ID Installer\"). You'll have to modify these lines to put the ID of\nyour Code Signing certificates or comment them out if you don't have one.\n\nBecause of incompatibility issues with macFUSE, the SDK 10.9 generates a\nVeraCrypt binary that has issues communicating with the macFUSE kernel extension.\nThus, we recommend using a different macOS SDK version for building VeraCrypt.\n\nThe Packages installer that is used for the VeraCrypt official build has been notarized by IDRIX and it is available at\nhttps://github.com/idrassi/packages/releases\n\n# III. FreeBSD and OpenBSD\n\nFreeBSD is supported starting from version 14.\nOpenBSD is supported starting from version 7.8.\nThe build requirements and instructions are the same as Linux except that gmake\nshould be used instead of make.\n\n# IV. Third-Party Developers (Contributors)\n\nIf you intend to implement a feature, please contact us first to make sure:\n\n1. That the feature has not been implemented (we may have already implemented\n   it, but haven't released the code yet).\n2. That the feature is acceptable.\n3. Whether we need the help of third-party developers with implementing the feature.\n\nInformation on how to contact us can be found at:\nhttps://veracrypt.jp or\nhttps://veracrypt.io (mirror)\n\n# V. Legal Information\n\n## Copyright Information\n\nThis software as a whole:  \nCopyright (c) 2026 AM Crypto. All rights reserved.  \n\nPortions of this software:  \nCopyright (c) 2026 AM Crypto. All rights reserved.  \nCopyright (c) 2013-2025 IDRIX. All rights reserved.  \nCopyright (c) 2003-2012 TrueCrypt Developers Association. All rights reserved.  \nCopyright (c) 1998-2000 Paul Le Roux. All rights reserved.  \nCopyright (c) 1998-2008 Brian Gladman, Worcester, UK. All rights reserved.  \nCopyright (c) 1995-2023 Jean-loup Gailly and Mark Adler.  \nCopyright (c) 2016 Disk Cryptography Services for EFI (DCS), Alex Kolotnikov  \nCopyright (c) 1999-2023 Dieter Baron and Thomas Klausner.  \nCopyright (c) 2013, Alexey Degtyarev. All rights reserved.  \nCopyright (c) 1999-2016 Jack Lloyd. All rights reserved.  \nCopyright (c) 2013-2019 Stephan Mueller <smueller@chronox.de>  \nCopyright (c) 1999-2023 Igor Pavlov  \n\nFor more information, please see the legal notices attached to parts of the\nsource code.\n\n## Trademark Information\n\nAny trademarks contained in the source code, binaries, and/or in the\ndocumentation, are the sole property of their respective owners.\n\n# VI. Further Information\n\nhttps://veracrypt.jp  \nhttps://veracrypt.io (mirror)\n",
    "strategic_keywords": [],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 0,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 6,
      "risk_signal": 6,
      "total": 58
    },
    "strategic_score": 58
  },
  {
    "owner": "firecrawl",
    "name": "open-lovable",
    "full_name": "firecrawl/open-lovable",
    "url": "https://github.com/firecrawl/open-lovable",
    "description": "🔥 Clone and recreate any website as a modern React app in seconds",
    "language": "TypeScript",
    "total_stars": 27218,
    "forks": 5216,
    "stars_this_period": 159,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 137,
      "created_at": "2025-08-08T13:04:02Z",
      "pushed_at": "2025-11-19T15:29:48Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 5216,
      "watchers": 163,
      "archived": false,
      "size_kb": 1233
    },
    "readme_content": "# Open Lovable\n\nChat with AI to build React apps instantly. An example app made by the [Firecrawl](https://firecrawl.dev/?ref=open-lovable-github) team. For a complete cloud solution, check out [Lovable.dev](https://lovable.dev/) ❤️.\n\n<img src=\"https://media1.giphy.com/media/v1.Y2lkPTc5MGI3NjExbmZtaHFleGRsMTNlaWNydGdianI4NGQ4dHhyZjB0d2VkcjRyeXBucCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ZFVLWMa6dVskQX0qu1/giphy.gif\" alt=\"Open Lovable Demo\" width=\"100%\"/>\n\n## Setup\n\n1. **Clone & Install**\n```bash\ngit clone https://github.com/firecrawl/open-lovable.git\ncd open-lovable\npnpm install  # or npm install / yarn install\n```\n\n2. **Add `.env.local`**\n\n```env\n# =================================================================\n# REQUIRED\n# =================================================================\nFIRECRAWL_API_KEY=your_firecrawl_api_key    # https://firecrawl.dev\n\n# =================================================================\n# AI PROVIDER - Choose your LLM\n# =================================================================\nGEMINI_API_KEY=your_gemini_api_key        # https://aistudio.google.com/app/apikey\nANTHROPIC_API_KEY=your_anthropic_api_key  # https://console.anthropic.com\nOPENAI_API_KEY=your_openai_api_key        # https://platform.openai.com\nGROQ_API_KEY=your_groq_api_key            # https://console.groq.com\n\n# =================================================================\n# FAST APPLY (Optional - for faster edits)\n# =================================================================\nMORPH_API_KEY=your_morphllm_api_key    # https://morphllm.com/dashboard\n\n# =================================================================\n# SANDBOX PROVIDER - Choose ONE: Vercel (default) or E2B\n# =================================================================\nSANDBOX_PROVIDER=vercel  # or 'e2b'\n\n# Option 1: Vercel Sandbox (default)\n# Choose one authentication method:\n\n# Method A: OIDC Token (recommended for development)\n# Run `vercel link` then `vercel env pull` to get VERCEL_OIDC_TOKEN automatically\nVERCEL_OIDC_TOKEN=auto_generated_by_vercel_env_pull\n\n# Method B: Personal Access Token (for production or when OIDC unavailable)\n# VERCEL_TEAM_ID=team_xxxxxxxxx      # Your Vercel team ID \n# VERCEL_PROJECT_ID=prj_xxxxxxxxx    # Your Vercel project ID\n# VERCEL_TOKEN=vercel_xxxxxxxxxxxx   # Personal access token from Vercel dashboard\n\n# Option 2: E2B Sandbox\n# E2B_API_KEY=your_e2b_api_key      # https://e2b.dev\n```\n\n3. **Run**\n```bash\npnpm dev  # or npm run dev / yarn dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000)\n\n## License\n\nMIT",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"open-lovable\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"next dev --turbopack\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\",\n    \"test:api\": \"node tests/api-endpoints.test.js\",\n    \"test:code\": \"node tests/code-execution.test.js\",\n    \"test:all\": \"npm run test:integration && npm run test:api && npm run test:code\"\n  },\n  \"dependencies\": {\n    \"@ai-sdk/anthropic\": \"^2.0.1\",\n    \"@ai-sdk/google\": \"^2.0.4\",\n    \"@ai-sdk/groq\": \"^2.0.0\",\n    \"@ai-sdk/openai\": \"^2.0.4\",\n    \"@anthropic-ai/sdk\": \"^0.57.0\",\n    \"@e2b/code-interpreter\": \"^2.0.0\",\n    \"@mendable/firecrawl-js\": \"^4.3.3\",\n    \"@radix-ui/react-accordion\": \"^1.2.12\",\n    \"@radix-ui/react-alert-dialog\": \"^1.1.15\",\n    \"@radix-ui/react-aspect-ratio\": \"^1.1.7\",\n    \"@radix-ui/react-avatar\": \"^1.1.10\",\n    \"@radix-ui/react-checkbox\": \"^1.3.3\",\n    \"@radix-ui/react-collapsible\": \"^1.1.12\",\n    \"@radix-ui/react-context-menu\": \"^2.2.16\",\n    \"@radix-ui/react-dialog\": \"^1.1.15\",\n    \"@radix-ui/react-dropdown-menu\": \"^2.1.16\",\n    \"@radix-ui/react-hover-card\": \"^1.1.15\",\n    \"@radix-ui/react-label\": \"^2.1.7\",\n    \"@radix-ui/react-menubar\": \"^1.1.16\",\n    \"@radix-ui/react-navigation-menu\": \"^1.2.14\",\n    \"@radix-ui/react-popover\": \"^1.1.15\",\n    \"@radix-ui/react-progress\": \"^1.1.7\",\n    \"@radix-ui/react-radio-group\": \"^1.3.8\",\n    \"@radix-ui/react-scroll-area\": \"^1.2.10\",\n    \"@radix-ui/react-select\": \"^2.2.6\",\n    \"@radix-ui/react-separator\": \"^1.1.7\",\n    \"@radix-ui/react-slider\": \"^1.3.6\",\n    \"@radix-ui/react-slot\": \"^1.2.3\",\n    \"@radix-ui/react-switch\": \"^1.2.5\",\n    \"@radix-ui/react-tabs\": \"^1.1.13\",\n    \"@radix-ui/react-toast\": \"^1.2.15\",\n    \"@radix-ui/react-toggle\": \"^1.1.10\",\n    \"@radix-ui/react-toggle-group\": \"^1.1.11\",\n    \"@radix-ui/react-tooltip\": \"^1.2.8\",\n    \"@tabler/icons-react\": \"^3.34.1\",\n    \"@tailwindcss/typography\": \"^0.5.16\",\n    \"@types/react-syntax-highlighter\": \"^15.5.13\",\n    \"@vercel/sandbox\": \"^0.0.17\",\n    \"ai\": \"^5.0.0\",\n    \"autoprefixer\": \"^10.4.21\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"classnames\": \"^2.5.1\",\n    \"clsx\": \"^2.1.1\",\n    \"copy-to-clipboard\": \"^3.3.3\",\n    \"cors\": \"^2.8.5\",\n    \"dotenv\": \"^17.2.1\",\n    \"framer-motion\": \"^12.23.12\",\n    \"groq-sdk\": \"^0.29.0\",\n    \"jotai\": \"^2.14.0\",\n    \"lodash-es\": \"^4.17.21\",\n    \"lucide-react\": \"^0.532.0\",\n    \"motion\": \"^12.23.12\",\n    \"nanoid\": \"^5.1.5\",\n    \"next\": \"15.4.3\",\n    \"next-themes\": \"^0.4.6\",\n    \"pixi.js\": \"^8.13.1\",\n    \"react\": \"19.1.0\",\n    \"react-dom\": \"19.1.0\",\n    \"react-hook-form\": \"^7.62.0\",\n    \"react-icons\": \"^5.5.0\",\n    \"react-syntax-highlighter\": \"^15.6.1\",\n    \"sonner\": \"^2.0.7\",\n    \"tailwind-gradient-mask-image\": \"^1.2.0\",\n    \"tailwind-merge\": \"^3.3.1\",\n    \"tailwindcss-animate\": \"^1.0.7\",\n    \"usehooks-ts\": \"^3.1.1\",\n    \"zod\": \"^3.25.76\"\n  },\n  \"devDependencies\": {\n    \"@eslint/eslintrc\": \"^3\",\n    \"@types/lodash-es\": \"^4.17.12\",\n    \"@types/node\": \"^20\",\n    \"@types/react\": \"^19\",\n    \"@types/react-dom\": \"^19\",\n    \"eslint\": \"^9\",\n    \"eslint-config-next\": \"15.4.3\",\n    \"postcss\": \"^8.5.6\",\n    \"postcss-import\": \"^16.1.1\",\n    \"postcss-nesting\": \"^13.0.2\",\n    \"tailwindcss\": \"^3.4.17\",\n    \"typescript\": \"^5\"\n  }\n}\n",
    "strategic_keywords": [
      "llm"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 16,
      "relevance": 8,
      "novelty": 11,
      "productize": 11,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 8,
      "total": 71
    },
    "strategic_score": 71
  },
  {
    "owner": "HKUDS",
    "name": "CLI-Anything",
    "full_name": "HKUDS/CLI-Anything",
    "url": "https://github.com/HKUDS/CLI-Anything",
    "description": "\"CLI-Anything: Making ALL Software Agent-Native\" -- CLI-Hub: https://clianything.cc/",
    "language": "Python",
    "total_stars": 44255,
    "forks": 4133,
    "stars_this_period": 147,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 67,
      "created_at": "2026-03-08T13:52:57Z",
      "pushed_at": "2026-06-25T15:17:48Z",
      "homepage": "https://clianything.cc/",
      "default_branch": "main",
      "forks": 4133,
      "watchers": 174,
      "archived": false,
      "size_kb": 39650
    },
    "readme_content": "<h1 align=\"center\"><img src=\"assets/icon.png\" alt=\"\" width=\"64\" style=\"vertical-align: middle;\">&nbsp; CLI-Anything: Making ALL Software Agent-Native</h1>\n\n<div align=\"center\">\n<a href=\"https://trendshift.io/repositories/22991\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/22991\" alt=\"HKUDS%2FCLI-Anything | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n</div>\n\n<p align=\"center\">\n  <strong>Today's Software Serves Humans👨‍💻. Tomorrow's Users will be Agents🤖.<br>\nCLI-Anything: Bridging the Gap Between AI Agents and the World's Software</strong><br>\n</p>\n\n**🌐 [CLI-Hub](https://hkuds.github.io/CLI-Anything/)**: `pip install cli-anything-hub` then `cli-hub install <name>` — browse, install, and manage all community-built CLIs. Want to add your own? [Open a PR](https://github.com/HKUDS/CLI-Anything/blob/main/CONTRIBUTING.md) — the hub updates instantly.\n\n**🎬 [See Demos](#-real-world-demos)**: Watch AI agents use generated CLIs plus preview, live preview, and trajectory loops to produce real artifacts — CAD builds, 3D scenes, diagrams, gameplay, subtitles, and more.\n\n**🙋 [Become a Contributor, or Request a CLI]**: [Join us](https://github.com/HKUDS/CLI-Anything/issues/new?template=contributor-signup.yml)! Sign up to build a new CLI harness — once reviewed and merged, you'll gain access as one of our community contributors! Wish CLI-Anything supported a specific software or service? Submit a [wishlist request](https://github.com/HKUDS/CLI-Anything/issues/new?template=cli-wishlist.yml)!\n\n<p align=\"center\">\n  <a href=\"#-quick-start\"><img src=\"https://img.shields.io/badge/Quick_Start-5_min-blue?style=for-the-badge\" alt=\"Quick Start\"></a>\n  <a href=\"https://hkuds.github.io/CLI-Anything/\"><img src=\"https://img.shields.io/badge/CLI_Hub-Browse_%26_Install-ff69b4?style=for-the-badge\" alt=\"CLI Hub\"></a>\n  <a href=\"#-demonstrations\"><img src=\"https://img.shields.io/badge/Demos-18_Apps-green?style=for-the-badge\" alt=\"Demos\"></a>\n  <a href=\"#-test-results\"><img src=\"https://img.shields.io/badge/Tests-2%2C461_Passing-brightgreen?style=for-the-badge\" alt=\"Tests\"></a>\n  <a href=\"https://arxiv.org/abs/2606.03854\"><img src=\"https://img.shields.io/badge/Tech_Report-arXiv%3A2606.03854-b31b1b?style=for-the-badge\" alt=\"Tech Report\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/License-Apache_2.0-yellow?style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/python-≥3.10-blue?logo=python&logoColor=white\" alt=\"Python\">\n  <img src=\"https://img.shields.io/badge/click-≥8.0-green\" alt=\"Click\">\n  <img src=\"https://img.shields.io/badge/pytest-100%25_pass-brightgreen\" alt=\"Pytest\">\n  <img src=\"https://img.shields.io/badge/coverage-unit_%2B_e2e-orange\" alt=\"Coverage\">\n  <img src=\"https://img.shields.io/badge/output-JSON_%2B_Human-blueviolet\" alt=\"Output\">\n  <a href=\"https://github.com/HKUDS/.github/blob/main/profile/README.md\"><img src=\"https://img.shields.io/badge/Feishu-Group-E9DBFC?style=flat&logo=feishu&logoColor=white\" alt=\"Feishu\"></a>\n<a href=\"https://github.com/HKUDS/.github/blob/main/profile/README.md\"><img src=\"https://img.shields.io/badge/WeChat-Group-C5EAB4?style=flat&logo=wechat&logoColor=white\" alt=\"WeChat\"></a>\n</p>\n\n**One Command Line**: Make any software agent-ready for Pi, OpenClaw, nanobot, Cursor, Claude Code, etc.&nbsp;&nbsp;[**中文文档**](README_CN.md) | [**日本語ドキュメント**](README_JA.md) | [**Deutsch**](README_DE.md)\n\n<p align=\"center\">\n  <img src=\"assets/cli-typing.gif\" alt=\"CLI-Anything typing demo\" width=\"800\">\n</p>\n\n<p align=\"center\">\n  <img src=\"assets/teaser.png\" alt=\"CLI-Anything Teaser\" width=\"800\">\n</p>\n\n---\n\n## 📰 News\n\n> Thanks to all invaluable efforts from the community! More updates continuously on the way everyday..\n\n- **2026-05-30** 🧭 **Hermes skill** proposed (#320), adding a CLI-Anything orchestration skill with installer scripts and HARNESS fallback guidance. 🗺️ **ArcGIS Pro** was proposed for the public registry (#318) as a Windows/ArcPy CLI for cartography, geoprocessing, feature editing, and live-Pro MCP workflows.\n\n- **2026-05-27** 🔧 **CLI-Hub** registry date updates now handle `python -m pip` install commands (#312), improving package-date detection for registry automation.\n\n- **2026-05-23** 📝 **Obsidian Agent CLI** was proposed for the public registry (#307), bringing a PyPI-installed Obsidian automation CLI with persistent agent memory workflows and a pinned skill link.\n\n- **2026-05-21** 🔒 **Sketch CLI** token-file handling was hardened against path traversal and symlink escapes (#304).\n\n- **2026-05-20** 📓 **Joplin CLI** was proposed (#300) with notebooks, notes, to-dos, tags, attachments, search/sync, import/export, server/E2EE helpers, full docs, packaged skill docs, and a 134-test validation baseline.\n\n- **2026-05-20** 🎛️ **Rekordbox CLI** merged (#252) with guarded SQLCipher write paths, backup-required forced writes, smoke coverage, and root skill sync. 📚 **Calibre CLI** merged (#223) with library/search/metadata/conversion/export workflows, 41 unit tests, real-Calibre E2E evidence, and root skill validation. 🧊 **3MF CLI** merged (#209) with mesh inspection, hole resizing, repair, comparison, and preserved triangle attributes. 🎙️ **MiniMax CLI** merged (#189) with chat/TTS workflows, JSON-safe model/voice listing, REPL quote handling, and smoke/E2E coverage. 🎮 **UEAtelier** joined the registry (#297) as an Unreal Editor MCP self-extension workbench with a Python CLI proxy.\n\n- **2026-05-19** 🛠️ Existing harnesses got a quality/security pass — **Zoom** downloads recordings from direct URLs (#294), **Obsidian** search now uses the Local REST API vendor content types (#289), **LibreOffice** headless conversion is more robust on macOS (#290), and XML/SVG/ODF/MLT/MusicXML/CSL parsing now routes untrusted input through `defusedxml` (#296).\n\n- **2026-05-18** 📈 README presentation refreshed with the Trendshift badge and centered project header polish (#285, #286), keeping the landing section focused on discovery and project momentum.\n\n- **2026-05-17** 🌐 **CLI-Hub** registry handling was hardened (#281) — registry entries are now copied before `_source` tagging, preventing cached or mocked registry data from being mutated in place.\n\n- **2026-05-16** 🔧 **n8n** received the REPL banner crash fix that later merged into main (#280), restoring the no-subcommand interactive startup path with regression coverage.\n\n<details>\n<summary>Earlier news (Apr 10–18)</summary>\n\n- **2026-04-18** 🧩 **All SKILL.md files are now being unified under the top-level `skills/` directory** — every CLI skill can be installed from one canonical source with `npx skills add HKUDS/CLI-Anything --skill <skill-name> -g -y`. We also added root-skill validation CI, synced contribution / PR docs and REPL skill-path hints to the new layout, and refreshed the **CLI-Hub** install-first frontend around the new `npx skills` flow.\n\n- **2026-04-17** 🌐 **CLI-Hub** received another install UX pass — public registry metadata and skill coverage were tightened, visit counting was corrected, and the web hub was further refined. 🧪 **Shotcut** render output duration was fixed (#92). 📝 **SKILL** contribution paths were corrected for the new docs flow (#224), and the skill generator now safely handles empty intros (#203).\n\n- **2026-04-16** 🗺️ **QGIS CLI** merged (#207) — a full GIS / map authoring harness landed. 🧬 **UniMol Tools CLI** merged (#219) for molecular modeling workflows. 🌐 **CLI-Hub** also added more public CLIs, including **py4csr**, refreshed its generated meta-skill, corrected SKILL contribution docs, and fixed `apt-get` package extraction in skill generation (#204).\n\n- **2026-04-16** 📈 **Unreal Insights CLI** expanded — added background capture session control (`capture start/status/snapshot/stop`), engine-root-matched `UnrealInsights.exe` resolution/build flows, and refreshed docs/tests for the new orchestration workflow.\n\n- **2026-04-15** 🌐 **CLI-Hub** updated to **v0.2.0** — the PyPI package now supports public CLIs from multiple install sources (`pip`, `npm`, `brew`, bundled/system tools), backed by a new `public_registry.json`. The Hub frontend was redesigned with separate **CLI-Anything CLIs** and **Public CLIs** decks, and live end-to-end checks now cover real install, update, and uninstall flows across both pip and npm packages.\n\n- **2026-04-14** 🧭 **Safari CLI** merged (#212) and added to the Hub registry — browser automation via `safari-mcp`. 🎬 **Kdenlive** also received compatibility fixes for Gen 5 project output and invalid project generation.\n\n- **2026-04-13** 📓 **Obsidian CLI** merged (#211) — knowledge management harness via the Local REST API, with 48 unit tests and 7 E2E tests. ⛓️ **Eth2-Quickstart CLI** merged (#195) — Ethereum staking node management harness. 📚 **Zotero CLI** updated to v0.4.1 (#201) — now shipped from its standalone repo, and CLI-Hub gained support for remote `skill_md` URLs.\n\n- **2026-04-11** 🔗 **n8n CLI** merged (#188) — workflow automation harness for self-hosted automation flows. 🔧 **Exa CLI** fix (#205) added the `x-exa-integration` header for usage tracking. 📦 **CLI-Hub** also gained its PyPI auto-publish workflow and package refresh pipeline.\n\n- **2026-04-10** 📦 **CLI-Hub package manager** launched — `pip install cli-anything-hub` to browse, search, install, update, and uninstall CLI-Anything harnesses from one command. The web Hub also shipped its first install-focused frontend refresh and \"Empower yourself\" toolkit card.\n\n</details>\n\n<details>\n<summary>Earlier news (Apr 1–9)</summary>\n\n- **2026-04-09** 🧹 Cleanup and docs pass (#200) — fixed Openscreen test subtotals, added Openscreen to the Chinese README and project structure, and clarified `/cli-anything` command syntax in the docs.\n\n- **2026-04-08** 🎬 **Openscreen CLI** merged (#183) — screen recording editor harness with 101 tests. ☁️ **CloudAnalyzer CLI** merged (#181) — cloud cost analysis harness with 27 commands. 🌊 **SeaClip / PM2 / ChromaDB** harnesses merged (#129).\n\n- **2026-04-07** 🔄 **Dify Workflow CLI** merged (#191) — workflow automation wrapper. 🔧 **Inkscape** auto-save fix (#193, fixes #182). 🛡️ **DomShell security hardening** (#156) — URL validation and DOM sanitization for the browser CLI. 🥧 **Pi Coding Agent extension** merged (#178).\n\n- **2026-04-06** 🔍 **Exa CLI** merged (#172) — AI-powered web search and answers harness. 🎮 **Godot CLI** merged (#140) — game engine harness with a full demo-game E2E pipeline. ☁️ **CloudAnalyzer** review fixes and frontend improvements also landed.\n\n- **2026-04-03** 🧪 **WireMock CLI** merged (#170) — HTTP mock server harness for API testing. 🥧 **Pi Coding Agent** extension support also landed, and CLI demo recordings were added to the docs.\n\n- **2026-04-01** ⚔️ **Slay the Spire II CLI** merged (#148) — deck-building roguelike harness. 🎥 **VideoCaptioner CLI** merged (#166) — AI-powered video captioning harness. 🛰️ **IntelWatch** was added to the registry for B2B OSINT workflows.\n\n</details>\n\n<details>\n<summary>Earlier news (Mar 23–30)</summary>\n\n- **2026-03-30** 🏗️ **CLI-Anything v0.2.0** — HARNESS.md progressive disclosure redesign. Detailed guides extracted into `guides/` for on-demand loading. Phases 1–7 now contiguous. Key Principles and Rules merged into a single authoritative section.\n\n- **2026-03-29** 📐 Blender skill docs updated — enforce absolute render paths and correct prerequisites.\n\n- **2026-03-28** 🌐 **CLIBrowser** added to CLI-Hub registry for agent-accessible browser automation.\n\n- **2026-03-27** 📚 Zotero SKILL.md enhanced with agent-facing constraints; REPL config and executable resolution fixes.\n\n- **2026-03-26** 📖 **Zotero CLI** harness landed for Zotero desktop (library management, collections, citations). Draw.io custom ID bugfix (#132) and registry.json syntax fix.\n\n- **2026-03-25** 🎮 **RenderDoc CLI** merged for GPU frame capture analysis. FreeCAD updated for v1.1. Blender EEVEE engine name corrected. Zoom token permis",
    "strategic_keywords": [
      "agent",
      "agents",
      "rag",
      "skill"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 8,
      "total": 83
    },
    "strategic_score": 83
  },
  {
    "owner": "reacherhq",
    "name": "check-if-email-exists",
    "full_name": "reacherhq/check-if-email-exists",
    "url": "https://github.com/reacherhq/check-if-email-exists",
    "description": "Check if an email address exists without sending any email, written in Rust. Comes with a ⚙️ HTTP backend.",
    "language": "Rust",
    "total_stars": 9052,
    "forks": 648,
    "stars_this_period": 144,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "email",
        "email-validation",
        "email-validation-api",
        "email-verification",
        "email-verification-api",
        "email-verifier",
        "hacktoberfest"
      ],
      "license": "NOASSERTION",
      "open_issues": 88,
      "created_at": "2017-04-25T12:47:51Z",
      "pushed_at": "2026-03-17T15:14:47Z",
      "homepage": "https://reacher.email",
      "default_branch": "master",
      "forks": 648,
      "watchers": 56,
      "archived": false,
      "size_kb": 4329
    },
    "readme_content": "[![Crate](https://img.shields.io/crates/v/check-if-email-exists.svg)](https://crates.io/crates/check-if-email-exists)\n[![Docs](https://docs.rs/check-if-email-exists/badge.svg)](https://docs.rs/check-if-email-exists)\n[![Docker](https://img.shields.io/docker/v/reacherhq/backend?color=0db7ed&label=docker&sort=date)](https://hub.docker.com/r/reacherhq/backend)\n[![Actions Status](https://github.com/reacherhq/check-if-email-exists/workflows/pr/badge.svg)](https://github.com/reacherhq/check-if-email-exists/actions)\n\n<br /><br />\n\n<p align=\"center\"><img align=\"center\" src=\"https://storage.googleapis.com/saasify-uploads-prod/696e287ad79f0e0352bc201b36d701849f7d55e7.svg\" height=\"96\" alt=\"reacher\" /></p>\n<h1 align=\"center\">check-if-email-exists</h1>\n<h4 align=\"center\">Check if an email address exists without sending any email.<br/>Comes with a <a href=\"./backend\">⚙️ HTTP backend</a>.</h4>\n\n<br /><br /><br />\n\n## 👉 Live Demo: https://reacher.email\n\n<img src=\"https://storage.googleapis.com/saasify-uploads-prod/696e287ad79f0e0352bc201b36d701849f7d55e7.svg\" height=\"68\" align=\"left\" />\n\nThis is open-source, but I also offer a **SaaS** solution that has `check-if-email-exists` packaged in a nice friendly web interface. If you are interested, find out more at [No2Bounce.com](https://no2bounce.com/?ref=github). If you have any questions, you can contact me at amaury@reacher.email.\n\n<br />\n\n## Get Started\n\n3 non-SaaS ways to get started with `check-if-email-exists`.\n\n### 1. ⚙️ HTTP backend using Docker (popular method 🥇) [[Full docs](./backend/README.md)]\n\nThis option allows you to run a HTTP backend using Docker 🐳, on a cloud instance or your own server. Please note that outbound port 25 must be open.\n\n```bash\ndocker run -p 8080:8080 reacherhq/backend:latest\n```\n\nThen send a `POST http://localhost:8080/v0/check_email` request with the following body:\n\n```js\n{\n    \"to_email\": \"someone@gmail.com\",\n    \"proxy\": {                        // (optional) SOCK5 proxy to run the verification through, default is empty\n        \"host\": \"my-proxy.io\",\n        \"port\": 1080,\n        \"username\": \"me\",             // (optional) Proxy username\n        \"password\": \"pass\"            // (optional) Proxy password\n    }\n}\n```\n**Note regarding proxy servers**\nIt is possible to operate Reacher with your own IP addresses. But if you wish to process more than very small volumes you will need SMTP proxy servers. For SMTP proxy servers please use [proxy25.com](https://proxy25.com/?ref=github)\n\n### 2. Download the CLI [[Full docs](./cli/README.md)]\n\n> Note: The CLI binary doesn't connect to any backend, it checks the email directly from your computer.\n\nHead to the [releases page](https://github.com/reacherhq/check-if-email-exists/releases) and download the binary for your platform.\n\n```bash\n> $ check_if_email_exists --help\ncheck_if_email_exists 0.9.1\nCheck if an email address exists without sending an email.\n\nUSAGE:\n    check_if_email_exists [FLAGS] [OPTIONS] [TO_EMAIL]\n```\n\nCheck out the [dedicated README.md](./cli/README.md) for all options and flags.\n\n### 3. Programmatic Usage [[Full docs](https://docs.rs/check-if-email-exists)]\n\nIn your own Rust project, you can add `check-if-email-exists` in your `Cargo.toml`:\n\n```toml\n[dependencies]\ncheck-if-email-exists = \"0.9\"\n```\n\nAnd use it in your code as follows:\n\n```rust\nuse check_if_email_exists::{check_email, CheckEmailInput, CheckEmailInputProxy};\n\nasync fn check() {\n    // Let's say we want to test the deliverability of someone@gmail.com.\n    let mut input = CheckEmailInput::new(vec![\"someone@gmail.com\".into()]);\n\n    // Verify this email, using async/await syntax.\n    let result = check_email(&input).await;\n\n    // `result` is a `Vec<CheckEmailOutput>`, where the CheckEmailOutput\n    // struct contains all information about our email.\n    println!(\"{:?}\", result);\n}\n```\n\nThe reference docs are hosted on [docs.rs](https://docs.rs/check-if-email-exists).\n\n## ✈️ JSON Output\n\nThe output will be a JSON with the below format, the fields should be self-explanatory. For `someone@gmail.com` (note that it is disabled by Gmail), here's the exact output:\n\n```json\n{\n\t\"input\": \"someone@gmail.com\",\n\t\"is_reachable\": \"invalid\",\n\t\"misc\": {\n\t\t\"is_disposable\": false,\n\t\t\"is_role_account\": false,\n\t\t\"is_b2c\": true\n\t},\n\t\"mx\": {\n\t\t\"accepts_mail\": true,\n\t\t\"records\": [\n\t\t\t\"alt3.gmail-smtp-in.l.google.com.\",\n\t\t\t\"gmail-smtp-in.l.google.com.\",\n\t\t\t\"alt1.gmail-smtp-in.l.google.com.\",\n\t\t\t\"alt4.gmail-smtp-in.l.google.com.\",\n\t\t\t\"alt2.gmail-smtp-in.l.google.com.\"\n\t\t]\n\t},\n\t\"smtp\": {\n\t\t\"can_connect_smtp\": true,\n\t\t\"has_full_inbox\": false,\n\t\t\"is_catch_all\": false,\n\t\t\"is_deliverable\": false,\n\t\t\"is_disabled\": true\n\t},\n\t\"syntax\": {\n\t\t\"domain\": \"gmail.com\",\n\t\t\"is_valid_syntax\": true,\n\t\t\"username\": \"someone\",\n\t\t\"suggestion\": null\n\t}\n}\n```\n\n## What Does This Tool Check?\n\n| Included? | Feature                                       | Description                                                                                                                     | JSON field                                                                |\n| --------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |\n| ✅        | **Email reachability**                        | How confident are we in sending an email to this address? Can be one of `safe`, `risky`, `invalid` or `unknown`.                | `is_reachable`                                                            |\n| ✅        | **Syntax validation**                         | Is the address syntactically valid?                                                                                             | `syntax.is_valid_syntax`                                                  |\n| ✅        | **DNS records validation**                    | Does the domain of the email address have valid MX DNS records?                                                                 | `mx.accepts_mail`                                                         |\n| ✅        | **Disposable email address (DEA) validation** | Is the address provided by a known [disposable email address](https://en.wikipedia.org/wiki/Disposable_email_address) provider? | `misc.is_disposable`                                                      |\n| ✅        | **SMTP server validation**                    | Can the mail exchanger of the email address domain be contacted successfully?                                                   | `smtp.can_connect_smtp`                                                   |\n| ✅        | **Email deliverability**                      | Is an email sent to this address deliverable?                                                                                   | `smtp.is_deliverable`                                                     |\n| ✅        | **Mailbox disabled**                          | Has this email address been disabled by the email provider?                                                                     | `smtp.is_disabled`                                                        |\n| ✅        | **Full inbox**                                | Is the inbox of this mailbox full?                                                                                              | `smtp.has_full_inbox`                                                     |\n| ✅        | **Catch-all address**                         | Is this email address a [catch-all](https://debounce.io/blog/help/what-is-a-catch-all-or-accept-all/) address?                  | `smtp.is_catch_all`                                                       |\n| ✅        | **Role account validation**                   | Is the email address a well-known role account?                                                                                 | `misc.is_role_account`                                                    |\n| ✅        | **Gravatar Url**                              | The url of the [Gravatar](https://gravatar.com/) email address profile picture                                                  | `misc.gravatar_url`                                                       |\n| ✅        | **Have I Been Pwned?**                        | Has this email been compromised in a [data breach](https://haveibeenpwned.com/)?                                                | `misc.haveibeenpwned`                                                     |\n| 🔜        | **Free email provider check**                 | Is the email address bound to a known free email provider?                                                                      | [Issue #89](https://github.com/reacherhq/check-if-email-exists/issues/89) |\n| 🔜        | **Syntax validation, provider-specific**      | According to the syntactic rules of the target mail provider, is the address syntactically valid?                               | [Issue #90](https://github.com/reacherhq/check-if-email-exists/issues/90) |\n| 🔜        | **Honeypot detection**                        | Does email address under test hide a [honeypot](https://en.wikipedia.org/wiki/Spamtrap)?                                        | [Issue #91](https://github.com/reacherhq/check-if-email-exists/issues/91) |\n\n## 🤔 Why?\n\nMany online services (https://hunter.io, https://verify-email.org, https://email-checker.net) offer this service for a paid fee. Here is an open-source alternative to those tools.\n\n## License\n\n`check-if-email-exists`'s source code is provided under a **dual license model**.\n\n### Commercial license\n\nIf you want to use `check-if-email-exists` to develop commercial sites, tools, and applications, the Commercial License is the appropriate license. With this option, your source code is kept proprietary. Purchase a `check-if-email-exists` Commercial License at https://reacher.email/pricing.\n\n### Open source license\n\nIf you are creating an open-source application under a license compatible with the GNU Affero GPL License v3, you may use `check-if-email-exists` under the terms of the [AGPL-3.0](./LICENSE.AGPL).\n\n[➡️ Read more](https://docs.reacher.email/self-hosting/licensing) about Reacher's license.\n\n## 🔨 Build From Source\n\nBuild the [CLI from source](./cli/README.md#build-from-source) or the [HTTP backend from source](./backend/README.md#build-from-source).\n",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[workspace]\nmembers = [\"backend\", \"cli\", \"core\", \"sqs\"]\n",
    "strategic_keywords": [
      "rag",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 6,
      "total": 82
    },
    "strategic_score": 82
  },
  {
    "owner": "Anil-matcha",
    "name": "Open-Generative-AI",
    "full_name": "Anil-matcha/Open-Generative-AI",
    "url": "https://github.com/Anil-matcha/Open-Generative-AI",
    "description": "Unrestricted Open-source alternative to AI video platforms — Free AI image & video generation studio with 200+ models (Flux, Midjourney, Kling, Sora, Veo). No content filters. Self-hosted, MIT licensed.",
    "language": "JavaScript",
    "total_stars": 21788,
    "forks": 3706,
    "stars_this_period": 142,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "ai-art-generator",
        "ai-image-generation",
        "ai-video-generation",
        "creative-tools",
        "flux",
        "flux-1",
        "generative-ai",
        "image-to-video",
        "javascript",
        "kling-ai",
        "lipsync",
        "midjourney-alternative",
        "muapi",
        "open-source",
        "seedance2",
        "sora-alternative",
        "text-to-image",
        "text-to-video",
        "uncensored",
        "wan-video"
      ],
      "license": "MIT",
      "open_issues": 17,
      "created_at": "2023-05-09T14:12:37Z",
      "pushed_at": "2026-06-28T01:24:28Z",
      "homepage": "https://muapi.ai/open-generative-ai?utm_source=github&utm_medium=about&utm_campaign=open-generative-ai",
      "default_branch": "main",
      "forks": 3706,
      "watchers": 165,
      "archived": false,
      "size_kb": 45518
    },
    "readme_content": "# Open Generative AI — Unrestricted Open-Source Alternative to AI Video Platforms\n\n[![Powered by MuAPI](https://img.shields.io/badge/Powered%20by-MuAPI-6366f1?style=flat-square&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNHYtNGgtMnYtMmg0djZoLTJ6bTAtOFY2aDJ2MmgtMnoiLz48L3N2Zz4=)](https://muapi.ai?utm_source=github&utm_medium=badge&utm_campaign=open-generative-ai)\n\n\n> **The free, open-source alternative to AI Video Platforms.** Generate AI images and videos using 200+ state-of-the-art models — no content filters, no closed ecosystem, no subscription fees.\n\n**Community:** Join [Discord](https://discord.gg/tANKJkHck) for discussions and support\n\n<p align=\"center\">\n  <a href=\"https://github.com/Anil-matcha/awesome-generative-ai-apps\">\n    <img src=\"https://img.shields.io/badge/Part%20of-Awesome%20Generative%20AI%20Apps-FFD700?style=for-the-badge&logo=github&logoColor=black\" alt=\"Awesome Generative AI Apps\">\n  </a>\n</p>\n\n> 🎨 **[Explore 50+ more open-source AI apps →](https://github.com/Anil-matcha/awesome-generative-ai-apps)**\n\n## Related Projects\n\n> 🤖 **Automate media generations with AI coding agents:** [Generative-Media-Skills](https://github.com/SamurAIGPT/Generative-Media-Skills) — a library of skills that let agents like **Claude Code**, **Codex**, and other coding assistants drive 200+ image/video models end-to-end (prompt → generate → edit → stitch) directly from your terminal. Perfect for building automated media pipelines without touching a UI.\n\n> 🎬 **Seedance 2.5 prompts & API guide:** [awesome-seedance-2.5-api-prompts](https://github.com/Anil-matcha/awesome-seedance-2.5-api-prompts) — Curated prompt templates, camera control vocabulary, MuAPI reference, and cinematic examples for Seedance 2.5 video generation.\n\n> 🍌 **Claude Fable 5 use cases + 20% off on MuAPI:** [awesome-claude-fable-5](https://github.com/Anil-matcha/awesome-claude-fable-5) — 60 curated real-world use cases, prompts, and benchmarks for Claude Fable 5, with **20% off Fable 5 access** via [MuAPI](https://muapi.ai/pricing?utm_source=github&utm_medium=readme&utm_campaign=open-generative-ai).\n\n- [Vadoo](https://vadoo.tv) — Unrestricted AI image & video generation → auto-publish as YouTube Shorts and TikToks & earn\n- [AI-Youtube-Shorts-Generator](https://github.com/SamurAIGPT/AI-Youtube-Shorts-Generator) — Auto-generate viral YouTube Shorts from long-form videos using AI\n- [muapi-cli](https://github.com/SamurAIGPT/muapi-cli) — Official CLI for MuAPI — run these models from your terminal\n- [Vibe-Workflow](https://github.com/SamurAIGPT/Vibe-Workflow) — Node-based AI workflow builder for generative image & video pipelines\n- [Text-To-Video-AI](https://github.com/SamurAIGPT/Text-To-Video-AI) — Lightweight text-to-video script — no UI required\n- [muapi-comfyui](https://github.com/SamurAIGPT/muapi-comfyui) — ComfyUI nodes for 100+ MuAPI models\n- [n8n-nodes-muapi](https://github.com/SamurAIGPT/n8n-nodes-muapi) — n8n community nodes for MuAPI — automate media generation\n- [Open-AI-Design-Agent](https://github.com/Anil-matcha/Open-AI-Design-Agent) — Open-source autonomous AI design agent\n- [Free-AI-Social-Media-Scheduler](https://github.com/Anil-matcha/Free-AI-Social-Media-Scheduler) — Free open-source AI social media scheduler — self-hostable alternative to Buffer and Hootsuite\n- [awesome-seedance-2.5-api-prompts](https://github.com/Anil-matcha/awesome-seedance-2.5-api-prompts) — Curated Seedance 2.5 API guide, prompts, camera controls, and video generation examples\n- [AI-Voice-Agent](https://github.com/Anil-matcha/AI-Voice-Agent) — Self-hosted AI voice agent for real-time voice conversations, sales calls, and customer support\n\n## 🌐 Try it Online — No Install Required\n\n**Hosted version:** [https://muapi.ai/open-generative-ai?utm_source=github&utm_medium=readme&utm_campaign=open-generative-ai](https://muapi.ai/open-generative-ai?utm_source=github&utm_medium=readme&utm_campaign=open-generative-ai)\n\nUse all studios (Image, Video, Audio, AI Clipping, Vibe Motion, Lip Sync, Cinema, Marketing, Workflows, Agents, Design Agent, Apps, MCP & CLI) directly in your browser — no Node.js, no setup. Sign up for a free account to start generating. The hosted version is always up to date with the latest models.\n\n**Follow** the [creator](https://x.com/matchaman11) for updates\n\n---\n\n## ⬇️ Download Desktop App\n\nOne-click installers — no Node.js or terminal required.\n\n| Platform | Download |\n|---|---|\n| macOS Apple Silicon (M1/M2/M3/M4) | [Open Generative AI-1.0.9-arm64.dmg](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.9/Open.Generative.AI-1.0.9-arm64.dmg) |\n| macOS Intel (x64) | [Open Generative AI-1.0.9.dmg](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.9/Open.Generative.AI-1.0.9.dmg) |\n| Windows (x64) | [Open Generative AI Setup 1.0.9.exe](https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.9/Open.Generative.AI.Setup.1.0.9.exe) |\n| Linux (Ubuntu x64) | [v1.0.9 release](https://github.com/Anil-matcha/Open-Generative-AI/releases/tag/v1.0.9) (`.AppImage` / `.deb`), or build locally with `npm run electron:build:linux`. |\n\nAll releases: [github.com/Anil-matcha/Open-Generative-AI/releases](https://github.com/Anil-matcha/Open-Generative-AI/releases)\n\n### macOS Installation Guide\n\nBecause the app is not notarized by Apple, macOS Gatekeeper will block it on first launch. Follow these steps:\n\n**Step 1** — Mount the DMG and drag the app to `/Applications`\n\n**Step 2** — Open Terminal and run:\n```bash\nxattr -cr \"/Applications/Open Generative AI.app\"\n```\n\n**Step 3** — Right-click the app in `/Applications` → click **Open** → click **Open** again on the dialog\n\n> You only need to do this once. After that, the app opens normally.\n\n**Alternative (no Terminal):**\n1. Try to open the app — macOS will block it\n2. Go to **System Settings → Privacy & Security**\n3. Scroll down to find _\"Open Generative AI was blocked\"_\n4. Click **Open Anyway** → **Open**\n\n### Windows Installation — SmartScreen warning fix\n\nWindows SmartScreen may show a warning because the installer is not code-signed:\n\n1. Click **More info** on the SmartScreen dialog\n2. Click **Run anyway**\n\nThe app will install silently to `%LocalAppData%` with a Start Menu shortcut.\n\n### Ubuntu / Linux Installation\n\nLinux artifacts are available when building with Electron Builder:\n\n```bash\n# Build Linux installers (AppImage + .deb)\nnpm run electron:build:linux\n```\n\nGenerated files are written to the `release/` folder:\n- **AppImage** — portable, run directly after making executable:\n  ```bash\n  chmod +x \"release/Open Generative AI-*.AppImage\"\n  ./release/Open\\ Generative\\ AI-*.AppImage\n  ```\n- **.deb** — install on Debian/Ubuntu:\n  ```bash\n  sudo apt install ./release/open-generative-ai_*_amd64.deb\n  ```\n\nIf AppImage fails to start on older systems, install `libfuse2`:\n\n```bash\nsudo apt install libfuse2\n```\n\n#### Ubuntu 24.04+ / AppArmor sandbox restriction\n\nUbuntu 24.04 and later enable a kernel security policy (`apparmor_restrict_unprivileged_userns`) that blocks Chromium's user-namespace sandbox. If the app fails to start silently or crashes immediately, you have two options:\n\n**Option A — Recommended: install the `.deb` instead.**\nThe `.deb` package ships an AppArmor profile that grants the required permission automatically on install with no system-wide changes.\n\n**Option B — Temporary system fix (AppImage users):**\n```bash\nsudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0\n```\nThis lasts until next reboot. To make it permanent:\n```bash\necho 'kernel.apparmor_restrict_unprivileged_userns=0' | sudo tee /etc/sysctl.d/99-userns.conf\n```\n\n---\n\nOpen Generative AI is a free, open-source AI image, video, cinema, and lip sync studio that brings creative workflows to everyone. No content filters, no prompt rejections, no guardrails — just full creative freedom. Powered by [Muapi.ai](https://muapi.ai?utm_source=github&utm_medium=readme&utm_campaign=open-generative-ai), it supports text-to-image, image-to-image, text-to-video, image-to-video, and audio-driven lip sync generation across models like Flux, Nano Banana, Midjourney, Kling, Sora, Veo, Seedream, Infinite Talk, LTX Lipsync, Wan 2.2, and more — all from a sleek, modern interface you can self-host and customize.\n\n**Why Open Generative AI instead of other AI Video Platforms?**\n- **No filters** — no content filters, no nanny guardrails, no prompt rejections\n- **Free & open-source** — no subscription, no vendor lock-in\n- **Self-hosted** — your data stays on your machine, full creative control\n- **200+ models** — text-to-image, image-to-image, text-to-video, image-to-video, lip sync\n- **Multi-image input** — feed up to 14 reference images into compatible models\n- **Lip Sync Studio** — animate portraits or sync lips to any audio with 9 dedicated models\n- **Extensible** — add your own models, modify the UI, build on top of it\n\nFor a deep dive into the technical architecture and the philosophy behind the \"Infinite Budget\" cinema workflow, see our [comprehensive guide and roadmap](https://medium.com/@anilmatcha/).\n\n## ⚡ Local Model Inference (Desktop App Only)\n\nThe desktop app supports **two independent local engines**. Pick whichever fits the machine you actually run on:\n\n| Engine | What it is | Best for |\n|---|---|---|\n| **sd.cpp** (bundled) | C++ engine from [stable-diffusion.cpp](https://github.com/leejet/stable-diffusion.cpp), runs on the same machine as the app. Metal GPU on Apple Silicon, CUDA/Vulkan/ROCm on Linux/Windows. | Image-only models. Works on Mac M-series. |\n| **Wan2GP** (BYO server) | HTTP client to a user-run [Wan2GP](https://github.com/deepbeepmeep/Wan2GP) server. The server runs Python + PyTorch on a CUDA/ROCm GPU; the desktop app only sends prompts and receives results. | Video models (Wan 2.2, Hunyuan, LTX) and large image models (Flux, Qwen-Image). NVIDIA/AMD GPU required on the *server*; the desktop app itself can run on a Mac. |\n\nBoth engines share the same UI: open **Settings → Local Models** to configure each.\n\n### Engine 1 — sd.cpp (bundled)\n\n| Model | Type | Size | Notes |\n|---|---|---|---|\n| **Z-Image Turbo** ⚡ | Diffusion Transformer | 2.5 GB + 2.7 GB aux | 8-step turbo. Heavy on memory. |\n| **Z-Image Base** ⚡ | Diffusion Transformer | 3.5 GB + 2.7 GB aux | 50-step high-quality. Heavy on memory. |\n| **Dreamshaper 8** | SD 1.5 | 2.1 GB | 20-step versatile. Lightest tested option on Mac. |\n| **Realistic Vision v5.1** | SD 1.5 | 2.1 GB | 25-step photorealistic |\n| **Anything v5** | SD 1.5 | 2.1 GB | 20-step anime/illustration |\n| **SDXL Base 1.0** | SDXL | 6.9 GB | 30-step high-res |\n\n> **Z-Image models** require two shared auxiliary files (downloaded once, shared across both models):\n> - **Qwen3-4B Text Encoder** — 2.4 GB\n> - **FLUX VAE** — 335 MB\n\n**How to use:**\n1. Open **Settings → Local Models** in the desktop app\n2. Install the **sd.cpp inference engine** (one click — auto-downloaded)\n3. Download your chosen model (and auxiliary files for Z-Image)\n4. In **Image Studio**, click the **⚡ Local** toggle next to the model selector\n5. Select your local model and generate — no API key needed\n\nAll downloads happen inside the app. Nothing is installed system-wide.\n\nBy default, `sd.cpp` stores the engine, model weights, and temporary downloads under Electron's app data directory. Common paths are:\n\n- macOS: `~/Library/Application Support/open-generative-ai/local-ai`\n- Windows: `%APPDATA%\\open-generative-ai\\local-ai`\n- Linux: `~/.config/open-generative-ai/local-ai`\n\nTo keep multi-GB model weights on another drive, set `OPEN_GENERATIVE_AI_LOCAL_AI_DIR`\nbefore launching the desktop app. The app will create `bin/`, `models/`, and `tmp/`\ninside that directory, and **Settings -> Local Models** shows the resolved model folder.\nLocal engine output and download errors ",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"open-generative-ai\",\n  \"description\": \"Open-source alternative to HF AI — AI image, video, cinema and lip sync studio\",\n  \"homepage\": \"https://github.com/Anil-matcha/Open-Generative-AI\",\n  \"private\": true,\n  \"version\": \"2.0.0\",\n  \"license\": \"MIT\",\n  \"workspaces\": [\n    \"packages/studio\",\n    \"packages/Vibe-Workflow/packages/workflow-builder\",\n    \"packages/Open-Poe-AI/packages/agents\",\n    \"packages/Open-AI-Design-Agent/packages/design-agent\"\n  ],\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\",\n    \"build:studio\": \"npm run build -w studio\",\n    \"build:workflow\": \"npm run build -w workflow-builder\",\n    \"build:agent\": \"npm run build -w ai-agent\",\n    \"build:packages\": \"npm run build:workflow && npm run build:agent && npm run build:studio\",\n    \"setup\": \"git submodule update --init --recursive && npm install && npm run build:packages\",\n    \"vite:dev\": \"vite\",\n    \"vite:build\": \"vite build\",\n    \"electron:dev\": \"npm run vite:build && electron .\",\n    \"electron:build\": \"vite build && electron-builder --mac\",\n    \"electron:build:win\": \"vite build && electron-builder --win\",\n    \"electron:build:linux\": \"vite build && electron-builder --linux\",\n    \"electron:build:linux:dir\": \"vite build && electron-builder --linux dir\",\n    \"electron:build:linux:arm64:dir\": \"vite build && electron-builder --linux dir --arm64\",\n    \"stage:local-ai\": \"node scripts/stage-local-ai-binary.js\",\n    \"package:linux:deb\": \"node scripts/package-linux-deb.js\",\n    \"package:linux:deb:arm64\": \"node scripts/package-linux-deb.js --arch arm64\",\n    \"package:linux:deb:x64\": \"node scripts/package-linux-deb.js --arch x64\",\n    \"electron:build:all\": \"vite build && electron-builder --mac --win --linux\"\n  },\n  \"build\": {\n    \"appId\": \"ai.generative.open\",\n    \"productName\": \"Open Generative AI\",\n    \"copyright\": \"Copyright © 2025\",\n    \"directories\": {\n      \"output\": \"release\"\n    },\n    \"afterPack\": \"./afterPack.js\",\n    \"files\": [\n      \"dist/**/*\",\n      \"electron/**/*\"\n    ],\n    \"extraResources\": [\n      {\n        \"from\": \"build/local-ai\",\n        \"to\": \"local-ai\",\n        \"filter\": [\n          \"**/*\"\n        ]\n      }\n    ],\n    \"mac\": {\n      \"category\": \"public.app-category.graphics-design\",\n      \"icon\": \"public/banner.png\",\n      \"gatekeeperAssess\": false,\n      \"target\": [\n        {\n          \"target\": \"dmg\",\n          \"arch\": [\n            \"x64\",\n            \"arm64\"\n          ]\n        }\n      ]\n    },\n    \"win\": {\n      \"icon\": \"public/banner.png\",\n      \"signAndEditExecutable\": false,\n      \"target\": [\n        {\n          \"target\": \"nsis\",\n          \"arch\": [\n            \"x64\"\n          ]\n        }\n      ]\n    },\n    \"nsis\": {\n      \"oneClick\": false,\n      \"allowToChangeInstallationDirectory\": true,\n      \"include\": \"build/installer.nsh\"\n    },\n    \"linux\": {\n      \"icon\": \"public/banner.png\",\n      \"category\": \"Utility\",\n      \"maintainer\": \"Open Generative AI Team\",\n      \"extraFiles\": [\n        {\n          \"from\": \"build/linux/apparmor.profile\",\n          \"to\": \"resources/apparmor.profile\"\n        }\n      ],\n      \"target\": [\n        {\n          \"target\": \"AppImage\",\n          \"arch\": [\n            \"x64\"\n          ]\n        },\n        {\n          \"target\": \"deb\",\n          \"arch\": [\n            \"x64\"\n          ]\n        }\n      ]\n    }\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"next\": \"^15.0.0\",\n    \"react\": \"^19.0.0\",\n    \"react-dom\": \"^19.0.0\",\n    \"react-hot-toast\": \"^2.4.1\",\n    \"studio\": \"*\",\n    \"workflow-builder\": \"file:./packages/Vibe-Workflow/packages/workflow-builder\",\n    \"ai-agent\": \"file:./packages/Open-Poe-AI/packages/agents\"\n  },\n  \"devDependencies\": {\n    \"@eslint/eslintrc\": \"^3\",\n    \"@tailwindcss/vite\": \"^4.1.18\",\n    \"autoprefixer\": \"^10.4.24\",\n    \"electron\": \"^33.4.11\",\n    \"electron-builder\": \"^25.1.8\",\n    \"eslint\": \"^9\",\n    \"eslint-config-next\": \"^15.0.0\",\n    \"postcss\": \"^8.5.6\",\n    \"tailwindcss\": \"^3.4.0\",\n    \"vite\": \"^5.4.0\"\n  },\n  \"main\": \"electron/main.js\"\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 79
    },
    "strategic_score": 79
  },
  {
    "owner": "yikart",
    "name": "AiToEarn",
    "full_name": "yikart/AiToEarn",
    "url": "https://github.com/yikart/AiToEarn",
    "description": "Let's use AI to Earn!",
    "language": "TypeScript",
    "total_stars": 22168,
    "forks": 3344,
    "stars_this_period": 134,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "auto-publish",
        "douyin",
        "douyin-api",
        "electron-app",
        "electron-react",
        "kuaishou",
        "kwai",
        "published",
        "shipinhao",
        "tool",
        "xiaohongshu"
      ],
      "license": "MIT",
      "open_issues": 21,
      "created_at": "2025-02-24T08:03:24Z",
      "pushed_at": "2026-06-26T16:13:58Z",
      "homepage": "https://aitoearn.ai/",
      "default_branch": "main",
      "forks": 3344,
      "watchers": 448,
      "archived": false,
      "size_kb": 374154
    },
    "readme_content": "# [Aitoearn：#1 AI内容营销智能体](https://aitoearn.ai)\n\n<a href=\"https://trendshift.io/repositories/20785\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/20785\" alt=\"yikart%2FAiToEarn | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n\n[![GitHub stars](https://img.shields.io/github/stars/yikart/AiToEarn?color=fa6470)](https://github.com/yikart/AiToEarn/stargazers)\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Required Node.JS 20.18.x](https://img.shields.io/static/v1?label=node&message=20.18.x&logo=node.js&color=3f893e)](https://nodejs.org/about/releases)\n\n简体中文 | [English](README_EN.md) | [日本語](README_JA.md)\n\n**Monetize · Publish · Engage · Create —— 一站式平台。**\n\nAiToEarn 通过 **AI Agent自动化**，帮助 OPC（一人公司）、创作者、品牌与企业在全球主流平台上构建、分发并变现内容。\n\n支持渠道：\n抖音、小红书（Rednote）、快手、哔哩哔哩、视频号、TikTok、YouTube、Facebook、Instagram、Threads、Twitter（X）、Pinterest、LinkedIn\n\n## 🚀 快速使用 AiToEarn（5 种方式）\n\n| 方式 | 适合谁 | 需要部署吗 |\n|------|--------|-----------|\n| [① 打开网站直接用](#use-web) | 所有用户 | ❌ 不需要 |\n| [② 在龙虾 OpenClaw 中用](#use-in-openclaw) | 龙虾用户 | ❌ 不需要 |\n| [③ 在 Claude / Cursor 等 AI 助手中用](#use-in-claude) | AI 工具用户 | ❌ 不需要 |\n| [④ Docker 一键部署](#use-docker) | 想私有化部署的团队 | ✅ 需要服务器 |\n| [⑤ 源码开发](#use-source) | 开发者 | ✅ 需要开发环境 |\n\n> 💡 **方式 ②③④ 都需要先获取 API Key**，请先看 [如何获取 API Key](#get-api-key)。\n\n## 最新动态\n\n- **2026-06-23**: [2.5 version](https://github.com/yikart/AiToEarn/releases/tag/v2.5.0) — Relay 配置改为在配置管理界面中操作，并拆分为 Server Relay 与 AI Relay：Server Relay 用于发布平台授权，AI Relay 用于使用平台提供的 AI 模型，新增[开放平台](https://docs.aitoearn.cn/)。\n- **2026-05-21**: [2.4 version](https://github.com/yikart/AiToEarn/releases/tag/v2.4.0) — 草稿生成新增支持 HappyHorse 1.0 和 Seedance 2.0，增强视频/图文草稿批量生成、多模型选择、参考图片/视频、目标平台限制与文案提示词；带来全新界面风格，并增强 Twitter/X 探索与互动能力。\n- **2026-04-20**: OpenClaw（龙虾）新增 AiToEarn 赚钱支持，可在龙虾中直接接收并执行内容变现任务。\n- **2026-03-26**: [2.1 version](https://www.aitoearn.ai/) — 内容交易市场上线；新增 OpenClaw（龙虾）支持，可在龙虾中直接使用 AiToEarn；新增 MCP 协议支持，可在 Claude、Cursor 等任何支持 MCP 的 Agent 或大模型中使用 AiToEarn。\n- **2026-02-07**: [1.8.0 version](https://www.aitoearn.ai/)，新增线下商户推广解决方案，支持餐厅、零售店、民宿、美容美发、健身房等多种线下业态，将线下推广活动转化为可执行的线上传播任务，通过内容发布与用户参与机制，帮助门店获取更多线上曝光和到店流量。\n- **2025-12-15**: \"All In Agent\" 的开始！我们加入了能够自动内容生成和发布以及一些帮助你操作 Aitoearn 的超级 AI 智能 Agent。[v1.4.3](https://github.com/yikart/AiToEarn/releases/tag/v1.4.3)\n- **2025-11-28**: 支持应用内自动更新。在创作界面新增大量 AI 功能，例如：缩写、扩写、图片生成、视频生成、标签生成等，并支持 Nano Banana Pro。[v1.4.0](https://github.com/yikart/AiToEarn/releases/tag/v1.4.0)\n- **2025-11-12**: 首个开源且可完全使用的版本。[v1.3.2](https://github.com/yikart/AiToEarn/releases/tag/v1.3.2)\n- **2025-09-16**: 首个出海版本，新增支持 Facebook、Instagram、Threads、Twitter、YouTube、TikTok、Pinterest。[v1.0.18](https://github.com/yikart/AiToEarn/releases/tag/v1.0.18)\n- **2025-02-26**: 首个开源版本，初步实现小红书、抖音、快手、视频号视频一键发布。[v0.1.1](https://github.com/yikart/AiToEarn/releases/tag/v0.1.1)\n\n<details>\n  <summary><h2 style=\"display:inline;margin:0\">目录</h2></summary>\n\n  <br/>\n\n  1. [快速使用 AiToEarn（5 种方式）](#-快速使用-aitoearn5-种方式)\n  2. [最新动态](#最新动态)\n  3. [核心功能](#核心功能)\n  4. [如何获取 API Key](#get-api-key)\n  5. [贡献指南](#贡献指南)\n  6. [联系](#联系)\n  7. [推荐](#推荐)\n</details>\n\n## 核心功能\n\nAiToEarn 围绕内容创作者的完整变现链路，提供四大 Agent 能力：\n\n> **Monetize · Publish · Engage · Create**\n\n---\n\n### 💰 Monetize —— 内容赚钱\n\nAiToEarn 最核心的目标：**帮助每一位创作者赚钱**。\n\n创作者可以在平台出售内容以完成商家的推广任务。所有结算以结果为导向，我们提供三种结算模式：\n\n| 结算模式 | 全称 | 含义 |\n|---------|------|------|\n| **CPS** | Cost Per Sale | 按成交额结算 |\n| **CPE** | Cost Per Engagement | 按互动量结算 |\n| **CPM** | Cost Per Mille | 按播放量结算 |\n\n<img src=\"presentation/monetize-cn.png\" width=\"30%\">\n\n---\n\n### 📢 Publish —— 内容发布 Agent\n\n一键将内容分发到全球 10+ 主流平台，告别逐个平台手动发布。\n\n- **全网分发**：覆盖抖音、快手、B站、小红书、视频号、微信公众号、TikTok、YouTube、Facebook、Instagram、Threads、X（Twitter）、Pinterest、LinkedIn\n- **日历排期**：像排日程一样统一规划所有平台的内容发布时间\n\n<img src=\"presentation/publish-cn.png\" width=\"30%\"> <img src=\"presentation/channel-cn.png\" width=\"30%\">\n\n> ▶ 观看演示视频\n\n<a href=\"https://www.youtube.com/watch?v=5041jEKaiU8\">\n  <img src=\"https://img.youtube.com/vi/5041jEKaiU8/0.jpg\" alt=\"Publish 演示视频\" width=\"480\">\n</a>\n\n---\n\n### 💬 Engage —— 内容互动 Agent\n\n通过 AiToEarn 浏览器插件，在上述所有平台上实现自动化互动运营。\n\n- **自动化操作**：自动点赞、收藏、关注，批量高效运营\n- **AI 智能回复**：调用大模型为每条评论生成针对性回复，精准互动\n- **评论挖掘**：识别\"求链接\"\"怎么购买\"等高转化信号，快速响应\n- **品牌监测**：实时追踪关于你品牌的讨论，主动参与热点话题\n\n> ▶ 观看演示视频\n\n<a href=\"https://youtu.be/-QoHNrZBmp0\">\n  <img src=\"./presentation/engage-thumbnail-cn.png\" alt=\"Engage 演示视频\" width=\"480\">\n</a>\n\n---\n\n### 🎨 Create —— 内容创作 Agent\n\n我们用 Agent 的方式重构了内容制作流程。只需告诉 Agent 你的内容需求，它会自动完成从创意到成品的全部工作。\n\n**视频内容**：Agent 自动调用视频生成模型（Grok、Veo、Seedance 等）、视频翻译模块、视频剪辑模块，一站式完成视频制作。\n\n**图文内容**：支持调用 Nano Banana 等顶级图片模型，自动生成高质量图文内容。\n\n**批量生成**：支持批量下发创作任务，Agent 可并行生成多条内容，快速铺量，适合矩阵账号运营和大规模内容分发场景。\n\n> ▶ 观看演示视频\n\n<a href=\"https://youtu.be/y900LxIrZT4\">\n  <img src=\"./presentation/display-1.5.2png.png\" alt=\"Create 演示视频\" width=\"480\">\n</a>\n\n---\n\n<h2 id=\"use-web\">① 打开网站直接用</h2>\n\n最简单的方式，打开浏览器即可使用，无需任何配置：\n\n- 🇨🇳 中国用户访问：**[aitoearn.cn](https://aitoearn.cn/)**\n- 🌍 国际用户访问：**[aitoearn.ai](https://aitoearn.ai/)**\n\n---\n\n<h2 id=\"get-api-key\">🔑 如何获取 API Key（后续步骤的前置条件）</h2>\n\n> 以下的方式 ②③④ 都需要 API Key。只需获取一次，所有方式通用。\n\n**3 步获取**：\n\n1. 打开 [aitoearn.cn](https://aitoearn.cn/)（中国用户）或 [aitoearn.ai](https://aitoearn.ai/)（国际用户），注册并登录\n2. 点击左侧菜单 **设置**\n3. 在 **API Key** 中点击创建，复制生成的 Key\n\n<img src=\"presentation/app-screenshot/0.%20api-key/api-key-settings.png\" alt=\"获取 API Key\" width=\"600\">\n\n---\n\n<h2 id=\"use-in-openclaw\">② 在龙虾 OpenClaw 中使用</h2>\n\n> 前置条件：已 [获取 API Key](#get-api-key)\n\n\n**请在服务器终端输入以下命令！请在服务器终端输入以下命令！请在服务器终端输入以下命令！**\n\n**安装插件**\n\n```bash\nnpx -y @aitoearn/openclaw-plugin-cli\n```\n\n首次运行后会先让你选择环境并输入 API Key。请确保环境与 Key 匹配：\n\n- 中国版：使用 `aitoearn.cn` 获取的 API Key\n- 国际版：使用 `aitoearn.ai` 获取的 API Key\n\n环境和 Key 不匹配会导致 401。\n\n安装完成后，你就可以在 OpenClaw 中直接接收并执行 AiToEarn 的赚钱任务：\n\n<img src=\"presentation/openclaw-earn-demo.png\" alt=\"在 OpenClaw 中执行 AiToEarn 赚钱任务\" width=\"360\">\n\n---\n\n<h2 id=\"use-in-claude\">③ 在 Claude / Cursor / 其他 AI 助手中使用</h2>\n\n> 前置条件：已 [获取 API Key](#get-api-key)\n\nAiToEarn 支持所有兼容 MCP 协议的 AI 助手。以下是常见工具的配置方式：\n\n请根据 API Key 来源选择地址，环境和 Key 不匹配会导致 401：\n\n| 环境 | MCP 地址 | SSE 地址 |\n|------|---------|---------|\n| 中国版 | `https://aitoearn.cn/api/unified/mcp` | `https://aitoearn.cn/api/unified/sse` |\n| 国际版 | `https://aitoearn.ai/api/unified/mcp` | `https://aitoearn.ai/api/unified/sse` |\n\n<details open>\n<summary><b>Claude Desktop</b></summary>\n\n找到并编辑 `claude_desktop_config.json`，添加：\n\n```json\n{\n  \"mcpServers\": {\n    \"aitoearn\": {\n      \"type\": \"http\",\n      \"url\": \"https://aitoearn.ai/api/unified/mcp\",\n      \"headers\": {\n        \"x-api-key\": \"你的API-Key\"\n      }\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><b>Cursor</b></summary>\n\n在 Cursor 的 MCP 设置中添加：\n\n```\nMCP 地址：https://aitoearn.ai/api/unified/mcp\n认证 Header：x-api-key: 你的API-Key\n```\n\n</details>\n\n<details>\n<summary><b>其他 AI 助手（通用配置）</b></summary>\n\n任何支持 MCP 协议的工具，只需要两个信息：\n\n| 配置项 | 值 |\n|--------|------|\n| **MCP 地址** | `https://aitoearn.ai/api/unified/mcp` |\n| **认证 Header** | `x-api-key: 你的API-Key` |\n\n也支持 SSE 长连接方式：`https://aitoearn.ai/api/unified/sse`\n\n</details>\n\n> 💡 如果你是自部署用户，将 `aitoearn.ai` 替换为你自己的地址（如 `localhost:8080`）。\n\n---\n\n<h2 id=\"use-docker\">④ Docker 一键部署</h2>\n\n> 前置条件：已安装 [Docker](https://docs.docker.com/get-docker/)\n\n适合想把 AiToEarn 部署在自己服务器上的团队。3 条命令搞定，无需手动安装数据库：\n\n```bash\ngit clone https://github.com/yikart/AiToEarn.git\ncd AiToEarn\ndocker compose up -d\n```\n\n启动后打开 **[http://localhost:8080](http://localhost:8080)** 即可使用。\n\n#### 配置 Relay（强烈推荐）\n\n> **为什么要配 Relay？** 发布内容需要登录社交媒体账号（抖音、小红书、TikTok 等），而这些平台的 OAuth 登录需要开发者凭据。配置 Relay 后，你可以直接借用官方 aitoearn.ai 的凭据完成授权，**不需要自己去各平台申请开发者账号**。\n\n在浏览器打开部署后的界面，进入 **配置管理**，按需分别配置：\n\n- **Server → Relay 中转**：用于内容发布和社交平台 OAuth 授权。\n- **AI → Relay 中转**：用于使用平台提供的 AI 模型。\n\nOpenAI、Gemini、Anthropic 等模型服务商也可以在 **AI → 模型服务商** 中填写平台提供的 API Key 和 API 地址。\n\nAPI Key 获取方式见 [上方说明](#get-api-key)。中国版 Key 搭配 `https://aitoearn.cn/api`，国际版 Key 搭配 `https://aitoearn.ai/api`；环境和 Key 不匹配会导致 401。\n\n保存后点击 **保存并重启**，让对应服务重新加载配置。\n\n> 📖 完整部署指南（生产环境配置、AI 服务、OAuth、存储等）请参阅 [DOCKER_DEPLOYMENT_CN.md](DOCKER_DEPLOYMENT_CN.md)。\n\n---\n\n<h2 id=\"use-source\">⑤ 源码开发</h2>\n\n<details>\n<summary>🧪 手动运行后端和前端（开发模式）</summary>\n\n此模式主要用于本地开发和调试。\n您仍然可以使用 Docker 运行 MongoDB/Redis，或在配置文件中指向您自己的服务。\n\n#### 1. 启动后端服务\n\n```bash\ncd project/aitoearn-backend\npnpm install\n# 复制配置文件用于本地开发\ncp apps/aitoearn-ai/config/config.yaml apps/aitoearn-ai/config/local.config.yaml\ncp apps/aitoearn-server/config/config.yaml apps/aitoearn-server/config/local.config.yaml\npnpm nx serve aitoearn-ai\n# 在另一个终端\npnpm nx serve aitoearn-server\n```\n\n#### 2. 启动前端 `aitoearn-web`\n\n```bash\npnpm install\npnpm run dev\n```\n\n</details>\n\n<details>\n<summary>🖥️ 启动 Electron 桌面项目</summary>\n\n```bash\n# 克隆仓库\ngit clone https://github.com/yikart/AttAiToEarn.git\n\n# 进入目录\ncd AttAiToEarn\n\n# 安装依赖\nnpm install\n\n# 编译 sqlite（better-sqlite3 需要 node-gyp 和本地 Python）\nnpm run rebuild\n\n# 启动开发\nnpm run dev\n```\n\nElectron 项目为 AiToEarn 提供桌面客户端。\n\n</details>\n\n## 贡献指南\n\n请查看 [贡献指南](./CONTRIBUTING.md) 开始参与。\n\n## 联系\n\n如果你在使用过程中遇到困难、使用问题或异常情况，优先通过 [GitHub Issues](https://github.com/yikart/AiToEarn/issues) 提交反馈，方便我们统一跟进和处理。\n\n- Telegram: [https://t.me/harryyyy2025](https://t.me/harryyyy2025)\n- 微信：扫码添加\n\n<img src=\"presentation/wechat.jpg\" alt=\"微信二维码\" width=\"200\">\n\n## 推荐\n- [AtomGit托管](https://atomgit.com/yikart/AitoEarn)\n- [MuseTalk](https://github.com/TMElyralab/MuseTalk)\n- [video_spider](https://github.com/5ime/video_spider)\n- [CosyVoice](https://github.com/FunAudioLLM/CosyVoice?tab=readme-ov-file)\n- [facefusion](https://github.com/facefusion/facefusion)\n- [NarratoAI](https://github.com/linyqh/NarratoAI)\n- [MoneyPrinterTurbo](https://github.com/harry0703/MoneyPrinterTurbo)\n",
    "strategic_keywords": [
      "agent",
      "mcp"
    ],
    "relationship_label": "同类项目 / 替代风险",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 16,
      "novelty": 11,
      "productize": 14,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 6,
      "total": 78
    },
    "strategic_score": 78
  },
  {
    "owner": "sveltejs",
    "name": "svelte",
    "full_name": "sveltejs/svelte",
    "url": "https://github.com/sveltejs/svelte",
    "description": "web development for the rest of us",
    "language": "JavaScript",
    "total_stars": 87581,
    "forks": 4961,
    "stars_this_period": 129,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "compiler",
        "template",
        "ui"
      ],
      "license": "MIT",
      "open_issues": 1057,
      "created_at": "2016-11-20T18:13:05Z",
      "pushed_at": "2026-06-29T07:01:44Z",
      "homepage": "https://svelte.dev",
      "default_branch": "main",
      "forks": 4961,
      "watchers": 940,
      "archived": false,
      "size_kb": 121278
    },
    "readme_content": "<a href=\"https://svelte.dev\">\n\t<picture>\n\t\t<source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/banner_dark.png\">\n\t\t<img src=\"assets/banner.png\" alt=\"Svelte - web development for the rest of us\" />\n\t</picture>\n</a>\n\n[![License](https://img.shields.io/npm/l/svelte.svg)](LICENSE.md) [![Chat](https://img.shields.io/discord/457912077277855764?label=chat&logo=discord)](https://svelte.dev/chat)\n\n## What is Svelte?\n\nSvelte is a new way to build web applications. It's a compiler that takes your declarative components and converts them into efficient JavaScript that surgically updates the DOM.\n\nLearn more at the [Svelte website](https://svelte.dev), or stop by the [Discord chatroom](https://svelte.dev/chat).\n\n## Supporting Svelte\n\nSvelte is an MIT-licensed open source project with its ongoing development made possible entirely by fantastic volunteers. If you'd like to support their efforts, please consider:\n\n- [Becoming a backer on Open Collective](https://opencollective.com/svelte).\n\nFunds donated via Open Collective will be used for compensating expenses related to Svelte's development such as hosting costs. If sufficient donations are received, funds may also be used to support Svelte's development more directly.\n\n## Roadmap\n\nYou may view [our roadmap](https://svelte.dev/roadmap) if you'd like to see what we're currently working on.\n\n## Contributing\n\nPlease see the [Contributing Guide](CONTRIBUTING.md) and the [`svelte`](packages/svelte) package for information on contributing to Svelte.\n\n## Is svelte.dev down?\n\nProbably not, but it's possible. If you can't seem to access any `.dev` sites, check out [this SuperUser question and answer](https://superuser.com/q/1413402).\n\n## License\n\n[MIT](LICENSE.md)\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"svelte-monorepo\",\n  \"version\": \"0.0.1\",\n  \"description\": \"monorepo for svelte and friends\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"license\": \"MIT\",\n  \"packageManager\": \"pnpm@10.4.0\",\n  \"engines\": {\n    \"pnpm\": \">=9.0.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/sveltejs/svelte.git\"\n  },\n  \"scripts\": {\n    \"build\": \"pnpm -r --filter=./packages/* build\",\n    \"check\": \"cd packages/svelte && pnpm build && cd ../../ && pnpm -r check\",\n    \"lint\": \"eslint && prettier --check .\",\n    \"format\": \"prettier --write .\",\n    \"test\": \"vitest run\",\n    \"changeset:version\": \"changeset version && pnpm -r generate:version && git add --all\",\n    \"changeset:publish\": \"changeset publish\",\n    \"bench\": \"NODE_ENV=production node --allow-natives-syntax ./benchmarking/run.js\",\n    \"bench:compare\": \"NODE_ENV=production node --allow-natives-syntax ./benchmarking/compare/index.js\",\n    \"bench:debug\": \"NODE_ENV=production node --allow-natives-syntax --inspect-brk ./benchmarking/run.js\"\n  },\n  \"devDependencies\": {\n    \"@changesets/cli\": \"^2.29.8\",\n    \"@eslint/js\": \"^10.0.0\",\n    \"@sveltejs/eslint-config\": \"^9.0.0\",\n    \"@svitejs/changesets-changelog-github-compact\": \"^1.1.0\",\n    \"@types/node\": \"^20.11.5\",\n    \"@types/picomatch\": \"^4.0.2\",\n    \"@vitest/coverage-v8\": \"^4.1.7\",\n    \"eslint\": \"^10.0.0\",\n    \"eslint-plugin-lube\": \"^0.5.1\",\n    \"eslint-plugin-svelte\": \"^3.15.0\",\n    \"jsdom\": \"25.0.1\",\n    \"playwright\": \"^1.60.0\",\n    \"prettier\": \"^3.2.4\",\n    \"prettier-plugin-svelte\": \"^3.4.0\",\n    \"svelte\": \"workspace:^\",\n    \"typescript\": \"^5.5.4\",\n    \"typescript-eslint\": \"^8.56.0\",\n    \"v8-natives\": \"^1.2.5\",\n    \"vitest\": \"^4.1.7\"\n  }\n}\n",
    "strategic_keywords": [],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 0,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 6,
      "risk_signal": 6,
      "total": 59
    },
    "strategic_score": 59
  },
  {
    "owner": "worldwonderer",
    "name": "oh-story-claudecode",
    "full_name": "worldwonderer/oh-story-claudecode",
    "url": "https://github.com/worldwonderer/oh-story-claudecode",
    "description": "网文/小说写作 skill 包，覆盖长篇与短篇网络小说的扫榜、拆文、写作、去AI味、封面图全流程",
    "language": "JavaScript",
    "total_stars": 3361,
    "forks": 548,
    "stars_this_period": 119,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "ai-agent",
        "ai-writing",
        "chinese-novel",
        "claude-code",
        "claude-skills",
        "creative-writing",
        "novel-writing",
        "openclaw",
        "skill",
        "web-novel",
        "writing-assistant"
      ],
      "license": "MIT",
      "open_issues": 6,
      "created_at": "2026-04-22T16:35:39Z",
      "pushed_at": "2026-06-29T02:18:11Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 548,
      "watchers": 12,
      "archived": false,
      "size_kb": 6998
    },
    "readme_content": "[English](README_EN.md) | **中文**\n\n# oh-story-claudecode\n\n网文写作 skill 包，覆盖长篇与短篇网络小说的扫榜、拆文、写作、去AI味、封面图全流程。适配 Claude Code、OpenCode、OpenClaw、Codex CLI、workbuddy。\n\n## 核心思路\n\n> **套路 = 确定性的情绪满足**\n\n专业作者的方法论三步走：\n\n1. **扫榜**：分析热门榜单，洞察题材、人设、切入点。\n2. **拆文**：拆解大纲节奏与剧情素材，建立个人模块库。\n3. **商业化写作**：学习并运用钩子、爽感、期待感等核心技巧。\n\n围绕四条线展开：爆款逆向 · 剧情模块化重组 · 上下文状态分层管理 · 人机协同。\n\n> v0.6.21 起：短篇写作参考栈瘦身——`story-short-write` 删除长篇继承残留 references，改由 `short-format` / `short-craft` / `short-deslop` + 四个题材包（追妻火葬场、复仇打脸、总裁豪门、宅斗宫斗）承接短篇格式、情绪直给、节奏密度和去 AI 味；已部署项目建议重新运行 `/story-setup` 并新开会话，获取新版 narrative-writer 短篇例外。\n>\n> v0.6.20 起：长篇大纲补强——对标节奏迁移（把爆款拆解的剧情节奏按关键点回流进卷纲，缺节奏文件走章节摘要降级）+ 章节定位与张弛（破「每章像短篇」：按章在一级结构里的位置分高压/推进/关系/低压等定位，低压/关系/过场章不再被迫塞钩子爽点、但保留追读拉力，并加「禁情绪母题扎堆」底线；定位可留空、非硬配额）。\n>\n> v0.6.19 起：新增 Codex CLI 适配（`.agents/skills` repo 发现、`$story-setup` 部署 `.codex/agents/*.toml` 与 `.codex/hooks.json`）与 OpenClaw 兼容；自定义文风 `设定/文风.md` 优先于对标；正文落盘后确定性兜底（截断/复读/工程词/碎句号检测）；OpenCode 子代理按成本自动配模型降本；细纲按字数预算根治正文欠字反复回炉。\n>\n> v0.6.18 起，全面支持 OpenCode CLI（自动发现 agent、命令与 hook 适配），并内置版本更新提醒；续写新增逐章对话声线与文风漂移自检，封面按平台尺寸（如番茄 600×800）居中裁剪兜底。\n\n## 流程总览\n\n```mermaid\nflowchart LR\n    classDef entry fill:#f0f0f0,color:#333,stroke:#999,stroke-width:1px\n    classDef phase fill:#e8f4fd,color:#1a1a2e,stroke:#4a9be8,stroke-width:1px\n    classDef final fill:#fce4ec,color:#333,stroke:#e57373,stroke-width:1px\n\n    entry_l{{\"长篇作者\"}}:::entry\n    entry_s{{\"短篇作者\"}}:::entry\n    entry_r{{\"已有方向\"}}:::entry\n    entry_i{{\"已有小说\"}}:::entry\n\n    subgraph S0 [\"  环境部署\"]\n        setup[\"/story-setup\"]:::phase\n    end\n\n    subgraph S1 [\"  扫榜选材\"]\n        direction TB\n        scan_l[\"长篇扫榜\"]:::phase\n        scan_s[\"短篇扫榜\"]:::phase\n    end\n\n    subgraph S2 [\"  拆文学习\"]\n        direction TB\n        analyze_l[\"长篇拆文\"]:::phase\n        analyze_s[\"短篇拆文\"]:::phase\n    end\n\n    subgraph S3 [\"  落笔创作\"]\n        direction TB\n        write_l[\"长篇写作\"]:::phase\n        write_s[\"短篇写作\"]:::phase\n    end\n\n    subgraph S4 [\"  精修定稿\"]\n        deslop[\"去 AI 味\"]:::final\n    end\n\n    entry_l --> setup\n    entry_s --> setup\n    setup --> scan_l\n    setup --> scan_s\n    scan_l --> analyze_l\n    scan_s --> analyze_s\n    analyze_l --> write_l\n    analyze_s --> write_s\n    entry_r -.->|跳过准备| write_l\n    entry_r -.->|跳过准备| write_s\n    entry_i -.->|导入已有小说| setup\n    setup -.->|逆向导入| write_l\n    write_l --> deslop\n    write_s --> deslop\n```\n\n## 安装\n\n**方式一** 直接告诉 Claude Code / OpenCode / OpenClaw / Codex：\n\n```\n安装这个 skill https://github.com/worldwonderer/oh-story-claudecode\n```\n\n**方式二** 命令行：\n\n```bash\nnpx skills add worldwonderer/oh-story-claudecode -y -g\n```\n\n`-g` 全局安装，所有目录可用；去掉 `-g` 则只装到当前目录。更新时重新执行同一条命令即可。\n\n\n> **Codex 用户：** repo 内直接使用：Codex 会扫描 `$REPO_ROOT/.agents/skills`（指向 `skills/` 的 symlink）发现 13 个 skill；用 `$story`、`$story-setup` 或 `/skills` 调用。Windows 上 git 需开 `core.symlinks=true`，否则 symlink 失效，改走下方 `$story-setup` 部署。\n> 跑 `$story-setup` 部署到写作项目后，会写入 `.codex/agents/*.toml`、`.codex/hooks.json`、`.codex/hooks/story_codex_hook.py` 和 `.codex/skills/story-setup/references/agent-references/`；请信任项目 `.codex/` 配置层并在 `/hooks` review/trust hooks、新开 Codex 会话，让 custom agents 生效。\n>\n> **OpenCode 用户：** 全局安装后 opencode 自动从 `~/.claude/skills/` 发现 skills；首次用自然语言触发 story-setup（如「用 story-setup 部署网文写作环境」），**部署后退出重进 `opencode -c`** 才能用 slash command。部分 hook 行为与 Claude Code 有差异（session-start / session-end / compact 等），详见 [CONTRIBUTING.md](CONTRIBUTING.md) 的 OpenCode 章节。\n>\n> **OpenClaw 用户：** 当前支持 skills-only：OpenClaw 可从 workspace `skills/`、`.agents/skills`、`~/.agents/skills`、`~/.openclaw/skills` 等 skill root 发现本项目 13 个 skill；`SKILL.md` 已按 OpenClaw 要求使用单行 `name` / `description` 与单行 JSON `metadata.openclaw`。`story-setup` 选择 `target_cli=openclaw` 时会把 skills 复制到项目 `skills/` 并写入 OpenClaw 版 `AGENTS.md`；agents/hooks 暂不部署，写正文前大纲守卫在 OpenClaw 下是 skill 内软约束。部署后如未显示新 skills，请新开 OpenClaw session 或等待 watcher 刷新。\n>\n> 升级后如果项目里已经跑过 `/story-setup`，建议在项目根重跑一次 `/story-setup`，同步 hooks / agents / references。每版变更见 [CHANGELOG.md](CHANGELOG.md) 与 [Releases](https://github.com/worldwonderer/oh-story-claudecode/releases)。\n\n> **多 agent 协作要先部署再新开会话**：7 个专业 agent（story-architect、narrative-writer、consistency-checker 等）由 `/story-setup` 写入项目 `.claude/agents/`，或由 `$story-setup` 写入 `.codex/agents/*.toml`。Claude Code / Codex 都在会话启动时更稳定地注册 custom agent，所以 **setup 跑完必须 trust 项目配置并新开对应 CLI 会话**，story-review 的多视角对抗审查、写作流程里的 agent 协作才会生效；否则 skill 会拿到「subagent_type 不可用 / Codex unknown agent_type」并降级 solo（单视角）。OpenClaw Phase 1 不部署 agents，默认走 skills + solo fallback。判断是否生效：新会话里跑 `/story-review`，报告头是 `Effective Mode: full/lean` 即注册成功，是 `Fallback: ... -> solo` 说明还在旧会话或当前运行时未暴露该 agent。\n\n## Skills\n\n| Skill | 触发 | 说明 |\n|:------|:-----|:-----|\n| `story-setup` | `/story-setup` `$story-setup` `/准备写书` | 环境部署 · hooks/rules/agents/CLAUDE.md/AGENTS.md 一键部署（已有配置安全合并，支持 Claude Code / OpenCode / Codex / OpenClaw skills-only） |\n| `story` | `/story` `$story` `/网文` | 工具箱路由 · 模糊意图自动分发到对应 skill |\n| `story-long-write` | `/story-long-write` `/写长篇` | 长篇写作 · 大纲搭建、人物设定、正文输出 |\n| `story-long-analyze` | `/story-long-analyze` | 长篇拆文 · 黄金三章、爽点设计、节奏分析 |\n| `story-long-scan` | `/story-long-scan` | 长篇扫榜 · 起点/番茄/晋江市场趋势 |\n| `story-short-write` | `/story-short-write` | 短篇写作 · 情绪设计、反转构思、精修出稿 |\n| `story-short-analyze` | `/story-short-analyze` | 短篇拆文 · 故事核、结构分析、情感线、反转设计、写作手法、共鸣分析 |\n| `story-short-scan` | `/story-short-scan` | 短篇扫榜 · 知乎盐言/番茄短篇风口数据 |\n| `story-deslop` | `/story-deslop` `/去AI味` | 去AI味 · 检测并清除 AI 写作痕迹 |\n| `story-import` | `/story-import` `/导入小说` | 逆向导入 · 将已有小说反向解析为标准项目结构 |\n| `story-review` | `/story-review` `/审查` | 多视角审查 · 4 Agent 多视角审稿 + 番茄/起点/知乎评分标准 |\n| `story-cover` | `/story-cover` `/封面` | 封面生成 · 书名题材分析 + GPT-Image-2 出图 |\n| `browser-cdp` | `/browser-cdp` | 浏览器操控 · CDP 协议复用登录态抓取数据 |\n\n自然语言同样触发：\n- 「帮我开书」→ `story-long-write`\n- 「这篇太 AI 了」→ `story-deslop`\n- 「把我的书导进来」→ `story-import`\n- 「沈栀现在什么状态」→ 自动 spawn `story-explorer` agent\n\n<details>\n<summary>封面生成示例</summary>\n\n![封面示例 — 剑道独尊](demo/封面-剑道独尊.png)\n\n</details>\n\n<details>\n<summary>拆文 demo — 盘龙</summary>\n\n使用 `/story-long-analyze` 深度模式分析《盘龙》前23章的完整输出：\n\n```\ndemo/拆文库-盘龙/\n├── 概要.md              # 全书概要 + 章节索引\n├── 拆文报告.md           # 五维评分 + 爽点密度 + 可借鉴套路\n├── 文风.md              # 句长/标点/对话潜台词/情绪节奏 + 原文锚点\n├── 章节/\n│   ├── 第1章_深度拆解.md  # 黄金三章深度分析\n│   └── 第1-23章_摘要.md   # 每章摘要 + 情节点 + 角色提及\n├── 角色/\n│   ├── 林雷.md           # 主角完整档案\n│   ├── 霍格.md           # 核心配角\n│   ├── 希尔曼.md         # 核心配角\n│   ├── 德林柯沃特.md      # 核心配角\n│   ├── 沃顿.md           # 功能角色\n│   └── 角色关系.md        # 关系网络\n├── 剧情/\n│   ├── 故事线.md          # 框架识别 + 4剧情 + 2故事线\n│   ├── 节奏.md            # 节奏/关键信息递进/情绪触发爆发节律\n│   └── 情绪模块.md        # 读者需求/情绪引擎/可复用写作模块\n└── 设定/\n    ├── 世界观/\n    │   ├── 背景设定.md    # 核心规则 + 特殊设定\n    │   ├── 力量体系.md    # 战气 + 魔法 + 等级\n    │   ├── 地理.md        # 安达卢西亚 + 玉兰大陆\n    │   └── 金手指.md      # 盘龙戒指 + 德林柯沃特\n    └── 势力/\n        └── 巴鲁克家族.md  # 龙血血脉家族档案\n```\n\n长篇拆文会额外生成 `文风.md`，并在 `剧情/` 下产出 `节奏.md`（节奏/关键信息递进/情绪触发爆发节律）和 `情绪模块.md`（读者需求/情绪引擎/可复用写作模块）；日更写作会通过 `对标/{书名}/剧情/` 读取这些素材，避免文风、节奏和情绪模块偏离对标书。\n\n</details>\n\n<details>\n<summary>拆文 demo — 曾将爱意私藏（短篇）</summary>\n\n使用 `/story-short-analyze` 拆解短篇《曾将爱意私藏》（约 8500 字，追妻火葬场 · 死遁）的完整输出：\n\n```\ndemo/拆文库-曾将爱意私藏/\n├── 原文/原文.txt        # 原文备份\n├── 拆文报告.md          # 故事核 + 五维评分 + 爆点6维 + 认知反转 + 共鸣9层\n├── 情节节点.md          # 54 个情节节点（原文引用 + 情绪标记 −9~+9）\n├── 写作手法.md          # POV / 对话 / 信息差 / 物件钩子 等 11 项\n└── _meta.json           # 结构计数 structure_counts（Phase 7 门控依据）\n```\n\n短篇拆文产出 `拆文报告 / 情节节点 / 写作手法`，下游 `/story-short-write` 据此写同题材新短篇。\n\n</details>\n\n<details>\n<summary>导入 demo — 让你管账号，你高燃混剪炸全网（长篇续写工程）</summary>\n\n使用 `/story-import` 把作者已发布的前 20 章（约 3.7 万字）逆向重建为可续写的写作工程，接 `/story-long-write` 日更续写第 21 章：\n\n```\ndemo/让你管账号，你高燃混剪炸全网/\n├── 正文/        第001–020章（已发布原文）\n├── 大纲/        大纲.md · 卷纲_第1卷.md · 细纲_第001–020章.md（1 章 1 文件）\n├── 设定/        角色/{江晨·钟嘉嘉·周薄森·张耀祖·吴伟·李林}\n│                世界观/{背景设定·金手指} · 关系.md · 题材定位.md · 文风.md\n├── 追踪/        伏笔.md · 时间线.md · 角色状态.md · 上下文.md\n└── 参考资料/    作品信息.md\n```\n\n逐章提取（事件 / 角色 / 设定 / 伏笔 / 时间线）反推为续写 bible，作者从第 21 章无缝接着写。\n\n</details>\n\n## Agent 体系\n\n写作 skill 内部通过 7 个专业 Agent 协作，各司其职：\n\n| Agent | 模型 | 职责 |\n|:------|:-----|:-----|\n| **story-architect** | Opus | 故事架构 · 题材定位、大纲结构、钩子/反转设计、情绪弧线 |\n| **character-designer** | Sonnet | 角色设计 · 角色档案、语言风格、动机链、对话创作 |\n| **narrative-writer** | Sonnet | 叙事写手 · 正文写作、去AI味、格式合规 |\n| **consistency-checker** | Haiku | 一致性检查 · 事实冲突扫描、伏笔追踪、S1-S4 分级报告 |\n| **story-researcher** | Sonnet | 资料研究 · CDP 搜索+正文提取、多源交叉验证、结构化参考文件输出 |\n| **story-explorer** | Haiku | 故事查询 · 角色/伏笔/设定/进度只读查询，日更上下文快速加载 |\n| **chapter-extractor** | Haiku | 章节提取 · 摘要+情节点+角色提及，并行拆文核心单元 |\n\nAgent 按需加载 `references/` 中的写作理论（角色设计、对话技法、反转工具箱等 100+ 份方法论文件），不预占上下文。\n\n## 自动化 Hooks\n\n`/story-setup` 部署后自动生效的 7 个 hook：\n\n| Hook | 触发时机 | 功能 |\n|:-----|:---------|:-----|\n| session-start.sh | 会话开始 | 显示分支、进度快照、拆文状态 |\n| session-end.sh | 会话结束 | 记录会话日志到 `追踪/session-log.txt` |\n| detect-story-gaps.sh | 会话开始 | 检测设定缺口、大纲缺失、伏笔断线 |\n| pre-compact.sh | 上下文压缩前 | 保存进度快照路径和行数摘要 |\n| post-compact.sh | 上下文压缩后 | 提示读取进度快照恢复上下文 |\n| validate-story-commit.sh | git commit 时 | 检查硬编码属性、设定必填字段（仅警告，不阻断） |\n| guard-outline-before-prose.sh | 写正文前（Write/Edit） | 缺对应细纲/小节大纲时阻止首次创建正文（阻断），强制先搭大纲 |\n\n## 项目文件结构\n\n一部长篇动辄几十万字、几百章。设定冲突、伏笔断线、时间线对不上——写到最后全靠记忆硬撑，迟早翻车。\n\n用文件系统把设定、大纲、正文、追踪拆开，每个维度独立维护。对话只负责创作，不负责记忆。\n\n**长篇：**\n\n```\n{书名}/\n├── 设定/\n│   ├── 世界观/          # 背景、力量体系等，按主题拆文件\n│   ├── 角色/            # 每个人物一个文件（沈栀.md、陆衍止.md）\n│   ├── 势力/            # 每个势力/组织一个文件（天机阁.md）\n│   ├── 关系.md          # 角色关系映射\n│   └── 题材定位.md      # 题材核心梗+对标分析\n├── 大纲/\n│   ├── 大纲.md          # 全书卷级结构\n│   ├── 卷纲_第一卷.md   # 每卷一个：爽点节奏+情绪弧线+人物弧线+伏笔+反转\n│   ├── 细纲_第001章.md  # 每章一个：内容概括+多线情节+人物关系/出场顺序+钩子\n│   └── ...\n├── 正文/\n│   ├── 第001章_章名.md\n│   └── ...\n├── 对标/                # 对标参考（结构化子目录从拆文库同步）\n│   └── {对标书名}/\n│       ├── 原文/            # 对标书原文章节\n│       ├── 角色/            # 结构化角色卡（从 analyze 输出同步）\n│       ├── 剧情/            # 结构化剧情线/节奏/情绪模块（从 analyze 输出同步）\n│       ├── 设定/            # 结构化设定（从 analyze 输出同步）\n│       ├── 文风.md          # 日更前读取，用来贴近对标书文风\n│       └── 拆文报告.md      # analyze skill 输出的拆文报告\n├── 追踪/                # 连续性管理（分层追踪）\n│   ├── 上下文.md        # 写作上下文（compact 恢复用）\n│   ├── 伏笔.md          # 伏笔埋设/回收状态表（跨卷级）\n│   ├── 时间线.md        # 故事内时间线（全书级）\n│   └── 角色状态.md      # 角色当前状态快照（章节级）\n├── 参考资料/            # story-researcher 输出的研究资料\n│   └── {topic}.md       # 按研究主题拆分\n```\n\n**短篇：**\n\n```\n短篇/{标题}/\n├── 正文.md              # 完成稿\n├── 小节大纲.md          # 8 节结构 + 情绪曲线\n└── 拆文库/              # 如有参考小说（analyze 输出）\n    └── {书名}/\n        ├── 拆文报告.md\n        ├── 情节节点.md\n        └── 写作手法.md\n```\n\n**拆文库：** 拆文 skill 默认输出到项目根目录 `拆文库/{书名}/`，产出结构化目录（角色/剧情/设定/章节），其中长篇剧情目录包含 `节奏.md` 和 `情绪模块.md`，是 analyze 的源数据（source of truth）。写作 skill 通过 `对标/{书名}/剧情/` 等子目录消费这些资产（项目级引用视图），或自动回退读取 `拆文库/`。\n\n**`.active-book`：** 项目根目录的文本文件，内容是当前活跃书目的**相对路径**（如 `长篇/我的小说`），hook 和写作 skill 据此定位当前项目。\n\n## 知识体系\n\n各 skill 自带 `references/` 知识库，按需加载，不占上下文。\n\n<details>\n<summary>展开各 skill 知识库主题清单</summary>\n\n| 主题 | 内容 | 所在 skill |\n|:-----|:-----|:-----------|\n| 大纲排布 | 五步大纲法 · 故事结构分级 · 节点设计法 · 升级感设计 | long-write |\n| 开头设计 | 开篇模式 · 前 500 字设计 · 黄金三章开头策略 | long-write / short-write |\n| 人物设计 | 角色设定 · 人物提取 · 关系映射 · 动机链 · 群像 | long-write / short-write / short-analyze |\n| 钩子技法 | 章尾钩子 13 式 · 章首钩子 7 式 · 段落级钩子 · 悬念编排 | long-write / short-write / short-analyze |\n| 情绪设计 | 6 种弧形模板 · 期待感管理 · 题材赛道策略 | long-write / short-write |\n| 题材框架 | 长篇八节点 · 短篇压缩三幕 · 8 大题材开头模板 | long-write / short-write / short-analyze |\n| 对话技法 | 节奏 · 潜台词 · 信息控制 · 对话模式数据库 | long-write / short-write |\n| 反转工具箱 | 类型 · 时机 · 误导底层路径 | long-write / short-write |\n| 风格模块 | 对话 · 打斗 · 智斗 · 镜头式写作 · 装逼打脸 · 白描 | long-write |\n| 高级技法 | 小纲四步法 · 高潮逆推 · 双线结构 · AB 交织法 | long-write |\n| 去AI味 | 预防 · 三遍去AI法 · 改写范例库 · 禁用词表 | deslop / long-write / short-write |\n| 质量检查 | 通用 · 长篇专项 · 短篇专项 · 毒点排查 | long-write / short-write / short-analyze |\n| 写作公式 | 21 大题材写作公式 · 三翻四震 · 感情线四阶段 | short-write / short-analyze |\n| 女频写作 | 女读者偏好 · 情感描写 · 感情线模式 · 对标拆书 | short-write |\n| 拆文方法 | 黄金三章 · 情绪曲线 · 结构拆解 · 知乎风格分析 | long-analyze / short-analyze |\n| 短篇方法论 | 故事核 · 情节节点 · 爆点分析 · 写作手法 · 节奏分析 · 共鸣分析 · 人物分类 · 平台适配 | short-analyze |\n| 拆文实例 | 完整案例拆解 · 模板化输出 | short-analyze |\n| 读者画像 | 9 维画像 · 目标读者分析 | long-scan |\n| 市场数据 | 题材趋势 · 平台特性 · 采集格式 · 投稿指南 | lon",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workspace"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 76
    },
    "strategic_score": 76
  },
  {
    "owner": "craft-ai-agents",
    "name": "craft-agents-oss",
    "full_name": "craft-ai-agents/craft-agents-oss",
    "url": "https://github.com/craft-ai-agents/craft-agents-oss",
    "description": "",
    "language": "TypeScript",
    "total_stars": 6573,
    "forks": 903,
    "stars_this_period": 118,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [],
      "license": "Apache-2.0",
      "open_issues": 442,
      "created_at": "2026-01-19T10:35:59Z",
      "pushed_at": "2026-06-24T07:56:57Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 903,
      "watchers": 25,
      "archived": false,
      "size_kb": 95838
    },
    "readme_content": "<div align=\"center\">\n  <a href=\"https://trendshift.io/repositories/20714\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/20714\" alt=\"craft-ai-agents%2Fcraft-agents-oss | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n</div>\n\n# Craft Agents\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md)\n\n## How it Works (Video)\nTo understand what Craft Agents does and how it works watch this video.\n\n[![Demo Video](https://img.youtube.com/vi/xQouiAIilvU/hqdefault.jpg)](https://www.youtube.com/watch?v=xQouiAIilvU)\n\n[Click Here (or on the image above) to watch the video on YouTube →](https://www.youtube.com/watch?v=xQouiAIilvU)\n\n\n## Why Craft Agents was built\nCraft Agents is a tool we built so that we (at craft.do) can work effectively with agents. It enables intuitive multitasking, no-fluff connection to any API or Service, sharing sessions, and a more document (vs code) centric workflow - in a beautiful and fluid UI.\n\nIt uses the Claude Agent SDK and the Pi SDK side by side—building on what we found great and improving areas where we've desired improvements.\n\nIt's built with Agent Native software principles in mind, and is highly customisable out of the box. One of the first of its kind.\n\nCraft Agents is open source under the Apache 2.0 license - so you are free to remix, change anything. And that's actually possible. We ourselves are building Craft Agents with Craft Agents only - no code editors - so really, any customisation is just a prompt away.\n\nWe built Craft Agents because we wanted a better, more opinionated (and preferably non-CLI way) of working with the most powerful agents in the world. We'll continue to improve it, based on our experiences and intuition.\n\n<img width=\"1578\" height=\"894\" alt=\"image\" src=\"https://github.com/user-attachments/assets/3f1f2fe8-7cf6-4487-99ff-76f6c8c0a3fb\" />\n\n## Things that are hard to believe \"just work\"\n\n**How do I connect to Linear, Gmail, Slack...?**\nTell the agent \"add Linear as a source.\" It finds public APIs and MCP servers, reads their docs, sets up credentials, and configures everything. No config files, no setup wizards.\n\n[Check out how I just connected to Slack →](https://agents.craft.do/s/DRNQEiy8w2e1v5LPgKl8b)\n\n**I already have my MCP config JSON.**\nPaste it. The agent handles the rest.\n\n**What about local MCPs?**\nFully supported. Stdio-based MCP servers run as local subprocesses on your machine. Point it at an npx command, a Python script, or any local binary. It just works.\n\n**Can it handle custom APIs?**\nYes. Paste an OpenAPI spec, some endpoint URLs, screenshots of docs, whatever you have. It figures it out and guides you through the rest.\n\n**APIs too? Not just MCPs?**\nCraft Agents connects to anything. We have it hooked up to a direct Postgres DB behind a jumpbox. Skills + Sources = magic.\n\n**How do I import my Claude Code skills and MCPs?**\nTell the agent you want to import your skills from Claude Code. It handles the migration.\n\n[Here I imported all my skills in one go →](https://agents.craft.do/s/gWCFqwhObFWaNJIEJmd6j)\n\n**How do I create a new skill?**\nDescribe what the skill should do, give it context. The agent takes care of the rest.\n\n**Do I need to restart after changes?**\nNo. Everything is instant. Mention new skills or sources with `@`, even mid-conversation.\n\n**So I can just ask it anything?**\nYes. That's the core idea behind agent-native software. You describe what you want, and it figures out how. That's a good use of tokens.\n\n\n## Installation\n\n### One-Line Install (Recommended)\n\n**macOS / Linux:**\n```bash\ncurl -fsSL https://agents.craft.do/install-app.sh | bash\n```\n\n**Windows (PowerShell):**\n```powershell\nirm https://agents.craft.do/install-app.ps1 | iex\n```\n\n### Build from Source\n\n```bash\ngit clone https://github.com/lukilabs/craft-agents-oss.git\ncd craft-agents-oss\nbun install\nbun run electron:start\n```\n\n## Features\n\n- **Multi-Session Inbox**: Desktop app with session management, status workflow, and flagging\n- **Claude Code Experience**: Streaming responses, tool visualization, real-time updates\n- **Multiple LLM Connections**: Add multiple AI providers and set per-workspace defaults\n- **Multi-Provider Support**: Run sessions with Google AI Studio, ChatGPT Plus, GitHub Copilot, or OpenAI API keys alongside Anthropic\n- **Craft MCP Integration**: Access to 32+ Craft document tools (blocks, collections, search, tasks)\n- **Sources**: Connect to MCP servers, REST APIs (Google, Slack, Microsoft), and local filesystems\n- **Permission Modes**: Three-level system (Explore, Ask to Edit, Auto) with customizable rules\n- **Background Tasks**: Run long-running operations with progress tracking\n- **Dynamic Status System**: Customizable session workflow states (Todo, In Progress, Done, etc.)\n- **Theme System**: Cascading themes at app and workspace levels\n- **Multi-File Diff**: VS Code-style window for viewing all file changes in a turn\n- **Skills**: Specialized agent instructions stored per-workspace\n- **File Attachments**: Drag-drop images, PDFs, Office documents with auto-conversion\n- **Automations**: Event-driven automation — create agent sessions on label changes, schedules, tool use, and more\n\n## Quick Start\n\n1. **Launch the app** after installation\n2. **Choose API Connection**: Use Anthropic (API key or Claude Max), Google AI Studio, ChatGPT Plus (Codex OAuth), or GitHub Copilot OAuth\n3. **Create a workspace**: Set up a workspace to organize your sessions\n4. **Connect sources** (optional): Add MCP servers, REST APIs, or local filesystems\n5. **Start chatting**: Create sessions and interact with Claude\n\n## Desktop App Features\n\n### Session Management\n\n- **Inbox/Archive**: Sessions organized by workflow status\n- **Flagging**: Mark important sessions for quick access\n- **Status Workflow**: Todo → In Progress → Needs Review → Done\n- **Session Naming**: AI-generated titles or manual naming\n- **Session Persistence**: Full conversation history saved to disk\n\n### Sources\n\nConnect external data sources to your workspace:\n\n| Type | Examples |\n|------|----------|\n| **MCP Servers** | Craft, Linear, GitHub, Notion, custom servers |\n| **REST APIs** | Google (Gmail, Calendar, Drive, YouTube, Search Console), Slack, Microsoft |\n| **Local Files** | Filesystem, Obsidian vaults, Git repos |\n\n### Permission Modes\n\n| Mode | Display | Behavior |\n|------|---------|----------|\n| `safe` | Explore | Read-only, blocks all write operations |\n| `ask` | Ask to Edit | Prompts for approval (default) |\n| `allow-all` | Auto | Auto-approves all commands |\n\nUse **SHIFT+TAB** to cycle through modes in the chat interface.\n\n### Keyboard Shortcuts\n\n| Shortcut | Action |\n|----------|--------|\n| `Cmd+N` | New chat |\n| `Cmd+1/2/3` | Focus sidebar/list/chat |\n| `Cmd+/` | Keyboard shortcuts dialog |\n| `SHIFT+TAB` | Cycle permission modes |\n| `Enter` | Send message |\n| `Shift+Enter` | New line |\n\n## Remote Server (Headless)\n\nCraft Agents can run as a headless server on a remote machine (e.g., a Linux VPS), with the desktop app connecting as a thin client. This lets you keep long-running sessions alive, access them from multiple machines, and run compute-heavy tasks on a powerful server.\n\n### Quick Start\n\nFrom the monorepo root:\n\n```bash\n# Generate a token and start the server\nCRAFT_SERVER_TOKEN=$(openssl rand -hex 32) bun run packages/server/src/index.ts\n```\n\nThe server prints the connection details on startup:\n\n```\nCRAFT_SERVER_URL=ws://203.0.113.5:9100\nCRAFT_SERVER_TOKEN=<generated-token>\n```\n\nCopy these values and use them to connect the desktop app.\n\n### Connecting the Desktop App\n\nLaunch the Electron app in thin-client mode by passing the server URL and token:\n\n```bash\nCRAFT_SERVER_URL=wss://203.0.113.5:9100 CRAFT_SERVER_TOKEN=<token> bun run electron:start\n```\n\nIn thin-client mode, the desktop app renders the UI but all session logic, tool execution, and LLM calls run on the remote server.\n\n### Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `CRAFT_SERVER_TOKEN` | Yes | — | Bearer token for client authentication |\n| `CRAFT_RPC_HOST` | No | `127.0.0.1` | Bind address (`0.0.0.0` for remote access) |\n| `CRAFT_RPC_PORT` | No | `9100` | Bind port |\n| `CRAFT_RPC_TLS_CERT` | No | — | Path to PEM certificate file (enables `wss://`) |\n| `CRAFT_RPC_TLS_KEY` | No | — | Path to PEM private key file (required with cert) |\n| `CRAFT_RPC_TLS_CA` | No | — | Path to PEM CA chain file (optional, for client cert verification) |\n| `CRAFT_DEBUG` | No | `false` | Enable debug logging |\n\n### TLS (Recommended for Remote Access)\n\nWhen exposing the server over the network, TLS encrypts the WebSocket connection (`wss://` instead of `ws://`).\n\n**Generate a self-signed certificate (development/testing):**\n\n```bash\n./scripts/generate-dev-cert.sh\n# Creates certs/cert.pem and certs/key.pem (valid 365 days)\n```\n\n**Start the server with TLS:**\n\n```bash\nCRAFT_SERVER_TOKEN=<token> \\\nCRAFT_RPC_HOST=0.0.0.0 \\\nCRAFT_RPC_TLS_CERT=certs/cert.pem \\\nCRAFT_RPC_TLS_KEY=certs/key.pem \\\nbun run packages/server/src/index.ts\n```\n\nThe server will print `CRAFT_SERVER_URL=wss://<your-public-ip>:9100`.\n\n**For production**, use certificates from a trusted CA (e.g., Let's Encrypt) or place the server behind a reverse proxy (nginx, Caddy) that terminates TLS.\n\n### Docker\n\n```bash\ndocker run -d \\\n  -p 9100:9100 \\\n  -e CRAFT_SERVER_TOKEN=<token> \\\n  -e CRAFT_RPC_HOST=0.0.0.0 \\\n  -v craft-data:/root/.craft-agent \\\n  craft-agents-server\n```\n\nTo enable TLS in Docker, mount your certificates and set the env vars:\n\n```bash\ndocker run -d \\\n  -p 9100:9100 \\\n  -e CRAFT_SERVER_TOKEN=<token> \\\n  -e CRAFT_RPC_HOST=0.0.0.0 \\\n  -e CRAFT_RPC_TLS_CERT=/certs/cert.pem \\\n  -e CRAFT_RPC_TLS_KEY=/certs/key.pem \\\n  -v ./certs:/certs:ro \\\n  -v craft-data:/root/.craft-agent \\\n  craft-agents-server\n```\n\n## CLI Client\n\nA terminal client that connects to a running Craft Agent server over WebSocket (`ws://` or `wss://`). Use it for scripting, CI/CD pipelines, server validation, or when you prefer the command line.\n\n### Installation\n\n```bash\n# From the monorepo (requires Bun)\nbun run apps/cli/src/index.ts --help\n\n# Or add to your PATH\nalias craft-cli=\"bun run $(pwd)/apps/cli/src/index.ts\"\n```\n\n### Connection\n\nThe CLI reads connection details from flags or environment variables:\n\n```bash\n# Via environment (set once)\nexport CRAFT_SERVER_URL=ws://127.0.0.1:9100\nexport CRAFT_SERVER_TOKEN=<your-token>\n\n# Or via flags\ncraft-cli --url ws://127.0.0.1:9100 --token <token> ping\n```\n\nFor TLS connections (`wss://`), use `--tls-ca <path>` for self-signed certificates.\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `ping` | Verify connectivity (clientId + latency) |\n| `health` | Check credential store health |\n| `versions` | Show server runtime versions |\n| `workspaces` | List workspaces |\n| `sessions` | List sessions in workspace |\n| `connections` | List LLM connections |\n| `sources` | List configured sources |\n| `session create` | Create a session (`--name`, `--mode`) |\n| `session messages <id>` | Print session message history |\n| `session delete <id>` | Delete a session |\n| `send <id> <message>` | Send message and stream AI response |\n| `cancel <id>` | Cancel in-progress processing |\n| `invoke <channel> [args]` | Raw RPC call with JSON args |\n| `listen <channel>` | Subscribe to push events (Ctrl+C to stop) |\n| `run <prompt>` | Self-contained: spawn server, run prompt, stream response, exit |\n| `--validate-server` | 21-step integration test (auto-spawns server if no `--url`) |\n\n#### Run Command Flags\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--workspace-dir <path>` | — | Register a workspace directory before running |\n| `--source <slug>` | — | Enable a source (repeatable) |\n| `--output-format <fmt>` | `text` | Output format: `text` or `stre",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"craft-agent\",\n  \"version\": \"0.10.4\",\n  \"license\": \"Apache-2.0\",\n  \"description\": \"Claude Code-like agent for Craft documents\",\n  \"type\": \"module\",\n  \"private\": true,\n  \"trustedDependencies\": [\n    \"@sentry/cli\",\n    \"@vscode/ripgrep\",\n    \"electron\",\n    \"electron-winstaller\",\n    \"esbuild\",\n    \"koffi\",\n    \"protobufjs\",\n    \"sharp\"\n  ],\n  \"workspaces\": [\n    \"packages/*\",\n    \"apps/*\",\n    \"!apps/online-docs\"\n  ],\n  \"scripts\": {\n    \"test\": \"bun test && for f in $(find . -name '*.isolated.ts' -not -path './node_modules/*'); do bun test \\\"$f\\\" || exit 1; done\",\n    \"typecheck\": \"bun run typecheck:shared\",\n    \"typecheck:shared\": \"cd packages/shared && bun run tsc --noEmit\",\n    \"typecheck:staged\": \"bash scripts/typecheck-staged.sh\",\n    \"typecheck:all\": \"cd packages/core && bun run tsc --noEmit && cd ../shared && bun run tsc --noEmit && cd ../server-core && bun run tsc --noEmit && cd ../server && bun run tsc --noEmit && cd ../session-tools-core && bun run tsc --noEmit && cd ../pi-agent-server && bun run typecheck && cd ../../apps/electron && bun run typecheck && cd ../../packages/ui && bun run tsc --noEmit\",\n    \"server:start\": \"bun run packages/server/src/index.ts\",\n    \"server:dev\": \"bun run server:build:subprocess && CRAFT_DEBUG=true CRAFT_BUNDLED_ASSETS_ROOT=$PWD/apps/electron bun run packages/server/src/index.ts\",\n    \"server:build\": \"bun run scripts/build-server.ts\",\n    \"server:build:linux-x64\": \"bun run scripts/build-server.ts --platform=linux --arch=x64 --compress\",\n    \"server:build:linux-arm64\": \"bun run scripts/build-server.ts --platform=linux --arch=arm64 --compress\",\n    \"server:build:darwin-arm64\": \"bun run scripts/build-server.ts --platform=darwin --arch=arm64 --compress\",\n    \"server:build:darwin-x64\": \"bun run scripts/build-server.ts --platform=darwin --arch=x64 --compress\",\n    \"typecheck:electron\": \"cd apps/electron && bun run typecheck\",\n    \"test:shared:llm-connections\": \"cd packages/shared && bun test tests/llm-connections.test.ts\",\n    \"test:shared:models-pi\": \"cd packages/shared && bun test tests/models-pi.test.ts\",\n    \"test:shared:config\": \"cd packages/shared && bun test src/config/__tests__/llm-connections.test.ts src/config/__tests__/storage-migrations.test.ts src/config/__tests__/storage-startup-migration.test.ts src/config/__tests__/default-thinking-level.test.ts\",\n    \"test:shared:all\": \"bun run test:shared:llm-connections && bun run test:shared:models-pi && bun run test:shared:config\",\n    \"test:doc-tools\": \"python3 -m unittest apps.electron.resources.scripts.tests.test_pdf_tool_smoke apps.electron.resources.scripts.tests.test_xlsx_tool_smoke apps.electron.resources.scripts.tests.test_docx_tool_smoke apps.electron.resources.scripts.tests.test_pptx_tool_smoke apps.electron.resources.scripts.tests.test_img_tool_smoke apps.electron.resources.scripts.tests.test_ical_tool_smoke apps.electron.resources.scripts.tests.test_doc_diff_smoke apps.electron.resources.scripts.tests.test_markitdown_smoke\",\n    \"validate:dev\": \"bun run typecheck:all && bun run test:shared:all && bun run test:doc-tools\",\n    \"validate:ci\": \"bun run validate:dev && bun run lint:i18n:parity && bun run lint:i18n:sorted && bun run lint:i18n:coverage\",\n    \"lint:ipc-sends\": \"bash scripts/check-raw-sends.sh\",\n    \"lint:tool-name-checks\": \"bash scripts/check-task-tool-checks.sh\",\n    \"lint:electron\": \"cd apps/electron && bun run lint\",\n    \"lint:shared\": \"cd packages/shared && npx eslint .\",\n    \"lint:ui\": \"cd packages/ui && npx eslint .\",\n    \"lint:i18n:staged\": \"bash scripts/lint-i18n-staged.sh\",\n    \"lint:i18n:strings\": \"bash scripts/lint-i18n-strings.sh\",\n    \"lint:i18n:parity\": \"bun run scripts/check-i18n-parity.ts\",\n    \"lint:i18n:coverage\": \"bun run scripts/check-i18n-coverage.ts\",\n    \"sort-locales\": \"bun scripts/sort-locales.ts\",\n    \"lint:i18n:sorted\": \"bun scripts/sort-locales.ts --check\",\n    \"lint\": \"bun run lint:ipc-sends && bun run lint:tool-name-checks && bun run lint:electron && bun run lint:shared && bun run lint:ui\",\n    \"link\": \"bun link\",\n    \"electron:clean\": \"bun run scripts/electron-clean.ts\",\n    \"electron:build:main\": \"bun run scripts/electron-build-main.ts\",\n    \"electron:build:preload\": \"bun run scripts/electron-build-preload.ts\",\n    \"electron:build:renderer\": \"bun run scripts/electron-build-renderer.ts\",\n    \"electron:build:resources\": \"bun run scripts/electron-build-resources.ts\",\n    \"build:wa-worker\": \"bun run scripts/build-wa-worker.ts\",\n    \"electron:build:assets\": \"cd apps/electron && bun scripts/copy-assets.ts\",\n    \"electron:build\": \"bun run electron:build:main && bun run electron:build:preload && bun run electron:build:renderer && bun run electron:build:resources && bun run electron:build:assets\",\n    \"electron:start\": \"bun run electron:build && electron apps/electron\",\n    \"electron:dev\": \"bun run scripts/electron-dev.ts\",\n    \"electron:dev:terminal\": \"bun run scripts/electron-dev.ts --terminal\",\n    \"electron:dev:menu\": \"bash scripts/electron-dev.sh\",\n    \"elect",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "skill",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "owner": "gastownhall",
    "name": "beads",
    "full_name": "gastownhall/beads",
    "url": "https://github.com/gastownhall/beads",
    "description": "Beads - A memory upgrade for your coding agent",
    "language": "Go",
    "total_stars": 24967,
    "forks": 1667,
    "stars_this_period": 115,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "agents",
        "claude-code",
        "coding"
      ],
      "license": "MIT",
      "open_issues": 487,
      "created_at": "2025-10-12T03:09:46Z",
      "pushed_at": "2026-06-29T21:48:48Z",
      "homepage": "https://gastownhall.github.io/beads/",
      "default_branch": "main",
      "forks": 1667,
      "watchers": 90,
      "archived": false,
      "size_kb": 408669
    },
    "readme_content": "# bd - Beads\n\n**Distributed graph issue tracker for AI agents, powered by [Dolt](https://github.com/dolthub/dolt).**\n\n**Platforms:** macOS, Linux, Windows, FreeBSD\n\n[![License](https://img.shields.io/github/license/gastownhall/beads)](LICENSE)\n[![Go Report Card](https://goreportcard.com/badge/github.com/steveyegge/beads)](https://goreportcard.com/report/github.com/steveyegge/beads)\n[![Release](https://img.shields.io/github/v/release/gastownhall/beads)](https://github.com/gastownhall/beads/releases)\n[![npm version](https://img.shields.io/npm/v/@beads/bd)](https://www.npmjs.com/package/@beads/bd)\n[![PyPI](https://img.shields.io/pypi/v/beads-mcp)](https://pypi.org/project/beads-mcp/)\n\n**Docs:** https://gastownhall.github.io/beads/\n\nBeads provides a persistent, structured memory for coding agents. It replaces messy markdown plans with a dependency-aware graph, allowing agents to handle long-horizon tasks without losing context.\n\n## ⚡ Quick Start\n\n```bash\n# Install beads CLI (system-wide - don't clone this repo into your project)\ncurl -fsSL https://raw.githubusercontent.com/gastownhall/beads/main/scripts/install.sh | bash\n\n# Initialize in YOUR project\ncd your-project\nbd init\n\n# Optional: refresh or install richer instructions for your agent\nbd setup codex    # Codex CLI - installs skill, AGENTS.md guidance, and hooks\nbd setup claude   # Claude Code - installs hooks/settings\nbd setup factory  # Factory.ai Droid - creates/updates AGENTS.md\n```\n\n**Note:** Beads is a CLI tool you install once and use everywhere. You don't need to clone this repository into your project.\n\n`bd init` creates or updates `AGENTS.md` by default so agents can discover the beads workflow, and also installs project Claude/Codex integrations unless you pass `--skip-agents` or `--stealth`. Use `bd setup --list` to see supported integrations, including `bd setup codex`, `bd setup factory`, `bd setup claude`, `bd setup mux`, `bd setup cursor`, and more. See [Agent and IDE setup](docs/SETUP.md).\n\nManual copy-paste is only for unsupported agents, existing projects where you cannot rerun `bd init`/`bd setup`, or custom instruction files. In those cases, run `bd onboard` and paste the printed snippet into the file your agent reads.\n\nIf your agent is not covered by `bd setup`, add this minimal `AGENTS.md` section:\n\n```markdown\nThis project uses bd (beads) for issue tracking.\n\n- Run `bd prime` for workflow context and command guidance.\n- Use `bd ready`, `bd show <id>`, `bd update <id> --claim`, and `bd close <id>`.\n- Use `bd remember \"insight\"` for persistent project memory; do not create MEMORY.md files.\n- Do not use markdown TODO lists for task tracking.\n```\n\n## 🛠 Features\n\n* **[Dolt](https://github.com/dolthub/dolt)-Powered:** Version-controlled SQL database with cell-level merge, native branching, and built-in sync via Dolt remotes.\n* **Agent-Optimized:** JSON output, dependency tracking, and auto-ready task detection.\n* **Zero Conflict:** Hash-based IDs (`bd-a1b2`) prevent merge collisions in multi-agent/multi-branch workflows.\n* **Compaction:** Semantic \"memory decay\" summarizes old closed tasks to save context window.\n* **Messaging:** Message issue type with threading (`--thread`), ephemeral lifecycle, and mail delegation.\n* **Graph Links:** `relates_to`, `duplicates`, `supersedes`, and `replies_to` for knowledge graphs.\n\n## 📖 Essential Commands\n\n| Command | Action |\n| --- | --- |\n| `bd ready` | List tasks with no open blockers. |\n| `bd create \"Title\" -p 0` | Create a P0 task. |\n| `bd update <id> --claim` | Atomically claim a task (sets assignee + in_progress). |\n| `bd dep add <child> <parent>` | Link tasks (blocks, related, parent-child). |\n| `bd show <id>` | View task details and audit trail. |\n| `bd prime` | Print agent workflow context and persistent memories. |\n| `bd remember \"insight\"` | Store project memory that `bd prime` injects later. |\n\n## 🔗 Hierarchy & Workflow\n\nBeads supports hierarchical IDs for epics:\n\n* `bd-a3f8` (Epic)\n* `bd-a3f8.1` (Task)\n* `bd-a3f8.1.1` (Sub-task)\n\n**Stealth Mode:** Run `bd init --stealth` to use Beads locally without committing files to the main repo. Perfect for personal use on shared projects. See [Git-Free Usage](#-git-free-usage) below.\n\n**Contributor vs Maintainer:** When working on open-source projects:\n\n* **Contributors** (forked repos): Run `bd init --contributor` to route planning issues to a separate repo (e.g., `~/.beads-planning`). Keeps experimental work out of PRs.\n* **Maintainers** (write access): Beads auto-detects maintainer role via SSH URLs or HTTPS with credentials. Only need `git config beads.role maintainer` if using GitHub HTTPS without credentials but you have write access.\n\n## 📦 Installation\n\n```bash\nbrew install beads           # macOS / Linux (recommended)\nnpm install -g @beads/bd     # Node.js users\n```\n\n**Other methods:** [install script](docs/INSTALLING.md#quick-install-script-all-platforms) | [go install](docs/INSTALLING.md#a-note-on-go-install-capability) | [from source](docs/INSTALLING.md#build-dependencies-contributors-only) | [Windows](docs/INSTALLING.md#windows-11) | [Arch AUR](docs/INSTALLING.md#linux)\n\n**Requirements:** macOS, Linux, Windows, or FreeBSD. See [docs/INSTALLING.md](docs/INSTALLING.md) for complete installation guide.\n\n### Security And Verification\n\nBefore trusting any downloaded binary, verify its checksum against the release `checksums.txt`.\n\nThe install scripts verify release checksums before install. For manual installs, do this verification yourself before first run.\n\nOn macOS, `scripts/install.sh` preserves the downloaded signature by default. Local ad-hoc re-signing is explicit opt-in via `BEADS_INSTALL_RESIGN_MACOS=1`.\n\nSee [docs/ANTIVIRUS.md](docs/ANTIVIRUS.md) for Windows AV false-positive guidance and verification workflow.\n\n## 💾 Storage Modes\n\nBeads uses [Dolt](https://github.com/dolthub/dolt) as its database. Two modes\nare available:\n\n### Embedded Mode (default)\n\n```bash\nbd init\n```\n\nDolt runs in-process — no external server needed. Data lives in\n`.beads/embeddeddolt/`. Single-writer only (file locking enforced).\nThis is the recommended mode for most users.\n\nWhen the git repo has an `origin` remote, `bd init` configures a Dolt remote\nnamed `origin` automatically. Cross-machine sync uses `bd dolt push` and\n`bd dolt pull` against `refs/dolt/data`; `.beads/issues.jsonl` is an export\nfor viewers and interchange, not the source of truth or a full database\nbackup.\n\n### Server Mode\n\n```bash\nbd init --server\n```\n\nConnects to an external `dolt sql-server`. Data lives in `.beads/dolt/`.\nSupports multiple concurrent writers. Configure the connection with flags\nor environment variables:\n\n| Flag | Env Var | Default |\n|------|---------|---------|\n| `--server-host` | `BEADS_DOLT_SERVER_HOST` | `127.0.0.1` |\n| `--server-port` | `BEADS_DOLT_SERVER_PORT` | `3307` |\n| `--server-socket` | `BEADS_DOLT_SERVER_SOCKET` | (none; uses TCP) |\n| `--server-user` | `BEADS_DOLT_SERVER_USER` | `root` |\n| | `BEADS_DOLT_PASSWORD` | (none) |\n\n**Unix domain sockets:** Use `--server-socket` to connect via a Unix socket\ninstead of TCP. This avoids port conflicts between concurrent projects and\nis useful in sandboxed environments (e.g., Claude Code) where file-level\naccess control is simpler than network allowlists. The Dolt server must be\nstarted with `dolt sql-server --socket <path>`. Auto-start is not supported\nin socket mode.\n\n### Backup & Migration\n\nBack up your database and migrate between modes using `bd backup`:\n\n```bash\n# Set up a backup destination and push\nbd backup init /path/to/backup\nbd backup sync\n\n# Restore into a new project (any mode)\nbd init           # or bd init --server\nbd backup restore --force /path/to/backup\n```\n\nSee [docs/DOLT.md](docs/DOLT.md#migrating-between-backends) for full\nmigration instructions.\n\n`bd export` and `.beads/issues.jsonl` are issue-table exports. They are useful\nfor review, migration, and interoperability, but they do not capture Dolt\nbranches, commit history, working-set state, or non-issue tables. Use\n`bd backup` or a manual Dolt backup when you need a restorable database backup.\n\n## 🌐 Community Tools\n\nSee [docs/COMMUNITY_TOOLS.md](docs/COMMUNITY_TOOLS.md) for a curated list of community-built UIs, extensions, and integrations—including terminal interfaces, web UIs, editor extensions, and native apps.\n\n## 🚀 Git-Free Usage\n\nBeads works without git. The Dolt database is the storage backend — git\nintegration (hooks, repo discovery, identity) is optional.\n\n```bash\n# Initialize without git\nexport BEADS_DIR=/path/to/your/project/.beads\nbd init --quiet --stealth\n\n# All core commands work with zero git calls\nbd create \"Fix auth bug\" -p 1 -t bug\nbd ready --json\nbd update bd-a1b2 --claim\nbd prime\nbd close bd-a1b2 \"Fixed\"\n```\n\n`BEADS_DIR` tells bd where to put the `.beads/` database directory,\nbypassing git repo discovery. `--stealth` sets `no-git-ops: true` in\nconfig, disabling all git hook installation and git operations.\n\nThis is useful for:\n- **Non-git VCS** (Sapling, Jujutsu, Piper) — no `.git/` directory needed\n- **Monorepos** — point `BEADS_DIR` at a specific subdirectory\n- **CI/CD** — isolated task tracking without repo-level side effects\n- **Evaluation/testing** — ephemeral databases in `/tmp`\n\nFor daemon mode without git, use `bd daemon start --local`\n(see [PR #433](https://github.com/gastownhall/beads/pull/433)).\n\n## 📝 Documentation\n\n* [Documentation site](https://gastownhall.github.io/beads/) (versioned) | [Installing](docs/INSTALLING.md) | [Sync Concepts](docs/SYNC_CONCEPTS.md) | [Agent Workflow](AGENT_INSTRUCTIONS.md) | [Copilot CLI Setup](docs/COPILOT_CLI_INTEGRATION.md) | [Copilot VS Code MCP](docs/COPILOT_INTEGRATION.md) | [Articles](ARTICLES.md) | [Sync Branch Mode](docs/PROTECTED_BRANCHES.md) | [Troubleshooting](docs/TROUBLESHOOTING.md) | [FAQ](docs/FAQ.md)\n* [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/gastownhall/beads)\n",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/steveyegge/beads\n\ngo 1.26.2\n\nrequire (\n\tcharm.land/glamour/v2 v2.0.0\n\tcharm.land/huh/v2 v2.0.3\n\tcharm.land/lipgloss/v2 v2.0.3\n\tgithub.com/BurntSushi/toml v1.6.0\n\tgithub.com/DATA-DOG/go-sqlmock v1.5.0\n\tgithub.com/JohannesKaufmann/html-to-markdown/v2 v2.5.0\n\tgithub.com/anthropics/anthropic-sdk-go v1.45.0\n\tgithub.com/cenkalti/backoff/v4 v4.3.0\n\tgithub.com/dolthub/driver/v2 v2.1.4\n\tgithub.com/dolthub/eventkit v0.0.0-20260611184414-99f5693e696a\n\tgithub.com/go-sql-driver/mysql v1.9.3\n\tgithub.com/olebedev/when v1.1.0\n\tgithub.com/spf13/cobra v1.10.2\n\tgithub.com/spf13/viper v1.21.0\n\tgithub.com/stretchr/testify v1.11.1\n\tgithub.com/testcontainers/testcontainers-go v0.42.0\n\tgithub.com/testcontainers/testcontainers-go/modules/dolt v0.42.0\n\tgo.opentelemetry.io/otel v1.43.0\n\tgo.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0\n\tgo.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0\n\tgo.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.43.0\n\tgo.opentelemetry.io/otel/metric v1.43.0\n\tgo.opentelemetry.io/otel/sdk v1.43.0\n\tgo.opentelemetry.io/otel/sdk/metric v1.43.0\n\tgo.opentelemetry.io/otel/trace v1.43.0\n\tgolang.org/x/sync v0.20.0\n\tgolang.org/x/sys v0.45.0\n\tgolang.org/x/term v0.42.0\n\tgopkg.in/yaml.v3 v3.0.1\n\trsc.io/script v0.0.2\n)\n\nrequire (\n\tgithub.com/JohannesKaufmann/dom v0.2.0 // indirect\n\tgithub.com/bahlo/generic-list-go v0.2.0 // indirect\n\tgithub.com/buger/jsonparser v1.1.2 // indirect\n\tgithub.com/cenkalti/backoff/v5 v5.0.3 // indirect\n\tgithub.com/cockroachdb/apd/v3 v3.2.3 // indirect\n\tgithub.com/fsnotify/fsnotify v1.9.0 // indirect\n\tgithub.com/invopop/jsonschema v0.13.0 // indirect\n\tgithub.com/mailru/easyjson v0.7.7 // indirect\n\tgithub.com/moby/moby/api v1.54.1 // indirect\n\tgithub.com/moby/moby/client v0.4.0 // indirect\n\tgithub.com/prometheus/procfs v0.16.1 // indirect\n\tgithub.com/standard-webhooks/standard-webhooks/libraries v0.0.1 // indirect\n\tgithub.com/wk8/go-ordered-map/v2 v2.1.8 // indirect\n)\n\nrequire (\n\tcel.dev/expr v0.25.1 // indirect\n\tcharm.land/bubbles/v2 v2.0.0 // indirect\n\tcharm.land/bubbletea/v2 v2.0.2 // indirect\n\tcloud.google.com/go v0.120.0 // indirect\n\tcloud.google.com/go/auth v0.16.2 // indirect\n\tcloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect\n\tcloud.google.com/go/compute/metadata v0.9.0 // indirect\n\tcloud.google.com/go/iam v1.5.2 // indirect\n\tcloud.google.com/go/monitoring v1.24.2 // indirect\n\tcloud.google.com/go/storage v1.50.0 // indirect\n\tdario.cat/mergo v1.0.2 // indirect\n\tfilippo.io/edwards25519 v1.1.1 // indirect\n\tgithub.com/AlekSi/pointer v1.0.0 // indirect\n\tgithub.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 // indirect\n\tgithub.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 // indirect\n\tgithub.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect\n\tgithub.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 // indirect\n\tgithub.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect\n\tgithub.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect\n\tgithub.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect\n\tgithub.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.50.0 // indirect\n\tgithub.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.50.0 // indirect\n\tgithub.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect\n\tgithub.com/Microsoft/go-winio v0.6.2 // indirect\n\tgithub.com/abiosoft/readline v0.0.0-20180607040430-155bce2042db // indirect\n\tgithub.com/alecthomas/chroma/v2 v2.20.0 // indirect\n\tgithub.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible // indirect\n\tgithub.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 // indirect\n\tgithub.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40 // indirect\n\tgithub.com/apache/thrift v0.23.0 // indirect\n\tgithub.com/atotto/clipboard v0.1.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2 v1.41.5 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/config v1.29.8 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.17.61 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.64 // 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/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/dynamodb v1.41.0 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.15 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 // indirect\n\tgithub.com/aws",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "skill",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 88
    },
    "strategic_score": 88
  },
  {
    "owner": "hsliuping",
    "name": "TradingAgents-CN",
    "full_name": "hsliuping/TradingAgents-CN",
    "url": "https://github.com/hsliuping/TradingAgents-CN",
    "description": "基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版",
    "language": "Python",
    "total_stars": 29348,
    "forks": 6206,
    "stars_this_period": 110,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [],
      "license": "NOASSERTION",
      "open_issues": 276,
      "created_at": "2025-06-26T07:45:09Z",
      "pushed_at": "2026-04-20T09:46:55Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 6206,
      "watchers": 236,
      "archived": false,
      "size_kb": 76512
    },
    "readme_content": "# TradingAgents 中文增强版\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Python](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/)\n[![Version](https://img.shields.io/badge/Version-v1.0.1-green.svg)](./VERSION)\n[![Documentation](https://img.shields.io/badge/docs-中文文档-green.svg)](./docs/)\n[![Original](https://img.shields.io/badge/基于-TauricResearch/TradingAgents-orange.svg)](https://github.com/TauricResearch/TradingAgents)\n\n---\n\n## ⚠️ 重要版权声明与授权说明\n\n### 🚨 版权侵权警告\n\n**我们注意到 `tradingagents-ai.com` 网站未经授权使用了我们的专有代码，并声称是他们公司的产品。**\n\n**⚠️ 重要提醒**：\n- ❌ **我们项目组目前没有给任何组织或个人进行过商业授权**\n- ❌ **该网站未经授权使用我们的代码，属于侵权行为**\n- ⚠️ **请大家注意识别，避免上当受骗**\n\n**✅ 官方唯一渠道**：\n- 📦 GitHub 仓库：https://github.com/hsliuping/TradingAgents-CN\n- 📧 官方邮箱：hsliup@163.com\n- 📱 微信公众号：TradingAgents-CN\n\n如发现任何未经授权的商业使用，请通过上述渠道联系我们。\n\n### 📋 版本授权说明\n\n#### v1.0.1（当前稳定版本）\n- ✅ **个人使用**：完全开源，可自由使用\n- ❌ **商业使用**：**必须获得商业授权**，未经授权禁止商业使用\n- 📧 **授权联系**：[hsliup@163.com](mailto:hsliup@163.com)\n\n#### v2.0.0（开发中）\n- 🔄 **开发状态**：已完成两轮内测，接近完工上线阶段\n- ⚠️ **开源计划**：**因存在盗版问题，v2.0 版本暂时不进行开源**\n- 📢 **发布方式**：将通过官方渠道发布，敬请关注\n\n### 📄 许可证详情\n\n本项目采用**混合许可证**模式：\n- 🔓 **开源部分**（Apache 2.0）：除 `app/` 和 `frontend/` 外的所有文件\n- 🔒 **专有部分**（需商业授权）：`app/`（FastAPI后端）和 `frontend/`（Vue前端）目录\n\n详细说明请查看：[版权声明](./COPYRIGHT.md) | [许可证文件](./LICENSE)\n\n---\n\n>\n> 🎓 **学习中心**: AI基础 | 提示词工程 | 模型选择 | 多智能体分析原理 | 风险与局限 | 源项目与论文 | 实战教程（部分为外链） | 常见问题\n> 🎯 **核心功能**: 原生OpenAI支持 | Google AI全面集成 | 自定义端点配置 | 智能模型选择 | 多LLM提供商支持 | 模型选择持久化 | Docker容器化部署 | 专业报告导出 | 完整A股支持 | 中文本地化\n\n面向中文用户的**多智能体与大模型股票分析学习平台**。帮助你系统化学习如何使用多智能体交易框架与 AI 大模型进行合规的股票研究与策略实验，不提供实盘交易指令，平台定位为学习与研究用途。\n\n## 🙏 致敬源项目\n\n感谢 [Tauric Research](https://github.com/TauricResearch) 团队创造的革命性多智能体交易框架 [TradingAgents](https://github.com/TauricResearch/TradingAgents)！\n\n**🎯 我们的定位与使命**: 专注学习与研究，提供中文化学习中心与工具，合规友好，支持 A股/港股/美股 的分析与教学，推动 AI 金融技术在中文社区的普及与正确使用。\n\n## 🎉 v1.0.1 版本说明 - 配置体验与同步稳定性增强\n\n> 🚀 **当前推荐版本**: `v1.0.1` 已正式可用，在 `v1.0.0-preview` 架构基础上，重点增强配置管理、聚合厂家、页面切换、单股同步和上游能力吸收。\n\n### ✨ 核心特性\n\n#### 🏗️ **全新技术架构**\n- **后端升级**: 从 Streamlit 迁移到 FastAPI，提供更强大的 RESTful API\n- **前端重构**: 采用 Vue 3 + Element Plus，打造现代化的单页应用\n- **数据库优化**: MongoDB + Redis 双数据库架构，性能提升 10 倍\n- **容器化部署**: 完整的 Docker 多架构支持（amd64 + arm64）\n\n#### 🚀 **v1.0.1 重点增强**\n- **配置管理优化**: 新增厂家、模型目录和大模型配置支持按最新添加顺序置顶显示\n- **聚合厂家增强**: 新增 `AiHubMix` 聚合 LLM 厂家，并支持聚合渠道初始化能力\n- **模型选择统一排序**: 配置页、对话框和分析页中的模型列表顺序保持一致\n- **页面切换修复**: 股票详情页和报告详情页切换后会自动刷新正确内容\n- **单股同步增强**: 同步结果支持展示主链路、回退链路、失败原因和 `market_quotes` 落库状态\n- **AKShare 兜底增强**: 单股实时行情支持 `stock_bid_ask_em -> stock_zh_a_spot -> stock_zh_a_spot_em -> stock_zh_a_hist` 多级降级链\n- **上游能力同步**: 同步 `llm_clients`、共享模型目录、provider 规范键、图层初始化路径和数据库迁移增强等能力\n\n#### 🎯 **企业级功能**\n- **用户权限管理**: 完整的用户认证、角色管理、操作日志系统\n- **配置管理中心**: 可视化的大模型配置、数据源管理、系统设置\n- **缓存管理系统**: 智能缓存策略，支持 MongoDB/Redis/文件多级缓存\n- **实时通知系统**: SSE+WebSocket 双通道推送，实时跟踪分析进度和系统状态\n- **批量分析功能**: 支持多只股票同时分析，提升工作效率\n- **智能股票筛选**: 基于多维度指标的股票筛选和排序系统\n- **自选股管理**: 个人自选股收藏、分组管理和跟踪功能\n- **个股详情页**: 完整的个股信息展示和历史分析记录\n- **模拟交易系统**: 虚拟交易环境，验证投资策略效果\n\n#### 🤖 **智能分析增强**\n- **动态供应商管理**: 支持动态添加和配置 LLM 供应商\n- **模型能力管理**: 智能模型选择，根据任务自动匹配最佳模型\n- **多数据源同步**: 统一的数据源管理，支持 Tushare、AkShare、BaoStock\n- **报告导出功能**: 支持 Markdown/Word/PDF 多格式专业报告导出\n\n#### 🔧 **重大Bug修复**\n- **技术指标计算修复**: 彻底解决市场分析师技术指标计算不准确问题\n- **基本面数据修复**: 修复基本面分析师PE、PB等关键财务数据计算错误\n- **死循环问题修复**: 解决部分用户在分析过程中触发的无限循环问题\n- **数据一致性优化**: 确保所有分析师使用统一、准确的数据源\n\n#### 🐳 **Docker 多架构支持**\n- **跨平台部署**: 支持 x86_64 和 ARM64 架构（Apple Silicon、树莓派、AWS Graviton）\n- **GitHub Actions**: 自动化构建和发布 Docker 镜像\n- **一键部署**: 完整的 Docker Compose 配置，5 分钟快速启动\n\n### 📊 技术栈升级\n\n| 组件 | v0.1.x | v1.0.1 |\n|------|--------|----------------|\n| **后端框架** | Streamlit | FastAPI + Uvicorn |\n| **前端框架** | Streamlit | Vue 3 + Vite + Element Plus |\n| **数据库** | 可选 MongoDB | MongoDB + Redis |\n| **API 架构** | 单体应用 | RESTful API + WebSocket |\n| **部署方式** | 本地/Docker | Docker 多架构 + GitHub Actions |\n\n\n\n#### 📥 安装部署\n\n**两种部署方式，任选其一**：\n\n| 部署方式 | 适用场景 | 难度 | 文档链接 |\n|---------|---------|------|---------|\n| 🐳 **Docker版** | 生产环境、跨平台 | ⭐⭐ 中等 | [Docker 部署指南](https://mp.weixin.qq.com/s/JkA0cOu8xJnoY_3LC5oXNw) |\n| 💻 **本地代码版** | 开发者、定制需求 | ⭐⭐⭐ 较难 | [本地安装指南](https://mp.weixin.qq.com/s/cqUGf-sAzcBV19gdI4sYfA) |\n\n⚠️ **重要提醒**：在分析股票之前，请按相关文档要求，将股票数据同步完成，否则分析结果将会出现数据错误。\n\n\n\n#### 📚 使用指南\n\n在使用前，建议先阅读详细的使用指南：\n- **[v1.0.1 发布说明](./docs/releases/v1.0.1-release-notes.md)**\n- **[v1.0.1 使用手册](./docs/guides/v1.0.1-user-manual.md)**\n- **[v1.0.1 升级指南](./docs/releases/upgrade-guide.md)**\n- **[完整更新日志](./docs/releases/CHANGELOG.md)**\n- **[0、📘 TradingAgents-CN v1.0.0-preview 快速入门视频](https://www.bilibili.com/video/BV1i2CeBwEP7/?vd_source=5d790a5b8d2f46d2c10fd4e770be1594)**\n\n- **[1、📘 TradingAgents-CN v1.0.0-preview 使用指南](https://mp.weixin.qq.com/s/ppsYiBncynxlsfKFG8uEbw)**\n- **[2、📘 使用 Docker Compose 部署TradingAgents-CN v1.0.0-preview（完全版）](https://mp.weixin.qq.com/s/JkA0cOu8xJnoY_3LC5oXNw)**\n- **[3、📘 从 Docker Hub 更新 TradingAgents‑CN 镜像](https://mp.weixin.qq.com/s/WKYhW8J80Watpg8K6E_dSQ)**\n- **[4、📘 TradingAgents-CN v1.0.0-preview绿色版安装和升级指南](https://mp.weixin.qq.com/s/eoo_HeIGxaQZVT76LBbRJQ)**\n- **[5、📘 TradingAgents-CN v1.0.0-preview绿色版端口配置说明](https://mp.weixin.qq.com/s/o5QdNuh2-iKkIHzJXCj7vQ)**\n- **[6、📘 TradingAgents v1.0.0-preview 源码版安装手册（修订版）](https://mp.weixin.qq.com/s/cqUGf-sAzcBV19gdI4sYfA)**\n- **[7、📘 TradingAgents v1.0.0-preview 源码安装视频教程](https://www.bilibili.com/video/BV1FxCtBHEte/?vd_source=5d790a5b8d2f46d2c10fd4e770be1594)**\n\n\n使用指南包含：\n- ✅ 完整的功能介绍和操作演示\n- ✅ 详细的配置说明和最佳实践\n- ✅ 常见问题解答和故障排除\n- ✅ 实际使用案例和效果展示\n\n### 数据库运维补充\n\n- 数据库版本隔离、共享库保护、迁移脚本与 provider 规范化说明：\n  - [数据库版本隔离与 Provider 规范化](./docs/deployment/database/DB_VERSION_ISOLATION_AND_PROVIDER_NORMALIZATION.md)\n\n### 上游吸收补充\n\n- 当前项目采用人工选择性吸收上游更新：\n  - [上游同步策略](./docs/maintenance/upstream-sync.md)\n  - [人工上游吸收清单](./docs/maintenance/manual-upstream-absorption-checklist.md)\n\n- `v1.0.1` 已明确同步到当前版本的上游能力包括：\n  - `llm_clients` 抽象层主链路\n  - 共享模型目录与轻量校验\n  - provider canonical key 规范化\n  - `trading_graph.py` 主要 provider 初始化路径收口\n  - `fundamentals_analyst.py` 中 qwen fresh llm 重建逻辑\n  - 图层参数透传、工厂别名兼容、风控引用修复\n  - provider 默认 URL / 环境变量映射统一\n  - MongoDB 默认库名、版本隔离命名与迁移脚本增强\n\n#### 关注公众号\n\n1. **关注公众号**: 微信搜索 **\"TradingAgents-CN\"** 并关注\n2. 公众号每天推送项目最新进展和使用教程\n\n\n- **微信公众号**: TradingAgents-CN（推荐）\n\n  <img src=\"assets/wexin.png\" alt=\"微信公众号\" width=\"200\"/>\n\n\n## 🆚 中文增强特色\n\n**相比原版新增**: 智能新闻分析 | 多层次新闻过滤 | 新闻质量评估 | 统一新闻工具 | 多LLM提供商集成 | 模型选择持久化 | 快速切换按钮 | | 实时进度显示 | 智能会话管理 | 中文界面 | A股数据 | 国产LLM | Docker部署 | 专业报告导出 | 统一日志管理 | Web配置界面 | 成本优化\n\n\n\n## 🤝 贡献指南\n\n我们欢迎各种形式的贡献：\n\n### 贡献类型\n\n- 🐛 **Bug修复** - 发现并修复问题\n- ✨ **新功能** - 添加新的功能特性\n- 📚 **文档改进** - 完善文档和教程\n- 🌐 **本地化** - 翻译和本地化工作\n- 🎨 **代码优化** - 性能优化和代码重构\n\n### 贡献流程\n\n1. Fork 本仓库\n2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)\n3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)\n4. 推送到分支 (`git push origin feature/AmazingFeature`)\n5. 创建 Pull Request\n\n### 📋 查看贡献者\n\n查看所有贡献者和详细贡献内容：**[🤝 贡献者名单](CONTRIBUTORS.md)**\n\n## 📄 许可证详情\n\n本项目采用**混合许可证**模式，详见 [LICENSE](LICENSE) 文件：\n\n### 🔓 开源部分（Apache 2.0）\n- **适用范围**：除 `app/` 和 `frontend/` 外的所有文件\n- **权限**：商业使用 ✅ | 修改分发 ✅ | 私人使用 ✅ | 专利使用 ✅\n- **条件**：保留版权声明 ❗ | 包含许可证副本 ❗\n\n### 🔒 专有部分（需商业授权）\n- **适用范围**：`app/`（FastAPI后端）和 `frontend/`（Vue前端）目录\n- **商业使用**：需要单独许可协议\n- **联系授权**：[hsliup@163.com](mailto:hsliup@163.com)\n\n### 📋 许可证选择建议\n- **个人学习/研究**：可自由使用全部功能\n- **商业应用**：请联系获取专有组件授权\n- **定制开发**：欢迎咨询商业合作方案\n\n### 📚 相关文档\n\n- [版权声明](./COPYRIGHT.md) - 详细的版权信息和使用条款\n- [主许可证](./LICENSE) - Apache 2.0 许可证\n- [后端专有许可证](./app/LICENSE) - 后端专有组件许可证\n- [前端专有许可证](./frontend/LICENSE) - 前端专有组件许可证\n\n## 🙏 致谢与感恩\n\n### 🌟 向源项目开发者致敬\n\n我们向 [Tauric Research](https://github.com/TauricResearch) 团队表达最深的敬意和感谢：\n\n- **🎯 愿景领导者**: 感谢您们在AI金融领域的前瞻性思考和创新实践\n- **💎 珍贵源码**: 感谢您们开源的每一行代码，它们凝聚着无数的智慧和心血\n- **🏗️ 架构大师**: 感谢您们设计了如此优雅、可扩展的多智能体框架\n- **💡 技术先驱**: 感谢您们将前沿AI技术与金融实务完美结合\n- **🔄 持续贡献**: 感谢您们持续的维护、更新和改进工作\n\n### 🤝 社区贡献者致谢\n\n感谢所有为TradingAgents-CN项目做出贡献的开发者和用户！\n\n详细的贡献者名单和贡献内容请查看：**[📋 贡献者名单](CONTRIBUTORS.md)**\n\n包括但不限于：\n\n- 🐳 **Docker容器化** - 部署方案优化\n- 📄 **报告导出功能** - 多格式输出支持\n- 🐛 **Bug修复** - 系统稳定性提升\n- 🔧 **代码优化** - 用户体验改进\n- 📝 **文档完善** - 使用指南和教程\n- 🌍 **社区建设** - 问题反馈和推广\n- **🌍 开源贡献**: 感谢您们选择Apache 2.0协议，给予开发者最大的自由\n- **📚 知识分享**: 感谢您们提供的详细文档和最佳实践指导\n\n**特别感谢**：[TradingAgents](https://github.com/TauricResearch/TradingAgents) 项目为我们提供了坚实的技术基础。虽然Apache 2.0协议赋予了我们使用源码的权利，但我们深知每一行代码的珍贵价值，将永远铭记并感谢您们的无私贡献。\n\n### 🇨🇳 推广使命的初心\n\n创建这个中文增强版本，我们怀着以下初心：\n\n- **🌉 技术传播**: 让优秀的TradingAgents技术在中国得到更广泛的应用\n- **🎓 教育普及**: 为中国的AI金融教育提供更好的工具和资源\n- **🤝 文化桥梁**: 在中西方技术社区之间搭建交流合作的桥梁\n- **🚀 创新推动**: 推动中国金融科技领域的AI技术创新和应用\n\n### 🌍 开源社区\n\n感谢所有为本项目贡献代码、文档、建议和反馈的开发者和用户。正是因为有了大家的支持，我们才能更好地服务中文用户社区。\n\n### 🤝 合作共赢\n\n我们承诺：\n\n- **尊重原创**: 始终尊重源项目的知识产权和开源协议\n- **反馈贡献**: 将有价值的改进和创新反馈给源项目和开源社区\n- **持续改进**: 不断完善中文增强版本，提供更好的用户体验\n- **开放合作**: 欢迎与源项目团队和全球开发者进行技术交流与合作\n\n## [感谢AIHubmix赞助，推荐llm模型使用AIHubmix](https://aihubmix.com/?aff=2rIi)\n\n<a href=\"https://aihubmix.com/?aff=2rIi\" target=\"_blank\" rel=\"noopener noreferrer\">\n  <img src=\"assets/AIHubmixlogo.png\" alt=\"AIHubMix\" width=\"220\"/>\n</a>\n\n## 📈 版本历史\n\n- **v1.0.1** (2026-04-14): 🔧 配置管理优化、AiHubMix 聚合厂家、单股同步增强与上游能力吸收 ✨ **当前版本**\n- **v1.0.0-preview** (2025-10-10): 🏗️ FastAPI + Vue 3 新架构预览版\n- **v0.1.13** (2025-08-02): 🤖 原生OpenAI支持与Google AI生态系统全面集成\n- **v0.1.12** (2025-07-29): 🧠 智能新闻分析模块与项目结构优化\n- **v0.1.11** (2025-07-27): 🤖 多LLM提供商集成与模型选择持久化\n- **v0.1.10** (2025-07-18): 🚀 Web界面实时进度显示与智能会话管理\n- **v0.1.9** (2025-07-16): 🎯 CLI用户体验重大优化与统一日志管理\n- **v0.1.8** (2025-07-15): 🎨 Web界面全面优化与用户体验提升\n- **v0.1.7** (2025-07-13): 🐳 容器化部署与专业报告导出\n- **v0.1.6** (2025-07-11): 🔧 阿里百炼修复与数据源升级\n- **v0.1.5** (2025-07-08): 📊 添加Deepseek模型支持\n- **v0.1.4** (2025-07-05): 🏗️ 架构优化与配置管理重构\n- **v0.1.3** (2025-06-28): 🇨🇳 A股市场完整支持\n- **v0.1.2** (2025-06-15): 🌐 Web界面和配置管理\n- **v0.1.1** (2025-06-01): 🧠 国产LLM集成\n\n📋 **详细更新日志**: [CHANGELOG.md](./docs/releases/CHANGELOG.md)\n\n## 📞 联系方式\n\n- **GitHub Issues**: [提交问题和建议](https://github.com/hsliuping/TradingAgents-CN/issues)\n- **邮箱**: hsliup@163.com\n- 项目ＱＱ群：1091917201\n- 项目微信公众号：TradingAgents-CN\n\n  <img src=\"assets/wexin.png\" alt=\"微信公众号\" width=\"200\"/>\n\n- **原项目**: [TauricResearch/TradingAgents](https://github.com/TauricResearch/TradingAgents)\n- **文档**: [完整文档目录](docs/)\n\n## ⚠️ 风险提示\n\n**重要声明**: 本框架仅用于研究和教育目的，不构成投资建议。\n\n- 📊 交易表现可能因多种因素而异\n- 🤖 AI模型的预测存在不确定性\n- 💰 投资有风险，决策需谨慎\n- 👨‍💼 建议咨询专业财务顾问\n\n---\n\n<div align=\"center\">\n\n**🌟 如果这个项目对您有帮助，请给我们一个 Star！**\n\n[⭐ Star this repo](https://github.com/hsliuping/TradingAgents-CN) | [🍴 Fork this repo](https://github.com/hsliuping/TradingAgents-CN/fork) | [📖 Read the docs](./docs/)\n\n</div>\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [\"setuptools>=61.0\", \"wheel\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"tradingagents\"\nversion = \"1.0.0-preview\"\ndescription = \"Add your description here\"\nreadme = \"README.md\"\nrequires-python = \">=3.10\"\ndependencies = [\n    # 后端API框架和服务器\n    \"fastapi>=0.104.0\",\n    \"uvicorn[standard]>=0.24.0\",\n    \"pydantic>=2.0.0\",\n    \"pydantic-settings>=2.0.0\",\n    \"python-multipart>=0.0.6\",\n\n    # 数据库和缓存\n    \"motor>=3.3.0\",\n    \"pymongo>=4.0.0\",\n    \"redis>=6.2.0\",\n\n    # 认证和安全\n    \"PyJWT>=2.0.0\",\n    \"bcrypt>=4.0.0\",\n\n    # 任务调度和异步\n    \"apscheduler>=3.10.0\",\n    \"aiofiles>=0.8.0\",\n\n    # HTTP客户端和SSE\n    \"httpx>=0.24.0\",\n    \"sse-starlette>=1.0.0\",\n\n    # 日志处理\n    \"concurrent-log-handler>=0.9.24\",  # Windows 友好的日志轮转处理器\n\n    # 数据源和金融数据\n    \"akshare>=1.17.86\",\n    \"baostock>=0.8.8\",\n    \"eodhd>=1.0.32\",\n    \"finnhub-python>=2.4.23\",\n    \"tushare>=1.4.21\",\n    \"yfinance>=0.2.63\",\n    \"stockstats>=0.6.5\",\n\n    # AI和LLM\n    \"chainlit>=2.5.5\",\n    \"chromadb>=1.0.12\",\n    \"dashscope>=1.20.0\",\n    \"langchain-anthropic>=0.3.15\",\n    \"langchain-core>=0.3.0\",\n    \"langchain-experimental>=0.3.4\",\n    \"langchain-google-genai>=2.1.12\",  # 修复 client_options 未定义错误\n    \"langchain-openai>=0.3.23\",\n    \"langgraph>=0.4.8\",\n    \"openai>=1.0.0,<2.0.0\",\n\n    # 数据处理和分析\n    \"pandas>=2.3.0\",\n    \"plotly>=5.0.0\",\n\n    # 网络爬虫和解析\n    \"curl-cffi>=0.6.0\",  # 模拟真实浏览器TLS指纹，绕过反爬虫检测\n    \"feedparser>=6.0.11\",\n    \"parsel>=1.10.0\",\n    \"praw>=7.8.1\",\n    \"requests>=2.32.4\",\n\n    # 文档和格式化\n    \"markdown>=3.4.0\",\n    \"pypandoc>=1.11\",\n    \"python-docx>=0.8.11\",  # Word文档处理，用于修复文本方向\n    \"pdfkit>=1.0.0\",  # PDF生成工具，需要wkhtmltopdf\n\n    # 工具和辅助\n    \"psutil>=6.1.0\",\n    \"python-dotenv>=1.0.0\",\n    \"pytz>=2025.2\",\n    \"questionary>=2.1.0\",\n    \"rich>=14.0.0\",\n    \"setuptools>=80.9.0\",\n    \"streamlit>=1.28.0\",\n    \"toml>=0.10.2\",\n    \"tqdm>=4.67.1\",\n    \"typing-extensions>=4.14.0\",\n]\n\n[project.optional-dependencies]\nqianfan = [\"qianfan>=0.4.20\"]\n\n[project.scripts]\ntradingagents = \"main:main\"\n\n[tool.setuptools.packages.find]\ninclude = [\"tradingagents*\"]\nexclude = [\"tests*\", \"docs*\", \"scripts*\", \"data*\", \"logs*\", \"reports*\", \"results*\", \"eval_results*\", \"upstream_contribution*\"]\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "llm"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "medium",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 4,
      "productize": 11,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 8,
      "total": 77
    },
    "strategic_score": 77
  },
  {
    "owner": "sherlock-project",
    "name": "sherlock",
    "full_name": "sherlock-project/sherlock",
    "url": "https://github.com/sherlock-project/sherlock",
    "description": "Hunt down social media accounts by username across social networks",
    "language": "Python",
    "total_stars": 85870,
    "forks": 10045,
    "stars_this_period": 109,
    "source_slice": "python",
    "source_slices": [
      "python"
    ],
    "metadata": {
      "topics": [
        "cli",
        "cti",
        "cybersecurity",
        "forensics",
        "hacktoberfest",
        "information-gathering",
        "infosec",
        "linux",
        "osint",
        "pentesting",
        "python",
        "python3",
        "reconnaissance",
        "redteam",
        "sherlock",
        "tools"
      ],
      "license": "MIT",
      "open_issues": 304,
      "created_at": "2018-12-24T14:30:48Z",
      "pushed_at": "2026-06-29T06:38:19Z",
      "homepage": "https://sherlockproject.xyz",
      "default_branch": "master",
      "forks": 10045,
      "watchers": 1348,
      "archived": false,
      "size_kb": 18610
    },
    "readme_content": "",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [ \"poetry-core>=1.2.0\" ]\nbuild-backend = \"poetry.core.masonry.api\"\n# poetry-core 1.8 not available in .fc39. Can upgrade to 1.8.0 at .fc39 EOL\n\n[tool.poetry-version-plugin]\nsource = \"init\"\n\n[tool.poetry]\nname = \"sherlock-project\"\nversion = \"0.16.1\"\ndescription = \"Hunt down social media accounts by username across social networks\"\nlicense = \"MIT\"\nauthors = [\n    \"Siddharth Dushantha <siddharth.dushantha@gmail.com>\"\n]\nmaintainers = [\n    \"Paul Pfeister <code@pfeister.dev>\",\n    \"Matheus Felipe <matheusfelipeog@protonmail.com>\",\n    \"Sondre Karlsen Dyrnes <sondre@villdyr.no>\"\n]\nreadme = \"docs/pyproject/README.md\"\npackages = [ { include = \"sherlock_project\"} ]\nkeywords = [ \"osint\", \"reconnaissance\", \"information gathering\" ]\nclassifiers = [\n    \"Development Status :: 5 - Production/Stable\",\n    \"Intended Audience :: Developers\",\n    \"Intended Audience :: Information Technology\",\n    \"Natural Language :: English\",\n    \"Operating System :: OS Independent\",\n    \"Programming Language :: Python :: 3\",\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    \"Topic :: Security\"\n]\nhomepage = \"https://sherlockproject.xyz/\"\nrepository = \"https://github.com/sherlock-project/sherlock\"\n\n\n[tool.poetry.urls]\n\"Bug Tracker\" = \"https://github.com/sherlock-project/sherlock/issues\"\n\n[tool.poetry.dependencies]\npython = \"^3.9\"\ncertifi = \">=2019.6.16\"\ncolorama = \"^0.4.1\"\nPySocks = \"^1.7.0\"\nrequests = \"^2.22.0\"\nrequests-futures = \"^1.0.0\"\nstem = \"^1.8.0\"\npandas = \"^2.2.1\"\nopenpyxl = \"^3.0.10\"\ntomli = \"^2.2.1\"\n\n[tool.poetry.group.dev.dependencies]\njsonschema = \"^4.0.0\"\nrstr = \"^3.2.2\"\npytest = \"^8.4.2\"\npytest-xdist = \"^3.8.0\"\n\n\n[tool.poetry.group.ci.dependencies]\ndefusedxml = \"^0.7.1\"\n\n[tool.poetry.scripts]\nsherlock = 'sherlock_project.sherlock:main'\n",
    "strategic_keywords": [],
    "relationship_label": "Skill 来源",
    "data_confidence": "medium",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 0,
      "novelty": 4,
      "productize": 14,
      "adoption": 7,
      "relation": 6,
      "risk_signal": 6,
      "total": 52
    },
    "strategic_score": 52
  },
  {
    "owner": "Unclecheng-li",
    "name": "VulnClaw",
    "full_name": "Unclecheng-li/VulnClaw",
    "url": "https://github.com/Unclecheng-li/VulnClaw",
    "description": "基于 AI Agent + MCP 工具链 + 渗透 Skill 编排， 配合大语言模型， 自然语言输入 → 自动完成「信息收集 → 漏洞发现 → 漏洞利用 → 报告生成」全流程。",
    "language": "Python",
    "total_stars": 1102,
    "forks": 169,
    "stars_this_period": 105,
    "source_slice": "all",
    "source_slices": [
      "all",
      "python"
    ],
    "metadata": {
      "topics": [
        "ai",
        "ai-agent",
        "ai-tools",
        "ctf",
        "cybersecurity",
        "openclaw",
        "penetration-testing",
        "penetration-testing-tools",
        "security-tools",
        "skill"
      ],
      "license": "MIT",
      "open_issues": 8,
      "created_at": "2026-04-18T13:02:17Z",
      "pushed_at": "2026-06-29T11:08:00Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 169,
      "watchers": 9,
      "archived": false,
      "size_kb": 3229
    },
    "readme_content": "<div align=\"center\">\n\n# VulnClaw 🦞\n\n> *AI 驱动的渗透测试 CLI 工具 — 说人话，打漏洞。*\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Python 3.10+](https://img.shields.io/badge/Python-3.10+-blue.svg)](https://www.python.org/)\n[![OpenAI Compatible](https://img.shields.io/badge/API-OpenAI_Compatible-green)](https://platform.openai.com/)\n[![MCP](https://img.shields.io/badge/Toolchain-MCP-orange)](https://modelcontextprotocol.io/)\n[![PyPI](https://img.shields.io/badge/PyPI-v0.3.2-blueviolet)](https://pypi.org/project/vulnclaw/)\n[![Security](https://img.shields.io/badge/Scope-Authorized_Only-red)](#-安全声明)\n<br>\n\n🌐 **English version**: [`README_EN.md`](README_EN.md)\n\n**本项目是可独立运行的 AI 渗透测试 Agent。**\n\n<br>\n\n基于 LLM Agent + MCP 工具链 + 渗透 Skill 编排，\n配合 OpenAI / MiniMax / DeepSeek 等兼容模型，\n自然语言输入 → 自动完成「信息收集 → 漏洞发现 → 漏洞利用 → 报告生成」全流程。\n\n[快速开始](#快速开始) · [架构设计](#️-架构) · [Skill 体系](#-内置-skill)\n\n</div>\n\n---\n\n## 它能做什么\n\n输入自然语言，AI 自动执行渗透测试全流程：\n\n```\n用户输入：帮我对 http://target.example.com 进行渗透测试\n\nVulnClaw 自动执行：\n  Round 1:  信息收集 → 指纹识别、端口扫描、目录枚举\n  Round 2:  漏洞发现 → 检测注入点、已知 CVE、配置缺陷\n  Round 3:  漏洞利用 → PoC 验证、权限获取\n  Round 4:  报告生成 → 结构化报告 + Python PoC 脚本\n```\n\n<img width=\"1148\" height=\"642\" alt=\"image\" src=\"https://github.com/user-attachments/assets/576e1cf6-25da-4969-864b-40e77d020dbf\" />\n\n\n适用于已授权的渗透测试、CTF 竞赛、安全教学、红队演练等场景。\n\n---\n\n## 特性\n\n- **目标驱动求解引擎（默认）** — 抛弃固定轮数工作流，以「目标达成 / 探索前沿耗尽 / 安全预算」为终止条件，自动收敛\n- **黑板图状态空间搜索** — 把渗透建模为从 origin 向 goal 的搜索：Fact（已确认事实）+ Intent（探索方向），结构上杜绝\"原地打转\"\n- **证据级反幻觉闸门** — 声称的 flag/结论必须在真实工具输出里逐字符出现才被采信，杜绝凭空编造 flag 的假胜利\n- **自然语言驱动** — 用人话描述渗透意图，自动识别阶段和工具\n- **13 个 LLM Provider** — OpenAI / MiniMax / DeepSeek / 智谱 / Moonshot / 千问 / SiliconFlow / 豆包 / 百川 / 阶跃星辰 / 商汤 / 零一万物，一键切换\n- **MCP 工具链** — 4 个 MCP 服务：`fetch` / `memory` 本地实现开箱即用，`chrome-devtools` / `burp` 对接外部 MCP 服务实现浏览器自动化和 HTTP 抓包重放\n- **AI Agent 核心** — OpenAI 兼容协议 + Tool Calling + 自主渗透循环\n- **结构化推理 + 自适应反思** — 已知事实/约束/攻击链结构化沉淀；失败自动归类并按 L0-L4 渐进升级 payload 绕过策略\n- **漏洞检测插件体系** — 低耦合插件运行时 + 内置只读 Web 插件，结果自动汇入报告链路（`vulnclaw plugins`）\n- **21 个渗透 Skill** — 7 核心 + 14 专项 Skill（含 CTF Web/Crypto/Misc、osint-recon、secknowledge-skill），含 180 个参考文档\n- **编解码/加解密工具** — 29 种操作（Base64/Hex/URL/AES/JWT/Morse 等），LLM 可精确调用，不再靠猜测\n- **Python 代码执行** — 内置 `python_execute` 工具，适合 payload 构造和响应解析；当前仍属高风险实验能力，不应视为强隔离沙箱\n- **持续性渗透测试** — 周期循环（默认 100 轮/周期 × 10 周期 = 1000 轮），每周期自动生成报告，直到手动终止\n- **推理过程显示控制** — `think on/off` 一键切换 LLM 思考过程的显示/隐藏，默认关闭，干净输出只看结论\n- **沙盒模式提示词** — 解锁 AI 安全测试能力，CTF / 授权渗透场景专用\n- **自动报告 & PoC** — 生成结构化 Markdown 报告和可运行的 Python PoC 脚本\n- **Web UI 模式** — `vulnclaw web` 启动本地 Web 界面，浏览器操作渗透测试全流程，默认 `127.0.0.1:7788`\n- **安全知识库** — 已内置知识库模块与基础种子数据，CLI 可维护；检索增强正在逐步接入主流程\n\n---\n\n## 架构升级：从「固定轮数工作流」到「目标驱动求解」\n\n旧版自主渗透是**固定轮数循环**（跑满 N 轮才停），在弱模型上容易陷入\"反复请求同一页面、嘴上说要测注入却不发包\"的死循环。新版把渗透重构为**状态空间搜索**，这是本次重构的核心。\n\n### 黑板图 + OODA 求解循环（默认引擎 `solve`）\n\n把渗透看作从 **origin**（目标）向 **goal**（拿到 flag / shell / 确认高危漏洞）的有向搜索，用两个原语驱动：\n\n| 原语 | 含义 |\n|------|------|\n| **Fact** | 已被真实工具输出证实的客观事实（探索的落脚点） |\n| **Intent** | 声明的探索方向（尚未执行的一步），从 Fact 出发，结论后产出新 Fact |\n\n循环结构（`vulnclaw/agent/solver.py`）：\n\n```\nREASON（读全图）→ 目标达成? / 提出新探索方向 / 不提出\n        │\nEXPLORE（领一个 Intent）→ 用工具实际执行 → 把确认的结论写回为一个 Fact\n        │\n终止：目标达成 / 探索前沿耗尽（Reason 不再提方向）/ 触达安全预算\n```\n\n**为什么结构上杜绝打转**：一旦\"首页是登录框\"成为一个 Fact，Reason 就不会再提\"去看首页\"，而是提\"测 SQL 注入\"；每个 Intent 领取一次、结论一次即标记 `concluded`/`abandoned`，**不可能重复**。终止由目标驱动，不再是数死轮数。\n\n### 证据级反幻觉闸门\n\n弱模型常凭空编造 flag。新引擎在 `solve()` 里录制**所有真实工具输出**（HTTP 响应体、`python_execute` 输出）作为唯一可信证据：\n\n- **结论闸门**：Explore 结论里声称的 flag，若未在真实工具输出里逐字符出现 → 判定幻觉、丢弃、标记 `[未验证]`。\n- **完成闸门**：Reason 宣布\"目标达成\"时，若目标要 flag 但真实输出里从无 flag → 拒绝完成、继续探索。\n- **即时收敛**：一旦拿到经证据验证的 flag，立即完成，不再空跑验证轮。\n\n> 这套机制对弱模型尤其友好：旧的固定轮数循环容易在重复请求里空转，而「目标驱动 + 证据反幻觉」会逼着 Agent 用真实工具输出一步步逼近目标，并拒绝任何无证据支撑的「完成」。\n\n### 结构化推理 + 自适应反思\n\n- **推理状态层**（`reasoning_state.py`）：已知事实（带置信度）、推理障碍（WAF/过滤等）、候选攻击链，结构化沉淀并注入提示词。\n- **反思引擎**（`reflexion.py`）：失败自动归类（环境限制/路径错误/参数错误/信息不足），按 **L0-L4 渐进升级** payload 绕过策略（原始 → URL 编码 → 双写注释 → Unicode/hex → 多层混淆/换攻击面），persistent 模式跨周期保留失败记忆。\n\n### 漏洞检测插件体系\n\n低耦合插件运行时（`vulnclaw/plugins/`）+ 内置只读 Web 插件（安全响应头 / JWT / JS 端点分析），插件结果可去重合并进 `SessionState.findings` 进入报告链路。\n\n> 切回旧的固定轮数引擎：`vulnclaw config set session.engine rounds`\n\n---\n\n## 快速开始\n\n### 安装\n\n```bash\n# 从 PyPI 安装（推荐）\npip install vulnclaw\n\n# 从源码安装\ngit clone https://github.com/Unclecheng-li/VulnClaw.git\ncd VulnClaw\npip install -e .\n```\n\n### Docker 运行（可选）\n\n镜像已内置 Web UI 以及默认 MCP 服务所需的运行时（`npx` / `uvx`），所有状态（配置、会话、目标、报告）持久化到 `/data` 数据卷。\n\n```bash\ncp .env.example .env          # 填入 VULNCLAW_LLM_API_KEY 等\ndocker compose up --build      # 构建镜像并启动 Web UI\n# 打开 http://127.0.0.1:7788\n```\n\n也可用纯 docker 运行某条 CLI 命令：\n\n```bash\ndocker run --rm -it \\\n  -e VULNCLAW_LLM_API_KEY=sk-your-key-here \\\n  -v vulnclaw-data:/data \\\n  vulnclaw:latest scan <target>\n```\n\n> ⚠️ 容器内的 `localhost` 指向容器自身。扫描宿主机服务请使用 `host.docker.internal`，扫描其它容器请共享网络并用容器名访问。详见 [DOCKER.md](DOCKER.md)。\n\n### 四步启动\n\n```bash\n# 1. 选择提供商（自动填充 Base URL 和模型名）\nvulnclaw config provider minimax   (或 openai/deepseek/zhipu/moonshot/qwen/siliconflow)\n\n# 1.2（可选）自定义 Base URL 或模型名\nvulnclaw config set llm.base_url https://your-own-api.example.com/v1 \nvulnclaw config set llm.model your-model-name\n\n# 2. 设置 API Key\nvulnclaw config set llm.api_key sk-your-key-here\n#    — 或改用 ChatGPT 订阅登录（无需 API Key）：\n#      vulnclaw login   （浏览器登录；详见 docs/keyless-auth.md，注意 ToS 风险）\n\n# 3. 默认：打开原 CLI / REPL\nvulnclaw\n\n# 4. 可选：打开 TUI 工作台\nvulnclaw tui\n```\n\n### 环境检查\n\n```bash\nvulnclaw doctor\n```\n\n输出示例：\n\n```\n🦞 VulnClaw 环境检查\n\n  Python: 3.14.4\n  Node.js: v24.14.1\n  npx: 已安装\n  nmap: 已安装\n\nLLM 配置:\n  Provider: openai\n  Auth Mode: static\n  Credentials: configured\n  Base URL: https://api.openai.com/v1\n  Model: gpt-4o\n\nMCP 服务:\n  fetch: 已启用 [P0]\n  memory: 已启用 [P0]\n  ...\n\n✅ 环境就绪，运行 vulnclaw 开始\n```\n\n---\n\n## CLI 命令速查\n\n`vulnclaw --help` 查看所有命令：\n\n```bash\n$ vulnclaw --help\n\n🦞 VulnClaw — AI-powered penetration testing CLI\n\n Usage: vulnclaw [OPTIONS] COMMAND [ARGS]...\n\n Options:\n   --version  Show version and exit.\n   --help     Show this message and exit.\n\n Commands:\n   run           🚀 一键全流程渗透测试\n   persistent    🔄 持续性渗透测试（100轮/周期）\n   recon         🔍 仅信息收集阶段\n   scan          🔎 执行漏洞扫描阶段\n   exploit       💥 执行漏洞利用阶段\n   report        📝 从会话记录生成报告\n   repl          💬 启动经典 REPL 交互界面\n   config        ⚙️  管理配置（set/get/list/provider）\n   init          🔧 初始化配置\n   doctor        🏥  检查运行环境\n   tui           🖥️  打开终端图形化工作台\n   web           🌐 启动本地 Web UI\n```\n\n### 命令详解\n\n| 命令 | 说明 | 示例 |\n|------|------|------|\n| `vulnclaw` | 默认打开原 CLI / REPL 交互界面 | `vulnclaw` |\n| `vulnclaw tui` | 显式打开终端图形化工作台 | `vulnclaw tui` / `vulnclaw tui --target target.com` |\n| `vulnclaw repl` | 启动经典 REPL 交互界面 | `vulnclaw repl` |\n| `vulnclaw solve <target>` | 目标驱动求解（无固定轮数，拿到目标即停） | `vulnclaw solve target.com --goal \"拿到flag\"` |\n| `vulnclaw run <target>` | 一键全流程渗透（默认走 solve 引擎） | `vulnclaw run 192.168.1.1` |\n| `vulnclaw persistent <target>` | 持续性渗透（100轮/周期） | `vulnclaw persistent 192.168.1.1` |\n| `vulnclaw recon <target>` | 仅信息收集（不利用漏洞） | `vulnclaw recon target.com` |\n| `vulnclaw scan <target>` | 漏洞扫描阶段 | `vulnclaw scan target.com --ports 80,443` |\n| `vulnclaw exploit <target>` | 漏洞利用阶段 | `vulnclaw exploit target.com --cve CVE-2024-1234` |\n| `vulnclaw report <session>` | 从会话 JSON 生成报告 | `vulnclaw report session_xxx.json` |\n| `vulnclaw config set <key> <value>` | 设置配置项 | `vulnclaw config set llm.api_key sk-xxx` |\n| `vulnclaw config get <key>` | 查看配置项 | `vulnclaw config get llm.model` |\n| `vulnclaw config list` | 列出所有配置 | `vulnclaw config list` |\n| `vulnclaw config provider <name>` | 切换 LLM 提供商 | `vulnclaw config provider minimax` |\n| `vulnclaw init` | 初始化配置文件 | `vulnclaw init` |\n| `vulnclaw doctor` | 检查运行环境 | `vulnclaw doctor` |\n| `vulnclaw plugins list` | 列出漏洞检测插件 | `vulnclaw plugins list --stage discovery` |\n| `vulnclaw plugins info <id>` | 查看插件元信息 | `vulnclaw plugins info builtin.web.headers` |\n| `vulnclaw plugins run <id>` | 运行插件（仅分析传入数据） | `vulnclaw plugins run builtin.web.headers --input headers.json --session s.json` |\n| `vulnclaw web` | 启动本地 Web UI | `vulnclaw web` / `vulnclaw web --port 8080` |\n\n### TUI 工作台\n\n`vulnclaw tui` 是可选的终端图形化工作台入口。它会在终端中展示授权目标、检查模式、运行概览、安全边界、命令预览、历史状态、报告和内联环境诊断，让用户先确认范围再启动任务。\n\n```bash\nvulnclaw tui\nvulnclaw tui --target https://target.example --mode quick --only-port 443\nvulnclaw tui --dry-run --target https://target.example --mode deep --only-path /admin\n```\n\n默认 `vulnclaw` 仍然进入原 CLI / REPL 交互；只有显式输入 `vulnclaw tui` 才会进入 TUI。\n运行概览会读取已选目标的历史快照、风险数量、持久化约束和约束拦截次数，帮助用户在继续测试前确认上下文没有衰减。\n在 TUI 的“设置测试范围”中可以直接编辑允许动作和禁止动作，例如只允许 `recon,scan`，或禁止 `exploit,post_exploitation`。\n\n### 配置管理\n\n```bash\n# 查看所有提供商并切换\nvulnclaw config provider --list    # 查看所有可用提供商\nvulnclaw config provider minimax   # 切换到 MiniMax\n\n# 手动设置（custom 模式）\nvulnclaw config set llm.base_url https://your-api.com/v1\nvulnclaw config set llm.model your-model-name\nvulnclaw config set llm.api_key sk-your-key\n```\n\n---\n\n## 使用方式\n\n### 方式一：原 CLI / REPL 交互模式（默认）\n\n```bash\n$ vulnclaw\n```\n\n无参数启动会进入原本的 🦞 交互界面，用自然语言对话：\n\n```\n🦞 vulnclaw> 对 192.168.1.100 进行渗透测试，这是我授权的靶场\n\n[*] 进入自主渗透模式，按 Ctrl+C 可随时中断\n── Round 1 ──\n  [+] 目标: 192.168.1.100\n  [+] 开放端口: 22, 80, 443, 8080\n```\n\n### 方式二：TUI 工作台（显式启用）\n\n```bash\n$ vulnclaw tui\n```\n\nTUI 会先展示目标、检查模式、运行概览和安全边界，让你确认授权范围后再启动任务：\n\n```text\nVulnClaw TUI 工作台\n\n授权目标        https://example.com\n检查模式        快速摸底 / recon\n运行概览        历史快照、风险数量、持久化约束、约束拦截\n安全边界        仅测试端口 443，禁止 exploit/persistent/post_exploitation\n\n1 设置授权目标\n2 选择检查模式\n3 设置测试范围\n4 开始授权安全检查\n8 模型/API 配置\n```\n\n常用启动方式：\n\n```bash\nvulnclaw tui\nvulnclaw tui --target https://target.example --mode quick --only-port 443\nvulnclaw tui --dry-run --target https://target.example --mode deep --only-path /admin\n```\n\n菜单 3 “设置测试范围”可编辑主机、端口、路径、排除项、允许动作和禁止动作；这些边界会进入启动前确认和实际任务命令。\n菜单 7 “环境诊断入口”会在 TUI 内显示 Python、Node/npx/uvx/nmap、LLM 配置和 MCP 服务/工具摘要；需要完整详情时再运行 `vulnclaw doctor`。\n菜单 8 “模型/API 配置”可直接切换 Provider、Base URL、Model 和 API Key，保存后工作台会立刻使用新配置。\n\n### 方式三：经典 REPL 子命令\n\n```bash\n$ vulnclaw repl\n```\n\n进入经典 🦞 交互界面，用自然语言对话：\n\n```\n🦞 vulnclaw> 对 192.168.1.100 进行渗透测试，这是我授权的靶场\n\n[*] 进入自主渗透模式，按 Ctrl+C 可随时中断\n── Round 1 ──\n  [+] 目标: 192.168.1.100\n  [+] 开放端口: 22, 80, 443, 8080\n  [+] Web 指纹: Apache/2.4.62\n── Round 2 ──\n  [+] 发现 /manager/html (Tomcat Manager)\n  [+] 命中 CVE-202X-XXXX: Apache Tomcat 认证绕过\n── Round 3 ──\n  [+] 漏洞验证成功\n\n🦞 192.168.1.100 | 报告> 生成渗透报告\n[+] 报告已保存: ./reports/192.168.1.100_20260418.md\n[+] PoC 脚本已保存: ./pocs/CVE-202X-XXXX.py\n```\n\n#### 经典 REPL 内置命令\n\n| 命令                  | 说明                                       |\n| --------------------- | ------------------------------------------ |\n| `target <host>`       | 设置渗透测试目标                           |\n| `status`              | 查看当前状态（目标、阶段、工具、推理显示） |\n| `tools`               | 列出当前可用 MCP 工具                      |\n| `think`               | 切换推理过程显示/隐藏                      |\n| `think on` / `off`    | 精确控制推理过程显示                       |\n| `persistent`          | 启动持续性渗透测试（100轮/周期，自动报告） |\n| `persistent <host>`   | 对指定目标启动持续性渗透                   |\n| `clear`               | 清空当前会话                               |\n| `help`                | 显示帮助信息                               |\n| `exit` / `quit` / `q` | 退出 VulnClaw                              |\n\n#### 自主渗透模式\n\nVulnClaw 检测到以下关键词 + 目标时，自动进入多轮自主渗透循环：\n\n| 触发方式 | 示例 |\n| -------- | ---- |\n| 渗透指令 | `对 http://target.com 进行渗透测试` |\n| CTF / 找 flag | `帮我对 http://ctf.site 找出flag` |\n| 爆破 / 绕过 | `对 http://target.com 弱口令爆破` |\n| **显式触发** | `目标：http://target.com，进入自主渗透模式` |\n\n> 💡 在 REPL 中输入 `Ctrl+C` 可随时中断自主循环。切换目标时自动重置会话上下文。\n\n### 方式二：单命令模式\n\n```bash\n# 一键全流程渗透测试\nvulnclaw run 192.168.1.100\n\n# 持续性渗透测试（每周期100轮，最多10周期，自动生成报告）\nvulnclaw persistent 192.168.1.100\n\n# 自定义周期参数\nvulnclaw persistent 192.168.1.100 --rounds 200 --cycles 5\n\n# 仅信息收集\nvulnclaw recon 192.168.1.100\n\n# 漏洞扫描（可指定端口）\nvulnclaw scan 192.168.1.100 --ports 80,443,8080\n\n# 漏洞利用（可指定 CVE）\nvulnclaw exploit 192.168.1.100 --cve CVE-2024-1234 --cmd id\n\n# 生成报告\nvulnclaw report session.json\n```\n\n### 方式三：持续性渗透模式\n\n适用于需要长时间深度渗透的场景。VulnClaw 以**周期循环**方式运行：\n\n```\n┌──────────────────────────────────────────────┐\n│  Cycle 1 (100轮) → 自动报告 → 继续          │\n│  Cycle 2 (100轮) → 自动报告 → 继续          │\n│  Cycle 3 (100轮) → 自动报告 → 继续          │\n",
    "manifest_file": "pyproject.toml",
    "manifest_content": "[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[project]\nname = \"vulnclaw\"\nversion = \"0.3.2\"\ndescription = \"🦞 AI-powered penetration testing CLI tool for cybersecurity professionals\"\nreadme = \"README.md\"\nlicense = { text = \"MIT\" }\nrequires-python = \">=3.10\"\nauthors = [\n    { name = \"UncleC\", email = \"iamloli@foxmail.com\" },\n]\nkeywords = [\"pentest\", \"security\", \"ai\", \"mcp\", \"cli\", \"vulnerability\", \"red-team\"]\nclassifiers = [\n    \"Development Status :: 3 - Alpha\",\n    \"Intended Audience :: Information Technology\",\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    \"Programming Language :: Python :: 3.13\",\n    \"Topic :: Security\",\n]\ndependencies = [\n    \"typer>=0.12.0\",\n    \"rich>=13.0.0\",\n    \"prompt_toolkit>=3.0.0\",\n    \"httpx>=0.27.0\",\n    \"openai>=1.30.0\",\n    \"pydantic>=2.0.0\",\n    \"pydantic-settings>=2.0.0\",\n    \"pyyaml>=6.0\",\n    \"toml>=0.10.0\",\n    \"jinja2>=3.1.0\",\n    \"textual>=0.40.0\",\n    # ── 沙箱依赖（python_execute 运行时）──────────────────────────────\n    # LLM 在 python_execute 中可直接 import 以下库\n    \"beautifulsoup4>=4.12.0\",\n    \"lxml>=4.9.0\",\n    \"pycryptodome>=3.19.0\",\n]\n\n[project.optional-dependencies]\ndev = [\n    \"pytest>=8.0\",\n    \"pytest-asyncio>=0.23\",\n    \"ruff>=0.4.0\",\n    \"build>=1.2.0\",\n]\nweb = [\n    \"fastapi>=0.115.0\",\n    \"uvicorn>=0.30.0\",\n]\nkb = [\n    \"chromadb>=0.4.0\",\n]\n\n[project.urls]\nHomepage = \"https://github.com/Unclecheng-li/VulnClaw\"\nRepository = \"https://github.com/Unclecheng-li/VulnClaw\"\nIssues = \"https://github.com/Unclecheng-li/VulnClaw/issues\"\n\n[project.scripts]\nvulnclaw = \"vulnclaw.cli.main:app\"\n\n[tool.hatch.build]\nexclude = [\n    \"/frontend/node_modules\",\n    \"/frontend/dist\",\n    \"/.test-tmp\",\n    \"/.pytest_cache\",\n    \"/dist\",\n    \"/build\",\n    \"**/__pycache__\",\n    \"**/*.pyc\",\n]\n\n[tool.hatch.build.targets.wheel]\npackages = [\"vulnclaw\"]\n\n[tool.hatch.build.targets.sdist]\ninclude = [\n    \"/vulnclaw\",\n    \"/frontend\",\n    \"/tests\",\n    \"/scripts\",\n    \"/README.md\",\n    \"/README_EN.md\",\n    \"/LICENSE\",\n    \"/CONTRIBUTING.md\",\n    \"/pyproject.toml\",\n]\nexclude = [\n    \"/frontend/node_modules\",\n    \"/frontend/dist\",\n    \"/.test-tmp\",\n    \"/.pytest_cache\",\n    \"/dist\",\n    \"/build\",\n    \"**/__pycache__\",\n    \"**/*.pyc\",\n]\n\n[tool.ruff]\nline-length = 100\ntarget-version = \"py310\"\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"I\", \"W\"]\nignore = [\"E501\"]\n\n[tool.pytest.ini_options]\nasyncio_mode = \"auto\"\ntestpaths = [\"tests\"]\n",
    "strategic_keywords": [
      "agent",
      "memory",
      "mcp",
      "skill",
      "llm",
      "protocol"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "pyproject.toml"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 11,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 83
    },
    "strategic_score": 83
  },
  {
    "owner": "fastify",
    "name": "fastify",
    "full_name": "fastify/fastify",
    "url": "https://github.com/fastify/fastify",
    "description": "Fast and low overhead web framework, for Node.js",
    "language": "JavaScript",
    "total_stars": 36703,
    "forks": 2755,
    "stars_this_period": 104,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "hacktoberfest",
        "nodejs",
        "performance",
        "speed",
        "webframework"
      ],
      "license": "MIT",
      "open_issues": 152,
      "created_at": "2016-09-28T19:10:14Z",
      "pushed_at": "2026-06-29T16:14:15Z",
      "homepage": "https://www.fastify.dev",
      "default_branch": "main",
      "forks": 2755,
      "watchers": 341,
      "archived": false,
      "size_kb": 10380
    },
    "readme_content": "<div align=\"center\"> <a href=\"https://fastify.dev/\">\n    <img\n      src=\"https://raw.githubusercontent.com/fastify/graphics/HEAD/fastify-landscape-outlined.svg\"\n      width=\"650\"\n      height=\"auto\"\n    />\n  </a>\n</div>\n\n<div align=\"center\">\n\n[![CI](https://github.com/fastify/fastify/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/fastify/fastify/actions/workflows/ci.yml)\n[![Package Manager\nCI](https://github.com/fastify/fastify/actions/workflows/package-manager-ci.yml/badge.svg?branch=main)](https://github.com/fastify/fastify/actions/workflows/package-manager-ci.yml)\n[![Web\nsite](https://github.com/fastify/fastify/actions/workflows/website.yml/badge.svg?branch=main)](https://github.com/fastify/fastify/actions/workflows/website.yml)\n[![neostandard javascript style](https://img.shields.io/badge/code_style-neostandard-brightgreen?style=flat)](https://github.com/neostandard/neostandard)\n[![CII Best Practices](https://www.bestpractices.dev/projects/7585/badge)](https://www.bestpractices.dev/en/projects/7585/passing)\n\n</div>\n\n<div align=\"center\">\n\n[![NPM\nversion](https://img.shields.io/npm/v/fastify.svg?style=flat)](https://www.npmjs.com/package/fastify)\n[![NPM\ndownloads](https://img.shields.io/npm/dm/fastify.svg?style=flat)](https://www.npmjs.com/package/fastify)\n[![Security Responsible\nDisclosure](https://img.shields.io/badge/Security-Responsible%20Disclosure-yellow.svg)](https://github.com/fastify/fastify/blob/main/SECURITY.md)\n[![Discord](https://img.shields.io/discord/725613461949906985)](https://discord.com/invite/fastify)\n[![Contribute with Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod&color=blue)](https://gitpod.io/#https://github.com/fastify/fastify)\n[![Open Collective backers and sponsors](https://img.shields.io/opencollective/all/fastify)](https://github.com/sponsors/fastify#sponsors)\n\n</div>\n\n<br />\n\nAn efficient server implies a lower cost of the infrastructure, better\nresponsiveness under load, and happy users. How can you efficiently handle the\nresources of your server, knowing that you are serving the highest number of\nrequests possible, without sacrificing security validations and handy\ndevelopment?\n\nEnter Fastify. Fastify is a web framework highly focused on providing the best\ndeveloper experience with the least overhead and a powerful plugin architecture.\nIt is inspired by Hapi and Express and as far as we know, it is one of the\nfastest web frameworks in town.\n\nThe `main` branch refers to the Fastify `v5` release.\nCheck out the [`4.x` branch](https://github.com/fastify/fastify/tree/4.x) for `v4`.\n\n### Table of Contents\n\n - [Quick start](#quick-start)\n - [Install](#install)\n - [Example](#example)\n - [Core features](#core-features)\n - [Benchmarks](#benchmarks)\n - [Documentation](#documentation)\n - [Ecosystem](#ecosystem)\n - [Support](#support)\n - [Team](#team)\n - [Hosted by](#hosted-by)\n - [License](#license)\n\n\n### Quick start\n\nCreate a folder and make it your current working directory:\n\n```sh\nmkdir my-app\ncd my-app\n```\n\nGenerate a fastify project with `npm init`:\n\n```sh\nnpm init fastify\n```\n\nInstall dependencies:\n\n```sh\nnpm i\n```\n\nTo start the app in dev mode:\n\n```sh\nnpm run dev\n```\n\nFor production mode:\n\n```sh\nnpm start\n```\n\nUnder the hood `npm init` downloads and runs [Fastify\nCreate](https://github.com/fastify/create-fastify), which in turn uses the\ngenerate functionality of [Fastify CLI](https://github.com/fastify/fastify-cli).\n\n\n### Install\n\nTo install Fastify in an existing project as a dependency:\n\n```sh\nnpm i fastify\n```\n\n### Example\n\n```js\n// Require the framework and instantiate it\n\n// ESM\nimport Fastify from 'fastify'\n\nconst fastify = Fastify({\n  logger: true\n})\n// CommonJs\nconst fastify = require('fastify')({\n  logger: true\n})\n\n// Declare a route\nfastify.get('/', (request, reply) => {\n  reply.send({ hello: 'world' })\n})\n\n// Run the server!\nfastify.listen({ port: 3000 }, (err, address) => {\n  if (err) throw err\n  // Server is now listening on ${address}\n})\n```\n\nWith async-await:\n\n```js\n// ESM\nimport Fastify from 'fastify'\n\nconst fastify = Fastify({\n  logger: true\n})\n// CommonJs\nconst fastify = require('fastify')({\n  logger: true\n})\n\nfastify.get('/', async (request, reply) => {\n  reply.type('application/json').code(200)\n  return { hello: 'world' }\n})\n\nfastify.listen({ port: 3000 }, (err, address) => {\n  if (err) throw err\n  // Server is now listening on ${address}\n})\n```\n\nDo you want to know more? Head to the <a\nhref=\"./docs/Guides/Getting-Started.md\"><code><b>Getting Started</b></code></a>.\nIf you learn best by reading code, explore the official [demo](https://github.com/fastify/demo).\n\n> ## Note\n> `.listen` binds to the local host, `localhost`, interface by default\n> (`127.0.0.1` or `::1`, depending on the operating system configuration). If\n> you are running Fastify in a container (Docker,\n> [GCP](https://cloud.google.com/), etc.), you may need to bind to `0.0.0.0`. Be\n> careful when listening on all interfaces; it comes with inherent\n> [security\n> risks](https://web.archive.org/web/20170711105010/https://snyk.io/blog/mongodb-hack-and-secure-defaults/).\n> See [the documentation](./docs/Reference/Server.md#listen) for more\n> information.\n\n### Core features\n\n- **Highly performant:** as far as we know, Fastify is one of the fastest web\n  frameworks in town, depending on the code complexity we can serve up to 76+\n  thousand requests per second.\n- **Extensible:** Fastify is fully extensible via its hooks, plugins, and\n  decorators.\n- **Schema-based:** even if it is not mandatory we recommend using [JSON\n  Schema](https://json-schema.org/) to validate your routes and serialize your\n  outputs. Internally Fastify compiles the schema in a highly performant\n  function.\n- **Logging:** logs are extremely important but are costly; we chose the best\n  logger to almost remove this cost, [Pino](https://github.com/pinojs/pino)!\n- **Developer friendly:** the framework is built to be very expressive and help\n  developers in their daily use without sacrificing performance and\n  security.\n\n### Benchmarks\n\n__Machine:__ EX41S-SSD, Intel Core i7, 4Ghz, 64GB RAM, 4C/8T, SSD.\n\n__Method__: `autocannon -c 100 -d 40 -p 10 localhost:3000` * 2, taking the\nsecond average\n\n| Framework          | Version                    | Router?      |  Requests/sec |\n| :----------------- | :------------------------- | :----------: | ------------: |\n| Express            | 4.17.3                     | &#10003;     | 14,200        |\n| hapi               | 20.2.1                     | &#10003;     | 42,284        |\n| Restify            | 8.6.1                      | &#10003;     | 50,363        |\n| Koa                | 2.13.0                     | &#10007;     | 54,272        |\n| **Fastify**        | **4.0.0**                  | **&#10003;** | **77,193**    |\n| -                  |                            |              |               |\n| `http.Server`      | 16.14.2\t                  | &#10007;     | 74,513        |\n\nThese benchmarks taken using https://github.com/fastify/benchmarks. This is a\nsynthetic \"hello world\" benchmark that aims to evaluate the framework overhead.\nThe overhead that each framework has on your application depends on your\napplication. You should __always__ benchmark if performance matters to you.\n\n## Documentation\n* [__`Getting Started`__](./docs/Guides/Getting-Started.md)\n* [__`Guides`__](./docs/Guides/Index.md)\n* [__`Server`__](./docs/Reference/Server.md)\n* [__`Routes`__](./docs/Reference/Routes.md)\n* [__`Encapsulation`__](./docs/Reference/Encapsulation.md)\n* [__`Logging`__](./docs/Reference/Logging.md)\n* [__`Middleware`__](./docs/Reference/Middleware.md)\n* [__`Hooks`__](./docs/Reference/Hooks.md)\n* [__`Decorators`__](./docs/Reference/Decorators.md)\n* [__`Validation and Serialization`__](./docs/Reference/Validation-and-Serialization.md)\n* [__`Fluent Schema`__](./docs/Guides/Fluent-Schema.md)\n* [__`Lifecycle`__](./docs/Reference/Lifecycle.md)\n* [__`Reply`__](./docs/Reference/Reply.md)\n* [__`Request`__](./docs/Reference/Request.md)\n* [__`Errors`__](./docs/Reference/Errors.md)\n* [__`Content Type Parser`__](./docs/Reference/ContentTypeParser.md)\n* [__`Plugins`__](./docs/Reference/Plugins.md)\n* [__`Testing`__](./docs/Guides/Testing.md)\n* [__`Benchmarking`__](./docs/Guides/Benchmarking.md)\n* [__`How to write a good plugin`__](./docs/Guides/Write-Plugin.md)\n* [__`Plugins Guide`__](./docs/Guides/Plugins-Guide.md)\n* [__`HTTP2`__](./docs/Reference/HTTP2.md)\n* [__`Long Term Support`__](./docs/Reference/LTS.md)\n* [__`TypeScript and types support`__](./docs/Reference/TypeScript.md)\n* [__`Serverless`__](./docs/Guides/Serverless.md)\n* [__`Recommendations`__](./docs/Guides/Recommendations.md)\n\n## Ecosystem\n\n- [Core](./docs/Guides/Ecosystem.md#core) - Core plugins maintained by the\n  _Fastify_ [team](#team).\n- [Community](./docs/Guides/Ecosystem.md#community) - Community-supported\n  plugins.\n- [Live Examples](https://github.com/fastify/example) - Multirepo with a broad\n  set of real working examples.\n- [Discord](https://discord.com/invite/D3FZYPy) - Join our discord server and\n  chat with the maintainers.\n\n## Support\nPlease visit [Fastify help](https://github.com/fastify/help) to view prior\nsupport issues and to ask new support questions.\n\nVersion 3 of Fastify and lower are EOL and will not receive any security or bug\nfixes.\n\nFastify's partner, HeroDevs, provides commercial security fixes for all\nunsupported versions at [https://herodevs.com/support/fastify-nes][hd-link].\nFastify's supported version matrix is available in the\n[Long Term Support][lts-link] documentation.\n\n## Contributing\n\nWhether reporting bugs, discussing improvements and new ideas, or writing code,\nwe welcome contributions from anyone and everyone. Please read the [CONTRIBUTING](./CONTRIBUTING.md)\nguidelines before submitting pull requests.\n\n## Team\n\n_Fastify_ is the result of the work of a great community. Team members are\nlisted in alphabetical order.\n\n**Lead Maintainers:**\n* [__Matteo Collina__](https://github.com/mcollina),\n  <https://x.com/matteocollina>, <https://www.npmjs.com/~matteo.collina>\n* [__Tomas Della Vedova__](https://github.com/delvedor),\n  <https://x.com/delvedor>, <https://www.npmjs.com/~delvedor>\n* [__KaKa Ng__](https://github.com/climba03003),\n  <https://www.npmjs.com/~climba03003>\n* [__Manuel Spigolon__](https://github.com/eomm),\n  <https://x.com/manueomm>, <https://www.npmjs.com/~eomm>\n* [__James Sumners__](https://github.com/jsumners),\n  <https://x.com/jsumners79>, <https://www.npmjs.com/~jsumners>\n\n### Fastify Core team\n* [__Aras Abbasi__](https://github.com/uzlopak),\n  <https://www.npmjs.com/~uzlopak>\n* [__Harry Brundage__](https://github.com/airhorns/),\n  <https://x.com/harrybrundage>, <https://www.npmjs.com/~airhorns>\n* [__Matteo Collina__](https://github.com/mcollina),\n  <https://x.com/matteocollina>, <https://www.npmjs.com/~matteo.collina>\n* [__Gürgün Dayıoğlu__](https://github.com/gurgunday),\n  <https://www.npmjs.com/~gurgunday>\n* [__Tomas Della Vedova__](https://github.com/delvedor),\n  <https://x.com/delvedor>, <https://www.npmjs.com/~delvedor>\n* [__Carlos Fuentes__](https://github.com/metcoder95),\n  <https://x.com/metcoder95>, <https://www.npmjs.com/~metcoder95>\n* [__Vincent Le Goff__](https://github.com/zekth)\n* [__Luciano Mammino__](https://github.com/lmammino),\n  <https://x.com/loige>, <https://www.npmjs.com/~lmammino>\n* [__Jean Michelet__](https://github.com/jean-michelet),\n  <https://www.npmjs.com/~jean-michelet>\n* [__KaKa Ng__](https://github.com/climba03003),\n  <https://www.npmjs.com/~climba03003>\n* [__Luis Orbaiceta__](https://github.com/luisorbaiceta),\n  <https://www.npmjs.com/~luisorbaiceta>\n* [__Maksim Sinik__](https://github.com/fox1t),\n  <https://x.com/maksimsinik>, <https://www.npmjs.com/~fox1t>\n* [__Manuel Spigolon__](https://github.com/eomm),\n  <https://x.com/manueomm>, <https://www.npmjs.com/~eomm>\n* [__James Sumners__](https://github.com/jsumners),\n  <https://x.com/jsumners79>, <https://www.npmjs.com/~jsumners",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"fastify\",\n  \"version\": \"5.9.0\",\n  \"description\": \"Fast and low overhead web framework, for Node.js\",\n  \"main\": \"fastify.js\",\n  \"type\": \"commonjs\",\n  \"types\": \"fastify.d.ts\",\n  \"scripts\": {\n    \"bench\": \"branchcmp -r 2 -g -s \\\"npm run benchmark\\\"\",\n    \"benchmark\": \"concurrently -k -s first \\\"node ./examples/benchmark/simple.js\\\" \\\"autocannon -c 100 -d 30 -p 10 localhost:3000/\\\"\",\n    \"benchmark:parser\": \"concurrently -k -s first \\\"node ./examples/benchmark/parser.js\\\" \\\"autocannon -c 100 -d 30 -p 10 -i ./examples/benchmark/body.json -H \\\"content-type:application/jsoff\\\" -m POST localhost:3000/\\\"\",\n    \"benchmark:parser:error\": \"concurrently -k -s first \\\"node ./examples/benchmark/parser.js\\\" \\\"autocannon -c 100 -d 30 -p 10 -i ./examples/benchmark/body.json -H \\\"content-type:application/jsoff\\\" -H \\\"content-length:123\\\" -m POST localhost:3000/\\\"\",\n    \"build:validation\": \"node build/build-error-serializer.js && node build/build-validation.js\",\n    \"build:sync-version\": \"node build/sync-version.js\",\n    \"coverage\": \"c8 --reporter html borp --reporter=@jsumners/line-reporter\",\n    \"coverage:ci-check-coverage\": \"borp --reporter=@jsumners/line-reporter --coverage --check-coverage --lines 100\",\n    \"lint\": \"npm run lint:eslint\",\n    \"lint:fix\": \"eslint --fix\",\n    \"lint:markdown\": \"markdownlint-cli2\",\n    \"lint:eslint\": \"eslint\",\n    \"prepublishOnly\": \"cross-env PREPUBLISH=true borp --reporter=@jsumners/line-reporter && npm run test:validator:integrity && npm run build:sync-version\",\n    \"test\": \"npm run lint && npm run unit && npm run test:types\",\n    \"test:ci\": \"npm run unit && npm run test:types\",\n    \"test:report\": \"npm run lint && npm run unit:report && npm run test:types\",\n    \"test:validator:integrity\": \"npm run build:validation && git diff --quiet --ignore-all-space --ignore-blank-lines --ignore-cr-at-eol lib/error-serializer.js && git diff --quiet --ignore-all-space --ignore-blank-lines --ignore-cr-at-eol lib/config-validator.js\",\n    \"test:types\": \"tstyche\",\n    \"test:watch\": \"npm run unit -- --watch --coverage-report=none --reporter=terse\",\n    \"unit\": \"borp\",\n    \"unit:report\": \"c8 --reporter html borp --reporter=@jsumners/line-reporter\",\n    \"citgm\": \"borp --reporter=@jsumners/line-reporter --coverage --check-coverage --concurrency=1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/fastify/fastify.git\"\n  },\n  \"keywords\": [\n    \"web\",\n    \"framework\",\n    \"json\",\n    \"schema\",\n    \"open\",\n    \"api\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"contributors\": [\n    {\n      \"name\": \"Tomas Della Vedova\",\n      \"url\": \"https://delvedor.dev\",\n      \"author\": true\n    },\n    {\n      \"name\": \"Tommaso Allevi\",\n      \"email\": \"tomallevi@gmail.com\"\n    },\n    {\n      \"name\": \"Ethan Arrowood\",\n      \"url\": \"https://github.com/Ethan-Arrowood\",\n      \"email\": \"ethan.arrowood@gmail.com\"\n    },\n    {\n      \"name\": \"Dustin Deus\",\n      \"url\": \"https://starptech.com\",\n      \"email\": \"deusdustin@gmail.com\"\n    },\n    {\n      \"name\": \"Ayoub El Khattabi\",\n      \"url\": \"https://github.com/AyoubElk\",\n      \"email\": \"elkhattabi.ayoub@gmail.com\"\n    },\n    {\n      \"name\": \"Rafael Gonzaga\",\n      \"email\": \"rafael.nunu@hotmail.com\",\n      \"url\": \"https://github.com/rafaelgss\"\n    },\n    {\n      \"name\": \"Trivikram Kamat\",\n      \"url\": \"https://trivikr.github.io\",\n      \"email\": \"trivikr.dev@gmail.com\"\n    },\n    {\n      \"name\": \"Luciano Mammino\",\n      \"url\": \"https://loige.co\"\n    },\n    {\n      \"name\": \"Cemre Mengu\",\n      \"email\": \"cemremengu@gmail.com\"\n    },\n    {\n      \"name\": \"Evan Shortiss\",\n      \"email\": \"evanshortiss@gmail.com\"\n    },\n    {\n      \"name\": \"Maksim Sinik\",\n      \"url\": \"https://maksim.dev\"\n    },\n    {\n      \"name\": \"Manuel Spigolon\",\n      \"email\": \"behemoth89@gmail.com\"\n    },\n    {\n      \"name\": \"James Sumners\",\n      \"url\": \"https://james.sumners.info\"\n    },\n    {\n      \"name\": \"Denis Fäcke\",\n      \"url\": \"https://github.com/SerayaEryn\"\n    },\n    {\n      \"name\": \"Igor Savin\",\n      \"email\": \"kibertoad@gmail.com\",\n      \"url\": \"https://github.com/kibertoad\"\n    },\n    {\n      \"name\": \"Vincent Le Goff\",\n      \"email\": \"vince.legoff@gmail.com\",\n      \"url\": \"https://github.com/zekth\"\n    },\n    {\n      \"name\": \"Luis Orbaiceta\",\n      \"email\": \"luisorbaiceta@gmail.com\",\n      \"url\": \"https://luisorbaiceta.com\"\n    },\n    {\n      \"name\": \"Carlos Fuentes\",\n      \"email\": \"me@metcoder.dev\",\n      \"url\": \"https://metcoder.dev\"\n    },\n    {\n      \"name\": \"Gürgün Dayıoğlu\",\n      \"email\": \"hey@gurgun.day\",\n      \"url\": \"https://heyhey.to/G\"\n    },\n    {\n      \"name\": \"Aras Abbasi\",\n      \"email\": \"aras.abbasi@gmail.com\"\n    },\n    {\n      \"name\": \"Frazer Smith\",\n      \"email\": \"frazer.dev@icloud.com\",\n      \"url\": \"https://github.com/fdawgs\"\n    },\n    {\n      \"name\": \"KaKa Ng\",\n      \"email\": \"kaka@kakang.dev\",\n      \"url\": \"https://github.com/climba03003\"\n    },\n    {\n      \"name\": \"Jean Michelet\",\n      \"email\": \"jean.antoine.michelet@gmail.com\"",
    "strategic_keywords": [
      "workflow"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 8,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 6,
      "total": 68
    },
    "strategic_score": 68
  },
  {
    "owner": "ollama",
    "name": "ollama",
    "full_name": "ollama/ollama",
    "url": "https://github.com/ollama/ollama",
    "description": "Get up and running with Kimi-K2.6, GLM-5.1, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.",
    "language": "Go",
    "total_stars": 175154,
    "forks": 16765,
    "stars_this_period": 102,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "deepseek",
        "gemma",
        "gemma3",
        "glm",
        "go",
        "golang",
        "gpt-oss",
        "llama",
        "llama3",
        "llm",
        "llms",
        "minimax",
        "mistral",
        "ollama",
        "qwen"
      ],
      "license": "MIT",
      "open_issues": 3504,
      "created_at": "2023-06-26T19:39:32Z",
      "pushed_at": "2026-06-29T20:10:00Z",
      "homepage": "https://ollama.com",
      "default_branch": "main",
      "forks": 16765,
      "watchers": 982,
      "archived": false,
      "size_kb": 89544
    },
    "readme_content": "<p align=\"center\">\n  <a href=\"https://ollama.com\">\n    <img src=\"https://github.com/ollama/ollama/assets/3325447/0d0b44e2-8f4a-4e99-9b52-a5c1c741c8f7\" alt=\"ollama\" width=\"200\"/>\n  </a>\n</p>\n\n# Ollama\n\nStart building with open models.\n\n## Download\n\n### macOS\n\n```shell\ncurl -fsSL https://ollama.com/install.sh | sh\n```\n\nor [download manually](https://ollama.com/download/Ollama.dmg)\n\n### Windows\n\n```shell\nirm https://ollama.com/install.ps1 | iex\n```\n\nor [download manually](https://ollama.com/download/OllamaSetup.exe)\n\n### Linux\n\n```shell\ncurl -fsSL https://ollama.com/install.sh | sh\n```\n\n[Manual install instructions](https://docs.ollama.com/linux#manual-install)\n\n### Docker\n\nThe official [Ollama Docker image](https://hub.docker.com/r/ollama/ollama) `ollama/ollama` is available on Docker Hub.\n\n### Libraries\n\n- [ollama-python](https://github.com/ollama/ollama-python)\n- [ollama-js](https://github.com/ollama/ollama-js)\n\n### Community\n\n- [Discord](https://discord.gg/ollama)\n- [𝕏 (Twitter)](https://x.com/ollama)\n- [Reddit](https://reddit.com/r/ollama)\n\n## Get started\n\n```\nollama\n```\n\nYou'll be prompted to run a model or connect Ollama to your existing agents or applications such as `Claude Code`, `OpenClaw`, `OpenCode` , `Codex`, `Copilot`,  and more.\n\n### Coding\n\nTo launch a specific integration:\n\n```\nollama launch claude\n```\n\nSupported integrations include [Claude Code](https://docs.ollama.com/integrations/claude-code), [Codex](https://docs.ollama.com/integrations/codex), [Copilot CLI](https://docs.ollama.com/integrations/copilot-cli), [Droid](https://docs.ollama.com/integrations/droid), and [OpenCode](https://docs.ollama.com/integrations/opencode).\n\n### AI assistant\n\nUse [OpenClaw](https://docs.ollama.com/integrations/openclaw) to turn Ollama into a personal AI assistant across WhatsApp, Telegram, Slack, Discord, and more:\n\n```\nollama launch openclaw\n```\n\n### Chat with a model\n\nRun and chat with [Gemma 4](https://ollama.com/library/gemma4):\n\n```\nollama run gemma4\n```\n\nSee [ollama.com/library](https://ollama.com/library) for the full list.\n\nSee the [quickstart guide](https://docs.ollama.com/quickstart) for more details.\n\n## REST API\n\nOllama has a REST API for running and managing models.\n\n```\ncurl http://localhost:11434/api/chat -d '{\n  \"model\": \"gemma4\",\n  \"messages\": [{\n    \"role\": \"user\",\n    \"content\": \"Why is the sky blue?\"\n  }],\n  \"stream\": false\n}'\n```\n\nSee the [API documentation](https://docs.ollama.com/api) for all endpoints.\n\n### Python\n\n```\npip install ollama\n```\n\n```python\nfrom ollama import chat\n\nresponse = chat(model='gemma4', messages=[\n  {\n    'role': 'user',\n    'content': 'Why is the sky blue?',\n  },\n])\nprint(response.message.content)\n```\n\n### JavaScript\n\n```\nnpm i ollama\n```\n\n```javascript\nimport ollama from \"ollama\";\n\nconst response = await ollama.chat({\n  model: \"gemma4\",\n  messages: [{ role: \"user\", content: \"Why is the sky blue?\" }],\n});\nconsole.log(response.message.content);\n```\n\n## Supported backends\n\n- [llama.cpp](https://github.com/ggml-org/llama.cpp) project founded by Georgi Gerganov.\n\n## Documentation\n\n- [CLI reference](https://docs.ollama.com/cli)\n- [REST API reference](https://docs.ollama.com/api)\n- [Importing models](https://docs.ollama.com/import)\n- [Modelfile reference](https://docs.ollama.com/modelfile)\n- [Building from source](https://github.com/ollama/ollama/blob/main/docs/development.md)\n\n## Community Integrations\n\n> Want to add your project? Open a pull request.\n\n### Chat Interfaces\n\n#### Web\n\n- [Open WebUI](https://github.com/open-webui/open-webui) - Extensible, self-hosted AI interface\n- [Onyx](https://github.com/onyx-dot-app/onyx) - Connected AI workspace\n- [LibreChat](https://github.com/danny-avila/LibreChat) - Enhanced ChatGPT clone with multi-provider support\n- [Lobe Chat](https://github.com/lobehub/lobe-chat) - Modern chat framework with plugin ecosystem ([docs](https://lobehub.com/docs/self-hosting/examples/ollama))\n- [NextChat](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web) - Cross-platform ChatGPT UI ([docs](https://docs.nextchat.dev/models/ollama))\n- [Perplexica](https://github.com/ItzCrazyKns/Perplexica) - AI-powered search engine, open-source Perplexity alternative\n- [big-AGI](https://github.com/enricoros/big-AGI) - AI suite for professionals\n- [Lollms WebUI](https://github.com/ParisNeo/lollms-webui) - Multi-model web interface\n- [ChatOllama](https://github.com/sugarforever/chat-ollama) - Chatbot with knowledge bases\n- [Bionic GPT](https://github.com/bionic-gpt/bionic-gpt) - On-premise AI platform\n- [Chatbot UI](https://github.com/ivanfioravanti/chatbot-ollama) - ChatGPT-style web interface\n- [Hollama](https://github.com/fmaclen/hollama) - Minimal web interface\n- [Chatbox](https://github.com/Bin-Huang/Chatbox) - Desktop and web AI client\n- [chat](https://github.com/swuecho/chat) - Chat web app for teams\n- [Ollama RAG Chatbot](https://github.com/datvodinh/rag-chatbot.git) - Chat with multiple PDFs using RAG\n- [Tkinter-based client](https://github.com/chyok/ollama-gui) - Python desktop client\n\n#### Desktop\n\n- [Dify.AI](https://github.com/langgenius/dify) - LLM app development platform\n- [AnythingLLM](https://github.com/Mintplex-Labs/anything-llm) - All-in-one AI app for Mac, Windows, and Linux\n- [Maid](https://github.com/Mobile-Artificial-Intelligence/maid) - Cross-platform mobile and desktop client\n- [Witsy](https://github.com/nbonamy/witsy) - AI desktop app for Mac, Windows, and Linux\n- [Cherry Studio](https://github.com/kangfenmao/cherry-studio) - Multi-provider desktop client\n- [Ollama App](https://github.com/JHubi1/ollama-app) - Multi-platform client for desktop and mobile\n- [PyGPT](https://github.com/szczyglis-dev/py-gpt) - AI desktop assistant for Linux, Windows, and Mac\n- [Alpaca](https://github.com/Jeffser/Alpaca) - GTK4 client for Linux and macOS\n- [SwiftChat](https://github.com/aws-samples/swift-chat) - Cross-platform including iOS, Android, and Apple Vision Pro\n- [Enchanted](https://github.com/AugustDev/enchanted) - Native macOS and iOS client\n- [RWKV-Runner](https://github.com/josStorer/RWKV-Runner) - Multi-model desktop runner\n- [Ollama Grid Search](https://github.com/dezoito/ollama-grid-search) - Evaluate and compare models\n- [macai](https://github.com/Renset/macai) - macOS client for Ollama and ChatGPT\n- [AI Studio](https://github.com/MindWorkAI/AI-Studio) - Multi-provider desktop IDE\n- [Reins](https://github.com/ibrahimcetin/reins) - Parameter tuning and reasoning model support\n- [ConfiChat](https://github.com/1runeberg/confichat) - Privacy-focused with optional encryption\n- [LLocal.in](https://github.com/kartikm7/llocal) - Electron desktop client\n- [MindMac](https://mindmac.app) - AI chat client for Mac\n- [Msty](https://msty.app) - Multi-model desktop client\n- [BoltAI for Mac](https://boltai.com) - AI chat client for Mac\n- [IntelliBar](https://intellibar.app/) - AI-powered assistant for macOS\n- [Kerlig AI](https://www.kerlig.com/) - AI writing assistant for macOS\n- [Hillnote](https://hillnote.com) - Markdown-first AI workspace\n- [Perfect Memory AI](https://www.perfectmemory.ai/) - Productivity AI personalized by screen and meeting history\n\n#### Mobile\n\n- [Ollama Android Chat](https://github.com/sunshine0523/OllamaServer) - One-click Ollama on Android\n\n> SwiftChat, Enchanted, Maid, Ollama App, Reins, and ConfiChat listed above also support mobile platforms.\n\n### Code Editors & Development\n\n- [Cline](https://github.com/cline/cline) - VS Code extension for multi-file/whole-repo coding\n- [Continue](https://github.com/continuedev/continue) - Open-source AI code assistant for any IDE\n- [Void](https://github.com/voideditor/void) - Open source AI code editor, Cursor alternative\n- [Copilot for Obsidian](https://github.com/logancyang/obsidian-copilot) - AI assistant for Obsidian\n- [twinny](https://github.com/rjmacarthy/twinny) - Copilot and Copilot chat alternative\n- [gptel Emacs client](https://github.com/karthink/gptel) - LLM client for Emacs\n- [Ollama Copilot](https://github.com/bernardo-bruning/ollama-copilot) - Use Ollama as GitHub Copilot\n- [Obsidian Local GPT](https://github.com/pfrankov/obsidian-local-gpt) - Local AI for Obsidian\n- [Ellama Emacs client](https://github.com/s-kostyaev/ellama) - LLM tool for Emacs\n- [orbiton](https://github.com/xyproto/orbiton) - Config-free text editor with Ollama tab completion\n- [AI ST Completion](https://github.com/yaroslavyaroslav/OpenAI-sublime-text) - Sublime Text 4 AI assistant\n- [VT Code](https://github.com/vinhnx/vtcode) - Rust-based terminal coding agent with Tree-sitter\n- [QodeAssist](https://github.com/Palm1r/QodeAssist) - AI coding assistant for Qt Creator\n- [AI Toolkit for VS Code](https://aka.ms/ai-tooklit/ollama-docs) - Microsoft-official VS Code extension\n- [Open Interpreter](https://docs.openinterpreter.com/language-model-setup/local-models/ollama) - Natural language interface for computers\n\n### Libraries & SDKs\n\n- [LiteLLM](https://github.com/BerriAI/litellm) - Unified API for 100+ LLM providers\n- [Semantic Kernel](https://github.com/microsoft/semantic-kernel/tree/main/python/semantic_kernel/connectors/ai/ollama) - Microsoft AI orchestration SDK\n- [LangChain4j](https://github.com/langchain4j/langchain4j) - Java LangChain ([example](https://github.com/langchain4j/langchain4j-examples/tree/main/ollama-examples/src/main/java))\n- [LangChainGo](https://github.com/tmc/langchaingo/) - Go LangChain ([example](https://github.com/tmc/langchaingo/tree/main/examples/ollama-completion-example))\n- [Spring AI](https://github.com/spring-projects/spring-ai) - Spring framework AI support ([docs](https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html))\n- [LangChain](https://python.langchain.com/docs/integrations/chat/ollama/) and [LangChain.js](https://js.langchain.com/docs/integrations/chat/ollama/) with [example](https://js.langchain.com/docs/tutorials/local_rag/)\n- [Ollama for Ruby](https://github.com/crmne/ruby_llm) - Ruby LLM library\n- [any-llm](https://github.com/mozilla-ai/any-llm) - Unified LLM interface by Mozilla\n- [OllamaSharp for .NET](https://github.com/awaescher/OllamaSharp) - .NET SDK\n- [LangChainRust](https://github.com/Abraxas-365/langchain-rust) - Rust LangChain ([example](https://github.com/Abraxas-365/langchain-rust/blob/main/examples/llm_ollama.rs))\n- [Agents-Flex for Java](https://github.com/agents-flex/agents-flex) - Java agent framework ([example](https://github.com/agents-flex/agents-flex/tree/main/agents-flex-llm/agents-flex-llm-ollama/src/test/java/com/agentsflex/llm/ollama))\n- [Elixir LangChain](https://github.com/brainlid/langchain) - Elixir LangChain\n- [Ollama-rs for Rust](https://github.com/pepperoni21/ollama-rs) - Rust SDK\n- [LangChain for .NET](https://github.com/tryAGI/LangChain) - .NET LangChain ([example](https://github.com/tryAGI/LangChain/blob/main/examples/LangChain.Samples.OpenAI/Program.cs))\n- [chromem-go](https://github.com/philippgille/chromem-go) - Go vector database with Ollama embeddings ([example](https://github.com/philippgille/chromem-go/tree/v0.5.0/examples/rag-wikipedia-ollama))\n- [LangChainDart](https://github.com/davidmigloz/langchain_dart) - Dart LangChain\n- [LlmTornado](https://github.com/lofcz/llmtornado) - Unified C# interface for multiple inference APIs\n- [Ollama4j for Java](https://github.com/ollama4j/ollama4j) - Java SDK\n- [Ollama for Laravel](https://github.com/cloudstudio/ollama-laravel) - Laravel integration\n- [Ollama for Swift](https://github.com/mattt/ollama-swift) - Swift SDK\n- [LlamaIndex](https://docs.llamaindex.ai/en/stable/examples/llm/ollama/) and [LlamaIndexTS](https://ts.llamaindex.ai/modules/llms/available_llms/ollama) - Data framework for LLM apps\n- [Haystack](https://github.com/deepset-ai/haystack-integrations/blob/main/integrations/ollama.md) - AI pipeline framework\n- [Firebase Genkit](https://firebase.google.com/docs/genkit/plugins/ollama) - Google AI framework\n- [Ollama-hpp for C++](https://github.com/jmont-dev/ollama-hpp) - C++ SDK\n- [PromptingTools.jl](https://github.com/svilupp/Pro",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/ollama/ollama\n\ngo 1.26.0\n\nrequire (\n\tgithub.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf\n\tgithub.com/containerd/console v1.0.3\n\tgithub.com/gin-gonic/gin v1.10.0\n\tgithub.com/golang/protobuf v1.5.4 // indirect\n\tgithub.com/google/go-cmp v0.7.0\n\tgithub.com/google/uuid v1.6.0\n\tgithub.com/ledongthuc/pdf v0.0.0-20250511090121-5959a4027728\n\tgithub.com/mattn/go-sqlite3 v1.14.24\n\tgithub.com/olekukonko/tablewriter v0.0.5\n\tgithub.com/spf13/cobra v1.7.0\n\tgithub.com/stretchr/testify v1.10.0\n\tgithub.com/x448/float16 v0.8.4\n\tgolang.org/x/sync v0.17.0\n\tgolang.org/x/sys v0.37.0\n)\n\nrequire (\n\tgithub.com/agnivade/levenshtein v1.1.1\n\tgithub.com/charmbracelet/bubbletea v1.3.10\n\tgithub.com/charmbracelet/lipgloss v1.1.0\n\tgithub.com/d4l3k/go-bfloat16 v0.0.0-20211005043715-690c3bdd05f1\n\tgithub.com/dlclark/regexp2 v1.11.5\n\tgithub.com/emirpasic/gods/v2 v2.0.0-alpha\n\tgithub.com/klauspost/compress v1.18.3\n\tgithub.com/mattn/go-runewidth v0.0.16\n\tgithub.com/nlpodyssey/gopickle v0.3.0\n\tgithub.com/pdevine/tensor v0.0.0-20240510204454-f88f4562727c\n\tgithub.com/pelletier/go-toml/v2 v2.2.2\n\tgithub.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c\n\tgithub.com/tkrajina/typescriptify-golang-structs v0.2.0\n\tgithub.com/tree-sitter/go-tree-sitter v0.25.0\n\tgithub.com/tree-sitter/tree-sitter-cpp v0.23.4\n\tgithub.com/wk8/go-ordered-map/v2 v2.1.8\n\tgolang.org/x/image v0.22.0\n\tgolang.org/x/mod v0.30.0\n\tgolang.org/x/tools v0.38.0\n\tgonum.org/v1/gonum v0.15.0\n)\n\nrequire (\n\tgithub.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40 // indirect\n\tgithub.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect\n\tgithub.com/bahlo/generic-list-go v0.2.0 // indirect\n\tgithub.com/buger/jsonparser v1.1.1 // indirect\n\tgithub.com/bytedance/sonic/loader v0.1.1 // indirect\n\tgithub.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect\n\tgithub.com/charmbracelet/x/ansi v0.10.1 // indirect\n\tgithub.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect\n\tgithub.com/charmbracelet/x/term v0.2.1 // indirect\n\tgithub.com/chewxy/hm v1.0.0 // indirect\n\tgithub.com/chewxy/math32 v1.11.0 // indirect\n\tgithub.com/cloudwego/base64x v0.1.4 // indirect\n\tgithub.com/cloudwego/iasm v0.2.0 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect\n\tgithub.com/gogo/protobuf v1.3.2 // indirect\n\tgithub.com/google/flatbuffers v24.3.25+incompatible // indirect\n\tgithub.com/kr/text v0.2.0 // indirect\n\tgithub.com/lucasb-eyer/go-colorful v1.2.0 // indirect\n\tgithub.com/mailru/easyjson v0.7.7 // indirect\n\tgithub.com/mattn/go-localereader v0.0.1 // indirect\n\tgithub.com/mattn/go-pointer v0.0.1 // 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/pkg/errors v0.9.1 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/rivo/uniseg v0.4.7 // indirect\n\tgithub.com/tkrajina/go-reflector v0.5.5 // indirect\n\tgithub.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect\n\tgithub.com/xtgo/set v1.0.0 // indirect\n\tgo4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect\n\tgolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect\n\tgorgonia.org/vecf32 v0.9.0 // indirect\n\tgorgonia.org/vecf64 v0.9.0 // indirect\n)\n\nrequire (\n\tgithub.com/bytedance/sonic v1.11.6 // indirect\n\tgithub.com/gabriel-vasile/mimetype v1.4.3 // indirect\n\tgithub.com/gin-contrib/cors v1.7.2\n\tgithub.com/gin-contrib/sse v0.1.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/go-playground/validator/v10 v10.20.0 // indirect\n\tgithub.com/goccy/go-json v0.10.2 // indirect\n\tgithub.com/inconshreveable/mousetrap v1.1.0 // indirect\n\tgithub.com/json-iterator/go v1.1.12 // indirect\n\tgithub.com/klauspost/cpuid/v2 v2.2.7 // indirect\n\tgithub.com/leodido/go-urn v1.4.0 // 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/spf13/pflag v1.0.5 // indirect\n\tgithub.com/twitchyliquid64/golang-asm v0.15.1 // indirect\n\tgithub.com/ugorji/go/codec v1.2.12 // indirect\n\tgolang.org/x/arch v0.8.0 // indirect\n\tgolang.org/x/crypto v0.43.0\n\tgolang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect\n\tgolang.org/x/net v0.46.0 // indirect\n\tgolang.org/x/term v0.36.0\n\tgolang.org/x/text v0.30.0\n\tgoogle.golang.org/protobuf v1.34.1\n\tgopkg.in/yaml.v3 v3.0.1\n)\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "workspace",
      "llm"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 85
    },
    "strategic_score": 85
  },
  {
    "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": 41841,
    "forks": 7806,
    "stars_this_period": 101,
    "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": 90,
      "created_at": "2023-02-09T19:16:57Z",
      "pushed_at": "2026-06-29T18:30:19Z",
      "homepage": "https://docs.sanaei.dev/",
      "default_branch": "main",
      "forks": 7806,
      "watchers": 273,
      "archived": false,
      "size_kb": 51157
    },
    "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\n\nThe installer also runs **non-interactively** for cloud-init.\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- [Hetzner Cloud notes](deploy/marketplace/hetzner/) — cloud-init deployment on Hetzner\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.72.0\n\tgithub.com/xlzd/gotp v0.1.0\n\tgithub.com/xtls/xray-core v1.260327.1-0.20260627131803-45cf2898ab12\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.2\n\tpgregory.net/rapid v1.3.0\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.4 // 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.47 // 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.4.2 // indirect\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/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/wlynxg/anet 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.7.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.47.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\tgolang.zx2c4.com/wireguard/windows v1.0.1 // indirect\n\tgoogle.golang.org/genproto/googleapis/rpc v0.0.0-20",
    "strategic_keywords": [
      "rag",
      "workflow",
      "protocol"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 15,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 9,
      "risk_signal": 8,
      "total": 87
    },
    "strategic_score": 87
  },
  {
    "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": 3782,
    "forks": 411,
    "stars_this_period": 101,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "backlink-analysis",
        "google-search-console-mcp",
        "keyword-research",
        "mcp",
        "seo",
        "seo-tools",
        "site-audit"
      ],
      "license": "MIT",
      "open_issues": 6,
      "created_at": "2026-02-27T18:57:41Z",
      "pushed_at": "2026-06-29T00:13:07Z",
      "homepage": "https://openseo.so",
      "default_branch": "main",
      "forks": 411,
      "watchers": 22,
      "archived": false,
      "size_kb": 18979
    },
    "readme_content": "# OpenSEO\n\n> Open source alternative to Semrush and Ahrefs\n\nOpenSEO is an SEO tool for _the people_. If tools like Semrush or Ahrefs are too expensive or bloated, OpenSEO is a pay-as-you-go alternative that you actually control.\n\n> All-in-one SEO tool for you and your AI agent.\n\nConnect with any agent like Claude Code, OpenClaw or Hermes. We have pre-built skills, but you can build your own to tailor OpenSEO to your needs.\n\n<img width=\"1385\" height=\"794\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/fd208249-44ea-4849-bb4b-5fc896aeab73\" />\n\n## Table of Contents\n\n- [Why use OpenSEO?](#why-use-openseo)\n- [Main SEO Workflows](#main-seo-workflows)\n- [OpenSEO MCP](#openseo-mcp)\n- [OpenSEO Agent Skills](#openseo-agent-skills)\n- [Roadmap](#roadmap)\n- [Community](#community)\n- [Pricing / Costs (Free + API costs)](#pricing--costs)\n- [DataForSEO API Key Setup](#dataforseo-api-key-setup)\n- [Google Search Console](#google-search-console)\n- [Self-hosting](#self-hosting)\n  - [Docker Self Hosting](#docker-self-hosting)\n  - [Cloudflare Self-Hosting](#cloudflare-self-hosting)\n- [Local Development](#local-development)\n- [Contributing](#contributing)\n- [SEO API Cost Reference](#seo-api-cost-reference)\n\n## Hosted Version\n\nIf you're not interested in self hosting, or just want to support the project, we also have a hosted version:\n\n[openseo.so](https://openseo.so)\n\n## Why use OpenSEO?\n\n- Best in class MCP and AI Skills.\n- Modern, simple UI.\n  - Focused workflows instead of a bloated, complex SEO suite.\n- No subscriptions.\n  - Bring your own DataForSEO API key and pay only for what you use.\n- Fork and vibe code your own custom tool.\n\n## Main SEO Workflows\n\n- Keyword research\n- Rank tracking\n- Competitor Insights\n- Backlinks\n- Site Audits\n- AI Visibility\n\n## Community\n\nJoin Discord to chat: [Discord](https://discord.gg/c9uGs3cFXr)\n\nFollow along for updates:\n\n- Follow on X: https://x.com/bensenescu\n- Sign up for the mailing list on our website: [openseo.so](https://openseo.so)\n\n## OpenSEO MCP\n\nOpenSEO exposes an MCP server so AI agents can use your SEO data directly.\n\nConnect Claude Code, OpenClaw, Hermes or any other agent.\n\n### Setup\n\n- Set up the app\n- Click \"AI & Agents\" in the header\n- Follow the instructions to connect to your agent\n\n## OpenSEO Agent Skills\n\nOpenSEO Agent Skills are reusable workflows for your agent\n\nThey guide your agent through SEO tasks and use the OpenSEO MCP so your agent makes better recommendations.\n\n### Available Skills\n\n- `seo-project-setup`\n- `seo-coach`\n- `keyword-research`\n- `keyword-clustering`\n- `competitive-landscape`\n- `competitor-analysis`\n- `link-prospecting`\n\n### Installation Guide\n\nRead our docs for how to install the skills:\n\nhttps://openseo.so/docs/skills/setup\n\n## Roadmap\n\nTop priorities:\n\n- Improved and Scheduled Site Audits\n- Custom Reports for Clients\n- Local SEO\n- In App AI Agent\n\nOur top priority is always refining the current product and making existing features better based on user feedback.\n\nIf something important is missing, please join the [Discord](https://discord.gg/c9uGs3cFXr) or email me at ben@openseo.so and request it.\n\n## Pricing / Costs\n\nOpenSEO is totally free to use. It works by using DataForSEO's APIs, which is a paid third-party service unaffiliated with OpenSEO.\n\nThere are two separate things:\n\n1. OpenSEO app cost: $0, you host it yourself.\n2. DataForSEO API: pay-as-you-go based on usage.\n\nFor cost estimates, see [DataForSEO API Cost Reference](#seo-api-cost-reference).\n\n## DataForSEO API Key Setup\n\nOpenSEO uses DataForSEO to fetch SEO data. You need an API key to connect OpenSEO to the service.\n\n1. Go to [DataForSEO API Access](https://app.dataforseo.com/api-access?aff=255379).\n2. Click \"Send by email\" to get set your credentials.\n3. Copy the longer crendentials labelled \"Base64\" credentials.\n4. Set this as `DATAFORSEO_API_KEY` in your environment file:\n\n- Docker self-hosting: `.env`\n- Cloudflare: Set it in the workers UI\n- Local development: `.env.local`\n\n## Google Search Console\n\nSearch Console is optional and works in self-hosted deployments using your own\nGoogle OAuth client. It takes ~10 minutes of one-time setup — see\n[`docs/SELF_HOSTING_GOOGLE_SEARCH_CONSOLE.md`](./docs/SELF_HOSTING_GOOGLE_SEARCH_CONSOLE.md).\n\n## Self-hosting\n\nOpenSEO supports two self-hosting paths:\n\n- Docker for personal use and testing (Recommended for local use).\n- Cloudflare for internet-facing self-hosting across multiple devices or for your team.\n\n_Docker_\n\nDocker is recommended for getting started. It's super easy to get up and running once you install Docker.\n\n_Cloudflare_\n\nIf you love OpenSEO and want to use it across multiple devices or with your team, you can host it on Cloudflare which we'll be a SaaS-like experience. Also, this will have automatic database backups and other nice convenience features. It's just a bit more effort to get started if you're unfamiliar with Cloudflare.\n\n## Docker Self Hosting\n\n> [!WARNING]\n> By default, the Docker version is intended for local use only. It runs in single-user mode with no authentication. For internet-facing self-hosting, use Cloudflare (free plan compatible). Or read [`docs/SELF_HOSTING_DOCKER.md`](./docs/SELF_HOSTING_DOCKER.md) before exposing to the internet.\n\nPrerequisites:\n\n- Install Docker: https://www.docker.com/products/docker-desktop/\n\nQuickstart:\n\n1. `cp .env.example .env`\n2. Set `DATAFORSEO_API_KEY` in `.env`\n3. `docker compose up -d`\n4. Open `http://localhost:<PORT>` (default `3001`)\n\nTo update to the newest published image, pull first and then restart:\n\n```sh\ndocker compose pull\ndocker compose up -d\n```\n\nFor more info, see [`docs/SELF_HOSTING_DOCKER.md`](./docs/SELF_HOSTING_DOCKER.md).\n\n## Cloudflare Self-Hosting\n\n### Deploy the Worker\n\nClicking this button opens a page to deploy OpenSEO in your Cloudflare account. If you do not have an account yet, it will take you to account creation first (OpenSEO works great on the free plan).\n\nReference these docs while deploying since the Cloudflare UI doesn't indicate what steps you need to take: [`docs/SELF_HOSTING_CLOUDFLARE.md`](./docs/SELF_HOSTING_CLOUDFLARE.md).\n\n[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/every-app/open-seo)\n\n## Local Development\n\nSee [`docs/LOCAL_DEVELOPMENT.md`](./docs/LOCAL_DEVELOPMENT.md).\n\n## Contributing\n\nContributions are very welcome.\n\n- Open an issue for bugs, UX friction, or feature requests.\n- Open a PR if you want to implement a feature directly.\n- Community-driven improvements are prioritized, and high-quality PRs are encouraged.\n\nIf you want to contribute but are unsure where to start, open an issue and describe what you want to build.\n\n## SEO API Cost Reference\n\nUse this section to estimate DataForSEO spend per request type. OpenSEO itself remains free; these are API usage costs only.\n\nAs of February 26, 2026, DataForSEO’s public docs/pricing pages say:\n\n- New accounts include **$1 free credit** to test the API.\n- The minimum top-up/payment is **$50**.\n\nThat means you can try OpenSEO for free with the starter credit, then decide if/when to top up.\n\n### Planning examples\n\n- Track 100 keywords weekly at depth 50: `~$1.20/month`\n- 100 keyword research requests at the default 150 results: `$3.50`\n- 100 keyword research requests at 500 results each: `$7.00`\n- 100 domain overviews (200 ranked keywords each): `$4.01`\n- 100 backlinks domain searches at current defaults before opening extra tabs: about `$6.34`\n- 100 backlinks page searches at current defaults before opening extra tabs: about `$4.30`\n- 100 fully explored backlinks domain searches: about `$10.94`\n- 100 fully explored backlinks page searches: about `$8.61`\n\n### Pricing sources\n\n- DataForSEO SERP API pricing: https://dataforseo.com/apis/serp-api/pricing\n- DataForSEO Keywords Data API pricing: https://dataforseo.com/pricing/dataforseo-labs/dataforseo-google-api\n- DataForSEO Backlinks pricing: https://dataforseo.com/pricing/backlinks/backlinks\n- DataForSEO Lighthouse API docs: https://docs.dataforseo.com/v3/on_page/lighthouse/overview/\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"open-seo\",\n  \"private\": true,\n  \"sideEffects\": false,\n  \"version\": \"0.0.22\",\n  \"type\": \"module\",\n  \"packageManager\": \"pnpm@10.30.1\",\n  \"scripts\": {\n    \"dev\": \"vite dev\",\n    \"dev:clear-chat\": \"rm -rf .wrangler/state/v3/do/open-seo-OnboardingChatAgent\",\n    \"dev:agents\": \"mkdir -p .logs && portless run vite dev 2>&1 | tee .logs/dev-server.log\",\n    \"dev:agents:force\": \"mkdir -p .logs && portless --force run vite dev 2>&1 | tee .logs/dev-server.log\",\n    \"build\": \"vite build && tsc --noEmit\",\n    \"lint\": \"oxlint . --type-aware\",\n    \"lint:fix\": \"oxlint . --type-aware --fix\",\n    \"preview\": \"npm run build && vite preview --port 3001\",\n    \"deploy\": \"npm run db:migrate:prod && npm run build && wrangler deploy\",\n    \"sourcemaps:upload\": \"POSTHOG_SOURCEMAPS=true NODE_OPTIONS=--max-old-space-size=8192 npm run build && pnpm dlx @posthog/cli sourcemap inject --directory ./dist-sourcemaps && pnpm dlx @posthog/cli sourcemap upload --directory ./dist-sourcemaps\",\n    \"cf-typegen\": \"wrangler types\",\n    \"types:check\": \"tsc --noEmit\",\n    \"format:check\": \"prettier --check .\",\n    \"format:write\": \"prettier . --write\",\n    \"auth:generate\": \"pnpm dlx auth@latest generate --config ./cli-auth.ts --adapter drizzle --dialect sqlite --output ./src/db/better-auth-schema.ts\",\n    \"db:generate\": \"drizzle-kit generate\",\n    \"db:migrate:local\": \"wrangler d1 migrations apply DB --local\",\n    \"db:migrate:prod\": \"wrangler d1 migrations apply DB --remote\",\n    \"knip\": \"knip\",\n    \"release:notes\": \"node scripts/release-notes.mjs\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"test:ci\": \"vitest run --reporter=dot\",\n    \"test:e2e\": \"playwright test\",\n    \"test:e2e:domain\": \"playwright test e2e/domain-overview-filters.spec.ts\",\n    \"test:e2e:domain:perf\": \"playwright test e2e/domain-overview-filters.perf.spec.ts\",\n    \"test:e2e:keywords\": \"playwright test e2e/keyword-research-navigation.spec.ts\",\n    \"billing:backlinks\": \"tsx scripts/backlinks-cost-profile.ts\",\n    \"billing:brand-lookup\": \"tsx scripts/brand-lookup-cost-profile.ts\",\n    \"cleanup:default-projects:d1\": \"tsx scripts/d1-default-project-cleanup.ts\",\n    \"seed:rank-tracking\": \"tsx scripts/seed-rank-tracking.ts\",\n    \"ci:check\": \"prettier --check . && knip && tsc --noEmit && oxlint . --type-aware\"\n  },\n  \"cloudflare\": {\n    \"bindings\": {\n      \"AUTH_MODE\": {\n        \"description\": \"Set to `cloudflare_access` for secured deployments behind Cloudflare Access, or `local_noauth` for trusted local self-host mode only.\"\n      },\n      \"TEAM_DOMAIN\": {\n        \"description\": \"Cloudflare Access team domain (for example `https://your-team.cloudflareaccess.com`) used to validate `cf-access-jwt-assertion` JWTs.\"\n      },\n      \"POLICY_AUD\": {\n        \"description\": \"Cloudflare Access Application Audience (AUD) tag for this Worker route/domain.\"\n      },\n      \"DATAFORSEO_API_KEY\": {\n        \"description\": \"Base64-encoded `login:password` for DataForSEO API access.\"\n      },\n      \"OAUTH_KV\": {\n        \"description\": \"KV namespace used by the Cloudflare Workers OAuth provider for MCP client registrations, grants, and tokens.\"\n      }\n    }\n  },\n  \"dependencies\": {\n    \"@ai-sdk/react\": \"^3.0.201\",\n    \"@cloudflare/ai-chat\": \"^0.8.4\",\n    \"@cloudflare/workers-oauth-provider\": \"^0.4.0\",\n    \"@every-app/sdk\": \"^0.1.14\",\n    \"@modelcontextprotocol/sdk\": \"1.29.0\",\n    \"@openrouter/ai-sdk-provider\": \"^2.9.0\",\n    \"@tanstack/query-core\": \"^5.90.9\",\n    \"@tanstack/react-form\": \"^1.25.0\",\n    \"@tanstack/react-query\": \"^5.90.9\",\n    \"@tanstack/react-router\": \"^1.168.10\",\n    \"@tanstack/react-router-devtools\": \"^1.166.11\",\n    \"@tanstack/react-start\": \"^1.167.16\",\n    \"@tanstack/react-table\": \"^8.21.3\",\n    \"agents\": \"0.15.0\",\n    \"ai\": \"^6.0.199\",\n    \"autumn-js\": \"^1.1.7\",\n    \"better-auth\": \"^1.5.5\",\n    \"cheerio\": \"^1.2.0\",\n    \"cloudflare\": \"^5.2.0\",\n    \"daisyui\": \"^5.5.5\",\n    \"dataforseo-client\": \"^2.0.19\",\n    \"drizzle-orm\": \"^0.44.4\",\n    \"fast-xml-parser\": \"^5.4.1\",\n    \"jose\": \"^6.0.12\",\n    \"lucide-react\": \"^0.542.0\",\n    \"papaparse\": \"^5.5.3\",\n    \"posthog-js\": \"^1.363.5\",\n    \"posthog-node\": \"^5.28.5\",\n    \"react\": \"^19.0.0\",\n    \"react-dom\": \"^19.0.0\",\n    \"react-markdown\": \"^10.1.0\",\n    \"recharts\": \"^3.7.0\",\n    \"remark-gfm\": \"^4.0.1\",\n    \"remeda\": \"^2.33.6\",\n    \"robots-parser\": \"^3.0.1\",\n    \"sonner\": \"^2.0.7\",\n    \"tailwindcss\": \"^4.1.16\",\n    \"tldts\": \"^7.0.25\",\n    \"zod\": \"^4.1.12\"\n  },\n  \"devDependencies\": {\n    \"@cloudflare/vite-plugin\": \"^1.40.2\",\n    \"@cloudflare/workers-types\": \"^4.20260611.1\",\n    \"@libsql/client\": \"^0.15.15\",\n    \"@playwright/test\": \"^1.59.1\",\n    \"@tailwindcss/vite\": \"^4.1.11\",\n    \"@tanstack/devtools-vite\": \"^0.6.0\",\n    \"@tanstack/react-devtools\": \"^0.10.1\",\n    \"@types/node\": \"^22.18.13\",\n    \"@types/papaparse\": \"^5.5.2\",\n    \"@types/react\": \"^19.0.8\",\n    \"@types/react-dom\": \"^19.0.3\",\n    \"@vitejs/plugin-react\": \"^4.6.0\",\n    \"drizzle-kit\": \"^0.31.4\",\n    \"knip\": \"^5.66.4\",\n    \"oxlint\": \"^1.50.0\",\n    \"oxlint-tsgolint\": \"^0.1",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "skill",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 20,
      "novelty": 11,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 84
    },
    "strategic_score": 84
  },
  {
    "owner": "logto-io",
    "name": "logto",
    "full_name": "logto-io/logto",
    "url": "https://github.com/logto-io/logto",
    "description": "🧑‍🚀 Authentication and authorization infrastructure for SaaS and AI apps, built on OIDC and OAuth 2.1 with multi-tenancy, SSO, and RBAC.",
    "language": "TypeScript",
    "total_stars": 12604,
    "forks": 862,
    "stars_this_period": 77,
    "source_slice": "all",
    "source_slices": [
      "all",
      "typescript"
    ],
    "metadata": {
      "topics": [
        "authentication",
        "authorization",
        "email",
        "identity",
        "jwt",
        "login",
        "logto",
        "mfa",
        "oauth2",
        "openid-connect",
        "password",
        "passwordless",
        "rbac",
        "saml",
        "signup",
        "sms",
        "social-login",
        "sso",
        "totp",
        "typescript"
      ],
      "license": "MPL-2.0",
      "open_issues": 183,
      "created_at": "2021-06-19T03:01:50Z",
      "pushed_at": "2026-06-29T14:09:33Z",
      "homepage": "https://logto.io",
      "default_branch": "master",
      "forks": 862,
      "watchers": 55,
      "archived": false,
      "size_kb": 113171
    },
    "readme_content": "<p align=\"center\">\n  <a href=\"https://logto.io/?utm_source=github&utm_medium=readme\" target=\"_blank\" align=\"center\" alt=\"Go to Logto website\">\n    <picture>\n      <source width=\"200\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/logto-io/.github/raw/master/profile/logto-logo-dark.svg\">\n      <source width=\"200\" media=\"(prefers-color-scheme: light)\" srcset=\"https://github.com/logto-io/.github/raw/master/profile/logto-logo-light.svg\">\n      <img width=\"200\" src=\"https://github.com/logto-io/logto/raw/master/logo.png\" alt=\"Logto logo\">\n    </picture>\n  </a>\n</p>\n\n[![discord](https://img.shields.io/discord/965845662535147551?color=5865f2&label=discord)](https://discord.gg/vRvwuwgpVX)\n[![checks](https://img.shields.io/github/checks-status/logto-io/logto/master)](https://github.com/logto-io/logto/actions?query=branch%3Amaster)\n[![release](https://img.shields.io/github/v/release/logto-io/logto?color=3a3c3f)](https://github.com/logto-io/logto/releases)\n[![core coverage](https://img.shields.io/codecov/c/github/logto-io/logto?label=core%20coverage)](https://app.codecov.io/gh/logto-io/logto)\n[![cloud](https://img.shields.io/badge/cloud-available-7958ff)](https://cloud.logto.io/?sign_up=true&utm_source=github&utm_medium=repo_logto)\n[![gitpod](https://img.shields.io/badge/gitpod-available-f09439)](https://gitpod.io/#https://github.com/logto-io/demo)\n[![render](https://img.shields.io/badge/render-deploy-5364e9)](https://render.com/deploy?repo=https://github.com/logto-io/logto)\n\n# Logto\n\n**Logto is the modern, open-source auth infrastructure for SaaS and AI apps.**\n\nIt takes the pain out of OIDC and OAuth 2.1 and makes it easy to build secure, production-ready auth with multi-tenancy, enterprise SSO, and RBAC.\n\n<p align=\"center\">\n  <a href=\"https://logto.io/\">website</a> •\n  <a href=\"https://cloud.logto.io/\">cloud</a> •\n  <a href=\"https://docs.logto.io\">docs</a> •\n  <a href=\"https://openapi.logto.io/\">api</a> •\n  <a href=\"https://blog.logto.io/\">blog</a> •\n  <a href=\"https://auth-wiki.logto.io/\">auth wiki</a> •\n  <a href=\"https://logto.io/subscribe\">newsletter</a>\n</p>\n\n![Logto features](./assets/logto-features.png)\n\n## Why Logto?\n\nBuilt for teams scaling SaaS, AI, and agent-based platforms without the usual auth headaches.\n\nWith Logto, you get:\n\n- **Multi-tenancy, enterprise SSO, and RBAC**: ready to use, no workarounds.\n- **Pre-built sign-in flows**, customizable UIs, and SDKs for 30+ frameworks.\n- **Full support for OIDC, OAuth 2.1, and SAML** without the protocol pain.\n- **Works out-of-the-box for Model Context Protocol and agent-based AI architectures**.\n\n[🗺️ See all features →](https://docs.logto.io/?ref=readme)\n\n## Get started\n\nPick your path:\n\n- [**Logto Cloud**](https://cloud.logto.io/?sign_up=true&ref=readme): The fastest way to try Logto. Fully managed, zero setup.\n- [**Launch Logto in GitPod**](https://gitpod.io/#https://github.com/logto-io/demo): Start Logto OSS in seconds.\n\n  Wait for the message `App is running at https://3002-...gitpod.io`, then click the URL starting with `https://3002-` to continue.\n\n- **Local development:**  \n\n  ```bash\n  # Using Docker Compose(requires Docker Desktop)\n  curl -fsSL https://raw.githubusercontent.com/logto-io/logto/HEAD/docker-compose.yml | \\\n  docker compose -p logto -f - up\n  \n  # Using Node.js (requires PostgreSQL)\n  npm init @logto\n  ```\n\n[📚 Full OSS installation guide →](https://docs.logto.io/logto-oss/get-started-with-oss?ref=readme)\n\n## Integrate anywhere\n\nLogto supports all your apps, APIs, and services with industry-standard protocols.\n\n- **SDKs for 30+ frameworks**: React, Next.js, Angular, Vue, Flutter, Go, Python, and more.\n- **Connect to any IdP**: Google, Facebook, Azure AD, Okta, and more.\n- **Flexible integration**: SPAs, web apps, mobile apps, APIs, M2M, CLI tools.\n- **Ready for Model Context Protocol and agent-based architectures**.\n\n[🚀 Explore quick starts →](https://docs.logto.io/quick-starts?ref=readme)\n\n[🔌 See all connectors →](https://docs.logto.io/integrations?ref=readme)\n\n## Showcase\n\n**Developer-first SDKs**: Install in minutes with clear guides.\n\n![Logto auth SDK showcase](./assets/showcase-logto-auth-sdks.gif)\n\n**User-friendly auth flows**: Sign-up, sign-in, social login, Google One Tap, MFA, SSO.\n\n![Logto sign-in experience showcase](./assets/showcase-logto-sign-in-exeperience.gif)\n\n**Multi-tenancy & organizations**: Organization RBAC, member invites, just-in-time provisioning, and more.\n\n![Logto multi-tenancy showcase](./assets/showcase-logto-multi-tenancy.gif)\n\n## Support Logto\n\nIf you find Logto helpful, here's how you can support us:\n\n- ⭐ **Star this repo** to show your support!\n- 💬 [Join our Discord](https://discord.gg/vRvwuwgpVX) for live discussions.\n- 📢 Share Logto on [Twitter](https://twitter.com/intent/tweet?text=Hey%20devs%21%20Need%20a%20better%20auth%20solution%3F%20Check%20out%20%40logto_io%20%E2%80%94%20it%E2%80%99s%20like%20Auth0%2FCognito%2FFirebase%20but%20open-source%2C%20modern%2C%20and%20way%20easier%20to%20use%21%20Supports%20OIDC%2C%20OAuth%202.0%2C%20SAML%2C%20and%20also%20works%20perfectly%20for%20SaaS%20apps.%20%E2%9C%A8%20https%3A%2F%2Flogto.io%20%23Auth%20%23Identity%20%23OpenSource%20%23DevTools), [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Flogto.io), [Reddit](https://reddit.com/submit?url=https%3A%2F%2Flogto.io&title=Tired%20of%20Auth0%2FCognito%2FFirebase%3F%20Logto%20is%20the%20open-source%20auth%20alternative%20you%E2%80%99ve%20been%20missing%21%20Supports%20OIDC%2C%20OAuth%202.0%2C%20SAML%2C%20and%20works%20like%20magic%20for%20modern%20apps%20and%20SaaS%20products.), [Telegram](https://t.me/share/url?url=https%3A%2F%2Flogto.io&text=Check%20out%20Logto%20%E2%80%94%20the%20better%20auth%20and%20identity%20infrastructure%21%20Open-source%2FCloud%20alternative%20to%20Auth0%2C%20Cognito%2C%20and%20Firebase.%20Supports%20all%20the%20standards%20%28OIDC%2C%20OAuth%2C%20SAML%29%20and%20is%20perfect%20for%20modern%20apps%20or%20SaaS%20products.%20https%3A%2F%2Flogto.io), [WhatsApp](https://api.whatsapp.com/send?text=Hey%21%20%F0%9F%91%8B%20Found%20this%20awesome%20auth%20tool%20called%20%2ALogto%2A%20%E2%80%94%20it%E2%80%99s%20open-source%2C%20way%20simpler%20than%20Auth0%2FCognito%2FFirebase%2C%20and%20supports%20OIDC%2FOAuth%2FSAML.%20Perfect%20for%20building%20CIAM%20system%20without%20the%20hassle.%20You%20gotta%20try%20it%3A%20https%3A%2F%2Flogto.io).\n- 🏆 Write a review or tutorial on [dev.to](https://dev.to/logto), [Medium](https://medium.com/@logto), [G2](https://www.g2.com/products/logto/reviewer_verification) or your blog.\n- 💬 [Share your use case](mailto:contact@logto.io?subject=[Share%20Logto%20User%20Story]) with us and get featured on the [Logto website](https://logto.io/).\n- 🙋 [Open an issue](https://github.com/logto-io/logto/issues/new) to report bugs or suggest features.\n- 💻 [Contribute to Logto](https://github.com/logto-io/logto/blob/master/.github/CONTRIBUTING.md) - we'd love your help! Check out [Logto awesome](https://github.com/logto-io/logto/blob/master/AWESOME.md) of community-contributed resources.\n\n## Licensing\n\n[MPL-2.0](LICENSE).\n\n<p align=\"right\">\n⬆️ <a href=\"#logto\">Back to top</a>\n</p>\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"@logto/root\",\n  \"private\": true,\n  \"license\": \"MPL-2.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"preinstall\": \"npx only-allow pnpm\",\n    \"pnpm:devPreinstall\": \"cd packages/connectors && node templates/sync-preset.js\",\n    \"prepare\": \"if test \\\"$NODE_ENV\\\" != \\\"production\\\" && test \\\"$CI\\\" != \\\"true\\\" ; then husky ; fi\",\n    \"prepack\": \"pnpm -r prepack\",\n    \"dev\": \"pnpm -r prepack && pnpm start:dev\",\n    \"dev:cloud\": \"IS_CLOUD=1 CONSOLE_PUBLIC_URL=/ pnpm dev\",\n    \"start:dev\": \"pnpm -r --parallel --filter=!@logto/root --filter=!@logto/integration-tests --filter \\\"!./packages/connectors/connector-*\\\" dev\",\n    \"start\": \"cd packages/core && npm start\",\n    \"cli\": \"logto\",\n    \"translate\": \"logto-translate\",\n    \"changeset\": \"changeset\",\n    \"alteration\": \"logto db alt\",\n    \"connectors\": \"pnpm -r --filter \\\"./packages/connectors/connector-*\\\"\",\n    \"//\": \"# `changeset version` won't run version lifecycle scripts, see https://github.com/changesets/changesets/issues/860\",\n    \"ci:version\": \"changeset version && pnpm -r version\",\n    \"ci:build\": \"pnpm -r build\",\n    \"ci:lint\": \"pnpm -r --parallel --workspace-concurrency=0 lint\",\n    \"ci:stylelint\": \"pnpm -r --parallel --workspace-concurrency=0 stylelint\",\n    \"ci:test\": \"pnpm -r --parallel --workspace-concurrency=0 test:ci && pnpm test:scripts\",\n    \"test:scripts\": \"node .scripts/compare-database.test.js\",\n    \"test:integration\": \"./.scripts/integration/run.sh\"\n  },\n  \"devDependencies\": {\n    \"@changesets/cli\": \"^2.26.2\",\n    \"@commitlint/cli\": \"^19.0.0\",\n    \"@commitlint/config-conventional\": \"^19.0.0\",\n    \"@commitlint/types\": \"^19.0.0\",\n    \"@types/pg\": \"^8.6.6\",\n    \"husky\": \"^9.0.0\",\n    \"pg\": \"^8.8.0\",\n    \"tsup\": \"^8.5.1\",\n    \"typescript\": \"^5.0.0\",\n    \"vite\": \"^6.2.7\"\n  },\n  \"engines\": {\n    \"node\": \"^22.14.0\",\n    \"pnpm\": \"^9.0.0 || ^10.0.0\"\n  },\n  \"pnpm\": {\n    \"overrides\": {\n      \"@babel/core@<=7.29.0\": \"^7.29.6\",\n      \"@opentelemetry/core@<2.8.0\": \"^2.8.0\",\n      \"@smithy/config-resolver@<4.4.0\": \"^4.4.0\",\n      \"@tootallnate/once@<3.0.1\": \"^3.0.1\",\n      \"@xmldom/xmldom@<0.8.13\": \"^0.8.13\",\n      \"ajv@<6.14.0\": \"^6.14.0\",\n      \"ajv@>=7.0.0-alpha.0 <8.18.0\": \"^8.18.0\",\n      \"axios@<1.15.2\": \"^1.15.2\",\n      \"basic-ftp@<=5.2.2\": \"^5.3.0\",\n      \"brace-expansion@<1.1.13\": \"^1.1.13\",\n      \"brace-expansion@>=2.0.0 <2.0.3\": \"^2.0.3\",\n      \"brace-expansion@>=4.0.0 <5.0.6\": \"^5.0.6\",\n      \"cross-spawn@<6.0.6\": \"^6.0.6\",\n      \"diff@>=6.0.0 <8.0.3\": \"^8.0.3\",\n      \"dompurify@<3.4.9\": \"^3.4.9\",\n      \"esbuild\": \"^0.25.0\",\n      \"fast-xml-parser@>=4.0.0-beta.0 <5.5.7\": \"^5.5.7\",\n      \"flatted@<=3.4.1\": \"^3.4.2\",\n      \"follow-redirects@<=1.15.11\": \"^1.16.0\",\n      \"form-data@<2.5.6\": \"^2.5.6\",\n      \"form-data@>=4.0.0 <4.0.6\": \"^4.0.6\",\n      \"formidable@<3.5.4\": \"^3.5.4\",\n      \"immutable@>=4.0.0-rc.1 <4.3.8\": \"^4.3.8\",\n      \"ip-address@<=10.1.0\": \"^10.1.1\",\n      \"joi@<17.13.4\": \"^17.13.4\",\n      \"js-yaml@>=4.0.0 <4.2.0\": \"^4.2.0\",\n      \"koa@<2.16.4\": \"^2.16.4\",\n      \"lodash@<=4.17.23\": \"^4.18.0\",\n      \"lodash-es@<=4.17.23\": \"^4.18.0\",\n      \"mermaid@<=10.9.5\": \"^10.9.6\",\n      \"micromatch@<4.0.8\": \"^4.0.8\",\n      \"minimatch@<3.1.4\": \"^3.1.4\",\n      \"minimatch@>=5.0.0 <5.1.8\": \"^5.1.8\",\n      \"minimatch@>=9.0.0 <9.0.7\": \"^9.0.7\",\n      \"nanoid@>=4.0.0 <5.0.9\": \"^5.0.9\",\n      \"node-forge@<1.4.0\": \"^1.4.0\",\n      \"nodemailer@<=8.0.8\": \"^8.0.9\",\n      \"path-to-regexp@>=8.0.0 <8.4.0\": \"^8.4.0\",\n      \"picomatch@<2.3.2\": \"^2.3.2\",\n      \"picomatch@>=4.0.0 <4.0.4\": \"^4.0.4\",\n      \"playwright@<1.55.1\": \"^1.55.1\",\n      \"postcss@<8.5.10\": \"^8.5.10\",\n      \"prismjs@<1.30.0\": \"^1.30.0\",\n      \"qs@>=6.11.1 <6.15.2\": \"^6.15.2\",\n      \"react-router@>=6.7.0 <6.30.4\": \"^6.30.4\",\n      \"react-router-dom@>=6.7.0 <6.30.4\": \"^6.30.4\",\n      \"rollup@>=4.0.0 <4.59.0\": \"^4.59.0\",\n      \"shell-quote@>=1.1.0 <=1.8.3\": \"^1.8.4\",\n      \"tar@<=7.5.15\": \"^7.5.16\",\n      \"tmp@<0.2.6\": \"^0.2.6\",\n      \"uuid@<11.1.1\": \"^11.1.1\",\n      \"vite@<=6.4.2\": \"^6.4.3\",\n      \"ws@>=7.0.0 <7.5.11\": \"^7.5.11\",\n      \"ws@>=8.0.0 <8.21.0\": \"^8.21.0\",\n      \"yaml@>=2.0.0 <2.8.3\": \"^2.8.3\"\n    },\n    \"peerDependencyRules\": {\n      \"allowedVersions\": {\n        \"react\": \"^18.0.0\",\n        \"jest\": \"^29.1.2\",\n        \"stylelint\": \"^16.0.0\"\n      }\n    }\n  },\n  \"dependencies\": {\n    \"@logto/cli\": \"workspace:^\",\n    \"@logto/translate\": \"workspace:^\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "rag",
      "protocol"
    ],
    "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": 8,
      "total": 92
    },
    "strategic_score": 92
  },
  {
    "owner": "Gentleman-Programming",
    "name": "gentle-ai",
    "full_name": "Gentleman-Programming/gentle-ai",
    "url": "https://github.com/Gentleman-Programming/gentle-ai",
    "description": "",
    "language": "Go",
    "total_stars": 4469,
    "forks": 525,
    "stars_this_period": 73,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [],
      "license": "MIT",
      "open_issues": 233,
      "created_at": "2026-02-27T23:28:01Z",
      "pushed_at": "2026-06-29T21:04:34Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 525,
      "watchers": 42,
      "archived": false,
      "size_kb": 22374
    },
    "readme_content": "<div align=\"center\">\n\n<img width=\"3276\" height=\"1280\" alt=\"Gentle-AI neon rose banner\" src=\"docs/assets/brand/gentle-ai-banner.png\" />\n\n<h1>Gentle-AI</h1>\n\n<p><strong>Gentle-AI — Ecosystem, Frameworks, Workflows for AI coding agents.</strong></p>\n\n<p>\n<a href=\"https://github.com/Gentleman-Programming/gentle-ai/releases\"><img src=\"https://img.shields.io/github/v/release/Gentleman-Programming/gentle-ai\" alt=\"Release\"></a>\n<a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"License: MIT\"></a>\n<img src=\"https://img.shields.io/badge/Go-1.24+-00ADD8?logo=go&logoColor=white\" alt=\"Go 1.24+\">\n<img src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey\" alt=\"Platform\">\n</p>\n\n</div>\n\n---\n\n## What It Does\n\nGentle-AI is NOT an AI agent installer. Most agents are easy to install. It is an **ecosystem configurator** -- it takes whatever AI coding agent(s) you use and supercharges them with persistent memory, Spec-Driven Development workflows, curated coding skills, MCP servers, an AI provider switcher, a teaching-oriented persona with security-first permissions, and per-phase model assignment so each SDD step can run on a different model.\n\n**Before**: \"I installed Claude Code / OpenCode / Cursor, but it's just a chatbot that writes code.\"\n\n**After**: Your agent now has memory, skills, workflow, MCP tools, and a persona that actually teaches you.\n\n### 15 Supported Agents\n\n| Agent               |         Delegation Model         | Key Feature                                                     |\n| ------------------- | :------------------------------: | --------------------------------------------------------------- |\n| **Claude Code**     |         Full (Task tool)         | Sub-agents, output styles                                       |\n| **OpenCode**        |    Full (multi-mode overlay)     | Per-phase model routing                                         |\n| **Kilo Code**       |    Full (multi-mode overlay)     | OpenCode-compatible config in `~/.config/kilo`                  |\n| **Gemini CLI**      |       Full (experimental)        | Custom agents in `~/.gemini/agents/`                            |\n| **Cursor**          |     Full (native subagents)      | 10 SDD agents in `~/.cursor/agents/`                            |\n| **VS Code Copilot** |        Full (runSubagent)        | Parallel execution                                              |\n| **Codex**           |            Solo-agent            | CLI-native, TOML config                                         |\n| **Windsurf**        |            Solo-agent            | Plan Mode, Code Mode, native workflows                          |\n| **Antigravity**     |   Solo-agent + Mission Control   | Built-in Browser/Terminal sub-agents                            |\n| **Kimi Code**       |   Full (native custom agents)    | Modular prompt templates in `~/.kimi`                           |\n| **Kiro IDE**        |     Full (native subagents)      | Native `~/.kiro/agents/` + steering orchestration               |\n| **Qwen Code**       |     Full (native sub-agents)     | Slash commands, `~/.qwen/commands/`, `auto_edit` mode           |\n| **OpenClaw**        |            Solo-agent            | Workspace-first `AGENTS.md` / `SOUL.md` with global MCP config  |\n| **Trae**            |            Solo-agent            | Desktop app by ByteDance; `~/.trae/skills/` + OS-specific rules |\n| **Pi**              | Full (package-managed subagents) | `gentle-pi` harness with persona/model commands + Engram memory |\n| **Hermes**          |         Detect-only              | YAML MCP config, SOUL.md persona; install manually first        |\n\n> **Note**: This project supersedes [Agent Teams Lite](https://github.com/Gentleman-Programming/agent-teams-lite) (now archived). Everything ATL provided is included here with better installation, automatic updates, and persistent memory.\n\n### Delegation Triggers\n\nGentle-AI keeps the parent/orchestrator thread thin. Once a task stops being small, delegation or an explicit SDD phase boundary is expected rather than optional.\n\n| Trigger                                                                    | Expected behavior                                         |\n| -------------------------------------------------------------------------- | --------------------------------------------------------- |\n| Reading 4+ files to understand a flow                                      | Delegate exploration or run an exploration phase.         |\n| Touching 2+ non-trivial files                                              | Use one writer or require fresh review before completion. |\n| Commit, push, or PR after code changes                                     | Run fresh review unless the diff is trivial docs/text.    |\n| Wrong cwd, worktree/git accident, merge recovery, confusing test/env issue | Stop and run a fresh audit before continuing.             |\n| Long monolithic session with accumulating complexity                       | Pause and delegate, re-plan, or justify why not.          |\n| Adversarial review of diffs, conflicts, PR readiness, or incidents         | Use fresh context when the agent platform supports it.    |\n\nThe goal is not ceremony. The goal is to avoid accidental chaos while preserving one responsible orchestrator and one writer thread.\n\n---\n\n## Quick Start\n\n### macOS / Linux\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/scripts/install.sh | bash\n```\n\n### Windows\n\n```powershell\nscoop bucket add gentleman https://github.com/Gentleman-Programming/scoop-bucket\nscoop install gentle-ai\n```\n\n### Try the beta channel (test `main` before a release)\n\nThe beta channel builds Gentle AI straight from `main`, so you need **Go 1.24+** installed first. Use it to try unreleased changes and report issues early.\n\n**macOS / Linux**\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/scripts/install.sh | bash -s -- --channel beta\n```\n\n**Windows (PowerShell)**\n\n```powershell\n$env:GENTLE_AI_CHANNEL=\"beta\"; irm https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/scripts/install.ps1 | iex\n```\n\nTo keep upgrading on beta later, run `GENTLE_AI_CHANNEL=beta gentle-ai upgrade`. To return to stable, reinstall via Homebrew or Scoop.\n\n### After install: project-level setup\n\nOnce your agents are configured, open your AI agent in a project and run these two commands to register the project context:\n\n| Command                            | What it does                                                                | When to re-run                                                                 |\n| ---------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |\n| `/sdd-init`                        | Detects stack, testing capabilities, activates Strict TDD Mode if available | When your project adds/removes test frameworks, or first time in a new project |\n| `gentle-ai skill-registry refresh` | Scans installed skills and project conventions, builds the registry         | After installing/removing skills, or first time in a new project               |\n\nThese are **not required** for basic usage. The SDD orchestrator runs `/sdd-init` automatically if it detects no context. Startup hooks normally keep the skill registry fresh for agents that support hooks, including Codex, Claude Code, OpenCode, and Pi through `gentle-pi`. If you start Pi with `pi -ns`, startup skill loading/hooks are skipped, so run the registry refresh manually when you need updated project rules.\n\nRun `gentle-ai doctor` at any time for a read-only health check of your ecosystem (tool binaries, `state.json`, Engram reachability, disk space).\n\n---\n\n## Install\n\n### Recommended\n\n```bash\n# macOS / Linux\nbrew tap Gentleman-Programming/homebrew-tap\nbrew trust --formula gentleman-programming/tap/gentle-ai  # one-time, for Homebrew tap trust\nbrew install gentle-ai\n\n# Windows\nscoop bucket add gentleman https://github.com/Gentleman-Programming/scoop-bucket\nscoop install gentle-ai\n```\n\n<details>\n<summary><strong>Other install methods</strong> (Go install)</summary>\n\n#### Go install (any platform with Go 1.24+)\n\n```bash\ngo install github.com/gentleman-programming/gentle-ai/cmd/gentle-ai@latest\n```\n\n#### Windows\n\nUse Scoop on Windows. It is the supported install path for keeping Gentle AI updated cleanly:\n\n```powershell\nscoop bucket add gentleman https://github.com/Gentleman-Programming/scoop-bucket\nscoop install gentle-ai\n```\n\n</details>\n\nBy default, `gentle-ai install` writes agent-scoped files to each selected agent's global config directory. To keep the Gentleman stack isolated to one project, run:\n\n```bash\ngentle-ai install --scope=workspace\n```\n\nWorkspace scope is not Claude-only; it applies to selected agents for agent-scoped files such as system prompts, skills, SDD agents, and persona files. Global-only integrations remain global by design.\n\n---\n\n## Backups\n\nEvery install, sync, and upgrade automatically snapshots your config files. Backups are **compressed** (tar.gz), **deduplicated** (identical configs are not re-backed up), and **auto-pruned** (keeps the 5 most recent). Pin important backups via the TUI (`p` key) to protect them from pruning.\n\nSee [Backup & Rollback Guide](docs/rollback.md) for details.\n\n---\n\n## Key Features You Should Know About\n\n### OpenCode SDD Profiles\n\nAssign different AI models to different SDD phases -- a powerful model for design, a fast one for implementation, a cheap one for exploration. OpenCode uses **`gentle-orchestrator`** as the base SDD conductor, and generated named profiles still appear as `sdd-orchestrator-{name}` entries.\n\n```bash\n# Via CLI\ngentle-ai sync --profile cheap:openrouter/qwen/qwen3-30b-a3b:free\ngentle-ai sync --profile-phase cheap:sdd-design:anthropic/claude-sonnet-4-20250514\n\n# Or via TUI: gentle-ai → \"OpenCode SDD Profiles\" → Create\n```\n\nAfter creating a profile, open OpenCode and press **Tab** to switch between `gentle-orchestrator` (default) and your custom profiles.\n\n| What you need         | Use this                                                        |\n| --------------------- | --------------------------------------------------------------- |\n| Default SDD conductor | `gentle-orchestrator`                                           |\n| Legacy configs        | `sdd-orchestrator` is migrated to `gentle-orchestrator` on sync |\n| Named model profiles  | `sdd-orchestrator-cheap`, `sdd-orchestrator-premium`, etc.      |\n\n**Full guide**: [OpenCode SDD Profiles](docs/opencode-profiles.md)\n\n### Engram (Persistent Memory)\n\nYour AI agent automatically remembers decisions, bugs, and context across sessions. You don't need to do anything -- but when you do:\n\n```bash\nengram projects list          # See all projects with memory counts\nengram projects consolidate   # Fix name drift (\"my-app\" vs \"My-App\")\nengram search \"auth bug\"      # Find a past decision from the terminal\nengram tui                    # Visual memory browser\n```\n\n**Full reference**: [Engram Commands](docs/engram.md)\n\n---\n\n## Documentation\n\n| Topic                                              | Description                                                                             |\n| -------------------------------------------------- | --------------------------------------------------------------------------------------- |\n| [Intended Usage](docs/intended-usage.md)           | How Gentle-AI is meant to be used — the mental model                                    |\n| [OpenCode SDD Profiles](docs/opencode-profiles.md) | Create and manage per-phase model profiles for OpenCode                                 |\n| [Engram Commands](docs/engram.md)                  | CLI commands, MCP tools, project management, team sharing                               |\n| [Codebase Guide](",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/gentleman-programming/gentle-ai\n\ngo 1.25.10\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/rivo/uniseg v0.4.7\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/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // 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/muesli/termenv v0.16.0 // indirect\n\tgithub.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect\n\tgolang.org/x/sys v0.38.0 // indirect\n\tgolang.org/x/text v0.3.8 // indirect\n)\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "memory",
      "mcp",
      "skill",
      "workspace",
      "workflow"
    ],
    "relationship_label": "Memory 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 12,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 86
    },
    "strategic_score": 86
  },
  {
    "owner": "AgentWrapper",
    "name": "agent-orchestrator",
    "full_name": "AgentWrapper/agent-orchestrator",
    "url": "https://github.com/AgentWrapper/agent-orchestrator",
    "description": "Agentic orchestrator for parallel coding agents — plans tasks, spawns agents, and autonomously handles CI fixes, merge conflicts, and code reviews.",
    "language": "Go",
    "total_stars": 7793,
    "forks": 1092,
    "stars_this_period": 65,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "agent-fleet",
        "agent-swarm",
        "claude-code",
        "codex-cli",
        "git-worktrees",
        "multi-agent",
        "orchestration",
        "orchestrator",
        "parallel-agents",
        "parallel-coding",
        "skills",
        "tmux"
      ],
      "license": "Apache-2.0",
      "open_issues": 595,
      "created_at": "2026-02-13T09:52:36Z",
      "pushed_at": "2026-06-29T18:44:46Z",
      "homepage": "https://ao-agents.com",
      "default_branch": "main",
      "forks": 1092,
      "watchers": 28,
      "archived": false,
      "size_kb": 48950
    },
    "readme_content": "<div align=\"center\">\n\n<p style=\"text-align: center;\"><img src=\"ao-logo.svg\" alt=\"Agent Orchestrator\" width=\"200\" height=\"200\" style=\"max-width: 100%; height: auto; margin-left: 50px;\" /></p>\n\n# Agent Orchestrator\n\n**The orchestration layer for parallel AI coding agents**\n\n[![Stars](https://img.shields.io/github/stars/AgentWrapper/agent-orchestrator)](https://github.com/AgentWrapper/agent-orchestrator/stargazers)\n[![Contributors](https://img.shields.io/github/contributors/AgentWrapper/agent-orchestrator)](https://github.com/AgentWrapper/agent-orchestrator/graphs/contributors)\n[![Twitter](https://img.shields.io/badge/Twitter-1DA1F2?logo=twitter&logoColor=white)](https://x.com/aoagents)\n[![Discord](https://img.shields.io/badge/Discord-join%20the%20community-5865F2?logo=discord&logoColor=white)](https://discord.com/invite/UZv7JjxbwG)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n\nAn Agentic IDE that supervises parallel AI coding agents in isolated workspaces, with complete control and automatic feedback loops from CI failures, review comments, and merge conflicts.\n\n![Agent Orchestrator Dashboard](ao-dashboard-preview.png)\n\n### Witness AO's Journey on X\n\n<table border=\"1\" style=\"border-collapse: collapse; width: 100%;\">\n<tr>\n<td style=\"padding: 10px; text-align: center; border: 1px solid #ddd;\">\n<a href=\"https://x.com/agent_wrapper/status/2026329204405723180\"><img src=\"screenshots/first.png\" alt=\"First\" width=\"400\"></a><br><br>\n<a href=\"https://x.com/agent_wrapper/status/2026329204405723180\">Visit</a>\n</td>\n<td style=\"padding: 10px; text-align: center; border: 1px solid #ddd;\">\n<a href=\"https://x.com/agent_wrapper/status/2025986105485733945\"><img src=\"screenshots/second.png\" alt=\"Second\" width=\"400\"></a><br><br>\n<a href=\"https://x.com/agent_wrapper/status/2025986105485733945\">Visit</a>\n</td>\n</tr>\n<tr>\n<td style=\"padding: 10px; text-align: center; border: 1px solid #ddd;\">\n<a href=\"https://x.com/agent_wrapper/status/2064157228400341312\"><img src=\"screenshots/third.png\" alt=\"Third\" width=\"400\"></a><br><br>\n<a href=\"https://x.com/agent_wrapper/status/2064157228400341312\">Visit</a>\n</td>\n<td style=\"padding: 10px; text-align: center; border: 1px solid #ddd;\">\n<a href=\"https://x.com/agent_wrapper/status/2024885035774738700?s=20\"><img src=\"screenshots/image.png\" alt=\"Fourth\" width=\"400\"></a><br><br>\n<a href=\"https://x.com/agent_wrapper/status/2024885035774738700?s=20\">Visit</a>\n</td>\n</tr>\n</table>\n\n[Features](#features) • [Quick Start](#quick-start) • [Architecture](#architecture) • [Documentation](#documentation) • [Contributing](#contributing)\n\n</div>\n\n---\n\n## Features\n\n| Feature                        | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |\n| :----------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Agent-Agnostic Platform**    | 23+ agent adapters including [Claude Code](https://code.claude.com/docs/en/overview), [OpenAI Codex](https://openai.com/), [Cursor](https://cursor.com/), [OpenCode](https://opencode.ai/), [Aider](https://aider.chat/), [Amp](https://ampcode.com/manual), [Goose](https://goose-docs.ai/), [GitHub Copilot](https://github.com/features/copilot), [Grok](https://x.ai/grok), [Qwen Code](https://github.com/QwenLM/qwen-code), [Kimi Code](https://www.kimi.com/code), [Cline](https://cline.bot/), [Continue](https://www.continue.dev/), [Kiro](https://kiro.dev/), and more |\n| **Isolated Workspaces**        | Each session spawns into its own git worktree with dedicated runtime                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| **Platform-Native Runtimes**   | tmux on Darwin/Linux, conpty on Windows for optimal performance                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| **Live PR Observation**        | Provider-neutral SCM observer with automatic feedback routing                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| **Automatic Feedback Routing** | CI failures, review comments, and merge conflicts routed to the owning agent                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| **Durable Facts Storage**      | SQLite persists immutable facts with display status derived at read time                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |\n| **CDC Broadcasting**           | DB triggers append changes to change_log, broadcasted via SSE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| **Desktop Experience**         | Native Electron app with React UI and live terminal streaming                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| **Loopback-Only Daemon**       | HTTP control over 127.0.0.1 with no auth, CORS, or TLS by design                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n\n### Supported Agents\n\nWorks with 23+ CLI-based coding agents including Claude Code, OpenAI Codex, Cursor, OpenCode, Aider, Amp, Goose, GitHub Copilot, Grok, Qwen Code, Kimi Code, Crush, Cline, Droid, Devin, Auggie, Continue, Kiro, and Kilo Code.\n\n**If it runs in a terminal, it runs on Agent Orchestrator.**\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n| Requirement | Minimum | Recommended |\n| ----------- | ------- | ----------- |\n| Go          | 1.25+   | Latest      |\n| Node.js     | 20+     | Latest LTS  |\n| Git         | Any     | Latest      |\n| pnpm        | Any     | Latest      |\n\n**Optional:**\n\n- `tmux` (Darwin/Linux) - For Unix runtime\n- `gh` (GitHub CLI) - For authenticated GitHub API calls\n\n### Installation\n\nDownload the latest release for your platform:\n\n| Platform    | Download                                                                                          |\n| ----------- | ------------------------------------------------------------------------------------------------- |\n| **Windows** | [Setup.exe](https://github.com/AgentWrapper/agent-orchestrator/releases/latest)                   |\n| **macOS**   | [Agent Orchestrator.dmg](https://github.com/AgentWrapper/agent-orchestrator/releases/latest)      |\n| **Linux**   | [Agent Orchestrator.AppImage](https://github.com/AgentWrapper/agent-orchestrator/releases/latest) |\n\n**Direct Download:** [Latest Release](https://github.com/AgentWrapper/agent-orchestrator/releases/latest)\n\n---\n\n## Telemetry\n\nAgent Orchestrator collects minimal telemetry for reliability and product understanding. Data is stored locally by default; remote transmission is opt-in via environment variables. [Read the full telemetry policy](docs/telemetry.md).\n\n---\n\n## Architecture\n\nAgent Orchestrator is a long-running Go daemon built around **inbound/outbound port contracts** with swappable adapters.\n\n**Core mental model:** OBSERVE external facts → UPDATE durable facts → DERIVE display status / ACT\n\n**Key components:**\n\n- **Frontend** - Electron + React UI with TanStack Router/Query and shadcn/ui\n- **Backend Daemon** - Go-based HTTP server with controllers, services, and adapters\n- **Runtime** - Platform-specific: `tmux` on Darwin/Linux, `conpty` on Windows\n- **Storage** - SQLite with change-data-capture (CDC) for real-time updates\n- **Adapters** - 23+ agent adapters, git worktree workspace, GitHub SCM integration\n\nFor detailed architecture diagrams, data flows, and load-bearing rules, see [architecture.md](docs/architecture.md).\n\n---\n\n## Documentation\n\n| Document                                                 | Description                                             |\n| -------------------------------------------------------- | ---------------",
    "strategic_keywords": [
      "agent",
      "agents",
      "skill",
      "workspace"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 14,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 8,
      "total": 89
    },
    "strategic_score": 89
  },
  {
    "owner": "qdrant",
    "name": "qdrant",
    "full_name": "qdrant/qdrant",
    "url": "https://github.com/qdrant/qdrant",
    "description": "Qdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/",
    "language": "Rust",
    "total_stars": 32795,
    "forks": 2438,
    "stars_this_period": 59,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "ai-search",
        "ai-search-engine",
        "embeddings-similarity",
        "hnsw",
        "hybrid-search",
        "image-search",
        "knn-algorithm",
        "machine-learning",
        "mlops",
        "nearest-neighbor-search",
        "neural-network",
        "neural-search",
        "recommender-system",
        "search",
        "search-engine",
        "search-engines",
        "similarity-search",
        "vector-database",
        "vector-search",
        "vector-search-engine"
      ],
      "license": "Apache-2.0",
      "open_issues": 594,
      "created_at": "2020-05-30T21:37:01Z",
      "pushed_at": "2026-06-29T20:01:06Z",
      "homepage": "https://qdrant.tech",
      "default_branch": "master",
      "forks": 2438,
      "watchers": 152,
      "archived": false,
      "size_kb": 54274
    },
    "readme_content": "<p align=\"center\">\n  <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/qdrant/qdrant/raw/master/docs/logo-dark.svg\">\n      <source media=\"(prefers-color-scheme: light)\" srcset=\"https://github.com/qdrant/qdrant/raw/master/docs/logo-light.svg\">\n      <img height=\"100\" alt=\"Qdrant\" src=\"https://github.com/qdrant/qdrant/raw/master/docs/logo.svg\">\n  </picture>\n</p>\n\n<p align=\"center\">\n    <b>Vector Search Engine for the next generation of AI applications</b>\n</p>\n\n<p align=center>\n    <a href=\"https://github.com/qdrant/qdrant/actions/workflows/rust.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/qdrant/qdrant/rust.yml?style=flat-square\" alt=\"Tests status\"></a>\n    <a href=\"https://api.qdrant.tech/\"><img src=\"https://img.shields.io/badge/Docs-OpenAPI%203.0-success?style=flat-square\" alt=\"OpenAPI Docs\"></a>\n    <a href=\"https://github.com/qdrant/qdrant/blob/master/LICENSE\"><img src=\"https://img.shields.io/github/license/qdrant/qdrant?style=flat-square\" alt=\"Apache 2.0 License\"></a>\n    <a href=\"https://qdrant.to/discord\"><img src=\"https://img.shields.io/discord/907569970500743200?logo=Discord&style=flat-square&color=7289da\" alt=\"Discord\"></a>\n    <a href=\"https://qdrant.to/roadmap\"><img src=\"https://img.shields.io/badge/Roadmap-2025-bc1439.svg?style=flat-square\" alt=\"Roadmap 2025\"></a>\n    <a href=\"https://cloud.qdrant.io/\"><img src=\"https://img.shields.io/badge/Qdrant-Cloud-24386C.svg?logo=cloud&style=flat-square\" alt=\"Qdrant Cloud\"></a>\n</p>\n\n**Qdrant** (read: _quadrant_) is a vector similarity search engine and vector database.\nIt provides a production-ready service with a convenient API to store, search, and manage points—vectors with an additional payload.\nQdrant is tailored for extended filtering support, making it useful for all sorts of neural-network or semantic-based matching, faceted search, and other applications.\n\nQdrant is written in Rust 🦀, which makes it fast and reliable even under high load. See [benchmarks](https://qdrant.tech/benchmarks/).\n\nWith Qdrant, embeddings or neural network encoders can be turned into full-fledged applications for matching, searching, recommending, and much more!\n\nQdrant is also available as a fully managed **[Qdrant Cloud](https://cloud.qdrant.io/)** ⛅ including a **free tier**.\n\n<p align=\"center\">\n<strong><a href=\"https://qdrant.tech/documentation/quickstart/\">Quick Start</a> • <a href=\"#agent-skills\">Agent Skills</a> • <a href=\"#clients\">Client Libraries</a> • <a href=\"#demo-projects\">Demo Projects</a> • <a href=\"#integrations\">Integrations</a> • <a href=\"#contacts\">Contact</a>\n\n</strong>\n</p>\n\n## Getting Started\n\n### Agent Skills\n\nQdrant provides a collection of ready-to-use [agent skills](https://github.com/qdrant/skills) that bring Qdrant's vector search capabilities directly into your AI coding assistant. Install these skills to empower your agent in making critical engineering decisions for optimal vector search performance, such as quantization, sharding, tenant isolation, hybrid search, model migration, and more.\n\n### Client-Server\n\nTo experience the full power of Qdrant locally, run the container with this command:\n\n```bash\ndocker run -p 6333:6333 qdrant/qdrant\n```\n\nNote that this starts an insecure deployment without authentication, open to all network interfaces. Please refer to [secure your instance](https://qdrant.tech/documentation/security/#secure-your-instance).\n\nNow you can connect to the server with any [client](#clients). For example, using Python:\n\n```python\nfrom qdrant_client import QdrantClient\n\nclient = QdrantClient(url=\"http://localhost:6333\")\n```\n\nBefore deploying Qdrant to production, be sure to read our [installation](https://qdrant.tech/documentation/installation/) and [security](https://qdrant.tech/documentation/security/) guides.\n\n### Clients\n\nQdrant offers the following client libraries to help you integrate it into your application stack:\n\n- Official:\n  - [Go client](https://github.com/qdrant/go-client)\n  - [Rust client](https://github.com/qdrant/rust-client)\n  - [JavaScript/TypeScript client](https://github.com/qdrant/qdrant-js)\n  - [Python client](https://github.com/qdrant/qdrant-client)\n  - [.NET/C# client](https://github.com/qdrant/qdrant-dotnet)\n  - [Java client](https://github.com/qdrant/java-client)\n- Community:\n  - [PHP](https://github.com/hkulekci/qdrant-php)\n\n### Qdrant Edge\n\n[Qdrant Edge](https://qdrant.tech/documentation/edge/) is a lightweight version of Qdrant designed for edge devices and resource-constrained environments. Unlike Qdrant Server, which uses a client-server architecture, Qdrant Edge runs inside the application process. Data is stored and queried locally and can be synchronized with a Qdrant server. It offers the same powerful vector search capabilities as the client-server version but with a smaller footprint, making it ideal for applications that require low latency and offline functionality.\n\nTo get started with Qdrant Edge from Python or Rust, initialize an instance of EdgeShard, which exposes methods to manage data, query it, and restore snapshots. For example:\n\n```python\nfrom qdrant_edge import Distance, EdgeConfig, EdgeVectorParams, EdgeShard, Point, UpdateOperation\n\nshard = EdgeShard.create(\"./shard\", EdgeConfig(\n    vectors={\"my-vector\": EdgeVectorParams(size=4, distance=Distance.Cosine)}\n))\nshard.update(UpdateOperation.upsert_points([\n    Point(id=1, vector={\"my-vector\": [0.1, 0.2, 0.3, 0.4]}, payload={\"color\": \"red\"})\n]))\n```\n\n### Where Do I Go from Here?\n\n- [Quick Start Guide](https://qdrant.tech/documentation/quickstart/)\n- Detailed [Documentation](https://qdrant.tech/documentation/)\n- Take the [Qdrant Essentials course](https://qdrant.tech/course/essentials/)\n- Follow [this tutorial](https://qdrant.tech/documentation/tutorials-basics/search-beginners/) to create a semantic search engine with Qdrant\n\n## Demo Projects\n\n### Discover Semantic Text Search 🔍\n\nUnlock the power of semantic embeddings with Qdrant, transcending keyword-based search to find meaningful connections in short texts. Deploy a neural search in minutes using a pre-trained neural network, and experience the future of text search. [Try it online!](https://qdrant.to/semantic-search-demo)\n\n### Explore Similar Image Search - Food Discovery 🍕\n\nThere's more to discovery than text search, especially when it comes to food. People often choose meals based on appearance rather than descriptions and ingredients. Let Qdrant help your users find their next delicious meal using visual search, even if they don't know the dish's name. [Check it out!](https://qdrant.to/food-discovery)\n\n### Master Extreme Classification - E-Commerce Product Categorization 📺\n\nEnter the cutting-edge realm of extreme classification, an emerging machine learning field tackling multi-class and multi-label problems with millions of labels. Harness the potential of similarity learning models, and see how a pre-trained transformer model and Qdrant can revolutionize e-commerce product categorization. [Play with it online!](https://qdrant.to/extreme-classification-demo)\n\n## API\n\n### REST\n\nQdrant provides a REST API with an [OpenAPI 3.0 specification](https://api.qdrant.tech/), enabling client generation for virtually any framework or programming language.\n\nYou can also download the raw [OpenAPI definitions](https://github.com/qdrant/qdrant/blob/master/docs/redoc/master/openapi.json).\n\n### gRPC\n\nFor faster, production-tier searches, Qdrant also provides a [gRPC interface](https://qdrant.tech/documentation/interfaces/#grpc-interface).\n\n## Features\n\n### Dense, Sparse, and Multi Vector Search\n\nQdrant supports dense vectors for semantic similarity, sparse vectors for full-text search, and multivector search for objects with multiple embeddings or late interaction models like ColBERT.\n\n### Filtering on Payload\n\nAttach any JSON payload to your vectors and filter on it using a rich set of conditions—keyword matching, full-text, numeric ranges, geo-locations, and more—combined with `should`, `must`, and `must_not` clauses.\n\n### Hybrid Search\n\nCombine multiple vectors in a single query to get the best of semantic understanding and keyword precision, with results merged via configurable fusion strategies, such as Reciprocal Rank Fusion (RRF) and Distribution-Based Score Fusion (DBSF).\n\n### Vector Quantization and On-Disk Storage\n\nBuilt-in quantization cuts RAM usage by up to 97% and lets you tune the trade-off between search speed and precision.\n\n### Distributed Deployment\n\nScale horizontally with sharding and replication, and update or resize collections with zero downtime.\n\n### Highlighted Features\n\n* **Faceting** - aggregate search results by payload values.\n* **Recommendation** - use positive and negative examples to find similar points.\n* **Discovery** - constrain search to a specific region of the vector space.\n* **Search Relevance Tuning** - tools for adjusting search results, such as Maximal Marginal Relevance (MMR) and the Relevance Feedback Query.\n* **Multitenancy** - scalable partitioning of data for multi-user environments.\n* **Observability** - comprehensive metrics, telemetry, and audit logging for monitoring and debugging.\n* **Query Planning and Payload Indexes** - leverages stored payload information to optimize query execution strategy.\n* **SIMD Hardware Acceleration** - utilizes modern CPU x86-x64 and Neon architectures to deliver better performance.\n* **GPU Support** - for accelerated indexing, with support for NVIDIA and AMD GPUs.\n* **Async I/O** - uses `io_uring` to maximize disk throughput utilization even on network-attached storage.\n* **Write-Ahead Logging** - ensures data persistence with update confirmation, even during power outages.\n\n### Web UI\n\nWeb UI provides a visual way to interact with your data and monitor the health of your deployment. It enables you to explore your collections, manage data, interact with the REST API, and more.\n\n<p align=\"center\"><img style=\"width: 75%; border: 1px solid #8f98b2;\" src=\"https://qdrant.tech/docs/gettingstarted/web-ui.png\" alt=\"Qdrant Web UI\" /></p>\n\n## Integrations\n\nQdrant integrates with the tools you're already using across every stage of your AI stack. You can connect to embedding providers, AI application frameworks, and data pipeline tools, as well as observability platforms for monitoring and tracing your vector search in production. No-code and low-code automation platforms are supported too. Refer to the [Ecosystem page](https://qdrant.tech/documentation/ecosystem/) for the complete list.\n\n## Contributing\n\nWe are happy to receive your contributions! Before opening a pull request, please read our [Contributing Guide](docs/CONTRIBUTING.md).\n\n> [!IMPORTANT]\n> Our development branch is `dev`, not `master`. Please fork the repo, branch from `dev`, and open your pull request against `dev`. PRs targeting `master` will be asked to retarget.\n\n## Contacts\n\n- Have questions? Join our [Discord channel](https://qdrant.to/discord) or mention [@qdrant_engine on X](https://qdrant.to/twitter)\n- Want to stay in touch with the latest releases? Subscribe to our [Newsletters](https://qdrant.tech/subscribe/)\n- Looking for a managed cloud? Check [pricing](https://qdrant.tech/pricing/). Need something personalized? We're at [info@qdrant.tech](mailto:info@qdrant.tech)\n\n## License\n\nQdrant is licensed under the Apache License, Version 2.0. View a copy of the [License file](https://github.com/qdrant/qdrant/blob/master/LICENSE).\n",
    "manifest_file": "Cargo.toml",
    "manifest_content": "[package]\nname = \"qdrant\"\nversion = \"1.18.2\"\ndescription = \"Qdrant - Vector Search engine\"\nauthors = [\n    \"Andrey Vasnetsov <andrey@vasnetsov.com>\",\n    \"Qdrant Team <info@qdrant.tech>\",\n]\nreadme = \"README.md\"\nhomepage = \"https://qdrant.tech/\"\nrepository = \"https://github.com/qdrant/qdrant\"\nlicense = \"Apache-2.0\"\nedition = \"2024\"\nrust-version = \"1.94\"\ndefault-run = \"qdrant\"\n\n[lints]\nworkspace = true\n\n[features]\ndefault = []\nservice_debug = [\"parking_lot/deadlock_detection\"]\ntracing = [\n    \"api/tracing\",\n    \"collection/tracing\",\n    \"segment/tracing\",\n    \"storage/tracing\",\n]\nconsole = [\"console-subscriber\"]\nconsole-subscriber = [\"tracing\", \"dep:console-subscriber\"]\ntracy = [\"tracing-tracy\"]\ntracing-tracy = [\"tracing\", \"dep:tracing-tracy\"]\ntokio-tracing = [\"tokio/tracing\"]\nstacktrace = [\"rstack-self\"]\nchaos-testing = []\ndata-consistency-check = [\"collection/data-consistency-check\"]\ngpu = [\"gpu/gpu\", \"segment/gpu\"]\ndeb = []\nstaging = [\"collection/staging\", \"storage/staging\", \"shard/staging\"]\n\n[dev-dependencies]\nserde_urlencoded = \"0.7\"\nsealed_test = \"1.1.0\"\n\nmockito = { workspace = true }\ntempfile = { workspace = true }\nrusty-hook = \"^0.11.2\"\nnix = { workspace = true, features = [\"process\"] }\nfs-err = { workspace = true, features = [\"debug\", \"debug_tokio\", \"tokio\"] } # for nicer error messages\n\n\n[dependencies]\nparking_lot = { workspace = true }\n\nfs-err = { workspace = true }\nthiserror = { workspace = true }\nlog = { workspace = true }\ncolored = \"3\"\nserde = { workspace = true }\nserde_json = { workspace = true }\nserde_with = { workspace = true }\nchrono = { workspace = true }\nrand = { workspace = true }\nschemars = { workspace = true }\nitertools = { workspace = true }\nanyhow = \"1.0.98\"\nfutures = { workspace = true }\nfutures-util = { workspace = true }\nclap = { workspace = true }\nserde_cbor = { workspace = true }\nuuid = { workspace = true }\nsys-info = \"0.9.1\"\nordered-float = { workspace = true }\nahash = { workspace = true }\nurlencoding = { workspace = true }\n\nconfig = { version = \"0.15.22\", default-features = false, features = [\"yaml\"] }\n\ntokio = { workspace = true }\ntokio-util = { workspace = true }\n\nactix-cors = \"0.7.1\"\nactix-web-validator = { workspace = true }\nactix-web = { workspace = true }\nactix-files = { workspace = true }\ntonic = { workspace = true }\ntonic-reflection = { workspace = true }\ntower = { version = \"0.5.3\", features = [\"util\"] }\ntower-layer = \"0.3.3\"\nhttp = { workspace = true }\nreqwest = { workspace = true }\n# rustls minor version must be synced with actix-web\nrustls = { version = \"0.23.37\", default-features = false, features = [\n    \"logging\",\n    \"std\",\n    \"tls12\",\n    \"ring\",\n] }\nrustls-pki-types = \"1.14.0\"\nrustls-pemfile = \"2.2.0\"\nprometheus = { version = \"0.14.0\", default-features = false }\nvalidator = { workspace = true }\njsonwebtoken = { version = \"10.0\", features = [\"rust_crypto\"] }\ntempfile = { workspace = true }\n\n# Consensus related crates\nraft = { workspace = true }\nslog = { version = \"2.8.2\", features = [\n    \"max_level_trace\",\n    \"release_max_level_debug\",\n] }\nslog-stdlog = \"4.1.1\"\nprost-for-raft = { workspace = true }\nraft-proto = { git = \"https://github.com/tikv/raft-rs\", rev = \"aafb07c7bab439c6139926a77dfafc5b10e9bc84\", features = [\n    \"prost-codec\",\n], default-features = false }\n\ncommon = { path = \"lib/common/common\" }\ncancel = { path = \"lib/common/cancel\" }\nissues = { path = \"lib/common/issues\" }\nsegment = { path = \"lib/segment\", default-features = false }\nshard = { path = \"lib/shard\", default-features = false }\ncollection = { path = \"lib/collection\" }\nstorage = { path = \"lib/storage\" }\napi = { path = \"lib/api\" }\nbm25 = { path = \"lib/bm25\" }\ngpu = { path = \"lib/gpu\" }\nwal = { path = \"lib/wal\" }\n\nactix-multipart = \"0.7.2\"\nconstant_time_eq = \"0.4.2\"\n\n# Profiling\ntracing = { workspace = true }\ntracing-subscriber = { version = \"0.3\", features = [\n    \"env-filter\",\n    \"fmt\",\n    \"json\",\n] }\ntracing-log = { version = \"0.2\", default-features = false, features = [\n    \"log-tracer\",\n    \"std\",\n] }\nconsole-subscriber = { version = \"0.5.0\", default-features = false, features = [\n    \"parking_lot\",\n], optional = true }\ntracing-tracy = { version = \"0.11.4\", features = [\"ondemand\"], optional = true }\nactix-web-extras = \"0.1.0\"\n\n[target.'cfg(target_os = \"linux\")'.dependencies]\nprocfs = { version = \"0.18.0\", default-features = false }\npyroscope = { version = \"2.0.0\", features = [\"backend-pprof-rs\", \"backend-jemalloc\"] }\n# Backtrace\nrstack-self = { version = \"0.3.0\", optional = true }\n\n# Jemalloc\n[target.'cfg(all(not(target_env = \"msvc\"), any(target_arch = \"x86_64\", target_arch = \"aarch64\")))'.dependencies]\ntikv-jemallocator = { version = \"0.6.1\", features = [\n    \"stats\",\n    \"unprefixed_malloc_on_supported_platforms\",\n    \"background_threads\",\n    \"profiling\",\n] }\ntikv-jemalloc-ctl = { version = \"0.6.1\", features = [\"stats\"] }\n\n[workspace.lints.clippy]\ncast_lossless = \"warn\"\ndoc_link_with_quotes = \"warn\"\nenum_glob_use = \"warn\"\nexplicit_into_iter_loop = \"warn\"\nfilter_map_next = \"warn\"\nf",
    "strategic_keywords": [
      "agent",
      "rag",
      "skill",
      "workspace",
      "workflow",
      "vector",
      "embedding"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "Cargo.toml"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 20,
      "novelty": 4,
      "productize": 14,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 8,
      "total": 79
    },
    "strategic_score": 79
  },
  {
    "owner": "kunchenguid",
    "name": "treehouse",
    "full_name": "kunchenguid/treehouse",
    "url": "https://github.com/kunchenguid/treehouse",
    "description": "Manage worktrees without managing worktrees.",
    "language": "Go",
    "total_stars": 521,
    "forks": 54,
    "stars_this_period": 47,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "agents",
        "coding",
        "git",
        "worktree"
      ],
      "license": "MIT",
      "open_issues": 12,
      "created_at": "2026-03-14T19:20:20Z",
      "pushed_at": "2026-06-24T16:27:43Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 54,
      "watchers": 2,
      "archived": false,
      "size_kb": 1649
    },
    "readme_content": "<h1 align=\"center\">treehouse</h1>\n\n<p align=\"center\">\n  <a href=\"https://github.com/kunchenguid/treehouse/actions/workflows/ci.yml\"><img alt=\"CI\" src=\"https://img.shields.io/github/actions/workflow/status/kunchenguid/treehouse/ci.yml?style=flat-square&label=CI\" /></a>\n  <a href=\"https://github.com/kunchenguid/treehouse/actions/workflows/release.yml\"><img alt=\"Release\" src=\"https://img.shields.io/github/actions/workflow/status/kunchenguid/treehouse/release.yml?style=flat-square&label=Release\" /></a>\n  <a href=\"#\"><img alt=\"Platform\" src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-blue?style=flat-square\" /></a>\n  <a href=\"https://x.com/kunchenguid\"><img alt=\"X\" src=\"https://img.shields.io/badge/X-@kunchenguid-black?style=flat-square\" /></a>\n  <a href=\"https://discord.gg/BW4aJuQhTf\"><img alt=\"Discord\" src=\"https://img.shields.io/discord/1439901831038763092?style=flat-square&label=discord\" /></a>\n</p>\n\n<h3 align=\"center\">Manage worktrees without managing worktrees.</h3>\n\nAre you still only working on one task at a time? Are you manually juggling between a few clones of the same repo?\n\nOr... are you starting a new worktree for every agent session, losing all your installed dependencies and build cache each time, and wondering why your agents are slow?\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/kunchenguid/treehouse/main/demo.gif\" alt=\"treehouse demo\" width=\"800\" />\n</p>\n\nTreehouse helps you manage a pool of reusable, isolated worktrees so each of your agents gets its own environment instantly — no cloning, no conflicts, no coordination overhead.\n\n- **Instant isolation** — `treehouse` puts you into a clean worktree with zero hassel.\n- **Reusable worktrees** — worktrees are preserved in a pool when you're done, with dependencies and build cache intact, ready for the next agent.\n- **Conflict-free** — automatic detection of in-use worktrees and your agents never step on each other's toes.\n\n## Quick Start\n\n```sh\n$ cd myproject                 # start in your repo as usual\n$ treehouse                    # get a worktree and drop into a subshell\n🌳 Entered worktree at ~/.treehouse/myproject-a1b2c3/1/myproject. Type 'exit' to return.\n\n# You're now in an isolated worktree.\n# Run your AI agent, make changes, do whatever you need.\n\n$ exit                         # exit the subshell when you're done\n🌳 Terminated lingering processes: opencode (pid 12345)\n🌳 Worktree returned to pool.\n```\n\n## Install\n\n**macOS / Linux**\n\n```sh\ncurl -fsSL https://kunchenguid.github.io/treehouse/install.sh | sh\n```\n\n**Windows (PowerShell)**\n\n```powershell\nirm https://kunchenguid.github.io/treehouse/install.ps1 | iex\n```\n\n**Nix**\n\n```sh\nnix run github:kunchenguid/treehouse\n```\n\nOr add to your flake inputs:\n\n```nix\ntreehouse = {\n  url = \"github:kunchenguid/treehouse\";\n  inputs.nixpkgs.follows = \"nixpkgs\";\n};\n```\n\n**Go**\n\n```sh\ngo install github.com/kunchenguid/treehouse@latest\n```\n\n**From source**\n\n```sh\ngit clone https://github.com/kunchenguid/treehouse.git\ncd treehouse\nmake install\n```\n\n## How It Works\n\nTreehouse manages a **pool of git worktrees** per repository, stored under the configured treehouse root.\nThe default treehouse root is `~/.treehouse/`.\n\n```\n  treehouse\n      │\n      ▼\n  Find repo root\n      │\n      ▼\n  git fetch origin\n      │\n      ▼\n  ┌───────────────────────────────────────┐\n  │  Scan pool for available worktree     │\n  │  (not leased, not in-use, not dirty)  │\n  └──────────┬────────────────────────────┘\n             │\n        ┌────┴────┐\n        │  Found? │\n        └────┬────┘\n         yes/ \\no\n           /   \\\n          ▼     ▼\n   Reset to   Create new worktree\n   latest     (detached HEAD at\n   default    latest default\n   branch     branch)\n              & add to pool\n          \\   /\n           \\ /\n            ▼\n  Spawn subshell in worktree\n  (agent works here)\n           │\n           ▼\n     exit subshell\n           │\n           ▼\n  Terminate lingering worktree\n  processes, reset worktree,\n  & return to pool\n  (ready for next agent)\n```\n\n- **Detached HEAD** — worktrees use detached HEAD mode, reset to whichever of the local or remote default branch is further ahead, avoiding branch name conflicts entirely.\n- **No daemon** — all operations are inline CLI commands. No background processes, no state to get corrupted.\n- **In-use detection** — treehouse scans running processes and short-lived owner reservations to determine which worktrees are in-use. Reservations are persisted only while `get`, `destroy`, and `prune` lifecycle work is running.\n- **Durable leases** — `treehouse get --lease` reserves a worktree as a persistent home without keeping a process inside it. The lease is recorded in treehouse's own state, so the worktree is never handed out by a later `get` and never removed by `prune` until you release it with `treehouse return`. Unlike process-based in-use detection, a lease survives with zero processes running inside the worktree.\n- **Dirty detection** - treehouse treats tracked changes and untracked files as dirty, even when repository config hides untracked files from normal `git status` output.\n- **Safe pruning** - By default, `treehouse prune` removes only idle managed worktrees whose HEAD is already merged into the default branch and whose working tree is clean.\n  `treehouse prune --all` applies the same safety checks across every managed pool under the user-level treehouse root.\n  Backing-repository-missing orphans are reported by default; `--prune-orphans` includes them as unverified prune candidates, and `--yes` is required before deletion.\n  It is a dry run unless you pass `--yes`.\n\n## CLI Reference\n\n| Command                    | Description                                          |\n| -------------------------- | ---------------------------------------------------- |\n| `treehouse`                | Get a worktree and open a subshell (alias for `get`) |\n| `treehouse get`            | Acquire a worktree from the pool                     |\n| `treehouse get --lease`    | Durably lease a worktree without a subshell; print its path |\n| `treehouse status`         | Show pool status (highlights leased and current worktrees) |\n| `treehouse return [path]`  | Release any lease, terminate lingering worktree processes, and return it to the pool |\n| `treehouse prune`          | Dry-run removal of stale idle worktrees in the current repo pool |\n| `treehouse prune --all`    | Dry-run removal of stale idle worktrees across every managed pool |\n| `treehouse destroy <path>` | Dry-run removal of one worktree (safe by default; `--yes` to execute) |\n| `treehouse destroy <pool> --all` | Dry-run removal of every disposable worktree in that pool |\n| `treehouse init`           | Create a default `treehouse.toml` config file        |\n| `treehouse update`         | Update treehouse to the latest version               |\n\n### Flags\n\n| Command   | Flag      | Description                       |\n| --------- | --------- | --------------------------------- |\n| `get`     | `--lease` | Durably lease the worktree without opening a subshell; print only its path to stdout |\n| `get`     | `--lease-holder` | Optional label recorded as the lease holder (defaults to `$TREEHOUSE_LEASE_HOLDER`) |\n| `return`  | `--force` | Clean, reset, and return without prompting |\n| `prune`   | `--yes`   | Delete listed prune candidates instead of doing a dry run |\n| `prune`   | `--all`   | Sweep every managed pool under the user-level treehouse root |\n| `prune`   | `--global` | Alias for `--all` |\n| `prune`   | `--prune-orphans` | Include backing-repository-missing orphans in prune candidates |\n| `prune`   | `--verbose`, `-v` | Show detailed skip diagnostics |\n| `destroy` | `--all`   | Remove all worktrees in the named pool (requires a pool path) |\n| `destroy` | `--yes`   | Execute the removal instead of doing a dry run |\n| `destroy` | `--include-unlanded` | Also remove dirty, unmerged, or unverified worktrees (irreversible data loss) |\n| `destroy` | `--include-in-use` | Also remove worktrees with a running process or owner reservation (processes are terminated cleanly first) |\n| `destroy` | `--include-leased` | Also remove a leased worktree; only when the exact path is named, never via `--all` |\n\n### Leasing a worktree (no subshell)\n\n`treehouse get` normally opens an interactive subshell whose lifetime is the hold: when the shell exits, the worktree returns to the pool.\nThat is awkward for callers that need a worktree to persist as a permanent home with no long-lived process inside it.\n\n`treehouse get --lease` is the non-interactive, durable alternative:\n\n```sh\npath=$(treehouse get --lease)\n# $path is the leased worktree's absolute path; all banners went to stderr.\n```\n\nIt acquires a worktree exactly like `get`, but instead of opening a subshell it marks the worktree **leased** in treehouse's persistent state and prints only the worktree's absolute path to stdout (every human-facing message goes to stderr, so command substitution stays clean).\n\nA leased worktree is never handed out by a later `get` and never removed by `prune`, regardless of whether any process runs inside it, until the lease is explicitly released.\nA bulk `treehouse destroy <pool> --all` never removes it either; only naming its exact path with `treehouse destroy <path> --include-leased --yes` will.\n\nPass `--lease-holder <label>` (or set `$TREEHOUSE_LEASE_HOLDER`) to record who holds the lease; `treehouse status` then shows it next to the `leased` state.\n\nRelease a lease with `treehouse return <path>`, which clears the lease, terminates any lingering processes, resets the worktree, and returns it to the pool.\nWhen you pass an explicit path, `treehouse return` can run from outside the repository because it resolves the managed pool from that worktree path.\n\n### Pruning stale worktrees and orphans\n\n`treehouse prune` is a dry run by default.\nBy default, it lists stale idle managed worktrees that would be deleted and shows the reclaimable disk space.\nPass `treehouse prune --yes` to delete those worktrees.\n\nBy default, prune only inspects the current repository's pool and must be run inside a git repo.\nPass `treehouse prune --all` or `treehouse prune --global` to inspect every managed pool under the user-level treehouse root from any directory.\nGlobal prune reads the user-level config and hooks, derives each worktree's owning repository from git metadata, then fetches and checks merge safety against that repository.\nWithout `--prune-orphans`, pass `treehouse prune --all --yes` to delete only the globally safe stale candidates.\n\nPrune ignores worktrees that are currently in use, leased, or reserved by another lifecycle operation.\nIt skips idle worktrees that are unsafe to remove and prints the skip reason, such as uncommitted tracked or untracked changes, or a HEAD commit that is not merged into the default branch.\nSkip output is grouped by reason so large global sweeps stay scannable.\nWhen `origin` exists, prune fetches it and proves each HEAD against the current remote default branch tracking ref.\nWithout `origin`, prune uses the local default branch ref.\nIf `origin` cannot be reached, prune reports `origin unreachable (cannot verify)` and leaves the worktree untouched, even when `--prune-orphans` is set.\nIf a linked worktree points at a missing backing repository, prune reports `orphaned (backing repository missing)`.\nPlain `treehouse prune` and `treehouse prune --all` never delete those orphans.\nPass `--prune-orphans` to include true backing-repository-missing orphans in the dry run, then add `--yes` to delete them.\nTreehouse cannot verify orphan contents after the backing git metadata is gone, so each orphan candidate is marked `content could not be verified`.\nUse `--verbose` to show the underlying git diagnostic details for skipped worktrees.\n\n### Destroying worktrees\n\n`treehouse destroy` is the deliberate tool for removing a worktree even though it still has unlanded work, but it is safe by default and ho",
    "manifest_file": "go.mod",
    "manifest_content": "module github.com/kunchenguid/treehouse\n\ngo 1.25.5\n\nrequire (\n\tgithub.com/BurntSushi/toml v1.6.0\n\tgithub.com/fatih/color v1.18.0\n\tgithub.com/shirou/gopsutil/v4 v4.26.2\n\tgithub.com/spf13/cobra v1.10.2\n\tgolang.org/x/sys v0.41.0\n)\n\nrequire (\n\tgithub.com/ebitengine/purego v0.10.0 // indirect\n\tgithub.com/go-ole/go-ole v1.2.6 // indirect\n\tgithub.com/inconshreveable/mousetrap v1.1.0 // indirect\n\tgithub.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect\n\tgithub.com/mattn/go-colorable v0.1.13 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect\n\tgithub.com/spf13/pflag v1.0.9 // indirect\n\tgithub.com/tklauser/go-sysconf v0.3.16 // indirect\n\tgithub.com/tklauser/numcpus v0.11.0 // indirect\n\tgithub.com/yusufpapurcu/wmi v1.2.4 // indirect\n)\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "mcp",
      "workflow"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 11,
      "relevance": 20,
      "novelty": 15,
      "productize": 11,
      "adoption": 8,
      "relation": 10,
      "risk_signal": 6,
      "total": 81
    },
    "strategic_score": 81
  },
  {
    "owner": "gglucass",
    "name": "headroom-desktop",
    "full_name": "gglucass/headroom-desktop",
    "url": "https://github.com/gglucass/headroom-desktop",
    "description": "Unlock 2x more Claude Code and Codex usage",
    "language": "Rust",
    "total_stars": 358,
    "forks": 30,
    "stars_this_period": 47,
    "source_slice": "rust",
    "source_slices": [
      "rust"
    ],
    "metadata": {
      "topics": [
        "ai",
        "anthropic",
        "claude-code",
        "codex",
        "developer-tools",
        "llm",
        "macos",
        "menu-bar-app",
        "openai",
        "prompt-compression",
        "proxy",
        "react",
        "rust",
        "tauri",
        "token-optimization",
        "typescript"
      ],
      "license": "MIT",
      "open_issues": 10,
      "created_at": "2026-03-30T15:44:19Z",
      "pushed_at": "2026-06-29T15:13:49Z",
      "homepage": "https://extraheadroom.com",
      "default_branch": "main",
      "forks": 30,
      "watchers": 3,
      "archived": false,
      "size_kb": 3825
    },
    "readme_content": "# Headroom Desktop — cut Claude Code & Codex token costs by ~50%\n\n**Headroom is a macOS menu bar app that cuts [Claude Code](https://www.anthropic.com/claude-code) and [OpenAI Codex](https://openai.com/codex/) token costs by ~50% — without changing how you code.** It runs a local-first optimization pipeline that reversibly compresses the tool output, logs, and boilerplate that bloat every prompt, so the AI plan you already pay for stretches about 2x further. Nothing the model needs is lost — it can pull the original content back on demand.\n\n> **Pricing:** Headroom has a free tier and paid plans — see [pricing](https://extraheadroom.com/pricing). The desktop shell in this repo is MIT-licensed; account features and paid plans are opt-in.\n\n[![Website](https://img.shields.io/badge/extraheadroom.com-website-blue?style=for-the-badge)](https://extraheadroom.com)&nbsp;&nbsp;[![Download for macOS](https://img.shields.io/github/v/release/gglucass/headroom-desktop?label=Download%20for%20macOS&style=for-the-badge&logo=apple&logoColor=white&color=000000)](https://github.com/gglucass/headroom-desktop/releases/latest)\n\n> **Stable:** macOS 14 (Sonoma) or later on Apple Silicon (M1 or later)\n>\n> **Preview:** Linux x86_64 builds are experimental and currently support the core proxy flow only.\n\n### Install\n\n1. Go to the [latest release](https://github.com/gglucass/headroom-desktop/releases/latest)\n2. On macOS, download the `.dmg` file (for example `Headroom_0.2.9.dmg`)\n3. Open the DMG, drag **Headroom** to Applications\n4. Launch Headroom — it appears in your menu bar and walks you through setup\n\nHeadroom is signed and notarized, so macOS will open it without Gatekeeper warnings.\n\nLinux preview artifacts are published on the same release page. Today they are best treated as a preview for the core Headroom proxy, Claude Code routing, and RTK flow. `Headroom Learn` is not supported yet on Linux preview builds.\n\n---\n\n![Headroom dashboard showing $204 saved across 66.8M tokens](docs/screenshot-1.png)\n\n---\n\n> **Note:** Headroom supports **Claude Code** and **Codex** (CLI and desktop app). Support for additional clients is planned.\n\nHeadroom is a local-first desktop tray app that routes your coding clients through a local optimization pipeline. The stable target is macOS; Linux builds are currently experimental. It installs and manages a self-contained Python runtime, bundles proven token-saving tools, and surfaces savings analytics — all without touching your system environment.\n\n## How it works\n\nHeadroom sits in your menu bar and does three things:\n\n1. **Installs a managed Python runtime** into Headroom-owned storage — isolated from your system Python, no `pip install --user` pollution.\n2. **Chains token-saving tools** (`headroom` for prompt optimization, `rtk` for CLI output compression) between your client and the LLM API.\n3. **Shows you the math** — daily and monthly savings charts, per-client token stats, and pipeline health.\n\nThe app ships as a slim Tauri shell (~a few MB). Heavy Python components are fetched on first launch and kept in `~/Library/Application Support/Headroom`.\n\n## What Headroom changes on your system\n\nFull disclosure of every location Headroom writes to, so you can decide before installing. The install screen in the app shows the same list, and the uninstall flow reverses every item.\n\n**On install:**\n\n- Downloads a self-contained Python runtime (~2 GB) under `~/Library/Application Support/Headroom`. Your system Python is untouched.\n- Adds a `PreToolUse` hook to `~/.claude/settings.json` and a script at `~/.claude/hooks/headroom-rtk-rewrite.sh` so Claude Code routes through Headroom. A timestamped backup of `settings.json` is written before any edit.\n- For Codex, adds a Headroom provider block to `~/.codex/config.toml` and an `OPENAI_BASE_URL` export to your managed shell block so the Codex CLI and desktop app route through the local proxy. The TOML block is fenced with `# >>> headroom:... >>>` markers, a backup is written before any edit, and existing Codex threads are retagged to the managed provider.\n- Creates `~/Library/Application Support/Headroom` for logs, caches, and per-client setup state.\n- Stores your Headroom session token in the macOS Keychain under services prefixed `com.extraheadroom.headroom`.\n- If you opt into \"launch at login,\" installs a LaunchAgent plist at `~/Library/LaunchAgents/`. Never added otherwise.\n- Adds a managed block to your shell profile (`.zshrc`, `.zprofile`, etc.) that prepends Headroom's managed `bin` directory (under `~/Library/Application Support/Headroom`) to `PATH` so `rtk` is available in your terminals. Every managed block is fenced with `# >>> headroom:... >>>` markers and can be removed by hand if you prefer.\n\n**On quit (or pause):** Headroom tears down everything that would intercept your clients — the Claude Code hook entry and hook script, the `ANTHROPIC_BASE_URL` and `OPENAI_BASE_URL` redirects, the Codex provider block in `~/.codex/config.toml`, and the managed shell blocks. Codex threads are retagged back to their native provider. Claude Code and Codex behave exactly as they did before Headroom was launched. The Python runtime, logs, and keychain entries stay on disk so the next launch is fast.\n\n**On uninstall (Settings → Uninstall Headroom):** Everything listed above is removed, including the LaunchAgent plist, `~/Library/Preferences/com.extraheadroom.headroom*`, `~/Library/Caches/com.extraheadroom.headroom`, and the keychain entries. The uninstall dialog in the app shows the full list before you confirm.\n\nIf the proxy dies unexpectedly, a watchdog restarts it; after repeated failures it auto-pauses and strips interception so your clients keep working without intervention.\n\n## Bundled tools\n\n| Tool | What it does | Default |\n|------|-------------|---------|\n| [headroom](https://pypi.org/project/headroom-ai/) | Prompt optimization pipeline (Python) | Required |\n| [rtk](https://github.com/gglucass/rtk) | Rewrites Claude Code bash commands to strip noise before it reaches the context window | Opt-in add-on |\n| [markitdown](https://github.com/microsoft/markitdown) | Converts PDFs and Office documents to clean Markdown before the agent reads them | Opt-in add-on |\n| ponytail | Nudges the agent toward leaner, less over-engineered code | Opt-in add-on |\n\n**Tool inclusion policy:** only tools that run entirely locally, inside Headroom-managed storage, with a stable CLI surface make it in. No cloud dependencies, no host profile mutations. See [`research/tool-compatibility-matrix.md`](research/tool-compatibility-matrix.md).\n\n## Compression benchmarks\n\nNumbers from the [headroom](https://github.com/chopratejas/headroom) open-source library that powers the optimization pipeline, summarized from the current published benchmarks page.\n\n### Current benchmark summary\n\n| Benchmark | What it tests | Result |\n|-----------|---------------|--------|\n| Scrapinghub article extraction | Extract article bodies from 181 HTML pages while removing boilerplate | 0.919 F1, 98.2% recall, **94.9% compression** |\n| SmartCrusher JSON compression | Find a critical error in 100 production log entries after compression | 4/4 correct, **87.6% compression** |\n| QA accuracy preservation | Ask the same questions on raw HTML vs. extracted content | 0.87 F1 vs. 0.85 baseline, 62% exact match vs. 60% |\n| Multi-tool agent test | 4-tool agent investigating a memory leak with compressed tool output | 6,100 vs. 15,662 tokens sent, **76.3% compression**, same findings |\n\n### Benchmark details\n\n| Benchmark | Setup | Accuracy | Compression |\n|-----------|-------|----------|-------------|\n| HTML extraction | Scrapinghub article extraction benchmark, 181 pages | 0.919 F1, 0.879 precision, 0.982 recall | 94.9% |\n| JSON compression | 100 production log entries, critical error at position 67 | 4/4 correct answers | 87.6% |\n| QA preservation | SQuAD v2 + HotpotQA on raw HTML vs. extracted content | +0.02 F1, +2% exact match vs. raw HTML | — |\n| Multi-tool agent test | Agno agent with 4 tools investigating a memory leak | Same findings as baseline | 76.3% |\n\n### What compresses well vs. what doesn't\n\n| Content type | Typical savings | Notes |\n|-------------|-----------------|-------|\n| JSON arrays (search results, API responses, DB rows) | 86–100% | Primary use case |\n| Structured logs | 82–95% | Errors and anomalies always preserved |\n| Agentic conversations (25–50 turns) | 56–81% | |\n| Plain text / documentation | 43–46% | Cost savings only, adds latency |\n| Source code | Mostly passthrough | Code in active messages is protected by default — see limitations |\n\n### Limitations worth knowing\n\n- **Code compression is intentionally conservative.** Code in recent messages (last 4 by default) and any conversation where the user is asking about code (`analyze`, `debug`, `fix`, etc.) is never compressed. The savings from code come from dropping old, no-longer-relevant messages — not from stripping function bodies.\n- **Short content is skipped.** Arrays under 5 items and content under 200 tokens pass through unchanged.\n- **Text compression (LLMLingua) adds latency.** It requires a ~2 GB model download on first use and doesn't break even on fast models. Useful for cost reduction, not speed.\n- **Plain-text RAG results pass through.** Compression targets tool outputs and JSON; plain text in user messages is not compressed.\n\nFull methodology and reproducible benchmarks: [chopratejas/headroom benchmarks](https://chopratejas.github.io/headroom/benchmarks/) · [limitations](https://chopratejas.github.io/headroom/LIMITATIONS/)\n\n## Interesting design decisions\n\n- **Zero host pollution.** Headroom owns its entire dependency tree. Uninstalling the app leaves your shell, your Python, and your PATH exactly as they were (except for the optional `rtk` PATH addition, which is reversible).\n- **Rust shell, Python brain.** The Tauri/Rust layer handles tray lifecycle, managed installs, client detection, and update delivery. The optimization work happens in Python, where the headroom ecosystem lives.\n- **Client config with rollback.** When Headroom edits a supported client's config (e.g. Claude Code settings), it writes a backup first. Disabling or uninstalling restores the original.\n- **Open source shell, private web.** The desktop app is MIT-licensed and open source. The marketing site and account backend live in a separate private repo — so contributors can build and run the full desktop experience without needing backend access.\n\n## Project structure\n\n```\nsrc/              React + Tauri frontend (tray UI, onboarding, savings dashboard)\nsrc-tauri/        Rust backend\n  state.rs        Dashboard state and data shaping\n  tool_manager.rs Bootstrap, Python runtime, and tool installation\n  client_adapters.rs  Client detection and guided setup\n  insights.rs     Daily local recommendation engine\nresearch/         Tool vetting artifacts and compatibility matrix\ndocs/             Architecture notes, release process\n```\n\n## macOS release flow\n\nUpdates ship outside the App Store via Tauri's built-in updater. The app polls GitHub Releases in the background, prompts before installing, and requests a restart to finish. Both local DMG builds and the GitHub Actions workflow run `./scripts/verify-release.sh` — a failing test blocks the build before anything is published.\n\nSee [`docs/macos-release.md`](docs/macos-release.md) for the full release setup.\n\n### Branching and versioning\n\nUse `./scripts/bump-version.sh <version>` to update all four version files at once (`package.json`, `package-lock.json`, `src-tauri/tauri.conf.json`, `Cargo.toml`). Accepts `X.Y.Z` or `X.Y.Z-rc.N` (leading `v` is stripped).\n\nTwo release channels are wired into CI:\n\n- **`main`** — stable channel. Users on the default download get updates from here. Version must be plain `X.Y.Z`. Branch-protected: direct pushes are rejected; changes land via PR only.\n- **`staging`** — release candidate channel. Installs via a separate build pointing at the roll",
    "strategic_keywords": [
      "rag",
      "runtime",
      "llm"
    ],
    "relationship_label": "Runtime 参考",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 11,
      "relevance": 20,
      "novelty": 15,
      "productize": 14,
      "adoption": 6,
      "relation": 9,
      "risk_signal": 4,
      "total": 79
    },
    "strategic_score": 79
  },
  {
    "owner": "qeeqbox",
    "name": "social-analyzer",
    "full_name": "qeeqbox/social-analyzer",
    "url": "https://github.com/qeeqbox/social-analyzer",
    "description": "API, CLI, and Web App for analyzing and finding a person's profile in 1000 social media \\ websites",
    "language": "JavaScript",
    "total_stars": 23287,
    "forks": 2237,
    "stars_this_period": 44,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "analysis",
        "analyzer",
        "cli",
        "information-gathering",
        "javascript",
        "nodejs",
        "nodejs-cli",
        "osint",
        "pentest",
        "pentesting",
        "person-profile",
        "profile",
        "python",
        "reconnaissance",
        "security-tools",
        "social-analyzer",
        "social-media",
        "sosint",
        "username"
      ],
      "license": "AGPL-3.0",
      "open_issues": 27,
      "created_at": "2020-11-30T19:04:26Z",
      "pushed_at": "2026-01-12T21:50:25Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 2237,
      "watchers": 412,
      "archived": false,
      "size_kb": 62763
    },
    "readme_content": "<p align=\"center\"> <img src=\"https://raw.githubusercontent.com/qeeqbox/social-analyzer/main/readme/socialanalyzerlogo_.png\"></p>\n\nSocial Analyzer - API, CLI, and Web App for analyzing & finding a person's profile across +1000 social media \\ websites. It includes different analysis and detection modules, and you can choose which modules to use during the investigation process.\n\nThe detection modules utilize a rating mechanism based on different detection techniques, which produces a rate value that starts from 0 to 100 (No-Maybe-Yes). This module is intended to have fewer false positives.\n\nThe analysis and public extracted information from this OSINT tool could help investigate profiles related to suspicious or malicious activities such as cyberbullying, cyber grooming, cyberstalking, and spreading misinformation.\n\n`This project is currently used by some law enforcement agencies in countries where resources are limited - The detection database is different than the one shared here..`\n\n## So·cial Me·di·a\nWebsites and applications that enable users to create and share content or to participate in social networking - Oxford Dictionary\n\n## Structure\n<img src=\"https://raw.githubusercontent.com/qeeqbox/social-analyzer/main/readme/structure.png\">\n\n\n## APP (Preferred!)\nStandard localhost WEB APP url: http://0.0.0.0:9005/app.html\n\n<img src=\"https://raw.githubusercontent.com/qeeqbox/social-analyzer/main/readme/intro_fast.gif\" style=\"max-width:768px\"/>\n\n## CLI \n<img src=\"https://raw.githubusercontent.com/qeeqbox/social-analyzer/main/readme/cli.gif\" style=\"max-width:768px\"/>\n\n## Features\n- String & name analysis (Permutations and Combinations)\n- Find a profile using multiple techniques (HTTPS library & Webdriver)\n- Multi profile search (Used for correlation - any combination separated with \",\" )\n- Multilayers detections (OCR, normal, advanced & special)\n- Visualized profile information using Ixora (Metadata & Patterns)\n- Metadata & Patterns extraction (Added from Qeeqbox OSINT project)\n- Force-directed Graph for Metadata (Needs ExtractPatterns)\n- Search by top ranking or by country (Alexa Ranking)\n- Search by type (adult, music, etc.. - automated websites stats)\n- Profiles stats and static info (Category country)\n- Cross Metadata stats (Added from Qeeqbox OSINT project)\n- Auto-flirtation to unnecessary output (Enable javascript etc..)\n- Search engine lookup (Google API - optional)\n- Custom search queries (Google API & DuckDuckGo API - optional)\n- Profile screenshot, title, info, and website description\n- Find name origins, name similarity & common words by language\n- Find possible profile\\person age (Limited analysis)\n- Custom user-agent, proxy, timeout & implicit wait\n- Python CLI & NodeJS CLI (limited to FindUserProfilesFast option)\n- Screenshots of detected profile (The latest version of Chrome must be installed)\n- Grid option for faster checking (limited to docker-compose)\n- Dump logs to folder or terminal (prettified)\n- Adjust finding\\getting profile workers (default 15)\n- Re-checking option for failed profiles\n- Filter profiles by good, maybe, and bad\n- Save the analysis as a JSON file\n- Simplified web interface and CLI\n- And, more!!\n\n## Special Detections\n- Facebook (Phone number, name, or profile name)\n- Gmail (example@gmail.com)\n- Google (example@example.com)\n\n## Install & Run\n### Linux (As Node WebApp)\n```bash\nsudo apt-get update\n#Depedning on your Linux distro, you may or may not need these 2 lines\nsudo DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common\nsudo add-apt-repository ppa:mozillateam/ppa -y\nsudo apt-get install -y firefox-esr tesseract-ocr git nodejs npm\ngit clone https://github.com/qeeqbox/social-analyzer.git\ncd social-analyzer\nnpm update\nnpm install\nnpm start\n```\n\n### Linux (As Node CLI)\n```bash\nsudo apt-get update\n#Depedning on your Linux distro, you may or may not need these 2 lines\nsudo DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common\nsudo add-apt-repository ppa:mozillateam/ppa -y\nsudo apt-get install -y firefox-esr tesseract-ocr git nodejs npm\ngit clone https://github.com/qeeqbox/social-analyzer.git\ncd social-analyzer\nnpm install\nnodejs app.js --username \"johndoe\"\n#or\nnodejs app.js --username \"johndoe,janedoe\" --metadata\n#or\nnodejs app.js --username \"johndoe,janedoe\" --metadata --top 100\n#or\nnodejs app.js --username \"johndoe\" --type \"adult\"\n```\n\n### Linux (As python package)\n```bash\nsudo apt-get update\nsudo apt-get install python3 python3-pip\npip3 install social-analyzer\npython3 -m social-analyzer --username \"johndoe\"\n#or\npython3 -m social-analyzer --username \"johndoe\" --metadata\n#or\npython3 -m social-analyzer --username \"johndoe\" --metadata --top 100\n#or\npython3 -m social-analyzer --username \"johndoe\" --type \"adult\"\n#or\npython3 -m social-analyzer --username \"johndoe\" --websites \"car\" --logs --screenshots\n```\n\n### Linux (As python script)\n```bash\nsudo apt-get update\nsudo apt-get install git python3 python3-pip\ngit clone https://github.com/qeeqbox/social-analyzer\ncd social-analyzer\npip3 install -r requirements.txt\npython3 app.py --username \"janedoe\"\n#or\npython3 app.py --username \"johndoe\" --metadata\n#or\npython3 app.py --username \"johndoe\" --metadata --top 100\n#or\npython3 app.py --username \"johndoe\" --type \"adult\"\n#or\npython3 app.py --username \"johndoe\" --websites \"car\" --logs --screenshots\n```\n\n### Importing as object (python)\n```python\n\n#E.g. #1\nfrom importlib import import_module\nSocialAnalyzer = import_module(\"social-analyzer\").SocialAnalyzer()\nresults = SocialAnalyzer.run_as_object(username=\"johndoe\",silent=True)\nprint(results)\n\n#E.g. #2\nfrom importlib import import_module\nSocialAnalyzer = import_module(\"social-analyzer\").SocialAnalyzer()\nresults = SocialAnalyzer.run_as_object(username=\"johndoe,janedoe\",silent=True,output=\"json\",filter=\"good\",metadata=False,timeout=10, profiles=\"detected\")\nprint(results)\n```\n\n### Linux, Windows, MacOS, Raspberry pi..\n- check this [wiki](https://github.com/qeeqbox/social-analyzer/wiki/install) for all possible installation methods\n- check this [wiki](https://github.com/qeeqbox/social-analyzer/wiki/integration) for integrating social-analyzer with your OSINT tools, feeds, etc...\n\n## social-analyzer --h\n```\nRequired Arguments:\n  --username   E.g. johndoe, john_doe or johndoe9999\n\nOptional Arguments:\n  --websites    A website or websites separated by space E.g. youtube, tiktokor tumblr\n  --mode        Analysis mode E.g.fast -> FindUserProfilesFast, slow -> FindUserProfilesSlow or special -> FindUserProfilesSpecial\n  --output      Show the output in the following format: json -> json outputfor integration or pretty -> prettify the output\n  --options     Show the following when a profile is found: link, rate, titleor text\n  --method      find -> show detected profiles, get -> show all profiles regardless detected or not, all -> combine find & get\n  --filter      Filter detected profiles by good, maybe or bad, you can do combine them with comma (good,bad) or use all\n  --profiles    Filter profiles by detected, unknown or failed, you can do combine them with comma (detected,failed) or use all\n  --countries   select websites by country or countries separated by space as: us br ru\n  --type        Select websites by type (Adult, Music etc)\n  --top         select top websites as 10, 50 etc...[--websites is not needed]\n  --extract     Extract profiles, urls & patterns if possible\n  --metadata    Extract metadata if possible (pypi QeeqBox OSINT)\n  --trim        Trim long strings\n  --gui         Reserved for a gui (Not implemented)\n  --cli         Reserved for a cli (Not needed)\n\nListing websites & detections:\n  --list        List all available websites\n\nSetting:\n  --headers     Headers as dict\n  --logs_dir    Change logs directory\n  --timeout     Change timeout between each request\n  --silent      Disable output to screen\n```\n\n## Open Shell\n[![Open in Cloud Shell](https://img.shields.io/static/v1?label=%3E_&message=Open%20in%20Cloud%20Shell&color=3267d6&style=flat-square)](https://ssh.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https://github.com/qeeqbox/social-analyzer&tutorial=README.md) [![Open in repl.it Shell](https://img.shields.io/static/v1?label=%3E_&message=Open%20in%20repl.it%20Shell&color=606c74&style=flat-square)](https://repl.it/github/qeeqbox/social-analyzer)\n\n## Resources\n- DuckDuckGo API, Google API, NodeJS, bootstrap, selectize, jQuery, Wikipedia, font-awesome, selenium-webdriver & tesseract.js\n- Let me know if I missed a reference or resource!\n\n## Disclaimer\\Notes\n- Download this project from GitHub and treat it as a security project\n- If you want your website to be excluded from this project list, please reach out to me\n- This tool is meant to be used locally, not as a service (It does not have any Access Control)\n- For issues related to modules that end with -private or under the private group ![](https://raw.githubusercontent.com/qeeqbox/social-analyzer/main/readme/modules.png), reach out directly to me (do not open an issue on GitHub)\n\n## Other Projects\n[![](https://github.com/qeeqbox/.github/blob/main/data/analyzer.png)](https://github.com/qeeqbox/analyzer) [![](https://github.com/qeeqbox/.github/blob/main/data/chameleon.png)](https://github.com/qeeqbox/chameleon) [![](https://github.com/qeeqbox/.github/blob/main/data/honeypots.png)](https://github.com/qeeqbox/honeypots) [![](https://github.com/qeeqbox/.github/blob/main/data/osint.png)](https://github.com/qeeqbox/osint) [![](https://github.com/qeeqbox/.github/blob/main/data/url-sandbox.png)](https://github.com/qeeqbox/url-sandbox) [![](https://github.com/qeeqbox/.github/blob/main/data/mitre-visualizer.png)](https://github.com/qeeqbox/mitre-visualizer) [![](https://github.com/qeeqbox/.github/blob/main/data/woodpecker.png)](https://github.com/qeeqbox/woodpecker) [![](https://github.com/qeeqbox/.github/blob/main/data/docker-images.png)](https://github.com/qeeqbox/docker-images) [![](https://github.com/qeeqbox/.github/blob/main/data/seahorse.png)](https://github.com/qeeqbox/seahorse) [![](https://github.com/qeeqbox/.github/blob/main/data/rhino.png)](https://github.com/qeeqbox/rhino) [![](https://github.com/qeeqbox/.github/blob/main/data/raven.png)](https://github.com/qeeqbox/raven) [![](https://github.com/qeeqbox/.github/blob/main/data/image-analyzer.png)](https://github.com/qeeqbox/image-analyzer)\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"social-analyzer\",\n  \"version\": \"2.0.32\",\n  \"description\": \"Advanced Social Media Profiles Finder and String Analysis Tool\",\n  \"main\": \"app.js\",\n  \"engines\": {\n    \"node\": \">=20.18.1\"\n  },\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"start\": \"node app.js --gui\"\n  },\n  \"dependencies\": {\n    \"async\": \"3.2.4\",\n    \"cheerio\": \"^1.0.0-rc.11\",\n    \"cli-table\": \"0.3.11\",\n    \"colors\": \"1.4.0\",\n    \"express\": \"^4.18.1\",\n    \"express-async-errors\": \"3.1.1\",\n    \"follow-redirects\": \"^1.15.1\",\n    \"franc\": \"^6.0.0\",\n    \"geckodriver\": \"^3.0.1\",\n    \"generatorics\": \"1.1.0\",\n    \"html-to-text\": \"8.2.0\",\n    \"https-proxy-agent\": \"5.0.1\",\n    \"ixora\": \"1.0.10\",\n    \"langs\": \"2.0.0\",\n    \"lodash\": \">=4.17.21\",\n    \"most-common-words-by-language\": \"3.0.10\",\n    \"n\": \"^8.2.0\",\n    \"prettier\": \"2.7.1\",\n    \"pretty-error\": \"4.0.0\",\n    \"sanitize-html\": \">=2.7.0\",\n    \"selenium-webdriver\": \"4.3.0\",\n    \"semver\": \"7.3.7\",\n    \"slash\": \"4.0.0\",\n    \"string-similarity\": \"4.0.4\",\n    \"tesseract.js\": \"2.1.5\",\n    \"wink-tokenizer\": \"5.3.0\",\n    \"wordsninja\": \"1.0.0\",\n    \"yargs\": \"17.5.1\"\n  },\n  \"author\": \"QeeqBox\",\n  \"license\": \"AGPL-3.0\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/qeeqbox/social-analyzer\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"^8.18.0\",\n    \"eslint-config-standard\": \"^17.0.0\",\n    \"eslint-plugin-import\": \"^2.26.0\",\n    \"eslint-plugin-node\": \"^11.1.0\",\n    \"eslint-plugin-promise\": \"^6.0.0\"\n  },\n  \"type\": \"module\"\n}\n",
    "strategic_keywords": [
      "agent"
    ],
    "relationship_label": "开发者工具",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 8,
      "novelty": 4,
      "productize": 11,
      "adoption": 10,
      "relation": 7,
      "risk_signal": 8,
      "total": 61
    },
    "strategic_score": 61
  },
  {
    "owner": "zarazhangrui",
    "name": "follow-builders",
    "full_name": "zarazhangrui/follow-builders",
    "url": "https://github.com/zarazhangrui/follow-builders",
    "description": "AI builders digest — monitors top AI builders on X and YouTube podcasts, remixes their content into digestible summaries. Follow builders, not influencers.",
    "language": "JavaScript",
    "total_stars": 5500,
    "forks": 699,
    "stars_this_period": 44,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [],
      "license": "NOASSERTION",
      "open_issues": 36,
      "created_at": "2026-03-14T16:28:39Z",
      "pushed_at": "2026-06-29T08:08:32Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 699,
      "watchers": 23,
      "archived": false,
      "size_kb": 3131
    },
    "readme_content": "**English** | [中文](README.zh-CN.md)\n\n# Follow Builders, Not Influencers\n\nAn AI-powered digest that tracks the top builders in AI — researchers, founders, PMs,\nand engineers who are actually building things — and delivers curated summaries of\nwhat they're saying.\n\n**Philosophy:** Follow people who build products and have original opinions, not\ninfluencers who regurgitate information.\n\n## What You Get\n\nA daily or weekly digest delivered to your preferred messaging app (Telegram, Discord,\nWhatsApp, etc.) with:\n\n- Summaries of new podcast episodes from top AI podcasts\n- Key posts and insights from 26 curated AI builders on X/Twitter\n- Full articles from official AI company blogs (Anthropic Engineering, Claude Blog)\n- Links to all original content\n- Available in English, Chinese, or bilingual\n\n## Quick Start\n\n1. Install the skill in your agent (OpenClaw or Claude Code)\n2. Say \"set up follow builders\" or invoke `/follow-builders`\n3. The agent walks you through setup conversationally — no config files to edit\n\nThe agent will ask you:\n- How often you want your digest (daily or weekly) and what time\n- What language you prefer\n- How you want it delivered (Telegram, email, or in-chat)\n\nNo API keys needed — all content is fetched centrally.\nYour first digest arrives immediately after setup.\n\n## Changing Settings\n\nYour delivery preferences are configurable through conversation. Just tell your agent:\n\n- \"Switch to weekly digests on Monday mornings\"\n- \"Change language to Chinese\"\n- \"Make the summaries shorter\"\n- \"Show me my current settings\"\n\nThe source list (builders and podcasts) is curated centrally and updates\nautomatically — you always get the latest sources without doing anything.\n\n## Customizing the Summaries\n\nThe skill uses plain-English prompt files to control how content is summarized.\nYou can customize them two ways:\n\n**Through conversation (recommended):**\nTell your agent what you want — \"Make summaries more concise,\" \"Focus on actionable\ninsights,\" \"Use a more casual tone.\" The agent updates the prompts for you.\n\n**Direct editing (power users):**\nEdit the files in the `prompts/` folder:\n- `summarize-podcast.md` — how podcast episodes are summarized\n- `summarize-tweets.md` — how X/Twitter posts are summarized\n- `summarize-blogs.md` — how blog posts are summarized\n- `digest-intro.md` — the overall digest format and tone\n- `translate.md` — how English content is translated to Chinese\n\nThese are plain English instructions, not code. Changes take effect on the next digest.\n\n## Default Sources\n\n### Podcasts (6)\n- [Latent Space](https://www.youtube.com/@LatentSpacePod)\n- [Training Data](https://www.youtube.com/playlist?list=PLOhHNjZItNnMm5tdW61JpnyxeYH5NDDx8)\n- [No Priors](https://www.youtube.com/@NoPriorsPodcast)\n- [Unsupervised Learning](https://www.youtube.com/@RedpointAI)\n- [The MAD Podcast with Matt Turck](https://www.youtube.com/@DataDrivenNYC)\n- [AI & I by Every](https://www.youtube.com/playlist?list=PLuMcoKK9mKgHtW_o9h5sGO2vXrffKHwJL)\n\n### AI Builders on X (26)\n[Andrej Karpathy](https://x.com/karpathy), [Swyx](https://x.com/swyx), [Josh Woodward](https://x.com/joshwoodward), [Boris Cherny](https://x.com/bcherny), [Thibault Sottiaux](https://x.com/thsottiaux), [Peter Yang](https://x.com/petergyang), [Nan Yu](https://x.com/thenanyu), [Madhu Guru](https://x.com/realmadhuguru), [Amanda Askell](https://x.com/AmandaAskell), [Cat Wu](https://x.com/_catwu), [Thariq](https://x.com/trq212), [Google Labs](https://x.com/GoogleLabs), [Amjad Masad](https://x.com/amasad), [Guillermo Rauch](https://x.com/rauchg), [Alex Albert](https://x.com/alexalbert__), [Aaron Levie](https://x.com/levie), [Ryo Lu](https://x.com/ryolu_), [Garry Tan](https://x.com/garrytan), [Matt Turck](https://x.com/mattturck), [Zara Zhang](https://x.com/zarazhangrui), [Nikunj Kothari](https://x.com/nikunj), [Peter Steinberger](https://x.com/steipete), [Dan Shipper](https://x.com/danshipper), [Aditya Agarwal](https://x.com/adityaag), [Sam Altman](https://x.com/sama), [Claude](https://x.com/claudeai)\n\n### Official Blogs (2)\n- [Anthropic Engineering](https://www.anthropic.com/engineering) — technical deep-dives from the Anthropic team\n- [Claude Blog](https://claude.com/blog) — product announcements and updates from Claude\n\n## Installation\n\n### OpenClaw\n```bash\n# From ClawhHub (coming soon)\nclawhub install follow-builders\n\n# Or manually\ngit clone https://github.com/zarazhangrui/follow-builders.git ~/skills/follow-builders\ncd ~/skills/follow-builders/scripts && npm install\n```\n\n### Claude Code\n```bash\ngit clone https://github.com/zarazhangrui/follow-builders.git ~/.claude/skills/follow-builders\ncd ~/.claude/skills/follow-builders/scripts && npm install\n```\n\n## Requirements\n\n- An AI agent (OpenClaw, Claude Code, or similar)\n- Internet connection (to fetch the central feed)\n\nThat's it. No API keys needed. All content (blog articles + YouTube transcripts + X/Twitter posts)\nis fetched centrally and updated daily.\n\n## How It Works\n\n1. A central feed is updated daily with the latest content from all sources\n   (blog articles via web scraping, YouTube transcripts via Supadata, X/Twitter via official API)\n2. Your agent fetches the feed — one HTTP request, no API keys\n3. Your agent remixes the raw content into a digestible summary using your preferences\n4. The digest is delivered to your messaging app (or shown in-chat)\n\nSee [examples/sample-digest.md](examples/sample-digest.md) for what the output looks like.\n\n## Privacy\n\n- No API keys are sent anywhere — all content is fetched centrally\n- If you use Telegram/email delivery, those keys are stored locally in `~/.follow-builders/.env`\n- The skill only reads public content (public blog posts, public YouTube videos, public X posts)\n- Your configuration, preferences, and reading history stay on your machine\n\n## License\n\nMIT\n",
    "strategic_keywords": [
      "agent",
      "skill"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "medium",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme"
    ],
    "score_breakdown": {
      "heat": 13,
      "relevance": 16,
      "novelty": 8,
      "productize": 11,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 6,
      "total": 70
    },
    "strategic_score": 70
  },
  {
    "owner": "nodejs",
    "name": "node",
    "full_name": "nodejs/node",
    "url": "https://github.com/nodejs/node",
    "description": "Node.js JavaScript runtime ✨🐢🚀✨",
    "language": "JavaScript",
    "total_stars": 118149,
    "forks": 35789,
    "stars_this_period": 39,
    "source_slice": "javascript",
    "source_slices": [
      "javascript"
    ],
    "metadata": {
      "topics": [
        "javascript",
        "js",
        "linux",
        "macos",
        "mit",
        "node",
        "nodejs",
        "runtime",
        "windows"
      ],
      "license": "NOASSERTION",
      "open_issues": 2359,
      "created_at": "2014-11-26T19:57:11Z",
      "pushed_at": "2026-06-29T21:59:23Z",
      "homepage": "https://nodejs.org",
      "default_branch": "main",
      "forks": 35789,
      "watchers": 3060,
      "archived": false,
      "size_kb": 1506083
    },
    "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": 12,
      "relevance": 16,
      "novelty": 15,
      "productize": 14,
      "adoption": 8,
      "relation": 8,
      "risk_signal": 6,
      "total": 79
    },
    "strategic_score": 79
  },
  {
    "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": 140436,
    "forks": 31277,
    "stars_this_period": 36,
    "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": 4155,
      "created_at": "2016-10-05T23:32:51Z",
      "pushed_at": "2026-06-29T21:57:27Z",
      "homepage": "https://nextjs.org",
      "default_branch": "canary",
      "forks": 31277,
      "watchers": 1649,
      "archived": false,
      "size_kb": 2499123
    },
    "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": 12,
      "relevance": 16,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 8,
      "total": 76
    },
    "strategic_score": 76
  },
  {
    "owner": "go-gitea",
    "name": "gitea",
    "full_name": "go-gitea/gitea",
    "url": "https://github.com/go-gitea/gitea",
    "description": "Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD",
    "language": "Go",
    "total_stars": 56598,
    "forks": 6849,
    "stars_this_period": 33,
    "source_slice": "go",
    "source_slices": [
      "go"
    ],
    "metadata": {
      "topics": [
        "bitbucket",
        "cicd",
        "devops",
        "docker-registry-v2",
        "git",
        "git-gui",
        "git-lfs",
        "git-server",
        "gitea",
        "github",
        "github-actions",
        "gitlab",
        "go",
        "golang",
        "hacktoberfest",
        "maven-server",
        "npm-registry",
        "self-hosted",
        "typescript",
        "vue"
      ],
      "license": "MIT",
      "open_issues": 2756,
      "created_at": "2016-11-01T02:13:26Z",
      "pushed_at": "2026-06-29T21:35:27Z",
      "homepage": "https://gitea.com",
      "default_branch": "main",
      "forks": 6849,
      "watchers": 486,
      "archived": false,
      "size_kb": 341841
    },
    "readme_content": "# Gitea\n\n[![](https://github.com/go-gitea/gitea/actions/workflows/release-nightly.yml/badge.svg?branch=main)](https://github.com/go-gitea/gitea/actions/workflows/release-nightly.yml?query=branch%3Amain \"Release Nightly\")\n[![](https://img.shields.io/discord/322538954119184384.svg?logo=discord&logoColor=white&label=Discord&color=5865F2)](https://discord.gg/Gitea \"Join the Discord chat at https://discord.gg/Gitea\")\n[![](https://goreportcard.com/badge/gitea.dev)](https://goreportcard.com/report/gitea.dev \"Go Report Card\")\n[![](https://pkg.go.dev/badge/gitea.dev?status.svg)](https://pkg.go.dev/gitea.dev \"GoDoc\")\n[![](https://img.shields.io/github/release/go-gitea/gitea.svg)](https://github.com/go-gitea/gitea/releases/latest \"GitHub release\")\n[![](https://www.codetriage.com/go-gitea/gitea/badges/users.svg)](https://www.codetriage.com/go-gitea/gitea \"Help Contribute to Open Source\")\n[![](https://opencollective.com/gitea/tiers/backers/badge.svg?label=backers&color=brightgreen)](https://opencollective.com/gitea \"Become a backer/sponsor of gitea\")\n[![](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT \"License: MIT\")\n[![](https://badges.crowdin.net/gitea/localized.svg)](https://translate.gitea.com \"Crowdin\")\n\n[繁體中文](./README.zh-tw.md) | [简体中文](./README.zh-cn.md)\n\n## Purpose\n\nThe goal of Gitea is to make the easiest, fastest, and most painless way of\nsetting up a self-hosted all-in-one software development service,\nincluding Git hosting, code management, code review, issue tracking, project kanban, wiki,\nteam collaboration, package registry and CI/CD which can reuse GitHub Actions.\n\nAs Gitea is written in Go, it works across **all** the platforms and\narchitectures that are supported by Go, including Linux, macOS, FreeBSD/OpenBSD and Windows\non x86, amd64, ARM, RISC-V 64 and PowerPC architectures.\n\nFor online demonstrations, you can visit [demo.gitea.com](https://demo.gitea.com).\n\nFor accessing free Gitea service (with a limited number of repositories), you can visit [gitea.com](https://gitea.com/user/login).\n\nTo quickly deploy your own dedicated Gitea instance on Gitea Cloud, you can start a free trial at [cloud.gitea.com](https://cloud.gitea.com),\nor use container (docker/podman/etc) to deploy on your own server with the [official image](https://hub.docker.com/r/gitea/gitea).\n\n## Documentation\n\nYou can find comprehensive documentation on our official [documentation website](https://docs.gitea.com/).\n\nIt includes installation, administration, usage, development, contributing guides, and more to help you get started and explore all features effectively.\n\nIf you have any suggestions or would like to contribute to it, you can visit the [documentation repository](https://gitea.com/gitea/docs)\n\n## Building\n\nSee [docs/build-setup.md](docs/build-setup.md) for prerequisites\nand [docs/development.md](docs/development.md) for setting up a local development environment, linting, and testing.\n\nIf you'd like to build from source or make a distribution package, see [docs/build-source.md](docs/build-source.md) for more information.\n\nAfter building, you can run `./gitea web` to start the server, or `./gitea help` to see all available commands.\n\n## Contributing\n\nExpected workflow is: Fork -> Patch -> Push -> Pull Request\n\n> [!NOTE]\n>\n> 1. **YOU MUST READ THE [CONTRIBUTORS GUIDE](CONTRIBUTING.md) BEFORE STARTING TO WORK ON A PULL REQUEST.**\n> 2. New to the codebase? The [development guide](docs/development.md) walks through setting up a local environment and building from source.\n> 3. If you have found a vulnerability in the project, please write privately to **security@gitea.io**. Thanks!\n\n## Translating\n\n[![Crowdin](https://badges.crowdin.net/gitea/localized.svg)](https://translate.gitea.com)\n\nTranslations are done through [Crowdin](https://translate.gitea.com). If you want to translate to a new language, ask one of the managers in the Crowdin project to add a new language there.\n\nYou can also just create an issue for adding a language or ask on Discord on the #translation channel. If you need context or find some translation issues, you can leave a comment on the string or ask on Discord. For general translation questions there is a section in the docs. Currently a bit empty, but we hope to fill it as questions pop up.\n\nGet more information from [documentation](https://docs.gitea.com/contributing/localization).\n\n## Official and Third-Party Projects\n\nWe provide an official [go-sdk](https://gitea.com/gitea/go-sdk), a CLI tool called [tea](https://gitea.com/gitea/tea) and an [action runner](https://gitea.com/gitea/act_runner) for Gitea Action.\n\nWe maintain a list of Gitea-related projects at [gitea/awesome-gitea](https://gitea.com/gitea/awesome-gitea), where you can discover more third-party projects, including SDKs, plugins, themes, and more.\n\n## Communication\n\n[![](https://img.shields.io/discord/322538954119184384.svg?logo=discord&logoColor=white&label=Discord&color=5865F2)](https://discord.gg/Gitea \"Join the Discord chat at https://discord.gg/Gitea\")\n\nIf you have questions that are not covered by the [documentation](https://docs.gitea.com/), you can get in contact with us on our [Discord server](https://discord.gg/Gitea) or create a post in the [discourse forum](https://forum.gitea.com/).\n\n## Authors\n\n- [Maintainers](https://github.com/orgs/go-gitea/people)\n- [Contributors](https://github.com/go-gitea/gitea/graphs/contributors)\n- [Translators](options/locale/TRANSLATORS)\n\n## Backers\n\nThank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/gitea#backer)]\n\n<a href=\"https://opencollective.com/gitea#backers\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/backers.svg?width=890\"></a>\n\n## Sponsors\n\nSupport this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/gitea#sponsor)]\n\n<a href=\"https://opencollective.com/gitea/sponsor/0/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/gitea/sponsor/1/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/gitea/sponsor/2/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/gitea/sponsor/3/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/3/avatar.svg\"></a>\n<a href=\"https://opencollective.com/gitea/sponsor/4/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/4/avatar.svg\"></a>\n<a href=\"https://opencollective.com/gitea/sponsor/5/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/5/avatar.svg\"></a>\n<a href=\"https://opencollective.com/gitea/sponsor/6/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/6/avatar.svg\"></a>\n<a href=\"https://opencollective.com/gitea/sponsor/7/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/7/avatar.svg\"></a>\n<a href=\"https://opencollective.com/gitea/sponsor/8/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/8/avatar.svg\"></a>\n<a href=\"https://opencollective.com/gitea/sponsor/9/website\" target=\"_blank\"><img src=\"https://opencollective.com/gitea/sponsor/9/avatar.svg\"></a>\n\n## FAQ\n\n**How do you pronounce Gitea?**\n\nGitea is pronounced [/ɡɪ’ti:/](https://youtu.be/EM71-2uDAoY) as in \"gi-tea\" with a hard g.\n\n**How do I configure Gitea?**\n\nFor dynamic config options, you can change it on your admin panel's configuration section.\n\nFor static config options, you can edit your `app.ini` file and resart the instance.\nSee [app.example.ini](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini) or [configuration documentation](https://docs.gitea.com/administration/config-cheat-sheet) for more details.\n\n**Where can I find the security patches?**\n\nIn the [release log](https://github.com/go-gitea/gitea/releases) or the [change log](https://github.com/go-gitea/gitea/blob/main/CHANGELOG.md), search for the keyword `SECURITY` to find the security patches.\n\n(more FAQs are listed in [FAQ documentation](https://docs.gitea.com/help/faq))\n\n## License\n\nThis project is licensed under the MIT License.\nSee the [LICENSE](https://github.com/go-gitea/gitea/blob/main/LICENSE) file\nfor the full license text.\n\n## Further information\n\n<details>\n<summary>Looking for an overview of the interface? Check it out the screenshots!</summary>\n\n### Login/Register Page\n\n![Login](https://dl.gitea.com/screenshots/login.png)\n![Register](https://dl.gitea.com/screenshots/register.png)\n\n### User Dashboard\n\n![Home](https://dl.gitea.com/screenshots/home.png)\n![Issues](https://dl.gitea.com/screenshots/issues.png)\n![Pull Requests](https://dl.gitea.com/screenshots/pull_requests.png)\n![Milestones](https://dl.gitea.com/screenshots/milestones.png)\n\n### User Profile\n\n![Profile](https://dl.gitea.com/screenshots/user_profile.png)\n\n### Explore\n\n![Repos](https://dl.gitea.com/screenshots/explore_repos.png)\n![Users](https://dl.gitea.com/screenshots/explore_users.png)\n![Orgs](https://dl.gitea.com/screenshots/explore_orgs.png)\n\n### Repository\n\n![Home](https://dl.gitea.com/screenshots/repo_home.png)\n![Commits](https://dl.gitea.com/screenshots/repo_commits.png)\n![Branches](https://dl.gitea.com/screenshots/repo_branches.png)\n![Labels](https://dl.gitea.com/screenshots/repo_labels.png)\n![Milestones](https://dl.gitea.com/screenshots/repo_milestones.png)\n![Releases](https://dl.gitea.com/screenshots/repo_releases.png)\n![Tags](https://dl.gitea.com/screenshots/repo_tags.png)\n\n#### Repository Issue\n\n![List](https://dl.gitea.com/screenshots/repo_issues.png)\n![Issue](https://dl.gitea.com/screenshots/repo_issue.png)\n\n#### Repository Pull Requests\n\n![List](https://dl.gitea.com/screenshots/repo_pull_requests.png)\n![Pull Request](https://dl.gitea.com/screenshots/repo_pull_request.png)\n![File](https://dl.gitea.com/screenshots/repo_pull_request_file.png)\n![Commits](https://dl.gitea.com/screenshots/repo_pull_request_commits.png)\n\n#### Repository Actions\n\n![List](https://dl.gitea.com/screenshots/repo_actions.png)\n![Details](https://dl.gitea.com/screenshots/repo_actions_run.png)\n\n#### Repository Activity\n\n![Activity](https://dl.gitea.com/screenshots/repo_activity.png)\n![Contributors](https://dl.gitea.com/screenshots/repo_contributors.png)\n![Code Frequency](https://dl.gitea.com/screenshots/repo_code_frequency.png)\n![Recent Commits](https://dl.gitea.com/screenshots/repo_recent_commits.png)\n\n### Organization\n\n![Home](https://dl.gitea.com/screenshots/org_home.png)\n\n</details>\n",
    "manifest_file": "go.mod",
    "manifest_content": "module gitea.dev\n\ngo 1.26.4\n\nrequire (\n\tcodeberg.org/gusted/mcaptcha v0.0.0-20220723083913-4f3072e1d570\n\tconnectrpc.com/connect v1.20.0\n\tgitea.com/gitea/runner v1.0.8\n\tgitea.com/go-chi/binding v0.0.0-20260414111559-654cea7ac60a\n\tgitea.com/go-chi/cache v0.2.1\n\tgitea.com/go-chi/captcha v0.0.0-20240315150714-fb487f629098\n\tgitea.com/go-chi/session v0.0.0-20251124165456-68e0254e989e\n\tgitea.com/lunny/dingtalk_webhook v0.0.0-20171025031554-e3534c89ef96\n\tgitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4\n\tgitea.dev/actions-proto-go v0.6.0\n\tgitea.dev/sdk v1.1.0\n\tgithub.com/42wim/httpsig v1.2.4\n\tgithub.com/42wim/sshsig v0.0.0-20260317195500-b9f38cf0d432\n\tgithub.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0\n\tgithub.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.7.0\n\tgithub.com/Azure/go-ntlmssp v0.1.1\n\tgithub.com/Necoro/html2text v0.0.0-20250804200300-7bf1ce1c7347\n\tgithub.com/ProtonMail/go-crypto v1.4.1\n\tgithub.com/PuerkitoBio/goquery v1.12.0\n\tgithub.com/SaveTheRbtz/zstd-seekable-format-go/pkg v0.10.0\n\tgithub.com/alecthomas/chroma/v2 v2.27.0\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.19.24\n\tgithub.com/aws/aws-sdk-go-v2/service/codecommit v1.34.4\n\tgithub.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb\n\tgithub.com/blevesearch/bleve/v2 v2.6.0\n\tgithub.com/bohde/codel v0.2.0\n\tgithub.com/buildkite/terminal-to-html/v3 v3.16.8\n\tgithub.com/caddyserver/certmagic v0.25.4\n\tgithub.com/charmbracelet/git-lfs-transfer v0.1.1-0.20260309112543-12416315a635\n\tgithub.com/chi-middleware/proxy v1.1.1\n\tgithub.com/dlclark/regexp2/v2 v2.2.2\n\tgithub.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707\n\tgithub.com/dustin/go-humanize v1.0.1\n\tgithub.com/editorconfig/editorconfig-core-go/v2 v2.6.4\n\tgithub.com/emersion/go-imap v1.2.1\n\tgithub.com/emirpasic/gods v1.18.1\n\tgithub.com/ethantkoenig/rupture v1.0.1\n\tgithub.com/felixge/fgprof v0.9.5\n\tgithub.com/fsnotify/fsnotify v1.10.1\n\tgithub.com/getkin/kin-openapi v0.140.0\n\tgithub.com/gliderlabs/ssh v0.3.8\n\tgithub.com/go-chi/chi/v5 v5.3.0\n\tgithub.com/go-chi/cors v1.2.2\n\tgithub.com/go-co-op/gocron/v2 v2.21.2\n\tgithub.com/go-enry/go-enry/v2 v2.9.6\n\tgithub.com/go-git/go-billy/v5 v5.9.0\n\tgithub.com/go-git/go-git/v5 v5.19.1\n\tgithub.com/go-ldap/ldap/v3 v3.4.13\n\tgithub.com/go-redsync/redsync/v4 v4.16.0\n\tgithub.com/go-sql-driver/mysql v1.10.0\n\tgithub.com/go-webauthn/webauthn v0.17.4\n\tgithub.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f\n\tgithub.com/gogs/go-gogs-client v0.0.0-20210131175652-1d7215cd8d85\n\tgithub.com/golang-jwt/jwt/v5 v5.3.1\n\tgithub.com/google/go-github/v88 v88.0.0\n\tgithub.com/google/licenseclassifier/v2 v2.0.0\n\tgithub.com/google/pprof v0.0.0-20260604005048-7023385849c0\n\tgithub.com/google/uuid v1.6.0\n\tgithub.com/gorilla/feeds v1.2.0\n\tgithub.com/gorilla/sessions v1.4.0\n\tgithub.com/hashicorp/go-version v1.9.0\n\tgithub.com/hashicorp/golang-lru/v2 v2.0.7\n\tgithub.com/huandu/xstrings v1.5.0\n\tgithub.com/jhillyerd/enmime/v2 v2.4.1\n\tgithub.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51\n\tgithub.com/klauspost/compress v1.18.6\n\tgithub.com/klauspost/cpuid/v2 v2.3.0\n\tgithub.com/lib/pq v1.12.3\n\tgithub.com/markbates/goth v1.82.0\n\tgithub.com/mattn/go-isatty v0.0.22\n\tgithub.com/mattn/go-sqlite3 v1.14.47\n\tgithub.com/meilisearch/meilisearch-go v0.36.3\n\tgithub.com/mholt/archives v0.1.5\n\tgithub.com/microcosm-cc/bluemonday v1.0.27\n\tgithub.com/microsoft/go-mssqldb v1.10.0\n\tgithub.com/minio/minio-go/v7 v7.2.0\n\tgithub.com/msteinert/pam/v2 v2.1.0\n\tgithub.com/niklasfasching/go-org v1.9.1\n\tgithub.com/opencontainers/go-digest v1.0.0\n\tgithub.com/opencontainers/image-spec v1.1.1\n\tgithub.com/pquerna/otp v1.5.0\n\tgithub.com/prometheus/client_golang v1.23.2\n\tgithub.com/quasoft/websspi v1.1.2\n\tgithub.com/redis/go-redis/v9 v9.21.0\n\tgithub.com/robfig/cron/v3 v3.0.1\n\tgithub.com/santhosh-tekuri/jsonschema/v6 v6.0.2\n\tgithub.com/sassoftware/go-rpmutils v0.4.0\n\tgithub.com/sergi/go-diff v1.4.0\n\tgithub.com/stretchr/testify v1.11.1\n\tgithub.com/syndtr/goleveldb v1.0.0\n\tgithub.com/tstranex/u2f v1.0.0\n\tgithub.com/ulikunitz/xz v0.5.15\n\tgithub.com/urfave/cli-docs/v3 v3.1.0\n\tgithub.com/urfave/cli/v3 v3.10.0\n\tgithub.com/wneessen/go-mail v0.7.3\n\tgithub.com/yohcop/openid-go v1.0.1\n\tgithub.com/yuin/goldmark v1.8.2\n\tgithub.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc\n\tgitlab.com/gitlab-org/api/client-go/v2 v2.42.0\n\tgo.yaml.in/yaml/v4 v4.0.0-rc.5\n\tgolang.org/x/crypto v0.53.0\n\tgolang.org/x/image v0.43.0\n\tgolang.org/x/mod v0.37.0\n\tgolang.org/x/net v0.56.0\n\tgolang.org/x/oauth2 v0.36.0\n\tgolang.org/x/sync v0.21.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\tgoogle.golang.org/protobuf v1.36.11\n\tgopkg.in/ini.v1 v1.67.3\n\tmodernc.org/sqlite v1.53.0\n\tmvdan.cc/xurls/v2 v2.6.0\n\tstrk.kbt.io/projects/go/libravatar v0.0.0-20260301104140-add494e31dab\n\txorm.io/builder v0.3.13\n\txorm.io/xorm v1.3.11\n)\n\nrequire (\n\tcloud.google.com/go/compute/metadata v0.9.0 // indirect\n\tdario.cat/mergo v1.0.2 // indirect\n\tfilippo.io/edwards25519 v1.2.0 // indirect\n\tgithub.com/Azure/azure-",
    "strategic_keywords": [
      "rag",
      "workflow"
    ],
    "relationship_label": "Workspace 组件",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "go.mod"
    ],
    "score_breakdown": {
      "heat": 12,
      "relevance": 16,
      "novelty": 8,
      "productize": 14,
      "adoption": 10,
      "relation": 8,
      "risk_signal": 6,
      "total": 74
    },
    "strategic_score": 74
  },
  {
    "owner": "vanloctech",
    "name": "youwee",
    "full_name": "vanloctech/youwee",
    "url": "https://github.com/vanloctech/youwee",
    "description": "A beautiful, cross-platform downloader for YouTube, TikTok, Instagram, and 1800+ sites (yt-dlp GUI) with AI video summaries and post-processing",
    "language": "TypeScript",
    "total_stars": 1031,
    "forks": 130,
    "stars_this_period": 29,
    "source_slice": "typescript",
    "source_slices": [
      "typescript"
    ],
    "metadata": {
      "topics": [
        "ai",
        "ai-agents",
        "facebook-downloader",
        "ffmpeg",
        "ffmpeg-agent",
        "instagram-downloader",
        "llm",
        "open-source",
        "react",
        "rust",
        "summary-video",
        "tauri",
        "tiktok",
        "tiktok-downloader-app",
        "youtube-dl",
        "youwee",
        "yt-dlp",
        "yt-dlp-gui"
      ],
      "license": "MIT",
      "open_issues": 6,
      "created_at": "2026-01-18T10:30:15Z",
      "pushed_at": "2026-06-29T17:47:02Z",
      "homepage": "",
      "default_branch": "main",
      "forks": 130,
      "watchers": 6,
      "archived": false,
      "size_kb": 53207
    },
    "readme_content": "# Youwee\n\n<div align=\"center\">\n\n  [![English](https://img.shields.io/badge/lang-English-blue)](README.md)\n  [![Tiếng Việt](https://img.shields.io/badge/lang-Tiếng_Việt-red)](docs/README.vi.md)\n  [![简体中文](https://img.shields.io/badge/lang-简体中文-green)](docs/README.zh-CN.md)\n  ![Français](https://img.shields.io/badge/lang-Français-0055A4)\n  ![Русский](https://img.shields.io/badge/lang-Русский-1F5FBF)\n  ![العربية](https://img.shields.io/badge/lang-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-0A8F6A)\n  ![ไทย](https://img.shields.io/badge/lang-%E0%B9%84%E0%B8%97%E0%B8%A2-7B1FA2)\n  ![Português](https://img.shields.io/badge/lang-Português-009C3B)\n  [![Vote for next language](https://img.shields.io/badge/Vote-Next_Language-orange?logo=github)](https://github.com/vanloctech/youwee/discussions/18)\n\n  <img src=\"src-tauri/icons/icon.png\" alt=\"Youwee Logo\" width=\"128\" height=\"128\">\n  \n  **Beautiful and Ultimate yt-dlp GUI & Video Downloader - Processing - Free & Open Source**\n\n  [![Downloads](https://img.shields.io/github/downloads/vanloctech/youwee/total?label=Downloads)](https://github.com/vanloctech/youwee/releases)\n  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n  [![Reddit](https://img.shields.io/badge/Reddit-r%2Fyouwee-FF4500?logo=reddit&logoColor=white)](https://www.reddit.com/r/youwee)\n  [![Website](https://img.shields.io/badge/Website-youwee.app-0EA5E9)](https://youwee.app)\n  [![Discord](https://img.shields.io/badge/Discord-Community-5865F2?logo=discord&logoColor=white)](https://discord.gg/yCrs9hcw)\n\n<a href=\"https://www.producthunt.com/products/youwee/reviews/new?utm_source=badge-product_review&utm_medium=badge&utm_source=badge-youwee\" target=\"_blank\"><img src=\"https://api.producthunt.com/widgets/embed-image/v1/product_review.svg?product_id=1154224&theme=light\" alt=\"Youwee - A modern YouTube downloader @yt-dlp GUI for cross-platform | Product Hunt\" width=\"250\" height=\"54\"></a>\n</div>\n\n---\n\n## Features\n\n- **Video Downloads** — YouTube, TikTok, Facebook, Instagram, Bilibili, Youku, and 1800+ sites\n- **Browser Extension Bridge** — Chromium + Firefox extension with floating button, media/quality picker, and one-click `Download now` / `Add to queue` send to Youwee app\n- **Plugins & Workflow Automation** — Install signed plugins, configure custom fields, assign them to download workflows, and extend Youwee with notifications, uploads, and post-download automations\n- **Channel Follow** — Follow YouTube, Bilibili & Youku channels, get notified of new videos, auto-download, and manage from system tray\n- **Metadata Fetcher** — Download video info, descriptions, comments, and thumbnails without the video\n- **Live Stream Support** — Download live streams with dedicated toggle\n- **AI Video Summary** — Summarize videos with Gemini, OpenAI, or Ollama\n- **AI Video Processing** — Edit videos using natural language (cut, convert, resize, extract audio)\n- **Time Range Download (Cut Video)** — Download only the segment you need by setting start/end time\n- **Batch & Playlist** — Download multiple videos or entire playlists\n- **Audio Extraction** — Extract audio in MP3, M4A, or Opus formats\n- **Subtitle Support** — Download or embed subtitles\n- **Subtitle Workshop** — Create, edit, and refine subtitles (SRT/VTT/ASS) with timing tools, find/replace, auto-fix, AI Translate, AI Grammar Fix, and Whisper generation\n- **Subtitle Page Core Features** — Waveform/spectrogram timeline, shot-change sync, realtime QC with style profiles, split/merge tools, translator mode (source/target), and batch/project operations\n- **Post-Processing** — Auto-embed metadata, thumbnail, and subtitles (when enabled) into output files\n- **SponsorBlock** — Automatically skip sponsors, intros, outros, and self-promotions with remove/mark/custom modes\n- **Speed Limit** — Control download bandwidth (KB/s, MB/s, GB/s)\n- **Download Library** — Track and manage all your downloads\n- **6 Beautiful Themes** — Midnight, Aurora, Sunset, Ocean, Forest, Candy\n- **Fast & Lightweight** — Designed for minimal resource usage\n\n## Screenshots\n![Youwee](docs/screenshots/youwee-youtube.png)\n\n<details>\n<summary><strong>More Screenshots</strong></summary>\n\n![Youwee - Universal](docs/screenshots/youwee-universal.png)\n![Youwee - Gallery](docs/screenshots/youwee-gallery.png)\n![Youwee - Channels](docs/screenshots/youwee-channels.png)\n![Youwee - AI Summary](docs/screenshots/youwee-ai-summary.png)\n![Youwee - Processing 1](docs/screenshots/youwee-processing.png)\n![Youwee - Processing 2](docs/screenshots/youwee-processing-2.png)\n![Youwee - Subtitles](docs/screenshots/youwee-subtitles.png)\n![Youwee - Metadata](docs/screenshots/youwee-metadata.png)\n![Youwee - Library](docs/screenshots/youwee-library.png)\n![Youwee - Logs](docs/screenshots/youwee-logs.png)\n![Youwee - Setting - General](docs/screenshots/youwee-setting-general.png)\n![Youwee - Setting - Dependencies](docs/screenshots/youwee-setting-dependencies.png)\n![Youwee - Setting - Download](docs/screenshots/youwee-setting-download.png)\n![Youwee - Setting - AI Features](docs/screenshots/youwee-setting-ai-features.png)\n![Youwee - Setting - Network & Auth](docs/screenshots/youwee-setting-network-auth.png)\n![Youwee - Setting - Plugin](docs/screenshots/youwee-setting-plugins.png)\n![Youwee - Setting - Remote Download](docs/screenshots/youwee-setting-remote-download.png)\n![Youwee - Setting - Extension](docs/screenshots/youwee-setting-extension.png)\n![Youwee - Setting - About](docs/screenshots/youwee-setting-about.png)\n![Youwee - Browser Extension](docs/screenshots/youwee-extension-chrome-firefox.png)\n\n</details>\n\n## Demo Video\n\n▶️ [Watch on YouTube](https://youtu.be/7eaKOsFAP1s)\n\n## Legal Notice\n\nYouwee is a local utility for downloading and processing media from URLs provided by the user. It is not affiliated with YouTube or any other media platform.\n\nUse Youwee only with content you own, have permission to use, or are legally allowed to access and store. Users are responsible for complying with applicable laws, platform terms, copyright rules, and any required permissions. The Youwee project and maintainers are not responsible for misuse of the app.\n\n## Installation\n\n### Download for your platform\n\n> ⚠️ **Note**: The app is not signed with an Apple Developer certificate yet. If macOS blocks the app, open terminal and run:\n> ```bash\n> xattr -cr /Applications/Youwee.app\n> ```\n\n| Platform | Download                                                                                                                                                                                                                                   |\n|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Windows** (x64) | [Download .msi](https://github.com/vanloctech/youwee/releases/latest/download/Youwee-Windows.msi) · [Download .exe](https://github.com/vanloctech/youwee/releases/latest/download/Youwee-Windows-Setup.exe)                                |\n| **macOS** (Apple Silicon) | [Download .dmg](https://github.com/vanloctech/youwee/releases/latest/download/Youwee-Mac-Apple-Silicon.dmg)                                                                                                                                |\n| **macOS** (Intel) | [Download .dmg](https://github.com/vanloctech/youwee/releases/latest/download/Youwee-Mac-Intel.dmg)                                                                                                                                        |\n| **Linux** (x64) | [Download .deb](https://github.com/vanloctech/youwee/releases/latest/download/Youwee-Linux.deb) · [Download .AppImage](https://github.com/vanloctech/youwee/releases/latest/download/Youwee-Linux.AppImage) (Recommend for auto update) |\n\n> See all releases on the [Releases page](https://github.com/vanloctech/youwee/releases)\n\n### Browser Extension (Chromium + Firefox)\n\n| Browser | Download |\n|---------|----------|\n| **Chromium** (Chrome/Edge/Brave/Opera/Vivaldi/Arc/Coc Coc) | [Download .zip](https://github.com/vanloctech/youwee/releases/latest/download/Youwee-Extension-Chromium.zip) |\n| **Firefox** | [Download .xpi](https://github.com/vanloctech/youwee/releases/latest/download/Youwee-Extension-Firefox-signed.xpi) |\n\n- One-click send current page to Youwee with `Download now` or `Add to queue`\n- Floating button supports `Video/Audio` + quality selection on supported sites\n- Popup works on any valid HTTP/HTTPS tab\n- Guide: [youwee.app/docs/browser-extension](https://youwee.app/docs/browser-extension)\n\n### Plugins\n\nExtend Youwee with signed `.ywp` plugins for post-download workflows such as notifications, uploads, and third-party integrations.\n\n- Recommended plugins and install guide: [PLUGINS.md](PLUGINS.md)\n- SDK: [sdk-js/README.md](sdk-js/README.md) · [youwee-sdk](https://www.npmjs.com/package/youwee-sdk)\n\n### Build from Source\n\n#### Prerequisites\n\n- [Bun](https://bun.sh/) (v1.3.5 or later)\n- [Rust](https://www.rust-lang.org/) (v1.70 or later)\n- [Tauri CLI](https://tauri.app/v1/guides/getting-started/prerequisites)\n\n#### Steps\n\n```bash\n# Clone the repository\ngit clone https://github.com/vanloctech/youwee.git\ncd youwee\n\n# Install dependencies\nbun install\n\n# Run in development mode\nbun run tauri dev\n\n# Build for production\nbun run tauri build\n```\n\n## Sponsor\n\n<div>\n  <a href=\"https://www.atlascloud.ai/\">\n    <img src=\"docs/sponsors/atlascloud.svg\" alt=\"Atlas Cloud\" width=\"220\">\n  </a>\n</div>\n\n## Contributing\n\nWe welcome contributions. See [Contributing Guide](CONTRIBUTING.md).\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Contact\n\n- **Website**: [youwee.app](https://youwee.app)\n- **Discord**: [Youwee Community](https://discord.gg/yCrs9hcw)\n- **GitHub**: [@vanloctech](https://github.com/vanloctech)\n- **Issues**: [GitHub Issues](https://github.com/vanloctech/youwee/issues)\n\n---\n\n## Star History\n\n<picture>\n  <source\n    media=\"(prefers-color-scheme: dark)\"\n    srcset=\"\n      https://api.star-history.com/svg?repos=vanloctech/youwee&type=Date&theme=dark\n    \"\n  />\n  <source\n    media=\"(prefers-color-scheme: light)\"\n    srcset=\"\n      https://api.star-history.com/svg?repos=vanloctech/youwee&type=Date\n    \"\n  />\n  <img\n    alt=\"Star History Chart\"\n    src=\"https://api.star-history.com/svg?repos=vanloctech/youwee&type=Date\"\n  />\n</picture>\n",
    "manifest_file": "package.json",
    "manifest_content": "{\n  \"name\": \"youwee\",\n  \"private\": true,\n  \"version\": \"0.18.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"test\": \"bun test\",\n    \"build\": \"tsc -b && vite build\",\n    \"build:sdk\": \"tsc -p sdk-js/tsconfig.json\",\n    \"lint\": \"biome check .\",\n    \"preview\": \"vite preview\",\n    \"tauri\": \"tauri\",\n    \"tauri:dev\": \"tauri dev\",\n    \"tauri:build\": \"tauri build\",\n    \"ext:build\": \"bun run extensions/youwee-webext/scripts/build.mjs\",\n    \"ext:package\": \"bun run ext:build && bun run extensions/youwee-webext/scripts/package.mjs\"\n  },\n  \"dependencies\": {\n    \"@fortawesome/fontawesome-svg-core\": \"^7.2.0\",\n    \"@fortawesome/free-brands-svg-icons\": \"^7.2.0\",\n    \"@fortawesome/free-solid-svg-icons\": \"^7.2.0\",\n    \"@fortawesome/react-fontawesome\": \"^3.3.1\",\n    \"@radix-ui/react-alert-dialog\": \"^1.1.15\",\n    \"@radix-ui/react-collapsible\": \"^1.1.12\",\n    \"@radix-ui/react-dialog\": \"^1.1.15\",\n    \"@radix-ui/react-label\": \"^2.1.8\",\n    \"@radix-ui/react-popover\": \"^1.1.15\",\n    \"@radix-ui/react-progress\": \"^1.1.8\",\n    \"@radix-ui/react-scroll-area\": \"^1.2.10\",\n    \"@radix-ui/react-select\": \"^2.2.6\",\n    \"@radix-ui/react-slider\": \"^1.3.6\",\n    \"@radix-ui/react-slot\": \"^1.2.4\",\n    \"@radix-ui/react-switch\": \"^1.2.6\",\n    \"@radix-ui/react-tabs\": \"^1.1.13\",\n    \"@radix-ui/react-tooltip\": \"^1.2.8\",\n    \"@tauri-apps/api\": \"^2.9.1\",\n    \"@tauri-apps/plugin-deep-link\": \"^2.4.0\",\n    \"@tauri-apps/plugin-dialog\": \"^2.6.0\",\n    \"@tauri-apps/plugin-fs\": \"^2.4.5\",\n    \"@tauri-apps/plugin-notification\": \"^2.3.3\",\n    \"@tauri-apps/plugin-opener\": \"^2.5.3\",\n    \"@tauri-apps/plugin-process\": \"^2.3.1\",\n    \"@tauri-apps/plugin-shell\": \"^2.3.4\",\n    \"@tauri-apps/plugin-updater\": \"^2.9.0\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"clsx\": \"^2.1.1\",\n    \"i18next\": \"^25.8.0\",\n    \"i18next-browser-languagedetector\": \"^8.2.0\",\n    \"lucide-react\": \"^0.562.0\",\n    \"react\": \"^19.2.0\",\n    \"react-dom\": \"^19.2.0\",\n    \"react-i18next\": \"^16.5.4\",\n    \"tailwind-merge\": \"^3.4.0\",\n    \"tailwindcss-animate\": \"^1.0.7\"\n  },\n  \"devDependencies\": {\n    \"@tauri-apps/cli\": \"^2.9.6\",\n    \"@types/node\": \"^24.10.1\",\n    \"@types/react\": \"^19.2.5\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"@vitejs/plugin-react\": \"^5.1.1\",\n    \"autoprefixer\": \"^10.4.23\",\n    \"postcss\": \"^8.5.11\",\n    \"tailwindcss\": \"^3.4.19\",\n    \"typescript\": \"~5.9.3\",\n    \"vite\": \"^7.3.2\",\n    \"@biomejs/biome\": \"2.3.10\"\n  }\n}\n",
    "strategic_keywords": [
      "agent",
      "agents",
      "llm",
      "workflow",
      "automation"
    ],
    "relationship_label": "Skill 来源",
    "data_confidence": "high",
    "evidence_sources": [
      "github_trending",
      "github_repo_api",
      "readme",
      "package.json"
    ],
    "score_breakdown": {
      "heat": 10,
      "relevance": 20,
      "novelty": 8,
      "productize": 11,
      "adoption": 10,
      "relation": 10,
      "risk_signal": 6,
      "total": 75
    },
    "strategic_score": 75
  }
]